Hello! Welcome to the next lesson in our journey through the theory of computation.
In our last lesson, we built a bridge in one direction: from the high-level declarative world of regular expressions to the low-level machine world of finite automata, using Thompson's construction. We proved that for any regular expression, there is an NFA-ε that accepts the same language.
Today, we'll build the bridge back. We will tackle the reverse problem: How can we convert a finite automaton back into an equivalent regular expression? By the end of this lesson, you will be able to apply the state elimination method to any DFA to derive a single regular expression that describes its language.
This completes the loop, proving that finite automata and regular expressions are two sides of the same coin—they are equivalent in their descriptive power. This is the final piece of the puzzle we need before we can formally state and appreciate Kleene's Theorem in our next lesson.
The Big Picture: From States to Expressions
The core idea behind the state elimination method is to view the automaton not just as a graph with single-symbol transitions, but as a more flexible structure where transitions can be labeled with entire regular expressions. We call this a Generalized Nondeterministic Finite Automaton (GNFA).
The algorithm is an iterative process of simplification. Imagine you have a complex flowchart; you could simplify it by taking a multi-step sub-process, describing it with a single new instruction, and replacing the sub-process with that instruction. Here, we'll do the same: we will "rip out" states one by one, and in their place, we'll leave behind more complex regular expressions on the transitions between the remaining states.
The overall algorithm proceeds in three main stages:
- Preparation: Modify the input DFA to a standardized GNFA format.
- Elimination: Repeatedly remove one state at a time, updating the transition labels (the regular expressions) to preserve the language.
- Finalization: When only the start and final states are left, the regular expression on the transition connecting them is our answer.

Stage 1: Preparing the Automaton
To make the algorithm uniform and easy to apply, we first need to pre-process the DFA into a specific GNFA format that has two key properties:
- A single, unique start state with transitions going out, but none coming in.
- A single, unique final state with transitions coming in, but none going out.
We achieve this with the following steps:
- Add a new start state and create an ε-transition from it to the original start state.
- Add a new final state. For every state that was originally a final state, add an ε-transition from it to this new final state. The original final states are then marked as non-final.
- If there are multiple transitions between the same two states (labeled with symbols
aandb, for instance), we merge them into a single transition labeled with their union (e.g.,a+b). - If there is no transition between two states, we can imagine there is a transition labeled with
∅(the empty set).

Stage 2: The Rip-and-Repair Algorithm
This is the heart of the method. We will repeatedly pick an intermediate state (any state other than our new start and final states) and remove it. To do so without changing the language, we must create new transitions that "bypass" the removed state, capturing all the paths that went through it.
Let's say we want to remove state . For every pair of other states, and , where there's a path from , we need to create a new direct transition from to .
The label for this new transition is constructed based on the labels of the path it replaces.
- Let be the regex on the transition .
- Let be the regex on the self-loop at (if any).
- Let be the regex on the transition .
A path from to via means we first take the transition, then we can loop at zero or more times using , and finally we exit via the transition. The regular expression for this sequence of events is exactly:
If there was already a direct transition from to with label , we now have two ways to get from to . We combine these using the union operator:
If there was no self-loop on , then corresponds to a path that consumes no string, which is ε. So, becomes ε* which is just ε. The formula simplifies to .
Let's watch a video that provides a full, practical walkthrough of this process. The presenter uses a clear, methodical approach with "in" and "out" lists that you might find helpful.
NFA to Regular Expression Conversion, and Example
This video from Easy Theory provides a clear, step-by-step demonstration of the state elimination method on a single, complete example. Pay close attention to how he identifies which states to connect, calculates the new regular expression labels, and handles parallel transitions using the union operator.
Watch the entire video (about 14 minutes). The process shown here is exactly the algorithm we are learning. Notice the common mistakes he points out, such as forgetting parentheses or misinterpreting the final diagram.
To solidify your understanding, let's turn to a well-written textual guide that breaks down the process with detailed explanations and diagrams.
CS103 Guide to State Elimination
The 'Guide to State Elimination' from Stanford's CS103 course provides another excellent, detailed walkthrough of the algorithm. It clearly separates the logic for eliminating a state with a self-loop versus one without, which is a key concept.
Read through the guide from the beginning until the 'Reading and Interpreting the Regex' section. Follow the example of converting the 'Addition Parity' NFA. Pay special attention to the formulas given for eliminating a state without a self-loop (in the 'Eliminating q_5' section) and with a self-loop (in the 'Eliminating q_1' section). These are the core rules of the algorithm.
Stage 3: Reading the Final Expression
After repeating the elimination process until only the new start state () and new final state () remain, our GNFA will look very simple:
(q_start) --R--> (q_final)
The regular expression R on the single remaining transition is the final result—an expression equivalent to the original DFA.
Test your understanding!
Consider a simple two-state DFA where is the start state and is the final state.
- There's a transition from to on
a. - There's a transition from to on
b. - There are no self-loops.
The language is strings that start with a and are followed by any number of ba pairs, like a, aba, ababa, etc.
Apply the state elimination method to find the regular expression. Remember to add the new start and final states first.
Show answer
-
Preparation:
- Add new start state and new final state .
- Add transition .
- Add transition .
- The automaton now has 4 states: . The original states are no longer start/final.
-
Elimination (Order: , then ):
-
Eliminate :
- We need to find paths that are broken by removing . The only such path is .
- (from to ) is .
- (on ) is (no loop). .
- (from to ) is
a. - The new bypass transition from to is .
- We now have a 3-state machine: with transitions and . We also still have the original transition from back to , but since is gone, this transition is irrelevant. Wait, there is a path
q1 -> q0 -> q1. We must account for this. Let's restart the elimination ofq0more carefully.
-
Correct Elimination of :
- We need to consider all pairs
(q_in, q_out)that go throughq_0. - Pair 1: (): Path is . New transition from is .
- Pair 2: (): Path is . New self-loop on is .
- After removing , we have a 3-state machine: .
- Transitions: , a self-loop on with label
ba, and .
- We need to consider all pairs
-
Eliminate :
- Now we eliminate . The only path is .
- (from to ) is
a. - (on ) is
ba. - (from to ) is .
- The new bypass transition from to is .
-
-
Finalization:
- We are left with states and , with a single transition between them labeled
a(ba)*. - This is our final regular expression.
- We are left with states and , with a single transition between them labeled
Conclusion
In this lesson, we completed the crucial second half of the bridge between automata and regular expressions. The state elimination method gives us a powerful, if sometimes lengthy, algorithm to convert any DFA into an equivalent regular expression. Your experience with designing and abstracting complex systems is mirrored here: we methodically reduce a detailed state-based machine into a single, high-level declarative pattern.
Key Takeaways:
- The state elimination method converts a DFA to a regular expression by iteratively removing states from a Generalized NFA (GNFA).
- The process starts by preparing the DFA: adding a new unique start and final state.
- The core of the algorithm is the "rip-and-repair" step, where removing a state requires creating new bypass transitions between its neighbors.
- The label for a new bypass transition is calculated as and combined with any pre-existing direct path using the union (
+) operator. - The final regular expression is the label on the single transition remaining between the start and final states.
Preview of the Next Lesson:
We have now established that:
- Every regular expression can be converted to an NFA (Thompson's Construction).
- Every NFA can be converted to a DFA (Subset Construction).
- Every DFA can be converted to a regular expression (State Elimination).
This proves that all three models—DFAs, NFAs, and regular expressions—are equivalent in their expressive power. In our next lesson, we will formally name this powerful result Kleene's Theorem and explore its profound implications for computer science, from compiler design to text processing.