Boolean rings #
A Boolean ring is a ring where multiplication is idempotent. They are equivalent to Boolean algebras.
Main declarations #
BooleanRing: a typeclass for rings where multiplication is idempotent.BooleanRing.toBooleanAlgebra: Turn a Boolean ring into a Boolean algebra.BooleanAlgebra.toBooleanRing: Turn a Boolean algebra into a Boolean ring.AsBoolAlg: Type-synonym for the Boolean algebra associated to a Boolean ring.AsBoolRing: Type-synonym for the Boolean ring associated to a Boolean algebra.
Implementation notes #
We provide two ways of turning a Boolean algebra/ring into a Boolean ring/algebra:
- Instances on the same type accessible in locales
BooleanAlgebraOfBooleanRingandBooleanRingOfBooleanAlgebra. - Type-synonyms
AsBoolAlgandAsBoolRing.
At this point in time, it is not clear the first way is useful, but we keep it for educational
purposes and because it is easier than dealing with
ofBoolAlg/toBoolAlg/ofBoolRing/toBoolRing explicitly.
Tags #
boolean ring, boolean algebra
A Boolean ring is a ring where multiplication is idempotent.
- add : α → α → α
- zero : α
- nsmul : ℕ → α → α
- nsmul_zero : ∀ (x : α), AddMonoid.nsmul 0 x = 0
- nsmul_succ : ∀ (n : ℕ) (x : α), AddMonoid.nsmul (n + 1) x = x + AddMonoid.nsmul n x
- mul : α → α → α
- one : α
- natCast : ℕ → α
- natCast_zero : NatCast.natCast 0 = 0
- natCast_succ : ∀ (n : ℕ), NatCast.natCast (n + 1) = NatCast.natCast n + 1
- npow : ℕ → α → α
- npow_zero : ∀ (x : α), Semiring.npow 0 x = 1
- npow_succ : ∀ (n : ℕ) (x : α), Semiring.npow (n + 1) x = x * Semiring.npow n x
- neg : α → α
- sub : α → α → α
- zsmul : ℤ → α → α
- zsmul_zero' : ∀ (a : α), Ring.zsmul 0 a = 0
- zsmul_succ' : ∀ (n : ℕ) (a : α), Ring.zsmul (Int.ofNat (Nat.succ n)) a = a + Ring.zsmul (Int.ofNat n) a
- zsmul_neg' : ∀ (n : ℕ) (a : α), Ring.zsmul (Int.negSucc n) a = -Ring.zsmul (↑(Nat.succ n)) a
- intCast : ℤ → α
- intCast_ofNat : ∀ (n : ℕ), IntCast.intCast ↑n = ↑n
- intCast_negSucc : ∀ (n : ℕ), IntCast.intCast (Int.negSucc n) = -↑(n + 1)
Multiplication in a boolean ring is idempotent.
Instances
Equations
- ⋯ = ⋯
Equations
- BooleanRing.toCommRing = let __src := inferInstance; CommRing.mk ⋯
Turning a Boolean ring into a Boolean algebra #
The join operation in a Boolean ring is x + y + x * y.
Instances For
The meet operation in a Boolean ring is x * y.
Instances For
The Boolean algebra structure on a Boolean ring.
The data is defined so that:
a ⊔ bunfolds toa + b + a * ba ⊓ bunfolds toa * ba ≤ bunfolds toa + b + a * b = b⊥unfolds to0⊤unfolds to1aᶜunfolds to1 + aa \ bunfolds toa * (1 + b)
Equations
- BooleanRing.toBooleanAlgebra = let __src := Lattice.mk' ⋯ ⋯ ⋯ ⋯ ⋯ ⋯; BooleanAlgebra.mk ⋯ ⋯ ⋯ ⋯ ⋯ ⋯
Instances For
Equations
- instBooleanAlgebraAsBoolAlg = BooleanRing.toBooleanAlgebra
Turn a ring homomorphism from Boolean rings α to β into a bounded lattice homomorphism
from α to β considered as Boolean algebras.
Equations
- RingHom.asBoolAlg f = { toLatticeHom := { toSupHom := { toFun := ⇑toBoolAlg ∘ ⇑f ∘ ⇑ofBoolAlg, map_sup' := ⋯ }, map_inf' := ⋯ }, map_top' := ⋯, map_bot' := ⋯ }
Instances For
Turning a Boolean algebra into a Boolean ring #
The "identity" equivalence between AsBoolRing α and α.
Equations
- toBoolRing = Equiv.refl α
Instances For
The "identity" equivalence between α and AsBoolRing α.
Equations
- ofBoolRing = Equiv.refl (AsBoolRing α)
Instances For
Equations
- instInhabitedAsBoolRing = inst
Every generalized Boolean algebra has the structure of a non unital commutative ring with the following data:
a + bunfolds toa ∆ b(symmetric difference)a * bunfolds toa ⊓ b-aunfolds toa0unfolds to⊥
Equations
- GeneralizedBooleanAlgebra.toNonUnitalCommRing = NonUnitalCommRing.mk ⋯
Instances For
Equations
- instNonUnitalCommRingAsBoolRing = GeneralizedBooleanAlgebra.toNonUnitalCommRing
Every Boolean algebra has the structure of a Boolean ring with the following data:
a + bunfolds toa ∆ b(symmetric difference)a * bunfolds toa ⊓ b-aunfolds toa0unfolds to⊥1unfolds to⊤
Equations
- BooleanAlgebra.toBooleanRing = let __src := GeneralizedBooleanAlgebra.toNonUnitalCommRing; BooleanRing.mk ⋯
Instances For
Equations
- instBooleanRingAsBoolRing = BooleanAlgebra.toBooleanRing
Turn a bounded lattice homomorphism from Boolean algebras α to β into a ring homomorphism
from α to β considered as Boolean rings.
Equations
- BoundedLatticeHom.asBoolRing f = { toMonoidHom := { toOneHom := { toFun := ⇑toBoolRing ∘ ⇑f ∘ ⇑ofBoolRing, map_one' := ⋯ }, map_mul' := ⋯ }, map_zero' := ⋯, map_add' := ⋯ }
Instances For
Equivalence between Boolean rings and Boolean algebras #
Order isomorphism between α considered as a Boolean ring considered as a Boolean algebra and
α.
Equations
- OrderIso.asBoolAlgAsBoolRing α = { toEquiv := ofBoolAlg.trans ofBoolRing, map_rel_iff' := ⋯ }
Instances For
Ring isomorphism between α considered as a Boolean algebra considered as a Boolean ring and
α.
Equations
- RingEquiv.asBoolRingAsBoolAlg α = let __src := ofBoolRing.trans ofBoolAlg; { toEquiv := __src, map_mul' := ⋯, map_add' := ⋯ }