@@ -8,7 +8,7 @@ open import Cubical.Algebra.Ring
88open import Cubical.Algebra.AbGroup.Base
99open import Cubical.Algebra.CommRing
1010open import Cubical.Tactics.CommRingSolver
11-
11+ open RingTheory
1212
1313private
1414 variable
@@ -48,6 +48,12 @@ BooleanStr→CommRingStr x = record { isCommRing = IsBooleanRing.isCommRing (Boo
4848BooleanRing→CommRing : BooleanRing ℓ → CommRing ℓ
4949BooleanRing→CommRing (carrier , structure ) = carrier , BooleanStr→CommRingStr structure
5050
51+ BooleanStr→RingStr : { A : Type ℓ } → BooleanStr A → RingStr A
52+ BooleanStr→RingStr S = CommRingStr→RingStr (BooleanStr→CommRingStr S)
53+
54+ BooleanRing→Ring : BooleanRing ℓ → Ring ℓ
55+ BooleanRing→Ring (carrier , structure ) = carrier , BooleanStr→RingStr structure
56+
5157module BooleanAlgebraStr (A : BooleanRing ℓ) where
5258 open BooleanStr (A . snd)
5359 _∨_ : ⟨ A ⟩ → ⟨ A ⟩ → ⟨ A ⟩
@@ -96,8 +102,8 @@ module BooleanAlgebraStr (A : BooleanRing ℓ) where
96102 ∧AnnihilL : 𝟘 ∧ x ≡ 𝟘
97103 ∧AnnihilL = RingTheory.0LeftAnnihilates (CommRing→Ring (BooleanRing→CommRing A)) _
98104
99- -IsId : x + x ≡ 𝟘
100- -IsId {x = x} = RingTheory.+Idempotency→0 (CommRing→Ring (BooleanRing→CommRing A)) (x + x) 2x≡4x
105+ characteristic2 : x + x ≡ 𝟘
106+ characteristic2 {x = x} = RingTheory.+Idempotency→0 (CommRing→Ring (BooleanRing→CommRing A)) (x + x) 2x≡4x
101107 where
102108 2x≡4x : x + x ≡ (x + x) + (x + x)
103109 2x≡4x =
@@ -109,10 +115,13 @@ module BooleanAlgebraStr (A : BooleanRing ℓ) where
109115 ≡⟨ cong₂ _+_ (cong₂ _+_ (·Idem x) (·Idem x)) (cong₂ _+_ (·Idem x) (·Idem x)) ⟩
110116 (x + x) + (x + x) ∎
111117
118+ -IsId : x ≡ - x
119+ -IsId {x = x} = implicitInverse (BooleanRing→Ring A) x x characteristic2
120+
112121 ∨Idem : x ∨ x ≡ x
113122 ∨Idem { x = x } =
114123 x + x + x · x
115- ≡⟨ cong (λ y → y + x · x) -IsId ⟩
124+ ≡⟨ cong (λ y → y + x · x) characteristic2 ⟩
116125 𝟘 + x · x
117126 ≡⟨ +IdL (x · x) ⟩
118127 x · x
@@ -124,7 +133,7 @@ module BooleanAlgebraStr (A : BooleanRing ℓ) where
124133 (x + 𝟙) + (x · 𝟙)
125134 ≡⟨ solve! (BooleanRing→CommRing A) ⟩
126135 𝟙 + (x + x)
127- ≡⟨ cong (λ y → 𝟙 + y) -IsId ⟩
136+ ≡⟨ cong (λ y → 𝟙 + y) characteristic2 ⟩
128137 𝟙 + 𝟘
129138 ≡⟨ +IdR 𝟙 ⟩
130139 𝟙 ∎
@@ -152,7 +161,7 @@ module BooleanAlgebraStr (A : BooleanRing ℓ) where
152161 x + 𝟘 + 𝟘 + y · z + 𝟘 + x · y · z
153162 ≡⟨ cong (λ a → a + 𝟘 + 𝟘 + y · z + 𝟘 + a · y · z) (sym (·Idem x)) ⟩
154163 x · x + 𝟘 + 𝟘 + y · z + 𝟘 + x · x · y · z
155- ≡⟨ cong (λ a → x · x + 𝟘 + 𝟘 + y · z + a + x · x · y · z) (sym (-IsId {x = (x · y) · z})) ⟩
164+ ≡⟨ cong (λ a → x · x + 𝟘 + 𝟘 + y · z + a + x · x · y · z) (sym (characteristic2 {x = (x · y) · z})) ⟩
156165 x · x + 𝟘 + 𝟘 + y · z + (x · y · z + x · y · z) + x · x · y · z
157166 ≡⟨ (cong₂ (λ a b → x · x + a + b + y · z + (x · y · z + x · y · z) + x · x · y · z)) (xa-xxa≡0 z) (xa-xxa≡0 y) ⟩
158167 x · x + (x · z + x · x · z) + (x · y + x · x · y) + y · z + (x · y · z + x · y · z) + x · x · y · z
@@ -163,7 +172,7 @@ module BooleanAlgebraStr (A : BooleanRing ℓ) where
163172 xa-xxa≡0 : (a : ⟨ A ⟩) → 𝟘 ≡ x · a + x · x · a
164173 xa-xxa≡0 a =
165174 𝟘
166- ≡⟨ sym -IsId ⟩
175+ ≡⟨ sym characteristic2 ⟩
167176 x · a + x · a
168177 ≡⟨ cong (λ y → x · a + y · a) (sym (·Idem x)) ⟩
169178 x · a + x · x · a ∎
@@ -178,7 +187,7 @@ module BooleanAlgebraStr (A : BooleanRing ℓ) where
178187 x · x + (x · y + x · x · y)
179188 ≡⟨ cong (λ z → z + ((x · y) + (z · y))) (·Idem x) ⟩
180189 x + (x · y + x · y)
181- ≡⟨ cong (_+_ x) -IsId ⟩
190+ ≡⟨ cong (_+_ x) characteristic2 ⟩
182191 x + 𝟘
183192 ≡⟨ +IdR x ⟩
184193 x ∎
@@ -190,7 +199,7 @@ module BooleanAlgebraStr (A : BooleanRing ℓ) where
190199 x + (x · y + x · x · y)
191200 ≡⟨ cong (λ z → x + (x · y + z · y)) (·Idem x) ⟩
192201 x + (x · y + x · y)
193- ≡⟨ cong (_+_ x) -IsId ⟩
202+ ≡⟨ cong (_+_ x) characteristic2 ⟩
194203 x + 𝟘
195204 ≡⟨ +IdR x ⟩
196205 x ∎
@@ -202,7 +211,7 @@ module BooleanAlgebraStr (A : BooleanRing ℓ) where
202211 x + x · x
203212 ≡⟨ cong (λ y → x + y) (·Idem x) ⟩
204213 x + x
205- ≡⟨ -IsId ⟩
214+ ≡⟨ characteristic2 ⟩
206215 𝟘 ∎
207216
208217 ¬Cancels∧L : ¬ x ∧ x ≡ 𝟘
@@ -226,7 +235,7 @@ module BooleanAlgebraStr (A : BooleanRing ℓ) where
226235 𝟙 + (𝟙 + x)
227236 ≡⟨ +Assoc 𝟙 𝟙 x ⟩
228237 (𝟙 + 𝟙) + x
229- ≡⟨ cong (λ y → y + x) ( -IsId {x = 𝟙}) ⟩
238+ ≡⟨ cong (λ y → y + x) ( characteristic2 {x = 𝟙}) ⟩
230239 𝟘 + x
231240 ≡⟨ +IdL x ⟩
232241 x ∎
@@ -235,7 +244,7 @@ module BooleanAlgebraStr (A : BooleanRing ℓ) where
235244 ¬0≡1 = +IdR 𝟙
236245
237246 ¬1≡0 : ¬ 𝟙 ≡ 𝟘
238- ¬1≡0 = -IsId {x = 𝟙}
247+ ¬1≡0 = characteristic2 {x = 𝟙}
239248
240249 DeMorgan¬∨ : ¬ (x ∨ y) ≡ ¬ x ∧ ¬ y
241250 DeMorgan¬∨ = solve! (BooleanRing→CommRing A)
@@ -245,7 +254,7 @@ module BooleanAlgebraStr (A : BooleanRing ℓ) where
245254 𝟙 + x · y
246255 ≡⟨ solve! (BooleanRing→CommRing A) ⟩
247256 𝟘 + 𝟘 + 𝟙 + x · y
248- ≡⟨ cong₂ (λ a b → ((a + b) + 𝟙) + (x · y)) (sym (-IsId {x = 𝟙 + x})) (sym (-IsId {x = y})) ⟩
257+ ≡⟨ cong₂ (λ a b → ((a + b) + 𝟙) + (x · y)) (sym (characteristic2 {x = 𝟙 + x})) (sym (characteristic2 {x = y})) ⟩
249258 ((𝟙 + x) + (𝟙 + x)) + (y + y) + 𝟙 + x · y
250259 ≡⟨ solve! (BooleanRing→CommRing A) ⟩
251260 ¬ x ∨ ¬ y ∎
0 commit comments