Mercurial > hg > Members > kono > Proof > automaton
annotate automaton-in-agda/src/sbconst2.agda @ 205:e97cf4fb67fa
...
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 18 Jun 2021 21:09:50 +0900 |
parents | 3fa72793620b |
children | 8006cbd87b20 |
rev | line source |
---|---|
32
cd311109d63b
suset construction for subset function nfa
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
1 module sbconst2 where |
13
02b4ecc9972c
start exp version of subset construction
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
2 |
02b4ecc9972c
start exp version of subset construction
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
3 open import Level renaming ( suc to succ ; zero to Zero ) |
02b4ecc9972c
start exp version of subset construction
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
4 open import Data.Nat |
69 | 5 open import Data.Fin |
13
02b4ecc9972c
start exp version of subset construction
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
6 open import Data.List |
02b4ecc9972c
start exp version of subset construction
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
7 |
02b4ecc9972c
start exp version of subset construction
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
8 open import automaton |
32
cd311109d63b
suset construction for subset function nfa
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
9 open import nfa |
69 | 10 open import logic |
13
02b4ecc9972c
start exp version of subset construction
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
11 open NAutomaton |
32
cd311109d63b
suset construction for subset function nfa
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
12 open Automaton |
69 | 13 open import Relation.Binary.PropositionalEquality hiding ( [_] ) |
14 | |
15 open Bool | |
13
02b4ecc9972c
start exp version of subset construction
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
16 |
141 | 17 δconv : { Q : Set } { Σ : Set } → ( ( Q → Bool ) → Bool ) → ( nδ : Q → Σ → Q → Bool ) → (f : Q → Bool) → (i : Σ) → (Q → Bool) |
18 δconv {Q} { Σ} exists nδ f i q = exists ( λ r → f r /\ nδ r i q ) | |
13
02b4ecc9972c
start exp version of subset construction
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
19 |
141 | 20 subset-construction : { Q : Set } { Σ : Set } → |
21 ( ( Q → Bool ) → Bool ) → | |
22 (NAutomaton Q Σ ) → (Automaton (Q → Bool) Σ ) | |
23 subset-construction {Q} { Σ} exists NFA = record { | |
24 δ = λ q x → δconv exists ( Nδ NFA ) q x | |
25 ; aend = λ f → exists ( λ q → f q /\ Nend NFA q ) | |
70 | 26 } |
69 | 27 |
141 | 28 test4 = subset-construction existsS1 am2 |
69 | 29 |
141 | 30 test51 = accept test4 start1 ( i0 ∷ i1 ∷ i0 ∷ [] ) |
31 test61 = accept test4 start1 ( i1 ∷ i1 ∷ i1 ∷ [] ) | |
14 | 32 |
141 | 33 subset-construction-lemma→ : { Q : Set } { Σ : Set } { n : ℕ } → (exists : ( Q → Bool ) → Bool ) → |
34 (NFA : NAutomaton Q Σ ) → (astart : Q → Bool ) | |
69 | 35 → (x : List Σ) |
141 | 36 → Naccept NFA exists astart x ≡ true |
37 → accept ( subset-construction exists NFA ) astart x ≡ true | |
38 subset-construction-lemma→ {Q} {Σ} {n} exists NFA astart x naccept = lemma1 x astart naccept where | |
69 | 39 lemma1 : (x : List Σ) → ( states : Q → Bool ) |
141 | 40 → Naccept NFA exists states x ≡ true |
41 → accept ( subset-construction exists NFA ) states x ≡ true | |
69 | 42 lemma1 [] states naccept = naccept |
141 | 43 lemma1 (h ∷ t ) states naccept = lemma1 t (δconv exists (Nδ NFA) states h) naccept |
32
cd311109d63b
suset construction for subset function nfa
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
44 |
141 | 45 subset-construction-lemma← : { Q : Set } { Σ : Set } { n : ℕ } → (exists : ( Q → Bool ) → Bool ) → |
46 (NFA : NAutomaton Q Σ ) → (astart : Q → Bool ) | |
69 | 47 → (x : List Σ) |
141 | 48 → accept ( subset-construction exists NFA ) astart x ≡ true |
49 → Naccept NFA exists astart x ≡ true | |
50 subset-construction-lemma← {Q} {Σ} {n} exists NFA astart x saccept = lemma2 x astart saccept where | |
69 | 51 lemma2 : (x : List Σ) → ( states : Q → Bool ) |
141 | 52 → accept ( subset-construction exists NFA ) states x ≡ true |
53 → Naccept NFA exists states x ≡ true | |
69 | 54 lemma2 [] states saccept = saccept |
141 | 55 lemma2 (h ∷ t ) states saccept = lemma2 t (δconv exists (Nδ NFA) states h) saccept |