Mercurial > hg > Members > kono > Proof > automaton
changeset 68:13822f5f9c85
use Vec
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 31 Oct 2019 21:41:54 +0900 |
parents | b9679ebd1156 |
children | f124fceba460 |
files | agda/automaton-text.agda |
diffstat | 1 files changed, 22 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/agda/automaton-text.agda Thu Oct 31 13:53:26 2019 +0900 +++ b/agda/automaton-text.agda Thu Oct 31 21:41:54 2019 +0900 @@ -2,7 +2,7 @@ -- open import Level renaming ( suc to succ ; zero to Zero ) open import Data.Nat -open import Data.List +open import Data.Vec open import Data.Maybe -- open import Data.Bool using ( Bool ; true ; false ; _∧_ ) open import Relation.Binary.PropositionalEquality hiding ( [_] ) @@ -11,6 +11,7 @@ -- open import Data.Bool renaming ( _∧_ to _and_ ; _∨_ to _or ) open import automaton +open import Data.Vec open Automaton @@ -25,6 +26,9 @@ lemma5 {zero} = s≤s z≤n lemma5 {suc n} = s≤s lemma5 +length : {S : Set} {n : ℕ} → Vec S n → ℕ +length {_} {n} _ = n + record accept-n { Q : Set } { Σ : Set } (M : Automaton Q Σ ) (astart : Q ) (n : ℕ ) (s : {i : ℕ } → (i < n) → Σ ) : Set where field r : (i : ℕ ) → i < suc n → Q @@ -32,26 +36,34 @@ accept-2 : (i : ℕ ) → (i<n : i < n ) → δ M (r i (lemma4 i<n)) (s i<n) ≡ r (suc i) (s≤s i<n) accept-3 : aend M (r n lemma5 ) ≡ true -get : { Σ : Set } → (x : List Σ ) → { i : ℕ } → i < length x → Σ +get : { Σ : Set } {n : ℕ} → (x : Vec Σ n ) → { i : ℕ } → i < n → Σ get [] () get (h ∷ t) {0} (s≤s lt) = h get (h ∷ t) {suc i} (s≤s lt) = get t lt -lemma7 : { Q : Set } { Σ : Set } (M : Automaton Q Σ ) (q : Q ) → (h : Σ) → (t : List Σ ) → accept M q (h ∷ t) ≡ true → accept M (δ M q h) t ≡ true -lemma7 M q h t eq with accept M (δ M q h) t +accept-v : { Q : Set } { Σ : Set } {n : ℕ } + → Automaton Q Σ + → (astart : Q) + → Vec Σ n → Bool +accept-v {Q} { Σ} M q [] = aend M q +accept-v {Q} { Σ} M q ( H ∷ T ) = accept-v M ( (δ M) q H ) T + +lemma7 : { Q : Set } { Σ : Set } {n : ℕ} (M : Automaton Q Σ ) (q : Q ) → (h : Σ) → (t : Vec Σ n ) + → accept-v M q (h ∷ t) ≡ true → accept-v M (δ M q h) t ≡ true +lemma7 M q h t eq with accept-v M (δ M q h) t lemma7 M q h t refl | true = refl lemma7 M q h t () | false open accept-n -lemma→ : { Q : Set } { Σ : Set } (M : Automaton Q Σ ) (q : Q ) → (x : List Σ ) → accept M q x ≡ true → accept-n M q (length x) (get x ) +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 ) lemma→ {Q} {Σ} M q [] eq = record { r = λ i lt → get [ q ] {i} lt ; accept-1 = refl ; accept-2 = λ _ () ; accept-3 = eq } -lemma→ {Q} {Σ} M q (h ∷ t) eq with lemma→ M (δ M q h) t (lemma7 M q h t eq) +lemma→ {Q} {Σ} {n} M q (h ∷ t) eq with lemma→ M (δ M q h) t (lemma7 M q h t eq) ... | an = record { r = seq ; accept-1 = refl ; accept-2 = acc2 ; accept-3 = accept-3 an } where - seq : (i : ℕ) → i < suc (suc (foldr (λ _ → suc) 0 t)) → Q + seq : (i : ℕ) → i < suc n → Q seq 0 lt = q seq (suc i) (s≤s lt) = r an i lt - acc2 : (i : ℕ) (i<n : i < suc (foldr (λ _ → suc) 0 t)) → δ M (seq i (lemma4 i<n)) (get (h ∷ t) i<n) ≡ seq (suc i) (s≤s i<n) + acc2 : (i : ℕ) (i<n : i < n) → δ M (seq i (lemma4 i<n)) (get (h ∷ t) i<n) ≡ seq (suc i) (s≤s i<n) acc2 zero (s≤s z≤n) = begin δ M (seq zero (lemma4 (s≤s z≤n))) (get (h ∷ t) (s≤s z≤n)) ≡⟨⟩ @@ -61,7 +73,7 @@ ∎ where open ≡-Reasoning acc2 (suc i) (s≤s lt) = accept-2 an i lt -an-1 : { Q : Set } { Σ : Set } (M : Automaton Q Σ ) (q : Q ) → (h : Σ ) → (t : List Σ ) +an-1 : { Q : Set } { Σ : Set } {n : ℕ} (M : Automaton Q Σ ) (q : Q ) → (h : Σ ) → (t : Vec Σ n ) → accept-n M q (length (h ∷ t)) (get (h ∷ t) ) → accept-n M (δ M q h) (length t) (get t ) an-1 {Q} {Σ} M q h t an = record { @@ -85,7 +97,7 @@ acc2 : (i : ℕ) (i<n : i < length t) → δ M (seq i (lemma4 i<n)) (get t i<n) ≡ seq (suc i) (s≤s i<n) acc2 i lt = accept-2 an (suc i) (s≤s lt) -lemma← : { Q : Set } { Σ : Set } (M : Automaton Q Σ ) (q : Q ) → (x : List Σ ) → accept-n M q (length x) (get x ) → accept M q x ≡ true +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 lemma← {Q} {Σ} M q [] an with accept-1 an | accept-3 an ... | eq1 | eq3 = begin aend M q