@@ -10,84 +10,97 @@ open import Cubical.Relation.Nullary.Properties
10
10
open import Cubical.Relation.Nullary.DecidablePropositions
11
11
12
12
open import Cubical.Data.FinSet
13
- open import Cubical.Data.Bool
14
- open import Cubical.Data.Sum
13
+ open import Cubical.Data.Bool hiding (_⊕_)
14
+ open import Cubical.Data.Sum as Sum
15
15
open import Cubical.Data.SumFin
16
16
open import Cubical.Data.Unit
17
- open import Cubical.Data.Empty as ⊥
17
+ open import Cubical.Data.Empty as Empty hiding (⊥ ; ⊥*)
18
18
open import Cubical.Data.List hiding (init)
19
19
20
20
Alphabet : hSet ℓ-zero
21
21
Alphabet = (Fin 2 ) , (isFinSet→isSet isFinSetFin)
22
22
23
23
open import Grammar Alphabet
24
24
open import Grammar.Equivalence Alphabet
25
- open import Grammar.KleeneStar Alphabet
26
25
open import Term Alphabet
27
26
open import DFA.Base Alphabet
28
27
open import DFA.Decider Alphabet
29
28
open import Helper
30
29
30
+ private
31
+ variable
32
+ ℓg ℓh : Level
33
+ g : Grammar ℓg
34
+ h : Grammar ℓh
35
+
31
36
module examples where
32
37
-- examples are over alphabet drawn from Fin 2
33
38
-- characters are fzero and (fsuc fzero)
34
39
35
40
open DFA
36
41
37
- D : DFA
38
- D .Q = Fin 3 , isFinSetFin
39
- D .init = fzero
40
- D .isAcc fzero = (Unit , isPropUnit ) , yes _
41
- D .isAcc (fsuc x) = (⊥* , isProp⊥*) , no lower
42
- δ D fzero fzero = fromℕ 0
43
- δ D fzero (fsuc fzero) = fromℕ 1
44
- δ D (fsuc fzero) fzero = fromℕ 2
45
- δ D (fsuc fzero) (fsuc fzero) = fromℕ 0
46
- δ D (fsuc (fsuc fzero)) fzero = fromℕ 1
47
- δ D (fsuc (fsuc fzero)) (fsuc fzero) = fromℕ 2
48
-
49
- w : String
50
- w = fzero ∷ fsuc fzero ∷ fsuc fzero ∷ fzero ∷ []
51
-
52
- w' : String
53
- w' = fzero ∷ fsuc fzero ∷ fsuc fzero ∷ []
54
-
55
- w'' : String
56
- w'' = fzero ∷ fsuc fzero ∷ fsuc fzero ∷ fsuc fzero ∷ []
57
-
58
- _ : decide D _ (⌈ w ⌉) .fst ≡ true
59
- _ = refl
60
-
61
- _ : decide D _ (⌈ w' ⌉) .fst ≡ true
62
- _ = refl
63
-
64
- _ : decide D _ ⌈ w'' ⌉ .fst ≡ false
65
- _ = refl
66
-
67
- _ : decide D _ ⌈ [] ⌉ .fst ≡ true
68
- _ = refl
69
-
70
-
71
- {-- 0
72
- -- 0 --------> 1
73
- -- <--------
74
- -- 0
75
- -- and self loops for 1. state 1 is acc
76
- --
77
- --}
78
- D' : DFA
79
- Q D' = (Fin 2 ) , isFinSetFin
80
- init D' = inl _
81
- isAcc D' x =
82
- ((x ≡ fsuc fzero) , isSetFin x (fsuc fzero)) ,
83
- discreteFin x (fsuc fzero)
84
- δ D' fzero fzero = fromℕ 1
85
- δ D' fzero (fsuc fzero) = fromℕ 0
86
- δ D' (fsuc fzero) fzero = fromℕ 0
87
- δ D' (fsuc fzero) (fsuc fzero) = fromℕ 1
88
-
89
- s : String
90
- s = fsuc fzero ∷ fzero ∷ []
91
-
92
- _ : decide D' _ ⌈ s ⌉ .fst ≡ true
93
- _ = refl
42
+ opaque
43
+ unfolding _⊕_ ⊕-elim ⊕-inl ⊕-inr ⟜-intro ⊸-intro
44
+ is-inl : ∀ w → (g : Grammar ℓg) (h : Grammar ℓh) → (g ⊕ h) w → Bool
45
+ is-inl w g h p = Sum.rec (λ _ → true) (λ _ → false) p
46
+
47
+ mktest : ∀ {ℓd} → String → DFA {ℓd} → Bool
48
+ mktest w dfa =
49
+ is-inl w
50
+ (AcceptingTraceFrom dfa (dfa .init)) (RejectingTraceFrom dfa (dfa .init))
51
+ ((decideInit dfa ∘g (⌈w⌉→string {w = w})) w (internalize w))
52
+
53
+ D : DFA {ℓ-zero}
54
+ D .Q = Fin 3 , isFinSetFin
55
+ D .init = fzero
56
+ D .isAcc fzero = (Unit , isPropUnit ) , yes _
57
+ D .isAcc (fsuc x) = (Empty.⊥* , isProp⊥*) , no lower
58
+ δ D fzero fzero = fromℕ 0
59
+ δ D fzero (fsuc fzero) = fromℕ 1
60
+ δ D (fsuc fzero) fzero = fromℕ 2
61
+ δ D (fsuc fzero) (fsuc fzero) = fromℕ 0
62
+ δ D (fsuc (fsuc fzero)) fzero = fromℕ 1
63
+ δ D (fsuc (fsuc fzero)) (fsuc fzero) = fromℕ 2
64
+
65
+ w : String
66
+ w = fzero ∷ fsuc fzero ∷ fsuc fzero ∷ fzero ∷ []
67
+
68
+ w' : String
69
+ w' = fzero ∷ fsuc fzero ∷ fsuc fzero ∷ []
70
+
71
+ w'' : String
72
+ w'' = fzero ∷ fsuc fzero ∷ fsuc fzero ∷ fsuc fzero ∷ []
73
+
74
+ _ : mktest w' D ≡ true
75
+ _ = refl
76
+
77
+ _ : mktest w'' D ≡ false
78
+ _ = refl
79
+
80
+ _ : mktest [] D ≡ true
81
+ _ = refl
82
+
83
+
84
+ {-- 0
85
+ -- 0 --------> 1
86
+ -- <--------
87
+ -- 0
88
+ -- and self loops for 1. state 1 is acc
89
+ --
90
+ --}
91
+ D' : DFA {ℓ-zero}
92
+ Q D' = (Fin 2 ) , isFinSetFin
93
+ init D' = inl _
94
+ isAcc D' x =
95
+ ((x ≡ fsuc fzero) , isSetFin x (fsuc fzero)) ,
96
+ discreteFin x (fsuc fzero)
97
+ δ D' fzero fzero = fromℕ 1
98
+ δ D' fzero (fsuc fzero) = fromℕ 0
99
+ δ D' (fsuc fzero) fzero = fromℕ 0
100
+ δ D' (fsuc fzero) (fsuc fzero) = fromℕ 1
101
+
102
+ s : String
103
+ s = fsuc fzero ∷ fzero ∷ []
104
+
105
+ _ : mktest s D' ≡ true
106
+ _ = refl
0 commit comments