Equivalence of Regular Expressions
Source of the RE
| > | s1 := "(0 + 1 ) * . (1 . 1 + ( 0 + 1 . ( 0 + 1 ) ) )";
s2 := "(0.0* + (1 + 0.0* .1 ).((0 + 1.1* .0).0 * .1)* .(1.1* + (0 + 1.1* .0).0*))"; |
| (17.1.2.1) |
| (17.1.2.1) |
| > | nfa5b:=RE2NFA(s2):
nfa5c:=RE2NFA(s1): isEmptyNFA(intersectNFA(nfa5b,complementNFA(nfa5c))); isEmptyNFA(intersectNFA(nfa5c,complementNFA(nfa5b))); |
| > | transitionGraph(simplifyDFA(minimalDFA(NFA2DFA(nfa5b))));
transitionGraph(simplifyDFA(minimalDFA(NFA2DFA(nfa5c)))); |
![]() |
![]() |
| > | nops(op(1,nfa5b)) * nops(op(1,NFA2DFA(nfa5c))); |
| (17.1.2.2) |
| > |
Another good example about equivalance of expressions
| > | nfa2 := NFA({q0, q1, q2, q3, q4, q5, q6, q7},{"0", "1"},table([(q2, "0") = {q4, q7}, (q1, "0") = {q2, q6}, (q0, lambda) = {q7}, (q7, lambda) = {q2}, (q5, "0") = {q2, q6}, (q0, "0") = {q2, q3}, (q4, "1") = {q0, q5}, (q2, lambda) = {q4}, (q3, lambda) = {q6}, (q1, lambda) = {q5}, (q0, "1") = {q2, q4, q5}, (q4, "0") = {q4, q7}, (q5, lambda) = {q1}, (q6, lambda) = {q0}, (q3, "0") = {q1, q6}, (q4, lambda) = {q5}, (q1, "1") = {q0, q6}]),q0,{q0, q1, q7}); |
| (17.1.2.3) |
| > | transitionGraph(nfa2); |
![]() |
| > | #NFA2RE(nfa2,result=string);
NFA2RE(nfa2); |
| (17.1.2.4) |
| > | dfa2:=simplifyDFA(minimalDFA(NFA2DFA(nfa2)));
transitionGraph(dfa2); |
![]() |
| > | NFA2RE(dfa2,result=string); |
| (17.1.2.5) |
| > | isUniversalNFA(nfa2); |
| (17.1.2.6) |