annotate automaton-in-agda/src/non-regular.agda @ 285:6e85b8b0d8db

remove ls<n
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Tue, 28 Dec 2021 00:28:29 +0900
parents 681df12f0edc
children c7fbb0b61a8b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
141
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 module non-regular where
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 open import Data.Nat
274
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
4 open import Data.Empty
141
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 open import Data.List
278
e89957b99662 dup in finiteSet in long list
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 277
diff changeset
6 open import Data.Maybe hiding ( map )
141
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 open import Relation.Binary.PropositionalEquality hiding ( [_] )
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 open import logic
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 open import automaton
274
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
10 open import automaton-ex
278
e89957b99662 dup in finiteSet in long list
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 277
diff changeset
11 open import finiteSetUtil
141
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 open import finiteSet
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 open import Relation.Nullary
274
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
14 open import regular-language
141
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15
274
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
16 open FiniteSet
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
17
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
18 inputnn : List In2 → Maybe (List In2)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
19 inputnn [] = just []
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
20 inputnn (i1 ∷ t) = just (i1 ∷ t)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
21 inputnn (i0 ∷ t) with inputnn t
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
22 ... | nothing = nothing
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
23 ... | just [] = nothing
277
42563cc6afdf non-regular
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 274
diff changeset
24 ... | just (i0 ∷ t1) = nothing -- can't happen
42563cc6afdf non-regular
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 274
diff changeset
25 ... | just (i1 ∷ t1) = just t1 -- remove i1 from later part
274
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
26
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
27 inputnn1 : List In2 → Bool
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
28 inputnn1 s with inputnn s
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
29 ... | nothing = false
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
30 ... | just [] = true
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
31 ... | just _ = false
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
32
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
33 t1 = inputnn1 ( i0 ∷ i1 ∷ [] )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
34 t2 = inputnn1 ( i0 ∷ i0 ∷ i1 ∷ i1 ∷ [] )
277
42563cc6afdf non-regular
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 274
diff changeset
35 t3 = inputnn1 ( i0 ∷ i0 ∷ i0 ∷ i1 ∷ i1 ∷ [] )
274
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
36
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
37 inputnn0 : ( n : ℕ ) → { Σ : Set } → ( x y : Σ ) → List Σ → List Σ
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
38 inputnn0 zero {_} _ _ s = s
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
39 inputnn0 (suc n) x y s = x ∷ ( inputnn0 n x y ( y ∷ s ) )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
40
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
41 t4 : inputnn1 ( inputnn0 5 i0 i1 [] ) ≡ true
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
42 t4 = refl
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
43
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
44 --
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
45 -- if there is an automaton with n states , which accespt inputnn1, it has a trasition function.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
46 -- The function is determinted by inputs,
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
47 --
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
48
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
49 open RegularLanguage
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
50 open Automaton
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
51
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
52 open _∧_
141
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
53
277
42563cc6afdf non-regular
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 274
diff changeset
54 data Trace { Q : Set } { Σ : Set } (fa : Automaton Q Σ ) : (is : List Σ) → ( List Q) → Set where
42563cc6afdf non-regular
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 274
diff changeset
55 tend : {q : Q} → aend fa q ≡ true → Trace fa [] (q ∷ [])
42563cc6afdf non-regular
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 274
diff changeset
56 tnext : {q : Q} → {i : Σ} { is : List Σ} {qs : List Q}
42563cc6afdf non-regular
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 274
diff changeset
57 → Trace fa is (δ fa q i ∷ qs) → Trace fa (i ∷ is) ( q ∷ δ fa q i ∷ qs )
42563cc6afdf non-regular
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 274
diff changeset
58
42563cc6afdf non-regular
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 274
diff changeset
59 tr-accept→ : { Q : Set } { Σ : Set }
42563cc6afdf non-regular
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 274
diff changeset
60 → (fa : Automaton Q Σ )
42563cc6afdf non-regular
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 274
diff changeset
61 → (is : List Σ) → (q : Q) → (qs : List Q) → Trace fa is (q ∷ qs) → accept fa q is ≡ true
42563cc6afdf non-regular
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 274
diff changeset
62 tr-accept→ {Q} {Σ} fa [] q [] (tend x) = x
42563cc6afdf non-regular
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 274
diff changeset
63 tr-accept→ {Q} {Σ} fa (i ∷ is) q (x ∷ qs) (tnext tr) = tr-accept→ {Q} {Σ} fa is (δ fa q i) qs tr
42563cc6afdf non-regular
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 274
diff changeset
64
42563cc6afdf non-regular
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 274
diff changeset
65 tr-accept← : { Q : Set } { Σ : Set }
42563cc6afdf non-regular
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 274
diff changeset
66 → (fa : Automaton Q Σ )
42563cc6afdf non-regular
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 274
diff changeset
67 → (is : List Σ) → (q : Q) → accept fa q is ≡ true → Trace fa is (trace fa q is)
42563cc6afdf non-regular
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 274
diff changeset
68 tr-accept← {Q} {Σ} fa [] q ac = tend ac
42563cc6afdf non-regular
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 274
diff changeset
69 tr-accept← {Q} {Σ} fa (x ∷ []) q ac = tnext (tend ac )
42563cc6afdf non-regular
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 274
diff changeset
70 tr-accept← {Q} {Σ} fa (x ∷ x1 ∷ is) q ac = tnext (tr-accept← fa (x1 ∷ is) (δ fa q x) ac)
42563cc6afdf non-regular
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 274
diff changeset
71
279
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 278
diff changeset
72 open import Relation.Binary.HeterogeneousEquality as HE using (_≅_ )
277
42563cc6afdf non-regular
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 274
diff changeset
73
279
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 278
diff changeset
74 record TA { Q : Set } { Σ : Set } (fa : Automaton Q Σ ) {is : List Σ} { qs : List Q } (tr : Trace fa is qs) : Set where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 278
diff changeset
75 field
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 278
diff changeset
76 x y z : List Σ
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 278
diff changeset
77 qx qy qz : List Q
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 278
diff changeset
78 trace0 : Trace fa (x ++ y ++ z) (qx ++ qy ++ qz)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 278
diff changeset
79 trace1 : Trace fa (x ++ y ++ y ++ z) (qx ++ qy ++ qy ++ qz)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 278
diff changeset
80 trace-eq : trace0 ≅ tr
277
42563cc6afdf non-regular
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 274
diff changeset
81
42563cc6afdf non-regular
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 274
diff changeset
82 tr-append : { Q : Set } { Σ : Set } (fa : Automaton Q Σ ) (finq : FiniteSet Q) (q : Q) (is : List Σ) ( qs : List Q )
279
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 278
diff changeset
83 → dup-in-list finq q qs ≡ true
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 278
diff changeset
84 → (tr : Trace fa is qs ) → TA fa tr
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 278
diff changeset
85 tr-append {Q} {Σ} fa finq q is qs dup tr = tra-phase1 qs is tr dup where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 278
diff changeset
86 tra-phase3 : (qs : List Q) → (is : List Σ) → (tr : Trace fa is qs ) → {!!}
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 278
diff changeset
87 → (qy : List Q) → (iy : List Σ) → (ty : Trace fa iy qy ) → phase2 finq q qy ≡ true → {!!}
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 278
diff changeset
88 → Trace fa (iy ++ is) (qy ++ qs)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 278
diff changeset
89 tra-phase3 = {!!}
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 278
diff changeset
90 tra-phase2 : (qs : List Q) → (is : List Σ) → (tr : Trace fa is qs ) → phase2 finq q qs ≡ true
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 278
diff changeset
91 → (qy : List Q) → (iy : List Σ) → (ty : Trace fa iy qy ) → phase2 finq q qy ≡ true
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 278
diff changeset
92 → TA fa tr
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 278
diff changeset
93 tra-phase2 (q0 ∷ []) is (tend x₁) p qy iy ty py = {!!}
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 278
diff changeset
94 tra-phase2 (q0 ∷ (q₁ ∷ qs)) (x ∷ is) (tnext tr) p qy iy ty py with equal? finq q q0
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 278
diff changeset
95 ... | true = {!!}
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 278
diff changeset
96 ... | false = {!!} where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 278
diff changeset
97 tr1 : TA fa tr
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 278
diff changeset
98 tr1 = tra-phase2 (q₁ ∷ qs) is tr p qy iy ty py
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 278
diff changeset
99 tra-phase1 : (qs : List Q) → (is : List Σ) → (tr : Trace fa is qs ) → phase1 finq q qs ≡ true → TA fa tr
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 278
diff changeset
100 tra-phase1 (q0 ∷ []) is (tend x₁) p = {!!}
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 278
diff changeset
101 tra-phase1 (q0 ∷ (q₁ ∷ qs)) (x ∷ is) (tnext tr) p with equal? finq q q0
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 278
diff changeset
102 ... | true = {!!} where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 278
diff changeset
103 tr2 : TA fa tr
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 278
diff changeset
104 tr2 = tra-phase2 (q₁ ∷ qs) is tr p (q₁ ∷ qs) is tr p
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 278
diff changeset
105 ... | false = {!!} where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 278
diff changeset
106 tr1 : TA fa tr
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 278
diff changeset
107 tr1 = tra-phase1 (q₁ ∷ qs) is tr p
277
42563cc6afdf non-regular
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 274
diff changeset
108
280
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 279
diff changeset
109 open RegularLanguage
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 279
diff changeset
110
274
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 183
diff changeset
111 lemmaNN : (r : RegularLanguage In2 ) → ¬ ( (s : List In2) → isRegular inputnn1 s r )
280
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 279
diff changeset
112 lemmaNN r Rg = {!!} where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 279
diff changeset
113 n : ℕ
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 279
diff changeset
114 n = suc (finite (afin r))
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 279
diff changeset
115 nn = inputnn0 n i0 i1 []
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 279
diff changeset
116 nn01 : (i : ℕ) → inputnn1 ( inputnn0 i i0 i1 [] ) ≡ true
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 279
diff changeset
117 nn01 = {!!}
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 279
diff changeset
118 nn03 : accept (automaton r) (astart r) nn ≡ true
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 279
diff changeset
119 nn03 = {!!}
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 279
diff changeset
120 nntrace = trace (automaton r) (astart r) nn
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 279
diff changeset
121 nn04 : Trace (automaton r) nn nntrace
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 279
diff changeset
122 nn04 = tr-accept← (automaton r) nn (astart r) nn03
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 279
diff changeset
123 nn02 : TA (automaton r) nn04
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 279
diff changeset
124 nn02 = tr-append (automaton r) (afin r) (Dup-in-list.dup nn05) _ _ (Dup-in-list.is-dup nn05) nn04 where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 279
diff changeset
125 nn05 : Dup-in-list ( afin r) nntrace
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 279
diff changeset
126 nn05 = dup-in-list>n (afin r) nntrace {!!}
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 279
diff changeset
127