comparison automaton-in-agda/src/derive.agda @ 405:af8f630b7e60

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sun, 24 Sep 2023 18:02:04 +0900
parents c298981108c1
children b85402051cdb
comparison
equal deleted inserted replaced
404:dfaf230f7b9a 405:af8f630b7e60
3 open import Relation.Binary.PropositionalEquality hiding ( [_] ) 3 open import Relation.Binary.PropositionalEquality hiding ( [_] )
4 open import Relation.Nullary using (¬_; Dec; yes; no) 4 open import Relation.Nullary using (¬_; Dec; yes; no)
5 open import Data.List hiding ( [_] ) 5 open import Data.List hiding ( [_] )
6 open import Data.Empty 6 open import Data.Empty
7 open import finiteSet 7 open import finiteSet
8 open import finiteFunc
8 open import fin 9 open import fin
9 10
10 module derive ( Σ : Set) ( fin : FiniteSet Σ ) ( eq? : (x y : Σ) → Dec (x ≡ y)) where 11 module derive ( Σ : Set) ( fin : FiniteSet Σ ) ( eq? : (x y : Σ) → Dec (x ≡ y)) where
11 12
12 open import automaton 13 open import automaton
72 regex-match ex is = accept ( regex→automaton ex ) record { state = ex ; is-derived = unit refl } is 73 regex-match ex is = accept ( regex→automaton ex ) record { state = ex ; is-derived = unit refl } is
73 74
74 -- open import Relation.Binary.HeterogeneousEquality as HE using (_≅_ ) 75 -- open import Relation.Binary.HeterogeneousEquality as HE using (_≅_ )
75 76
76 -- open import nfa 77 -- open import nfa
77 open import Data.Nat 78 open import Data.Nat hiding (eq?)
78 open import Data.Nat.Properties hiding ( eq? ) 79 open import Data.Nat.Properties hiding ( eq? )
79 open import nat 80 open import nat
80 open import finiteSetUtil 81 open import finiteSetUtil
81 open FiniteSet 82 open FiniteSet
82 open import Data.Fin hiding (_<_ ; _≤_ ; pred ) 83 open import Data.Fin hiding (_<_ ; _≤_ ; pred )
259 sbempty? (r *) f = true 260 sbempty? (r *) f = true
260 sbempty? (r & r₁) f = ? where 261 sbempty? (r & r₁) f = ? where
261 sb01 : (isb : ISB (r & r₁)) → ( ISB.is-sub isb ≡ sub&1 _ _ _ ? ) 262 sb01 : (isb : ISB (r & r₁)) → ( ISB.is-sub isb ≡ sub&1 _ _ _ ? )
262 ∨ ( ISB.is-sub isb ≡ sub&2 _ _ _ ? ) 263 ∨ ( ISB.is-sub isb ≡ sub&2 _ _ _ ? )
263 ∨ ( ISB.is-sub isb ≡ subst (λ k → SB ? ?) ? (sub&& _ _ _ ? ? )) 264 ∨ ( ISB.is-sub isb ≡ subst (λ k → SB ? ?) ? (sub&& _ _ _ ? ? ))
264 sb01 isb with ISB.is-sub isb | inspect ISB.is-sub isb 265 sb01 isb with ISB.is-sub isb in eq
265 ... | sub&1 .r .r₁ .(ISB.s isb) t | record { eq = refl } = case1 refl 266 ... | sub&1 .r .r₁ .(ISB.s isb) t = case1 ?
266 ... | sub&2 .r .r₁ .(ISB.s isb) t | record { eq = refl } = case2 (case1 refl) 267 ... | sub&2 .r .r₁ .(ISB.s isb) t = case2 (case1 ?)
267 ... | sub&& .r .r₁ z x t | record { eq = refl } = case2 (case2 refl) 268 ... | sub&& .r .r₁ z x t = case2 (case2 ?)
268 sb00 : ISB r → Bool 269 sb00 : ISB r → Bool
269 sb00 record { s = s ; is-sub = is-sub } = f record { s = s ; is-sub = sub&1 _ _ _ is-sub } 270 sb00 record { s = s ; is-sub = is-sub } = f record { s = s ; is-sub = sub&1 _ _ _ is-sub }
270 sbempty? (r || r₁) f with f record { s = r ; is-sub = sub|1 ? } | f record { s = r₁ ; is-sub = sub|2 ? } 271 sbempty? (r || r₁) f with f record { s = r ; is-sub = sub|1 ? } | f record { s = r₁ ; is-sub = sub|2 ? }
271 ... | false | t = true 272 ... | false | t = true
272 ... | true | t = empty? r \/ empty? r₁ 273 ... | true | t = empty? r \/ empty? r₁