mathlib documentation

category_theory.functor.fully_faithful

Full and faithful functors #

We define typeclasses full and faithful, decorating functors.

Use F.map_injective to retrieve the fact that F.map is injective when [faithful F], and F.preimage to obtain preimages of morphisms when [full F].

We prove some basic "cancellation" lemmas for full and/or faithful functors.

See category_theory.equivalence for the fact that a functor is an equivalence if and only if it is fully faithful and essentially surjective.

@[class]
structure category_theory.full {C : Type u₁} [category_theory.category C] {D : Type u₂} [category_theory.category D] (F : C D) :
Type (max u₁ v₁ v₂)

A functor F : C ⥤ D is full if for each X Y : C, F.map is surjective. In fact, we use a constructive definition, so the full F typeclass contains data, specifying a particular preimage of each f : F.obj X ⟶ F.obj Y.

See https://stacks.math.columbia.edu/tag/001C.

Instances
@[simp]
theorem category_theory.full.witness {C : Type u₁} [category_theory.category C] {D : Type u₂} [category_theory.category D] {F : C D} [self : category_theory.full F] {X Y : C} (f : F.obj X F.obj Y) :
def category_theory.functor.preimage {C : Type u₁} [category_theory.category C] {D : Type u₂} [category_theory.category D] (F : C D) [category_theory.full F] {X Y : C} (f : F.obj X F.obj Y) :
X Y

The specified preimage of a morphism under a full functor.

Equations
@[simp]
theorem category_theory.functor.image_preimage {C : Type u₁} [category_theory.category C] {D : Type u₂} [category_theory.category D] (F : C D) [category_theory.full F] {X Y : C} (f : F.obj X F.obj Y) :
F.map (F.preimage f) = f
@[simp]
theorem category_theory.preimage_id {C : Type u₁} [category_theory.category C] {D : Type u₂} [category_theory.category D] {F : C D} [category_theory.full F] [category_theory.faithful F] {X : C} :
F.preimage (𝟙 (F.obj X)) = 𝟙 X
@[simp]
theorem category_theory.preimage_comp {C : Type u₁} [category_theory.category C] {D : Type u₂} [category_theory.category D] {F : C D} [category_theory.full F] [category_theory.faithful F] {X Y Z : C} (f : F.obj X F.obj Y) (g : F.obj Y F.obj Z) :
F.preimage (f g) = F.preimage f F.preimage g
@[simp]
theorem category_theory.preimage_map {C : Type u₁} [category_theory.category C] {D : Type u₂} [category_theory.category D] {F : C D} [category_theory.full F] [category_theory.faithful F] {X Y : C} (f : X Y) :
F.preimage (F.map f) = f
def category_theory.preimage_iso {C : Type u₁} [category_theory.category C] {D : Type u₂} [category_theory.category D] {F : C D} [category_theory.full F] [category_theory.faithful F] {X Y : C} (f : F.obj X F.obj Y) :
X Y

If F : C ⥤ D is fully faithful, every isomorphism F.obj X ≅ F.obj Y has a preimage.

Equations
@[simp]
@[simp]

If the image of a morphism under a fully faithful functor in an isomorphism, then the original morphisms is also an isomorphism.

def category_theory.equiv_of_fully_faithful {C : Type u₁} [category_theory.category C] {D : Type u₂} [category_theory.category D] (F : C D) [category_theory.full F] [category_theory.faithful F] {X Y : C} :
(X Y) (F.obj X F.obj Y)

If F is fully faithful, we have an equivalence of hom-sets X ⟶ Y and F X ⟶ F Y.

Equations
def category_theory.iso_equiv_of_fully_faithful {C : Type u₁} [category_theory.category C] {D : Type u₂} [category_theory.category D] (F : C D) [category_theory.full F] [category_theory.faithful F] {X Y : C} :
(X Y) (F.obj X F.obj Y)

If F is fully faithful, we have an equivalence of iso-sets X ≅ Y and F X ≅ F Y.

Equations
def category_theory.nat_trans_of_comp_fully_faithful {C : Type u₁} [category_theory.category C] {D : Type u₂} [category_theory.category D] {E : Type u_1} [category_theory.category E] {F G : C D} (H : D E) [category_theory.full H] [category_theory.faithful H] (α : F H G H) :
F G

We can construct a natural transformation between functors by constructing a natural transformation between those functors composed with a fully faithful functor.

Equations
def category_theory.nat_iso_of_comp_fully_faithful {C : Type u₁} [category_theory.category C] {D : Type u₂} [category_theory.category D] {E : Type u_1} [category_theory.category E] {F G : C D} (H : D E) [category_theory.full H] [category_theory.faithful H] (i : F H G H) :
F G

We can construct a natural isomorphism between functors by constructing a natural isomorphism between those functors composed with a fully faithful functor.

Equations
@[protected, instance]
Equations
@[protected, instance]
@[protected, instance]
theorem category_theory.faithful.of_comp {C : Type u₁} [category_theory.category C] {D : Type u₂} [category_theory.category D] {E : Type u₃} [category_theory.category E] (F : C D) (G : D E) [category_theory.faithful (F G)] :
def category_theory.full.of_iso {C : Type u₁} [category_theory.category C] {D : Type u₂} [category_theory.category D] {F F' : C D} [category_theory.full F] (α : F F') :

If F is full, and naturally isomorphic to some F', then F' is also full.

Equations
theorem category_theory.faithful.of_comp_iso {C : Type u₁} [category_theory.category C] {D : Type u₂} [category_theory.category D] {E : Type u₃} [category_theory.category E] {F : C D} {G : D E} {H : C E} [ℋ : category_theory.faithful H] (h : F G H) :
theorem category_theory.iso.faithful_of_comp {C : Type u₁} [category_theory.category C] {D : Type u₂} [category_theory.category D] {E : Type u₃} [category_theory.category E] {F : C D} {G : D E} {H : C E} [ℋ : category_theory.faithful H] (h : F G H) :

Alias of faithful.of_comp_iso.

theorem category_theory.faithful.of_comp_eq {C : Type u₁} [category_theory.category C] {D : Type u₂} [category_theory.category D] {E : Type u₃} [category_theory.category E] {F : C D} {G : D E} {H : C E} [ℋ : category_theory.faithful H] (h : F G = H) :
theorem eq.faithful_of_comp {C : Type u₁} [category_theory.category C] {D : Type u₂} [category_theory.category D] {E : Type u₃} [category_theory.category E] {F : C D} {G : D E} {H : C E} [ℋ : category_theory.faithful H] (h : F G = H) :

Alias of faithful.of_comp_eq.

@[protected]
def category_theory.faithful.div {C : Type u₁} [category_theory.category C] {D : Type u₂} [category_theory.category D] {E : Type u₃} [category_theory.category E] (F : C E) (G : D E) [category_theory.faithful G] (obj : C → D) (h_obj : ∀ (X : C), G.obj (obj X) = F.obj X) (map : Π {X Y : C}, (X Y)(obj X obj Y)) (h_map : ∀ {X Y : C} {f : X Y}, G.map (map f) == F.map f) :
C D

“Divide” a functor by a faithful functor.

Equations
theorem category_theory.faithful.div_comp {C : Type u₁} [category_theory.category C] {D : Type u₂} [category_theory.category D] {E : Type u₃} [category_theory.category E] (F : C E) [category_theory.faithful F] (G : D E) [category_theory.faithful G] (obj : C → D) (h_obj : ∀ (X : C), G.obj (obj X) = F.obj X) (map : Π {X Y : C}, (X Y)(obj X obj Y)) (h_map : ∀ {X Y : C} {f : X Y}, G.map (map f) == F.map f) :
category_theory.faithful.div F G obj h_obj map h_map G = F
theorem category_theory.faithful.div_faithful {C : Type u₁} [category_theory.category C] {D : Type u₂} [category_theory.category D] {E : Type u₃} [category_theory.category E] (F : C E) [category_theory.faithful F] (G : D E) [category_theory.faithful G] (obj : C → D) (h_obj : ∀ (X : C), G.obj (obj X) = F.obj X) (map : Π {X Y : C}, (X Y)(obj X obj Y)) (h_map : ∀ {X Y : C} {f : X Y}, G.map (map f) == F.map f) :
@[protected, instance]
def category_theory.full.comp {C : Type u₁} [category_theory.category C] {D : Type u₂} [category_theory.category D] {E : Type u₃} [category_theory.category E] (F : C D) (G : D E) [category_theory.full F] [category_theory.full G] :
Equations

If F ⋙ G is full and G is faithful, then F is full.

Equations
def category_theory.full.of_comp_faithful_iso {C : Type u₁} [category_theory.category C] {D : Type u₂} [category_theory.category D] {E : Type u₃} [category_theory.category E] {F : C D} {G : D E} {H : C E} [category_theory.full H] [category_theory.faithful G] (h : F G H) :

If F ⋙ G is full and G is faithful, then F is full.

Equations
def category_theory.fully_faithful_cancel_right {C : Type u₁} [category_theory.category C] {D : Type u₂} [category_theory.category D] {E : Type u₃} [category_theory.category E] {F G : C D} (H : D E) [category_theory.full H] [category_theory.faithful H] (comp_iso : F H G H) :
F G

Given a natural isomorphism between F ⋙ H and G ⋙ H for a fully faithful functor H, we can 'cancel' it to give a natural iso between F and G.

Equations
@[simp]
theorem category_theory.fully_faithful_cancel_right_hom_app {C : Type u₁} [category_theory.category C] {D : Type u₂} [category_theory.category D] {E : Type u₃} [category_theory.category E] {F G : C D} {H : D E} [category_theory.full H] [category_theory.faithful H] (comp_iso : F H G H) (X : C) :
@[simp]
theorem category_theory.fully_faithful_cancel_right_inv_app {C : Type u₁} [category_theory.category C] {D : Type u₂} [category_theory.category D] {E : Type u₃} [category_theory.category E] {F G : C D} {H : D E} [category_theory.full H] [category_theory.faithful H] (comp_iso : F H G H) (X : C) :