{-# OPTIONS --safe #-}
module Cubical.Algebra.BooleanRing.Initial where
open import Cubical.Foundations.Prelude
open import Cubical.Foundations.Structure
open import Cubical.Foundations.Function
open import Cubical.Algebra.BooleanRing.Base
open import Cubical.Data.Bool renaming (elim to bool-ind)
open import Cubical.Algebra.CommRing
open import Cubical.Tactics.CommRingSolver
open import Cubical.Algebra.BooleanRing.Instances.Bool
open import Cubical.Algebra.CommRing.Instances.Bool
module _ {ℓ : Level} (B : BooleanRing ℓ) where
private
B' = BooleanRing→CommRing B
open CommRingStr (snd B')
open BooleanAlgebraStr B
open IsCommRingHom
BoolBR→BAMap : Bool → ⟨ B ⟩
BoolBR→BAMap = bool-ind 1r 0r
BoolBR→BAIsCommRingHom : IsCommRingHom (snd BoolCR) BoolBR→BAMap (snd B')
pres0 BoolBR→BAIsCommRingHom = refl
pres1 BoolBR→BAIsCommRingHom = refl
pres+ BoolBR→BAIsCommRingHom =
λ { false false → solve! B'
; false true → solve! B'
; true false → solve! B'
; true true → sym characteristic2
}
pres· BoolBR→BAIsCommRingHom =
λ { false false → solve! B'
; false true → solve! B'
; true false → solve! B'
; true true → solve! B'
}
pres- BoolBR→BAIsCommRingHom false = solve! B'
pres- BoolBR→BAIsCommRingHom true = -IsId :> 1r ≡ - 1r
BoolBR→ : BoolHom BoolBR B
BoolBR→ = BoolBR→BAMap , BoolBR→BAIsCommRingHom
BoolBR→IsUnique : (f : BoolHom BoolBR B) → (fst f) ≡ fst (BoolBR→)
BoolBR→IsUnique f = funExt (bool-ind (pres1 (snd f)) (pres0 (snd f)))