Boolean rings #
A Boolean ring is a ring where multiplication is idempotent. They are equivalent to Boolean algebras.
Main declarations #
boolean_ring
: a typeclass for rings where multiplication is idempotent.boolean_ring.to_boolean_algebra
: every Boolean ring is a Boolean algebra; this definition and thesup
andinf
notations forboolean_ring
are localized as instances in theboolean_algebra_of_boolean_ring
locale.
Tags #
boolean ring, boolean algebra
@[class]
A Boolean ring is a ring where multiplication is idempotent.
@[protected, instance]
@[protected, instance]
Equations
- boolean_ring.comm_ring = {add := ring.add boolean_ring.to_ring, add_assoc := _, zero := ring.zero boolean_ring.to_ring, zero_add := _, add_zero := _, nsmul := ring.nsmul boolean_ring.to_ring, nsmul_zero' := _, nsmul_succ' := _, neg := ring.neg boolean_ring.to_ring, sub := ring.sub boolean_ring.to_ring, sub_eq_add_neg := _, zsmul := ring.zsmul boolean_ring.to_ring, zsmul_zero' := _, zsmul_succ' := _, zsmul_neg' := _, add_left_neg := _, add_comm := _, mul := ring.mul boolean_ring.to_ring, mul_assoc := _, one := ring.one boolean_ring.to_ring, one_mul := _, mul_one := _, npow := ring.npow boolean_ring.to_ring, npow_zero' := _, npow_succ' := _, left_distrib := _, right_distrib := _, mul_comm := _}
@[instance]
The join operation in a Boolean ring is x + y + x*y
.
@[instance]
The meet operation in a Boolean ring is x * y
.
Equations
@[instance]
The "set difference" operation in a Boolean ring is x * (1 + y)
.
@[instance]
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
- boolean_ring.to_boolean_algebra = {sup := lattice.sup (lattice.mk' boolean_ring.sup_comm boolean_ring.sup_assoc boolean_ring.inf_comm boolean_ring.inf_assoc boolean_ring.sup_inf_self boolean_ring.inf_sup_self), le := lattice.le (lattice.mk' boolean_ring.sup_comm boolean_ring.sup_assoc boolean_ring.inf_comm boolean_ring.inf_assoc boolean_ring.sup_inf_self boolean_ring.inf_sup_self), lt := lattice.lt (lattice.mk' boolean_ring.sup_comm boolean_ring.sup_assoc boolean_ring.inf_comm boolean_ring.inf_assoc boolean_ring.sup_inf_self boolean_ring.inf_sup_self), le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, le_sup_left := _, le_sup_right := _, sup_le := _, inf := lattice.inf (lattice.mk' boolean_ring.sup_comm boolean_ring.sup_assoc boolean_ring.inf_comm boolean_ring.inf_assoc boolean_ring.sup_inf_self boolean_ring.inf_sup_self), inf_le_left := _, inf_le_right := _, le_inf := _, le_sup_inf := _, sdiff := sdiff boolean_ring.has_sdiff, bot := ⊥, sup_inf_sdiff := _, inf_inf_sdiff := _, compl := λ (a : α), 1 + a, top := 1, inf_compl_le_bot := _, top_le_sup_compl := _, le_top := _, bot_le := _, sdiff_eq := _}