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
BooleanAlgebraOfBooleanRing
andBooleanRingOfBooleanAlgebra
. - Type-synonyms
AsBoolAlg
andAsBoolRing
.
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 : α
- mul : α → α → α
- one : α
- natCast_zero : NatCast.natCast 0 = 0
- neg : α → α
- sub : α → α → α
Multiplication in a boolean ring is idempotent.
Instances
Equations
- BooleanRing.toCommRing = 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 ⊔ b
unfolds toa + b + a * b
a ⊓ b
unfolds toa * b
a ≤ b
unfolds toa + b + a * b = b
⊥
unfolds to0
⊤
unfolds to1
aᶜ
unfolds to1 + a
a \ b
unfolds toa * (1 + b)
Equations
- BooleanRing.toBooleanAlgebra = 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
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 + b
unfolds toa ∆ b
(symmetric difference)a * b
unfolds toa ⊓ b
-a
unfolds toa
0
unfolds to⊥
Equations
- GeneralizedBooleanAlgebra.toNonUnitalCommRing = NonUnitalCommRing.mk ⋯
Instances For
Equations
- instNonUnitalCommRingAsBoolRingOfGeneralizedBooleanAlgebra = GeneralizedBooleanAlgebra.toNonUnitalCommRing
Every Boolean algebra has the structure of a Boolean ring with the following data:
a + b
unfolds toa ∆ b
(symmetric difference)a * b
unfolds toa ⊓ b
-a
unfolds toa
0
unfolds to⊥
1
unfolds to⊤
Equations
- BooleanAlgebra.toBooleanRing = 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
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 α = { toEquiv := ofBoolRing.trans ofBoolAlg, map_mul' := ⋯, map_add' := ⋯ }