annotate automaton-in-agda/src/nfa136.agda @ 408:3d0aa205edf9

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Wed, 15 Nov 2023 16:24:07 +0900
parents 6f3636fbc481
children db02b6938e04
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
104
fba1cd54581d use exists in cond, nfa example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 module nfa136 where
fba1cd54581d use exists in cond, nfa example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2
fba1cd54581d use exists in cond, nfa example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 open import logic
fba1cd54581d use exists in cond, nfa example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 open import nfa
141
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
5 open import automaton
104
fba1cd54581d use exists in cond, nfa example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 open import Data.List
fba1cd54581d use exists in cond, nfa example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 open import Data.Fin
fba1cd54581d use exists in cond, nfa example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 open import Relation.Binary.PropositionalEquality hiding ( [_] )
fba1cd54581d use exists in cond, nfa example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9
fba1cd54581d use exists in cond, nfa example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 data StatesQ : Set where
fba1cd54581d use exists in cond, nfa example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 q1 : StatesQ
fba1cd54581d use exists in cond, nfa example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 q2 : StatesQ
fba1cd54581d use exists in cond, nfa example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 q3 : StatesQ
fba1cd54581d use exists in cond, nfa example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14
fba1cd54581d use exists in cond, nfa example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 data A2 : Set where
fba1cd54581d use exists in cond, nfa example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 a0 : A2
fba1cd54581d use exists in cond, nfa example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 b0 : A2
fba1cd54581d use exists in cond, nfa example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
18
fba1cd54581d use exists in cond, nfa example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 transition136 : StatesQ → A2 → StatesQ → Bool
fba1cd54581d use exists in cond, nfa example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 transition136 q1 b0 q2 = true
fba1cd54581d use exists in cond, nfa example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 transition136 q1 a0 q1 = true -- q1 → ep → q3
fba1cd54581d use exists in cond, nfa example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 transition136 q2 a0 q2 = true
fba1cd54581d use exists in cond, nfa example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 transition136 q2 a0 q3 = true
fba1cd54581d use exists in cond, nfa example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 transition136 q2 b0 q3 = true
fba1cd54581d use exists in cond, nfa example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 transition136 q3 a0 q1 = true
fba1cd54581d use exists in cond, nfa example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 transition136 _ _ _ = false
fba1cd54581d use exists in cond, nfa example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
27
fba1cd54581d use exists in cond, nfa example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 end136 : StatesQ → Bool
fba1cd54581d use exists in cond, nfa example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 end136 q1 = true
fba1cd54581d use exists in cond, nfa example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 end136 _ = false
fba1cd54581d use exists in cond, nfa example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
31
fba1cd54581d use exists in cond, nfa example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 start136 : StatesQ → Bool
fba1cd54581d use exists in cond, nfa example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 start136 q1 = true
fba1cd54581d use exists in cond, nfa example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 start136 _ = false
fba1cd54581d use exists in cond, nfa example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35
141
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
36 exists136 : (StatesQ → Bool) → Bool
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
37 exists136 f = f q1 \/ f q2 \/ f q3
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
38
104
fba1cd54581d use exists in cond, nfa example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 nfa136 : NAutomaton StatesQ A2
fba1cd54581d use exists in cond, nfa example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 nfa136 = record { Nδ = transition136; Nend = end136 }
fba1cd54581d use exists in cond, nfa example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
41
332
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
42 states136 = q1 ∷ q2 ∷ q3 ∷ []
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
43
141
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
44 example136-1 = Naccept nfa136 exists136 start136( a0 ∷ b0 ∷ a0 ∷ a0 ∷ [] )
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
45
332
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
46 t146-1 = Ntrace nfa136 states136 exists136 start136( a0 ∷ b0 ∷ a0 ∷ a0 ∷ [] )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
47
408
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
48 -- test111 = ?
104
fba1cd54581d use exists in cond, nfa example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
49
141
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
50 example136-0 = Naccept nfa136 exists136 start136( a0 ∷ [] )
104
fba1cd54581d use exists in cond, nfa example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
51
141
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
52 example136-2 = Naccept nfa136 exists136 start136( b0 ∷ a0 ∷ b0 ∷ a0 ∷ b0 ∷ [] )
332
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
53 t146-2 = Ntrace nfa136 states136 exists136 start136( b0 ∷ a0 ∷ b0 ∷ a0 ∷ b0 ∷ [] )
104
fba1cd54581d use exists in cond, nfa example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
54
fba1cd54581d use exists in cond, nfa example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
55 nx : (StatesQ → Bool) → (List A2 ) → StatesQ → Bool
fba1cd54581d use exists in cond, nfa example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
56 nx now [] = now
141
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
57 nx now ( i ∷ ni ) = (Nmoves nfa136 exists136 (nx now ni) i )
104
fba1cd54581d use exists in cond, nfa example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
58
332
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
59 example136-3 = to-list states136 start136
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
60 example136-4 = to-list states136 (nx start136 ( a0 ∷ b0 ∷ a0 ∷ [] ))
104
fba1cd54581d use exists in cond, nfa example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
61
fba1cd54581d use exists in cond, nfa example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
62 open import sbconst2
fba1cd54581d use exists in cond, nfa example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
63
fba1cd54581d use exists in cond, nfa example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
64 fm136 : Automaton ( StatesQ → Bool ) A2
141
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
65 fm136 = subset-construction exists136 nfa136
104
fba1cd54581d use exists in cond, nfa example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
66
fba1cd54581d use exists in cond, nfa example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
67 open NAutomaton
fba1cd54581d use exists in cond, nfa example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
68
141
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
69 lemma136 : ( x : List A2 ) → Naccept nfa136 exists136 start136 x ≡ accept fm136 start136 x
104
fba1cd54581d use exists in cond, nfa example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
70 lemma136 x = lemma136-1 x start136 where
fba1cd54581d use exists in cond, nfa example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
71 lemma136-1 : ( x : List A2 ) → ( states : StatesQ → Bool )
141
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
72 → Naccept nfa136 exists136 states x ≡ accept fm136 states x
104
fba1cd54581d use exists in cond, nfa example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
73 lemma136-1 [] _ = refl
141
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
74 lemma136-1 (h ∷ t) states = lemma136-1 t (δconv exists136 (Nδ nfa136) states h)
332
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
75
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
76 data Σ2 : Set where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
77 ca : Σ2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
78 cb : Σ2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
79 cc : Σ2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
80 cf : Σ2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
81
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
82 data Q2 : Set where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
83 a0 : Q2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
84 a1 : Q2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
85 ae : Q2
408
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
86 af : Q2
332
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
87 b0 : Q2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
88 b1 : Q2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
89 be : Q2
408
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
90 bf : Q2
332
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
91
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
92 -- a.*f
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
93
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
94 a-end : Q2 → Bool
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
95 a-end ae = true
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
96 a-end _ = false
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
97
408
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
98 aδ : Q2 → Σ2 → Q2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
99 aδ a0 ca = a1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
100 aδ a0 _ = af
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
101 aδ a1 cf = ae
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
102 aδ a1 _ = a1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
103 aδ ae cf = ae
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
104 aδ ae _ = a1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
105 aδ _ _ = af
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
106 fa-a : Automaton Q2 Σ2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
107 fa-a = record { δ = aδ ; aend = a-end }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
108
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
109 test111 : Bool
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
110 test111 = accept fa-a a0 ( ca ∷ cf ∷ ca ∷ [] )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
111
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
112 b-end : Q2 → Bool
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
113 b-end be = true
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
114 b-end _ = false
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
115
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
116 bδ : Q2 → Σ2 → Q2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
117 bδ b0 cb = b1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
118 bδ b0 _ = bf
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
119 bδ b1 cf = be
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
120 bδ b1 _ = b1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
121 bδ be cf = be
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
122 bδ be _ = b1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
123 bδ _ _ = bf
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
124 fa-b : Automaton Q2 Σ2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
125 fa-b = record { δ = bδ ; aend = b-end }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
126
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
127 test115 : Bool
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
128 test115 = accept fa-b b0 ( cb ∷ cf ∷ cf ∷ [] )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
129
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
130 open import regular-language
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
131
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
132 test116 = split (accept fa-a a0) (accept fa-b b0) ( ca ∷ cf ∷ cb ∷ cf ∷ cf ∷ [] )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
133
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
134 naδ : Q2 → Σ2 → Q2 → Bool
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
135 naδ a0 ca a1 = true
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
136 naδ a0 _ _ = false
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
137 naδ a1 cf ae = true
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
138 naδ a1 _ a1 = true
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
139 naδ _ _ _ = false
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
140
332
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
141 a-start : Q2 → Bool
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
142 a-start a0 = true
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
143 a-start _ = false
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
144
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
145 nfa-a : NAutomaton Q2 Σ2
408
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
146 nfa-a = record { Nδ = naδ ; Nend = a-end }
332
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
147
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
148 nfa-a-exists : (Q2 → Bool) → Bool
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
149 nfa-a-exists p = p a0 \/ p a1 \/ p ae
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
150
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
151 test-a1 : Bool
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
152 test-a1 = Naccept nfa-a nfa-a-exists a-start ( ca ∷ cf ∷ ca ∷ [] )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
153
408
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
154 -- test-a2 = map reverse ( NtraceDepth nfa-a a-start (a0 ∷ a1 ∷ ae ∷ []) ( ca ∷ cf ∷ cf ∷ [] ) )
332
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
155
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
156 -- b.*f
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
157
408
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
158 nbδ : Q2 → Σ2 → Q2 → Bool
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
159 nbδ ae cb b1 = true
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
160 nbδ ae _ _ = false
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
161 nbδ b1 cf be = true
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
162 nbδ b1 _ b1 = true
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
163 nbδ _ _ _ = false
332
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
164
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
165 b-start : Q2 → Bool
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
166 b-start ae = true
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
167 b-start _ = false
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
168
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
169 nfa-b : NAutomaton Q2 Σ2
408
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
170 nfa-b = record { Nδ = nbδ ; Nend = b-end }
332
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
171
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
172 nfa-b-exists : (Q2 → Bool) → Bool
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
173 nfa-b-exists p = p b0 \/ p b1 \/ p ae
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
174
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
175 -- (a.*f)(b.*f)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
176
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
177 abδ : Q2 → Σ2 → Q2 → Bool
408
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
178 abδ x i y = naδ x i y \/ nbδ x i y
332
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
179
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
180 nfa-ab : NAutomaton Q2 Σ2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
181 nfa-ab = record { Nδ = abδ ; Nend = b-end }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
182
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
183 nfa-ab-exists : (Q2 → Bool) → Bool
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
184 nfa-ab-exists p = nfa-a-exists p \/ nfa-b-exists p
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
185
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
186 test-ab1 : Bool
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
187 test-ab1 = Naccept nfa-a nfa-a-exists a-start ( ca ∷ cf ∷ ca ∷ cb ∷ cf ∷ [] )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
188
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
189 test-ab2 : Bool
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
190 test-ab2 = Naccept nfa-a nfa-a-exists a-start ( ca ∷ cf ∷ ca ∷ cb ∷ cb ∷ [] )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
191
408
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
192 -- test-ab3 = map reverse ( NtraceDepth nfa-ab a-start (a0 ∷ a1 ∷ ae ∷ b0 ∷ b1 ∷ be ∷ []) ( ca ∷ cf ∷ ca ∷ cb ∷ cf ∷ [] ))
332
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
193
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
194 test112 : Automaton (Q2 → Bool) Σ2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
195 test112 = subset-construction nfa-ab-exists nfa-ab
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
196
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
197 test114 = Automaton.δ (subset-construction nfa-ab-exists nfa-ab)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
198
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
199 test113 : Bool
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
200 test113 = accept test112 a-start ( ca ∷ cf ∷ ca ∷ cb ∷ cb ∷ [] )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
201
408
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
202 --
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
203
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
204
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
205
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
206
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
207
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
208