comparison automaton-in-agda/src/logic.agda @ 403:c298981108c1

fix for std-lib 2.0
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sun, 24 Sep 2023 11:32:01 +0900
parents 1466e18c8180
children a60132983557
comparison
equal deleted inserted replaced
402:093e386c10a2 403:c298981108c1
1 {-# OPTIONS --cubical-compatible --safe #-}
2
1 module logic where 3 module logic where
2 4
3 open import Level 5 open import Level
4 open import Relation.Nullary 6 open import Relation.Nullary
5 open import Relation.Binary hiding (_⇔_ ) 7 open import Relation.Binary hiding (_⇔_ )
7 9
8 10
9 data Bool : Set where 11 data Bool : Set where
10 true : Bool 12 true : Bool
11 false : Bool 13 false : Bool
12
13 data Two : Set where
14 i0 : Two
15 i1 : Two
16 14
17 record _∧_ {n m : Level} (A : Set n) ( B : Set m ) : Set (n ⊔ m) where 15 record _∧_ {n m : Level} (A : Set n) ( B : Set m ) : Set (n ⊔ m) where
18 constructor ⟪_,_⟫ 16 constructor ⟪_,_⟫
19 field 17 field
20 proj1 : A 18 proj1 : A
25 case2 : B → A ∨ B 23 case2 : B → A ∨ B
26 24
27 _⇔_ : {n m : Level } → ( A : Set n ) ( B : Set m ) → Set (n ⊔ m) 25 _⇔_ : {n m : Level } → ( A : Set n ) ( B : Set m ) → Set (n ⊔ m)
28 _⇔_ A B = ( A → B ) ∧ ( B → A ) 26 _⇔_ A B = ( A → B ) ∧ ( B → A )
29 27
30 ∧-exch : {n m : Level} {A : Set n} { B : Set m } → A ∧ B → B ∧ A
31 ∧-exch p = ⟪ _∧_.proj2 p , _∧_.proj1 p ⟫
32
33 ∨-exch : {n m : Level} {A : Set n} { B : Set m } → A ∨ B → B ∨ A
34 ∨-exch (case1 x) = case2 x
35 ∨-exch (case2 x) = case1 x
36
37 contra-position : {n m : Level } {A : Set n} {B : Set m} → (A → B) → ¬ B → ¬ A 28 contra-position : {n m : Level } {A : Set n} {B : Set m} → (A → B) → ¬ B → ¬ A
38 contra-position {n} {m} {A} {B} f ¬b a = ¬b ( f a ) 29 contra-position {n} {m} {A} {B} f ¬b a = ¬b ( f a )
39 30
40 double-neg : {n : Level } {A : Set n} → A → ¬ ¬ A 31 double-neg : {n : Level } {A : Set n} → A → ¬ ¬ A
41 double-neg A notnot = notnot A 32 double-neg A notnot = notnot A
44 double-neg2 notnot A = notnot ( double-neg A ) 35 double-neg2 notnot A = notnot ( double-neg A )
45 36
46 de-morgan : {n : Level } {A B : Set n} → A ∧ B → ¬ ( (¬ A ) ∨ (¬ B ) ) 37 de-morgan : {n : Level } {A B : Set n} → A ∧ B → ¬ ( (¬ A ) ∨ (¬ B ) )
47 de-morgan {n} {A} {B} and (case1 ¬A) = ⊥-elim ( ¬A ( _∧_.proj1 and )) 38 de-morgan {n} {A} {B} and (case1 ¬A) = ⊥-elim ( ¬A ( _∧_.proj1 and ))
48 de-morgan {n} {A} {B} and (case2 ¬B) = ⊥-elim ( ¬B ( _∧_.proj2 and )) 39 de-morgan {n} {A} {B} and (case2 ¬B) = ⊥-elim ( ¬B ( _∧_.proj2 and ))
49
50 de-morgan∨ : {n : Level } {A B : Set n} → A ∨ B → ¬ ( (¬ A ) ∧ (¬ B ) )
51 de-morgan∨ {n} {A} {B} (case1 a) and = ⊥-elim ( _∧_.proj1 and a )
52 de-morgan∨ {n} {A} {B} (case2 b) and = ⊥-elim ( _∧_.proj2 and b )
53 40
54 dont-or : {n m : Level} {A : Set n} { B : Set m } → A ∨ B → ¬ A → B 41 dont-or : {n m : Level} {A : Set n} { B : Set m } → A ∨ B → ¬ A → B
55 dont-or {A} {B} (case1 a) ¬A = ⊥-elim ( ¬A a ) 42 dont-or {A} {B} (case1 a) ¬A = ⊥-elim ( ¬A a )
56 dont-or {A} {B} (case2 b) ¬A = b 43 dont-or {A} {B} (case2 b) ¬A = b
57 44
69 56
70 _\/_ : Bool → Bool → Bool 57 _\/_ : Bool → Bool → Bool
71 false \/ false = false 58 false \/ false = false
72 _ \/ _ = true 59 _ \/ _ = true
73 60
74 not : Bool → Bool 61 not_ : Bool → Bool
75 not true = false 62 not true = false
76 not false = true 63 not false = true
77 64
78 _<=>_ : Bool → Bool → Bool 65 _<=>_ : Bool → Bool → Bool
79 true <=> true = true 66 true <=> true = true
80 false <=> false = true 67 false <=> false = true
81 _ <=> _ = false 68 _ <=> _ = false
82 69
70 infixr 130 _\/_
71 infixr 140 _/\_
72
83 open import Relation.Binary.PropositionalEquality 73 open import Relation.Binary.PropositionalEquality
84
85 not-not-bool : { b : Bool } → not (not b) ≡ b
86 not-not-bool {true} = refl
87 not-not-bool {false} = refl
88 74
89 record Bijection {n m : Level} (R : Set n) (S : Set m) : Set (n Level.⊔ m) where 75 record Bijection {n m : Level} (R : Set n) (S : Set m) : Set (n Level.⊔ m) where
90 field 76 field
91 fun← : S → R 77 fun← : S → R
92 fun→ : R → S 78 fun→ : R → S
95 81
96 injection : {n m : Level} (R : Set n) (S : Set m) (f : R → S ) → Set (n Level.⊔ m) 82 injection : {n m : Level} (R : Set n) (S : Set m) (f : R → S ) → Set (n Level.⊔ m)
97 injection R S f = (x y : R) → f x ≡ f y → x ≡ y 83 injection R S f = (x y : R) → f x ≡ f y → x ≡ y
98 84
99 85
86 not-not-bool : { b : Bool } → not (not b) ≡ b
87 not-not-bool {true} = refl
88 not-not-bool {false} = refl
89
100 ¬t=f : (t : Bool ) → ¬ ( not t ≡ t) 90 ¬t=f : (t : Bool ) → ¬ ( not t ≡ t)
101 ¬t=f true () 91 ¬t=f true ()
102 ¬t=f false () 92 ¬t=f false ()
103
104 infixr 130 _\/_
105 infixr 140 _/\_
106 93
107 ≡-Bool-func : {A B : Bool } → ( A ≡ true → B ≡ true ) → ( B ≡ true → A ≡ true ) → A ≡ B 94 ≡-Bool-func : {A B : Bool } → ( A ≡ true → B ≡ true ) → ( B ≡ true → A ≡ true ) → A ≡ B
108 ≡-Bool-func {true} {true} a→b b→a = refl 95 ≡-Bool-func {true} {true} a→b b→a = refl
109 ≡-Bool-func {false} {true} a→b b→a with b→a refl 96 ≡-Bool-func {false} {true} a→b b→a with b→a refl
110 ... | () 97 ... | ()
128 115
129 ¬-bool : {a : Bool} → a ≡ false → a ≡ true → ⊥ 116 ¬-bool : {a : Bool} → a ≡ false → a ≡ true → ⊥
130 ¬-bool refl () 117 ¬-bool refl ()
131 118
132 lemma-∧-0 : {a b : Bool} → a /\ b ≡ true → a ≡ false → ⊥ 119 lemma-∧-0 : {a b : Bool} → a /\ b ≡ true → a ≡ false → ⊥
133 lemma-∧-0 {true} {true} refl ()
134 lemma-∧-0 {true} {false} () 120 lemma-∧-0 {true} {false} ()
135 lemma-∧-0 {false} {true} () 121 lemma-∧-0 {false} {true} ()
136 lemma-∧-0 {false} {false} () 122 lemma-∧-0 {false} {false} ()
123 lemma-∧-0 {true} {true} eq1 ()
137 124
138 lemma-∧-1 : {a b : Bool} → a /\ b ≡ true → b ≡ false → ⊥ 125 lemma-∧-1 : {a b : Bool} → a /\ b ≡ true → b ≡ false → ⊥
139 lemma-∧-1 {true} {true} refl ()
140 lemma-∧-1 {true} {false} () 126 lemma-∧-1 {true} {false} ()
141 lemma-∧-1 {false} {true} () 127 lemma-∧-1 {false} {true} ()
142 lemma-∧-1 {false} {false} () 128 lemma-∧-1 {false} {false} ()
129 lemma-∧-1 {true} {true} eq1 ()
143 130
144 bool-and-tt : {a b : Bool} → a ≡ true → b ≡ true → ( a /\ b ) ≡ true 131 bool-and-tt : {a b : Bool} → a ≡ true → b ≡ true → ( a /\ b ) ≡ true
145 bool-and-tt refl refl = refl 132 bool-and-tt refl refl = refl
146 133
147 bool-∧→tt-0 : {a b : Bool} → ( a /\ b ) ≡ true → a ≡ true 134 bool-∧→tt-0 : {a b : Bool} → ( a /\ b ) ≡ true → a ≡ true
148 bool-∧→tt-0 {true} {true} refl = refl 135 bool-∧→tt-0 {true} {true} eq = refl
149 bool-∧→tt-0 {false} {_} () 136 bool-∧→tt-0 {false} {_} ()
150 137
151 bool-∧→tt-1 : {a b : Bool} → ( a /\ b ) ≡ true → b ≡ true 138 bool-∧→tt-1 : {a b : Bool} → ( a /\ b ) ≡ true → b ≡ true
152 bool-∧→tt-1 {true} {true} refl = refl 139 bool-∧→tt-1 {true} {true} eq = refl
153 bool-∧→tt-1 {true} {false} () 140 bool-∧→tt-1 {true} {false} ()
154 bool-∧→tt-1 {false} {false} () 141 bool-∧→tt-1 {false} {false} ()
155 142
156 bool-or-1 : {a b : Bool} → a ≡ false → ( a \/ b ) ≡ b 143 bool-or-1 : {a b : Bool} → a ≡ false → ( a \/ b ) ≡ b
157 bool-or-1 {false} {true} refl = refl 144 bool-or-1 {false} {true} eq = refl
158 bool-or-1 {false} {false} refl = refl 145 bool-or-1 {false} {false} eq = refl
159 bool-or-2 : {a b : Bool} → b ≡ false → (a \/ b ) ≡ a 146 bool-or-2 : {a b : Bool} → b ≡ false → (a \/ b ) ≡ a
160 bool-or-2 {true} {false} refl = refl 147 bool-or-2 {true} {false} eq = refl
161 bool-or-2 {false} {false} refl = refl 148 bool-or-2 {false} {false} eq = refl
162 149
163 bool-or-3 : {a : Bool} → ( a \/ true ) ≡ true 150 bool-or-3 : {a : Bool} → ( a \/ true ) ≡ true
164 bool-or-3 {true} = refl 151 bool-or-3 {true} = refl
165 bool-or-3 {false} = refl 152 bool-or-3 {false} = refl
166 153
167 bool-or-31 : {a b : Bool} → b ≡ true → ( a \/ b ) ≡ true 154 bool-or-31 : {a b : Bool} → b ≡ true → ( a \/ b ) ≡ true
168 bool-or-31 {true} {true} refl = refl 155 bool-or-31 {true} {true} eq = refl
169 bool-or-31 {false} {true} refl = refl 156 bool-or-31 {false} {true} eq = refl
170 157
171 bool-or-4 : {a : Bool} → ( true \/ a ) ≡ true 158 bool-or-4 : {a : Bool} → ( true \/ a ) ≡ true
172 bool-or-4 {true} = refl 159 bool-or-4 {true} = refl
173 bool-or-4 {false} = refl 160 bool-or-4 {false} = refl
174 161
175 bool-or-41 : {a b : Bool} → a ≡ true → ( a \/ b ) ≡ true 162 bool-or-41 : {a b : Bool} → a ≡ true → ( a \/ b ) ≡ true
176 bool-or-41 {true} {b} refl = refl 163 bool-or-41 {true} {b} eq = refl
177 164
178 bool-and-1 : {a b : Bool} → a ≡ false → (a /\ b ) ≡ false 165 bool-and-1 : {a b : Bool} → a ≡ false → (a /\ b ) ≡ false
179 bool-and-1 {false} {b} refl = refl 166 bool-and-1 {false} {b} eq = refl
180 bool-and-2 : {a b : Bool} → b ≡ false → (a /\ b ) ≡ false 167 bool-and-2 : {a b : Bool} → b ≡ false → (a /\ b ) ≡ false
181 bool-and-2 {true} {false} refl = refl 168 bool-and-2 {true} {false} eq = refl
182 bool-and-2 {false} {false} refl = refl 169 bool-and-2 {false} {false} eq = refl
170 bool-and-2 {true} {true} ()
171 bool-and-2 {false} {true} ()
183 172
184 173
185 open import Data.Nat
186 open import Data.Nat.Properties
187
188 _≥b_ : ( x y : ℕ) → Bool
189 x ≥b y with <-cmp x y
190 ... | tri< a ¬b ¬c = false
191 ... | tri≈ ¬a b ¬c = true
192 ... | tri> ¬a ¬b c = true
193
194 _>b_ : ( x y : ℕ) → Bool
195 x >b y with <-cmp x y
196 ... | tri< a ¬b ¬c = false
197 ... | tri≈ ¬a b ¬c = false
198 ... | tri> ¬a ¬b c = true
199
200 _≤b_ : ( x y : ℕ) → Bool
201 x ≤b y = y ≥b x
202
203 _<b_ : ( x y : ℕ) → Bool
204 x <b y = y >b x
205
206 open import Relation.Binary.PropositionalEquality
207
208 ¬i0≡i1 : ¬ ( i0 ≡ i1 )
209 ¬i0≡i1 ()
210
211 ¬i0→i1 : {x : Two} → ¬ (x ≡ i0 ) → x ≡ i1
212 ¬i0→i1 {i0} ne = ⊥-elim ( ne refl )
213 ¬i0→i1 {i1} ne = refl
214
215 ¬i1→i0 : {x : Two} → ¬ (x ≡ i1 ) → x ≡ i0
216 ¬i1→i0 {i0} ne = refl
217 ¬i1→i0 {i1} ne = ⊥-elim ( ne refl )
218