view agda/sbconst2.agda @ 99:aca3f1349913

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 11 Nov 2019 21:30:04 +0900
parents 702ce92c45ab
children b3f05cd08d24
line wrap: on
line source

module sbconst2 where

open import Level renaming ( suc to succ ; zero to Zero )
open import Data.Nat
open import Data.Fin
open import Data.List

open import automaton
open import nfa
open import logic
open NAutomaton
open Automaton
open import finiteSet
open FiniteSet
open import  Relation.Binary.PropositionalEquality hiding ( [_] )


open Bool

δconv : { Q : Set } { Σ : Set  } { n  : ℕ }  → FiniteSet Q {n} →  ( nδ : Q → Σ → Q → Bool ) → (f : Q → Bool) → (i : Σ) → (Q → Bool)
δconv {Q} { Σ} { n} N nδ f i q =  exists N ( λ r → f r /\ nδ r i q )

open FiniteSet

subset-construction : { Q : Set } { Σ : Set  } { n  : ℕ }  → FiniteSet Q {n} →  
    (NAutomaton Q  Σ ) → (astart : Q ) → (Automaton (Q → Bool)  Σ )  
subset-construction {Q} { Σ} {n} fin NFA astart = record {
        δ = λ q x → δconv fin ( Nδ NFA ) q x
     ;  aend = λ f → exists fin ( λ q → f q /\ Nend NFA q )
   } 

am2start = λ q1 → equal? finState1 ss q1

test4 = subset-construction finState1 am2 ss

test5 = accept test4 ( λ q1 → equal? finState1 ss q1) ( i0  ∷ i1  ∷ i0  ∷ [] )
test6 = accept test4 ( λ q1 → equal? finState1 ss q1) ( i1  ∷ i1  ∷ i1  ∷ [] )

subset-construction-lemma→ : { Q : Set } { Σ : Set  } { n  : ℕ }  → (fin : FiniteSet Q {n} ) →  
    (NFA : NAutomaton Q  Σ ) → (astart : Q )
    → (x : List Σ)
    → Naccept NFA fin ( λ q1 → equal? fin  astart q1) x ≡ true
    → accept (  subset-construction fin NFA astart ) ( λ q1 → equal? fin  astart q1) x ≡ true
subset-construction-lemma→ {Q} {Σ} {n} fin NFA astart x naccept = lemma1 x ( λ q1 → equal? fin  astart q1) naccept where
    lemma1 :  (x : List Σ) → ( states : Q → Bool )
       → Naccept NFA fin states x ≡ true
       → accept (  subset-construction fin NFA astart ) states x ≡ true
    lemma1 [] states naccept = naccept
    lemma1 (h ∷ t ) states naccept = lemma1 t (δconv fin (Nδ NFA) states h) naccept

subset-construction-lemma← : { Q : Set } { Σ : Set  } { n  : ℕ }  → (fin : FiniteSet Q {n} ) →  
    (NFA : NAutomaton Q  Σ ) → (astart : Q )
    → (x : List Σ)
    → accept (  subset-construction fin NFA astart ) ( λ q1 → equal? fin  astart q1) x ≡ true
    → Naccept NFA fin ( λ q1 → equal? fin  astart q1) x ≡ true
subset-construction-lemma← {Q} {Σ} {n} fin NFA astart x saccept = lemma2 x ( λ q1 → equal? fin  astart q1) saccept where
    lemma2 :  (x : List Σ) → ( states : Q → Bool )
       → accept (  subset-construction fin NFA astart ) states x ≡ true
       → Naccept NFA fin states x ≡ true
    lemma2 [] states saccept = saccept
    lemma2 (h ∷ t ) states saccept = lemma2 t (δconv fin (Nδ NFA) states h) saccept