File: Mathlib/Algebra/Homology/HomologicalBicomplex.lean

full_name: HomologicalComplex₂
code: /-- Given a category `C` and two complex shapes `c₁` and `c₂` on types `I₁` and `I₂`,
the associated type of bicomplexes `HomologicalComplex₂ C c₁ c₂` is
`K : HomologicalComplex (HomologicalComplex C c₂) c₁`. Then, the object in
position `⟨i₁, i₂⟩` can be obtained as `(K.X i₁).X i₂`. -/
abbrev HomologicalComplex₂ 
goal: Type (max (max (max (max u_3 u_1) u_4) u_2) u_3 u_4)

full_name: HomologicalComplex₂.toGradedObject
code: /-- The graded object indexed by `I₁ × I₂` induced by a bicomplex. -/
def toGradedObject (K : HomologicalComplex₂ C c₁ c₂) :
    GradedObject (I₁ × I₂) C 
goal: CategoryTheory.GradedObject (I₁ × I₂) C

full_name: HomologicalComplex₂.toGradedObjectMap
code: /-- The morphism of graded objects induced by a morphism of bicomplexes. -/
def toGradedObjectMap {K L : HomologicalComplex₂ C c₁ c₂} (φ : K ⟶ L) :
    K.toGradedObject ⟶ L.toGradedObject 
goal: K.toGradedObject ⟶ L.toGradedObject

full_name: HomologicalComplex₂.toGradedObjectMap_apply
code: @[simp]
lemma toGradedObjectMap_apply {K L : HomologicalComplex₂ C c₁ c₂} (φ : K ⟶ L) (i₁ : I₁) (i₂ : I₂) :
    toGradedObjectMap φ ⟨i₁, i₂⟩ = (φ.f i₁).f i₂ 
goal: HomologicalComplex₂.toGradedObjectMap φ (i₁, i₂) = (φ.f i₁).f i₂

full_name: HomologicalComplex₂.toGradedObjectFunctor_map
code: /-- The functor which sends a bicomplex to its associated graded object. -/
@[simps]
def toGradedObjectFunctor : HomologicalComplex₂ C c₁ c₂ ⥤ GradedObject (I₁ × I₂) C 
goal: ∀ {X Y : HomologicalComplex₂ C c₁ c₂} (φ : X ⟶ Y) (i : I₁ × I₂),
  (HomologicalComplex₂.toGradedObjectFunctor C c₁ c₂).map φ i = HomologicalComplex₂.toGradedObjectMap φ i

full_name: HomologicalComplex₂.toGradedObjectFunctor_obj
code: /-- The functor which sends a bicomplex to its associated graded object. -/
@[simps]
def toGradedObjectFunctor : HomologicalComplex₂ C c₁ c₂ ⥤ GradedObject (I₁ × I₂) C 
goal: (HomologicalComplex₂.toGradedObjectFunctor C c₁ c₂).obj K = K.toGradedObject

full_name: HomologicalComplex₂.toGradedObjectFunctor
code: /-- The functor which sends a bicomplex to its associated graded object. -/
@[simps]
def toGradedObjectFunctor : HomologicalComplex₂ C c₁ c₂ ⥤ GradedObject (I₁ × I₂) C 
goal: HomologicalComplex₂ C c₁ c₂ ⥤ CategoryTheory.GradedObject (I₁ × I₂) C

full_name: HomologicalComplex₂.instFaithfulGradedObjectProdToGradedObjectFunctor
code: instance : (toGradedObjectFunctor C c₁ c₂).Faithful 
goal: (HomologicalComplex₂.toGradedObjectFunctor C c₁ c₂).Faithful

full_name: HomologicalComplex₂.ofGradedObject_X_X
code: /-- Constructor for bicomplexes taking as inputs a graded object, horizontal differentials
and vertical differentials satisfying suitable relations. -/
@[simps]
def ofGradedObject :
    HomologicalComplex₂ C c₁ c₂ 
goal: ((HomologicalComplex₂.ofGradedObject c₁ c₂ X d₁ d₂ shape₁ shape₂ d₁_comp_d₁ d₂_comp_d₂ comm).X i₁).X i₂ = X (i₁, i₂)

full_name: HomologicalComplex₂.ofGradedObject
code: /-- Constructor for bicomplexes taking as inputs a graded object, horizontal differentials
and vertical differentials satisfying suitable relations. -/
@[simps]
def ofGradedObject :
    HomologicalComplex₂ C c₁ c₂ 
goal: HomologicalComplex₂ C c₁ c₂

full_name: HomologicalComplex₂.ofGradedObject_X_d
code: /-- Constructor for bicomplexes taking as inputs a graded object, horizontal differentials
and vertical differentials satisfying suitable relations. -/
@[simps]
def ofGradedObject :
    HomologicalComplex₂ C c₁ c₂ 
goal: ((HomologicalComplex₂.ofGradedObject c₁ c₂ X d₁ d₂ shape₁ shape₂ d₁_comp_d₁ d₂_comp_d₂ comm).X i₁).d i₂ i₂' =
  d₂ i₁ i₂ i₂'

full_name: HomologicalComplex₂.ofGradedObject_d_f
code: /-- Constructor for bicomplexes taking as inputs a graded object, horizontal differentials
and vertical differentials satisfying suitable relations. -/
@[simps]
def ofGradedObject :
    HomologicalComplex₂ C c₁ c₂ 
goal: ((HomologicalComplex₂.ofGradedObject c₁ c₂ X d₁ d₂ shape₁ shape₂ d₁_comp_d₁ d₂_comp_d₂ comm).d i₁ i₁').f i₂ =
  d₁ i₁ i₁' i₂

full_name: HomologicalComplex₂.ofGradedObject_toGradedObject
code: @[simp]
lemma ofGradedObject_toGradedObject :
    (ofGradedObject c₁ c₂ X d₁ d₂ shape₁ shape₂ d₁_comp_d₁ d₂_comp_d₂ comm).toGradedObject = X 
goal: (HomologicalComplex₂.ofGradedObject c₁ c₂ X d₁ d₂ shape₁ shape₂ d₁_comp_d₁ d₂_comp_d₂ comm).toGradedObject = X

full_name: HomologicalComplex₂.homMk
code: /-- Constructor for a morphism `K ⟶ L` in the category `HomologicalComplex₂ C c₁ c₂` which
takes as inputs a morphism `f : K.toGradedObject ⟶ L.toGradedObject` and
the compatibilites with both horizontal and vertical differentials. -/
@[simps!]
def homMk {K L : HomologicalComplex₂ C c₁ c₂}
    (f : K.toGradedObject ⟶ L.toGradedObject)
    (comm₁ : ∀ i₁ i₁' i₂, c₁.Rel i₁ i₁' →
      f ⟨i₁, i₂⟩ ≫ (L.d i₁ i₁').f i₂ = (K.d i₁ i₁').f i₂ ≫ f ⟨i₁', i₂⟩)
    (comm₂ : ∀ i₁ i₂ i₂', c₂.Rel i₂ i₂' →
      f ⟨i₁, i₂⟩ ≫ (L.X i₁).d i₂ i₂' = (K.X i₁).d i₂ i₂' ≫ f ⟨i₁, i₂'⟩) : K ⟶ L 
goal: K ⟶ L

full_name: HomologicalComplex₂.homMk_f_f
code: /-- Constructor for a morphism `K ⟶ L` in the category `HomologicalComplex₂ C c₁ c₂` which
takes as inputs a morphism `f : K.toGradedObject ⟶ L.toGradedObject` and
the compatibilites with both horizontal and vertical differentials. -/
@[simps!]
def homMk {K L : HomologicalComplex₂ C c₁ c₂}
    (f : K.toGradedObject ⟶ L.toGradedObject)
    (comm₁ : ∀ i₁ i₁' i₂, c₁.Rel i₁ i₁' →
      f ⟨i₁, i₂⟩ ≫ (L.d i₁ i₁').f i₂ = (K.d i₁ i₁').f i₂ ≫ f ⟨i₁', i₂⟩)
    (comm₂ : ∀ i₁ i₂ i₂', c₂.Rel i₂ i₂' →
      f ⟨i₁, i₂⟩ ≫ (L.X i₁).d i₂ i₂' = (K.X i₁).d i₂ i₂' ≫ f ⟨i₁, i₂'⟩) : K ⟶ L 
goal: ((HomologicalComplex₂.homMk f comm₁ comm₂).f i₁).f i₂ = f (i₁, i₂)

full_name: HomologicalComplex₂.shape_f
code: lemma shape_f (K : HomologicalComplex₂ C c₁ c₂) (i₁ i₁' : I₁) (h : ¬ c₁.Rel i₁ i₁') (i₂ : I₂) :
    (K.d i₁ i₁').f i₂ = 0 
goal: (K.d i₁ i₁').f i₂ = 0

full_name: HomologicalComplex₂.d_f_comp_d_f
code: @[reassoc (attr := simp)]
lemma d_f_comp_d_f (K : HomologicalComplex₂ C c₁ c₂)
    (i₁ i₁' i₁'' : I₁) (i₂ : I₂) :
    (K.d i₁ i₁').f i₂ ≫ (K.d i₁' i₁'').f i₂ = 0 
goal: (K.d i₁ i₁').f i₂ ≫ (K.d i₁' i₁'').f i₂ = 0

full_name: HomologicalComplex₂.d_comm
code: @[reassoc]
lemma d_comm (K : HomologicalComplex₂ C c₁ c₂) (i₁ i₁' : I₁) (i₂ i₂' : I₂) :
    (K.d i₁ i₁').f i₂ ≫ (K.X i₁').d i₂ i₂' = (K.X i₁).d i₂ i₂' ≫ (K.d i₁ i₁').f i₂' 
goal: (K.d i₁ i₁').f i₂ ≫ (K.X i₁').d i₂ i₂' = (K.X i₁).d i₂ i₂' ≫ (K.d i₁ i₁').f i₂'

full_name: HomologicalComplex₂.comm_f
code: @[reassoc (attr := simp)]
lemma comm_f {K L : HomologicalComplex₂ C c₁ c₂} (f : K ⟶ L) (i₁ i₁' : I₁) (i₂ : I₂) :
    (f.f i₁).f i₂ ≫ (L.d i₁ i₁').f i₂ = (K.d i₁ i₁').f i₂ ≫ (f.f i₁').f i₂ 
goal: (f.f i₁).f i₂ ≫ (L.d i₁ i₁').f i₂ = (K.d i₁ i₁').f i₂ ≫ (f.f i₁').f i₂

full_name: HomologicalComplex₂.flip_X_X
code: /-- Flip a complex of complexes over the diagonal,
exchanging the horizontal and vertical directions.
-/
@[simps]
def flip (K : HomologicalComplex₂ C c₁ c₂) : HomologicalComplex₂ C c₂ c₁ 
goal: (K.flip.X i).X j = (K.X j).X i

full_name: HomologicalComplex₂.flip
code: /-- Flip a complex of complexes over the diagonal,
exchanging the horizontal and vertical directions.
-/
@[simps]
def flip (K : HomologicalComplex₂ C c₁ c₂) : HomologicalComplex₂ C c₂ c₁ 
goal: HomologicalComplex₂ C c₂ c₁

full_name: HomologicalComplex₂.flip_X_d
code: /-- Flip a complex of complexes over the diagonal,
exchanging the horizontal and vertical directions.
-/
@[simps]
def flip (K : HomologicalComplex₂ C c₁ c₂) : HomologicalComplex₂ C c₂ c₁ 
goal: (K.flip.X i).d j j' = (K.d j j').f i

full_name: HomologicalComplex₂.flip_d_f
code: /-- Flip a complex of complexes over the diagonal,
exchanging the horizontal and vertical directions.
-/
@[simps]
def flip (K : HomologicalComplex₂ C c₁ c₂) : HomologicalComplex₂ C c₂ c₁ 
goal: (K.flip.d i i').f j = (K.X j).d i i'

full_name: HomologicalComplex₂.flip_flip
code: @[simp]
lemma flip_flip (K : HomologicalComplex₂ C c₁ c₂) : K.flip.flip = K 
goal: K.flip.flip = K

full_name: HomologicalComplex₂.flipFunctor_map_f_f
code: /-- Flipping a complex of complexes over the diagonal, as a functor. -/
@[simps]
def flipFunctor :
    HomologicalComplex₂ C c₁ c₂ ⥤ HomologicalComplex₂ C c₂ c₁ 
goal: (((HomologicalComplex₂.flipFunctor C c₁ c₂).map f).f i).f j = (f.f j).f i

full_name: HomologicalComplex₂.flipFunctor
code: /-- Flipping a complex of complexes over the diagonal, as a functor. -/
@[simps]
def flipFunctor :
    HomologicalComplex₂ C c₁ c₂ ⥤ HomologicalComplex₂ C c₂ c₁ 
goal: HomologicalComplex₂ C c₁ c₂ ⥤ HomologicalComplex₂ C c₂ c₁

full_name: HomologicalComplex₂.flipFunctor_obj
code: /-- Flipping a complex of complexes over the diagonal, as a functor. -/
@[simps]
def flipFunctor :
    HomologicalComplex₂ C c₁ c₂ ⥤ HomologicalComplex₂ C c₂ c₁ 
goal: (HomologicalComplex₂.flipFunctor C c₁ c₂).obj K = K.flip

full_name: HomologicalComplex₂.flipEquivalenceUnitIso_hom_app_f_f
code: /-- Auxiliary definition for `HomologicalComplex₂.flipEquivalence`. -/
@[simps!]
def flipEquivalenceUnitIso :
    𝟭 (HomologicalComplex₂ C c₁ c₂) ≅ flipFunctor C c₁ c₂ ⋙ flipFunctor C c₂ c₁ 
goal: ∀ (i_1 : I₂), (((HomologicalComplex₂.flipEquivalenceUnitIso C c₁ c₂).hom.app X).f i).f i_1 = 𝟙 ((X.X i).X i_1)

full_name: HomologicalComplex₂.flipEquivalenceUnitIso
code: /-- Auxiliary definition for `HomologicalComplex₂.flipEquivalence`. -/
@[simps!]
def flipEquivalenceUnitIso :
    𝟭 (HomologicalComplex₂ C c₁ c₂) ≅ flipFunctor C c₁ c₂ ⋙ flipFunctor C c₂ c₁ 
goal: 𝟭 (HomologicalComplex₂ C c₁ c₂) ≅ HomologicalComplex₂.flipFunctor C c₁ c₂ ⋙ HomologicalComplex₂.flipFunctor C c₂ c₁

full_name: HomologicalComplex₂.flipEquivalenceUnitIso_inv_app_f_f
code: /-- Auxiliary definition for `HomologicalComplex₂.flipEquivalence`. -/
@[simps!]
def flipEquivalenceUnitIso :
    𝟭 (HomologicalComplex₂ C c₁ c₂) ≅ flipFunctor C c₁ c₂ ⋙ flipFunctor C c₂ c₁ 
goal: ∀ (i_1 : I₂), (((HomologicalComplex₂.flipEquivalenceUnitIso C c₁ c₂).inv.app X).f i).f i_1 = 𝟙 ((X.X i).X i_1)

full_name: HomologicalComplex₂.flipEquivalenceCounitIso_inv_app_f_f
code: /-- Auxiliary definition for `HomologicalComplex₂.flipEquivalence`. -/
@[simps!]
def flipEquivalenceCounitIso :
    flipFunctor C c₂ c₁ ⋙ flipFunctor C c₁ c₂ ≅ 𝟭 (HomologicalComplex₂ C c₂ c₁) 
goal: ∀ (i_1 : I₁), (((HomologicalComplex₂.flipEquivalenceCounitIso C c₁ c₂).inv.app X).f i).f i_1 = 𝟙 ((X.X i).X i_1)

full_name: HomologicalComplex₂.flipEquivalenceCounitIso
code: /-- Auxiliary definition for `HomologicalComplex₂.flipEquivalence`. -/
@[simps!]
def flipEquivalenceCounitIso :
    flipFunctor C c₂ c₁ ⋙ flipFunctor C c₁ c₂ ≅ 𝟭 (HomologicalComplex₂ C c₂ c₁) 
goal: HomologicalComplex₂.flipFunctor C c₂ c₁ ⋙ HomologicalComplex₂.flipFunctor C c₁ c₂ ≅ 𝟭 (HomologicalComplex₂ C c₂ c₁)

full_name: HomologicalComplex₂.flipEquivalenceCounitIso_hom_app_f_f
code: /-- Auxiliary definition for `HomologicalComplex₂.flipEquivalence`. -/
@[simps!]
def flipEquivalenceCounitIso :
    flipFunctor C c₂ c₁ ⋙ flipFunctor C c₁ c₂ ≅ 𝟭 (HomologicalComplex₂ C c₂ c₁) 
goal: ∀ (i_1 : I₁), (((HomologicalComplex₂.flipEquivalenceCounitIso C c₁ c₂).hom.app X).f i).f i_1 = 𝟙 ((X.X i).X i_1)

full_name: HomologicalComplex₂.flipEquivalence_inverse
code: /-- Flipping a complex of complexes over the diagonal, as an equivalence of categories. -/
@[simps]
def flipEquivalence :
    HomologicalComplex₂ C c₁ c₂ ≌ HomologicalComplex₂ C c₂ c₁ 
goal: (HomologicalComplex₂.flipEquivalence C c₁ c₂).inverse = HomologicalComplex₂.flipFunctor C c₂ c₁

full_name: HomologicalComplex₂.flipEquivalence_unitIso
code: /-- Flipping a complex of complexes over the diagonal, as an equivalence of categories. -/
@[simps]
def flipEquivalence :
    HomologicalComplex₂ C c₁ c₂ ≌ HomologicalComplex₂ C c₂ c₁ 
goal: (HomologicalComplex₂.flipEquivalence C c₁ c₂).unitIso = HomologicalComplex₂.flipEquivalenceUnitIso C c₁ c₂

full_name: HomologicalComplex₂.flipEquivalence_functor
code: /-- Flipping a complex of complexes over the diagonal, as an equivalence of categories. -/
@[simps]
def flipEquivalence :
    HomologicalComplex₂ C c₁ c₂ ≌ HomologicalComplex₂ C c₂ c₁ 
goal: (HomologicalComplex₂.flipEquivalence C c₁ c₂).functor = HomologicalComplex₂.flipFunctor C c₁ c₂

full_name: HomologicalComplex₂.flipEquivalence
code: /-- Flipping a complex of complexes over the diagonal, as an equivalence of categories. -/
@[simps]
def flipEquivalence :
    HomologicalComplex₂ C c₁ c₂ ≌ HomologicalComplex₂ C c₂ c₁ 
goal: HomologicalComplex₂ C c₁ c₂ ≌ HomologicalComplex₂ C c₂ c₁

full_name: HomologicalComplex₂.flipEquivalence_counitIso
code: /-- Flipping a complex of complexes over the diagonal, as an equivalence of categories. -/
@[simps]
def flipEquivalence :
    HomologicalComplex₂ C c₁ c₂ ≌ HomologicalComplex₂ C c₂ c₁ 
goal: (HomologicalComplex₂.flipEquivalence C c₁ c₂).counitIso = HomologicalComplex₂.flipEquivalenceCounitIso C c₁ c₂

full_name: HomologicalComplex₂.XXIsoOfEq
code: /-- The obvious isomorphism `(K.X x₁).X x₂ ≅ (K.X y₁).X y₂` when `x₁ = y₁` and `x₂ = y₂`. -/
def XXIsoOfEq {x₁ y₁ : I₁} (h₁ : x₁ = y₁) {x₂ y₂ : I₂} (h₂ : x₂ = y₂) :
    (K.X x₁).X x₂ ≅ (K.X y₁).X y₂ 
goal: (K.X x₁).X x₂ ≅ (K.X y₁).X y₂

full_name: HomologicalComplex₂.XXIsoOfEq_rfl
code: @[simp]
lemma XXIsoOfEq_rfl (i₁ : I₁) (i₂ : I₂) :
    K.XXIsoOfEq (rfl : i₁ = i₁) (rfl : i₂ = i₂) = Iso.refl _ 
goal: HomologicalComplex₂.XXIsoOfEq C c₁ c₂ K ⋯ ⋯ = CategoryTheory.Iso.refl ((K.X i₁).X i₂)