gfsmAlgebra.h File Reference

Algebraic operations on automata. More...

#include <gfsmCompound.h>
#include <gfsmArcIndex.h>
Include dependency graph for gfsmAlgebra.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

gfsmClosure.c: closure (self-concatenation)
gfsmAutomatongfsm_automaton_closure (gfsmAutomaton *fsm, gboolean is_plus)
gfsmAutomatongfsm_automaton_n_closure (gfsmAutomaton *fsm, guint n)
gfsmAutomatongfsm_automaton_optional (gfsmAutomaton *fsm)
gfsmComplement.c: Complementation and Completion
gfsmAutomatongfsm_automaton_complement (gfsmAutomaton *fsm)
gfsmAutomatongfsm_automaton_complement_full (gfsmAutomaton *fsm, gfsmAlphabet *alph)
gfsmAutomatongfsm_automaton_complete (gfsmAutomaton *fsm, gfsmAlphabet *alph, gfsmStateId *sinkp)
gfsmConcat.c: Concatenation
gfsmAutomatongfsm_automaton_n_concat (gfsmAutomaton *fsm1, gfsmAutomaton *fsm2, guint n)
gfsmAutomatongfsm_automaton_concat (gfsmAutomaton *fsm1, gfsmAutomaton *_fsm2)
gfsmConnect.c: Co-Accessibility & Pruning
gfsmAutomatongfsm_automaton_connect (gfsmAutomaton *fsm)
gfsmAutomatongfsm_automaton_connect_fw (gfsmAutomaton *fsm, gfsmBitVector *visited)
gfsmAutomatongfsm_automaton_connect_bw (gfsmAutomaton *fsm, gfsmReverseArcIndex *rarcs, gfsmBitVector *finalizable)
gfsmAutomatongfsm_automaton_prune_states (gfsmAutomaton *fsm, gfsmBitVector *wanted)
gfsmDifference.c: Difference
gfsmAutomatongfsm_automaton_difference (gfsmAutomaton *fsm1, gfsmAutomaton *fsm2)
gfsmAutomatongfsm_automaton_difference_full (gfsmAutomaton *fsm1, gfsmAutomaton *fsm2, gfsmAutomaton *diff)
gfsmIntersect.c: Intersection
gfsmAutomatongfsm_automaton_intersect (gfsmAutomaton *fsm1, gfsmAutomaton *fsm2)
gfsmAutomatongfsm_automaton_intersect_full (gfsmAutomaton *fsm1, gfsmAutomaton *fsm2, gfsmAutomaton *intersect, gfsmStatePairEnum *spenum)
gfsmStateId gfsm_automaton_intersect_visit_ (gfsmStatePair sp, gfsmAutomaton *fsm1, gfsmAutomaton *fsm2, gfsmAutomaton *fsm, gfsmStatePairEnum *spenum, gfsmComposeFlags flags)
gfsmMinimize.c: Minimization
gfsmAutomatongfsm_automaton_minimize (gfsmAutomaton *fsm)
gfsmAutomatongfsm_automaton_minimize_full (gfsmAutomaton *fsm, gboolean rmeps)
gfsmAutomatongfsm_automaton_compact (gfsmAutomaton *fsm)
gfsmAutomatongfsm_automaton_compact_full (gfsmAutomaton *fsm, gboolean rmeps)
gfsmProject.c: Projection & Inversion
gfsmAutomatongfsm_automaton_invert (gfsmAutomaton *fsm)
gfsmAutomatongfsm_automaton_project (gfsmAutomaton *fsm, gfsmLabelSide which)
gfsmProduct.c: Cartesian Product
gfsmAutomatongfsm_automaton_product (gfsmAutomaton *fsm1, gfsmAutomaton *fsm2)
gfsmAutomatongfsm_automaton_product2 (gfsmAutomaton *fsm1, gfsmAutomaton *fsm2)
gfsmReplace.c: Replacement
gfsmAutomatongfsm_automaton_replace (gfsmAutomaton *fsm1, gfsmLabelVal lo, gfsmLabelVal hi, gfsmAutomaton *fsm2)
gfsmAutomatongfsm_automaton_insert_automaton (gfsmAutomaton *fsm1, gfsmStateId q1from, gfsmStateId q1to, gfsmAutomaton *fsm2, gfsmWeight w)
gfsmReverse.c: Reversal
gfsmAutomatongfsm_automaton_reverse (gfsmAutomaton *fsm)
gfsmRmEpsilon.c: Epsilon Removal
gfsmAutomatongfsm_automaton_rmepsilon (gfsmAutomaton *fsm)
gfsmSigma.c: Alphabet Recognizer
gfsmAutomatongfsm_automaton_sigma (gfsmAutomaton *fsm, gfsmAlphabet *abet)
gfsmUnion.c: Union
gfsmAutomatongfsm_automaton_union (gfsmAutomaton *fsm1, gfsmAutomaton *fsm2)

gfsmCompose.c: Composition

enum  gfsmComposeFlagsE { gfsmCFEfsm1NeedsArcSort = 0x1, gfsmCFEfsm2NeedsArcSort = 0x2 }
 Enum type for low-level flags to gfsm_automaton_compose_visit_state_() More...
typedef guint32 gfsmComposeFlags
gfsmAutomatongfsm_automaton_compose (gfsmAutomaton *fsm1, gfsmAutomaton *fsm2)
gfsmAutomatongfsm_automaton_compose_full (gfsmAutomaton *fsm1, gfsmAutomaton *fsm2, gfsmAutomaton *composition, gfsmComposeStateEnum *spenum)
void gfsm_automaton_compose_visit_ (gfsmStateId qid, gfsmAutomaton *fsm1, gfsmAutomaton *fsm2, gfsmAutomaton *fsm, gfsmComposeStateEnum *spenum, GArray *spenumr, GQueue *queue, gfsmComposeFlags flags)

gfsmDeterminize.c: Determinization

#define gfsm_automaton_determinise(fsm)   gfsm_automaton_determinize(fsm)
#define gfsm_automaton_determinise_full(nfa, dfa)   gfsm_automaton_determinize_full((nfa),(dfa))
gfsmAutomatongfsm_automaton_determinize (gfsmAutomaton *fsm)
gfsmAutomatongfsm_automaton_determinize_full (gfsmAutomaton *nfa, gfsmAutomaton *dfa)

Detailed Description

Todo:

bestpath() ?

encode() ?

equiv() ?

deterministic union ?

xerox-style property-savvy lookup()?

Macro Definition Documentation

#define gfsm_automaton_determinise (   fsm)    gfsm_automaton_determinize(fsm)
#define gfsm_automaton_determinise_full (   nfa,
  dfa 
)    gfsm_automaton_determinize_full((nfa),(dfa))

Typedef Documentation

typedef guint32 gfsmComposeFlags

flags for gfsm_automaton_compose_visit_state_()

Enumeration Type Documentation

Enumerator:
gfsmCFEfsm1NeedsArcSort 
gfsmCFEfsm2NeedsArcSort 

Function Documentation

gfsmAutomaton* gfsm_automaton_closure ( gfsmAutomaton fsm,
gboolean  is_plus 
)

Compute transitive or reflexive-&-transitive closure of fsm.

Note
Destructively alters fsm .
Parameters
fsmAutomaton
is_plusWhich type of closure to compute:
  • TRUE transitive closure
  • FALSE reflexive & transitive closure
Returns
modified fsm
gfsmAutomaton* gfsm_automaton_n_closure ( gfsmAutomaton fsm,
guint  n 
)

Compute n-ary closure of fsm.

Note
Destructively alters fsm.
Parameters
fsmAutomaton
nNumber of repetitions
Returns
modified fsm
gfsmAutomaton* gfsm_automaton_optional ( gfsmAutomaton fsm)

Make fsm optional.

Note
Destructively alters fsm
Parameters
fsmAutomaton
Returns
modified fsm
gfsmAutomaton* gfsm_automaton_complement ( gfsmAutomaton fsm)

Compute the lower-side complement of fsm with respect to its own lower alphabet.

Note
Destructively alters fsm
Parameters
fsmAcceptor
Returns
fsm
gfsmAutomaton* gfsm_automaton_complement_full ( gfsmAutomaton fsm,
gfsmAlphabet alph 
)

Compute the lower-side complement of fsm with respect to the alphabet alph, which should contain all of the lower-labels from fsm.

Note
Destructively alters fsm.
Parameters
fsmAcceptor
alphAlphabet with respect to which to compute complement.
Returns
fsm
gfsmAutomaton* gfsm_automaton_complete ( gfsmAutomaton fsm,
gfsmAlphabet alph,
gfsmStateId sinkp 
)

Complete the lower side of automaton fsm with respect to the alphabet alph by directing "missing" arcs to the (new) state with id *sink.

Note
Destructively alters fsm.
Parameters
fsmAcceptor
alphaAlphabet with respect to which fsm is to be completed
sinkpPointer to a variable which on completion contains the Id of a (new) non-final sink state
Returns
fsm
gfsmAutomaton* gfsm_automaton_compose ( gfsmAutomaton fsm1,
gfsmAutomaton fsm2 
)

Compute the composition of fsm1 with fsm2 (upper-side of fsm1 intersection with lower-side of fsm2).

Parameters
fsm1Lower-middle transducer
fsm2Middle-upper transducer
Returns
Altered fsm1
Note
  • Pseudo-destructive on fsm1.
  • Runtime efficiency can be greatly improved if fsm1 is sorted on upper labels (gfsmASMUpper) and fsm2 is sorted on lower labels (gfsmASMLower).
See Also
gfsm_automaton_compose_full()
gfsmAutomaton* gfsm_automaton_compose_full ( gfsmAutomaton fsm1,
gfsmAutomaton fsm2,
gfsmAutomaton composition,
gfsmComposeStateEnum spenum 
)

Compute the composition of two transducers fsm1 and fsm2 into the transducer composition.

Parameters
fsm1Lower-middle transducer
fsm2Middle-upper transducer
compositionLower-upper transducer. May be passed as NULL to create a new automaton.
spenumMapping from (fsm1,fsm2,filter) gfsmComposeState s to composition (gfsmStateId)s, if it is passed as NULL, a temporary enum will be created and freed.
See Also
Mohri, Pereira, and Riley (1996), "Weighted Automata in Text and Speech Processing", In: Proc. ECAI '96, John Wiley & Sons, Ltd.
Returns
composition
void gfsm_automaton_compose_visit_ ( gfsmStateId  qid,
gfsmAutomaton fsm1,
gfsmAutomaton fsm2,
gfsmAutomaton fsm,
gfsmComposeStateEnum spenum,
GArray *  spenumr,
GQueue *  queue,
gfsmComposeFlags  flags 
)

Guts for gfsm_automaton_compose()

Returns
(new) StateId for sp
gfsmAutomaton* gfsm_automaton_n_concat ( gfsmAutomaton fsm1,
gfsmAutomaton fsm2,
guint  n 
)

Append fsm2 onto the end of fsm1 n times.

Note
Destructively alters fsm1.
Parameters
fsm1Automaton
fsm2Automaton
Returns
fsm1
gfsmAutomaton* gfsm_automaton_concat ( gfsmAutomaton fsm1,
gfsmAutomaton _fsm2 
)

Append _fsm2 onto the end of fsm1.

Note
Destructively alters fsm1.
Parameters
fsm1Automaton
fsm2Automaton
Returns
fsm1
gfsmAutomaton* gfsm_automaton_connect ( gfsmAutomaton fsm)

Remove non-coaccessible states from fsm. Calls gfsm_automaton_connect_fw() and gfsm_automaton_connect_bw()

Note
Destructively alters fsm
Parameters
fsmAutomaton
Returns
modified fsm
gfsmAutomaton* gfsm_automaton_connect_fw ( gfsmAutomaton fsm,
gfsmBitVector visited 
)

Remove non root-accessible states from fsm. Called by gfsm_automaton_connect()

Note
Destructively alters fsm
Parameters
fsmAutomaton
visitedBit-vector for traversal. Should have all bits set to zero. If passed as NULL, a new bit-vector will be created and freed.
Returns
modified fsm
gfsmAutomaton* gfsm_automaton_connect_bw ( gfsmAutomaton fsm,
gfsmReverseArcIndex rarcs,
gfsmBitVector finalizable 
)

Remove non-finalizable states from fsm. Called by gfsm_automaton_connect().

Note
Destructively alters fsm
Parameters
fsmAutomaton
rarcsReverse arc-index as returned by gfsm_automaton_reverse_arc_index(). If passed as NULL, gfsm_automaton_reverse_arc_index() will be called on a temporary arc index.
finalizableBit-vector for traversal. Should have all bits set to zero. If passed as NULL, a new bit-vector will be created and freed.
Returns
modified fsm
gfsmAutomaton* gfsm_automaton_prune_states ( gfsmAutomaton fsm,
gfsmBitVector wanted 
)

Utility for gfsm_automaton_connect_fw() and gfsm_automaton_connect_bw(). Prunes states from fsm whose id bit is not set in want

Parameters
fsmAutomaton
wantedBit-vector indexed by state id: bit id should be unset iff state id is to be removed.
Returns
modified fsm
gfsmAutomaton* gfsm_automaton_determinize ( gfsmAutomaton fsm)

Determinize acceptor fsm

  • Pseudo-destructive on fsm
  • Epsilon is treated like any other symbol.
  • Arc labels are treated as (input,output) pairs for purposes of state-equivalence-class construction: this may not be what you want.
Parameters
fsmAutomaton
Returns
altered fsm
See Also
gfsm_automaton_determinize_full()
gfsmAutomaton* gfsm_automaton_determinize_full ( gfsmAutomaton nfa,
gfsmAutomaton dfa 
)

Determinize automaton nfa to dfa

  • Epsilon is treated like any other symbol.
  • Arc labels are treated as (input,output) pairs.
Parameters
nfanon-deterministic acceptor
dfadeterministic acceptor to be constructed May be passed as NULL to create a new automaton.
Returns
dfa
gfsmAutomaton* gfsm_automaton_difference ( gfsmAutomaton fsm1,
gfsmAutomaton fsm2 
)

Remove language of acceptor fsm2 from acceptor fsm1.

  • Pseudo-destructively alters fsm1.
  • Really just an alias for intersect_full(fsm1,fsm2,NULL)
Parameters
fsm1Acceptor
fsm2Acceptor
Returns
fsm1
gfsmAutomaton* gfsm_automaton_difference_full ( gfsmAutomaton fsm1,
gfsmAutomaton fsm2,
gfsmAutomaton diff 
)

Compute difference of acceptors (fsm1 - fsm2) into acceptor diff-

Note
Really just an alias for intersect_full(fsm1,complement(clone(fsm2)),diff).
Parameters
fsm1Acceptor
fsm2Acceptor
diffOutput (difference) acceptor, may be passed as NULL to implicitly create a new automaton.
Returns
(possibly new) difference automaton diff
gfsmAutomaton* gfsm_automaton_intersect ( gfsmAutomaton fsm1,
gfsmAutomaton fsm2 
)

Compute the intersection of two acceptors fsm1 and fsm2 (lower-side intersection).

Note
Pseudo-destructive on fsm1.
Parameters
fsm1Acceptor
fsm2Acceptor
Returns
fsm1.
gfsmAutomaton* gfsm_automaton_intersect_full ( gfsmAutomaton fsm1,
gfsmAutomaton fsm2,
gfsmAutomaton intersect,
gfsmStatePairEnum spenum 
)

Compute the intersection of two acceptors fsm1 and fsm2 into the acceptor intersect.

Parameters
fsm1Acceptor
fsm2Acceptor
intersectOutput acceptor, may be NULL to create a new automaton.
spenumMapping from (fsm1,fsm2) (gfsmStatePair)s to intersect (gfsmStateId)s, may be NULL to use a temporary mapping.
Returns
intersect.
gfsmStateId gfsm_automaton_intersect_visit_ ( gfsmStatePair  sp,
gfsmAutomaton fsm1,
gfsmAutomaton fsm2,
gfsmAutomaton fsm,
gfsmStatePairEnum spenum,
gfsmComposeFlags  flags 
)

Guts for gfsm_automaton_intersect()

Returns
(new) gfsmStateId for sp
gfsmAutomaton* gfsm_automaton_minimize ( gfsmAutomaton fsm)

Minimize an automaton, treating transducers as pair-acceptors. Just a wrapper for gfsm_automaton_minimimize_full(fsm,TRUE).

Note
pseudo-destructive on fsm
Parameters
fsmAutomaton to minimize.
Returns
minimized fsm
gfsmAutomaton* gfsm_automaton_minimize_full ( gfsmAutomaton fsm,
gboolean  rmeps 
)

Quasi-minimization using Brzozowski (1963) algorithm, with optional epsilon-removal.

Note
pseudo-destructive on fsm
See Also
J. A. Brzozowski, "Canonical regular expressions and minimal state graphs for definite events", In: Proc. Sympos. Math. Theory of Automata (New York, 1962), Polytechnic Press of Polytechnic Inst. of Brooklyn, Brooklyn, NY, pp. 529–561, URL: http://www.ams.org/mathscinet-getitem?mr=0175719
Parameters
fsmAutomaton to minimize.
rmepsWhether to include epsilon-removal (true minimization) or not (quasi-minimization)
Returns
(quasi-)minimized fsm
gfsmAutomaton* gfsm_automaton_compact ( gfsmAutomaton fsm)

Heuristically compact an automaton. Really just a wrapper for gfsm_automaton_compact_full(fsm,TRUE).

Note
pseudo-destructive on fsm
Parameters
fsmAutomaton to compact.
Returns
compacted fsm
gfsmAutomaton* gfsm_automaton_compact_full ( gfsmAutomaton fsm,
gboolean  rmeps 
)

Heuristic compaction like gfsmencode fsm KEY | gfsmminimize | gfsmdecode - KEY

Note
destructively alters fsm
Parameters
fsmautomaton to compact
rmepsWhether to include epsilon-removal in encoded-acceptor minimization step
Returns
compacted fsm
gfsmAutomaton* gfsm_automaton_invert ( gfsmAutomaton fsm)

Invert upper and lower labels of an automaton.

Note
Destructively alters fsm.
Parameters
fsmTransducer
Returns
fsm
gfsmAutomaton* gfsm_automaton_project ( gfsmAutomaton fsm,
gfsmLabelSide  which 
)

Project one "side" (lower or upper) of fsm

Note
Destructively alters fsm
Parameters
fsmTransducer
whichWhich label side to project.
  • gfsmLSLower project lower side
  • gfsmLSUpper project upper side (default)
Returns
modified fsm
gfsmAutomaton* gfsm_automaton_product ( gfsmAutomaton fsm1,
gfsmAutomaton fsm2 
)

Compute Cartesian product of acceptors fsm1 and fsm2.

Note
Destructively alters fsm1.
Parameters
fsm1Acceptor (lower)
fsm2Acceptor (upper)
Returns
fsm1 (transducer)
See Also
gfsm_automaton_product2()
gfsmAutomaton* gfsm_automaton_product2 ( gfsmAutomaton fsm1,
gfsmAutomaton fsm2 
)

Compute Cartesian product of acceptors fsm1 and fsm2.

Note
Destructively alters fsm1 and fsm2.
Parameters
fsm1Acceptor (lower)
fsm2Acceptor (upper)
Returns
fsm1
gfsmAutomaton* gfsm_automaton_replace ( gfsmAutomaton fsm1,
gfsmLabelVal  lo,
gfsmLabelVal  hi,
gfsmAutomaton fsm2 
)

Replace label-pair (lo,hi) with fsm2 in fsm1 .

Note
Destructively alters fsm.
Parameters
fsm1Automaton
lolower label or gfsmNoLabel to ignore lower labels
hiupper label or gfsmNoLabel to ignore upper labels
Returns
modified fsm1
gfsmAutomaton* gfsm_automaton_insert_automaton ( gfsmAutomaton fsm1,
gfsmStateId  q1from,
gfsmStateId  q1to,
gfsmAutomaton fsm2,
gfsmWeight  w 
)

Insert automaton fsm2 into fsm1 between states q1from and q1to with weight w.

Note
Destructively alters fsm1.
Parameters
fsm1Automaton into which fsm2 is inserted
fsm2Automaton to be inserted
q1fromSource state for inserted automaton in fsm1
q1toFinal state for inserted automaton in fsm1
wWeight to add to final arcs for translated fsm2 in fsm1
Returns
modified fsm1
gfsmAutomaton* gfsm_automaton_reverse ( gfsmAutomaton fsm)

Reverse an automaton fsm.

Note
Destructively alters fsm.
Parameters
fsmAutomaton
Returns
fsm
gfsmAutomaton* gfsm_automaton_rmepsilon ( gfsmAutomaton fsm)

Remove epsilon arcs from fsm.

  • Destructively alters fsm.
  • Implementation of incremental algorithm from Hanneforth & de la Higueara (2010).
Warning
negative-cost epsilon cycles in fsm will cause an infinite loop!
See Also
T. Hanneforth & C. de la Higuera (2010), "ε-Removal by Loop Reduction for Finite-state Automata over Complete Semirings." In T. Hanneforth and G. Fanselow, editors, Language and Logos: Studies in Theoretical and Computational Linguistics, volume 72 of Studia grammatica. Akademie Verlag, Berlin. ISBN 978-3-05-004931-1.
Parameters
fsmAutomaton
Returns
fsm
gfsmAutomaton* gfsm_automaton_sigma ( gfsmAutomaton fsm,
gfsmAlphabet abet 
)

Make fsm an identity-transducer for alphabet abet

Note
Destructively alters fsm.
Parameters
fsmAutomaton
Returns
fsm
gfsmAutomaton* gfsm_automaton_union ( gfsmAutomaton fsm1,
gfsmAutomaton fsm2 
)

Add the language or relation of fsm2 to fsm1.

Note
Destructively alters fsm1
Parameters
fsm1Automaton
fsm2Automaton
Returns
fsm1