Mercurial > hg > Members > kono > Proof > automaton
comparison 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 |
comparison
equal
deleted
inserted
replaced
407:c7ad8d2dc157 | 408:3d0aa205edf9 |
---|---|
43 | 43 |
44 example136-1 = Naccept nfa136 exists136 start136( a0 ∷ b0 ∷ a0 ∷ a0 ∷ [] ) | 44 example136-1 = Naccept nfa136 exists136 start136( a0 ∷ b0 ∷ a0 ∷ a0 ∷ [] ) |
45 | 45 |
46 t146-1 = Ntrace nfa136 states136 exists136 start136( a0 ∷ b0 ∷ a0 ∷ a0 ∷ [] ) | 46 t146-1 = Ntrace nfa136 states136 exists136 start136( a0 ∷ b0 ∷ a0 ∷ a0 ∷ [] ) |
47 | 47 |
48 test111 = ? | 48 -- test111 = ? |
49 | 49 |
50 example136-0 = Naccept nfa136 exists136 start136( a0 ∷ [] ) | 50 example136-0 = Naccept nfa136 exists136 start136( a0 ∷ [] ) |
51 | 51 |
52 example136-2 = Naccept nfa136 exists136 start136( b0 ∷ a0 ∷ b0 ∷ a0 ∷ b0 ∷ [] ) | 52 example136-2 = Naccept nfa136 exists136 start136( b0 ∷ a0 ∷ b0 ∷ a0 ∷ b0 ∷ [] ) |
53 t146-2 = Ntrace nfa136 states136 exists136 start136( b0 ∷ a0 ∷ b0 ∷ a0 ∷ b0 ∷ [] ) | 53 t146-2 = Ntrace nfa136 states136 exists136 start136( b0 ∷ a0 ∷ b0 ∷ a0 ∷ b0 ∷ [] ) |
81 | 81 |
82 data Q2 : Set where | 82 data Q2 : Set where |
83 a0 : Q2 | 83 a0 : Q2 |
84 a1 : Q2 | 84 a1 : Q2 |
85 ae : Q2 | 85 ae : Q2 |
86 af : Q2 | |
86 b0 : Q2 | 87 b0 : Q2 |
87 b1 : Q2 | 88 b1 : Q2 |
88 be : Q2 | 89 be : Q2 |
90 bf : Q2 | |
89 | 91 |
90 -- a.*f | 92 -- a.*f |
91 | |
92 aδ : Q2 → Σ2 → Q2 → Bool | |
93 aδ a0 ca a1 = true | |
94 aδ a0 _ _ = false | |
95 aδ a1 cf ae = true | |
96 aδ a1 _ a1 = true | |
97 aδ _ _ _ = false | |
98 | 93 |
99 a-end : Q2 → Bool | 94 a-end : Q2 → Bool |
100 a-end ae = true | 95 a-end ae = true |
101 a-end _ = false | 96 a-end _ = false |
102 | 97 |
98 aδ : Q2 → Σ2 → Q2 | |
99 aδ a0 ca = a1 | |
100 aδ a0 _ = af | |
101 aδ a1 cf = ae | |
102 aδ a1 _ = a1 | |
103 aδ ae cf = ae | |
104 aδ ae _ = a1 | |
105 aδ _ _ = af | |
106 fa-a : Automaton Q2 Σ2 | |
107 fa-a = record { δ = aδ ; aend = a-end } | |
108 | |
109 test111 : Bool | |
110 test111 = accept fa-a a0 ( ca ∷ cf ∷ ca ∷ [] ) | |
111 | |
112 b-end : Q2 → Bool | |
113 b-end be = true | |
114 b-end _ = false | |
115 | |
116 bδ : Q2 → Σ2 → Q2 | |
117 bδ b0 cb = b1 | |
118 bδ b0 _ = bf | |
119 bδ b1 cf = be | |
120 bδ b1 _ = b1 | |
121 bδ be cf = be | |
122 bδ be _ = b1 | |
123 bδ _ _ = bf | |
124 fa-b : Automaton Q2 Σ2 | |
125 fa-b = record { δ = bδ ; aend = b-end } | |
126 | |
127 test115 : Bool | |
128 test115 = accept fa-b b0 ( cb ∷ cf ∷ cf ∷ [] ) | |
129 | |
130 open import regular-language | |
131 | |
132 test116 = split (accept fa-a a0) (accept fa-b b0) ( ca ∷ cf ∷ cb ∷ cf ∷ cf ∷ [] ) | |
133 | |
134 naδ : Q2 → Σ2 → Q2 → Bool | |
135 naδ a0 ca a1 = true | |
136 naδ a0 _ _ = false | |
137 naδ a1 cf ae = true | |
138 naδ a1 _ a1 = true | |
139 naδ _ _ _ = false | |
140 | |
103 a-start : Q2 → Bool | 141 a-start : Q2 → Bool |
104 a-start a0 = true | 142 a-start a0 = true |
105 a-start _ = false | 143 a-start _ = false |
106 | 144 |
107 nfa-a : NAutomaton Q2 Σ2 | 145 nfa-a : NAutomaton Q2 Σ2 |
108 nfa-a = record { Nδ = aδ ; Nend = a-end } | 146 nfa-a = record { Nδ = naδ ; Nend = a-end } |
109 | 147 |
110 nfa-a-exists : (Q2 → Bool) → Bool | 148 nfa-a-exists : (Q2 → Bool) → Bool |
111 nfa-a-exists p = p a0 \/ p a1 \/ p ae | 149 nfa-a-exists p = p a0 \/ p a1 \/ p ae |
112 | 150 |
113 test-a1 : Bool | 151 test-a1 : Bool |
114 test-a1 = Naccept nfa-a nfa-a-exists a-start ( ca ∷ cf ∷ ca ∷ [] ) | 152 test-a1 = Naccept nfa-a nfa-a-exists a-start ( ca ∷ cf ∷ ca ∷ [] ) |
115 | 153 |
116 test-a2 = map reverse ( NtraceDepth nfa-a a-start (a0 ∷ a1 ∷ ae ∷ []) ( ca ∷ cf ∷ cf ∷ [] ) ) | 154 -- test-a2 = map reverse ( NtraceDepth nfa-a a-start (a0 ∷ a1 ∷ ae ∷ []) ( ca ∷ cf ∷ cf ∷ [] ) ) |
117 | 155 |
118 -- b.*f | 156 -- b.*f |
119 | 157 |
120 bδ : Q2 → Σ2 → Q2 → Bool | 158 nbδ : Q2 → Σ2 → Q2 → Bool |
121 bδ ae cb b1 = true | 159 nbδ ae cb b1 = true |
122 bδ ae _ _ = false | 160 nbδ ae _ _ = false |
123 bδ b1 cf be = true | 161 nbδ b1 cf be = true |
124 bδ b1 _ b1 = true | 162 nbδ b1 _ b1 = true |
125 bδ _ _ _ = false | 163 nbδ _ _ _ = false |
126 | |
127 b-end : Q2 → Bool | |
128 b-end be = true | |
129 b-end _ = false | |
130 | 164 |
131 b-start : Q2 → Bool | 165 b-start : Q2 → Bool |
132 b-start ae = true | 166 b-start ae = true |
133 b-start _ = false | 167 b-start _ = false |
134 | 168 |
135 nfa-b : NAutomaton Q2 Σ2 | 169 nfa-b : NAutomaton Q2 Σ2 |
136 nfa-b = record { Nδ = bδ ; Nend = b-end } | 170 nfa-b = record { Nδ = nbδ ; Nend = b-end } |
137 | 171 |
138 nfa-b-exists : (Q2 → Bool) → Bool | 172 nfa-b-exists : (Q2 → Bool) → Bool |
139 nfa-b-exists p = p b0 \/ p b1 \/ p ae | 173 nfa-b-exists p = p b0 \/ p b1 \/ p ae |
140 | 174 |
141 -- (a.*f)(b.*f) | 175 -- (a.*f)(b.*f) |
142 | 176 |
143 abδ : Q2 → Σ2 → Q2 → Bool | 177 abδ : Q2 → Σ2 → Q2 → Bool |
144 abδ x i y = aδ x i y \/ bδ x i y | 178 abδ x i y = naδ x i y \/ nbδ x i y |
145 | 179 |
146 nfa-ab : NAutomaton Q2 Σ2 | 180 nfa-ab : NAutomaton Q2 Σ2 |
147 nfa-ab = record { Nδ = abδ ; Nend = b-end } | 181 nfa-ab = record { Nδ = abδ ; Nend = b-end } |
148 | 182 |
149 nfa-ab-exists : (Q2 → Bool) → Bool | 183 nfa-ab-exists : (Q2 → Bool) → Bool |
153 test-ab1 = Naccept nfa-a nfa-a-exists a-start ( ca ∷ cf ∷ ca ∷ cb ∷ cf ∷ [] ) | 187 test-ab1 = Naccept nfa-a nfa-a-exists a-start ( ca ∷ cf ∷ ca ∷ cb ∷ cf ∷ [] ) |
154 | 188 |
155 test-ab2 : Bool | 189 test-ab2 : Bool |
156 test-ab2 = Naccept nfa-a nfa-a-exists a-start ( ca ∷ cf ∷ ca ∷ cb ∷ cb ∷ [] ) | 190 test-ab2 = Naccept nfa-a nfa-a-exists a-start ( ca ∷ cf ∷ ca ∷ cb ∷ cb ∷ [] ) |
157 | 191 |
158 test-ab3 = map reverse ( NtraceDepth nfa-ab a-start (a0 ∷ a1 ∷ ae ∷ b0 ∷ b1 ∷ be ∷ []) ( ca ∷ cf ∷ ca ∷ cb ∷ cf ∷ [] )) | 192 -- test-ab3 = map reverse ( NtraceDepth nfa-ab a-start (a0 ∷ a1 ∷ ae ∷ b0 ∷ b1 ∷ be ∷ []) ( ca ∷ cf ∷ ca ∷ cb ∷ cf ∷ [] )) |
159 | 193 |
160 test112 : Automaton (Q2 → Bool) Σ2 | 194 test112 : Automaton (Q2 → Bool) Σ2 |
161 test112 = subset-construction nfa-ab-exists nfa-ab | 195 test112 = subset-construction nfa-ab-exists nfa-ab |
162 | 196 |
163 test114 = Automaton.δ (subset-construction nfa-ab-exists nfa-ab) | 197 test114 = Automaton.δ (subset-construction nfa-ab-exists nfa-ab) |
164 | 198 |
165 test113 : Bool | 199 test113 : Bool |
166 test113 = accept test112 a-start ( ca ∷ cf ∷ ca ∷ cb ∷ cb ∷ [] ) | 200 test113 = accept test112 a-start ( ca ∷ cf ∷ ca ∷ cb ∷ cb ∷ [] ) |
167 | 201 |
202 -- | |
203 | |
204 | |
205 | |
206 | |
207 | |
208 |