annotate agda/omega-automaton.agda @ 76:7b357b295272

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Fri, 08 Nov 2019 13:40:25 +0900
parents 9406c2571fe7
children 3be1afb87f82
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
21
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 module omega-automaton where
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 open import Level renaming ( suc to succ ; zero to Zero )
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 open import Data.Nat
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 open import Data.List
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 open import Data.Maybe
22
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
7 open import Data.Bool using ( Bool ; true ; false ; _∧_ ) renaming ( not to negate )
21
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 open import Relation.Binary.PropositionalEquality hiding ( [_] )
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 open import Relation.Nullary using (¬_; Dec; yes; no)
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 open import Data.Empty
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 open import automaton
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 open Automaton
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15
22
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
16 ω-run : { Q Σ : Set } → (Ω : Automaton Q Σ ) → ℕ → ( ℕ → Σ ) → Q
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
17 ω-run Ω zero s = astart Ω
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
18 ω-run Ω (suc n) s = δ Ω (ω-run Ω n s) ( s n )
21
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
19
22
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
20 record Buchi { Q Σ : Set } (Ω : Automaton Q Σ ) ( S : ℕ → Σ ) : Set where
21
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 field
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 from : ℕ
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 stay : (n : ℕ ) → n > from → aend Ω ( ω-run Ω n S ) ≡ true
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 open Buchi
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
26
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
27
22
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
28 record Muller { Q Σ : Set } (Ω : Automaton Q Σ ) ( S : ℕ → Σ ) : Set where
21
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 field
22
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
30 next : (n : ℕ ) → ℕ
23
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
31 infinite : (n : ℕ ) → aend Ω ( ω-run Ω (n + (next n)) S ) ≡ true
21
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
32
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 -- ¬ p
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 -- ------------>
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 -- [] <> p * [] <> p
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 -- <-----------
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 -- p
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
38
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 data States3 : Set where
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 ts* : States3
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 ts : States3
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
42
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 transition3 : States3 → Bool → States3
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 transition3 ts* true = ts*
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
45 transition3 ts* false = ts
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
46 transition3 ts true = ts*
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 transition3 ts false = ts
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
48
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 mark1 : States3 → Bool
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
50 mark1 ts* = true
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
51 mark1 ts = false
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
52
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
53 ωa1 : Automaton States3 Bool
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
54 ωa1 = record {
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
55 δ = transition3
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
56 ; astart = ts*
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
57 ; aend = mark1
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
58 }
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
59
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
60 true-seq : ℕ → Bool
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
61 true-seq _ = true
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
62
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
63 false-seq : ℕ → Bool
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
64 false-seq _ = false
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
65
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
66 flip-seq : ℕ → Bool
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
67 flip-seq zero = false
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
68 flip-seq (suc n) = negate ( flip-seq n )
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
69
22
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
70 lemma1 : Buchi ωa1 true-seq
21
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
71 lemma1 = record {
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
72 from = zero
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
73 ; stay = lem1
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
74 } where
22
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
75 lem1 : ( n : ℕ ) → n > zero → aend ωa1 (ω-run ωa1 n true-seq ) ≡ true
21
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
76 lem1 zero ()
22
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
77 lem1 (suc n) (s≤s z≤n) with ω-run ωa1 n true-seq
21
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
78 lem1 (suc n) (s≤s z≤n) | ts* = refl
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
79 lem1 (suc n) (s≤s z≤n) | ts = refl
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
80
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
81 ωa2 : Automaton States3 Bool
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
82 ωa2 = record {
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
83 δ = transition3
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
84 ; astart = ts*
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
85 ; aend = λ x → negate ( mark1 x )
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
86 }
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
87
22
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
88 flip-dec : (n : ℕ ) → Dec ( flip-seq n ≡ true )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
89 flip-dec n with flip-seq n
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
90 flip-dec n | false = no λ ()
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
91 flip-dec n | true = yes refl
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
92
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
93 flip-dec1 : (n : ℕ ) → flip-seq (suc n) ≡ negate ( flip-seq n )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
94 flip-dec1 n = let open ≡-Reasoning in
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
95 flip-seq (suc n )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
96 ≡⟨⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
97 negate ( flip-seq n )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
98
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
99
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
100 flip-dec2 : (n : ℕ ) → ¬ flip-seq (suc n) ≡ flip-seq n
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
101 flip-dec2 n neq with flip-seq n
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
102 flip-dec2 n () | false
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
103 flip-dec2 n () | true
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
104
23
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
105
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
106 record flipProperty : Set where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
107 field
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
108 flipP : (n : ℕ) → ω-run ωa2 (suc (suc n)) flip-seq ≡ ω-run ωa2 n flip-seq
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
109
22
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
110 lemma2 : Muller ωa2 flip-seq
21
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
111 lemma2 = record {
22
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
112 next = next
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
113 ; infinite = infinite
21
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
114 } where
22
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
115 next : ℕ → ℕ
23
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
116 next n with ω-run ωa2 n flip-seq | flip-seq n
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
117 next n | ts | true = 2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
118 next n | ts | false = 1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
119 next n | ts* | true = 2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
120 next n | ts* | false = 1
24
9406c2571fe7 naccept1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
121 infinite' : (n m : ℕ) → n ≥″ m → aend ωa2 (ω-run ωa2 (m + (next m)) flip-seq) ≡ true → aend ωa2 (ω-run ωa2 (n + (next n)) flip-seq) ≡ true
9406c2571fe7 naccept1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
122 infinite' = {!!}
23
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
123 infinite : (n : ℕ) → aend ωa2 (ω-run ωa2 (n + (next n)) flip-seq) ≡ true
24
9406c2571fe7 naccept1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
124 infinite = {!!}
21
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
125
22
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
126 lemma3 : Buchi ωa1 false-seq → ⊥
21
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
127 lemma3 = {!!}
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
128
22
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
129 lemma4 : Muller ωa1 flip-seq → ⊥
21
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
130 lemma4 = {!!}
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
131
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
132
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
133
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
134
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
135
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
136
ddf5f2f5fde8 add omega
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
137