Complete lattice homomorphisms #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
This file defines frame homorphisms and complete 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⨅
.frame_hom
: Frame homomorphisms. Maps which preserve⨆
,⊓
and⊤
.complete_lattice_hom
: Complete lattice homomorphisms. Maps which preserve⨆
and⨅
.
Typeclasses #
Concrete homs #
complete_lattice.set_preimage
:set.preimage
as a complete lattice homomorphism.
TODO #
Frame homs are Heyting homs.
- to_fun : α → β
- map_Sup' : ∀ (s : set α), self.to_fun (has_Sup.Sup s) = has_Sup.Sup (self.to_fun '' s)
The type of ⨆
-preserving functions from α
to β
.
Instances for Sup_hom
- to_fun : α → β
- map_Inf' : ∀ (s : set α), self.to_fun (has_Inf.Inf s) = has_Inf.Inf (self.to_fun '' s)
The type of ⨅
-preserving functions from α
to β
.
Instances for Inf_hom
- to_inf_top_hom : inf_top_hom α β
- map_Sup' : ∀ (s : set α), self.to_inf_top_hom.to_inf_hom.to_fun (has_Sup.Sup s) = has_Sup.Sup (self.to_inf_top_hom.to_inf_hom.to_fun '' s)
The type of frame homomorphisms from α
to β
. They preserve finite meets and arbitrary joins.
Instances for frame_hom
- frame_hom.has_sizeof_inst
- frame_hom.has_coe_t
- frame_hom.frame_hom_class
- frame_hom.has_coe_to_fun
- frame_hom.inhabited
- frame_hom.partial_order
- to_Inf_hom : Inf_hom α β
- map_Sup' : ∀ (s : set α), self.to_Inf_hom.to_fun (has_Sup.Sup s) = has_Sup.Sup (self.to_Inf_hom.to_fun '' s)
The type of complete lattice homomorphisms from α
to β
.
Instances for complete_lattice_hom
- complete_lattice_hom.has_sizeof_inst
- complete_lattice_hom.has_coe_t
- complete_lattice_hom.complete_lattice_hom_class
- complete_lattice_hom.has_coe_to_fun
- complete_lattice_hom.inhabited
- coe : F → Π (a : α), (λ (_x : α), β) a
- coe_injective' : function.injective Sup_hom_class.coe
- map_Sup : ∀ (f : F) (s : set α), ⇑f (has_Sup.Sup s) = has_Sup.Sup (⇑f '' s)
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) (s : set α), ⇑f (has_Inf.Inf s) = has_Inf.Inf (⇑f '' s)
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 frame_hom_class.coe
- map_inf : ∀ (f : F) (a b : α), ⇑f (a ⊓ b) = ⇑f a ⊓ ⇑f b
- map_top : ∀ (f : F), ⇑f ⊤ = ⊤
- map_Sup : ∀ (f : F) (s : set α), ⇑f (has_Sup.Sup s) = has_Sup.Sup (⇑f '' s)
frame_hom_class F α β
states that F
is a type of frame morphisms. They preserve ⊓
and ⨆
.
You should extend this class when you extend frame_hom
.
Instances of this typeclass
Instances of other typeclasses for frame_hom_class
- frame_hom_class.has_sizeof_inst
- coe : F → Π (a : α), (λ (_x : α), β) a
- coe_injective' : function.injective complete_lattice_hom_class.coe
- map_Inf : ∀ (f : F) (s : set α), ⇑f (has_Inf.Inf s) = has_Inf.Inf (⇑f '' s)
- map_Sup : ∀ (f : F) (s : set α), ⇑f (has_Sup.Sup s) = has_Sup.Sup (⇑f '' s)
complete_lattice_hom_class F α β
states that F
is a type of complete lattice morphisms.
You should extend this class when you extend complete_lattice_hom
.
Instances of this typeclass
Instances of other typeclasses for complete_lattice_hom_class
- complete_lattice_hom_class.has_sizeof_inst
Equations
- Sup_hom_class.to_sup_bot_hom_class = {coe := Sup_hom_class.coe _inst_3, coe_injective' := _, map_sup := _, map_bot := _}
Equations
- Inf_hom_class.to_inf_top_hom_class = {coe := Inf_hom_class.coe _inst_3, coe_injective' := _, map_inf := _, map_top := _}
Equations
- frame_hom_class.to_Sup_hom_class = {coe := frame_hom_class.coe _inst_3, coe_injective' := _, map_Sup := _}
Equations
- frame_hom_class.to_bounded_lattice_hom_class = {coe := frame_hom_class.coe _inst_3, coe_injective' := _, map_sup := _, map_inf := _, map_top := _, map_bot := _}
Equations
- complete_lattice_hom_class.to_frame_hom_class = {coe := complete_lattice_hom_class.coe _inst_3, coe_injective' := _, map_inf := _, map_top := _, map_Sup := _}
Equations
- complete_lattice_hom_class.to_bounded_lattice_hom_class = {coe := sup_bot_hom_class.coe Sup_hom_class.to_sup_bot_hom_class, coe_injective' := _, map_sup := _, map_inf := _, 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
- frame_hom.has_coe_t = {coe := λ (f : F), {to_inf_top_hom := ↑f, map_Sup' := _}}
Equations
- complete_lattice_hom.has_coe_t = {coe := λ (f : F), {to_Inf_hom := ↑f, map_Sup' := _}}
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
Equations
- Sup_hom.inhabited α = {default := Sup_hom.id α _inst_1}
Equations
- Sup_hom.partial_order = partial_order.lift coe_fn Sup_hom.partial_order._proof_1
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
Equations
- Inf_hom.inhabited α = {default := Inf_hom.id α _inst_1}
Equations
- Inf_hom.partial_order = partial_order.lift coe_fn Inf_hom.partial_order._proof_1
Frame homomorphisms #
Equations
- frame_hom.frame_hom_class = {coe := λ (f : frame_hom α β), f.to_inf_top_hom.to_inf_hom.to_fun, coe_injective' := _, map_inf := _, map_top := _, map_Sup := _}
Helper instance for when there's too many metavariables to apply fun_like.has_coe_to_fun
directly.
Equations
Reinterpret a frame_hom
as a lattice_hom
.
Equations
- f.to_lattice_hom = ↑f
Copy of a frame_hom
with a new to_fun
equal to the old one. Useful to fix definitional
equalities.
Equations
- f.copy f' h = {to_inf_top_hom := f.to_inf_top_hom.copy f' h, map_Sup' := _}
Equations
- frame_hom.id α = {to_inf_top_hom := inf_top_hom.id α (complete_lattice.to_has_top α), map_Sup' := _}
Equations
- frame_hom.inhabited α = {default := frame_hom.id α _inst_1}
Composition of frame_hom
s as a frame_hom
.
Equations
- f.comp g = {to_inf_top_hom := f.to_inf_top_hom.comp g.to_inf_top_hom, map_Sup' := _}
Equations
- frame_hom.partial_order = partial_order.lift coe_fn frame_hom.partial_order._proof_1
Complete lattice homomorphisms #
Equations
- complete_lattice_hom.complete_lattice_hom_class = {coe := λ (f : complete_lattice_hom α β), f.to_Inf_hom.to_fun, coe_injective' := _, map_Inf := _, map_Sup := _}
Reinterpret a complete_lattice_hom
as a Sup_hom
.
Equations
- f.to_Sup_hom = ↑f
Reinterpret a complete_lattice_hom
as a bounded_lattice_hom
.
Equations
Helper instance for when there's too many metavariables to apply fun_like.has_coe_to_fun
directly.
Copy of a complete_lattice_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_Sup' := _}
id
as a complete_lattice_hom
.
Equations
- complete_lattice_hom.id α = {to_Inf_hom := {to_fun := id α, map_Inf' := _}, map_Sup' := _}
Equations
- complete_lattice_hom.inhabited α = {default := complete_lattice_hom.id α _inst_1}
Composition of complete_lattice_hom
s as a complete_lattice_hom
.
Equations
- f.comp g = {to_Inf_hom := f.to_Inf_hom.comp g.to_Inf_hom, map_Sup' := _}
Dual homs #
Reinterpret a ⨆
-homomorphism as an ⨅
-homomorphism between the dual orders.
Reinterpret an ⨅
-homomorphism as a ⨆
-homomorphism between the dual orders.
Reinterpret a complete lattice homomorphism as a complete lattice homomorphism between the dual lattices.
Equations
- complete_lattice_hom.dual = {to_fun := λ (f : complete_lattice_hom α β), {to_Inf_hom := ⇑Sup_hom.dual f.to_Sup_hom, map_Sup' := _}, inv_fun := λ (f : complete_lattice_hom αᵒᵈ βᵒᵈ), {to_Inf_hom := ⇑Sup_hom.dual f.to_Sup_hom, map_Sup' := _}, left_inv := _, right_inv := _}
Concrete homs #
set.preimage
as a complete lattice homomorphism.
See also Sup_hom.set_image
.
Equations
- complete_lattice_hom.set_preimage f = {to_Inf_hom := {to_fun := set.preimage f, map_Inf' := _}, map_Sup' := _}
Using set.image
, a function between types yields a Sup_hom
between their lattices of
subsets.
See also complete_lattice_hom.set_preimage
.
An equivalence of types yields an order isomorphism between their lattices of subsets.