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