annotate automaton.agda @ 6:c42493f74570

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sat, 14 Nov 2020 18:05:41 +0900
parents b4548639121e
children e168140d15b0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 {-# OPTIONS --allow-unsolved-metas #-}
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 module automaton where
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 open import Level hiding ( suc ; zero )
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 open import Data.Empty
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 open import Relation.Nullary
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 open import Relation.Binary.PropositionalEquality -- hiding (_⇔_)
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 open import logic
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 open import Data.List
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 record Automaton {n : Level} (Q : Set n) (Σ : Set ) : Set ((Level.suc n) ) where
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 field
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 δ : Q → Σ → Q
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 F : Q → Set
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 open Automaton
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 accept : {n : Level} {Q : Set n} {Σ : Set } → Automaton Q Σ → Q → List Σ → Set
2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
18 accept {n} {Q} {Σ} atm q [] = F atm q
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
19 accept {n} {Q} {Σ} atm q (x ∷ input) =
0
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 accept atm (δ atm q x ) input
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 trace : {n : Level} {Q : Set n} {Σ : Set } → (A : Automaton Q Σ) → (start : Q) → (input : List Σ ) → accept A start input → List Q
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 trace {n} {Q} {Σ} A q [] a = q ∷ []
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 trace {n} {Q} {Σ} A q (x ∷ t) a = q ∷ ( trace A (δ A q x) t a )
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
25
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 data Q3 : Set where
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 q₁ : Q3
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 q₂ : Q3
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 q₃ : Q3
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
30
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 data Σ2 : Set where
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 s0 : Σ2
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 s1 : Σ2
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
34
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 δ16 : Q3 → Σ2 → Q3
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 δ16 q₁ s0 = q₁
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 δ16 q₁ s1 = q₂
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 δ16 q₂ s0 = q₃
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 δ16 q₂ s1 = q₂
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 δ16 q₃ s0 = q₂
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 δ16 q₃ s1 = q₂
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
42
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 δ16' : Q3 → Σ2 → Q3
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 δ16' q₁ s0 = q₁
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
45 δ16' q₁ s1 = q₂
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
46 δ16' q₂ s0 = q₃
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 δ16' q₂ s1 = q₂
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
48 δ16' q₃ s0 = q₂
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 δ16' q₃ s1 = q₃
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
50
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
51 data a16end : Q3 → Set where
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
52 a16q2 : a16end q₂
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
53
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
54 a16 : Automaton Q3 Σ2
1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
55 a16 = record { δ = δ16 ; F = λ q → a16end q }
0
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
56
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
57 a16' : Automaton Q3 Σ2
1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
58 a16' = record { δ = δ16' ; F = λ q → q ≡ q₂ }
0
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
59
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
60 --
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
61 -- ∷ → ∷ → ∷ → []
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
62 -- ↓ ↓ ↓
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
63 -- s0 s0 s1
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
64 --
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
65 input1 : List Σ2
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
66 input1 = s0 ∷ s0 ∷ s1 ∷ []
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
67
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
68 input2 : List Σ2
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
69 input2 = s0 ∷ s0 ∷ s0 ∷ []
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
70
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
71 test1 : accept a16 q₁ input1
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
72 test1 = a16q2
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
73
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
74 lemma0 : accept a16 q₁ input1 ≡ a16end q₂
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
75 lemma0 = begin
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
76 accept a16 q₁ ( s0 ∷ s0 ∷ s1 ∷ [] )
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
77 ≡⟨ refl ⟩ -- x ≡ x
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
78 accept a16 q₁ ( s0 ∷ s1 ∷ [] )
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
79 ≡⟨⟩
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
80 accept a16 q₁ ( s1 ∷ [] )
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
81 ≡⟨⟩
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
82 accept a16 q₂ []
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
83 ≡⟨⟩
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
84 a16end q₂
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
85 ∎ where open ≡-Reasoning
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
86
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
87 lemma1 : List Q3
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
88 lemma1 = trace a16 q₁ input1 a16q2
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
89
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
90 test1' : accept a16' q₁ input1
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
91 test1' = refl
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
92
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
93 lemma2 : List Q3
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
94 lemma2 = trace a16' q₁ input1 refl
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
95
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
96 test2 : ¬ ( accept a16 q₁ input2 )
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
97 test2 ()
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
98
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
99 open import Data.Bool
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
100 open import Data.Unit
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
101
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
102 -- contains at least 1 s1
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
103 c1 : List Σ2 → Set
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
104 c1 [] = ⊥
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
105 c1 (s1 ∷ t) = ⊤
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
106 c1 (_ ∷ t) = c1 t
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
107
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
108 -- even number of s0
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
109 even0 : List Σ2 → Set
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
110 odd0 : List Σ2 → Set
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
111 odd0 [] = ⊥
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
112 odd0 (s0 ∷ t) = even0 t
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
113 odd0 (s1 ∷ t) = odd0 t
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
114 even0 [] = ⊤
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
115 even0 (s0 ∷ t) = odd0 t
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
116 even0 (s1 ∷ t) = even0 t
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
117
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
118 -- after
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
119
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
120 a0 : List Σ2 → Set
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
121 a0 [] = ⊥
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
122 a0 (s1 ∷ t ) = even0 t
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
123 a0 (s0 ∷ t ) = a0 t
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
124
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
125 -- data ⊥ : Set
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
126 --
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
127 -- data ⊤ : Set where
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
128 -- tt : ⊤
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
129 -- tt : ⊤
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
130
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
131 lemma-a : (x : List Σ2 ) → accept a16' q₁ x → a0 x
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
132 lemma-a x a = a1 x a where
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
133 a3 : (x : List Σ2 ) → accept a16' q₃ x → odd0 x
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
134 a2 : (x : List Σ2 ) → accept a16' q₂ x → even0 x
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
135 a3 [] ()
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
136 a3 (s0 ∷ t) a = a2 t a
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
137 a3 (s1 ∷ t) a = a3 t a
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
138 a2 [] a = tt
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
139 a2 (s0 ∷ t) a = a3 t a
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
140 a2 (s1 ∷ t) a = a2 t a
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
141 a1 : (x : List Σ2 ) → accept a16' q₁ x → a0 x
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
142 a1 [] () -- a16' does not accept []
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
143 a1 (s0 ∷ t) a = a1 t a
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
144 a1 (s1 ∷ t) a = a2 t a
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
145
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
146 -- ¬_ : Set → Set
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
147 -- ¬_ _ = ⊥
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
148
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
149 lemma-not-a : ¬ ( (x : List Σ2 ) → accept a16 q₁ x → a0 x )
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
150 lemma-not-a not1 with not1 (s1 ∷ s0 ∷ s1 ∷ [] ) a16q2
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
151 ... | ()
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
152
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
153 -- can we prove negation similar to the lemma-a?
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
154 -- lemma-not-a' : ¬ ((x : List Σ2 ) → accept a16 q₁ x → a0 x)
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
155 -- lemma-not-a' not = {!!} where
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
156 -- a3 : (x : List Σ2 ) → accept a16 q₃ x → odd0 x
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
157 -- a2 : (x : List Σ2 ) → accept a16 q₂ x → even0 x
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
158 -- a3 (s0 ∷ t) a = a2 t a
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
159 -- a3 (s1 ∷ t) a = {!!}
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
160 -- a2 [] a = tt
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
161 -- a2 (s0 ∷ t) a = a3 t a
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
162 -- a2 (s1 ∷ t) a = a2 t a
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
163 -- a1 : (x : List Σ2 ) → accept a16 q₁ x → a0 x
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
164 -- a1 [] ()
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
165 -- a1 (s0 ∷ t) a = a1 t a
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
166 -- a1 (s1 ∷ t) a = a2 t a
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
167
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
168 open import Data.Nat
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
169
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
170 evenℕ : ℕ → Set
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
171 oddℕ : ℕ → Set
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
172 oddℕ zero = ⊥
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
173 oddℕ (suc n) = evenℕ n
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
174 evenℕ zero = ⊤
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
175 evenℕ (suc n) = oddℕ n
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
176
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
177 count-s0 : (x : List Σ2 ) → ℕ
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
178 count-s0 [] = zero
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
179 count-s0 (s0 ∷ t) = suc ( count-s0 t )
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
180 count-s0 (s1 ∷ t) = count-s0 t
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
181
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
182 e1 : (x : List Σ2 ) → even0 x → evenℕ ( count-s0 x )
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
183 o1 : (x : List Σ2 ) → odd0 x → oddℕ ( count-s0 x )
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
184 e1 [] e = tt
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
185 e1 (s0 ∷ t) o = o1 t o
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
186 e1 (s1 ∷ t) e = e1 t e
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
187 o1 [] ()
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
188 o1 (s0 ∷ t) e = e1 t e
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
189 o1 (s1 ∷ t) o = o1 t o
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
190
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
191 δ19 : Q3 → Σ2 → Q3
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
192 δ19 q₁ s0 = q₁
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
193 δ19 q₁ s1 = q₂
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
194 δ19 q₂ s0 = q₁
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
195 δ19 q₂ s1 = q₂
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
196 δ19 q₃ _ = q₁
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
197
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
198 a19 : Automaton Q3 Σ2
1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
199 a19 = record { δ = δ19 ; F = λ q → q ≡ q₁ }
0
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
200
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
201 -- input is empty or ends in s0
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
202
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
203 end0 : List Σ2 → Set
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
204 end0 [] = ⊤
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
205 end0 (s0 ∷ [] ) = ⊤
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
206 end0 (s1 ∷ [] ) = ⊥
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
207 end0 (x ∷ t ) = end0 t
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
208
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
209 lemma-b : (x : List Σ2 ) → accept a19 q₁ x → end0 x
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
210 lemma-b = {!!}
9615a94b18ca new automaton in agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
211