Random NFA 

> nfa1:=randomNFA(6,[0,1],2);
nfa2:=randomNFA(4,[a,b],2);
nfa3:=randomNFA(6,[0,1],2);
 

`:=`(nfa1, NFA({q1, q2, q3, q4, q5, q0}, {0, 1}, TABLE([(q1, 0) = {q3, q0}, (q3, lambda) = {q1}, (q2, lambda) = {q0}, (q1, lambda) = {q5}, (q4, lambda) = {q0}, (q1, 1) = {q1, q4}]), q0, {q3, q4}))
`:=`(nfa1, NFA({q1, q2, q3, q4, q5, q0}, {0, 1}, TABLE([(q1, 0) = {q3, q0}, (q3, lambda) = {q1}, (q2, lambda) = {q0}, (q1, lambda) = {q5}, (q4, lambda) = {q0}, (q1, 1) = {q1, q4}]), q0, {q3, q4}))
(6.1.1)
 

`:=`(nfa2, NFA({q1, q2, q3, q0}, {a, b}, TABLE([(q0, lambda) = {q2}, (q3, lambda) = {q0}, (q2, lambda) = {q1}, (q1, lambda) = {q2}, (q2, a) = {q2, q3, q0}, (q1, a) = {q1, q3}]), q0, {q1, q3}))
`:=`(nfa2, NFA({q1, q2, q3, q0}, {a, b}, TABLE([(q0, lambda) = {q2}, (q3, lambda) = {q0}, (q2, lambda) = {q1}, (q1, lambda) = {q2}, (q2, a) = {q2, q3, q0}, (q1, a) = {q1, q3}]), q0, {q1, q3}))
(6.1.1)
 

`:=`(nfa3, NFA({q1, q2, q3, q4, q5, q0}, {0, 1}, TABLE([(q1, 0) = {q1, q3}, (q3, lambda) = {q4}, (q2, lambda) = {q3}, (q1, lambda) = {q5}]), q0, {q2, q4}))
`:=`(nfa3, NFA({q1, q2, q3, q4, q5, q0}, {0, 1}, TABLE([(q1, 0) = {q1, q3}, (q3, lambda) = {q4}, (q2, lambda) = {q3}, (q1, lambda) = {q5}]), q0, {q2, q4}))
(6.1.1)
 

> printlevel:=0:
intersectNFA(nfa1,nfa3);
 

NFA({[{q0}, {}], [{q0}, {q0}], [{}, {}], [{}, {q0}]}, {0, 1}, TABLE([([{q0}, {}], 1) = {[{}, {}]}, ([{q0}, {}], 0) = {[{}, {}]}, ([{}, {q0}], 1) = {[{}, {}]}, ([{}, {}], 1) = {[{}, {}]}, ([{}, {}], 0)...
NFA({[{q0}, {}], [{q0}, {q0}], [{}, {}], [{}, {q0}]}, {0, 1}, TABLE([([{q0}, {}], 1) = {[{}, {}]}, ([{q0}, {}], 0) = {[{}, {}]}, ([{}, {q0}], 1) = {[{}, {}]}, ([{}, {}], 1) = {[{}, {}]}, ([{}, {}], 0)...
NFA({[{q0}, {}], [{q0}, {q0}], [{}, {}], [{}, {q0}]}, {0, 1}, TABLE([([{q0}, {}], 1) = {[{}, {}]}, ([{q0}, {}], 0) = {[{}, {}]}, ([{}, {q0}], 1) = {[{}, {}]}, ([{}, {}], 1) = {[{}, {}]}, ([{}, {}], 0)...
NFA({[{q0}, {}], [{q0}, {q0}], [{}, {}], [{}, {q0}]}, {0, 1}, TABLE([([{q0}, {}], 1) = {[{}, {}]}, ([{q0}, {}], 0) = {[{}, {}]}, ([{}, {q0}], 1) = {[{}, {}]}, ([{}, {}], 1) = {[{}, {}]}, ([{}, {}], 0)...
(6.1.2)
 

> transitionGraph(unionNFA(nfa1,nfa2));
transitionGraph(concatenationNFA(nfa1,nfa2));
transitionGraph(KleeneStarNFA(nfa1));
transitionGraph(intersectNFA(nfa1,nfa3));
transitionGraph(nfa1);transitionGraph(nfa2);
 

Plot_2d
 

Plot_2d
 

Plot_2d
 

Plot_2d
 

Plot_2d
 

Plot_2d
 

>
 

> nfa10:=mkNFA({q0, q1, q2, q3, q4, q5},{0, 1},table([(q0, 1) = {q1, q5}, (q0, lambda) = {q0}, (q0, 0) = {q2, q3, q4}, (q5, 0) = {q0, q1, q4}, (q2, 0) = {q3, q5}, (q1, lambda) = {q3}, (q1, 0) = {q3, q4}, (q4, 0) = {q1, q4}, (q3, 0) = {q5}, (q2, 1) = {q0, q3}]),q0,{q1, q3});
transitionGraph(nfa10);
 

`:=`(nfa10, NFA({q1, q2, q3, q4, q5, q0}, {0, 1}, TABLE([(q2, 0) = {q3, q5}, (q0, lambda) = {q0}, (q0, 0) = {q2, q3, q4}, (q1, 0) = {q3, q4}, (q2, 1) = {q3, q0}, (q0, 1) = {q1, q5}, (q1, lambda) = {q3...
`:=`(nfa10, NFA({q1, q2, q3, q4, q5, q0}, {0, 1}, TABLE([(q2, 0) = {q3, q5}, (q0, lambda) = {q0}, (q0, 0) = {q2, q3, q4}, (q1, 0) = {q3, q4}, (q2, 1) = {q3, q0}, (q0, 1) = {q1, q5}, (q1, lambda) = {q3...
`:=`(nfa10, NFA({q1, q2, q3, q4, q5, q0}, {0, 1}, TABLE([(q2, 0) = {q3, q5}, (q0, lambda) = {q0}, (q0, 0) = {q2, q3, q4}, (q1, 0) = {q3, q4}, (q2, 1) = {q3, q0}, (q0, 1) = {q1, q5}, (q1, lambda) = {q3...
 

Plot_2d
 

> type(nfa10,NFA);
 

true (6.1.3)
 

> stringVerificationNFA(nfa10,[1,0,0,0,1,0,1,0],`walk`);walk;
 

Accepted (6.1.4)
 

[[q0, 1], [q1, 0], [q3, 0], [q5, 0], [q0, 1], [q5, 0], [q0, 1], [q1, 0], q3] (6.1.4)
 

> animateNFA(nfa10,[1,0,0,0,1,0,1,0]);
 

Plot_2d
 

> nfa := mkNFA({q0, q1, q2, q3, q4, q5},{0, 1},table([(q1, lambda) = {q1}, (q3, 1) = {q4}, (q2, 0) = {q3, q5}, (q1, 0) = {q0, q1, q3}, (q2, lambda) = {q5}, (q0, 0) = {q0, q1,q4}, (q1, 1) = {q5},(q4,1)={q2}]),q0,{q4});
transitionGraph(nfa);
 

`:=`(nfa, NFA({q1, q2, q3, q4, q5, q0}, {0, 1}, TABLE([(q2, 0) = {q3, q5}, (q1, 0) = {q1, q3, q0}, (q0, 0) = {q1, q4, q0}, (q3, 1) = {q4}, (q4, 1) = {q2}, (q2, lambda) = {q5}, (q1, lambda) = {q1}, (q1...
`:=`(nfa, NFA({q1, q2, q3, q4, q5, q0}, {0, 1}, TABLE([(q2, 0) = {q3, q5}, (q1, 0) = {q1, q3, q0}, (q0, 0) = {q1, q4, q0}, (q3, 1) = {q4}, (q4, 1) = {q2}, (q2, lambda) = {q5}, (q1, lambda) = {q1}, (q1...
`:=`(nfa, NFA({q1, q2, q3, q4, q5, q0}, {0, 1}, TABLE([(q2, 0) = {q3, q5}, (q1, 0) = {q1, q3, q0}, (q0, 0) = {q1, q4, q0}, (q3, 1) = {q4}, (q4, 1) = {q2}, (q2, lambda) = {q5}, (q1, lambda) = {q1}, (q1...
 

Plot_2d
 

> stringVerificationNFA(nfa,[0,0,1],`walk`);walk;
 

Accepted (6.1.5)
 

[[q0, 0], [q1, 0], [q3, 1], q4] (6.1.5)
 

> animateNFA(nfa,[0,0,0,0,0,0,0,1]);
 

Plot_2d
 

> stringVerificationNFA(nfa,[0,0,1],`walk`);walk;
 

Accepted (6.1.6)
 

[[q0, 0], [q1, 0], [q3, 1], q4] (6.1.6)
 

> stringVerificationNFA(nfa,[0,0,1,1],`walk`);walk;
 

Unaccepted (6.1.7)
 

[[q0, 0], [q1, 0], [q3, 1], [q4, 1], [q2, lambda], q5] (6.1.7)
 

> nfa:=mkNFA({q0, q1, q2, q3, q4, q5},{0, 1},table([(q5, lambda) = {q5}, (q1, lambda) = {q3}, (q3, lambda) = {q3}, (q2, 0) = {q1, q4}, (q1, 0) = {q1, q3}, (q4, lambda) = {q1}, (q0, lambda) = {q3}, (q2, lambda) = {q1}, (q0, 0) = {q2, q3, q4}, (q4, 0) = {q1, q5}, (q3, 0) = {q0, q5}]),q0,{q4, q5});
transitionGraph(nfa);
 

`:=`(nfa, NFA({q1, q2, q3, q4, q5, q0}, {0, 1}, TABLE([(q2, 0) = {q1, q4}, (q0, lambda) = {q3}, (q1, 0) = {q1, q3}, (q0, 0) = {q2, q3, q4}, (q3, lambda) = {q3}, (q2, lambda) = {q1}, (q1, lambda) = {q3...
`:=`(nfa, NFA({q1, q2, q3, q4, q5, q0}, {0, 1}, TABLE([(q2, 0) = {q1, q4}, (q0, lambda) = {q3}, (q1, 0) = {q1, q3}, (q0, 0) = {q2, q3, q4}, (q3, lambda) = {q3}, (q2, lambda) = {q1}, (q1, lambda) = {q3...
`:=`(nfa, NFA({q1, q2, q3, q4, q5, q0}, {0, 1}, TABLE([(q2, 0) = {q1, q4}, (q0, lambda) = {q3}, (q1, 0) = {q1, q3}, (q0, 0) = {q2, q3, q4}, (q3, lambda) = {q3}, (q2, lambda) = {q1}, (q1, lambda) = {q3...
 

Plot_2d
 

> nfa := mkNFA({q0, q1, q2, q3},{0, 1},table([(q1, 0) = {q2, q3}, (q0, 0) = {q1}, (q2, 0) = {q1, q2}, (q3, lambda) = {q3}, (q2, lambda) = {q2}, (q1, lambda) = {q1}, (q0, lambda) = {q3}]),q0,{q0, q3}):
transitionGraph(nfa);
 

Plot_2d
 

> stringVerificationNFA(nfa,[0,0,0,0],`walk`);walk;
 

Accepted (6.1.8)
 

[[q0, 0], [q1, 0], [q2, 0], [q1, 0], q3] (6.1.8)