Documentation

Mathlib.CategoryTheory.Category.Preorder

Preorders as categories #

We install a category instance on any preorder. This is not to be confused with the category of preorders, defined in Order.Category.Preorder.

We show that monotone functions between preorders correspond to functors of the associated categories.

Main definitions #

@[instance 100]

The category structure coming from a preorder. There is a morphism X ⟶ Y if and only if X ≤ Y.

Because we don't allow morphisms to live in Prop, we have to define X ⟶ Y as ULift (PLift (X ≤ Y)). See CategoryTheory.homOfLE and CategoryTheory.leOfHom.

Stacks Tag 00D3

Equations
instance Preorder.subsingleton_hom {α : Type u} [Preorder α] (U V : α) :
def CategoryTheory.homOfLE {X : Type u} [Preorder X] {x y : X} (h : x y) :
x y

Express an inequality as a morphism in the corresponding preorder category.

Equations
@[reducible, inline]
abbrev LE.le.hom {X : Type u_1} [Preorder X] {x y : X} (h : x y) :
x y

Express an inequality as a morphism in the corresponding preorder category.

Equations
@[simp]
theorem CategoryTheory.homOfLE_refl {X : Type u} [Preorder X] {x : X} (h : x x) :
@[simp]
theorem CategoryTheory.homOfLE_comp {X : Type u} [Preorder X] {x y z : X} (h : x y) (k : y z) :
theorem CategoryTheory.leOfHom {X : Type u} [Preorder X] {x y : X} (h : x y) :
x y

Extract the underlying inequality from a morphism in a preorder category.

@[reducible, inline]
abbrev Quiver.Hom.le {X : Type u_1} [Preorder X] {x y : X} (h : x y) :
x y

Extract the underlying inequality from a morphism in a preorder category.

Equations
@[simp]
theorem CategoryTheory.homOfLE_leOfHom {X : Type u} [Preorder X] {x y : X} (h : x y) :
.hom = h
theorem CategoryTheory.homOfLE_isIso_of_eq {X : Type u} [Preorder X] {x y : X} (h : x y) (heq : x = y) :
@[simp]
theorem CategoryTheory.homOfLE_comp_eqToHom {X : Type u} [Preorder X] {a b c : X} (hab : a b) (hbc : b = c) :
theorem CategoryTheory.homOfLE_comp_eqToHom_assoc {X : Type u} [Preorder X] {a b c : X} (hab : a b) (hbc : b = c) {Z : X} (h : c Z) :
@[simp]
theorem CategoryTheory.eqToHom_comp_homOfLE {X : Type u} [Preorder X] {a b c : X} (hab : a = b) (hbc : b c) :
theorem CategoryTheory.eqToHom_comp_homOfLE_assoc {X : Type u} [Preorder X] {a b c : X} (hab : a = b) (hbc : b c) {Z : X} (h : c Z) :
@[simp]
theorem CategoryTheory.homOfLE_op_comp_eqToHom {X : Type u} [Preorder X] {a b c : X} (hab : b a) (hbc : Opposite.op b = Opposite.op c) :
CategoryStruct.comp (homOfLE hab).op (eqToHom hbc) = (homOfLE ).op
@[simp]
theorem CategoryTheory.eqToHom_comp_homOfLE_op {X : Type u} [Preorder X] {a b c : X} (hab : Opposite.op a = Opposite.op b) (hbc : c b) :
CategoryStruct.comp (eqToHom hab) (homOfLE hbc).op = (homOfLE ).op

Construct a morphism in the opposite of a preorder category from an inequality.

Equations
instance CategoryTheory.uniqueToTop {X : Type u} [Preorder X] [OrderTop X] {x : X} :
Equations
instance CategoryTheory.uniqueFromBot {X : Type u} [Preorder X] [OrderBot X] {x : X} :
Equations

The equivalence of categories from the order dual of a preordered type X to the opposite category of the preorder X.

Equations
  • One or more equations did not get rendered due to their size.
@[simp]
theorem CategoryTheory.orderDualEquivalence_inverse_map (X : Type u) [Preorder X] {X✝ Y✝ : Xᵒᵖ} (f : X✝ Y✝) :
(orderDualEquivalence X).inverse.map f = homOfLE
@[simp]
theorem CategoryTheory.orderDualEquivalence_functor_obj (X : Type u) [Preorder X] (x : Xᵒᵈ) :
(orderDualEquivalence X).functor.obj x = Opposite.op (OrderDual.ofDual x)
@[simp]
theorem CategoryTheory.orderDualEquivalence_functor_map (X : Type u) [Preorder X] {X✝ Y✝ : Xᵒᵈ} (f : X✝ Y✝) :
(orderDualEquivalence X).functor.map f = (homOfLE ).op
@[simp]
theorem CategoryTheory.orderDualEquivalence_inverse_obj (X : Type u) [Preorder X] (x : Xᵒᵖ) :
(orderDualEquivalence X).inverse.obj x = OrderDual.toDual (Opposite.unop x)
@[simp]
theorem CategoryTheory.orderDualEquivalence_counitIso (X : Type u) [Preorder X] :
(orderDualEquivalence X).counitIso = Iso.refl ({ obj := fun (x : Xᵒᵖ) => OrderDual.toDual (Opposite.unop x), map := fun {X_1 Y : Xᵒᵖ} (f : X_1 Y) => homOfLE , map_id := , map_comp := }.comp { obj := fun (x : Xᵒᵈ) => Opposite.op (OrderDual.ofDual x), map := fun {X_1 Y : Xᵒᵈ} (f : X_1 Y) => (homOfLE ).op, map_id := , map_comp := })
def Monotone.functor {X : Type u} {Y : Type v} [Preorder X] [Preorder Y] {f : XY} (h : Monotone f) :

A monotone function between preorders induces a functor between the associated categories.

Equations
  • h.functor = { obj := f, map := fun {X_1 Y_1 : X} (g : X_1 Y_1) => CategoryTheory.homOfLE , map_id := , map_comp := }
@[simp]
theorem Monotone.functor_obj {X : Type u} {Y : Type v} [Preorder X] [Preorder Y] {f : XY} (h : Monotone f) :
h.functor.obj = f
instance instFullFunctor {X : Type u} {Y : Type v} [Preorder X] [Preorder Y] (f : X ↪o Y) :
.functor.Full
def OrderIso.equivalence {X : Type u} {Y : Type v} [Preorder X] [Preorder Y] (e : X ≃o Y) :
X Y

The equivalence of categories X ≌ Y induced by e : X ≃o Y.

Equations
  • One or more equations did not get rendered due to their size.
@[simp]
theorem OrderIso.equivalence_inverse {X : Type u} {Y : Type v} [Preorder X] [Preorder Y] (e : X ≃o Y) :
e.equivalence.inverse = .functor
@[simp]
theorem OrderIso.equivalence_counitIso {X : Type u} {Y : Type v} [Preorder X] [Preorder Y] (e : X ≃o Y) :
e.equivalence.counitIso = CategoryTheory.NatIso.ofComponents (fun (x : Y) => CategoryTheory.eqToIso )
@[simp]
theorem OrderIso.equivalence_functor {X : Type u} {Y : Type v} [Preorder X] [Preorder Y] (e : X ≃o Y) :
e.equivalence.functor = .functor
@[simp]
theorem OrderIso.equivalence_unitIso {X : Type u} {Y : Type v} [Preorder X] [Preorder Y] (e : X ≃o Y) :
e.equivalence.unitIso = CategoryTheory.NatIso.ofComponents (fun (x : X) => CategoryTheory.eqToIso )
theorem CategoryTheory.Functor.monotone {X : Type u} {Y : Type v} [Preorder X] [Preorder Y] (f : Functor X Y) :
Monotone f.obj

A functor between preorder categories is monotone.

theorem CategoryTheory.Iso.to_eq {X : Type u} [PartialOrder X] {x y : X} (f : x y) :
x = y

A categorical equivalence between partial orders is just an order isomorphism.

Equations
  • e.toOrderIso = { toFun := e.functor.obj, invFun := e.inverse.obj, left_inv := , right_inv := , map_rel_iff' := }
@[simp]
theorem CategoryTheory.Equivalence.toOrderIso_apply {X : Type u} {Y : Type v} [PartialOrder X] [PartialOrder Y] (e : X Y) (x : X) :
e.toOrderIso x = e.functor.obj x
@[simp]
theorem CategoryTheory.Equivalence.toOrderIso_symm_apply {X : Type u} {Y : Type v} [PartialOrder X] [PartialOrder Y] (e : X Y) (y : Y) :
e.toOrderIso.symm y = e.inverse.obj y