Order homomorphisms #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
This file defines order homomorphisms, which are bundled monotone functions. A preorder
homomorphism f : α →o β
is a function α → β
along with a proof that ∀ x y, x ≤ y → f x ≤ f y
.
Main definitions #
In this file we define the following bundled monotone maps:
order_hom α β
a.k.a.α →o β
: Preorder homomorphism. Anorder_hom α β
is a functionf : α → β
such thata₁ ≤ a₂ → f a₁ ≤ f a₂
order_embedding α β
a.k.a.α ↪o β
: Relation embedding. Anorder_embedding α β
is an embeddingf : α ↪ β
such thata ≤ b ↔ f a ≤ f b
. Defined as an abbreviation of@rel_embedding α β (≤) (≤)
.order_iso
: Relation isomorphism. Anorder_iso α β
is an equivalencef : α ≃ β
such thata ≤ b ↔ f a ≤ f b
. Defined as an abbreviation of@rel_iso α β (≤) (≤)
.
We also define many order_hom
s. In some cases we define two versions, one with ₘ
suffix and
one without it (e.g., order_hom.compₘ
and order_hom.comp
). This means that the former
function is a "more bundled" version of the latter. We can't just drop the "less bundled" version
because the more bundled version usually does not work with dot notation.
order_hom.id
: identity map asα →o α
;order_hom.curry
: an order isomorphism betweenα × β →o γ
andα →o β →o γ
;order_hom.comp
: composition of two bundled monotone maps;order_hom.compₘ
: composition of bundled monotone maps as a bundled monotone map;order_hom.const
: constant function as a bundled monotone map;order_hom.prod
: combineα →o β
andα →o γ
intoα →o β × γ
;order_hom.prodₘ
: a more bundled version oforder_hom.prod
;order_hom.prod_iso
: order isomorphism betweenα →o β × γ
and(α →o β) × (α →o γ)
;order_hom.diag
: diagonal embedding ofα
intoα × α
as a bundled monotone map;order_hom.on_diag
: restrict a monotone mapα →o α →o β
to the diagonal;order_hom.fst
: projectionprod.fst : α × β → α
as a bundled monotone map;order_hom.snd
: projectionprod.snd : α × β → β
as a bundled monotone map;order_hom.prod_map
:prod.map f g
as a bundled monotone map;pi.eval_order_hom
: evaluation of a function at a pointfunction.eval i
as a bundled monotone map;order_hom.coe_fn_hom
: coercion to function as a bundled monotone map;order_hom.apply
: application of aorder_hom
at a point as a bundled monotone map;order_hom.pi
: combine a family of monotone mapsf i : α →o π i
into a monotone mapα →o Π i, π i
;order_hom.pi_iso
: order isomorphism betweenα →o Π i, π i
andΠ i, α →o π i
;order_hom.subtyle.val
: embeddingsubtype.val : subtype p → α
as a bundled monotone map;order_hom.dual
: reinterpret a monotone mapα →o β
as a monotone mapαᵒᵈ →o βᵒᵈ
;order_hom.dual_iso
: order isomorphism betweenα →o β
and(αᵒᵈ →o βᵒᵈ)ᵒᵈ
;order_iso.compl
: order isomorphismα ≃o αᵒᵈ
given by taking complements in a boolean algebra;
We also define two functions to convert other bundled maps to α →o β
:
order_embedding.to_order_hom
: convertα ↪o β
toα →o β
;rel_hom.to_order_hom
: convert arel_hom
between strict orders to aorder_hom
.
Tags #
monotone map, bundled morphism
Bundled monotone (aka, increasing) function
Instances for order_hom
- order_hom.has_sizeof_inst
- order_hom_class.order_hom.has_coe_t
- order_hom.has_coe_to_fun
- order_hom.order_hom_class
- order_hom.monotone.can_lift
- order_hom.inhabited
- order_hom.preorder
- order_hom.partial_order
- order_hom.unique
- order_hom.has_sup
- order_hom.semilattice_sup
- order_hom.has_inf
- order_hom.semilattice_inf
- order_hom.lattice
- order_hom.has_bot
- order_hom.order_bot
- order_hom.has_top
- order_hom.order_top
- order_hom.has_Inf
- order_hom.has_Sup
- order_hom.complete_lattice
- omega_complete_partial_order.order_hom.omega_complete_partial_order
- omega_complete_partial_order.order_hom.has_coe
An order embedding is an embedding f : α ↪ β
such that a ≤ b ↔ (f a) ≤ (f b)
.
This definition is an abbreviation of rel_embedding (≤) (≤)
.
- coe : F → α → β
- inv : F → β → α
- left_inv : ∀ (e : F), function.left_inverse (order_iso_class.inv e) (order_iso_class.coe e)
- right_inv : ∀ (e : F), function.right_inverse (order_iso_class.inv e) (order_iso_class.coe e)
- coe_injective' : ∀ (e g : F), order_iso_class.coe e = order_iso_class.coe g → order_iso_class.inv e = order_iso_class.inv g → e = g
- map_le_map_iff : ∀ (f : F) {a b : α}, ⇑f a ≤ ⇑f b ↔ a ≤ b
order_iso_class F α β
states that F
is a type of order isomorphisms.
You should extend this class when you extend order_iso
.
Instances of this typeclass
Instances of other typeclasses for order_iso_class
- order_iso_class.has_sizeof_inst
Equations
- order_iso.has_coe_t = {coe := λ (f : F), {to_equiv := ↑f, map_rel_iff' := _}}
Equations
Helper instance for when there's too many metavariables to apply fun_like.has_coe_to_fun
directly.
Equations
- order_hom.has_coe_to_fun = {coe := order_hom.to_fun _inst_2}
Equations
- order_hom.order_hom_class = {coe := order_hom.to_fun _inst_2, coe_injective' := _, map_rel := _}
Equations
- order_hom.inhabited = {default := order_hom.id _inst_1}
The preorder structure of α →o β
is pointwise inequality: f ≤ g ↔ ∀ a, f a ≤ g a
.
Equations
Equations
- order_hom.partial_order = partial_order.lift coe_fn order_hom.partial_order._proof_1
Diagonal embedding of α
into α × α
as a order_hom
.
Equations
Evaluation of an unbundled function at a point (function.eval
) as a order_hom
.
Equations
- pi.eval_order_hom i = {to_fun := function.eval i, monotone' := _}
Function application λ f, f a
(for fixed a
) is a monotone function from the
monotone function space α →o β
to β
. See also pi.eval_order_hom
.
Equations
Order isomorphism between bundled monotone maps α →o Π i, π i
and families of bundled monotone
maps Π i, α →o π i
.
Equations
- order_hom.pi_iso = {to_equiv := {to_fun := λ (f : α →o Π (i : ι), π i) (i : ι), (pi.eval_order_hom i).comp f, inv_fun := order_hom.pi (λ (i : ι), _inst_5 i), left_inv := _, right_inv := _}, map_rel_iff' := _}
subtype.val
as a bundled monotone function.
Equations
- order_hom.subtype.val p = {to_fun := subtype.val p, monotone' := _}
There is a unique monotone map from a subsingleton to itself.
Equations
- order_hom.unique = {to_inhabited := {default := order_hom.id _inst_1}, uniq := _}
Reinterpret a bundled monotone function as a monotone function between dual orders.
order_hom.dual
as an order isomorphism.
Equations
- order_hom.dual_iso α β = {to_equiv := order_hom.dual.trans order_dual.to_dual, map_rel_iff' := _}
Lift an order homomorphism f : α →o β
to an order homomorphism with_bot α →o with_bot β
.
Equations
- f.with_bot_map = {to_fun := with_bot.map ⇑f, monotone' := _}
Lift an order homomorphism f : α →o β
to an order homomorphism with_top α →o with_top β
.
Equations
- f.with_top_map = {to_fun := with_top.map ⇑f, monotone' := _}
Embeddings of partial orders that preserve <
also preserve ≤
.
Equations
- f.order_embedding_of_lt_embedding = {to_embedding := f.to_embedding, map_rel_iff' := _}
<
is preserved by order embeddings of preorders.
Equations
- f.lt_embedding = {to_embedding := f.to_embedding, map_rel_iff' := _}
An order embedding is also an order embedding between dual orders.
Equations
- f.dual = {to_embedding := f.to_embedding, map_rel_iff' := _}
A version of with_bot.map
for order embeddings.
Equations
- f.with_bot_map = {to_embedding := {to_fun := with_bot.map ⇑f, inj' := _}, map_rel_iff' := _}
A version of with_top.map
for order embeddings.
Equations
- f.with_top_map = {to_embedding := {to_fun := with_top.map ⇑f, inj' := _}, map_rel_iff' := _}
To define an order embedding from a partial order to a preorder it suffices to give a function
together with a proof that it satisfies f a ≤ f b ↔ a ≤ b
.
Equations
A strictly monotone map from a linear order is an order embedding.
Equations
Embedding of a subtype into the ambient type as an order_embedding
.
Equations
A bundled expression of the fact that a map between partial orders that is strictly monotone is weakly monotone.
Equations
- order_iso.order_iso_class = {coe := λ (f : α ≃o β), f.to_equiv.to_fun, inv := λ (f : α ≃o β), f.to_equiv.inv_fun, left_inv := _, right_inv := _, coe_injective' := _, map_le_map_iff := _}
Identity order isomorphism.
Equations
Equations
- order_iso.prod_comm = {to_equiv := equiv.prod_comm α β, map_rel_iff' := _}
The order isomorphism between a type and its double dual.
Equations
Converts a rel_iso (<) (<)
into an order_iso
.
Equations
- order_iso.of_rel_iso_lt e = {to_equiv := e.to_equiv, map_rel_iff' := _}
To show that f : α → β
, g : β → α
make up an order isomorphism of linear orders,
it suffices to prove cmp a (g b) = cmp (f a) b
.
To show that f : α →o β
and g : β →o α
make up an order isomorphism it is enough to show
that g
is the inverse of f
Order isomorphism between α → β
and β
, where α
has a unique element.
Equations
- order_iso.fun_unique α β = {to_equiv := equiv.fun_unique α β _inst_4, map_rel_iff' := _}
If e
is an equivalence with monotone forward and inverse maps, then e
is an
order isomorphism.
Equations
- e.to_order_iso h₁ h₂ = {to_equiv := e, map_rel_iff' := _}
A strictly monotone function with a right inverse is an order isomorphism.
Equations
- strict_mono.order_iso_of_right_inverse f h_mono g hg = {to_equiv := {to_fun := f, inv_fun := g, left_inv := _, right_inv := hg}, map_rel_iff' := _}
Note that this goal could also be stated (disjoint on f) a b
Note that this goal could also be stated (codisjoint on f) a b
Taking the dual then adding ⊥
is the same as adding ⊤
then taking the dual.
This is the order iso form of with_bot.of_dual
, as proven by coe_to_dual_top_equiv_eq
.
Equations
Taking the dual then adding ⊤
is the same as adding ⊥
then taking the dual.
This is the order iso form of with_top.of_dual
, as proven by coe_to_dual_bot_equiv_eq
.
Equations
A version of equiv.option_congr
for with_top
.
Equations
- e.with_top_congr = {to_equiv := e.to_equiv.option_congr, map_rel_iff' := _}
A version of equiv.option_congr
for with_bot
.
Equations
- e.with_bot_congr = {to_equiv := e.to_equiv.option_congr, map_rel_iff' := _}