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
Turning a Boolean ring into a Boolean algebra #
Equations
- instInhabitedAsBoolAlg = inst✝
The join operation in a Boolean ring is x + y + x * y
.
Equations
- BooleanRing.sup = { max := fun (x y : α) => x + y + x * y }
Instances For
The meet operation in a Boolean ring is x * y
.
Equations
- BooleanRing.inf = { min := fun (x1 x2 : α) => x1 * x2 }
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
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 #
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⊥
Instances For
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
Instances For
Turn a bounded lattice homomorphism from Boolean algebras α
to β
into a ring homomorphism
from α
to β
considered as Boolean rings.
Equations
- f.asBoolRing = { 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 α = { toEquiv := ofBoolRing.trans ofBoolAlg, map_mul' := ⋯, map_add' := ⋯ }