ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
-- CategoryTheory.Dial.instMonoidalCategoryStruct_leftUnitor_hom_f
@[simps!]
instance : MonoidalCategoryStruct (Dial C) 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] [CategoryTheory.Limits.HasFiniteProducts C] [CategoryTheory.Limits.HasPullbacks C] (X : CategoryTheory.Dial C)
Goal: (CategoryTheory.MonoidalCategory.leftUnitor X).hom.f = CategoryTheory.Limits.prod.snd
-- CategoryTheory.Dial.instMonoidalCategoryStruct_rightUnitor_inv_f
@[simps!]
instance : MonoidalCategoryStruct (Dial C) 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] [CategoryTheory.Limits.HasFiniteProducts C] [CategoryTheory.Limits.HasPullbacks C] (X : CategoryTheory.Dial C)
Goal: (CategoryTheory.MonoidalCategory.rightUnitor X).inv.f =
  CategoryTheory.Limits.prod.lift (CategoryTheory.CategoryStruct.id X.src) (CategoryTheory.Limits.terminal.from X.src)
-- CategoryTheory.Dial.instMonoidalCategoryStruct_associator_inv_F
@[simps!]
instance : MonoidalCategoryStruct (Dial C) 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] [CategoryTheory.Limits.HasFiniteProducts C] [CategoryTheory.Limits.HasPullbacks C] (X Y Z : CategoryTheory.Dial C)
Goal: (CategoryTheory.MonoidalCategory.associator X Y Z).inv.F =
  CategoryTheory.Limits.prod.lift
    (CategoryTheory.CategoryStruct.comp CategoryTheory.Limits.prod.snd
      (CategoryTheory.CategoryStruct.comp CategoryTheory.Limits.prod.fst CategoryTheory.Limits.prod.fst))
    (CategoryTheory.Limits.prod.lift
      (CategoryTheory.CategoryStruct.comp CategoryTheory.Limits.prod.snd
        (CategoryTheory.CategoryStruct.comp CategoryTheory.Limits.prod.fst CategoryTheory.Limits.prod.snd))
      (CategoryTheory.CategoryStruct.comp CategoryTheory.Limits.prod.snd CategoryTheory.Limits.prod.snd))
-- CategoryTheory.Dial.instMonoidalCategoryStruct_rightUnitor_hom_f
@[simps!]
instance : MonoidalCategoryStruct (Dial C) 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] [CategoryTheory.Limits.HasFiniteProducts C] [CategoryTheory.Limits.HasPullbacks C] (X : CategoryTheory.Dial C)
Goal: (CategoryTheory.MonoidalCategory.rightUnitor X).hom.f = CategoryTheory.Limits.prod.fst
-- CategoryTheory.Dial.tensor_id
theorem tensor_id (X₁ X₂ : Dial C) : (𝟙 X₁ ⊗ 𝟙 X₂ : _ ⟶ _) = 𝟙 (X₁ ⊗ X₂ : Dial C) 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] [CategoryTheory.Limits.HasFiniteProducts C] [CategoryTheory.Limits.HasPullbacks C] (X₁ X₂ : CategoryTheory.Dial C)
Goal: CategoryTheory.MonoidalCategory.tensorHom (CategoryTheory.CategoryStruct.id X₁) (CategoryTheory.CategoryStruct.id X₂) =
  CategoryTheory.CategoryStruct.id (CategoryTheory.MonoidalCategory.tensorObj X₁ X₂)
-- CategoryTheory.Dial.tensor_comp
theorem tensor_comp {X₁ Y₁ Z₁ X₂ Y₂ Z₂ : Dial C}
    (f₁ : X₁ ⟶ Y₁) (f₂ : X₂ ⟶ Y₂) (g₁ : Y₁ ⟶ Z₁) (g₂ : Y₂ ⟶ Z₂) :
    tensorHom (f₁ ≫ g₁) (f₂ ≫ g₂) = tensorHom f₁ f₂ ≫ tensorHom g₁ g₂ 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] [CategoryTheory.Limits.HasFiniteProducts C] [CategoryTheory.Limits.HasPullbacks C] {X₁ Y₁ Z₁ X₂ Y₂ Z₂ : CategoryTheory.Dial C} (f₁ : X₁ ⟶ Y₁) (f₂ : X₂ ⟶ Y₂) (g₁ : Y₁ ⟶ Z₁) (g₂ : Y₂ ⟶ Z₂)
Goal: CategoryTheory.Dial.tensorHom (CategoryTheory.CategoryStruct.comp f₁ g₁) (CategoryTheory.CategoryStruct.comp f₂ g₂) =
  CategoryTheory.CategoryStruct.comp (CategoryTheory.Dial.tensorHom f₁ f₂) (CategoryTheory.Dial.tensorHom g₁ g₂)
-- CategoryTheory.Dial.associator_naturality
theorem associator_naturality {X₁ X₂ X₃ Y₁ Y₂ Y₃ : Dial C}
    (f₁ : X₁ ⟶ Y₁) (f₂ : X₂ ⟶ Y₂) (f₃ : X₃ ⟶ Y₃) :
    tensorHom (tensorHom f₁ f₂) f₃ ≫ (associator Y₁ Y₂ Y₃).hom =
    (associator X₁ X₂ X₃).hom ≫ tensorHom f₁ (tensorHom f₂ f₃) 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] [CategoryTheory.Limits.HasFiniteProducts C] [CategoryTheory.Limits.HasPullbacks C] {X₁ X₂ X₃ Y₁ Y₂ Y₃ : CategoryTheory.Dial C} (f₁ : X₁ ⟶ Y₁) (f₂ : X₂ ⟶ Y₂) (f₃ : X₃ ⟶ Y₃)
Goal: CategoryTheory.CategoryStruct.comp (CategoryTheory.Dial.tensorHom (CategoryTheory.Dial.tensorHom f₁ f₂) f₃)
    (Y₁.associator Y₂ Y₃).hom =
  CategoryTheory.CategoryStruct.comp (X₁.associator X₂ X₃).hom
    (CategoryTheory.Dial.tensorHom f₁ (CategoryTheory.Dial.tensorHom f₂ f₃))
-- CategoryTheory.Dial.leftUnitor_naturality
theorem leftUnitor_naturality {X Y : Dial C} (f : X ⟶ Y) :
    (𝟙 (𝟙_ (Dial C)) ⊗ f) ≫ (λ_ Y).hom = (λ_ X).hom ≫ f 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] [CategoryTheory.Limits.HasFiniteProducts C] [CategoryTheory.Limits.HasPullbacks C] {X Y : CategoryTheory.Dial C} (f : X ⟶ Y)
Goal: CategoryTheory.CategoryStruct.comp
    (CategoryTheory.MonoidalCategory.tensorHom (CategoryTheory.CategoryStruct.id (𝟙_ (CategoryTheory.Dial C))) f)
    (CategoryTheory.MonoidalCategory.leftUnitor Y).hom =
  CategoryTheory.CategoryStruct.comp (CategoryTheory.MonoidalCategory.leftUnitor X).hom f
-- CategoryTheory.Dial.rightUnitor_naturality
theorem rightUnitor_naturality {X Y : Dial C} (f : X ⟶ Y) :
    (f ⊗ 𝟙 (𝟙_ (Dial C))) ≫ (ρ_ Y).hom = (ρ_ X).hom ≫ f 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] [CategoryTheory.Limits.HasFiniteProducts C] [CategoryTheory.Limits.HasPullbacks C] {X Y : CategoryTheory.Dial C} (f : X ⟶ Y)
Goal: CategoryTheory.CategoryStruct.comp
    (CategoryTheory.MonoidalCategory.tensorHom f (CategoryTheory.CategoryStruct.id (𝟙_ (CategoryTheory.Dial C))))
    (CategoryTheory.MonoidalCategory.rightUnitor Y).hom =
  CategoryTheory.CategoryStruct.comp (CategoryTheory.MonoidalCategory.rightUnitor X).hom f
-- CategoryTheory.Dial.pentagon
theorem pentagon (W X Y Z : Dial C) :
    (tensorHom (associator W X Y).hom (𝟙 Z)) ≫ (associator W (tensorObj X Y) Z).hom ≫
      (tensorHom (𝟙 W) (associator X Y Z).hom) =
    (associator (tensorObj W X) Y Z).hom ≫ (associator W X (tensorObj Y Z)).hom 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] [CategoryTheory.Limits.HasFiniteProducts C] [CategoryTheory.Limits.HasPullbacks C] (W X Y Z : CategoryTheory.Dial C)
Goal: CategoryTheory.CategoryStruct.comp
    (CategoryTheory.Dial.tensorHom (W.associator X Y).hom (CategoryTheory.CategoryStruct.id Z))
    (CategoryTheory.CategoryStruct.comp (W.associator (X.tensorObj Y) Z).hom
      (CategoryTheory.Dial.tensorHom (CategoryTheory.CategoryStruct.id W) (X.associator Y Z).hom)) =
  CategoryTheory.CategoryStruct.comp ((W.tensorObj X).associator Y Z).hom (W.associator X (Y.tensorObj Z)).hom
-- CategoryTheory.Dial.triangle
theorem triangle (X Y : Dial C) :
    (associator X (𝟙_ (Dial C)) Y).hom ≫ tensorHom (𝟙 X) (leftUnitor Y).hom =
    tensorHom (rightUnitor X).hom (𝟙 Y) 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] [CategoryTheory.Limits.HasFiniteProducts C] [CategoryTheory.Limits.HasPullbacks C] (X Y : CategoryTheory.Dial C)
Goal: CategoryTheory.CategoryStruct.comp (X.associator (𝟙_ (CategoryTheory.Dial C)) Y).hom
    (CategoryTheory.Dial.tensorHom (CategoryTheory.CategoryStruct.id X) Y.leftUnitor.hom) =
  CategoryTheory.Dial.tensorHom X.rightUnitor.hom (CategoryTheory.CategoryStruct.id Y)
-- CategoryTheory.Dial.braiding_hom_F
@[simps!] def braiding (X Y : Dial C) : tensorObj X Y ≅ tensorObj Y X 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] [CategoryTheory.Limits.HasFiniteProducts C] [CategoryTheory.Limits.HasPullbacks C] (X Y : CategoryTheory.Dial C)
Goal: (X.braiding Y).hom.F =
  CategoryTheory.Limits.prod.lift
    (CategoryTheory.CategoryStruct.comp CategoryTheory.Limits.prod.snd CategoryTheory.Limits.prod.snd)
    (CategoryTheory.CategoryStruct.comp CategoryTheory.Limits.prod.snd CategoryTheory.Limits.prod.fst)
-- CategoryTheory.Dial.braiding_hom_f
@[simps!] def braiding (X Y : Dial C) : tensorObj X Y ≅ tensorObj Y X 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] [CategoryTheory.Limits.HasFiniteProducts C] [CategoryTheory.Limits.HasPullbacks C] (X Y : CategoryTheory.Dial C)
Goal: (X.braiding Y).hom.f = CategoryTheory.Limits.prod.lift CategoryTheory.Limits.prod.snd CategoryTheory.Limits.prod.fst
-- CategoryTheory.Dial.braiding_inv_F
@[simps!] def braiding (X Y : Dial C) : tensorObj X Y ≅ tensorObj Y X 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] [CategoryTheory.Limits.HasFiniteProducts C] [CategoryTheory.Limits.HasPullbacks C] (X Y : CategoryTheory.Dial C)
Goal: (X.braiding Y).inv.F =
  CategoryTheory.Limits.prod.lift
    (CategoryTheory.CategoryStruct.comp CategoryTheory.Limits.prod.snd CategoryTheory.Limits.prod.snd)
    (CategoryTheory.CategoryStruct.comp CategoryTheory.Limits.prod.snd CategoryTheory.Limits.prod.fst)
-- CategoryTheory.Dial.braiding_inv_f
@[simps!] def braiding (X Y : Dial C) : tensorObj X Y ≅ tensorObj Y X 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] [CategoryTheory.Limits.HasFiniteProducts C] [CategoryTheory.Limits.HasPullbacks C] (X Y : CategoryTheory.Dial C)
Goal: (X.braiding Y).inv.f = CategoryTheory.Limits.prod.lift CategoryTheory.Limits.prod.snd CategoryTheory.Limits.prod.fst
-- CategoryTheory.Dial.symmetry
theorem symmetry (X Y : Dial C) :
    (braiding X Y).hom ≫ (braiding Y X).hom = 𝟙 (tensorObj X Y) 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] [CategoryTheory.Limits.HasFiniteProducts C] [CategoryTheory.Limits.HasPullbacks C] (X Y : CategoryTheory.Dial C)
Goal: CategoryTheory.CategoryStruct.comp (X.braiding Y).hom (Y.braiding X).hom =
  CategoryTheory.CategoryStruct.id (X.tensorObj Y)
-- CategoryTheory.Dial.braiding_naturality_right
theorem braiding_naturality_right (X : Dial C) {Y Z : Dial C} (f : Y ⟶ Z) :
    tensorHom (𝟙 X) f ≫ (braiding X Z).hom = (braiding X Y).hom ≫ tensorHom f (𝟙 X) 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] [CategoryTheory.Limits.HasFiniteProducts C] [CategoryTheory.Limits.HasPullbacks C] (X : CategoryTheory.Dial C) {Y Z : CategoryTheory.Dial C} (f : Y ⟶ Z)
Goal: CategoryTheory.CategoryStruct.comp (CategoryTheory.Dial.tensorHom (CategoryTheory.CategoryStruct.id X) f)
    (X.braiding Z).hom =
  CategoryTheory.CategoryStruct.comp (X.braiding Y).hom
    (CategoryTheory.Dial.tensorHom f (CategoryTheory.CategoryStruct.id X))
-- CategoryTheory.Dial.braiding_naturality_left
theorem braiding_naturality_left {X Y : Dial C} (f : X ⟶ Y) (Z : Dial C) :
    tensorHom f (𝟙 Z) ≫ (braiding Y Z).hom = (braiding X Z).hom ≫ tensorHom (𝟙 Z) f 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] [CategoryTheory.Limits.HasFiniteProducts C] [CategoryTheory.Limits.HasPullbacks C] {X Y : CategoryTheory.Dial C} (f : X ⟶ Y) (Z : CategoryTheory.Dial C)
Goal: CategoryTheory.CategoryStruct.comp (CategoryTheory.Dial.tensorHom f (CategoryTheory.CategoryStruct.id Z))
    (Y.braiding Z).hom =
  CategoryTheory.CategoryStruct.comp (X.braiding Z).hom
    (CategoryTheory.Dial.tensorHom (CategoryTheory.CategoryStruct.id Z) f)
-- CategoryTheory.Dial.hexagon_forward
theorem hexagon_forward (X Y Z : Dial C) :
    (associator X Y Z).hom ≫ (braiding X (Y ⊗ Z)).hom ≫ (associator Y Z X).hom =
      tensorHom (braiding X Y).hom (𝟙 Z) ≫ (associator Y X Z).hom ≫
      tensorHom (𝟙 Y) (braiding X Z).hom 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] [CategoryTheory.Limits.HasFiniteProducts C] [CategoryTheory.Limits.HasPullbacks C] (X Y Z : CategoryTheory.Dial C)
Goal: CategoryTheory.CategoryStruct.comp (X.associator Y Z).hom
    (CategoryTheory.CategoryStruct.comp (X.braiding (CategoryTheory.MonoidalCategory.tensorObj Y Z)).hom
      (Y.associator Z X).hom) =
  CategoryTheory.CategoryStruct.comp
    (CategoryTheory.Dial.tensorHom (X.braiding Y).hom (CategoryTheory.CategoryStruct.id Z))
    (CategoryTheory.CategoryStruct.comp (Y.associator X Z).hom
      (CategoryTheory.Dial.tensorHom (CategoryTheory.CategoryStruct.id Y) (X.braiding Z).hom))
-- CategoryTheory.Dial.hexagon_reverse
theorem hexagon_reverse (X Y Z : Dial C) :
    (associator X Y Z).inv ≫ (braiding (X ⊗ Y) Z).hom ≫ (associator Z X Y).inv =
      tensorHom (𝟙 X) (braiding Y Z).hom ≫ (associator X Z Y).inv ≫
      tensorHom (braiding X Z).hom (𝟙 Y) 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] [CategoryTheory.Limits.HasFiniteProducts C] [CategoryTheory.Limits.HasPullbacks C] (X Y Z : CategoryTheory.Dial C)
Goal: CategoryTheory.CategoryStruct.comp (X.associator Y Z).inv
    (CategoryTheory.CategoryStruct.comp ((CategoryTheory.MonoidalCategory.tensorObj X Y).braiding Z).hom
      (Z.associator X Y).inv) =
  CategoryTheory.CategoryStruct.comp
    (CategoryTheory.Dial.tensorHom (CategoryTheory.CategoryStruct.id X) (Y.braiding Z).hom)
    (CategoryTheory.CategoryStruct.comp (X.associator Z Y).inv
      (CategoryTheory.Dial.tensorHom (X.braiding Z).hom (CategoryTheory.CategoryStruct.id Y)))
-- CategoryTheory.Idempotents.Karoubi.Biproducts.bicone_ι_f
@[simps]
def bicone [HasFiniteBiproducts C] {J : Type} [Finite J] (F : J → Karoubi C) : Bicone F 
Arguments: {C : Type u_1} [CategoryTheory.Category.{v, u_1} C] [CategoryTheory.Preadditive C] [CategoryTheory.Limits.HasFiniteBiproducts C] {J : Type} [Finite J] (F : J → CategoryTheory.Idempotents.Karoubi C) (j : J)
Goal: ((CategoryTheory.Idempotents.Karoubi.Biproducts.bicone F).ι j).f =
  CategoryTheory.CategoryStruct.comp (CategoryTheory.Limits.biproduct.ι (fun j => (F j).X) j)
    (CategoryTheory.Limits.biproduct.map fun j => (F j).p)
-- CategoryTheory.Idempotents.Karoubi.Biproducts.bicone_π_f
@[simps]
def bicone [HasFiniteBiproducts C] {J : Type} [Finite J] (F : J → Karoubi C) : Bicone F 
Arguments: {C : Type u_1} [CategoryTheory.Category.{v, u_1} C] [CategoryTheory.Preadditive C] [CategoryTheory.Limits.HasFiniteBiproducts C] {J : Type} [Finite J] (F : J → CategoryTheory.Idempotents.Karoubi C) (j : J)
Goal: ((CategoryTheory.Idempotents.Karoubi.Biproducts.bicone F).π j).f =
  CategoryTheory.CategoryStruct.comp (CategoryTheory.Limits.biproduct.map fun j => (F j).p)
    ((CategoryTheory.Limits.biproduct.bicone fun j => (F j).X).π j)
-- CategoryTheory.Idempotents.Karoubi.Biproducts.bicone_pt_p
@[simps]
def bicone [HasFiniteBiproducts C] {J : Type} [Finite J] (F : J → Karoubi C) : Bicone F 
Arguments: {C : Type u_1} [CategoryTheory.Category.{v, u_1} C] [CategoryTheory.Preadditive C] [CategoryTheory.Limits.HasFiniteBiproducts C] {J : Type} [Finite J] (F : J → CategoryTheory.Idempotents.Karoubi C)
Goal: (CategoryTheory.Idempotents.Karoubi.Biproducts.bicone F).pt.p = CategoryTheory.Limits.biproduct.map fun j => (F j).p
-- CategoryTheory.Idempotents.Karoubi.Biproducts.bicone_pt_X
@[simps]
def bicone [HasFiniteBiproducts C] {J : Type} [Finite J] (F : J → Karoubi C) : Bicone F 
Arguments: {C : Type u_1} [CategoryTheory.Category.{v, u_1} C] [CategoryTheory.Preadditive C] [CategoryTheory.Limits.HasFiniteBiproducts C] {J : Type} [Finite J] (F : J → CategoryTheory.Idempotents.Karoubi C)
Goal: (CategoryTheory.Idempotents.Karoubi.Biproducts.bicone F).pt.X = ⨁ fun j => (F j).X
-- CategoryTheory.Idempotents.Karoubi.karoubi_hasFiniteBiproducts
theorem karoubi_hasFiniteBiproducts [HasFiniteBiproducts C] : HasFiniteBiproducts (Karoubi C) 
Arguments: {C : Type u_1} [CategoryTheory.Category.{v, u_1} C] [CategoryTheory.Preadditive C] [CategoryTheory.Limits.HasFiniteBiproducts C]
Goal: CategoryTheory.Limits.HasFiniteBiproducts (CategoryTheory.Idempotents.Karoubi C)
-- CategoryTheory.Idempotents.Karoubi.complement_X
@[simps]
def complement (P : Karoubi C) : Karoubi C 
Arguments: {C : Type u_1} [CategoryTheory.Category.{v, u_1} C] [CategoryTheory.Preadditive C] (P : CategoryTheory.Idempotents.Karoubi C)
Goal: P.complement.X = P.X
-- CategoryTheory.Idempotents.Karoubi.complement_p
@[simps]
def complement (P : Karoubi C) : Karoubi C 
Arguments: {C : Type u_1} [CategoryTheory.Category.{v, u_1} C] [CategoryTheory.Preadditive C] (P : CategoryTheory.Idempotents.Karoubi C)
Goal: P.complement.p = CategoryTheory.CategoryStruct.id P.X - P.p
-- CategoryTheory.IsIdempotentComplete.idempotents_split
class IsIdempotentComplete : Prop where
    idempotents_split :
    ∀ (X : C) (p : X ⟶ X), p ≫ p = p → ∃ (Y : C) (i : Y ⟶ X) (e : X ⟶ Y), i ≫ e = 𝟙 Y ∧ e ≫ i = p
Arguments: {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C] [self : CategoryTheory.IsIdempotentComplete C] (X : C) (p : X ⟶ X)
Goal: p ≫ p = p → ∃ Y i e, i ≫ e = 𝟙 Y ∧ e ≫ i = p
-- CategoryTheory.Idempotents.isIdempotentComplete_iff_hasEqualizer_of_id_and_idempotent
theorem isIdempotentComplete_iff_hasEqualizer_of_id_and_idempotent :
    IsIdempotentComplete C ↔ ∀ (X : C) (p : X ⟶ X), p ≫ p = p → HasEqualizer (𝟙 X) p 
Arguments: (C : Type u_1) [CategoryTheory.Category.{u_2, u_1} C]
Goal: CategoryTheory.IsIdempotentComplete C ↔ ∀ (X : C) (p : X ⟶ X), p ≫ p = p → CategoryTheory.Limits.HasEqualizer (𝟙 X) p
-- CategoryTheory.Idempotents.idem_of_id_sub_idem
theorem idem_of_id_sub_idem [Preadditive C] {X : C} (p : X ⟶ X) (hp : p ≫ p = p) :
    (𝟙 _ - p) ≫ (𝟙 _ - p) = 𝟙 _ - p 
Arguments: {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C] [CategoryTheory.Preadditive C] {X : C} (p : X ⟶ X) (hp : p ≫ p = p)
Goal: (𝟙 X - p) ≫ (𝟙 X - p) = 𝟙 X - p
-- CategoryTheory.Idempotents.isIdempotentComplete_iff_idempotents_have_kernels
theorem isIdempotentComplete_iff_idempotents_have_kernels [Preadditive C] :
    IsIdempotentComplete C ↔ ∀ (X : C) (p : X ⟶ X), p ≫ p = p → HasKernel p 
Arguments: (C : Type u_1) [CategoryTheory.Category.{u_2, u_1} C] [CategoryTheory.Preadditive C]
Goal: CategoryTheory.IsIdempotentComplete C ↔ ∀ (X : C) (p : X ⟶ X), p ≫ p = p → CategoryTheory.Limits.HasKernel p
-- CategoryTheory.Idempotents.split_imp_of_iso
theorem split_imp_of_iso {X X' : C} (φ : X ≅ X') (p : X ⟶ X) (p' : X' ⟶ X')
    (hpp' : p ≫ φ.hom = φ.hom ≫ p')
    (h : ∃ (Y : C) (i : Y ⟶ X) (e : X ⟶ Y), i ≫ e = 𝟙 Y ∧ e ≫ i = p) :
    ∃ (Y' : C) (i' : Y' ⟶ X') (e' : X' ⟶ Y'), i' ≫ e' = 𝟙 Y' ∧ e' ≫ i' = p' 
Arguments: {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C] {X X' : C} (φ : X ≅ X') (p : X ⟶ X) (p' : X' ⟶ X') (hpp' : p ≫ φ.hom = φ.hom ≫ p') (h : ∃ Y i e, i ≫ e = 𝟙 Y ∧ e ≫ i = p)
Goal: ∃ Y' i' e', i' ≫ e' = 𝟙 Y' ∧ e' ≫ i' = p'
-- CategoryTheory.Idempotents.split_iff_of_iso
theorem split_iff_of_iso {X X' : C} (φ : X ≅ X') (p : X ⟶ X) (p' : X' ⟶ X')
    (hpp' : p ≫ φ.hom = φ.hom ≫ p') :
    (∃ (Y : C) (i : Y ⟶ X) (e : X ⟶ Y), i ≫ e = 𝟙 Y ∧ e ≫ i = p) ↔
      ∃ (Y' : C) (i' : Y' ⟶ X') (e' : X' ⟶ Y'), i' ≫ e' = 𝟙 Y' ∧ e' ≫ i' = p' 
Arguments: {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C] {X X' : C} (φ : X ≅ X') (p : X ⟶ X) (p' : X' ⟶ X') (hpp' : p ≫ φ.hom = φ.hom ≫ p')
Goal: (∃ Y i e, i ≫ e = 𝟙 Y ∧ e ≫ i = p) ↔ ∃ Y' i' e', i' ≫ e' = 𝟙 Y' ∧ e' ≫ i' = p'
-- CategoryTheory.Idempotents.Equivalence.isIdempotentComplete
theorem Equivalence.isIdempotentComplete {D : Type*} [Category D] (ε : C ≌ D)
    (h : IsIdempotentComplete C) : IsIdempotentComplete D 
Arguments: {C : Type u_1} [CategoryTheory.Category.{u_4, u_1} C] {D : Type u_2} [CategoryTheory.Category.{u_3, u_2} D] (ε : C ≌ D) (h : CategoryTheory.IsIdempotentComplete C)
Goal: CategoryTheory.IsIdempotentComplete D
-- CategoryTheory.Idempotents.isIdempotentComplete_iff_of_equivalence
theorem isIdempotentComplete_iff_of_equivalence {D : Type*} [Category D] (ε : C ≌ D) :
    IsIdempotentComplete C ↔ IsIdempotentComplete D 
Arguments: {C : Type u_1} [CategoryTheory.Category.{u_4, u_1} C] {D : Type u_2} [CategoryTheory.Category.{u_3, u_2} D] (ε : C ≌ D)
Goal: CategoryTheory.IsIdempotentComplete C ↔ CategoryTheory.IsIdempotentComplete D
-- CategoryTheory.Idempotents.isIdempotentComplete_of_isIdempotentComplete_opposite
theorem isIdempotentComplete_of_isIdempotentComplete_opposite (h : IsIdempotentComplete Cᵒᵖ) :
    IsIdempotentComplete C 
Arguments: {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C] (h : CategoryTheory.IsIdempotentComplete Cᵒᵖ)
Goal: CategoryTheory.IsIdempotentComplete C
-- CategoryTheory.Idempotents.isIdempotentComplete_iff_opposite
theorem isIdempotentComplete_iff_opposite : IsIdempotentComplete Cᵒᵖ ↔ IsIdempotentComplete C 
Arguments: {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C]
Goal: CategoryTheory.IsIdempotentComplete Cᵒᵖ ↔ CategoryTheory.IsIdempotentComplete C
-- CategoryTheory.Idempotents.Karoubi.idem
structure Karoubi where
    X : C
    p : X ⟶ X
    idem : p ≫ p = p := by aesop_cat
Arguments: {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C] (self : CategoryTheory.Idempotents.Karoubi C)
Goal: CategoryTheory.CategoryStruct.comp self.p self.p = self.p
-- CategoryTheory.Idempotents.Karoubi.ext
@[ext]
theorem ext {P Q : Karoubi C} (h_X : P.X = Q.X) (h_p : P.p ≫ eqToHom h_X = eqToHom h_X ≫ Q.p) :
    P = Q 
Arguments: {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C] {P Q : CategoryTheory.Idempotents.Karoubi C} (h_X : P.X = Q.X) (h_p :
  CategoryTheory.CategoryStruct.comp P.p (CategoryTheory.eqToHom h_X) =
    CategoryTheory.CategoryStruct.comp (CategoryTheory.eqToHom h_X) Q.p)
Goal: P = Q
-- CategoryTheory.Idempotents.Karoubi.Hom.comm
@[ext]
structure Hom (P Q : Karoubi C) where
    f : P.X ⟶ Q.X
    comm : f = P.p ≫ f ≫ Q.p := by aesop_cat
Arguments: {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C] {P Q : CategoryTheory.Idempotents.Karoubi C} (self : P.Hom Q)
Goal: self.f = CategoryTheory.CategoryStruct.comp P.p (CategoryTheory.CategoryStruct.comp self.f Q.p)
-- CategoryTheory.Idempotents.Karoubi.p_comp
@[reassoc (attr := simp)]
theorem p_comp {P Q : Karoubi C} (f : Hom P Q) : P.p ≫ f.f = f.f 
Arguments: {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C] {P Q : CategoryTheory.Idempotents.Karoubi C} (f : P.Hom Q)
Goal: CategoryTheory.CategoryStruct.comp P.p f.f = f.f
-- CategoryTheory.Idempotents.Karoubi.comp_p
@[reassoc (attr := simp)]
theorem comp_p {P Q : Karoubi C} (f : Hom P Q) : f.f ≫ Q.p = f.f 
Arguments: {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C] {P Q : CategoryTheory.Idempotents.Karoubi C} (f : P.Hom Q)
Goal: CategoryTheory.CategoryStruct.comp f.f Q.p = f.f
-- CategoryTheory.Idempotents.Karoubi.p_comm
@[reassoc]
theorem p_comm {P Q : Karoubi C} (f : Hom P Q) : P.p ≫ f.f = f.f ≫ Q.p 
Arguments: {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C] {P Q : CategoryTheory.Idempotents.Karoubi C} (f : P.Hom Q)
Goal: CategoryTheory.CategoryStruct.comp P.p f.f = CategoryTheory.CategoryStruct.comp f.f Q.p
-- CategoryTheory.Idempotents.Karoubi.comp_proof
theorem comp_proof {P Q R : Karoubi C} (g : Hom Q R) (f : Hom P Q) :
    f.f ≫ g.f = P.p ≫ (f.f ≫ g.f) ≫ R.p 
Arguments: {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C] {P Q R : CategoryTheory.Idempotents.Karoubi C} (g : Q.Hom R) (f : P.Hom Q)
Goal: CategoryTheory.CategoryStruct.comp f.f g.f =
  CategoryTheory.CategoryStruct.comp P.p
    (CategoryTheory.CategoryStruct.comp (CategoryTheory.CategoryStruct.comp f.f g.f) R.p)
-- CategoryTheory.Idempotents.Karoubi.hom_ext_iff
@[simp]
theorem hom_ext_iff {P Q : Karoubi C} {f g : P ⟶ Q} : f = g ↔ f.f = g.f 
Arguments: {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C] {P Q : CategoryTheory.Idempotents.Karoubi C} {f g : P ⟶ Q}
Goal: f = g ↔ f.f = g.f
-- CategoryTheory.Idempotents.Karoubi.hom_ext
@[ext]
theorem hom_ext {P Q : Karoubi C} (f g : P ⟶ Q) (h : f.f = g.f) : f = g 
Arguments: {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C] {P Q : CategoryTheory.Idempotents.Karoubi C} (f g : P ⟶ Q) (h : f.f = g.f)
Goal: f = g
-- CategoryTheory.Idempotents.Karoubi.comp_f
@[simp]
theorem comp_f {P Q R : Karoubi C} (f : P ⟶ Q) (g : Q ⟶ R) : (f ≫ g).f = f.f ≫ g.f 
Arguments: {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C] {P Q R : CategoryTheory.Idempotents.Karoubi C} (f : P ⟶ Q) (g : Q ⟶ R)
Goal: (CategoryTheory.CategoryStruct.comp f g).f = CategoryTheory.CategoryStruct.comp f.f g.f
-- CategoryTheory.Idempotents.Karoubi.id_f
@[simp]
theorem id_f {P : Karoubi C} : Hom.f (𝟙 P) = P.p 
Arguments: {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C] {P : CategoryTheory.Idempotents.Karoubi C}
Goal: (CategoryTheory.CategoryStruct.id P).f = P.p
-- CategoryTheory.Idempotents.Karoubi.id_eq
@[deprecated (since := "2024-07-15")]
theorem id_eq {P : Karoubi C} : 𝟙 P = ⟨P.p, by repeat' rw [P.idem]⟩ 
Arguments: {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C] {P : CategoryTheory.Idempotents.Karoubi C}
Goal: CategoryTheory.CategoryStruct.id P = { f := P.p, comm := ⋯ }
-- CategoryTheory.Idempotents.Karoubi.coe_X
theorem coe_X (X : C) : (X : Karoubi C).X = X 
Arguments: {C : Type u_1} [CategoryTheory.Category.{u_2, u_1} C] (X : C)
Goal: { X := X, p := CategoryTheory.CategoryStruct.id X, idem := ⋯ }.X = X