annotate agda/automaton-text.agda @ 139:3be1afb87f82

add utm
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sat, 14 Mar 2020 17:34:54 +0900
parents 13822f5f9c85
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
67
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
1 module automaton-text where
65
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2
67
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
3 -- open import Level renaming ( suc to succ ; zero to Zero )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
4 open import Data.Nat
68
13822f5f9c85 use Vec
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 67
diff changeset
5 open import Data.Vec
67
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
6 open import Data.Maybe
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
7 -- open import Data.Bool using ( Bool ; true ; false ; _∧_ )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
8 open import Relation.Binary.PropositionalEquality hiding ( [_] )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
9 open import Relation.Nullary using (¬_; Dec; yes; no)
65
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 open import logic
67
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
11 -- open import Data.Bool renaming ( _∧_ to _and_ ; _∨_ to _or )
65
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12
67
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
13 open import automaton
68
13822f5f9c85 use Vec
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 67
diff changeset
14 open import Data.Vec
65
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 open Automaton
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
17
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
18
67
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
19 lemma4 : {i n : ℕ } → i < n → i < suc n
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
20 lemma4 {0} {0} ()
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
21 lemma4 {0} {suc n} lt = s≤s z≤n
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
22 lemma4 {suc i} {0} ()
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
23 lemma4 {suc i} {suc n} (s≤s lt) = s≤s (lemma4 lt)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
24
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
25 lemma5 : {n : ℕ } → n < suc n
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
26 lemma5 {zero} = s≤s z≤n
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
27 lemma5 {suc n} = s≤s lemma5
65
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
28
68
13822f5f9c85 use Vec
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 67
diff changeset
29 length : {S : Set} {n : ℕ} → Vec S n → ℕ
13822f5f9c85 use Vec
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 67
diff changeset
30 length {_} {n} _ = n
13822f5f9c85 use Vec
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 67
diff changeset
31
67
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
32 record accept-n { Q : Set } { Σ : Set } (M : Automaton Q Σ ) (astart : Q ) (n : ℕ ) (s : {i : ℕ } → (i < n) → Σ ) : Set where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
33 field
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
34 r : (i : ℕ ) → i < suc n → Q
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
35 accept-1 : r 0 (s≤s z≤n) ≡ astart
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
36 accept-2 : (i : ℕ ) → (i<n : i < n ) → δ M (r i (lemma4 i<n)) (s i<n) ≡ r (suc i) (s≤s i<n)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
37 accept-3 : aend M (r n lemma5 ) ≡ true
65
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
38
68
13822f5f9c85 use Vec
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 67
diff changeset
39 get : { Σ : Set } {n : ℕ} → (x : Vec Σ n ) → { i : ℕ } → i < n → Σ
67
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
40 get [] ()
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
41 get (h ∷ t) {0} (s≤s lt) = h
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
42 get (h ∷ t) {suc i} (s≤s lt) = get t lt
65
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
43
68
13822f5f9c85 use Vec
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 67
diff changeset
44 accept-v : { Q : Set } { Σ : Set } {n : ℕ }
13822f5f9c85 use Vec
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 67
diff changeset
45 → Automaton Q Σ
13822f5f9c85 use Vec
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 67
diff changeset
46 → (astart : Q)
13822f5f9c85 use Vec
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 67
diff changeset
47 → Vec Σ n → Bool
13822f5f9c85 use Vec
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 67
diff changeset
48 accept-v {Q} { Σ} M q [] = aend M q
13822f5f9c85 use Vec
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 67
diff changeset
49 accept-v {Q} { Σ} M q ( H ∷ T ) = accept-v M ( (δ M) q H ) T
13822f5f9c85 use Vec
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 67
diff changeset
50
13822f5f9c85 use Vec
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 67
diff changeset
51 lemma7 : { Q : Set } { Σ : Set } {n : ℕ} (M : Automaton Q Σ ) (q : Q ) → (h : Σ) → (t : Vec Σ n )
13822f5f9c85 use Vec
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 67
diff changeset
52 → accept-v M q (h ∷ t) ≡ true → accept-v M (δ M q h) t ≡ true
13822f5f9c85 use Vec
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 67
diff changeset
53 lemma7 M q h t eq with accept-v M (δ M q h) t
67
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
54 lemma7 M q h t refl | true = refl
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
55 lemma7 M q h t () | false
65
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
56
67
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
57 open accept-n
65
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
58
68
13822f5f9c85 use Vec
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 67
diff changeset
59 lemma→ : { Q : Set } { Σ : Set } {n : ℕ} (M : Automaton Q Σ ) (q : Q ) → (x : Vec Σ n ) → accept-v M q x ≡ true → accept-n M q (length x) (get x )
67
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
60 lemma→ {Q} {Σ} M q [] eq = record { r = λ i lt → get [ q ] {i} lt ; accept-1 = refl ; accept-2 = λ _ () ; accept-3 = eq }
68
13822f5f9c85 use Vec
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 67
diff changeset
61 lemma→ {Q} {Σ} {n} M q (h ∷ t) eq with lemma→ M (δ M q h) t (lemma7 M q h t eq)
67
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
62 ... | an = record { r = seq ; accept-1 = refl ; accept-2 = acc2 ; accept-3 = accept-3 an } where
68
13822f5f9c85 use Vec
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 67
diff changeset
63 seq : (i : ℕ) → i < suc n → Q
67
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
64 seq 0 lt = q
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
65 seq (suc i) (s≤s lt) = r an i lt
68
13822f5f9c85 use Vec
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 67
diff changeset
66 acc2 : (i : ℕ) (i<n : i < n) → δ M (seq i (lemma4 i<n)) (get (h ∷ t) i<n) ≡ seq (suc i) (s≤s i<n)
67
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
67 acc2 zero (s≤s z≤n) = begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
68 δ M (seq zero (lemma4 (s≤s z≤n))) (get (h ∷ t) (s≤s z≤n))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
69 ≡⟨⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
70 δ M q h
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
71 ≡⟨ sym ( accept-1 an) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
72 seq 1 (s≤s (s≤s z≤n))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
73 ∎ where open ≡-Reasoning
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
74 acc2 (suc i) (s≤s lt) = accept-2 an i lt
65
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
75
68
13822f5f9c85 use Vec
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 67
diff changeset
76 an-1 : { Q : Set } { Σ : Set } {n : ℕ} (M : Automaton Q Σ ) (q : Q ) → (h : Σ ) → (t : Vec Σ n )
67
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
77 → accept-n M q (length (h ∷ t)) (get (h ∷ t) )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
78 → accept-n M (δ M q h) (length t) (get t )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
79 an-1 {Q} {Σ} M q h t an = record {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
80 r = seq
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
81 ; accept-1 = acc1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
82 ; accept-2 = acc2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
83 ; accept-3 = accept-3 an
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
84 } where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
85 seq : (i : ℕ) → i < suc (length t) → Q
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
86 seq i lt = r an (suc i) ( s≤s lt)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
87 acc1 : seq 0 (s≤s z≤n) ≡ δ M q h
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
88 acc1 = begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
89 seq 0 (s≤s z≤n)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
90 ≡⟨⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
91 r an 1 (s≤s (s≤s z≤n))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
92 ≡⟨ sym (accept-2 an 0 (s≤s z≤n)) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
93 δ M (r an 0 (s≤s z≤n)) h
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
94 ≡⟨ cong (λ k → δ M k h) (accept-1 an) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
95 δ M q h
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
96 ∎ where open ≡-Reasoning
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
97 acc2 : (i : ℕ) (i<n : i < length t) → δ M (seq i (lemma4 i<n)) (get t i<n) ≡ seq (suc i) (s≤s i<n)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
98 acc2 i lt = accept-2 an (suc i) (s≤s lt)
65
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
99
68
13822f5f9c85 use Vec
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 67
diff changeset
100 lemma← : { Q : Set } { Σ : Set } {n : ℕ} (M : Automaton Q Σ ) (q : Q ) → (x : Vec Σ n ) → accept-n M q (length x) (get x ) → accept-v M q x ≡ true
67
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
101 lemma← {Q} {Σ} M q [] an with accept-1 an | accept-3 an
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
102 ... | eq1 | eq3 = begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
103 aend M q
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
104 ≡⟨ cong ( λ k → aend M k ) (sym (accept-1 an)) ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
105 aend M (r an 0 lemma5)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
106 ≡⟨ accept-3 an ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
107 true
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
108 ∎ where open ≡-Reasoning
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
109 lemma← {Q} {Σ} M q (h ∷ t) an = lemma← M (δ M q h) t ( an-1 M q h t an )