Lifting properties #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
This file defines the lifting property of two morphisms in a category and shows basic properties of this notion.
Main results #
- has_lifting_property: the definition of the lifting property
Tags #
lifting property
@TODO :
- define llp/rlp with respect to a morphism_property
- retracts, direct/inverse images, (co)products, adjunctions
@[class]
    
structure
category_theory.has_lifting_property
    {C : Type u_1}
    [category_theory.category C]
    {A B X Y : C}
    (i : A ⟶ B)
    (p : X ⟶ Y) :
    Prop
- sq_has_lift : ∀ {f : A ⟶ X} {g : B ⟶ Y} (sq : category_theory.comm_sq f i p g), sq.has_lift
has_lifting_property i p means that i has the left lifting
property with respect to p, or equivalently that p has
the right lifting property with respect to i.
@[protected, instance]
    
def
category_theory.sq_has_lift_of_has_lifting_property
    {C : Type u_1}
    [category_theory.category C]
    {A B X Y : C}
    (i : A ⟶ B)
    (p : X ⟶ Y)
    {f : A ⟶ X}
    {g : B ⟶ Y}
    (sq : category_theory.comm_sq f i p g)
    [hip : category_theory.has_lifting_property i p] :
sq.has_lift
    
theorem
category_theory.has_lifting_property.op
    {C : Type u_1}
    [category_theory.category C]
    {A B X Y : C}
    {i : A ⟶ B}
    {p : X ⟶ Y}
    (h : category_theory.has_lifting_property i p) :
    
theorem
category_theory.has_lifting_property.unop
    {C : Type u_1}
    [category_theory.category C]
    {A B X Y : Cᵒᵖ}
    {i : A ⟶ B}
    {p : X ⟶ Y}
    (h : category_theory.has_lifting_property i p) :
    
theorem
category_theory.has_lifting_property.iff_op
    {C : Type u_1}
    [category_theory.category C]
    {A B X Y : C}
    {i : A ⟶ B}
    {p : X ⟶ Y} :
    
theorem
category_theory.has_lifting_property.iff_unop
    {C : Type u_1}
    [category_theory.category C]
    {A B X Y : Cᵒᵖ}
    (i : A ⟶ B)
    (p : X ⟶ Y) :
@[protected, instance]
    
def
category_theory.has_lifting_property.of_left_iso
    {C : Type u_1}
    [category_theory.category C]
    {A B X Y : C}
    (i : A ⟶ B)
    (p : X ⟶ Y)
    [category_theory.is_iso i] :
@[protected, instance]
    
def
category_theory.has_lifting_property.of_right_iso
    {C : Type u_1}
    [category_theory.category C]
    {A B X Y : C}
    (i : A ⟶ B)
    (p : X ⟶ Y)
    [category_theory.is_iso p] :
@[protected, instance]
    
def
category_theory.has_lifting_property.of_comp_left
    {C : Type u_1}
    [category_theory.category C]
    {A B B' X Y : C}
    (i : A ⟶ B)
    (i' : B ⟶ B')
    (p : X ⟶ Y)
    [category_theory.has_lifting_property i p]
    [category_theory.has_lifting_property i' p] :
category_theory.has_lifting_property (i ≫ i') p
@[protected, instance]
    
def
category_theory.has_lifting_property.of_comp_right
    {C : Type u_1}
    [category_theory.category C]
    {A B X Y Y' : C}
    (i : A ⟶ B)
    (p : X ⟶ Y)
    (p' : Y ⟶ Y')
    [category_theory.has_lifting_property i p]
    [category_theory.has_lifting_property i p'] :
category_theory.has_lifting_property i (p ≫ p')
    
theorem
category_theory.has_lifting_property.of_arrow_iso_left
    {C : Type u_1}
    [category_theory.category C]
    {A B A' B' X Y : C}
    {i : A ⟶ B}
    {i' : A' ⟶ B'}
    (e : category_theory.arrow.mk i ≅ category_theory.arrow.mk i')
    (p : X ⟶ Y)
    [hip : category_theory.has_lifting_property i p] :
    
theorem
category_theory.has_lifting_property.of_arrow_iso_right
    {C : Type u_1}
    [category_theory.category C]
    {A B X Y X' Y' : C}
    (i : A ⟶ B)
    {p : X ⟶ Y}
    {p' : X' ⟶ Y'}
    (e : category_theory.arrow.mk p ≅ category_theory.arrow.mk p')
    [hip : category_theory.has_lifting_property i p] :
    
theorem
category_theory.has_lifting_property.iff_of_arrow_iso_left
    {C : Type u_1}
    [category_theory.category C]
    {A B A' B' X Y : C}
    {i : A ⟶ B}
    {i' : A' ⟶ B'}
    (e : category_theory.arrow.mk i ≅ category_theory.arrow.mk i')
    (p : X ⟶ Y) :
    
theorem
category_theory.has_lifting_property.iff_of_arrow_iso_right
    {C : Type u_1}
    [category_theory.category C]
    {A B X Y X' Y' : C}
    (i : A ⟶ B)
    {p : X ⟶ Y}
    {p' : X' ⟶ Y'}
    (e : category_theory.arrow.mk p ≅ category_theory.arrow.mk p') :