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
LatticeHompreserves infima.
Instances For
The type of bounded lattice homomorphisms from α to β.
- toFun : α → β
A
BoundedLatticeHompreserves the top element.A
BoundedLatticeHompreserves 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
SupHomClassmorphism preserves suprema.
Instances
InfHomClass F α β states that F is a type of ⊓-preserving morphisms.
You should extend this class when you extend InfHom.
An
InfHomClassmorphism 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
SupBotHomClassmorphism 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
InfTopHomClassmorphism 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
LatticeHomClassmorphism 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
BoundedLatticeHomClassmorphism preserves the top element.A
BoundedLatticeHomClassmorphism 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
- instCoeTCSupHomOfSupHomClass = { coe := fun (f : F) => { toFun := ⇑f, map_sup' := ⋯ } }
Equations
- instCoeTCInfHomOfInfHomClass = { coe := fun (f : F) => { toFun := ⇑f, map_inf' := ⋯ } }
Equations
- instCoeTCSupBotHomOfSupBotHomClass = { coe := fun (f : F) => { toFun := ⇑f, map_sup' := ⋯, map_bot' := ⋯ } }
Equations
- instCoeTCInfTopHomOfInfTopHomClass = { coe := fun (f : F) => { toFun := ⇑f, map_inf' := ⋯, map_top' := ⋯ } }
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.instFunLike = { coe := SupHom.toFun, coe_injective' := ⋯ }
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.instMax = { max := fun (f g : SupHom α β) => { toFun := ⇑f ⊔ ⇑g, map_sup' := ⋯ } }
Equations
- SupHom.instSemilatticeSup = Function.Injective.semilatticeSup (fun (f : SupHom α β) => ⇑f) ⋯ ⋯
Equations
- SupHom.instBot = { bot := SupHom.const α ⊥ }
Equations
- SupHom.instTop = { top := SupHom.const α ⊤ }
Equations
Equations
Equations
Subtype.val as a SupHom.
Equations
- SupHom.subtypeVal Psup = { toFun := Subtype.val, map_sup' := ⋯ }
Instances For
Infimum homomorphisms #
Equations
- InfHom.instFunLike = { coe := InfHom.toFun, coe_injective' := ⋯ }
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.instMin = { min := fun (f g : InfHom α β) => { toFun := ⇑f ⊓ ⇑g, map_inf' := ⋯ } }
Equations
- InfHom.instSemilatticeInf = Function.Injective.semilatticeInf (fun (f : InfHom α β) => ⇑f) ⋯ ⋯
Equations
- InfHom.instBot = { bot := InfHom.const α ⊥ }
Equations
- InfHom.instTop = { top := InfHom.const α ⊤ }
Equations
Equations
Equations
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.instMax = { max := fun (f g : SupBotHom α β) => let __src := f.toBotHom ⊔ g.toBotHom; { toSupHom := f.toSupHom ⊔ g.toSupHom, map_bot' := ⋯ } }
Equations
- SupBotHom.instSemilatticeSup = Function.Injective.semilatticeSup (fun (f : SupBotHom α β) => ⇑f) ⋯ ⋯
Equations
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.instMin = { min := fun (f g : InfTopHom α β) => let __src := f.toTopHom ⊓ g.toTopHom; { toInfHom := f.toInfHom ⊓ g.toInfHom, map_top' := ⋯ } }
Equations
- InfTopHom.instSemilatticeInf = Function.Injective.semilatticeInf (fun (f : InfTopHom α β) => ⇑f) ⋯ ⋯
Equations
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 LatticeHoms 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 BoundedLatticeHoms 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' := ⋯ }