annotate automaton-in-agda/src/nfa.agda @ 406:a60132983557

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Wed, 08 Nov 2023 21:35:54 +0900
parents af8f630b7e60
children 207e6c4e155c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
406
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 405
diff changeset
1 {-# OPTIONS --cubical-compatible --safe #-}
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 405
diff changeset
2 -- {-# OPTIONS --allow-unsolved-metas #-}
25
256b7a6de863 how to use Data.Fin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 module nfa where
256b7a6de863 how to use Data.Fin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4
256b7a6de863 how to use Data.Fin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 -- open import Level renaming ( suc to succ ; zero to Zero )
256b7a6de863 how to use Data.Fin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 open import Data.Nat
256b7a6de863 how to use Data.Fin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 open import Data.List
27
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 26
diff changeset
8 open import Data.Fin hiding ( _<_ )
267
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
9 open import Data.Maybe hiding ( zip )
27
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 26
diff changeset
10 open import Relation.Nullary
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 26
diff changeset
11 open import Data.Empty
69
f124fceba460 subset construction
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
12 -- open import Data.Bool using ( Bool ; true ; false ; _∧_ ; _∨_ )
25
256b7a6de863 how to use Data.Fin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 open import Relation.Binary.PropositionalEquality hiding ( [_] )
256b7a6de863 how to use Data.Fin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 open import Relation.Nullary using (¬_; Dec; yes; no)
69
f124fceba460 subset construction
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
15 open import logic
36
9558d870e8ae add cfg and derive
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 35
diff changeset
16
25
256b7a6de863 how to use Data.Fin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 data States1 : Set where
256b7a6de863 how to use Data.Fin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 sr : States1
256b7a6de863 how to use Data.Fin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 ss : States1
256b7a6de863 how to use Data.Fin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 st : States1
256b7a6de863 how to use Data.Fin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21
256b7a6de863 how to use Data.Fin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 data In2 : Set where
256b7a6de863 how to use Data.Fin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 i0 : In2
256b7a6de863 how to use Data.Fin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 i1 : In2
256b7a6de863 how to use Data.Fin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
25
256b7a6de863 how to use Data.Fin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
26
256b7a6de863 how to use Data.Fin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 record NAutomaton ( Q : Set ) ( Σ : Set )
256b7a6de863 how to use Data.Fin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 : Set where
256b7a6de863 how to use Data.Fin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 field
256b7a6de863 how to use Data.Fin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 Nδ : Q → Σ → Q → Bool
256b7a6de863 how to use Data.Fin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 Nend : Q → Bool
256b7a6de863 how to use Data.Fin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
32
256b7a6de863 how to use Data.Fin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 open NAutomaton
256b7a6de863 how to use Data.Fin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
34
141
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
35 LStates1 : List States1
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
36 LStates1 = sr ∷ ss ∷ st ∷ []
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
37
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
38 -- one of qs q is true
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
39 existsS1 : ( States1 → Bool ) → Bool
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
40 existsS1 qs = qs sr \/ qs ss \/ qs st
26
7ce76b3acc62 improve finite
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
41
332
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 274
diff changeset
42 -- given list of all states, extract list of q which qs q is true
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 274
diff changeset
43
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 274
diff changeset
44 to-list : {Q : Set} → List Q → ( Q → Bool ) → List Q
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 274
diff changeset
45 to-list {Q} x exists = to-list1 x [] where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 274
diff changeset
46 to-list1 : List Q → List Q → List Q
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 274
diff changeset
47 to-list1 [] x = x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 274
diff changeset
48 to-list1 (q ∷ qs) x with exists q
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 274
diff changeset
49 ... | true = to-list1 qs (q ∷ x )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 274
diff changeset
50 ... | false = to-list1 qs x
25
256b7a6de863 how to use Data.Fin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
51
256b7a6de863 how to use Data.Fin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
52 Nmoves : { Q : Set } { Σ : Set }
256b7a6de863 how to use Data.Fin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
53 → NAutomaton Q Σ
141
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
54 → (exists : ( Q → Bool ) → Bool)
274
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 273
diff changeset
55 → ( Qs : Q → Bool ) → (s : Σ ) → ( Q → Bool )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 273
diff changeset
56 Nmoves {Q} { Σ} M exists Qs s = λ q → exists ( λ qn → (Qs qn /\ ( Nδ M qn s q ) ))
25
256b7a6de863 how to use Data.Fin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
57
406
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 405
diff changeset
58 --
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 405
diff changeset
59 -- Q is finiteSet
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 405
diff changeset
60 -- so we have
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 405
diff changeset
61 -- exists : ( P : Q → Bool ) → Bool
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 405
diff changeset
62 -- which checks if there is a q in Q such that P q is true
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 405
diff changeset
63
25
256b7a6de863 how to use Data.Fin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
64 Naccept : { Q : Set } { Σ : Set }
256b7a6de863 how to use Data.Fin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
65 → NAutomaton Q Σ
141
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
66 → (exists : ( Q → Bool ) → Bool)
69
f124fceba460 subset construction
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
67 → (Nstart : Q → Bool) → List Σ → Bool
141
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
68 Naccept M exists sb [] = exists ( λ q → sb q /\ Nend M q )
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
69 Naccept M exists sb (i ∷ t ) = Naccept M exists (λ q → exists ( λ qn → (sb qn /\ ( Nδ M qn i q ) ))) t
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
70
406
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 405
diff changeset
71 -- {-# TERMINATING #-}
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 405
diff changeset
72 -- NtraceDepth : { Q : Set } { Σ : Set }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 405
diff changeset
73 -- → NAutomaton Q Σ
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 405
diff changeset
74 -- → (Nstart : Q → Bool) → (all-states : List Q ) → List Σ → List (List ( Σ ∧ Q ))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 405
diff changeset
75 -- NtraceDepth {Q} {Σ} M sb all is = ndepth all sb is [] [] where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 405
diff changeset
76 -- ndepth : List Q → (q : Q → Bool ) → List Σ → List ( Σ ∧ Q ) → List (List ( Σ ∧ Q ) ) → List (List ( Σ ∧ Q ) )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 405
diff changeset
77 -- ndepth1 : Q → Σ → List Q → List Σ → List ( Σ ∧ Q ) → List ( List ( Σ ∧ Q )) → List ( List ( Σ ∧ Q ))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 405
diff changeset
78 -- ndepth1 q i [] is t t1 = t1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 405
diff changeset
79 -- ndepth1 q i (x ∷ qns) is t t1 = ndepth all (Nδ M x i) is (⟪ i , q ⟫ ∷ t) (ndepth1 q i qns is t t1 )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 405
diff changeset
80 -- ndepth [] sb is t t1 = t1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 405
diff changeset
81 -- ndepth (q ∷ qs) sb [] t t1 with sb q /\ Nend M q
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 405
diff changeset
82 -- ... | true = ndepth qs sb [] t ( t ∷ t1 )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 405
diff changeset
83 -- ... | false = ndepth qs sb [] t t1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 405
diff changeset
84 -- ndepth (q ∷ qs) sb (i ∷ is) t t1 with sb q
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 405
diff changeset
85 -- ... | true = ndepth qs sb (i ∷ is) t (ndepth1 q i all is t t1 )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 405
diff changeset
86 -- ... | false = ndepth qs sb (i ∷ is) t t1
332
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 274
diff changeset
87
273
192263adfc02 depth first trace in nfa
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 272
diff changeset
88 -- trace in state set
192263adfc02 depth first trace in nfa
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 272
diff changeset
89 --
141
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
90 Ntrace : { Q : Set } { Σ : Set }
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
91 → NAutomaton Q Σ
332
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 274
diff changeset
92 → (all-states : List Q )
141
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
93 → (exists : ( Q → Bool ) → Bool)
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
94 → (Nstart : Q → Bool) → List Σ → List (List Q)
332
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 274
diff changeset
95 Ntrace M all-states exists sb [] = to-list all-states ( λ q → sb q /\ Nend M q ) ∷ []
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 274
diff changeset
96 Ntrace M all-states exists sb (i ∷ t ) =
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 274
diff changeset
97 to-list all-states (λ q → sb q ) ∷
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 274
diff changeset
98 Ntrace M all-states exists (λ q → exists ( λ qn → (sb qn /\ ( Nδ M qn i q ) ))) t
25
256b7a6de863 how to use Data.Fin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
99
270
dd98e7e5d4a5 derive worked but finiteness is difficult
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 269
diff changeset
100 data-fin-00 : ( Fin 3 ) → Bool
273
192263adfc02 depth first trace in nfa
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 272
diff changeset
101 data-fin-00 zero = true
192263adfc02 depth first trace in nfa
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 272
diff changeset
102 data-fin-00 (suc zero) = true
192263adfc02 depth first trace in nfa
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 272
diff changeset
103 data-fin-00 (suc (suc zero)) = true
270
dd98e7e5d4a5 derive worked but finiteness is difficult
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 269
diff changeset
104 data-fin-00 (suc (suc (suc ())))
dd98e7e5d4a5 derive worked but finiteness is difficult
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 269
diff changeset
105
dd98e7e5d4a5 derive worked but finiteness is difficult
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 269
diff changeset
106 data-fin-01 : (x : ℕ ) → x < 3 → Bool
273
192263adfc02 depth first trace in nfa
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 272
diff changeset
107 data-fin-01 zero lt = true
192263adfc02 depth first trace in nfa
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 272
diff changeset
108 data-fin-01 (suc zero) lt = true
192263adfc02 depth first trace in nfa
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 272
diff changeset
109 data-fin-01 (suc (suc zero)) lt = true
270
dd98e7e5d4a5 derive worked but finiteness is difficult
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 269
diff changeset
110 data-fin-01 (suc (suc (suc x))) (s≤s (s≤s (s≤s ())))
dd98e7e5d4a5 derive worked but finiteness is difficult
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 269
diff changeset
111
25
256b7a6de863 how to use Data.Fin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
112 transition3 : States1 → In2 → States1 → Bool
256b7a6de863 how to use Data.Fin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
113 transition3 sr i0 sr = true
256b7a6de863 how to use Data.Fin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
114 transition3 sr i1 ss = true
256b7a6de863 how to use Data.Fin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
115 transition3 sr i1 sr = true
256b7a6de863 how to use Data.Fin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
116 transition3 ss i0 sr = true
31
9b00dc130ede nfa using subset mapping done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 30
diff changeset
117 transition3 ss i1 st = true
25
256b7a6de863 how to use Data.Fin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
118 transition3 st i0 sr = true
31
9b00dc130ede nfa using subset mapping done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 30
diff changeset
119 transition3 st i1 st = true
25
256b7a6de863 how to use Data.Fin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
120 transition3 _ _ _ = false
256b7a6de863 how to use Data.Fin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
121
256b7a6de863 how to use Data.Fin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
122 fin1 : States1 → Bool
256b7a6de863 how to use Data.Fin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
123 fin1 st = true
256b7a6de863 how to use Data.Fin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
124 fin1 ss = false
256b7a6de863 how to use Data.Fin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
125 fin1 sr = false
256b7a6de863 how to use Data.Fin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
126
141
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
127 test5 = existsS1 (λ q → fin1 q )
332
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 274
diff changeset
128 test6 = to-list LStates1 (λ q → fin1 q )
141
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
129
25
256b7a6de863 how to use Data.Fin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
130 start1 : States1 → Bool
256b7a6de863 how to use Data.Fin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
131 start1 sr = true
29
2887577a3d63 simpler exists , nfa accept dones not wokred
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 28
diff changeset
132 start1 _ = false
25
256b7a6de863 how to use Data.Fin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
133
256b7a6de863 how to use Data.Fin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
134 am2 : NAutomaton States1 In2
69
f124fceba460 subset construction
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
135 am2 = record { Nδ = transition3 ; Nend = fin1}
f124fceba460 subset construction
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
136
141
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
137 example2-1 = Naccept am2 existsS1 start1 ( i0 ∷ i1 ∷ i0 ∷ [] )
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
138 example2-2 = Naccept am2 existsS1 start1 ( i1 ∷ i1 ∷ i1 ∷ [] )
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
139
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
140 t-1 : List ( List States1 )
332
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 274
diff changeset
141 t-1 = Ntrace am2 LStates1 existsS1 start1 ( i1 ∷ i1 ∷ i1 ∷ [] ) -- (sr ∷ []) ∷ (sr ∷ ss ∷ []) ∷ (sr ∷ ss ∷ st ∷ []) ∷ (st ∷ []) ∷ []
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 274
diff changeset
142 t-2 = Ntrace am2 LStates1 existsS1 start1 ( i0 ∷ i1 ∷ i0 ∷ [] ) -- (sr ∷ []) ∷ (sr ∷ []) ∷ (sr ∷ ss ∷ []) ∷ [] ∷ []
406
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 405
diff changeset
143 -- t-3 = NtraceDepth am2 start1 LStates1 ( i1 ∷ i1 ∷ i1 ∷ [] )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 405
diff changeset
144 -- t-4 = NtraceDepth am2 start1 LStates1 ( i0 ∷ i1 ∷ i0 ∷ [] )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 405
diff changeset
145 -- t-5 = NtraceDepth am2 start1 LStates1 ( i0 ∷ i1 ∷ [] )
25
256b7a6de863 how to use Data.Fin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
146
69
f124fceba460 subset construction
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
147 transition4 : States1 → In2 → States1 → Bool
f124fceba460 subset construction
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
148 transition4 sr i0 sr = true
f124fceba460 subset construction
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
149 transition4 sr i1 ss = true
f124fceba460 subset construction
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
150 transition4 sr i1 sr = true
f124fceba460 subset construction
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
151 transition4 ss i0 ss = true
f124fceba460 subset construction
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
152 transition4 ss i1 st = true
f124fceba460 subset construction
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
153 transition4 st i0 st = true
f124fceba460 subset construction
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
154 transition4 st i1 st = true
f124fceba460 subset construction
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
155 transition4 _ _ _ = false
f124fceba460 subset construction
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
156
f124fceba460 subset construction
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
157 fin4 : States1 → Bool
f124fceba460 subset construction
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
158 fin4 st = true
f124fceba460 subset construction
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
159 fin4 _ = false
f124fceba460 subset construction
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
160
f124fceba460 subset construction
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
161 start4 : States1 → Bool
f124fceba460 subset construction
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
162 start4 ss = true
f124fceba460 subset construction
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
163 start4 _ = false
f124fceba460 subset construction
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
164
f124fceba460 subset construction
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
165 am4 : NAutomaton States1 In2
f124fceba460 subset construction
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
166 am4 = record { Nδ = transition4 ; Nend = fin4}
f124fceba460 subset construction
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
167
141
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
168 example4-1 = Naccept am4 existsS1 start4 ( i0 ∷ i1 ∷ i1 ∷ i0 ∷ [] )
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
169 example4-2 = Naccept am4 existsS1 start4 ( i0 ∷ i1 ∷ i1 ∷ i1 ∷ [] )
25
256b7a6de863 how to use Data.Fin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
170
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
171 fin0 : States1 → Bool
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
172 fin0 st = false
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
173 fin0 ss = false
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
174 fin0 sr = false
25
256b7a6de863 how to use Data.Fin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
175
31
9b00dc130ede nfa using subset mapping done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 30
diff changeset
176 test0 : Bool
141
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
177 test0 = existsS1 fin0
31
9b00dc130ede nfa using subset mapping done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 30
diff changeset
178
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 29
diff changeset
179 test1 : Bool
141
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
180 test1 = existsS1 fin1
31
9b00dc130ede nfa using subset mapping done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 30
diff changeset
181
141
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
182 test2 = Nmoves am2 existsS1 start1
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
183
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
184 open import automaton
38
ab265470c2d0 push down automaton example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 36
diff changeset
185
141
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
186 am2def : Automaton (States1 → Bool ) In2
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
187 am2def = record { δ = λ qs s q → existsS1 (λ qn → qs q /\ Nδ am2 q s qn )
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
188 ; aend = λ qs → existsS1 (λ q → qs q /\ Nend am2 q) }
44
aa15eff1aeb3 seprate finite
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 38
diff changeset
189
141
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
190 dexample4-1 = accept am2def start1 ( i0 ∷ i1 ∷ i1 ∷ i0 ∷ [] )
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
191 texample4-1 = trace am2def start1 ( i0 ∷ i1 ∷ i1 ∷ i0 ∷ [] )
38
ab265470c2d0 push down automaton example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 36
diff changeset
192
267
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
193 -- LStates1 contains all states in States1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
194
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
195 -- a list of Q contains (q : Q)
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 eqState1? : (x y : States1) → Dec ( x ≡ y )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
198 eqState1? sr sr = yes refl
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
199 eqState1? ss ss = yes refl
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
200 eqState1? st st = yes refl
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
201 eqState1? sr ss = no (λ ())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
202 eqState1? sr st = no (λ ())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
203 eqState1? ss sr = no (λ ())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
204 eqState1? ss st = no (λ ())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
205 eqState1? st sr = no (λ ())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
206 eqState1? st ss = no (λ ())
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
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
209 list-contains : {Q : Set} → ( (x y : Q ) → Dec ( x ≡ y ) ) → (qs : List Q) → (q : Q ) → Bool
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
210 list-contains {Q} eq? [] q = false
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
211 list-contains {Q} eq? (x ∷ qs) q with eq? x q
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
212 ... | yes _ = true
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
213 ... | no _ = list-contains eq? qs q
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
214
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
215 containsP : {Q : Set} → ( eq? : (x y : Q ) → Dec ( x ≡ y )) → (qs : List Q) → (q : Q ) → Set
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
216 containsP eq? qs q = list-contains eq? qs q ≡ true
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
217
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
218 contains-all : (q : States1 ) → containsP eqState1? LStates1 q
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
219 contains-all sr = refl
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
220 contains-all ss = refl
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
221 contains-all st = refl
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
222
268
8006cbd87b20 fix concat dfa
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 267
diff changeset
223 -- foldr : (A → B → B) → B → List A → B
8006cbd87b20 fix concat dfa
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 267
diff changeset
224 -- foldr c n [] = n
8006cbd87b20 fix concat dfa
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 267
diff changeset
225 -- foldr c n (x ∷ xs) = c x (foldr c n xs)
8006cbd87b20 fix concat dfa
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 267
diff changeset
226
8006cbd87b20 fix concat dfa
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 267
diff changeset
227 ssQ : {Q : Set } ( qs : Q → Bool ) → List Q → List Q
8006cbd87b20 fix concat dfa
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 267
diff changeset
228 ssQ qs [] = []
8006cbd87b20 fix concat dfa
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 267
diff changeset
229 ssQ qs (x ∷ t) with qs x
8006cbd87b20 fix concat dfa
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 267
diff changeset
230 ... | true = x ∷ ssQ qs t
8006cbd87b20 fix concat dfa
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 267
diff changeset
231 ... | false = ssQ qs t
8006cbd87b20 fix concat dfa
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 267
diff changeset
232
8006cbd87b20 fix concat dfa
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 267
diff changeset
233 bool-t1 : {b : Bool } → b ≡ true → (true /\ b) ≡ true
8006cbd87b20 fix concat dfa
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 267
diff changeset
234 bool-t1 refl = refl
8006cbd87b20 fix concat dfa
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 267
diff changeset
235
8006cbd87b20 fix concat dfa
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 267
diff changeset
236 bool-1t : {b : Bool } → b ≡ true → (b /\ true) ≡ true
8006cbd87b20 fix concat dfa
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 267
diff changeset
237 bool-1t refl = refl
8006cbd87b20 fix concat dfa
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 267
diff changeset
238
8006cbd87b20 fix concat dfa
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 267
diff changeset
239 to-list1 : {Q : Set } (qs : Q → Bool ) → (all : List Q) → foldr (λ q x → qs q /\ x ) true (ssQ qs all ) ≡ true
8006cbd87b20 fix concat dfa
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 267
diff changeset
240 to-list1 qs [] = refl
405
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
241 to-list1 qs (x ∷ all) with qs x in eq
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
242 ... | false = to-list1 qs all
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 332
diff changeset
243 ... | true = subst (λ k → k /\ foldr (λ q → _/\_ (qs q)) true (ssQ qs all) ≡ true ) (sym eq) ( bool-t1 (to-list1 qs all) )
268
8006cbd87b20 fix concat dfa
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 267
diff changeset
244
8006cbd87b20 fix concat dfa
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 267
diff changeset
245 existsS1-valid : ¬ ( (qs : States1 → Bool ) → ( existsS1 qs ≡ true ) )
8006cbd87b20 fix concat dfa
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 267
diff changeset
246 existsS1-valid n = ¬-bool refl ( n ( λ x → false ))
8006cbd87b20 fix concat dfa
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 267
diff changeset
247