annotate agda/automaton.agda @ 108:0117144967bb

case1 done
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sun, 17 Nov 2019 12:02:17 +0900
parents b9679ebd1156
children b3f05cd08d24
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
e5aa1cf746cb automaton lecture
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 module automaton where
e5aa1cf746cb automaton lecture
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2
24
9406c2571fe7 naccept1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
3 -- open import Level renaming ( suc to succ ; zero to Zero )
2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
4 open import Data.Nat
13
02b4ecc9972c start exp version of subset construction
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
5 open import Data.List
02b4ecc9972c start exp version of subset construction
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
6 open import Data.Maybe
58
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 39
diff changeset
7 -- open import Data.Bool using ( Bool ; true ; false ; _∧_ )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 39
diff changeset
8 open import Relation.Binary.PropositionalEquality hiding ( [_] )
9
e7bb980408fb separate epsiron
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
9 open import Relation.Nullary using (¬_; Dec; yes; no)
58
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 39
diff changeset
10 open import logic
64
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 60
diff changeset
11 -- open import Data.Bool renaming ( _∧_ to _and_ ; _∨_ to _or )
0
e5aa1cf746cb automaton lecture
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12
13
02b4ecc9972c start exp version of subset construction
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
13 record Automaton ( Q : Set ) ( Σ : Set )
0
e5aa1cf746cb automaton lecture
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 : Set where
1
3c6de7cf2a95 nfa worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
15 field
3c6de7cf2a95 nfa worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
16 δ : Q → Σ → Q
13
02b4ecc9972c start exp version of subset construction
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
17 aend : Q → Bool
1
3c6de7cf2a95 nfa worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
18
3c6de7cf2a95 nfa worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
19 open Automaton
0
e5aa1cf746cb automaton lecture
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20
65
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
21 data StatesQ : Set where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
22 q1 : StatesQ
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
23 q2 : StatesQ
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
24 q3 : StatesQ
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
25
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
26 data In2 : Set where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
27 i0 : In2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
28 i1 : In2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
29
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
30 transitionQ : StatesQ → In2 → StatesQ
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
31 transitionQ q1 i0 = q1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
32 transitionQ q1 i1 = q2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
33 transitionQ q2 i0 = q3
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
34 transitionQ q2 i1 = q2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
35 transitionQ q3 i0 = q2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
36 transitionQ q3 i1 = q2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
37
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
38 aendQ : StatesQ → Bool
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
39 aendQ q2 = true
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
40 aendQ _ = false
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
41
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
42 a1 : Automaton StatesQ In2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
43 a1 = record {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
44 δ = transitionQ
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
45 ; aend = aendQ
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
46 }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
47
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
48 accept : { Q : Set } { Σ : Set }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
49 → Automaton Q Σ
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
50 → (astart : Q)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
51 → List Σ → Bool
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
52 accept {Q} { Σ} M q [] = aend M q
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
53 accept {Q} { Σ} M q ( H ∷ T ) = accept M ( (δ M) q H ) T
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
54
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
55 test1 : accept a1 q1 ( i0 ∷ i1 ∷ i0 ∷ [] ) ≡ false
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
56 test1 = refl
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
57 test2 = accept a1 q1 ( i0 ∷ i1 ∷ i0 ∷ i1 ∷ [] )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
58
0
e5aa1cf746cb automaton lecture
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
59 data States1 : Set where
1
3c6de7cf2a95 nfa worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
60 sr : States1
3c6de7cf2a95 nfa worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
61 ss : States1
3c6de7cf2a95 nfa worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
62 st : States1
0
e5aa1cf746cb automaton lecture
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
63
13
02b4ecc9972c start exp version of subset construction
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
64 moves : { Q : Set } { Σ : Set }
02b4ecc9972c start exp version of subset construction
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
65 → Automaton Q Σ
0
e5aa1cf746cb automaton lecture
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
66 → Q → List Σ → Q
1
3c6de7cf2a95 nfa worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
67 moves {Q} { Σ} M q L = move q L
0
e5aa1cf746cb automaton lecture
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
68 where
e5aa1cf746cb automaton lecture
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
69 move : (q : Q ) ( L : List Σ ) → Q
e5aa1cf746cb automaton lecture
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
70 move q [] = q
24
9406c2571fe7 naccept1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
71 move q ( H ∷ T ) = move ( δ M q H) T
0
e5aa1cf746cb automaton lecture
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
72
13
02b4ecc9972c start exp version of subset construction
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
73 transition1 : States1 → In2 → States1
1
3c6de7cf2a95 nfa worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
74 transition1 sr i0 = sr
3c6de7cf2a95 nfa worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
75 transition1 sr i1 = ss
3c6de7cf2a95 nfa worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
76 transition1 ss i0 = sr
3c6de7cf2a95 nfa worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
77 transition1 ss i1 = st
3c6de7cf2a95 nfa worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
78 transition1 st i0 = sr
3c6de7cf2a95 nfa worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
79 transition1 st i1 = st
0
e5aa1cf746cb automaton lecture
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
80
13
02b4ecc9972c start exp version of subset construction
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
81 fin1 : States1 → Bool
1
3c6de7cf2a95 nfa worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
82 fin1 st = true
24
9406c2571fe7 naccept1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
83 fin1 ss = false
9406c2571fe7 naccept1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
84 fin1 sr = false
0
e5aa1cf746cb automaton lecture
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
85
13
02b4ecc9972c start exp version of subset construction
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
86 am1 : Automaton States1 In2
60
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
87 am1 = record { δ = transition1 ; aend = fin1 }
0
e5aa1cf746cb automaton lecture
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
88
e5aa1cf746cb automaton lecture
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
89
60
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
90 example1-1 = accept am1 sr ( i0 ∷ i1 ∷ i0 ∷ [] )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
91 example1-2 = accept am1 sr ( i1 ∷ i1 ∷ i1 ∷ [] )
0
e5aa1cf746cb automaton lecture
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
92
13
02b4ecc9972c start exp version of subset construction
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
93 reachable : { Q : Set } { Σ : Set }
1
3c6de7cf2a95 nfa worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
94 → (M : Automaton Q Σ )
60
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
95 → (astart q : Q )
13
02b4ecc9972c start exp version of subset construction
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
96 → (L : List Σ ) → Set
60
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
97 reachable M astart q L = moves M astart L ≡ q
0
e5aa1cf746cb automaton lecture
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
98
60
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
99 example1-3 = reachable am1 sr st ( i1 ∷ i1 ∷ i1 ∷ [] )
0
e5aa1cf746cb automaton lecture
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
100
24
9406c2571fe7 naccept1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
101 ieq : (i i' : In2 ) → Dec ( i ≡ i' )
9406c2571fe7 naccept1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
102 ieq i0 i0 = yes refl
9406c2571fe7 naccept1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
103 ieq i1 i1 = yes refl
9406c2571fe7 naccept1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
104 ieq i0 i1 = no ( λ () )
9406c2571fe7 naccept1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
105 ieq i1 i0 = no ( λ () )
0
e5aa1cf746cb automaton lecture
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
106
38
ab265470c2d0 push down automaton example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
107 inputnn : { n : ℕ } → { Σ : Set } → ( x y : Σ ) → List Σ → List Σ
ab265470c2d0 push down automaton example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
108 inputnn {zero} {_} _ _ s = s
ab265470c2d0 push down automaton example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
109 inputnn {suc n} x y s = x ∷ ( inputnn {n} x y ( y ∷ s ) )
ab265470c2d0 push down automaton example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
110
39
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 38
diff changeset
111 -- lemmaNN : { Q : Set } { Σ : Set } → (M : Automaton Q Σ) → ¬ accept M ( inputnn {n} x y [] )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 38
diff changeset
112 -- lemmaNN = ?
38
ab265470c2d0 push down automaton example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
113