File: Mathlib/CategoryTheory/Adjunction/FullyFaithful.lean

full_name: CategoryTheory.Adjunction.unit_mono_of_L_faithful
code: /-- If the left adjoint is faithful, then each component of the unit is an monomorphism. -/
instance unit_mono_of_L_faithful [L.Faithful] (X : C) : Mono (h.unit.app X) 
goal: CategoryTheory.Mono (h.unit.app X)

full_name: CategoryTheory.Adjunction.unitSplitEpiOfLFull
code: /-- If the left adjoint is full, then each component of the unit is a split epimorphism.-/
noncomputable def unitSplitEpiOfLFull [L.Full] (X : C) : SplitEpi (h.unit.app X) 
goal: CategoryTheory.SplitEpi (h.unit.app X)

full_name: CategoryTheory.Adjunction.unit_isSplitEpi_of_L_full
code: /-- If the right adjoint is full, then each component of the counit is a split monomorphism. -/
instance unit_isSplitEpi_of_L_full [L.Full] (X : C) : IsSplitEpi (h.unit.app X) 
goal: CategoryTheory.IsSplitEpi (h.unit.app X)

full_name: CategoryTheory.Adjunction.instIsIsoAppUnitOfFullOfFaithful
code: instance [L.Full] [L.Faithful] (X : C) : IsIso (h.unit.app X) 
goal: CategoryTheory.IsIso (h.unit.app X)

full_name: CategoryTheory.Adjunction.unit_isIso_of_L_fully_faithful
code: /-- If the left adjoint is fully faithful, then the unit is an isomorphism. -/
instance unit_isIso_of_L_fully_faithful [L.Full] [L.Faithful] : IsIso (Adjunction.unit h) 
goal: CategoryTheory.IsIso h.unit

full_name: CategoryTheory.Adjunction.counit_epi_of_R_faithful
code: /-- If the right adjoint is faithful, then each component of the counit is an epimorphism.-/
instance counit_epi_of_R_faithful [R.Faithful] (X : D) : Epi (h.counit.app X) 
goal: CategoryTheory.Epi (h.counit.app X)

full_name: CategoryTheory.Adjunction.counitSplitMonoOfRFull
code: /-- If the right adjoint is full, then each component of the counit is a split monomorphism. -/
noncomputable def counitSplitMonoOfRFull [R.Full] (X : D) : SplitMono (h.counit.app X) 
goal: CategoryTheory.SplitMono (h.counit.app X)

full_name: CategoryTheory.Adjunction.counit_isSplitMono_of_R_full
code: /-- If the right adjoint is full, then each component of the counit is a split monomorphism. -/
instance counit_isSplitMono_of_R_full [R.Full] (X : D) : IsSplitMono (h.counit.app X) 
goal: CategoryTheory.IsSplitMono (h.counit.app X)

full_name: CategoryTheory.Adjunction.instIsIsoAppCounitOfFullOfFaithful
code: instance [R.Full] [R.Faithful] (X : D) : IsIso (h.counit.app X) 
goal: CategoryTheory.IsIso (h.counit.app X)

full_name: CategoryTheory.Adjunction.counit_isIso_of_R_fully_faithful
code: /-- If the right adjoint is fully faithful, then the counit is an isomorphism. -/
instance counit_isIso_of_R_fully_faithful [R.Full] [R.Faithful] : IsIso (Adjunction.counit h) 
goal: CategoryTheory.IsIso h.counit

full_name: CategoryTheory.Adjunction.inv_map_unit
code: /-- If the unit of an adjunction is an isomorphism, then its inverse on the image of L is given
by L whiskered with the counit. -/
@[simp]
theorem inv_map_unit {X : C} [IsIso (h.unit.app X)] :
    inv (L.map (h.unit.app X)) = h.counit.app (L.obj X) 
goal: CategoryTheory.inv (L.map (h.unit.app X)) = h.counit.app (L.obj X)

full_name: CategoryTheory.Adjunction.whiskerLeftLCounitIsoOfIsIsoUnit_inv_app
code: /-- If the unit is an isomorphism, bundle one has an isomorphism `L ⋙ R ⋙ L ≅ L`. -/
@[simps!]
noncomputable def whiskerLeftLCounitIsoOfIsIsoUnit [IsIso h.unit] : L ⋙ R ⋙ L ≅ L 
goal: h.whiskerLeftLCounitIsoOfIsIsoUnit.inv.app X = L.map (h.unit.app X)

full_name: CategoryTheory.Adjunction.whiskerLeftLCounitIsoOfIsIsoUnit
code: /-- If the unit is an isomorphism, bundle one has an isomorphism `L ⋙ R ⋙ L ≅ L`. -/
@[simps!]
noncomputable def whiskerLeftLCounitIsoOfIsIsoUnit [IsIso h.unit] : L ⋙ R ⋙ L ≅ L 
goal: L ⋙ R ⋙ L ≅ L

full_name: CategoryTheory.Adjunction.whiskerLeftLCounitIsoOfIsIsoUnit_hom_app
code: /-- If the unit is an isomorphism, bundle one has an isomorphism `L ⋙ R ⋙ L ≅ L`. -/
@[simps!]
noncomputable def whiskerLeftLCounitIsoOfIsIsoUnit [IsIso h.unit] : L ⋙ R ⋙ L ≅ L 
goal: h.whiskerLeftLCounitIsoOfIsIsoUnit.hom.app X = h.counit.app (L.obj X)

full_name: CategoryTheory.Adjunction.inv_counit_map
code: /-- If the counit of an adjunction is an isomorphism, then its inverse on the image of R is given
by R whiskered with the unit. -/
@[simp]
theorem inv_counit_map {X : D} [IsIso (h.counit.app X)] :
    inv (R.map (h.counit.app X)) = h.unit.app (R.obj X) 
goal: CategoryTheory.inv (R.map (h.counit.app X)) = h.unit.app (R.obj X)

full_name: CategoryTheory.Adjunction.whiskerLeftRUnitIsoOfIsIsoCounit_inv_app
code: /-- If the counit of an is an isomorphism, one has an isomorphism `(R ⋙ L ⋙ R) ≅ R`. -/
@[simps!]
noncomputable def whiskerLeftRUnitIsoOfIsIsoCounit [IsIso h.counit] : R ⋙ L ⋙ R ≅ R 
goal: h.whiskerLeftRUnitIsoOfIsIsoCounit.inv.app X = h.unit.app (R.obj X)

full_name: CategoryTheory.Adjunction.whiskerLeftRUnitIsoOfIsIsoCounit_hom_app
code: /-- If the counit of an is an isomorphism, one has an isomorphism `(R ⋙ L ⋙ R) ≅ R`. -/
@[simps!]
noncomputable def whiskerLeftRUnitIsoOfIsIsoCounit [IsIso h.counit] : R ⋙ L ⋙ R ≅ R 
goal: h.whiskerLeftRUnitIsoOfIsIsoCounit.hom.app X = R.map (h.counit.app X)

full_name: CategoryTheory.Adjunction.whiskerLeftRUnitIsoOfIsIsoCounit
code: /-- If the counit of an is an isomorphism, one has an isomorphism `(R ⋙ L ⋙ R) ≅ R`. -/
@[simps!]
noncomputable def whiskerLeftRUnitIsoOfIsIsoCounit [IsIso h.counit] : R ⋙ L ⋙ R ≅ R 
goal: R ⋙ L ⋙ R ≅ R

full_name: CategoryTheory.Adjunction.faithful_L_of_mono_unit_app
code: /-- If each component of the unit is a monomorphism, then the left adjoint is faithful. -/
lemma faithful_L_of_mono_unit_app [∀ X, Mono (h.unit.app X)] : L.Faithful 
goal: L.Faithful

full_name: CategoryTheory.Adjunction.full_L_of_isSplitEpi_unit_app
code: /-- If each component of the unit is a split epimorphism, then the left adjoint is full. -/
lemma full_L_of_isSplitEpi_unit_app [∀ X, IsSplitEpi (h.unit.app X)] : L.Full 
goal: L.Full

full_name: CategoryTheory.Adjunction.fullyFaithfulLOfIsIsoUnit
code: /-- If the unit is an isomorphism, then the left adjoint is fully faithful. -/
noncomputable def fullyFaithfulLOfIsIsoUnit [IsIso h.unit] : L.FullyFaithful 
goal: L.FullyFaithful

full_name: CategoryTheory.Adjunction.faithful_R_of_epi_counit_app
code: /-- If each component of the counit is an epimorphism, then the right adjoint is faithful. -/
lemma faithful_R_of_epi_counit_app [∀ X, Epi (h.counit.app X)] : R.Faithful 
goal: R.Faithful

full_name: CategoryTheory.Adjunction.full_R_of_isSplitMono_counit_app
code: /-- If each component of the counit is a split monomorphism, then the right adjoint is full. -/
lemma full_R_of_isSplitMono_counit_app [∀ X, IsSplitMono (h.counit.app X)] : R.Full 
goal: R.Full

full_name: CategoryTheory.Adjunction.fullyFaithfulROfIsIsoCounit
code: /-- If the counit is an isomorphism, then the right adjoint is fully faithful. -/
noncomputable def fullyFaithfulROfIsIsoCounit [IsIso h.counit] : R.FullyFaithful 
goal: R.FullyFaithful

full_name: CategoryTheory.Adjunction.whiskerLeft_counit_iso_of_L_fully_faithful
code: instance whiskerLeft_counit_iso_of_L_fully_faithful [L.Full] [L.Faithful] :
    IsIso (whiskerLeft L h.counit) 
goal: CategoryTheory.IsIso (CategoryTheory.whiskerLeft L h.counit)

full_name: CategoryTheory.Adjunction.whiskerRight_counit_iso_of_L_fully_faithful
code: instance whiskerRight_counit_iso_of_L_fully_faithful [L.Full] [L.Faithful] :
    IsIso (whiskerRight h.counit R) 
goal: CategoryTheory.IsIso (CategoryTheory.whiskerRight h.counit R)

full_name: CategoryTheory.Adjunction.whiskerLeft_unit_iso_of_R_fully_faithful
code: instance whiskerLeft_unit_iso_of_R_fully_faithful [R.Full] [R.Faithful] :
    IsIso (whiskerLeft R h.unit) 
goal: CategoryTheory.IsIso (CategoryTheory.whiskerLeft R h.unit)

full_name: CategoryTheory.Adjunction.whiskerRight_unit_iso_of_R_fully_faithful
code: instance whiskerRight_unit_iso_of_R_fully_faithful [R.Full] [R.Faithful] :
    IsIso (whiskerRight h.unit L) 
goal: CategoryTheory.IsIso (CategoryTheory.whiskerRight h.unit L)

full_name: CategoryTheory.Adjunction.instIsIsoAppCounitObjOfFaithfulOfFull
code: instance [L.Faithful] [L.Full] {Y : C} : IsIso (h.counit.app (L.obj Y)) 
goal: CategoryTheory.IsIso (h.counit.app (L.obj Y))

full_name: CategoryTheory.Adjunction.instIsIsoMapAppCounitOfFaithfulOfFull
code: instance [L.Faithful] [L.Full] {Y : D} : IsIso (R.map (h.counit.app Y)) 
goal: CategoryTheory.IsIso (R.map (h.counit.app Y))

full_name: CategoryTheory.Adjunction.isIso_counit_app_iff_mem_essImage
code: lemma isIso_counit_app_iff_mem_essImage [L.Faithful] [L.Full] {X : D} :
    IsIso (h.counit.app X) ↔ X ∈ L.essImage 
goal: CategoryTheory.IsIso (h.counit.app X) ↔ X ∈ L.essImage

full_name: CategoryTheory.Adjunction.mem_essImage_of_counit_isIso
code: lemma mem_essImage_of_counit_isIso (A : D)
    [IsIso (h.counit.app A)] : A ∈ L.essImage 
goal: A ∈ L.essImage

full_name: CategoryTheory.Adjunction.isIso_counit_app_of_iso
code: lemma isIso_counit_app_of_iso [L.Faithful] [L.Full] {X : D} {Y : C} (e : X ≅ L.obj Y) :
    IsIso (h.counit.app X) 
goal: CategoryTheory.IsIso (h.counit.app X)

full_name: CategoryTheory.Adjunction.instIsIsoAppUnitObjOfFaithfulOfFull
code: instance [R.Faithful] [R.Full] {Y : D} : IsIso (h.unit.app (R.obj Y)) 
goal: CategoryTheory.IsIso (h.unit.app (R.obj Y))

full_name: CategoryTheory.Adjunction.instIsIsoMapAppUnitOfFaithfulOfFull
code: instance [R.Faithful] [R.Full] {X : C} : IsIso (L.map (h.unit.app X)) 
goal: CategoryTheory.IsIso (L.map (h.unit.app X))

full_name: CategoryTheory.Adjunction.isIso_unit_app_iff_mem_essImage
code: lemma isIso_unit_app_iff_mem_essImage [R.Faithful] [R.Full] {Y : C} :
    IsIso (h.unit.app Y) ↔ Y ∈ R.essImage 
goal: CategoryTheory.IsIso (h.unit.app Y) ↔ Y ∈ R.essImage

full_name: CategoryTheory.Adjunction.mem_essImage_of_unit_isIso
code: /-- If `η_A` is an isomorphism, then `A` is in the essential image of `i`. -/
theorem mem_essImage_of_unit_isIso (A : C)
    [IsIso (h.unit.app A)] : A ∈ R.essImage 
goal: A ∈ R.essImage

full_name: CategoryTheory.Adjunction.isIso_unit_app_of_iso
code: lemma isIso_unit_app_of_iso [R.Faithful] [R.Full] {X : D} {Y : C} (e : Y ≅ R.obj X) :
    IsIso (h.unit.app Y) 
goal: CategoryTheory.IsIso (h.unit.app Y)

full_name: CategoryTheory.Adjunction.instIsIsoFunctorUnitOfIsEquivalence
code: instance [R.IsEquivalence] : IsIso h.unit 
goal: CategoryTheory.IsIso h.unit

full_name: CategoryTheory.Adjunction.instIsIsoFunctorCounitOfIsEquivalence
code: instance [L.IsEquivalence] : IsIso h.counit 
goal: CategoryTheory.IsIso h.counit

full_name: CategoryTheory.Adjunction.isEquivalence_left_of_isEquivalence_right
code: lemma isEquivalence_left_of_isEquivalence_right (h : L ⊣ R) [R.IsEquivalence] : L.IsEquivalence 
goal: L.IsEquivalence

full_name: CategoryTheory.Adjunction.isEquivalence_right_of_isEquivalence_left
code: lemma isEquivalence_right_of_isEquivalence_left (h : L ⊣ R) [L.IsEquivalence] : R.IsEquivalence 
goal: R.IsEquivalence

full_name: CategoryTheory.Adjunction.instIsIsoFunctorUnitOfIsEquivalence_1
code: instance [L.IsEquivalence] : IsIso h.unit 
goal: CategoryTheory.IsIso h.unit

full_name: CategoryTheory.Adjunction.instIsIsoFunctorCounitOfIsEquivalence_1
code: instance [R.IsEquivalence] : IsIso h.counit 
goal: CategoryTheory.IsIso h.counit