comparison automaton-in-agda/src/nfa136.agda @ 410:db02b6938e04

StarProp and Ntrace
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Wed, 22 Nov 2023 17:07:01 +0900
parents 3d0aa205edf9
children
comparison
equal deleted inserted replaced
409:4e4acdc43dee 410:db02b6938e04
95 a-end ae = true 95 a-end ae = true
96 a-end _ = false 96 a-end _ = false
97 97
98 aδ : Q2 → Σ2 → Q2 98 aδ : Q2 → Σ2 → Q2
99 aδ a0 ca = a1 99 aδ a0 ca = a1
100 aδ a0 _ = af 100 aδ a0 cb = af
101 aδ a0 cc = af
102 aδ a0 cf = af
101 aδ a1 cf = ae 103 aδ a1 cf = ae
102 aδ a1 _ = a1 104 aδ a1 _ = a1
103 aδ ae cf = ae 105 aδ ae cf = ae
104 aδ ae _ = a1 106 aδ ae _ = a1
105 aδ _ _ = af 107 aδ _ _ = af
107 fa-a = record { δ = aδ ; aend = a-end } 109 fa-a = record { δ = aδ ; aend = a-end }
108 110
109 test111 : Bool 111 test111 : Bool
110 test111 = accept fa-a a0 ( ca ∷ cf ∷ ca ∷ [] ) 112 test111 = accept fa-a a0 ( ca ∷ cf ∷ ca ∷ [] )
111 113
114 -- b.*f
115
112 b-end : Q2 → Bool 116 b-end : Q2 → Bool
113 b-end be = true 117 b-end be = true
114 b-end _ = false 118 b-end _ = false
115 119
116 bδ : Q2 → Σ2 → Q2 120 bδ : Q2 → Σ2 → Q2
117 bδ b0 cb = b1 121 bδ ae cb = b1
118 bδ b0 _ = bf 122 bδ ae _ = bf
119 bδ b1 cf = be 123 bδ b1 cf = be
120 bδ b1 _ = b1 124 bδ b1 _ = b1
121 bδ be cf = be 125 bδ be cf = be
122 bδ be _ = b1 126 bδ be _ = b1
123 bδ _ _ = bf 127 bδ _ _ = bf
127 test115 : Bool 131 test115 : Bool
128 test115 = accept fa-b b0 ( cb ∷ cf ∷ cf ∷ [] ) 132 test115 = accept fa-b b0 ( cb ∷ cf ∷ cf ∷ [] )
129 133
130 open import regular-language 134 open import regular-language
131 135
136 -- (a.*f)(b.*f) -- a.*(fb).*f
132 test116 = split (accept fa-a a0) (accept fa-b b0) ( ca ∷ cf ∷ cb ∷ cf ∷ cf ∷ [] ) 137 test116 = split (accept fa-a a0) (accept fa-b b0) ( ca ∷ cf ∷ cb ∷ cf ∷ cf ∷ [] )
138 -- a0 ae b0 b1 be
139 test117 = split (accept fa-a a0) (accept fa-b b0) ( ca ∷ cf ∷ ca ∷ cb ∷ ca ∷ cf ∷ cf ∷ [] )
140 -- a0 ae a0 b0 b1 be
141 -- a0 ae ae b0 b1 be
133 142
134 naδ : Q2 → Σ2 → Q2 → Bool 143 naδ : Q2 → Σ2 → Q2 → Bool
135 naδ a0 ca a1 = true 144 naδ a0 ca a1 = true
136 naδ a0 _ _ = false 145 naδ a0 _ _ = false
137 naδ a1 cf ae = true 146 naδ a1 cf ae = true
138 naδ a1 _ a1 = true 147 naδ a1 _ a1 = true
148 naδ ae cf ae = true
149 naδ ae _ a1 = true
139 naδ _ _ _ = false 150 naδ _ _ _ = false
140 151
141 a-start : Q2 → Bool 152 a-start : Q2 → Bool
142 a-start a0 = true 153 a-start a0 = true
143 a-start _ = false 154 a-start _ = false
158 nbδ : Q2 → Σ2 → Q2 → Bool 169 nbδ : Q2 → Σ2 → Q2 → Bool
159 nbδ ae cb b1 = true 170 nbδ ae cb b1 = true
160 nbδ ae _ _ = false 171 nbδ ae _ _ = false
161 nbδ b1 cf be = true 172 nbδ b1 cf be = true
162 nbδ b1 _ b1 = true 173 nbδ b1 _ b1 = true
174 nbδ be cf be = true
175 nbδ be _ b1 = true
163 nbδ _ _ _ = false 176 nbδ _ _ _ = false
164 177
165 b-start : Q2 → Bool 178 b-start : Q2 → Bool
166 b-start ae = true 179 b-start ae = true
167 b-start _ = false 180 b-start _ = false
168 181
169 nfa-b : NAutomaton Q2 Σ2 182 nfa-b : NAutomaton Q2 Σ2
170 nfa-b = record { Nδ = nbδ ; Nend = b-end } 183 nfa-b = record { Nδ = nbδ ; Nend = b-end }
171 184
172 nfa-b-exists : (Q2 → Bool) → Bool 185 nfa-b-exists : (Q2 → Bool) → Bool
173 nfa-b-exists p = p b0 \/ p b1 \/ p ae 186 nfa-b-exists p = p b0 \/ p b1 \/ p be
174 187
175 -- (a.*f)(b.*f) 188 -- (a.*f)(b.*f)
176 189
177 abδ : Q2 → Σ2 → Q2 → Bool 190 abδ : Q2 → Σ2 → Q2 → Bool
178 abδ x i y = naδ x i y \/ nbδ x i y 191 abδ x i y = naδ x i y \/ nbδ x i y
181 nfa-ab = record { Nδ = abδ ; Nend = b-end } 194 nfa-ab = record { Nδ = abδ ; Nend = b-end }
182 195
183 nfa-ab-exists : (Q2 → Bool) → Bool 196 nfa-ab-exists : (Q2 → Bool) → Bool
184 nfa-ab-exists p = nfa-a-exists p \/ nfa-b-exists p 197 nfa-ab-exists p = nfa-a-exists p \/ nfa-b-exists p
185 198
199 test-ab1-data : List Σ2
200 test-ab1-data = ( ca ∷ cf ∷ ca ∷ cb ∷ cf ∷ [] )
201
186 test-ab1 : Bool 202 test-ab1 : Bool
187 test-ab1 = Naccept nfa-a nfa-a-exists a-start ( ca ∷ cf ∷ ca ∷ cb ∷ cf ∷ [] ) 203 test-ab1 = Naccept nfa-ab nfa-ab-exists a-start test-ab1-data -- should be false
204
205 test-ab2-data : List Σ2
206 test-ab2-data = ( ca ∷ cf ∷ ca ∷ cf ∷ cb ∷ cb ∷ cf ∷ [] )
188 207
189 test-ab2 : Bool 208 test-ab2 : Bool
190 test-ab2 = Naccept nfa-a nfa-a-exists a-start ( ca ∷ cf ∷ ca ∷ cb ∷ cb ∷ [] ) 209 test-ab2 = Naccept nfa-ab nfa-ab-exists a-start test-ab2-data -- should be true
210
211 q2-list : List Q2
212 q2-list = a0 ∷ a1 ∷ ae ∷ af ∷ b0 ∷ b1 ∷ be ∷ bf ∷ []
213
214 test-tr : List (List Q2)
215 test-tr = Ntrace nfa-ab q2-list nfa-ab-exists a-start ( ca ∷ cf ∷ cf ∷ cb ∷ cb ∷ cf ∷ [] )
191 216
192 -- test-ab3 = map reverse ( NtraceDepth nfa-ab a-start (a0 ∷ a1 ∷ ae ∷ b0 ∷ b1 ∷ be ∷ []) ( ca ∷ cf ∷ ca ∷ cb ∷ cf ∷ [] )) 217 -- test-ab3 = map reverse ( NtraceDepth nfa-ab a-start (a0 ∷ a1 ∷ ae ∷ b0 ∷ b1 ∷ be ∷ []) ( ca ∷ cf ∷ ca ∷ cb ∷ cf ∷ [] ))
193 218
194 test112 : Automaton (Q2 → Bool) Σ2 219 test112 : Automaton (Q2 → Bool) Σ2
195 test112 = subset-construction nfa-ab-exists nfa-ab 220 test112 = subset-construction nfa-ab-exists nfa-ab
198 223
199 test113 : Bool 224 test113 : Bool
200 test113 = accept test112 a-start ( ca ∷ cf ∷ ca ∷ cb ∷ cb ∷ [] ) 225 test113 = accept test112 a-start ( ca ∷ cf ∷ ca ∷ cb ∷ cb ∷ [] )
201 226
202 -- 227 --
203 228 open import regex
204 229 open import Relation.Nullary using (¬_; Dec; yes; no)
205 230
206 231 Σ2-cmp : (x y : Σ2 ) → Dec (x ≡ y)
207 232 Σ2-cmp ca ca = yes refl
208 233 Σ2-cmp ca cb = no (λ ())
234 Σ2-cmp ca cc = no (λ ())
235 Σ2-cmp ca cf = no (λ ())
236 Σ2-cmp cb ca = no (λ ())
237 Σ2-cmp cb cb = yes refl
238 Σ2-cmp cb cc = no (λ ())
239 Σ2-cmp cb cf = no (λ ())
240 Σ2-cmp cc ca = no (λ ())
241 Σ2-cmp cc cb = no (λ ())
242 Σ2-cmp cc cc = yes refl
243 Σ2-cmp cc cf = no (λ ())
244 Σ2-cmp cf ca = no (λ ())
245 Σ2-cmp cf cb = no (λ ())
246 Σ2-cmp cf cc = no (λ ())
247 Σ2-cmp cf cf = yes refl
248
249 Σ2-any : Regex Σ2
250 Σ2-any = < ca > || < cb > || < cc > || < cf >
251
252 test-ab1-regex : regex-language ( (< ca > & (Σ2-any *) & < cf > ) & (< cb > & (Σ2-any *) & < cf > ) ) Σ2-cmp test-ab1-data ≡ false
253 test-ab1-regex = refl
254
255 test-ab2-regex : regex-language ( (< ca > & (Σ2-any *) & < cf > ) & (< cb > & (Σ2-any *) & < cf > ) ) Σ2-cmp test-ab2-data ≡ true
256 test-ab2-regex = refl
257
258
259
260