# automaton.eliminate_state(state=-1)¶

In the Brzozowski-McCluskey procedure, remove one state.

Preconditions:

• The labelset is oneset (i.e., the automaton is spontaneous).
• The weightset is expressionset (i.e., the weights are expressions).
• The state is indeed a state of the automaton, or it is -1, in which case a heuristics is used to select the next state.

## Examples¶

In :
import vcsn


The following examples will use this automaton as input.

In :
a0 = vcsn.B.expression('ab*c').standard()
a0

Out:

We first need to convert this automaton into a spontaneous automaton labeled with expressions. That's the purpose of automaton.lift.

In :
a1 = a0.lift()
a1

Out:

### Explicit state elimination¶

Let's remove state 2:

In :
a2 = a1.eliminate_state(2)
a2

Out:

Note that the result is a fresh automaton: the original automaton is not modified:

In :
a1

Out:

Let's eliminate state 1.

In :
a3 = a2.eliminate_state(1)
a3

Out:

We can also remove the initial and final states.

In :
a4 = a3.eliminate_state(0)
a4

Out:

Eventually, when all the states have been removed, you get a broken automaton, with no states, but a "lone transition" that bears the answer.

In :
a5 = a4.eliminate_state(1)
a5

Out:

Rest assured that such automata (no states but with one transition) never occur in the normal course of use of Vcsn.

### Using the heuristics¶

Use -1 (or no argument at all) to leave the choice of the next state to eliminate to Vcsn. This is how automaton.expression works.

In :
a1.eliminate_state()

Out:
In :
a1.eliminate_state().eliminate_state().eliminate_state().eliminate_state()

Out:

## Interactive Examples¶

You may use the following widgets to see, step by step, how state elimination works.

In :
a2 = a1 ** 2
%demo a2 eliminate_state