Create a new transducer, equivalent to the first one, but where the transitions advance along all the tapes at the same rate, for as long as possible. The transitions before the final states may have the empty word on one of the tapes, to allow for words of different lengths on the input and output.
Preconditions:
Postconditions:
See also:
import vcsn
ctx = vcsn.context("lat<law_char, law_char>, b")
ctx
The following automaton is not synchronized (the first transition is already not synchronized):
a = ctx.expression(r"(abc|\e)(d|v)*(\e|wxyz)").standard()
a
The lag is bounded, because every cycle (here, the loop) has a lag of 0.
a.has_bounded_lag()
Apart from pure spontaneous transitions, the only transitions with $\varepsilon$ in them are right before the final state.
s = a.synchronize()
s
s.is_synchronized()
This is a (for the most part) letter-to-letter transducer equivalent to the input.
s.proper().letterize().minimize().strip()