annotate automaton-in-agda/src/nfa.agda @ 405:af8f630b7e60

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