Finite Automata with Epsilon Transitions We can extend an NFA by introducing a "feature" that allows us to make a transition on
, the empty string. All the transition lets us do is spontaneously make a transition, without receiving an input symbol. This is another mechanism that allows our NFA to be in multiple states at once. Whenever we take an edge, we must fork off a new "thread" for the NFA starting in the destination state.
Just as nondeterminism made NFA's more convenient to represent some problems than
DFA's but were not more powerful, the same applies to NFA's. While more expressive, anything we can represent with an NFA we can represent with a DFA that has no transitions.
Epsilon Closure Epsilon Closure of a state is simply the set of all states we can reach by following the transition function from the given state that are labeled . Generally speaking, a collection of objects is closed under some operation if applying that operation to members of the collection returns an object still in the collection.
In the above example:
(q) = { q }
(r) = { r, s} let us define the extended transition function for an NFA. For a regular, NFA we said for the induction step:
Let
^(q,w) = {p1, p2, ... pk}
(pi,a) = Sifor i=1,2,...k
Then ^(q, wa) = S1,S2... Sk
For an -NFA, we change for ^(q, wa):
Union[ (Each state in S1, S2, ... Sk)]
This includes the original set S1,S2... Sk as well as any states we can reach via .
When coupled with the basis that ^(q, ) = (q) lets us inductively define an extended transition function for a NFA.
Eliminating Transitions Transitions are a convenience in some cases, but do not increase the power of the NFA.
To eliminate them we can convert a NFA into an equivalent DFA, which is quite similar to the steps we took for converting a normal NFA to a DFA, except we must now