Regular Expressions 

Testing RE 

>
 

NFA2RE 

> nfa1:=mkNFA({q0,q1,q2,q3,q4},{"a","b"},table([(q0,"a")={q3},(q1,"a")={q2},(q2,"a")={q3,q4},(q3,"b")={q2,q4}]),q0,{q4}):
transitionGraph(nfa1);
 

Plot_2d
 

> r1:=NFA2RE(nfa1);
r2:=NFA2RE(nfa1,result=string);
 

`:=`(r1, RE([`(`,
`:=`(r1, RE([`(`,
(8.2.1)
 

`:=`(r2, (8.2.1)
 

> nfa2:=RE2NFA(r1);
nfa3:=RE2NFA(r2);
 

`:=`(nfa2, NFA({_q_9, _q_10, _q_11, _q_12, _q_13, _q_14, _q_15, _q_16, _q_17, _q_18, _q_20, _q_21, _q_22, _q_23, _q_24, _q_1, _q_2, _q_3, _q_6, _q_8, _q_4, _q_7, _q_5, _q_19}, {
`:=`(nfa2, NFA({_q_9, _q_10, _q_11, _q_12, _q_13, _q_14, _q_15, _q_16, _q_17, _q_18, _q_20, _q_21, _q_22, _q_23, _q_24, _q_1, _q_2, _q_3, _q_6, _q_8, _q_4, _q_7, _q_5, _q_19}, {
`:=`(nfa2, NFA({_q_9, _q_10, _q_11, _q_12, _q_13, _q_14, _q_15, _q_16, _q_17, _q_18, _q_20, _q_21, _q_22, _q_23, _q_24, _q_1, _q_2, _q_3, _q_6, _q_8, _q_4, _q_7, _q_5, _q_19}, {
`:=`(nfa2, NFA({_q_9, _q_10, _q_11, _q_12, _q_13, _q_14, _q_15, _q_16, _q_17, _q_18, _q_20, _q_21, _q_22, _q_23, _q_24, _q_1, _q_2, _q_3, _q_6, _q_8, _q_4, _q_7, _q_5, _q_19}, {
`:=`(nfa2, NFA({_q_9, _q_10, _q_11, _q_12, _q_13, _q_14, _q_15, _q_16, _q_17, _q_18, _q_20, _q_21, _q_22, _q_23, _q_24, _q_1, _q_2, _q_3, _q_6, _q_8, _q_4, _q_7, _q_5, _q_19}, {
`:=`(nfa2, NFA({_q_9, _q_10, _q_11, _q_12, _q_13, _q_14, _q_15, _q_16, _q_17, _q_18, _q_20, _q_21, _q_22, _q_23, _q_24, _q_1, _q_2, _q_3, _q_6, _q_8, _q_4, _q_7, _q_5, _q_19}, {
`:=`(nfa2, NFA({_q_9, _q_10, _q_11, _q_12, _q_13, _q_14, _q_15, _q_16, _q_17, _q_18, _q_20, _q_21, _q_22, _q_23, _q_24, _q_1, _q_2, _q_3, _q_6, _q_8, _q_4, _q_7, _q_5, _q_19}, {
`:=`(nfa2, NFA({_q_9, _q_10, _q_11, _q_12, _q_13, _q_14, _q_15, _q_16, _q_17, _q_18, _q_20, _q_21, _q_22, _q_23, _q_24, _q_1, _q_2, _q_3, _q_6, _q_8, _q_4, _q_7, _q_5, _q_19}, {
`:=`(nfa2, NFA({_q_9, _q_10, _q_11, _q_12, _q_13, _q_14, _q_15, _q_16, _q_17, _q_18, _q_20, _q_21, _q_22, _q_23, _q_24, _q_1, _q_2, _q_3, _q_6, _q_8, _q_4, _q_7, _q_5, _q_19}, {
(8.2.2)
 

`:=`(nfa3, NFA({_q_9, _q_10, _q_11, _q_12, _q_13, _q_14, _q_15, _q_16, _q_17, _q_18, _q_20, _q_21, _q_22, _q_23, _q_24, _q_1, _q_2, _q_3, _q_6, _q_8, _q_4, _q_7, _q_5, _q_19}, {
`:=`(nfa3, NFA({_q_9, _q_10, _q_11, _q_12, _q_13, _q_14, _q_15, _q_16, _q_17, _q_18, _q_20, _q_21, _q_22, _q_23, _q_24, _q_1, _q_2, _q_3, _q_6, _q_8, _q_4, _q_7, _q_5, _q_19}, {
`:=`(nfa3, NFA({_q_9, _q_10, _q_11, _q_12, _q_13, _q_14, _q_15, _q_16, _q_17, _q_18, _q_20, _q_21, _q_22, _q_23, _q_24, _q_1, _q_2, _q_3, _q_6, _q_8, _q_4, _q_7, _q_5, _q_19}, {
`:=`(nfa3, NFA({_q_9, _q_10, _q_11, _q_12, _q_13, _q_14, _q_15, _q_16, _q_17, _q_18, _q_20, _q_21, _q_22, _q_23, _q_24, _q_1, _q_2, _q_3, _q_6, _q_8, _q_4, _q_7, _q_5, _q_19}, {
`:=`(nfa3, NFA({_q_9, _q_10, _q_11, _q_12, _q_13, _q_14, _q_15, _q_16, _q_17, _q_18, _q_20, _q_21, _q_22, _q_23, _q_24, _q_1, _q_2, _q_3, _q_6, _q_8, _q_4, _q_7, _q_5, _q_19}, {
`:=`(nfa3, NFA({_q_9, _q_10, _q_11, _q_12, _q_13, _q_14, _q_15, _q_16, _q_17, _q_18, _q_20, _q_21, _q_22, _q_23, _q_24, _q_1, _q_2, _q_3, _q_6, _q_8, _q_4, _q_7, _q_5, _q_19}, {
`:=`(nfa3, NFA({_q_9, _q_10, _q_11, _q_12, _q_13, _q_14, _q_15, _q_16, _q_17, _q_18, _q_20, _q_21, _q_22, _q_23, _q_24, _q_1, _q_2, _q_3, _q_6, _q_8, _q_4, _q_7, _q_5, _q_19}, {
`:=`(nfa3, NFA({_q_9, _q_10, _q_11, _q_12, _q_13, _q_14, _q_15, _q_16, _q_17, _q_18, _q_20, _q_21, _q_22, _q_23, _q_24, _q_1, _q_2, _q_3, _q_6, _q_8, _q_4, _q_7, _q_5, _q_19}, {
`:=`(nfa3, NFA({_q_9, _q_10, _q_11, _q_12, _q_13, _q_14, _q_15, _q_16, _q_17, _q_18, _q_20, _q_21, _q_22, _q_23, _q_24, _q_1, _q_2, _q_3, _q_6, _q_8, _q_4, _q_7, _q_5, _q_19}, {
(8.2.2)
 

> isEmptyNFA(intersectNFA(nfa1,complementNFA(nfa2)));
isEmptyNFA(intersectNFA(nfa2,complementNFA(nfa1)));
isEmptyNFA(intersectNFA(nfa1,complementNFA(nfa3)));
isEmptyNFA(intersectNFA(nfa3,complementNFA(nfa1)));
 

true (8.2.3)
 

true (8.2.3)
 

true (8.2.3)
 

true (8.2.3)
 

> NFA2RE(nfa2,result=string);
 

( ( a * + ( ( a . ( ( lambda * ) ) ) . b ) . ( a * . b ) * . a * ) . ( ( ( b + b . a ) ) ) ) (8.2.4)
 

> nfa2:=mkNFA({q0,q1,q2},{a,b},table([(q0,a)={q1,q2},(q1,b)={q0}]),q0,{q2}):
transitionGraph(nfa2);
 

Plot_2d
 

> NFA2RE(nfa2);
 

RE([`(`, a, `.`, b, `)`, `*`, `.`, a]) (8.2.5)
 

> nfa3:=randomNFA(5,3,2);
NFA2RE(nfa3,result=string);
 

`:=`(nfa3, NFA({q1, q2, q3, q4, q0}, {a1, a2, a3}, TABLE([(q0, lambda) = {q2}, (q3, lambda) = {q1}, (q1, a1) = {q1, q3, q4}, (q2, lambda) = {q3}, (q1, lambda) = {q2}, (q4, lambda) = {q0}]), q0, {q1, q...
`:=`(nfa3, NFA({q1, q2, q3, q4, q0}, {a1, a2, a3}, TABLE([(q0, lambda) = {q2}, (q3, lambda) = {q1}, (q1, a1) = {q1, q3, q4}, (q2, lambda) = {q3}, (q1, lambda) = {q2}, (q4, lambda) = {q0}]), q0, {q1, q...
(8.2.6)
 

( ( ( a1 * . a1 + a1 * ) * . a1 * . a1 ) ) * . ( lambda + ( a1 * . a1 + a1 * ) * . ( a1 * + a1 * ) ) (8.2.6)
 

> nfa4:=mkNFA({q0,q1,q2},{a,b},table([(q0,b)={q0},(q0,a)={q1},(q1,a)={q0},(q1,b)={q1,q2},(q2,a)={q2},(q2,b)={q2}]),q0,{q2});
NFA2RE(nfa4,result=string);
 

`:=`(nfa4, NFA({q0, q1, q2}, {a, b}, TABLE([(q0, b) = {q0}, (q1, b) = {q1, q2}, (q2, b) = {q2}, (q2, a) = {q2}, (q1, a) = {q0}, (q0, a) = {q1}]), q0, {q2}))
`:=`(nfa4, NFA({q0, q1, q2}, {a, b}, TABLE([(q0, b) = {q0}, (q1, b) = {q1, q2}, (q2, b) = {q2}, (q2, a) = {q2}, (q1, a) = {q0}, (q0, a) = {q1}]), q0, {q2}))
(8.2.7)
 

( b + a . b * . a ) * . ( a . b * . b . ( b + a ) * ) (8.2.7)
 

> nfa5:=mkNFA({q0,q1,q2},{a,b},table([(q0,a)={q1},(q0,b)={q2},(q1,a)={q1,q2},(q1,b)={q0},(q2,b)={q1}]),q0,{q0}):
transitionGraph(nfa5);
NFA2RE(nfa5);
 

Plot_2d
 

RE(
RE(
 

> nfa6:=mkNFA({q0,q1,q2,q3},{a,b},table([(q0,a)={q1},(q1,b)={q0,q2},(q1,a)={q3},(q2,a)={q1}]),q0,{q2,q3}):
transitionGraph(nfa6);
NFA2RE(nfa6);
 

Plot_2d
 

RE([`(`, a, `.`, b, `+`, a, `.`, b, `.`, `(`, a, `.`, b, `)`, `*`, `.`, a, `.`, b, `)`, `*`, `.`, `(`, a, `.`, b, `.`, `(`, a, `.`, b, `)`, `*`, `+`, `(`, a, `.`, a, `+`, a, `.`, b, `.`, `(`, a, `.`, ...
RE([`(`, a, `.`, b, `+`, a, `.`, b, `.`, `(`, a, `.`, b, `)`, `*`, `.`, a, `.`, b, `)`, `*`, `.`, `(`, a, `.`, b, `.`, `(`, a, `.`, b, `)`, `*`, `+`, `(`, a, `.`, a, `+`, a, `.`, b, `.`, `(`, a, `.`, ...
 

>
 

>
 

>
 

DFA2RE 

Right-Quotient Languages 

> nfa1:=simplifyNFA(RE2NFA("(r1 + r2)*"));
 

`:=`(nfa1, NFA({_q_13, _q_14, _q_15, _q_16, _q_10, _q_11, _q_9, _q_12}, {
`:=`(nfa1, NFA({_q_13, _q_14, _q_15, _q_16, _q_10, _q_11, _q_9, _q_12}, {
`:=`(nfa1, NFA({_q_13, _q_14, _q_15, _q_16, _q_10, _q_11, _q_9, _q_12}, {
`:=`(nfa1, NFA({_q_13, _q_14, _q_15, _q_16, _q_10, _q_11, _q_9, _q_12}, {
(8.1)
 

> nfa2:=simplifyNFA(RE2NFA("(r1*.r2*)*"));
 

`:=`(nfa2, NFA({_q_13, _q_14, _q_15, _q_16, _q_17, _q_18, _q_19, _q_20, _q_22, _q_24, _q_23, _q_21}, {
`:=`(nfa2, NFA({_q_13, _q_14, _q_15, _q_16, _q_17, _q_18, _q_19, _q_20, _q_22, _q_24, _q_23, _q_21}, {
`:=`(nfa2, NFA({_q_13, _q_14, _q_15, _q_16, _q_17, _q_18, _q_19, _q_20, _q_22, _q_24, _q_23, _q_21}, {
`:=`(nfa2, NFA({_q_13, _q_14, _q_15, _q_16, _q_17, _q_18, _q_19, _q_20, _q_22, _q_24, _q_23, _q_21}, {
`:=`(nfa2, NFA({_q_13, _q_14, _q_15, _q_16, _q_17, _q_18, _q_19, _q_20, _q_22, _q_24, _q_23, _q_21}, {
(8.2)
 

> isEmptyNFA(intersectNFA(nfa2,complementNFA(nfa1)));
isEmptyNFA(intersectNFA(nfa1,complementNFA(nfa2)));
 

true (8.3)
 

true (8.3)
 

>