Adding complements to a generalized Boolean algebra #
This file embeds any generalized Boolean algebra into a Boolean algebra.
This concretely proves that any equation holding true in the theory of Boolean algebras that does
not reference ᶜ
also holds true in the theory of generalized Boolean algebras. Put another way,
one does not need the existence of complements to prove something which does not talk about
complements.
Main declarations #
Booleanisation
: Boolean algebra containing a given generalised Boolean algebra as a sublattice.Booleanisation.liftLatticeHom
: Boolean algebra containing a given generalised Boolean algebra as a sublattice.
Future work #
If mathlib ever acquires GenBoolAlg
, the category of generalised Boolean algebras, then one could
show that Booleanisation
is the free functor from GenBoolAlg
to BoolAlg
.
Boolean algebra containing a given generalised Boolean algebra α
as a sublattice.
This should be thought of as made of a copy of α
(representing elements of α
) living under
another copy of α
(representing complements of elements of α
).
Equations
- Booleanisation α = (α ⊕ α)
Instances For
Equations
- Booleanisation.instDecidableEq = inferInstanceAs (DecidableEq (α ⊕ α))
The natural inclusion a ↦ a
from a generalized Boolean algebra to its generated Boolean
algebra.
Equations
- Booleanisation.lift = Sum.inl
Instances For
The inclusion `a ↦ aᶜ from a generalized Boolean algebra to its generated Boolean algebra.
Equations
- Booleanisation.comp = Sum.inr
Instances For
The complement operator on Booleanisation α
sends a
to aᶜ
and aᶜ
to a
, for a : α
.
Equations
- Booleanisation.instCompl = { compl := fun (x : Booleanisation α) => match x with | Sum.inl a => Booleanisation.comp a | Sum.inr a => Booleanisation.lift a }
The order on Booleanisation α
is as follows: For a b : α
,
a ≤ b
iffa ≤ b
inα
a ≤ bᶜ
iffa
andb
are disjoint inα
aᶜ ≤ bᶜ
iffb ≤ a
inα
¬ aᶜ ≤ b
- lift {α : Type u_1} [GeneralizedBooleanAlgebra α] {a b : α} : a ≤ b → (Booleanisation.lift a).LE (Booleanisation.lift b)
- comp {α : Type u_1} [GeneralizedBooleanAlgebra α] {a b : α} : a ≤ b → (Booleanisation.comp b).LE (Booleanisation.comp a)
- sep {α : Type u_1} [GeneralizedBooleanAlgebra α] {a b : α} : Disjoint a b → (Booleanisation.lift a).LE (Booleanisation.comp b)
Instances For
The order on Booleanisation α
is as follows: For a b : α
,
a < b
iffa < b
inα
a < bᶜ
iffa
andb
are disjoint inα
aᶜ < bᶜ
iffb < a
inα
¬ aᶜ < b
- lift {α : Type u_1} [GeneralizedBooleanAlgebra α] {a b : α} : a < b → (Booleanisation.lift a).LT (Booleanisation.lift b)
- comp {α : Type u_1} [GeneralizedBooleanAlgebra α] {a b : α} : a < b → (Booleanisation.comp b).LT (Booleanisation.comp a)
- sep {α : Type u_1} [GeneralizedBooleanAlgebra α] {a b : α} : Disjoint a b → (Booleanisation.lift a).LT (Booleanisation.comp b)
Instances For
The order on Booleanisation α
is as follows: For a b : α
,
a ≤ b
iffa ≤ b
inα
a ≤ bᶜ
iffa
andb
are disjoint inα
aᶜ ≤ bᶜ
iffb ≤ a
inα
¬ aᶜ ≤ b
Equations
- Booleanisation.instLE = { le := Booleanisation.LE }
The order on Booleanisation α
is as follows: For a b : α
,
a < b
iffa < b
inα
a < bᶜ
iffa
andb
are disjoint inα
aᶜ < bᶜ
iffb < a
inα
¬ aᶜ < b
Equations
- Booleanisation.instLT = { lt := Booleanisation.LT }
The supremum on Booleanisation α
is as follows: For a b : α
,
a ⊔ b
isa ⊔ b
a ⊔ bᶜ
is(b \ a)ᶜ
aᶜ ⊔ b
is(a \ b)ᶜ
aᶜ ⊔ bᶜ
is(a ⊓ b)ᶜ
Equations
- One or more equations did not get rendered due to their size.
The infimum on Booleanisation α
is as follows: For a b : α
,
a ⊓ b
isa ⊓ b
a ⊓ bᶜ
isa \ b
aᶜ ⊓ b
isb \ a
aᶜ ⊓ bᶜ
is(a ⊔ b)ᶜ
Equations
- One or more equations did not get rendered due to their size.
The bottom element of Booleanisation α
is the bottom element of α
.
Equations
- Booleanisation.instBot = { bot := Booleanisation.lift ⊥ }
The top element of Booleanisation α
is the complement of the bottom element of α
.
Equations
- Booleanisation.instTop = { top := Booleanisation.comp ⊥ }
The difference operator on Booleanisation α
is as follows: For a b : α
,
a \ b
isa \ b
a \ bᶜ
isa ⊓ b
aᶜ \ b
is(a ⊔ b)ᶜ
aᶜ \ bᶜ
isb \ a
Equations
- One or more equations did not get rendered due to their size.
Equations
- Booleanisation.instPreorder = Preorder.mk ⋯ ⋯ ⋯
Equations
- Booleanisation.instPartialOrder = PartialOrder.mk ⋯
Equations
- Booleanisation.instSemilatticeSup = SemilatticeSup.mk (fun (x y : Booleanisation α) => x ⊔ y) ⋯ ⋯ ⋯
Equations
- Booleanisation.instSemilatticeInf = SemilatticeInf.mk (fun (x y : Booleanisation α) => x ⊓ y) ⋯ ⋯ ⋯
Equations
- Booleanisation.instDistribLattice = DistribLattice.mk ⋯
Equations
- Booleanisation.instBoundedOrder = BoundedOrder.mk
Equations
- Booleanisation.instBooleanAlgebra = BooleanAlgebra.mk ⋯ ⋯ ⋯ ⋯ ⋯ ⋯
The embedding from a generalised Boolean algebra to its generated Boolean algebra.
Equations
- Booleanisation.liftLatticeHom = { toFun := Booleanisation.lift, map_sup' := ⋯, map_inf' := ⋯ }