Mercurial > hg > Members > kono > Proof > automaton
diff automaton-in-agda/src/nfa136.agda @ 410:db02b6938e04
StarProp and Ntrace
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 22 Nov 2023 17:07:01 +0900 |
parents | 3d0aa205edf9 |
children |
line wrap: on
line diff
--- a/automaton-in-agda/src/nfa136.agda Thu Nov 16 17:40:42 2023 +0900 +++ b/automaton-in-agda/src/nfa136.agda Wed Nov 22 17:07:01 2023 +0900 @@ -97,7 +97,9 @@ aδ : Q2 → Σ2 → Q2 aδ a0 ca = a1 -aδ a0 _ = af +aδ a0 cb = af +aδ a0 cc = af +aδ a0 cf = af aδ a1 cf = ae aδ a1 _ = a1 aδ ae cf = ae @@ -109,13 +111,15 @@ test111 : Bool test111 = accept fa-a a0 ( ca ∷ cf ∷ ca ∷ [] ) +-- b.*f + b-end : Q2 → Bool b-end be = true b-end _ = false bδ : Q2 → Σ2 → Q2 -bδ b0 cb = b1 -bδ b0 _ = bf +bδ ae cb = b1 +bδ ae _ = bf bδ b1 cf = be bδ b1 _ = b1 bδ be cf = be @@ -129,13 +133,20 @@ open import regular-language +-- (a.*f)(b.*f) -- a.*(fb).*f test116 = split (accept fa-a a0) (accept fa-b b0) ( ca ∷ cf ∷ cb ∷ cf ∷ cf ∷ [] ) +-- a0 ae b0 b1 be +test117 = split (accept fa-a a0) (accept fa-b b0) ( ca ∷ cf ∷ ca ∷ cb ∷ ca ∷ cf ∷ cf ∷ [] ) +-- a0 ae a0 b0 b1 be +-- a0 ae ae b0 b1 be naδ : Q2 → Σ2 → Q2 → Bool naδ a0 ca a1 = true naδ a0 _ _ = false naδ a1 cf ae = true naδ a1 _ a1 = true +naδ ae cf ae = true +naδ ae _ a1 = true naδ _ _ _ = false a-start : Q2 → Bool @@ -160,6 +171,8 @@ nbδ ae _ _ = false nbδ b1 cf be = true nbδ b1 _ b1 = true +nbδ be cf be = true +nbδ be _ b1 = true nbδ _ _ _ = false b-start : Q2 → Bool @@ -170,7 +183,7 @@ nfa-b = record { Nδ = nbδ ; Nend = b-end } nfa-b-exists : (Q2 → Bool) → Bool -nfa-b-exists p = p b0 \/ p b1 \/ p ae +nfa-b-exists p = p b0 \/ p b1 \/ p be -- (a.*f)(b.*f) @@ -183,11 +196,23 @@ nfa-ab-exists : (Q2 → Bool) → Bool nfa-ab-exists p = nfa-a-exists p \/ nfa-b-exists p +test-ab1-data : List Σ2 +test-ab1-data = ( ca ∷ cf ∷ ca ∷ cb ∷ cf ∷ [] ) + test-ab1 : Bool -test-ab1 = Naccept nfa-a nfa-a-exists a-start ( ca ∷ cf ∷ ca ∷ cb ∷ cf ∷ [] ) +test-ab1 = Naccept nfa-ab nfa-ab-exists a-start test-ab1-data -- should be false + +test-ab2-data : List Σ2 +test-ab2-data = ( ca ∷ cf ∷ ca ∷ cf ∷ cb ∷ cb ∷ cf ∷ [] ) test-ab2 : Bool -test-ab2 = Naccept nfa-a nfa-a-exists a-start ( ca ∷ cf ∷ ca ∷ cb ∷ cb ∷ [] ) +test-ab2 = Naccept nfa-ab nfa-ab-exists a-start test-ab2-data -- should be true + +q2-list : List Q2 +q2-list = a0 ∷ a1 ∷ ae ∷ af ∷ b0 ∷ b1 ∷ be ∷ bf ∷ [] + +test-tr : List (List Q2) +test-tr = Ntrace nfa-ab q2-list nfa-ab-exists a-start ( ca ∷ cf ∷ cf ∷ cb ∷ cb ∷ cf ∷ [] ) -- test-ab3 = map reverse ( NtraceDepth nfa-ab a-start (a0 ∷ a1 ∷ ae ∷ b0 ∷ b1 ∷ be ∷ []) ( ca ∷ cf ∷ ca ∷ cb ∷ cf ∷ [] )) @@ -200,9 +225,36 @@ test113 = accept test112 a-start ( ca ∷ cf ∷ ca ∷ cb ∷ cb ∷ [] ) -- +open import regex +open import Relation.Nullary using (¬_; Dec; yes; no) + +Σ2-cmp : (x y : Σ2 ) → Dec (x ≡ y) +Σ2-cmp ca ca = yes refl +Σ2-cmp ca cb = no (λ ()) +Σ2-cmp ca cc = no (λ ()) +Σ2-cmp ca cf = no (λ ()) +Σ2-cmp cb ca = no (λ ()) +Σ2-cmp cb cb = yes refl +Σ2-cmp cb cc = no (λ ()) +Σ2-cmp cb cf = no (λ ()) +Σ2-cmp cc ca = no (λ ()) +Σ2-cmp cc cb = no (λ ()) +Σ2-cmp cc cc = yes refl +Σ2-cmp cc cf = no (λ ()) +Σ2-cmp cf ca = no (λ ()) +Σ2-cmp cf cb = no (λ ()) +Σ2-cmp cf cc = no (λ ()) +Σ2-cmp cf cf = yes refl + +Σ2-any : Regex Σ2 +Σ2-any = < ca > || < cb > || < cc > || < cf > + +test-ab1-regex : regex-language ( (< ca > & (Σ2-any *) & < cf > ) & (< cb > & (Σ2-any *) & < cf > ) ) Σ2-cmp test-ab1-data ≡ false +test-ab1-regex = refl + +test-ab2-regex : regex-language ( (< ca > & (Σ2-any *) & < cf > ) & (< cb > & (Σ2-any *) & < cf > ) ) Σ2-cmp test-ab2-data ≡ true +test-ab2-regex = refl - -