File: Mathlib/Algebra/Homology/Augment.lean

full_name: ChainComplex.truncate_obj_d
code: /-- The truncation of an `ℕ`-indexed chain complex,
deleting the object at `0` and shifting everything else down.
-/
@[simps]
def truncate [HasZeroMorphisms V] : ChainComplex V ℕ ⥤ ChainComplex V ℕ 
goal: (ChainComplex.truncate.obj C).d i j = C.d (i + 1) (j + 1)

full_name: ChainComplex.truncate
code: /-- The truncation of an `ℕ`-indexed chain complex,
deleting the object at `0` and shifting everything else down.
-/
@[simps]
def truncate [HasZeroMorphisms V] : ChainComplex V ℕ ⥤ ChainComplex V ℕ 
goal: ChainComplex V ℕ ⥤ ChainComplex V ℕ

full_name: ChainComplex.truncate_obj_X
code: /-- The truncation of an `ℕ`-indexed chain complex,
deleting the object at `0` and shifting everything else down.
-/
@[simps]
def truncate [HasZeroMorphisms V] : ChainComplex V ℕ ⥤ ChainComplex V ℕ 
goal: (ChainComplex.truncate.obj C).X i = C.X (i + 1)

full_name: ChainComplex.truncate_map_f
code: /-- The truncation of an `ℕ`-indexed chain complex,
deleting the object at `0` and shifting everything else down.
-/
@[simps]
def truncate [HasZeroMorphisms V] : ChainComplex V ℕ ⥤ ChainComplex V ℕ 
goal: ∀ {X Y : ChainComplex V ℕ} (f : X ⟶ Y) (i : ℕ), (ChainComplex.truncate.map f).f i = f.f (i + 1)

full_name: ChainComplex.truncateTo
code: /-- There is a canonical chain map from the truncation of a chain map `C` to
the "single object" chain complex consisting of the truncated object `C.X 0` in degree 0.
The components of this chain map are `C.d 1 0` in degree 0, and zero otherwise.
-/
def truncateTo [HasZeroObject V] [HasZeroMorphisms V] (C : ChainComplex V ℕ) :
    truncate.obj C ⟶ (single₀ V).obj (C.X 0) 
goal: ChainComplex.truncate.obj C ⟶ (ChainComplex.single₀ V).obj (C.X 0)

full_name: ChainComplex.augment
code: /-- We can "augment" a chain complex by inserting an arbitrary object in degree zero
(shifting everything else up), along with a suitable differential.
-/
def augment (C : ChainComplex V ℕ) {X : V} (f : C.X 0 ⟶ X) (w : C.d 1 0 ≫ f = 0) :
    ChainComplex V ℕ 
goal: ChainComplex V ℕ

full_name: ChainComplex.augment_X_zero
code: @[simp]
theorem augment_X_zero (C : ChainComplex V ℕ) {X : V} (f : C.X 0 ⟶ X) (w : C.d 1 0 ≫ f = 0) :
    (augment C f w).X 0 = X 
goal: (C.augment f w).X 0 = X

full_name: ChainComplex.augment_X_succ
code: @[simp]
theorem augment_X_succ (C : ChainComplex V ℕ) {X : V} (f : C.X 0 ⟶ X) (w : C.d 1 0 ≫ f = 0)
    (i : ℕ) : (augment C f w).X (i + 1) = C.X i 
goal: (C.augment f w).X (i + 1) = C.X i

full_name: ChainComplex.augment_d_one_zero
code: @[simp]
theorem augment_d_one_zero (C : ChainComplex V ℕ) {X : V} (f : C.X 0 ⟶ X) (w : C.d 1 0 ≫ f = 0) :
    (augment C f w).d 1 0 = f 
goal: (C.augment f w).d 1 0 = f

full_name: ChainComplex.augment_d_succ_succ
code: @[simp]
theorem augment_d_succ_succ (C : ChainComplex V ℕ) {X : V} (f : C.X 0 ⟶ X) (w : C.d 1 0 ≫ f = 0)
    (i j : ℕ) : (augment C f w).d (i + 1) (j + 1) = C.d i j 
goal: (C.augment f w).d (i + 1) (j + 1) = C.d i j

full_name: ChainComplex.truncateAugment
code: /-- Truncating an augmented chain complex is isomorphic (with components the identity)
to the original complex.
-/
def truncateAugment (C : ChainComplex V ℕ) {X : V} (f : C.X 0 ⟶ X) (w : C.d 1 0 ≫ f = 0) :
    truncate.obj (augment C f w) ≅ C 
goal: ChainComplex.truncate.obj (C.augment f w) ≅ C

full_name: ChainComplex.truncateAugment_hom_f
code: @[simp]
theorem truncateAugment_hom_f (C : ChainComplex V ℕ) {X : V} (f : C.X 0 ⟶ X) (w : C.d 1 0 ≫ f = 0)
    (i : ℕ) : (truncateAugment C f w).hom.f i = 𝟙 (C.X i) 
goal: (C.truncateAugment f w).hom.f i = 𝟙 (C.X i)

full_name: ChainComplex.truncateAugment_inv_f
code: @[simp]
theorem truncateAugment_inv_f (C : ChainComplex V ℕ) {X : V} (f : C.X 0 ⟶ X) (w : C.d 1 0 ≫ f = 0)
    (i : ℕ) : (truncateAugment C f w).inv.f i = 𝟙 ((truncate.obj (augment C f w)).X i) 
goal: (C.truncateAugment f w).inv.f i = 𝟙 ((ChainComplex.truncate.obj (C.augment f w)).X i)

full_name: ChainComplex.chainComplex_d_succ_succ_zero
code: @[simp]
theorem chainComplex_d_succ_succ_zero (C : ChainComplex V ℕ) (i : ℕ) : C.d (i + 2) 0 = 0 
goal: C.d (i + 2) 0 = 0

full_name: ChainComplex.augmentTruncate
code: /-- Augmenting a truncated complex with the original object and morphism is isomorphic
(with components the identity) to the original complex.
-/
def augmentTruncate (C : ChainComplex V ℕ) :
    augment (truncate.obj C) (C.d 1 0) (C.d_comp_d _ _ _) ≅ C 
goal: (ChainComplex.truncate.obj C).augment (C.d 1 0) ⋯ ≅ C

full_name: ChainComplex.augmentTruncate_hom_f_zero
code: @[simp]
theorem augmentTruncate_hom_f_zero (C : ChainComplex V ℕ) :
    (augmentTruncate C).hom.f 0 = 𝟙 (C.X 0) 
goal: C.augmentTruncate.hom.f 0 = 𝟙 (C.X 0)

full_name: ChainComplex.augmentTruncate_hom_f_succ
code: @[simp]
theorem augmentTruncate_hom_f_succ (C : ChainComplex V ℕ) (i : ℕ) :
    (augmentTruncate C).hom.f (i + 1) = 𝟙 (C.X (i + 1)) 
goal: C.augmentTruncate.hom.f (i + 1) = 𝟙 (C.X (i + 1))

full_name: ChainComplex.augmentTruncate_inv_f_zero
code: @[simp]
theorem augmentTruncate_inv_f_zero (C : ChainComplex V ℕ) :
    (augmentTruncate C).inv.f 0 = 𝟙 (C.X 0) 
goal: C.augmentTruncate.inv.f 0 = 𝟙 (C.X 0)

full_name: ChainComplex.augmentTruncate_inv_f_succ
code: @[simp]
theorem augmentTruncate_inv_f_succ (C : ChainComplex V ℕ) (i : ℕ) :
    (augmentTruncate C).inv.f (i + 1) = 𝟙 (C.X (i + 1)) 
goal: C.augmentTruncate.inv.f (i + 1) = 𝟙 (C.X (i + 1))

full_name: ChainComplex.toSingle₀AsComplex
code: /-- A chain map from a chain complex to a single object chain complex in degree zero
can be reinterpreted as a chain complex.

This is the inverse construction of `truncateTo`.
-/
def toSingle₀AsComplex [HasZeroObject V] (C : ChainComplex V ℕ) (X : V)
    (f : C ⟶ (single₀ V).obj X) : ChainComplex V ℕ 
goal: ChainComplex V ℕ

full_name: CochainComplex.truncate_obj_X
code: /-- The truncation of an `ℕ`-indexed cochain complex,
deleting the object at `0` and shifting everything else down.
-/
@[simps]
def truncate [HasZeroMorphisms V] : CochainComplex V ℕ ⥤ CochainComplex V ℕ 
goal: (CochainComplex.truncate.obj C).X i = C.X (i + 1)

full_name: CochainComplex.truncate
code: /-- The truncation of an `ℕ`-indexed cochain complex,
deleting the object at `0` and shifting everything else down.
-/
@[simps]
def truncate [HasZeroMorphisms V] : CochainComplex V ℕ ⥤ CochainComplex V ℕ 
goal: CochainComplex V ℕ ⥤ CochainComplex V ℕ

full_name: CochainComplex.truncate_obj_d
code: /-- The truncation of an `ℕ`-indexed cochain complex,
deleting the object at `0` and shifting everything else down.
-/
@[simps]
def truncate [HasZeroMorphisms V] : CochainComplex V ℕ ⥤ CochainComplex V ℕ 
goal: (CochainComplex.truncate.obj C).d i j = C.d (i + 1) (j + 1)

full_name: CochainComplex.truncate_map_f
code: /-- The truncation of an `ℕ`-indexed cochain complex,
deleting the object at `0` and shifting everything else down.
-/
@[simps]
def truncate [HasZeroMorphisms V] : CochainComplex V ℕ ⥤ CochainComplex V ℕ 
goal: ∀ {X Y : CochainComplex V ℕ} (f : X ⟶ Y) (i : ℕ), (CochainComplex.truncate.map f).f i = f.f (i + 1)

full_name: CochainComplex.toTruncate
code: /-- There is a canonical chain map from the truncation of a cochain complex `C` to
the "single object" cochain complex consisting of the truncated object `C.X 0` in degree 0.
The components of this chain map are `C.d 0 1` in degree 0, and zero otherwise.
-/
def toTruncate [HasZeroObject V] [HasZeroMorphisms V] (C : CochainComplex V ℕ) :
    (single₀ V).obj (C.X 0) ⟶ truncate.obj C 
goal: (CochainComplex.single₀ V).obj (C.X 0) ⟶ CochainComplex.truncate.obj C

full_name: CochainComplex.augment
code: /-- We can "augment" a cochain complex by inserting an arbitrary object in degree zero
(shifting everything else up), along with a suitable differential.
-/
def augment (C : CochainComplex V ℕ) {X : V} (f : X ⟶ C.X 0) (w : f ≫ C.d 0 1 = 0) :
    CochainComplex V ℕ 
goal: CochainComplex V ℕ

full_name: CochainComplex.augment_X_zero
code: @[simp]
theorem augment_X_zero (C : CochainComplex V ℕ) {X : V} (f : X ⟶ C.X 0) (w : f ≫ C.d 0 1 = 0) :
    (augment C f w).X 0 = X 
goal: (C.augment f w).X 0 = X

full_name: CochainComplex.augment_X_succ
code: @[simp]
theorem augment_X_succ (C : CochainComplex V ℕ) {X : V} (f : X ⟶ C.X 0) (w : f ≫ C.d 0 1 = 0)
    (i : ℕ) : (augment C f w).X (i + 1) = C.X i 
goal: (C.augment f w).X (i + 1) = C.X i

full_name: CochainComplex.augment_d_zero_one
code: @[simp]
theorem augment_d_zero_one (C : CochainComplex V ℕ) {X : V} (f : X ⟶ C.X 0) (w : f ≫ C.d 0 1 = 0) :
    (augment C f w).d 0 1 = f 
goal: (C.augment f w).d 0 1 = f

full_name: CochainComplex.augment_d_succ_succ
code: @[simp]
theorem augment_d_succ_succ (C : CochainComplex V ℕ) {X : V} (f : X ⟶ C.X 0) (w : f ≫ C.d 0 1 = 0)
    (i j : ℕ) : (augment C f w).d (i + 1) (j + 1) = C.d i j 
goal: (C.augment f w).d (i + 1) (j + 1) = C.d i j

full_name: CochainComplex.truncateAugment
code: /-- Truncating an augmented cochain complex is isomorphic (with components the identity)
to the original complex.
-/
def truncateAugment (C : CochainComplex V ℕ) {X : V} (f : X ⟶ C.X 0) (w : f ≫ C.d 0 1 = 0) :
    truncate.obj (augment C f w) ≅ C 
goal: CochainComplex.truncate.obj (C.augment f w) ≅ C

full_name: CochainComplex.truncateAugment_hom_f
code: @[simp]
theorem truncateAugment_hom_f (C : CochainComplex V ℕ) {X : V} (f : X ⟶ C.X 0)
    (w : f ≫ C.d 0 1 = 0) (i : ℕ) : (truncateAugment C f w).hom.f i = 𝟙 (C.X i) 
goal: (C.truncateAugment f w).hom.f i = 𝟙 (C.X i)

full_name: CochainComplex.truncateAugment_inv_f
code: @[simp]
theorem truncateAugment_inv_f (C : CochainComplex V ℕ) {X : V} (f : X ⟶ C.X 0)
    (w : f ≫ C.d 0 1 = 0) (i : ℕ) :
    (truncateAugment C f w).inv.f i = 𝟙 ((truncate.obj (augment C f w)).X i) 
goal: (C.truncateAugment f w).inv.f i = 𝟙 ((CochainComplex.truncate.obj (C.augment f w)).X i)

full_name: CochainComplex.cochainComplex_d_succ_succ_zero
code: @[simp]
theorem cochainComplex_d_succ_succ_zero (C : CochainComplex V ℕ) (i : ℕ) : C.d 0 (i + 2) = 0 
goal: C.d 0 (i + 2) = 0

full_name: CochainComplex.augmentTruncate
code: /-- Augmenting a truncated complex with the original object and morphism is isomorphic
(with components the identity) to the original complex.
-/
def augmentTruncate (C : CochainComplex V ℕ) :
    augment (truncate.obj C) (C.d 0 1) (C.d_comp_d _ _ _) ≅ C 
goal: (CochainComplex.truncate.obj C).augment (C.d 0 1) ⋯ ≅ C

full_name: CochainComplex.augmentTruncate_hom_f_zero
code: @[simp]
theorem augmentTruncate_hom_f_zero (C : CochainComplex V ℕ) :
    (augmentTruncate C).hom.f 0 = 𝟙 (C.X 0) 
goal: C.augmentTruncate.hom.f 0 = 𝟙 (C.X 0)

full_name: CochainComplex.augmentTruncate_hom_f_succ
code: @[simp]
theorem augmentTruncate_hom_f_succ (C : CochainComplex V ℕ) (i : ℕ) :
    (augmentTruncate C).hom.f (i + 1) = 𝟙 (C.X (i + 1)) 
goal: C.augmentTruncate.hom.f (i + 1) = 𝟙 (C.X (i + 1))

full_name: CochainComplex.augmentTruncate_inv_f_zero
code: @[simp]
theorem augmentTruncate_inv_f_zero (C : CochainComplex V ℕ) :
    (augmentTruncate C).inv.f 0 = 𝟙 (C.X 0) 
goal: C.augmentTruncate.inv.f 0 = 𝟙 (C.X 0)

full_name: CochainComplex.augmentTruncate_inv_f_succ
code: @[simp]
theorem augmentTruncate_inv_f_succ (C : CochainComplex V ℕ) (i : ℕ) :
    (augmentTruncate C).inv.f (i + 1) = 𝟙 (C.X (i + 1)) 
goal: C.augmentTruncate.inv.f (i + 1) = 𝟙 (C.X (i + 1))

full_name: CochainComplex.fromSingle₀AsComplex
code: /-- A chain map from a single object cochain complex in degree zero to a cochain complex
can be reinterpreted as a cochain complex.

This is the inverse construction of `toTruncate`.
-/
def fromSingle₀AsComplex [HasZeroObject V] (C : CochainComplex V ℕ) (X : V)
    (f : (single₀ V).obj X ⟶ C) : CochainComplex V ℕ 
goal: CochainComplex V ℕ