Edit this page Backlinks This page is read only. You can view the source, but not change it. Ask your administrator if you think this is wrong. ====== 5. Minimal DFAs ====== Consider the following DFAs: **DFA 1**: {{ :lfa:2022:lfa2022_lab5_ex2_4_cerinta.png?350 |}} **DFA 2**: {{ :lfa:screenshot_2021-11-03_at_11.25.00.png?400 |}} <note important>The first DFA is the solution to exercise 4.3.4 from Lab4.</note> ===== 5.1. Equivalence between states ===== 5.1.1. Identify a pair of states which are **indistinguishable**. (Solve the exercise for the 2 given DFAs.) 5.1.2. Identify a pair of final or non-final states which are **distinguishable**. The pair must be distinguished by a word different from the empty word. (Solve the exercise for the 2 given DFAs.) 5.1.3. Compute the table of indistinguishable states for the DFA. (Solve the exercise for the 2 given DFAs.) <hidden> ** DFA 1 ** ^ ^1 ^2 ^3 ^4 ^5 ^6 |**1** | -| -| -| -| -| - |**2** | X| -| -| -| -| - |**3** | | X| -| -| -| - |**4** | | X| | -| -| - |**5** | X| | X| X| -| - |**6** | X| X| X| X| X| - Initially marked pairs of (final, non-final) states: * (1, 6) * (2, 6) * (3, 6) * (4, 6) * (5, 6) Predecessors for (6, 1): * 0: - * 1: - Predecessors for (6, 2): * 0: - * 1: (2, 1), (5, 1) => mark them on the table Predecessors for (6, 3): * 0: - * 1: - Predecessors for (6, 4): * 0: - * 1: - Predecessors for (6, 5): * 0: - * 1: (2, 3), (5, 3), (2, 4), (5, 4) => mark them on the table Predecessors for (2, 1): * 0: - * 1: - Predecessors for (5, 1): * 0: - * 1: - Predecessors for (3, 2): * 0: - * 1: - Predecessors for (4, 2): * 0: - * 1: - Predecessors for (5, 3): * 0: - * 1: - Predecessors for (5, 4): * 0: - * 1: - The partitions of undistinguishable states are given by the missing marks: * (5, 2) * (3, 1), (4, 3), (4, 1) => The partitions are: {2, 5} and {1, 3, 4} </hidden> <hidden> ** DFA 2 ** ^ ^0 ^1 ^2 ^3 ^4 ^5 |**0** | -| -| -| -| -| - |**1** | X| -| -| -| -| - |**2** | X| | -| -| -| - |**3** | | X| X| -| -| - |**4** | X| | | X| -| - |**5** | X| X| X| X| X| - Initially marked pairs of (final, non-final) states: * (0, 1) * (0, 2) * (0, 4) * (3, 1) * (3, 2) * (3, 4) * (5, 1) * (5, 2) * (5, 4) Predecessors for (5, 1): * a: - * b: (5, 0) => mark it on the table Predecessors for (3, 1): * a: - * b: - Predecessors for (3, 2): * a: (0, 1), (0, 2), (0, 4) => already marked * b: - Predecessors for (5, 2): * a: (5, 1), (5, 2), (5, 4) => already marked * b: - Predecessors for (4, 3): * a: - * b: - Predecessors for (0, 1): * a: - * b: - Predecessors for (0, 2): * a: (3, 1), (3, 2), (3, 4) => already marked * b: - Predecessors for (0, 4): * a: - * b: - Predecessors for (0, 5): * a: (3, 5) => mark it on the table * b: - Predecessors for (3, 5): * a: (0, 5) => already marked * b: - The partitions of undistinguishable states are given by the missing marks: * (0, 3) * (4, 1), (4, 2), (2, 1) => The partitions are: {0, 3} and {1, 2, 4} </hidden> ===== 5.2. Minimisation ====== 5.2.1. Minimise the DFA. (Solve the exercise for the 2 given DFAs.) <hidden> ** DFA 1 ** {{ :lfa:2022:lfa2022_lab5_dfa1_min.png?400 |}} </hidden> <hidden> ** DFA 2 ** {{ :lfa:2022:lfa2022_lab5_dfa2_min.png?400 |}} </hidden> 5.2.2. How can we algorithmically determine if two minimal DFAs accept the same language? <hidden><note tip> * assume the states are labeled as integers starting with 0, and that 0 is the unique initial state of both DFAs (this can be easily obtained from any previous transformation). * give an ordering to the symbols of the alphabet. Write $math[\delta] as a string by the following rules: * we sort each transition $math[\delta(q,c)=q'], by $math[q] first and by $math[c], second. We append each transition given this ordering (//smaller// states first, then for each state, output the order of the $math[\delta(q,c)] transitions according to $math[c]. * two minimal DFAs accept the same language **iff**: * they have the same string representation of $math[\delta] and * have the same final states. Another more elegant approach is to use state equivalence. We can treat two (not necessarily minimal) DFAs as one and the same, and compute the (in)distinguishability table over all states, in a single go. Finally, the DFAs accept the same language iff their initial states are indistinguishable. </note></hidden> 5.2.3. Determine if the following regexes are **equivalent**: $math[(1\cup\epsilon)(00^*1)^*0^*] and $math[(10\cup 0)^*(01 \cup 1)^*(0 \cup \epsilon)] 5.2.4. Remeber exercise 3.3.4 from Lab3. Show that the two regexes are equivalent: $ E1 = ((ab^*a)^+b)^* $ and $ E2 = (a(b\mid aa)^*ab)^* $ 5.2.5. (extra) Apply the **Brzozowski** minimisation algorithm on the first given DFA. <note tip>Brzozowski minimisation: **minDfa(A) = toDfa(reverse(toDfa(reverse(A))))**</note> ===== Conclusion ===== <note important> Now we can do a complete transformation of a regex into a minimal DFA. * Regex -> NFA (Thomson's algorithm) * NFA -> DFA (Subset Construction) * DFA -> minDfa We advise you to use this conversion when solving the project. </note>