This operation synchronizes a transducer. The result will be an equivalent FST that has the property that during the traversal of a path, the delay is either zero or strictly increasing, where the delay is the difference between the number of nonepsilon output labels and input labels along the path.
For the algorithm to terminate, the input transducer must have bounded delay, i.e., the delay of every cycle must be zero.
template <class Arc> void Synchronize(const Fst<Arc> &ifst, MutableFst<Arc> *ofst); 

template <class Arc> SynchronizeFst<Arc>:: SynchronizeFst(const Fst<Arc>& fst); 

fstsynchronize a.fst out.fst 
A
:
Synchronize of A
:
Synchronize(A, &B); SynchronizeFst<Arc>(A); fstsynchronize a.fst out.fst
Synchronize
: A
has bounded delay: Time and Space complexity is exponential
A
does not have bounded delay: does not terminate
SynchronizeFst
: A
has bounded delay: Time and Space complexity is exponential
A
does not have bounded delay: does not terminate
 CyrilAllauzen  22 Jun 2007
I  Attachment  History  Action  Size  Date  Who  Comment 

jpg  synchronize1.jpg  r3 r2 r1  manage  7.6 K  20070626  17:40  CyrilAllauzen  Input transducer for synchronize example 
jpg  synchronize2.jpg  r3 r2 r1  manage  12.3 K  20070626  17:34  CyrilAllauzen  Output transducer for synchronize example 