annotate automaton-in-agda/src/deriveUtil.agda @ 405:af8f630b7e60

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sun, 24 Sep 2023 18:02:04 +0900
parents 113330c6e896
children b85402051cdb
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
405
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 381
diff changeset
1 {-# OPTIONS --cubical-compatible --safe #-}
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 381
diff changeset
2
271
5e066b730d73 regex cmp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 module deriveUtil where
5e066b730d73 regex cmp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4
5e066b730d73 regex cmp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 open import Level renaming ( suc to succ ; zero to Zero )
5e066b730d73 regex cmp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 open import Data.Nat
5e066b730d73 regex cmp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 open import Data.Fin
5e066b730d73 regex cmp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 open import Data.List
5e066b730d73 regex cmp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9
5e066b730d73 regex cmp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 open import regex
5e066b730d73 regex cmp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 open import automaton
5e066b730d73 regex cmp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 open import nfa
5e066b730d73 regex cmp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 open import logic
5e066b730d73 regex cmp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 open NAutomaton
5e066b730d73 regex cmp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 open Automaton
5e066b730d73 regex cmp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 open import Relation.Binary.PropositionalEquality hiding ( [_] )
5e066b730d73 regex cmp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 open import Relation.Nullary
5e066b730d73 regex cmp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
18
5e066b730d73 regex cmp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
19
5e066b730d73 regex cmp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 open Bool
5e066b730d73 regex cmp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21
5e066b730d73 regex cmp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 data alpha2 : Set where
5e066b730d73 regex cmp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 a : alpha2
5e066b730d73 regex cmp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 b : alpha2
5e066b730d73 regex cmp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
25
5e066b730d73 regex cmp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 a-eq? : (x y : alpha2) → Dec (x ≡ y)
5e066b730d73 regex cmp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 a-eq? a a = yes refl
5e066b730d73 regex cmp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 a-eq? b b = yes refl
5e066b730d73 regex cmp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 a-eq? a b = no (λ ())
5e066b730d73 regex cmp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 a-eq? b a = no (λ ())
5e066b730d73 regex cmp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
31
5e066b730d73 regex cmp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 open Regex
5e066b730d73 regex cmp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
33
272
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 271
diff changeset
34 open import finiteSet
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 271
diff changeset
35
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 271
diff changeset
36 fin-a : FiniteSet alpha2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 271
diff changeset
37 fin-a = record {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 271
diff changeset
38 finite = finite0
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 271
diff changeset
39 ; Q←F = Q←F0
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 271
diff changeset
40 ; F←Q = F←Q0
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 271
diff changeset
41 ; finiso→ = finiso→0
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 271
diff changeset
42 ; finiso← = finiso←0
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 271
diff changeset
43 } where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 271
diff changeset
44 finite0 : ℕ
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 271
diff changeset
45 finite0 = 2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 271
diff changeset
46 Q←F0 : Fin finite0 → alpha2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 271
diff changeset
47 Q←F0 zero = a
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 271
diff changeset
48 Q←F0 (suc zero) = b
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 271
diff changeset
49 F←Q0 : alpha2 → Fin finite0
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 271
diff changeset
50 F←Q0 a = # 0
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 271
diff changeset
51 F←Q0 b = # 1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 271
diff changeset
52 finiso→0 : (q : alpha2) → Q←F0 ( F←Q0 q ) ≡ q
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 271
diff changeset
53 finiso→0 a = refl
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 271
diff changeset
54 finiso→0 b = refl
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 271
diff changeset
55 finiso←0 : (f : Fin finite0 ) → F←Q0 ( Q←F0 f ) ≡ f
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 271
diff changeset
56 finiso←0 zero = refl
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 271
diff changeset
57 finiso←0 (suc zero) = refl
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 271
diff changeset
58
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 271
diff changeset
59
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 271
diff changeset
60 open import derive alpha2 fin-a a-eq?
271
5e066b730d73 regex cmp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
61 test11 = regex→automaton ( < a > & < b > )
5e066b730d73 regex cmp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
62
381
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 272
diff changeset
63 test12 = accept test11 record { state = < a > & < b > ; is-derived = unit refl } ( a ∷ b ∷ [] )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 272
diff changeset
64 test13 = accept test11 record { state = < a > & < b > ; is-derived = unit refl } ( a ∷ a ∷ [] )
271
5e066b730d73 regex cmp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
65
5e066b730d73 regex cmp
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
66 test14 = regex-match ( ( < a > & < b > ) * ) ( a ∷ b ∷ a ∷ a ∷ [] )
272
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 271
diff changeset
67
381
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 272
diff changeset
68 test15 = derive-step ( ( < a > & < b > ) * ) record { state = ( < a > & < b > ) * ; is-derived = unit refl } a
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 272
diff changeset
69 -- test16 = derive-step ? -- test15
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 272
diff changeset
70 -- test17 : derive-step ? -- test16 ≡ test16
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 272
diff changeset
71 -- test17 = refl
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 272
diff changeset
72
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 272
diff changeset
73 stest11 = regex→automaton1 ( < a > & < b > )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 272
diff changeset
74 stest12 = accept stest11 (toSB ( < a > & < b > )) ( a ∷ b ∷ [] )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 272
diff changeset
75 stest13 = accept stest11 (toSB ( < a > & < b > )) ( a ∷ a ∷ [] )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 272
diff changeset
76
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 272
diff changeset
77
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 272
diff changeset
78
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 272
diff changeset
79
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 272
diff changeset
80