File: Mathlib/CategoryTheory/Limits/Shapes/Reflexive.lean

full_name: CategoryTheory.IsReflexivePair.common_section'
code: /-- The pair `f g : A ⟶ B` is reflexive if there is a morphism `B ⟶ A` which is a section for both.
-/
class IsReflexivePair (f g : A ⟶ B) : Prop where
  common_section' : ∃ s : B ⟶ A, s ≫ f = 𝟙 B ∧ s ≫ g = 𝟙 B
goal: ∃ s,
  CategoryTheory.CategoryStruct.comp s f = CategoryTheory.CategoryStruct.id B ∧
    CategoryTheory.CategoryStruct.comp s g = CategoryTheory.CategoryStruct.id B

full_name: CategoryTheory.IsReflexivePair
code: /-- The pair `f g : A ⟶ B` is reflexive if there is a morphism `B ⟶ A` which is a section for both.
-/
class IsReflexivePair (f g : A ⟶ B) : Prop where
  common_section' : ∃ s : B ⟶ A, s ≫ f = 𝟙 B ∧ s ≫ g = 𝟙 B
goal: Prop

full_name: CategoryTheory.IsReflexivePair.common_section
code: theorem IsReflexivePair.common_section (f g : A ⟶ B) [IsReflexivePair f g] :
    ∃ s : B ⟶ A, s ≫ f = 𝟙 B ∧ s ≫ g = 𝟙 B 
goal: ∃ s,
  CategoryTheory.CategoryStruct.comp s f = CategoryTheory.CategoryStruct.id B ∧
    CategoryTheory.CategoryStruct.comp s g = CategoryTheory.CategoryStruct.id B

full_name: CategoryTheory.IsCoreflexivePair
code: /--
The pair `f g : A ⟶ B` is coreflexive if there is a morphism `B ⟶ A` which is a retraction for both.
-/
class IsCoreflexivePair (f g : A ⟶ B) : Prop where
  common_retraction' : ∃ s : B ⟶ A, f ≫ s = 𝟙 A ∧ g ≫ s = 𝟙 A
goal: Prop

full_name: CategoryTheory.IsCoreflexivePair.common_retraction'
code: /--
The pair `f g : A ⟶ B` is coreflexive if there is a morphism `B ⟶ A` which is a retraction for both.
-/
class IsCoreflexivePair (f g : A ⟶ B) : Prop where
  common_retraction' : ∃ s : B ⟶ A, f ≫ s = 𝟙 A ∧ g ≫ s = 𝟙 A
goal: ∃ s,
  CategoryTheory.CategoryStruct.comp f s = CategoryTheory.CategoryStruct.id A ∧
    CategoryTheory.CategoryStruct.comp g s = CategoryTheory.CategoryStruct.id A

full_name: CategoryTheory.IsCoreflexivePair.common_retraction
code: theorem IsCoreflexivePair.common_retraction (f g : A ⟶ B) [IsCoreflexivePair f g] :
    ∃ s : B ⟶ A, f ≫ s = 𝟙 A ∧ g ≫ s = 𝟙 A 
goal: ∃ s,
  CategoryTheory.CategoryStruct.comp f s = CategoryTheory.CategoryStruct.id A ∧
    CategoryTheory.CategoryStruct.comp g s = CategoryTheory.CategoryStruct.id A

full_name: CategoryTheory.IsReflexivePair.mk'
code: theorem IsReflexivePair.mk' (s : B ⟶ A) (sf : s ≫ f = 𝟙 B) (sg : s ≫ g = 𝟙 B) :
    IsReflexivePair f g 
goal: CategoryTheory.IsReflexivePair f g

full_name: CategoryTheory.IsCoreflexivePair.mk'
code: theorem IsCoreflexivePair.mk' (s : B ⟶ A) (fs : f ≫ s = 𝟙 A) (gs : g ≫ s = 𝟙 A) :
    IsCoreflexivePair f g 
goal: CategoryTheory.IsCoreflexivePair f g

full_name: CategoryTheory.commonSection
code: /-- Get the common section for a reflexive pair. -/
noncomputable def commonSection (f g : A ⟶ B) [IsReflexivePair f g] : B ⟶ A 
goal: B ⟶ A

full_name: CategoryTheory.section_comp_left
code: @[reassoc (attr := simp)]
theorem section_comp_left (f g : A ⟶ B) [IsReflexivePair f g] : commonSection f g ≫ f = 𝟙 B 
goal: CategoryTheory.CategoryStruct.comp (CategoryTheory.commonSection f g) f = CategoryTheory.CategoryStruct.id B

full_name: CategoryTheory.section_comp_right
code: @[reassoc (attr := simp)]
theorem section_comp_right (f g : A ⟶ B) [IsReflexivePair f g] : commonSection f g ≫ g = 𝟙 B 
goal: CategoryTheory.CategoryStruct.comp (CategoryTheory.commonSection f g) g = CategoryTheory.CategoryStruct.id B

full_name: CategoryTheory.commonRetraction
code: /-- Get the common retraction for a coreflexive pair. -/
noncomputable def commonRetraction (f g : A ⟶ B) [IsCoreflexivePair f g] : B ⟶ A 
goal: B ⟶ A

full_name: CategoryTheory.left_comp_retraction
code: @[reassoc (attr := simp)]
theorem left_comp_retraction (f g : A ⟶ B) [IsCoreflexivePair f g] :
    f ≫ commonRetraction f g = 𝟙 A 
goal: CategoryTheory.CategoryStruct.comp f (CategoryTheory.commonRetraction f g) = CategoryTheory.CategoryStruct.id A

full_name: CategoryTheory.right_comp_retraction
code: @[reassoc (attr := simp)]
theorem right_comp_retraction (f g : A ⟶ B) [IsCoreflexivePair f g] :
    g ≫ commonRetraction f g = 𝟙 A 
goal: CategoryTheory.CategoryStruct.comp g (CategoryTheory.commonRetraction f g) = CategoryTheory.CategoryStruct.id A

full_name: CategoryTheory.IsKernelPair.isReflexivePair
code: /-- If `f,g` is a kernel pair for some morphism `q`, then it is reflexive. -/
theorem IsKernelPair.isReflexivePair {R : C} {f g : R ⟶ A} {q : A ⟶ B} (h : IsKernelPair q f g) :
    IsReflexivePair f g 
goal: CategoryTheory.IsReflexivePair f g

full_name: CategoryTheory.IsReflexivePair.swap
code: /-- If `f,g` is reflexive, then `g,f` is reflexive. -/
theorem IsReflexivePair.swap [IsReflexivePair f g] : IsReflexivePair g f 
goal: CategoryTheory.IsReflexivePair g f

full_name: CategoryTheory.IsCoreflexivePair.swap
code: /-- If `f,g` is coreflexive, then `g,f` is coreflexive. -/
theorem IsCoreflexivePair.swap [IsCoreflexivePair f g] : IsCoreflexivePair g f 
goal: CategoryTheory.IsCoreflexivePair g f

full_name: CategoryTheory.instIsReflexivePairMapAppCounitObj
code: /-- For an adjunction `F ⊣ G` with counit `ε`, the pair `(FGε_B, ε_FGB)` is reflexive. -/
instance (B : D) :
    IsReflexivePair (F.map (G.map (adj.counit.app B))) (adj.counit.app (F.obj (G.obj B))) 
goal: CategoryTheory.IsReflexivePair (F.map (G.map (adj.counit.app B))) (adj.counit.app (F.obj (G.obj B)))

full_name: CategoryTheory.Limits.HasReflexiveCoequalizers.has_coeq
code: /-- `C` has reflexive coequalizers if it has coequalizers for every reflexive pair. -/
class HasReflexiveCoequalizers : Prop where
  has_coeq : ∀ ⦃A B : C⦄ (f g : A ⟶ B) [IsReflexivePair f g], HasCoequalizer f g
goal: CategoryTheory.Limits.HasCoequalizer f g

full_name: CategoryTheory.Limits.HasReflexiveCoequalizers
code: /-- `C` has reflexive coequalizers if it has coequalizers for every reflexive pair. -/
class HasReflexiveCoequalizers : Prop where
  has_coeq : ∀ ⦃A B : C⦄ (f g : A ⟶ B) [IsReflexivePair f g], HasCoequalizer f g
goal: Prop

full_name: CategoryTheory.Limits.HasCoreflexiveEqualizers.has_eq
code: /-- `C` has coreflexive equalizers if it has equalizers for every coreflexive pair. -/
class HasCoreflexiveEqualizers : Prop where
  has_eq : ∀ ⦃A B : C⦄ (f g : A ⟶ B) [IsCoreflexivePair f g], HasEqualizer f g
goal: CategoryTheory.Limits.HasEqualizer f g

full_name: CategoryTheory.Limits.HasCoreflexiveEqualizers
code: /-- `C` has coreflexive equalizers if it has equalizers for every coreflexive pair. -/
class HasCoreflexiveEqualizers : Prop where
  has_eq : ∀ ⦃A B : C⦄ (f g : A ⟶ B) [IsCoreflexivePair f g], HasEqualizer f g
goal: Prop

full_name: CategoryTheory.Limits.hasCoequalizer_of_common_section
code: theorem hasCoequalizer_of_common_section [HasReflexiveCoequalizers C] {A B : C} {f g : A ⟶ B}
    (r : B ⟶ A) (rf : r ≫ f = 𝟙 _) (rg : r ≫ g = 𝟙 _) : HasCoequalizer f g 
goal: CategoryTheory.Limits.HasCoequalizer f g

full_name: CategoryTheory.Limits.hasEqualizer_of_common_retraction
code: theorem hasEqualizer_of_common_retraction [HasCoreflexiveEqualizers C] {A B : C} {f g : A ⟶ B}
    (r : B ⟶ A) (fr : f ≫ r = 𝟙 _) (gr : g ≫ r = 𝟙 _) : HasEqualizer f g 
goal: CategoryTheory.Limits.HasEqualizer f g

full_name: CategoryTheory.Limits.hasReflexiveCoequalizers_of_hasCoequalizers
code: /-- If `C` has coequalizers, then it has reflexive coequalizers. -/
instance (priority := 100) hasReflexiveCoequalizers_of_hasCoequalizers [HasCoequalizers C] :
    HasReflexiveCoequalizers C 
goal: CategoryTheory.Limits.HasReflexiveCoequalizers C

full_name: CategoryTheory.Limits.hasCoreflexiveEqualizers_of_hasEqualizers
code: /-- If `C` has equalizers, then it has coreflexive equalizers. -/
instance (priority := 100) hasCoreflexiveEqualizers_of_hasEqualizers [HasEqualizers C] :
    HasCoreflexiveEqualizers C 
goal: CategoryTheory.Limits.HasCoreflexiveEqualizers C