Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
lfa:2022:lab06-dfa-to-regex [2022/11/13 23:58] mihai.udubasa |
lfa:2022:lab06-dfa-to-regex [2022/11/19 10:34] (current) alexandra.udrescu01 |
||
|---|---|---|---|
| Line 5: | Line 5: | ||
| Consider the following DFAs: | Consider the following DFAs: | ||
| - | **DFA1** | + | ^ **DFA1** ^ **DFA2** ^ |
| + | |{{ :lfa:screenshot_2021-11-04_at_15.33.10.png?400 |}}| {{ :lfa:2022:lfa2022_lab5_ex2_4_cerinta.png?300 |}} | | ||
| - | {{ :lfa:screenshot_2021-11-04_at_15.33.10.png?400 |}} | ||
| - | |||
| - | **DFA2** | ||
| - | |||
| - | {{ :lfa:2022:lfa2022_lab5_ex2_4_cerinta.png?300 |}} | ||
| Convert the given DFAs to a Regex (using the state-elimination strategy). | Convert the given DFAs to a Regex (using the state-elimination strategy). | ||
| Hint: is it easier to apply conversion on another DFA? | Hint: is it easier to apply conversion on another DFA? | ||
| - | /* | + | |
| <hidden On what DFA should the algorithm be applied?> | <hidden On what DFA should the algorithm be applied?> | ||
| Line 79: | Line 75: | ||
| - first, we apply the minimisation algorithm | - first, we apply the minimisation algorithm | ||
| * {{ :lfa:2022:lab6_1_dfa1_1.png?500 |}} | * {{ :lfa:2022:lab6_1_dfa1_1.png?500 |}} | ||
| + | - we add the new final and initial states | ||
| + | * {{ :lfa:2022:lab6_1_dfa1_2.png?500 |}} | ||
| - we eliminate the state 8 | - we eliminate the state 8 | ||
| - as it has no outgoing transitions, we can just remove it | - as it has no outgoing transitions, we can just remove it | ||
| - | * {{ :lfa:2022:lab6_1_dfa1_2.png?500 |}} | + | * {{ :lfa:2022:lab6_1_dfa1_3.png?500 |}} |
| - we eliminate the state 0,1 | - we eliminate the state 0,1 | ||
| - in: | - in: | ||
| Line 93: | Line 91: | ||
| * init --(0*)--> fin | * init --(0*)--> fin | ||
| * init --(0*1)--> 2 | * init --(0*1)--> 2 | ||
| - | * {{ :lfa:2022:lab6_1_dfa1_3.png?500 |}} | + | * {{ :lfa:2022:lab6_1_dfa1_4.png?500 |}} |
| - we eliminate the state 2 | - we eliminate the state 2 | ||
| - in: | - in: | ||
| Line 109: | Line 107: | ||
| * 3 --(10)--> 3 | * 3 --(10)--> 3 | ||
| * 3 --(11)--> 4 | * 3 --(11)--> 4 | ||
| - | * {{ :lfa:2022:lab6_1_dfa1_4.png?500 |}} | + | * {{ :lfa:2022:lab6_1_dfa1_5.png?500 |}} |
| - we eliminate the state 4 | - we eliminate the state 4 | ||
| - in: | - in: | ||
| Line 121: | Line 119: | ||
| * 3 --(110)--> 6,7 | * 3 --(110)--> 6,7 | ||
| * 6,7 --(10)--> 6,7 | * 6,7 --(10)--> 6,7 | ||
| - | * {{ :lfa:2022:lab6_1_dfa1_5.png?500 |}} | + | * {{ :lfa:2022:lab6_1_dfa1_6.png?500 |}} |
| - we eliminate the state 6,7 | - we eliminate the state 6,7 | ||
| - in: | - in: | ||
| Line 139: | Line 137: | ||
| * 5 --(1(10)*0)--> 5 | * 5 --(1(10)*0)--> 5 | ||
| * 5 --(1(10)*)--> fin | * 5 --(1(10)*)--> fin | ||
| - | * {{ :lfa:2022:lab6_1_dfa1_6.png?500 |}} | + | * {{ :lfa:2022:lab6_1_dfa1_7.png?500 |}} |
| - we eliminate the state 3 | - we eliminate the state 3 | ||
| - in: | - in: | ||
| Line 151: | Line 149: | ||
| * init --(0*10(10)*(ε|1) )--> fin | * init --(0*10(10)*(ε|1) )--> fin | ||
| * init --(0*10(10)*(0|110(10)*0) )-->5 | * init --(0*10(10)*(0|110(10)*0) )-->5 | ||
| - | * {{ :lfa:2022:lab6_1_dfa1_7.png?500 |}} | + | * {{ :lfa:2022:lab6_1_dfa1_8.png?500 |}} |
| - we eliminate the state 5 | - we eliminate the state 5 | ||
| - in: | - in: | ||
| Line 161: | Line 159: | ||
| - we add: | - we add: | ||
| * init --( (0*110(10)*0|0*10(10)*(0|110(10)*0) ) (1(10)*0)*1(10)*)--> fin | * init --( (0*110(10)*0|0*10(10)*(0|110(10)*0) ) (1(10)*0)*1(10)*)--> fin | ||
| - | * {{ :lfa:2022:lab6_1_dfa1_8.png?500 |}} | ||
| - the final regex is '' | - the final regex is '' | ||
| 0*|0*1|0*110(10)*|0*10(10)*(ε|1|110(10)*)|(0*110(10)*0|0*10(10)*(0|110(10)*0))(1(10)*0)*1(10)*'' | 0*|0*1|0*110(10)*|0*10(10)*(ε|1|110(10)*)|(0*110(10)*0|0*10(10)*(0|110(10)*0))(1(10)*0)*1(10)*'' | ||
| Line 167: | Line 164: | ||
| </hidden> | </hidden> | ||
| - | */ | + | |
| ==== 6.2. Brzozowsky's algebraic method ==== | ==== 6.2. Brzozowsky's algebraic method ==== | ||
| Line 181: | Line 178: | ||
| === Dfa to regex conversion === | === Dfa to regex conversion === | ||
| - | For each state $math[q], build an equation of the form: $math[q = c_1 q_1 \cup c_2 q_2 \ldots c_n q_n], such that: $math[\delta(q,c_i) = q_i]. Here $math[c_i\in\Sigma], thus $math[q_i] are the $math[c_i]-successors of $math[q]. Additionally, if $math[q] is a final state, and an $math[\epsilon]: $math[q = c_1 q_1 \cup c_2 q_2 \ldots c_n q_n \cup \epsilon]. | + | For each state $math[q], build an equation of the form: $math[q = c_1 q_1 \cup c_2 q_2 \ldots c_n q_n], such that: $math[\delta(q,c_i) = q_i]. Here $math[c_i\in\Sigma], thus $math[q_i] are the $math[c_i]-successors of $math[q]. Additionally, if $math[q] is a final state, add an $math[\epsilon]: $math[q = c_1 q_1 \cup c_2 q_2 \ldots c_n q_n \cup \epsilon]. |
| ^ ^ ^ | ^ ^ ^ | ||
| Line 194: | Line 191: | ||
| === Reducing the system of equations === | === Reducing the system of equations === | ||
| - | We can choose *any** equation **except** that corresponding to the initial state, and eliminate it, by exploiting **Arden's Lemma**: | + | We can choose **any** equation **except** that corresponding to the initial state, and eliminate it, by exploiting **Arden's Lemma**: |
| * the solution to any equation of the form $math[q = e\cdot q \cup e'] is $math[q = e^*e']. | * the solution to any equation of the form $math[q = e\cdot q \cup e'] is $math[q = e^*e']. | ||
| **Example** | **Example** | ||
| - | Goind back to the previous system of equations, we can find the solution to $math[q_2] which is: $math[(A \cup B)^*]. Next, we can replace the solution to $math[q_2] in $math[q_1] which yields: | + | Going back to the previous system of equations, we can find the solution to $math[q_2] which is: $math[(A \cup B)^*]. Next, we can replace the solution to $math[q_2] in $math[q_1] which yields: |
| * $math[q_1 = A q_1 \cup B(A\cup B)^*]. | * $math[q_1 = A q_1 \cup B(A\cup B)^*]. | ||
| * We apply Arden's Lemma one more time and yield: $math[q_1 = A^*B(A \cup B)^*]. | * We apply Arden's Lemma one more time and yield: $math[q_1 = A^*B(A \cup B)^*]. | ||
| Line 220: | Line 217: | ||
| ^ {{ :lfa:2022:screenshot_2022-11-09_at_15.46.23.png?200 |}} ^ | ^ {{ :lfa:2022:screenshot_2022-11-09_at_15.46.23.png?200 |}} ^ | ||
| - | /* | + | |
| <hidden Solution> | <hidden Solution> | ||
| Line 270: | Line 267: | ||
| </hidden> | </hidden> | ||
| - | */ | + | |