Whether the automaton is synchronized:
Preconditions:
Caveat:
is_synchronized
will not terminate.See also:
import vcsn
ctx = vcsn.context("lat<law_char, law_char>, b")
The following automaton is not synchronized, because a transition with less letters on the second tape $a| \varepsilon$ is followed by a transition with as many letters on each tape $b|y$.
a = ctx.expression(r"a|x+(a|\e)(b|y)").standard()
a
a.is_synchronized()
This automaton is synchronized, because the transition with less letters on the first tape occurs "at the end" : it is not followed by transitions with more letters on this tape.
a = ctx.expression(r"a|x+(b|y)(e|xyz)").standard()
a
a.is_synchronized()
Spontaneous transitions are not taken in account when checking for synchronization.
a = ctx.expression(r"a|x+(b|y)(cde|z)").thompson()
a
a.is_synchronized()
Note that in a synchronized automaton, the corresponding _delay_automaton_ has delays of 0 or strictly increasing (apart from spontaneous transitions).
a.delay_automaton()