Mercurial > hg > Members > kono > Proof > automaton
annotate agda/sbconst2.agda @ 76:7b357b295272
...
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 08 Nov 2019 13:40:25 +0900 |
parents | 702ce92c45ab |
children | b3f05cd08d24 |
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 |
44 | 13 open import finiteSet |
13
02b4ecc9972c
start exp version of subset construction
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
14 open FiniteSet |
69 | 15 open import Relation.Binary.PropositionalEquality hiding ( [_] ) |
16 | |
17 | |
18 open Bool | |
13
02b4ecc9972c
start exp version of subset construction
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
19 |
70 | 20 δconv : { Q : Set } { Σ : Set } { n : ℕ } → FiniteSet Q {n} → ( nδ : Q → Σ → Q → Bool ) → (f : Q → Bool) → (i : Σ) → (Q → Bool) |
69 | 21 δconv {Q} { Σ} { n} N nδ f i q = exists N ( λ r → f r /\ nδ r i q ) |
22 | |
23 open FiniteSet | |
13
02b4ecc9972c
start exp version of subset construction
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
24 |
32
cd311109d63b
suset construction for subset function nfa
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
25 subset-construction : { Q : Set } { Σ : Set } { n : ℕ } → FiniteSet Q {n} → |
69 | 26 (NAutomaton Q Σ ) → (astart : Q ) → (Automaton (Q → Bool) Σ ) |
27 subset-construction {Q} { Σ} {n} fin NFA astart = record { | |
28 δ = λ q x → δconv fin ( Nδ NFA ) q x | |
70 | 29 ; aend = λ f → exists fin ( λ q → f q /\ Nend NFA q ) |
30 } | |
69 | 31 |
32 am2start = λ q1 → equal? finState1 ss q1 | |
33 | |
34 test4 = subset-construction finState1 am2 ss | |
35 | |
36 test5 = accept test4 ( λ q1 → equal? finState1 ss q1) ( i0 ∷ i1 ∷ i0 ∷ [] ) | |
37 test6 = accept test4 ( λ q1 → equal? finState1 ss q1) ( i1 ∷ i1 ∷ i1 ∷ [] ) | |
14 | 38 |
69 | 39 subset-construction-lemma→ : { Q : Set } { Σ : Set } { n : ℕ } → (fin : FiniteSet Q {n} ) → |
40 (NFA : NAutomaton Q Σ ) → (astart : Q ) | |
41 → (x : List Σ) | |
42 → Naccept NFA fin ( λ q1 → equal? fin astart q1) x ≡ true | |
43 → accept ( subset-construction fin NFA astart ) ( λ q1 → equal? fin astart q1) x ≡ true | |
44 subset-construction-lemma→ {Q} {Σ} {n} fin NFA astart x naccept = lemma1 x ( λ q1 → equal? fin astart q1) naccept where | |
45 lemma1 : (x : List Σ) → ( states : Q → Bool ) | |
46 → Naccept NFA fin states x ≡ true | |
47 → accept ( subset-construction fin NFA astart ) states x ≡ true | |
48 lemma1 [] states naccept = naccept | |
49 lemma1 (h ∷ t ) states naccept = lemma1 t (δconv fin (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
|
50 |
69 | 51 subset-construction-lemma← : { Q : Set } { Σ : Set } { n : ℕ } → (fin : FiniteSet Q {n} ) → |
52 (NFA : NAutomaton Q Σ ) → (astart : Q ) | |
53 → (x : List Σ) | |
54 → accept ( subset-construction fin NFA astart ) ( λ q1 → equal? fin astart q1) x ≡ true | |
55 → Naccept NFA fin ( λ q1 → equal? fin astart q1) x ≡ true | |
56 subset-construction-lemma← {Q} {Σ} {n} fin NFA astart x saccept = lemma2 x ( λ q1 → equal? fin astart q1) saccept where | |
57 lemma2 : (x : List Σ) → ( states : Q → Bool ) | |
58 → accept ( subset-construction fin NFA astart ) states x ≡ true | |
59 → Naccept NFA fin states x ≡ true | |
60 lemma2 [] states saccept = saccept | |
61 lemma2 (h ∷ t ) states saccept = lemma2 t (δconv fin (Nδ NFA) states h) saccept |