Lattice homomorphisms #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
This file defines (bounded) lattice homomorphisms.
We use the fun_like
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 #
sup_hom
: Maps which preserve⊔
.inf_hom
: Maps which preserve⊓
.sup_bot_hom
: Finitary supremum homomorphisms. Maps which preserve⊔
and⊥
.inf_top_hom
: Finitary infimum homomorphisms. Maps which preserve⊓
and⊤
.lattice_hom
: Lattice homomorphisms. Maps which preserve⊔
and⊓
.bounded_lattice_hom
: Bounded lattice homomorphisms. Maps which preserve⊤
,⊥
,⊔
and⊓
.
Typeclasses #
sup_hom_class
inf_hom_class
sup_bot_hom_class
inf_top_hom_class
lattice_hom_class
bounded_lattice_hom_class
TODO #
Do we need more intersections between bot_hom
, top_hom
and lattice homomorphisms?
The type of ⊔
-preserving functions from α
to β
.
Instances for sup_hom
The type of ⊓
-preserving functions from α
to β
.
Instances for inf_hom
- to_sup_hom : sup_hom α β
- map_inf' : ∀ (a b : α), self.to_sup_hom.to_fun (a ⊓ b) = self.to_sup_hom.to_fun a ⊓ self.to_sup_hom.to_fun b
The type of lattice homomorphisms from α
to β
.
Instances for lattice_hom
- lattice_hom.has_sizeof_inst
- lattice_hom.has_coe_t
- lattice_hom.lattice_hom_class
- lattice_hom.has_coe_to_fun
- lattice_hom.inhabited
- to_lattice_hom : lattice_hom α β
- map_top' : self.to_lattice_hom.to_sup_hom.to_fun ⊤ = ⊤
- map_bot' : self.to_lattice_hom.to_sup_hom.to_fun ⊥ = ⊥
The type of bounded lattice homomorphisms from α
to β
.
Instances for bounded_lattice_hom
- bounded_lattice_hom.has_sizeof_inst
- bounded_lattice_hom.has_coe_t
- bounded_lattice_hom.bounded_lattice_hom_class
- bounded_lattice_hom.has_coe_to_fun
- bounded_lattice_hom.inhabited
- coe : F → Π (a : α), (λ (_x : α), β) a
- coe_injective' : function.injective sup_hom_class.coe
- map_sup : ∀ (f : F) (a b : α), ⇑f (a ⊔ b) = ⇑f a ⊔ ⇑f b
sup_hom_class F α β
states that F
is a type of ⊔
-preserving morphisms.
You should extend this class when you extend sup_hom
.
Instances of this typeclass
Instances of other typeclasses for sup_hom_class
- sup_hom_class.has_sizeof_inst
- coe : F → Π (a : α), (λ (_x : α), β) a
- coe_injective' : function.injective inf_hom_class.coe
- map_inf : ∀ (f : F) (a b : α), ⇑f (a ⊓ b) = ⇑f a ⊓ ⇑f b
inf_hom_class F α β
states that F
is a type of ⊓
-preserving morphisms.
You should extend this class when you extend inf_hom
.
Instances of this typeclass
Instances of other typeclasses for inf_hom_class
- inf_hom_class.has_sizeof_inst
- coe : F → Π (a : α), (λ (_x : α), β) a
- coe_injective' : function.injective sup_bot_hom_class.coe
- map_sup : ∀ (f : F) (a b : α), ⇑f (a ⊔ b) = ⇑f a ⊔ ⇑f b
- map_bot : ∀ (f : F), ⇑f ⊥ = ⊥
sup_bot_hom_class F α β
states that F
is a type of finitary supremum-preserving morphisms.
You should extend this class when you extend sup_bot_hom
.
Instances of this typeclass
Instances of other typeclasses for sup_bot_hom_class
- sup_bot_hom_class.has_sizeof_inst
- coe : F → Π (a : α), (λ (_x : α), β) a
- coe_injective' : function.injective inf_top_hom_class.coe
- map_inf : ∀ (f : F) (a b : α), ⇑f (a ⊓ b) = ⇑f a ⊓ ⇑f b
- map_top : ∀ (f : F), ⇑f ⊤ = ⊤
inf_top_hom_class F α β
states that F
is a type of finitary infimum-preserving morphisms.
You should extend this class when you extend sup_bot_hom
.
Instances of this typeclass
Instances of other typeclasses for inf_top_hom_class
- inf_top_hom_class.has_sizeof_inst
- coe : F → Π (a : α), (λ (_x : α), β) a
- coe_injective' : function.injective lattice_hom_class.coe
- map_sup : ∀ (f : F) (a b : α), ⇑f (a ⊔ b) = ⇑f a ⊔ ⇑f b
- map_inf : ∀ (f : F) (a b : α), ⇑f (a ⊓ b) = ⇑f a ⊓ ⇑f b
lattice_hom_class F α β
states that F
is a type of lattice morphisms.
You should extend this class when you extend lattice_hom
.
Instances of this typeclass
Instances of other typeclasses for lattice_hom_class
- lattice_hom_class.has_sizeof_inst
- coe : F → Π (a : α), (λ (_x : α), β) a
- coe_injective' : function.injective bounded_lattice_hom_class.coe
- map_sup : ∀ (f : F) (a b : α), ⇑f (a ⊔ b) = ⇑f a ⊔ ⇑f b
- map_inf : ∀ (f : F) (a b : α), ⇑f (a ⊓ b) = ⇑f a ⊓ ⇑f b
- map_top : ∀ (f : F), ⇑f ⊤ = ⊤
- map_bot : ∀ (f : F), ⇑f ⊥ = ⊥
bounded_lattice_hom_class F α β
states that F
is a type of bounded lattice morphisms.
You should extend this class when you extend bounded_lattice_hom
.
Instances of this typeclass
Instances of other typeclasses for bounded_lattice_hom_class
- bounded_lattice_hom_class.has_sizeof_inst
Equations
- sup_hom_class.to_order_hom_class = {coe := sup_hom_class.coe _inst_3, coe_injective' := _, map_rel := _}
Equations
- inf_hom_class.to_order_hom_class = {coe := inf_hom_class.coe _inst_3, coe_injective' := _, map_rel := _}
Equations
- sup_bot_hom_class.to_bot_hom_class = {coe := sup_bot_hom_class.coe _inst_5, coe_injective' := _, map_bot := _}
Equations
- inf_top_hom_class.to_top_hom_class = {coe := inf_top_hom_class.coe _inst_5, coe_injective' := _, map_top := _}
Equations
- lattice_hom_class.to_inf_hom_class = {coe := lattice_hom_class.coe _inst_3, coe_injective' := _, map_inf := _}
Equations
- bounded_lattice_hom_class.to_sup_bot_hom_class = {coe := bounded_lattice_hom_class.coe _inst_5, coe_injective' := _, map_sup := _, map_bot := _}
Equations
- bounded_lattice_hom_class.to_inf_top_hom_class = {coe := bounded_lattice_hom_class.coe _inst_5, coe_injective' := _, map_inf := _, map_top := _}
Equations
- bounded_lattice_hom_class.to_bounded_order_hom_class = {coe := rel_hom_class.coe (show order_hom_class F α β, from infer_instance), coe_injective' := _, map_rel := _, map_top := _, map_bot := _}
Equations
- order_iso_class.to_sup_hom_class = {coe := rel_hom_class.coe (show order_hom_class F α β, from infer_instance), coe_injective' := _, map_sup := _}
Equations
- order_iso_class.to_inf_hom_class = {coe := rel_hom_class.coe (show order_hom_class F α β, from infer_instance), coe_injective' := _, map_inf := _}
Equations
Equations
Equations
Equations
- order_iso_class.to_bounded_lattice_hom_class = {coe := lattice_hom_class.coe order_iso_class.to_lattice_hom_class, coe_injective' := _, map_sup := _, map_inf := _, map_top := _, map_bot := _}
Special case of map_compl
for boolean algebras.
Special case of map_sdiff
for boolean algebras.
Special case of map_symm_diff
for boolean algebras.
Equations
- sup_bot_hom.has_coe_t = {coe := λ (f : F), {to_sup_hom := ↑f, map_bot' := _}}
Equations
- inf_top_hom.has_coe_t = {coe := λ (f : F), {to_inf_hom := ↑f, map_top' := _}}
Equations
- bounded_lattice_hom.has_coe_t = {coe := λ (f : F), {to_lattice_hom := {to_sup_hom := {to_fun := ⇑f, map_sup' := _}, map_inf' := _}, map_top' := _, map_bot' := _}}
Supremum homomorphisms #
Equations
- sup_hom.sup_hom_class = {coe := sup_hom.to_fun _inst_2, coe_injective' := _, map_sup := _}
Helper instance for when there's too many metavariables to apply fun_like.has_coe_to_fun
directly.
Equations
- sup_hom.inhabited α = {default := sup_hom.id α _inst_1}
The constant function as a sup_hom
.
Equations
- sup_hom.const α b = {to_fun := λ (_x : α), b, map_sup' := _}
Equations
- sup_hom.semilattice_sup = function.injective.semilattice_sup coe_fn sup_hom.semilattice_sup._proof_1 sup_hom.semilattice_sup._proof_2
Equations
- sup_hom.has_bot = {bot := sup_hom.const α ⊥}
Equations
- sup_hom.has_top = {top := sup_hom.const α ⊤}
Equations
- sup_hom.order_bot = order_bot.lift coe_fn sup_hom.order_bot._proof_5 sup_hom.order_bot._proof_6
Equations
- sup_hom.order_top = order_top.lift coe_fn sup_hom.order_top._proof_5 sup_hom.order_top._proof_6
Equations
- sup_hom.bounded_order = bounded_order.lift coe_fn sup_hom.bounded_order._proof_5 sup_hom.bounded_order._proof_6 sup_hom.bounded_order._proof_7
Infimum homomorphisms #
Equations
- inf_hom.inf_hom_class = {coe := inf_hom.to_fun _inst_2, coe_injective' := _, map_inf := _}
Helper instance for when there's too many metavariables to apply fun_like.has_coe_to_fun
directly.
Equations
- inf_hom.inhabited α = {default := inf_hom.id α _inst_1}
The constant function as an inf_hom
.
Equations
- inf_hom.const α b = {to_fun := λ (_x : α), b, map_inf' := _}
Equations
- inf_hom.semilattice_inf = function.injective.semilattice_inf coe_fn inf_hom.semilattice_inf._proof_1 inf_hom.semilattice_inf._proof_2
Equations
- inf_hom.has_bot = {bot := inf_hom.const α ⊥}
Equations
- inf_hom.has_top = {top := inf_hom.const α ⊤}
Equations
- inf_hom.order_bot = order_bot.lift coe_fn inf_hom.order_bot._proof_5 inf_hom.order_bot._proof_6
Equations
- inf_hom.order_top = order_top.lift coe_fn inf_hom.order_top._proof_5 inf_hom.order_top._proof_6
Equations
- inf_hom.bounded_order = bounded_order.lift coe_fn inf_hom.bounded_order._proof_5 inf_hom.bounded_order._proof_6 inf_hom.bounded_order._proof_7
Finitary supremum homomorphisms #
Reinterpret a sup_bot_hom
as a bot_hom
.
Equations
- f.to_bot_hom = {to_fun := f.to_sup_hom.to_fun, map_bot' := _}
Equations
- sup_bot_hom.sup_bot_hom_class = {coe := λ (f : sup_bot_hom α β), f.to_sup_hom.to_fun, coe_injective' := _, map_sup := _, map_bot := _}
Helper instance for when there's too many metavariables to apply fun_like.has_coe_to_fun
directly.
Copy of a sup_bot_hom
with a new to_fun
equal to the old one. Useful to fix definitional
equalities.
Equations
- f.copy f' h = {to_sup_hom := f.to_sup_hom.copy f' h, map_bot' := _}
id
as a sup_bot_hom
.
Equations
- sup_bot_hom.id α = {to_sup_hom := sup_hom.id α _inst_1, map_bot' := _}
Equations
- sup_bot_hom.inhabited α = {default := sup_bot_hom.id α _inst_2}
Composition of sup_bot_hom
s as a sup_bot_hom
.
Equations
- f.comp g = {to_sup_hom := {to_fun := (f.to_sup_hom.comp g.to_sup_hom).to_fun, map_sup' := _}, map_bot' := _}
Equations
- sup_bot_hom.has_sup = {sup := λ (f g : sup_bot_hom α β), {to_sup_hom := f.to_sup_hom ⊔ g.to_sup_hom, map_bot' := _}}
Equations
- sup_bot_hom.semilattice_sup = function.injective.semilattice_sup coe_fn sup_bot_hom.semilattice_sup._proof_1 sup_bot_hom.semilattice_sup._proof_2
Equations
- sup_bot_hom.order_bot = {bot := {to_sup_hom := ⊥, map_bot' := _}, bot_le := _}
Finitary infimum homomorphisms #
Reinterpret an inf_top_hom
as a top_hom
.
Equations
- f.to_top_hom = {to_fun := f.to_inf_hom.to_fun, map_top' := _}
Equations
- inf_top_hom.inf_top_hom_class = {coe := λ (f : inf_top_hom α β), f.to_inf_hom.to_fun, coe_injective' := _, map_inf := _, map_top := _}
Helper instance for when there's too many metavariables to apply fun_like.has_coe_to_fun
directly.
Copy of an inf_top_hom
with a new to_fun
equal to the old one. Useful to fix definitional
equalities.
Equations
- f.copy f' h = {to_inf_hom := f.to_inf_hom.copy f' h, map_top' := _}
id
as an inf_top_hom
.
Equations
- inf_top_hom.id α = {to_inf_hom := inf_hom.id α _inst_1, map_top' := _}
Equations
- inf_top_hom.inhabited α = {default := inf_top_hom.id α _inst_2}
Composition of inf_top_hom
s as an inf_top_hom
.
Equations
- f.comp g = {to_inf_hom := {to_fun := (f.to_inf_hom.comp g.to_inf_hom).to_fun, map_inf' := _}, map_top' := _}
Equations
- inf_top_hom.has_inf = {inf := λ (f g : inf_top_hom α β), {to_inf_hom := f.to_inf_hom ⊓ g.to_inf_hom, map_top' := _}}
Equations
- inf_top_hom.semilattice_inf = function.injective.semilattice_inf coe_fn inf_top_hom.semilattice_inf._proof_1 inf_top_hom.semilattice_inf._proof_2
Equations
- inf_top_hom.order_top = {top := {to_inf_hom := ⊤, map_top' := _}, le_top := _}
Lattice homomorphisms #
Reinterpret a lattice_hom
as an inf_hom
.
Equations
- f.to_inf_hom = {to_fun := f.to_sup_hom.to_fun, map_inf' := _}
Equations
- lattice_hom.lattice_hom_class = {coe := λ (f : lattice_hom α β), f.to_sup_hom.to_fun, coe_injective' := _, map_sup := _, map_inf := _}
Helper instance for when there's too many metavariables to apply fun_like.has_coe_to_fun
directly.
Equations
- lattice_hom.has_coe_to_fun = {coe := λ (f : lattice_hom α β), f.to_sup_hom.to_fun}
Copy of a lattice_hom
with a new to_fun
equal to the old one. Useful to fix definitional
equalities.
id
as a lattice_hom
.
Equations
- lattice_hom.id α = {to_sup_hom := {to_fun := id α, map_sup' := _}, map_inf' := _}
Equations
- lattice_hom.inhabited α = {default := lattice_hom.id α _inst_1}
Composition of lattice_hom
s as a lattice_hom
.
Equations
- f.comp g = {to_sup_hom := {to_fun := (f.to_sup_hom.comp g.to_sup_hom).to_fun, map_sup' := _}, map_inf' := _}
An order homomorphism from a linear order is a lattice homomorphism.
Equations
- order_hom_class.to_lattice_hom_class α β = {coe := rel_hom_class.coe _inst_3, coe_injective' := _, map_sup := _, map_inf := _}
Reinterpret an order homomorphism to a linear order as a lattice_hom
.
Equations
- order_hom_class.to_lattice_hom α β f = ↑f
Bounded lattice homomorphisms #
Reinterpret a bounded_lattice_hom
as a sup_bot_hom
.
Equations
- f.to_sup_bot_hom = {to_sup_hom := f.to_lattice_hom.to_sup_hom, map_bot' := _}
Reinterpret a bounded_lattice_hom
as an inf_top_hom
.
Equations
- f.to_inf_top_hom = {to_inf_hom := {to_fun := f.to_lattice_hom.to_sup_hom.to_fun, map_inf' := _}, map_top' := _}
Reinterpret a bounded_lattice_hom
as a bounded_order_hom
.
Equations
- f.to_bounded_order_hom = {to_order_hom := {to_fun := f.to_lattice_hom.to_sup_hom.to_fun, monotone' := _}, map_top' := _, map_bot' := _}
Equations
- bounded_lattice_hom.bounded_lattice_hom_class = {coe := λ (f : bounded_lattice_hom α β), f.to_lattice_hom.to_sup_hom.to_fun, coe_injective' := _, map_sup := _, map_inf := _, map_top := _, map_bot := _}
Helper instance for when there's too many metavariables to apply fun_like.has_coe_to_fun
directly.
Equations
- bounded_lattice_hom.has_coe_to_fun = {coe := λ (f : bounded_lattice_hom α β), f.to_lattice_hom.to_sup_hom.to_fun}
Copy of a bounded_lattice_hom
with a new to_fun
equal to the old one. Useful to fix
definitional equalities.
Equations
- f.copy f' h = {to_lattice_hom := {to_sup_hom := (f.to_lattice_hom.copy f' h).to_sup_hom, map_inf' := _}, map_top' := _, map_bot' := _}
id
as a bounded_lattice_hom
.
Equations
- bounded_lattice_hom.id α = {to_lattice_hom := {to_sup_hom := (lattice_hom.id α).to_sup_hom, map_inf' := _}, map_top' := _, map_bot' := _}
Equations
- bounded_lattice_hom.inhabited α = {default := bounded_lattice_hom.id α _inst_5}
Composition of bounded_lattice_hom
s as a bounded_lattice_hom
.
Equations
- f.comp g = {to_lattice_hom := {to_sup_hom := (f.to_lattice_hom.comp g.to_lattice_hom).to_sup_hom, map_inf' := _}, map_top' := _, map_bot' := _}
Dual homs #
Reinterpret a supremum homomorphism as an infimum homomorphism between the dual lattices.
Reinterpret an infimum homomorphism as a supremum homomorphism between the dual lattices.
Reinterpret a finitary supremum homomorphism as a finitary infimum homomorphism between the dual lattices.
Equations
- sup_bot_hom.dual = {to_fun := λ (f : sup_bot_hom α β), {to_inf_hom := ⇑sup_hom.dual f.to_sup_hom, map_top' := _}, inv_fun := λ (f : inf_top_hom αᵒᵈ βᵒᵈ), {to_sup_hom := ⇑(sup_hom.dual.symm) f.to_inf_hom, map_bot' := _}, left_inv := _, right_inv := _}
Reinterpret a finitary infimum homomorphism as a finitary supremum homomorphism between the dual lattices.
Equations
- inf_top_hom.dual = {to_fun := λ (f : inf_top_hom α β), {to_sup_hom := ⇑inf_hom.dual f.to_inf_hom, map_bot' := _}, inv_fun := λ (f : sup_bot_hom αᵒᵈ βᵒᵈ), {to_inf_hom := ⇑(inf_hom.dual.symm) f.to_sup_hom, map_top' := _}, left_inv := _, right_inv := _}
Reinterpret a lattice homomorphism as a lattice homomorphism between the dual lattices.
Equations
- lattice_hom.dual = {to_fun := λ (f : lattice_hom α β), {to_sup_hom := ⇑inf_hom.dual f.to_inf_hom, map_inf' := _}, inv_fun := λ (f : lattice_hom αᵒᵈ βᵒᵈ), {to_sup_hom := ⇑inf_hom.dual f.to_inf_hom, map_inf' := _}, left_inv := _, right_inv := _}
Reinterpret a bounded lattice homomorphism as a bounded lattice homomorphism between the dual bounded lattices.
Equations
- bounded_lattice_hom.dual = {to_fun := λ (f : bounded_lattice_hom α β), {to_lattice_hom := ⇑lattice_hom.dual f.to_lattice_hom, map_top' := _, map_bot' := _}, inv_fun := λ (f : bounded_lattice_hom αᵒᵈ βᵒᵈ), {to_lattice_hom := ⇑(lattice_hom.dual.symm) f.to_lattice_hom, map_top' := _, map_bot' := _}, left_inv := _, right_inv := _}
Adjoins a ⊤
to the domain and codomain of a sup_hom
.
Adjoins a ⊥
to the domain and codomain of a sup_hom
.
Equations
- f.with_bot = {to_sup_hom := {to_fun := option.map ⇑f, map_sup' := _}, map_bot' := _}
Adjoins a ⊤
to the codomain of a sup_hom
.
Adjoins a ⊥
to the domain of a sup_hom
.
Adjoins a ⊤
to the domain and codomain of an inf_hom
.
Equations
- f.with_top = {to_inf_hom := {to_fun := option.map ⇑f, map_inf' := _}, map_top' := _}
Adjoins a ⊥ to the domain and codomain of an
inf_hom`.
Adjoins a ⊤
to the codomain of an inf_hom
.
Adjoins a ⊥
to the codomain of an inf_hom
.
Adjoins a ⊤
to the domain and codomain of a lattice_hom
.
Equations
- f.with_top = {to_sup_hom := f.to_sup_hom.with_top, map_inf' := _}
Adjoins a ⊥
to the domain and codomain of a lattice_hom
.
Equations
- f.with_bot = {to_sup_hom := ↑(f.to_sup_hom.with_bot), map_inf' := _}
Adjoins a ⊤
and ⊥
to the domain and codomain of a lattice_hom
.
Equations
- f.with_top_with_bot = {to_lattice_hom := f.with_bot.with_top, map_top' := _, map_bot' := _}
Adjoins a ⊥
to the codomain of a lattice_hom
.
Adjoins a ⊥
to the domain and codomain of a lattice_hom
.
Equations
- f.with_bot' = {to_sup_hom := f.to_sup_hom.with_bot'.to_sup_hom, map_inf' := _}
Adjoins a ⊤
and ⊥
to the codomain of a lattice_hom
.
Equations
- f.with_top_with_bot' = {to_lattice_hom := f.with_bot'.with_top', map_top' := _, map_bot' := _}