Lattice homomorphisms #
This file defines (bounded) lattice homomorphisms.
We use the DFunLike
design, so each type of morphisms has a companion typeclass which is meant to
be satisfied by itself and all stricter types.
Types of morphisms #
SupHom
: Maps which preserve⊔
.InfHom
: Maps which preserve⊓
.SupBotHom
: Finitary supremum homomorphisms. Maps which preserve⊔
and⊥
.InfTopHom
: Finitary infimum homomorphisms. Maps which preserve⊓
and⊤
.LatticeHom
: Lattice homomorphisms. Maps which preserve⊔
and⊓
.BoundedLatticeHom
: Bounded lattice homomorphisms. Maps which preserve⊤
,⊥
,⊔
and⊓
.
Typeclasses #
TODO #
Do we need more intersections between BotHom
, TopHom
and lattice homomorphisms?
The type of lattice homomorphisms from α
to β
.
- toFun : α → β
A
LatticeHom
preserves infima.
Instances For
The type of bounded lattice homomorphisms from α
to β
.
- toFun : α → β
A
BoundedLatticeHom
preserves the top element.A
BoundedLatticeHom
preserves the bottom element.
Instances For
SupHomClass F α β
states that F
is a type of ⊔
-preserving morphisms.
You should extend this class when you extend SupHom
.
A
SupHomClass
morphism preserves suprema.
Instances
InfHomClass F α β
states that F
is a type of ⊓
-preserving morphisms.
You should extend this class when you extend InfHom
.
An
InfHomClass
morphism preserves infima.
Instances
SupBotHomClass F α β
states that F
is a type of finitary supremum-preserving morphisms.
You should extend this class when you extend SupBotHom
.
A
SupBotHomClass
morphism preserves the bottom element.
Instances
InfTopHomClass F α β
states that F
is a type of finitary infimum-preserving morphisms.
You should extend this class when you extend SupBotHom
.
An
InfTopHomClass
morphism preserves the top element.
Instances
LatticeHomClass F α β
states that F
is a type of lattice morphisms.
You should extend this class when you extend LatticeHom
.
A
LatticeHomClass
morphism preserves infima.
Instances
BoundedLatticeHomClass F α β
states that F
is a type of bounded lattice morphisms.
You should extend this class when you extend BoundedLatticeHom
.
A
BoundedLatticeHomClass
morphism preserves the top element.A
BoundedLatticeHomClass
morphism preserves the bottom element.
Instances
We can regard an injective map preserving binary infima as an order embedding.
Equations
Instances For
Special case of map_compl
for boolean algebras.
Special case of map_sdiff
for boolean algebras.
Special case of map_symmDiff
for boolean algebras.
Equations
- instCoeTCLatticeHomOfLatticeHomClass = { coe := fun (f : F) => { toFun := ⇑f, map_sup' := ⋯, map_inf' := ⋯ } }
Equations
- One or more equations did not get rendered due to their size.
Supremum homomorphisms #
Equations
- SupHom.instInhabited α = { default := SupHom.id α }
The constant function as a SupHom
.
Equations
- SupHom.const α b = { toFun := fun (x : α) => b, map_sup' := ⋯ }
Instances For
Equations
- SupHom.instSemilatticeSup = Function.Injective.semilatticeSup (fun (f : SupHom α β) => ⇑f) ⋯ ⋯
Equations
- SupHom.instBot = { bot := SupHom.const α ⊥ }
Equations
- SupHom.instTop = { top := SupHom.const α ⊤ }
Equations
- SupHom.instOrderBot = OrderBot.lift DFunLike.coe ⋯ ⋯
Equations
- SupHom.instOrderTop = OrderTop.lift DFunLike.coe ⋯ ⋯
Equations
- SupHom.instBoundedOrder = BoundedOrder.lift DFunLike.coe ⋯ ⋯ ⋯
Subtype.val
as a SupHom
.
Equations
- SupHom.subtypeVal Psup = { toFun := Subtype.val, map_sup' := ⋯ }
Instances For
Infimum homomorphisms #
Equations
- InfHom.instInhabited α = { default := InfHom.id α }
The constant function as an InfHom
.
Equations
- InfHom.const α b = { toFun := fun (x : α) => b, map_inf' := ⋯ }
Instances For
Equations
- InfHom.instSemilatticeInf = Function.Injective.semilatticeInf (fun (f : InfHom α β) => ⇑f) ⋯ ⋯
Equations
- InfHom.instBot = { bot := InfHom.const α ⊥ }
Equations
- InfHom.instTop = { top := InfHom.const α ⊤ }
Equations
- InfHom.instOrderBot = OrderBot.lift DFunLike.coe ⋯ ⋯
Equations
- InfHom.instOrderTop = OrderTop.lift DFunLike.coe ⋯ ⋯
Equations
- InfHom.instBoundedOrder = BoundedOrder.lift DFunLike.coe ⋯ ⋯ ⋯
Subtype.val
as an InfHom
.
Equations
- InfHom.subtypeVal Pinf = { toFun := Subtype.val, map_inf' := ⋯ }
Instances For
Finitary supremum homomorphisms #
Copy of a SupBotHom
with a new toFun
equal to the old one. Useful to fix definitional
equalities.
Equations
- f.copy f' h = { toSupHom := f.copy f' h, map_bot' := ⋯ }
Instances For
Equations
- SupBotHom.instInhabited α = { default := SupBotHom.id α }
Equations
- SupBotHom.instSemilatticeSup = Function.Injective.semilatticeSup (fun (f : SupBotHom α β) => ⇑f) ⋯ ⋯
Equations
- SupBotHom.instOrderBot = OrderBot.mk ⋯
Subtype.val
as a SupBotHom
.
Equations
- SupBotHom.subtypeVal Pbot Psup = { toSupHom := SupHom.subtypeVal Psup, map_bot' := ⋯ }
Instances For
Finitary infimum homomorphisms #
Copy of an InfTopHom
with a new toFun
equal to the old one. Useful to fix definitional
equalities.
Equations
- f.copy f' h = { toInfHom := f.copy f' h, map_top' := ⋯ }
Instances For
Equations
- InfTopHom.instInhabited α = { default := InfTopHom.id α }
Equations
- InfTopHom.instSemilatticeInf = Function.Injective.semilatticeInf (fun (f : InfTopHom α β) => ⇑f) ⋯ ⋯
Equations
- InfTopHom.instOrderTop = OrderTop.mk ⋯
Subtype.val
as an InfTopHom
.
Equations
- InfTopHom.subtypeVal Ptop Pinf = { toInfHom := InfHom.subtypeVal Pinf, map_top' := ⋯ }
Instances For
Lattice homomorphisms #
Reinterpret a LatticeHom
as an InfHom
.
Equations
- f.toInfHom = { toFun := f.toFun, map_inf' := ⋯ }
Instances For
Equations
- LatticeHom.instFunLike = { coe := fun (f : LatticeHom α β) => f.toFun, coe_injective' := ⋯ }
Copy of a LatticeHom
with a new toFun
equal to the old one. Useful to fix definitional
equalities.
Equations
- f.copy f' h = { toSupHom := f.copy f' h, map_inf' := ⋯ }
Instances For
id
as a LatticeHom
.
Equations
- LatticeHom.id α = { toFun := id, map_sup' := ⋯, map_inf' := ⋯ }
Instances For
Equations
- LatticeHom.instInhabited α = { default := LatticeHom.id α }
Composition of LatticeHom
s as a LatticeHom
.
Equations
- f.comp g = { toSupHom := f.comp g.toSupHom, map_inf' := ⋯ }
Instances For
Subtype.val
as a LatticeHom
.
Equations
- LatticeHom.subtypeVal Psup Pinf = { toSupHom := SupHom.subtypeVal Psup, map_inf' := ⋯ }
Instances For
An order homomorphism from a linear order is a lattice homomorphism.
Reinterpret an order homomorphism to a linear order as a LatticeHom
.
Equations
- OrderHomClass.toLatticeHom α β f = { toFun := ⇑f, map_sup' := ⋯, map_inf' := ⋯ }
Instances For
Bounded lattice homomorphisms #
Reinterpret a BoundedLatticeHom
as a SupBotHom
.
Equations
- f.toSupBotHom = { toSupHom := f.toSupHom, map_bot' := ⋯ }
Instances For
Reinterpret a BoundedLatticeHom
as an InfTopHom
.
Equations
- f.toInfTopHom = { toFun := f.toFun, map_inf' := ⋯, map_top' := ⋯ }
Instances For
Reinterpret a BoundedLatticeHom
as a BoundedOrderHom
.
Equations
- f.toBoundedOrderHom = { toFun := f.toFun, monotone' := ⋯, map_top' := ⋯, map_bot' := ⋯ }
Instances For
Equations
- BoundedLatticeHom.instFunLike = { coe := fun (f : BoundedLatticeHom α β) => f.toFun, coe_injective' := ⋯ }
Copy of a BoundedLatticeHom
with a new toFun
equal to the old one. Useful to fix
definitional equalities.
Equations
- f.copy f' h = { toLatticeHom := f.copy f' h, map_top' := ⋯, map_bot' := ⋯ }
Instances For
id
as a BoundedLatticeHom
.
Equations
- BoundedLatticeHom.id α = { toLatticeHom := LatticeHom.id α, map_top' := ⋯, map_bot' := ⋯ }
Instances For
Equations
- BoundedLatticeHom.instInhabited α = { default := BoundedLatticeHom.id α }
Composition of BoundedLatticeHom
s as a BoundedLatticeHom
.
Equations
- f.comp g = { toLatticeHom := f.comp g.toLatticeHom, map_top' := ⋯, map_bot' := ⋯ }
Instances For
Subtype.val
as a BoundedLatticeHom
.
Equations
- BoundedLatticeHom.subtypeVal Pbot Ptop Psup Pinf = { toLatticeHom := LatticeHom.subtypeVal Psup Pinf, map_top' := ⋯, map_bot' := ⋯ }
Instances For
Dual homs #
Reinterpret a supremum homomorphism as an infimum homomorphism between the dual lattices.
Equations
Instances For
Reinterpret an infimum homomorphism as a supremum homomorphism between the dual lattices.
Equations
Instances For
Reinterpret a lattice homomorphism as a lattice homomorphism between the dual lattices.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Reinterpret a bounded lattice homomorphism as a bounded lattice homomorphism between the dual bounded lattices.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Prod #
Natural projection homomorphism from α × β
to α
.
Equations
- LatticeHom.fst = { toFun := Prod.fst, map_sup' := ⋯, map_inf' := ⋯ }
Instances For
Natural projection homomorphism from α × β
to β
.
Equations
- LatticeHom.snd = { toFun := Prod.snd, map_sup' := ⋯, map_inf' := ⋯ }
Instances For
Pi #
Evaluation as a lattice homomorphism.
Equations
- Pi.evalLatticeHom i = { toFun := Function.eval i, map_sup' := ⋯, map_inf' := ⋯ }
Instances For
Adjoins a ⊤
to the domain and codomain of a SupHom
.
Equations
- f.withTop = { toFun := WithTop.map ⇑f, map_sup' := ⋯ }
Instances For
Adjoins a ⊥
to the domain and codomain of a SupHom
.
Equations
- f.withBot = { toFun := Option.map ⇑f, map_sup' := ⋯, map_bot' := ⋯ }
Instances For
Adjoins a ⊤
to the codomain of a SupHom
.
Equations
- f.withTop' = { toFun := fun (a : WithTop α) => Option.elim a ⊤ ⇑f, map_sup' := ⋯ }
Instances For
Adjoins a ⊥
to the domain of a SupHom
.
Equations
- f.withBot' = { toFun := fun (a : WithBot α) => Option.elim a ⊥ ⇑f, map_sup' := ⋯, map_bot' := ⋯ }
Instances For
Adjoins a ⊤
to the domain and codomain of an InfHom
.
Equations
- f.withTop = { toFun := Option.map ⇑f, map_inf' := ⋯, map_top' := ⋯ }
Instances For
Adjoins a ⊥
to the domain and codomain of an InfHom
.
Equations
- f.withBot = { toFun := Option.map ⇑f, map_inf' := ⋯ }
Instances For
Adjoins a ⊤
to the codomain of an InfHom
.
Equations
- f.withTop' = { toFun := fun (a : WithTop α) => Option.elim a ⊤ ⇑f, map_inf' := ⋯, map_top' := ⋯ }
Instances For
Adjoins a ⊥
to the codomain of an InfHom
.
Equations
- f.withBot' = { toFun := fun (a : WithBot α) => Option.elim a ⊥ ⇑f, map_inf' := ⋯ }
Instances For
Adjoins a ⊤
to the domain and codomain of a LatticeHom
.
Equations
- f.withTop = { toSupHom := f.withTop, map_inf' := ⋯ }
Instances For
Adjoins a ⊥
to the domain and codomain of a LatticeHom
.
Equations
- f.withBot = { toFun := ⇑f.withBot, map_sup' := ⋯, map_inf' := ⋯ }
Instances For
Adjoins a ⊤
and ⊥
to the domain and codomain of a LatticeHom
.
Equations
- f.withTopWithBot = { toLatticeHom := f.withBot.withTop, map_top' := ⋯, map_bot' := ⋯ }
Instances For
Adjoins a ⊥
to the codomain of a LatticeHom
.
Equations
- f.withTop' = { toSupHom := f.withTop', map_inf' := ⋯ }
Instances For
Adjoins a ⊥
to the domain and codomain of a LatticeHom
.
Equations
- f.withBot' = { toSupHom := f.withBot'.toSupHom, map_inf' := ⋯ }
Instances For
Adjoins a ⊤
and ⊥
to the codomain of a LatticeHom
.
Equations
- f.withTopWithBot' = { toLatticeHom := f.withBot'.withTop', map_top' := ⋯, map_bot' := ⋯ }