# automaton.delay_automaton¶

Create a new transducer, equivalent to the first one, with the states labeled with the delay of the state, i.e. the difference of input length on each tape.

Preconditions:

• The input automaton is a transducer.
• Input.has_bounded_lag

Caveat:

• If the input does not have bounded lag, the construct will not terminate

## Examples¶

In [1]:
import vcsn

In [2]:
ctx = vcsn.context("lat<law_char, law_char>, b")
ctx

Out[2]:
$\{\ldots\}^* \times \{\ldots\}^*\to\mathbb{B}$
In [3]:
a = ctx.expression(r"'abc,\e' 'd,v'* '\e,wxyz'").standard()
a

Out[3]:

The lag is bounded, because every cycle (here, the loop) produces a delay of 0.

In [4]:
a.delay_automaton()

Out[4]:

State 1 has a delay of $(3, 0)$ because the first tape is 3 characters longer than the shortest tape (the second one) for all possible inputs leading to this state.

In [5]:
s = ctx.expression(r"(abc|x+ab|y)(d|z)").automaton()
s

Out[5]:
In [6]:
s.delay_automaton()

Out[6]:

Here, state 1 is split in two, because for one input the delay is $(1, 0)$, and for the other the delay is $(2, 0)$.