File: Mathlib/Algebra/Homology/Single.lean

full_name: HomologicalComplex.single
code: /-- The functor `V ⥤ HomologicalComplex V c` creating a chain complex supported in a single degree.
-/
noncomputable def single (j : ι) : V ⥤ HomologicalComplex V c 
goal: V ⥤ HomologicalComplex V c

full_name: HomologicalComplex.single_obj_X_self
code: @[simp]
lemma single_obj_X_self (j : ι) (A : V) :
    ((single V c j).obj A).X j = A 
goal: ((HomologicalComplex.single V c j).obj A).X j = A

full_name: HomologicalComplex.isZero_single_obj_X
code: lemma isZero_single_obj_X (j : ι) (A : V) (i : ι) (hi : i ≠ j) :
    IsZero (((single V c j).obj A).X i) 
goal: CategoryTheory.Limits.IsZero (((HomologicalComplex.single V c j).obj A).X i)

full_name: HomologicalComplex.singleObjXIsoOfEq
code: /-- The object in degree `i` of `(single V c h).obj A` is just `A` when `i = j`. -/
noncomputable def singleObjXIsoOfEq (j : ι) (A : V) (i : ι) (hi : i = j) :
    ((single V c j).obj A).X i ≅ A 
goal: ((HomologicalComplex.single V c j).obj A).X i ≅ A

full_name: HomologicalComplex.singleObjXSelf
code: /-- The object in degree `j` of `(single V c h).obj A` is just `A`. -/
noncomputable def singleObjXSelf (j : ι) (A : V) : ((single V c j).obj A).X j ≅ A 
goal: ((HomologicalComplex.single V c j).obj A).X j ≅ A

full_name: HomologicalComplex.single_obj_d
code: @[simp]
lemma single_obj_d (j : ι) (A : V) (k l : ι) :
    ((single V c j).obj A).d k l = 0 
goal: ((HomologicalComplex.single V c j).obj A).d k l = 0

full_name: HomologicalComplex.single_map_f_self
code: @[reassoc]
theorem single_map_f_self (j : ι) {A B : V} (f : A ⟶ B) :
    ((single V c j).map f).f j = (singleObjXSelf c j A).hom ≫
      f ≫ (singleObjXSelf c j B).inv 
goal: ((HomologicalComplex.single V c j).map f).f j =
  (HomologicalComplex.singleObjXSelf c j A).hom ≫ f ≫ (HomologicalComplex.singleObjXSelf c j B).inv

full_name: HomologicalComplex.singleCompEvalIsoSelf_inv_app
code: /-- The natural isomorphism `single V c j ⋙ eval V c j ≅ 𝟭 V`. -/
@[simps!]
noncomputable def singleCompEvalIsoSelf (j : ι) : single V c j ⋙ eval V c j ≅ 𝟭 V 
goal: (HomologicalComplex.singleCompEvalIsoSelf V c j).inv.app X = (HomologicalComplex.singleObjXSelf c j X).inv

full_name: HomologicalComplex.singleCompEvalIsoSelf
code: /-- The natural isomorphism `single V c j ⋙ eval V c j ≅ 𝟭 V`. -/
@[simps!]
noncomputable def singleCompEvalIsoSelf (j : ι) : single V c j ⋙ eval V c j ≅ 𝟭 V 
goal: HomologicalComplex.single V c j ⋙ HomologicalComplex.eval V c j ≅ 𝟭 V

full_name: HomologicalComplex.singleCompEvalIsoSelf_hom_app
code: /-- The natural isomorphism `single V c j ⋙ eval V c j ≅ 𝟭 V`. -/
@[simps!]
noncomputable def singleCompEvalIsoSelf (j : ι) : single V c j ⋙ eval V c j ≅ 𝟭 V 
goal: (HomologicalComplex.singleCompEvalIsoSelf V c j).hom.app X = (HomologicalComplex.singleObjXSelf c j X).hom

full_name: HomologicalComplex.isZero_single_comp_eval
code: lemma isZero_single_comp_eval (j i : ι) (hi : i ≠ j) : IsZero (single V c j ⋙ eval V c i) 
goal: CategoryTheory.Limits.IsZero (HomologicalComplex.single V c j ⋙ HomologicalComplex.eval V c i)

full_name: HomologicalComplex.from_single_hom_ext
code: @[ext]
lemma from_single_hom_ext {K : HomologicalComplex V c} {j : ι} {A : V}
    {f g : (single V c j).obj A ⟶ K} (hfg : f.f j = g.f j) : f = g 
goal: f = g

full_name: HomologicalComplex.to_single_hom_ext
code: @[ext]
lemma to_single_hom_ext {K : HomologicalComplex V c} {j : ι} {A : V}
    {f g : K ⟶ (single V c j).obj A} (hfg : f.f j = g.f j) : f = g 
goal: f = g

full_name: HomologicalComplex.instFaithfulSingle
code: instance (j : ι) : (single V c j).Faithful 
goal: (HomologicalComplex.single V c j).Faithful

full_name: HomologicalComplex.instFullSingle
code: instance (j : ι) : (single V c j).Full 
goal: (HomologicalComplex.single V c j).Full

full_name: HomologicalComplex.mkHomToSingle
code: /-- Constructor for morphisms to a single homological complex. -/
noncomputable def mkHomToSingle {K : HomologicalComplex V c} {j : ι} {A : V} (φ : K.X j ⟶ A)
    (hφ : ∀ (i : ι), c.Rel i j → K.d i j ≫ φ = 0) :
    K ⟶ (single V c j).obj A 
goal: K ⟶ (HomologicalComplex.single V c j).obj A

full_name: HomologicalComplex.mkHomToSingle_f
code: @[simp]
lemma mkHomToSingle_f {K : HomologicalComplex V c} {j : ι} {A : V} (φ : K.X j ⟶ A)
    (hφ : ∀ (i : ι), c.Rel i j → K.d i j ≫ φ = 0) :
    (mkHomToSingle φ hφ).f j = φ ≫ (singleObjXSelf c j A).inv 
goal: (HomologicalComplex.mkHomToSingle φ hφ).f j = φ ≫ (HomologicalComplex.singleObjXSelf c j A).inv

full_name: HomologicalComplex.mkHomFromSingle
code: /-- Constructor for morphisms from a single homological complex. -/
noncomputable def mkHomFromSingle {K : HomologicalComplex V c} {j : ι} {A : V} (φ : A ⟶ K.X j)
    (hφ : ∀ (k : ι), c.Rel j k → φ ≫ K.d j k = 0) :
    (single V c j).obj A ⟶ K 
goal: (HomologicalComplex.single V c j).obj A ⟶ K

full_name: HomologicalComplex.mkHomFromSingle_f
code: @[simp]
lemma mkHomFromSingle_f {K : HomologicalComplex V c} {j : ι} {A : V} (φ : A ⟶ K.X j)
    (hφ : ∀ (k : ι), c.Rel j k → φ ≫ K.d j k = 0) :
    (mkHomFromSingle φ hφ).f j = (singleObjXSelf c j A).hom ≫ φ 
goal: (HomologicalComplex.mkHomFromSingle φ hφ).f j = (HomologicalComplex.singleObjXSelf c j A).hom ≫ φ

full_name: HomologicalComplex.instPreservesZeroMorphismsSingle
code: instance (j : ι) : (single V c j).PreservesZeroMorphisms 
goal: (HomologicalComplex.single V c j).PreservesZeroMorphisms

full_name: ChainComplex.single₀
code: /-- The functor `V ⥤ ChainComplex V ℕ` creating a chain complex supported in degree zero. -/
noncomputable abbrev single₀ : V ⥤ ChainComplex V ℕ 
goal: V ⥤ ChainComplex V ℕ

full_name: ChainComplex.single₀_obj_zero
code: @[simp]
lemma single₀_obj_zero (A : V) :
    ((single₀ V).obj A).X 0 = A 
goal: ((ChainComplex.single₀ V).obj A).X 0 = A

full_name: ChainComplex.single₀_map_f_zero
code: @[simp]
lemma single₀_map_f_zero {A B : V} (f : A ⟶ B) :
    ((single₀ V).map f).f 0 = f 
goal: ((ChainComplex.single₀ V).map f).f 0 = f

full_name: ChainComplex.single₀ObjXSelf
code: @[simp]
lemma single₀ObjXSelf (X : V) :
    HomologicalComplex.singleObjXSelf (ComplexShape.down ℕ) 0 X = Iso.refl _ 
goal: HomologicalComplex.singleObjXSelf (ComplexShape.down ℕ) 0 X =
  CategoryTheory.Iso.refl (((HomologicalComplex.single V (ComplexShape.down ℕ) 0).obj X).X 0)

full_name: ChainComplex.toSingle₀Equiv
code: /-- Morphisms from an `ℕ`-indexed chain complex `C`
to a single object chain complex with `X` concentrated in degree 0
are the same as morphisms `f : C.X 0 ⟶ X` such that `C.d 1 0 ≫ f = 0`.
-/
@[simps apply_coe]
noncomputable def toSingle₀Equiv (C : ChainComplex V ℕ) (X : V) :
    (C ⟶ (single₀ V).obj X) ≃ { f : C.X 0 ⟶ X // C.d 1 0 ≫ f = 0 } 
goal: (C ⟶ (ChainComplex.single₀ V).obj X) ≃ { f // C.d 1 0 ≫ f = 0 }

full_name: ChainComplex.toSingle₀Equiv_apply_coe
code: /-- Morphisms from an `ℕ`-indexed chain complex `C`
to a single object chain complex with `X` concentrated in degree 0
are the same as morphisms `f : C.X 0 ⟶ X` such that `C.d 1 0 ≫ f = 0`.
-/
@[simps apply_coe]
noncomputable def toSingle₀Equiv (C : ChainComplex V ℕ) (X : V) :
    (C ⟶ (single₀ V).obj X) ≃ { f : C.X 0 ⟶ X // C.d 1 0 ≫ f = 0 } 
goal: ↑((C.toSingle₀Equiv X) φ) = φ.f 0

full_name: ChainComplex.toSingle₀Equiv_symm_apply_f_zero
code: @[simp]
lemma toSingle₀Equiv_symm_apply_f_zero {C : ChainComplex V ℕ} {X : V}
    (f : C.X 0 ⟶ X) (hf : C.d 1 0 ≫ f = 0) :
    ((toSingle₀Equiv C X).symm ⟨f, hf⟩).f 0 = f 
goal: ((C.toSingle₀Equiv X).symm ⟨f, hf⟩).f 0 = f

full_name: ChainComplex.fromSingle₀Equiv_apply
code: /-- Morphisms from a single object chain complex with `X` concentrated in degree 0
to an `ℕ`-indexed chain complex `C` are the same as morphisms `f : X → C.X 0`.
-/
@[simps apply]
noncomputable def fromSingle₀Equiv (C : ChainComplex V ℕ) (X : V) :
    ((single₀ V).obj X ⟶ C) ≃ (X ⟶ C.X 0) 
goal: (C.fromSingle₀Equiv X) f = f.f 0

full_name: ChainComplex.fromSingle₀Equiv
code: /-- Morphisms from a single object chain complex with `X` concentrated in degree 0
to an `ℕ`-indexed chain complex `C` are the same as morphisms `f : X → C.X 0`.
-/
@[simps apply]
noncomputable def fromSingle₀Equiv (C : ChainComplex V ℕ) (X : V) :
    ((single₀ V).obj X ⟶ C) ≃ (X ⟶ C.X 0) 
goal: ((ChainComplex.single₀ V).obj X ⟶ C) ≃ (X ⟶ C.X 0)

full_name: ChainComplex.fromSingle₀Equiv_symm_apply_f_zero
code: @[simp]
lemma fromSingle₀Equiv_symm_apply_f_zero
    {C : ChainComplex V ℕ} {X : V} (f : X ⟶ C.X 0) :
    ((fromSingle₀Equiv C X).symm f).f 0 = f 
goal: ((C.fromSingle₀Equiv X).symm f).f 0 = f

full_name: ChainComplex.fromSingle₀Equiv_symm_apply_f_succ
code: @[simp]
lemma fromSingle₀Equiv_symm_apply_f_succ
    {C : ChainComplex V ℕ} {X : V} (f : X ⟶ C.X 0) (n : ℕ) :
    ((fromSingle₀Equiv C X).symm f).f (n + 1) = 0 
goal: ((C.fromSingle₀Equiv X).symm f).f (n + 1) = 0

full_name: CochainComplex.single₀
code: /-- The functor `V ⥤ CochainComplex V ℕ` creating a cochain complex supported in degree zero. -/
noncomputable abbrev single₀ : V ⥤ CochainComplex V ℕ 
goal: V ⥤ CochainComplex V ℕ

full_name: CochainComplex.single₀_obj_zero
code: @[simp]
lemma single₀_obj_zero (A : V) :
    ((single₀ V).obj A).X 0 = A 
goal: ((CochainComplex.single₀ V).obj A).X 0 = A

full_name: CochainComplex.single₀_map_f_zero
code: @[simp]
lemma single₀_map_f_zero {A B : V} (f : A ⟶ B) :
    ((single₀ V).map f).f 0 = f 
goal: ((CochainComplex.single₀ V).map f).f 0 = f

full_name: CochainComplex.single₀ObjXSelf
code: @[simp]
lemma single₀ObjXSelf (X : V) :
    HomologicalComplex.singleObjXSelf (ComplexShape.up ℕ) 0 X = Iso.refl _ 
goal: HomologicalComplex.singleObjXSelf (ComplexShape.up ℕ) 0 X =
  CategoryTheory.Iso.refl (((HomologicalComplex.single V (ComplexShape.up ℕ) 0).obj X).X 0)

full_name: CochainComplex.fromSingle₀Equiv_apply_coe
code: /-- Morphisms from a single object cochain complex with `X` concentrated in degree 0
to an `ℕ`-indexed cochain complex `C`
are the same as morphisms `f : X ⟶ C.X 0` such that `f ≫ C.d 0 1 = 0`. -/
@[simps apply_coe]
noncomputable def fromSingle₀Equiv (C : CochainComplex V ℕ) (X : V) :
    ((single₀ V).obj X ⟶ C) ≃ { f : X ⟶ C.X 0 // f ≫ C.d 0 1 = 0 } 
goal: ↑((C.fromSingle₀Equiv X) φ) = φ.f 0

full_name: CochainComplex.fromSingle₀Equiv
code: /-- Morphisms from a single object cochain complex with `X` concentrated in degree 0
to an `ℕ`-indexed cochain complex `C`
are the same as morphisms `f : X ⟶ C.X 0` such that `f ≫ C.d 0 1 = 0`. -/
@[simps apply_coe]
noncomputable def fromSingle₀Equiv (C : CochainComplex V ℕ) (X : V) :
    ((single₀ V).obj X ⟶ C) ≃ { f : X ⟶ C.X 0 // f ≫ C.d 0 1 = 0 } 
goal: ((CochainComplex.single₀ V).obj X ⟶ C) ≃ { f // f ≫ C.d 0 1 = 0 }

full_name: CochainComplex.fromSingle₀Equiv_symm_apply_f_zero
code: @[simp]
lemma fromSingle₀Equiv_symm_apply_f_zero {C : CochainComplex V ℕ} {X : V}
    (f : X ⟶ C.X 0) (hf : f ≫ C.d 0 1 = 0) :
    ((fromSingle₀Equiv C X).symm ⟨f, hf⟩).f 0 = f 
goal: ((C.fromSingle₀Equiv X).symm ⟨f, hf⟩).f 0 = f

full_name: CochainComplex.toSingle₀Equiv_apply
code: /-- Morphisms to a single object cochain complex with `X` concentrated in degree 0
to an `ℕ`-indexed cochain complex `C` are the same as morphisms `f : C.X 0 ⟶ X`.
-/
@[simps apply]
noncomputable def toSingle₀Equiv (C : CochainComplex V ℕ) (X : V) :
    (C ⟶ (single₀ V).obj X) ≃ (C.X 0 ⟶ X) 
goal: (C.toSingle₀Equiv X) f = f.f 0

full_name: CochainComplex.toSingle₀Equiv
code: /-- Morphisms to a single object cochain complex with `X` concentrated in degree 0
to an `ℕ`-indexed cochain complex `C` are the same as morphisms `f : C.X 0 ⟶ X`.
-/
@[simps apply]
noncomputable def toSingle₀Equiv (C : CochainComplex V ℕ) (X : V) :
    (C ⟶ (single₀ V).obj X) ≃ (C.X 0 ⟶ X) 
goal: (C ⟶ (CochainComplex.single₀ V).obj X) ≃ (C.X 0 ⟶ X)

full_name: CochainComplex.toSingle₀Equiv_symm_apply_f_zero
code: @[simp]
lemma toSingle₀Equiv_symm_apply_f_zero
    {C : CochainComplex V ℕ} {X : V} (f : C.X 0 ⟶ X) :
    ((toSingle₀Equiv C X).symm f).f 0 = f 
goal: ((C.toSingle₀Equiv X).symm f).f 0 = f

full_name: CochainComplex.toSingle₀Equiv_symm_apply_f_succ
code: @[simp]
lemma toSingle₀Equiv_symm_apply_f_succ
    {C : CochainComplex V ℕ} {X : V} (f : C.X 0 ⟶ X) (n : ℕ) :
    ((toSingle₀Equiv C X).symm f).f (n + 1) = 0 
goal: ((C.toSingle₀Equiv X).symm f).f (n + 1) = 0