Documentation

Mathlib.CategoryTheory.Abelian.InjectiveResolution

Main result #

When the underlying category is abelian:

Auxiliary construction for desc.

Instances For

    A morphism in C descends to a chain map between injective resolutions.

    Instances For
      def CategoryTheory.InjectiveResolution.descHomotopyZeroSucc {C : Type u} [CategoryTheory.Category.{v, u} C] [CategoryTheory.Abelian C] {Y : C} {Z : C} {I : CategoryTheory.InjectiveResolution Y} {J : CategoryTheory.InjectiveResolution Z} (f : I.cocomplex J.cocomplex) (n : ) (g : HomologicalComplex.X I.cocomplex (n + 1) HomologicalComplex.X J.cocomplex n) (g' : HomologicalComplex.X I.cocomplex (n + 2) HomologicalComplex.X J.cocomplex (n + 1)) (w : HomologicalComplex.Hom.f f (n + 1) = CategoryTheory.CategoryStruct.comp (HomologicalComplex.d I.cocomplex (n + 1) (n + 2)) g' + CategoryTheory.CategoryStruct.comp g (HomologicalComplex.d J.cocomplex n (n + 1))) :
      HomologicalComplex.X I.cocomplex (n + 3) HomologicalComplex.X J.cocomplex (n + 2)

      An auxiliary definition for descHomotopyZero.

      Instances For

        Any descent of the zero morphism is homotopic to zero.

        Instances For

          Two descents of the same morphism are homotopic.

          Instances For

            Any two injective resolutions are homotopy equivalent.

            Instances For
              @[inline, reducible]

              An arbitrarily chosen injective resolution of an object.

              Instances For
                @[inline, reducible]

                The cochain map from cochain complex consisting of Z supported in degree 0 back to the arbitrarily chosen injective resolution injectiveResolution Z.

                Instances For
                  @[inline, reducible]

                  The descent of a morphism to a cochain map between the arbitrarily chosen injective resolutions.

                  Instances For

                    Taking injective resolutions is functorial, if considered with target the homotopy category (-indexed cochain complexes and chain maps up to homotopy).

                    Instances For

                      Our goal is to define InjectiveResolution.of Z : InjectiveResolution Z. The 0-th object in this resolution will just be Injective.under Z, i.e. an arbitrarily chosen injective object with a map from Z. After that, we build the n+1-st object as Injective.syzygies applied to the previously constructed morphism, and the map from the n-th object as Injective.d.

                      @[simp]
                      theorem CategoryTheory.InjectiveResolution.ofCocomplex_d {C : Type u} [CategoryTheory.Category.{v, u} C] [CategoryTheory.Abelian C] [CategoryTheory.EnoughInjectives C] (Z : C) (i : ) (j : ) :
                      HomologicalComplex.d (CategoryTheory.InjectiveResolution.ofCocomplex Z) i j = if h : i + 1 = j then CategoryTheory.CategoryStruct.comp (CochainComplex.mkAux (CategoryTheory.Injective.under Z) (CategoryTheory.Injective.syzygies (CategoryTheory.Injective.ι Z)) (CategoryTheory.Injective.syzygies (CategoryTheory.Injective.d (CategoryTheory.Injective.ι Z))) (CategoryTheory.Injective.d (CategoryTheory.Injective.ι Z)) (CategoryTheory.Injective.d (CategoryTheory.Injective.d (CategoryTheory.Injective.ι Z))) (_ : CategoryTheory.CategoryStruct.comp { fst := CategoryTheory.Injective.under Z, snd := { fst := CategoryTheory.Injective.syzygies (CategoryTheory.Injective.ι Z), snd := CategoryTheory.Injective.d (CategoryTheory.Injective.ι Z) } }.snd.snd { fst := CategoryTheory.Injective.syzygies { fst := CategoryTheory.Injective.under Z, snd := { fst := CategoryTheory.Injective.syzygies (CategoryTheory.Injective.ι Z), snd := CategoryTheory.Injective.d (CategoryTheory.Injective.ι Z) } }.2.snd, snd := { fst := CategoryTheory.Injective.d { fst := CategoryTheory.Injective.under Z, snd := { fst := CategoryTheory.Injective.syzygies (CategoryTheory.Injective.ι Z), snd := CategoryTheory.Injective.d (CategoryTheory.Injective.ι Z) } }.2.snd, snd := (_ : CategoryTheory.CategoryStruct.comp { fst := CategoryTheory.Injective.under Z, snd := { fst := CategoryTheory.Injective.syzygies (CategoryTheory.Injective.ι Z), snd := CategoryTheory.Injective.d (CategoryTheory.Injective.ι Z) } }.2.snd (CategoryTheory.Injective.d { fst := CategoryTheory.Injective.under Z, snd := { fst := CategoryTheory.Injective.syzygies (CategoryTheory.Injective.ι Z), snd := CategoryTheory.Injective.d (CategoryTheory.Injective.ι Z) } }.2.snd) = 0) } }.snd.fst = 0) (fun t => { fst := CategoryTheory.Injective.syzygies t.snd.snd.snd.snd.fst, snd := { fst := CategoryTheory.Injective.d t.snd.snd.snd.snd.fst, snd := (_ : CategoryTheory.CategoryStruct.comp t.snd.snd.snd.snd.fst (CategoryTheory.Injective.d t.snd.snd.snd.snd.fst) = 0) } }) i).d₀ (CategoryTheory.eqToHom (_ : (CochainComplex.mkAux (CategoryTheory.Injective.under Z) (CategoryTheory.Injective.syzygies (CategoryTheory.Injective.ι Z)) (CategoryTheory.Injective.syzygies (CategoryTheory.Injective.d (CategoryTheory.Injective.ι Z))) (CategoryTheory.Injective.d (CategoryTheory.Injective.ι Z)) (CategoryTheory.Injective.d (CategoryTheory.Injective.d (CategoryTheory.Injective.ι Z))) (_ : CategoryTheory.CategoryStruct.comp { fst := CategoryTheory.Injective.under Z, snd := { fst := CategoryTheory.Injective.syzygies (CategoryTheory.Injective.ι Z), snd := CategoryTheory.Injective.d (CategoryTheory.Injective.ι Z) } }.snd.snd { fst := CategoryTheory.Injective.syzygies { fst := CategoryTheory.Injective.under Z, snd := { fst := CategoryTheory.Injective.syzygies (CategoryTheory.Injective.ι Z), snd := CategoryTheory.Injective.d (CategoryTheory.Injective.ι Z) } }.2.snd, snd := { fst := CategoryTheory.Injective.d { fst := CategoryTheory.Injective.under Z, snd := { fst := CategoryTheory.Injective.syzygies (CategoryTheory.Injective.ι Z), snd := CategoryTheory.Injective.d (CategoryTheory.Injective.ι Z) } }.2.snd, snd := (_ : CategoryTheory.CategoryStruct.comp { fst := CategoryTheory.Injective.under Z, snd := { fst := CategoryTheory.Injective.syzygies (CategoryTheory.Injective.ι Z), snd := CategoryTheory.Injective.d (CategoryTheory.Injective.ι Z) } }.2.snd (CategoryTheory.Injective.d { fst := CategoryTheory.Injective.under Z, snd := { fst := CategoryTheory.Injective.syzygies (CategoryTheory.Injective.ι Z), snd := CategoryTheory.Injective.d (CategoryTheory.Injective.ι Z) } }.2.snd) = 0) } }.snd.fst = 0) (fun t => { fst := CategoryTheory.Injective.syzygies t.snd.snd.snd.snd.fst, snd := { fst := CategoryTheory.Injective.d t.snd.snd.snd.snd.fst, snd := (_ : CategoryTheory.CategoryStruct.comp t.snd.snd.snd.snd.fst (CategoryTheory.Injective.d t.snd.snd.snd.snd.fst) = 0) } }) (i + 1)).X₀ = (CochainComplex.mkAux (CategoryTheory.Injective.under Z) (CategoryTheory.Injective.syzygies (CategoryTheory.Injective.ι Z)) (CategoryTheory.Injective.syzygies (CategoryTheory.Injective.d (CategoryTheory.Injective.ι Z))) (CategoryTheory.Injective.d (CategoryTheory.Injective.ι Z)) (CategoryTheory.Injective.d (CategoryTheory.Injective.d (CategoryTheory.Injective.ι Z))) (_ : CategoryTheory.CategoryStruct.comp { fst := CategoryTheory.Injective.under Z, snd := { fst := CategoryTheory.Injective.syzygies (CategoryTheory.Injective.ι Z), snd := CategoryTheory.Injective.d (CategoryTheory.Injective.ι Z) } }.snd.snd { fst := CategoryTheory.Injective.syzygies { fst := CategoryTheory.Injective.under Z, snd := { fst := CategoryTheory.Injective.syzygies (CategoryTheory.Injective.ι Z), snd := CategoryTheory.Injective.d (CategoryTheory.Injective.ι Z) } }.2.snd, snd := { fst := CategoryTheory.Injective.d { fst := CategoryTheory.Injective.under Z, snd := { fst := CategoryTheory.Injective.syzygies (CategoryTheory.Injective.ι Z), snd := CategoryTheory.Injective.d (CategoryTheory.Injective.ι Z) } }.2.snd, snd := (_ : CategoryTheory.CategoryStruct.comp { fst := CategoryTheory.Injective.under Z, snd := { fst := CategoryTheory.Injective.syzygies (CategoryTheory.Injective.ι Z), snd := CategoryTheory.Injective.d (CategoryTheory.Injective.ι Z) } }.2.snd (CategoryTheory.Injective.d { fst := CategoryTheory.Injective.under Z, snd := { fst := CategoryTheory.Injective.syzygies (CategoryTheory.Injective.ι Z), snd := CategoryTheory.Injective.d (CategoryTheory.Injective.ι Z) } }.2.snd) = 0) } }.snd.fst = 0) (fun t => { fst := CategoryTheory.Injective.syzygies t.snd.snd.snd.snd.fst, snd := { fst := CategoryTheory.Injective.d t.snd.snd.snd.snd.fst, snd := (_ : CategoryTheory.CategoryStruct.comp t.snd.snd.snd.snd.fst (CategoryTheory.Injective.d t.snd.snd.snd.snd.fst) = 0) } }) j).X₀)) else 0
                      @[simp]
                      theorem CategoryTheory.InjectiveResolution.ofCocomplex_X {C : Type u} [CategoryTheory.Category.{v, u} C] [CategoryTheory.Abelian C] [CategoryTheory.EnoughInjectives C] (Z : C) (n : ) :
                      HomologicalComplex.X (CategoryTheory.InjectiveResolution.ofCocomplex Z) n = (CochainComplex.mkAux (CategoryTheory.Injective.under Z) (CategoryTheory.Injective.syzygies (CategoryTheory.Injective.ι Z)) (CategoryTheory.Injective.syzygies (CategoryTheory.Injective.d (CategoryTheory.Injective.ι Z))) (CategoryTheory.Injective.d (CategoryTheory.Injective.ι Z)) (CategoryTheory.Injective.d (CategoryTheory.Injective.d (CategoryTheory.Injective.ι Z))) (_ : CategoryTheory.CategoryStruct.comp { fst := CategoryTheory.Injective.under Z, snd := { fst := CategoryTheory.Injective.syzygies (CategoryTheory.Injective.ι Z), snd := CategoryTheory.Injective.d (CategoryTheory.Injective.ι Z) } }.snd.snd { fst := CategoryTheory.Injective.syzygies { fst := CategoryTheory.Injective.under Z, snd := { fst := CategoryTheory.Injective.syzygies (CategoryTheory.Injective.ι Z), snd := CategoryTheory.Injective.d (CategoryTheory.Injective.ι Z) } }.2.snd, snd := { fst := CategoryTheory.Injective.d { fst := CategoryTheory.Injective.under Z, snd := { fst := CategoryTheory.Injective.syzygies (CategoryTheory.Injective.ι Z), snd := CategoryTheory.Injective.d (CategoryTheory.Injective.ι Z) } }.2.snd, snd := (_ : CategoryTheory.CategoryStruct.comp { fst := CategoryTheory.Injective.under Z, snd := { fst := CategoryTheory.Injective.syzygies (CategoryTheory.Injective.ι Z), snd := CategoryTheory.Injective.d (CategoryTheory.Injective.ι Z) } }.2.snd (CategoryTheory.Injective.d { fst := CategoryTheory.Injective.under Z, snd := { fst := CategoryTheory.Injective.syzygies (CategoryTheory.Injective.ι Z), snd := CategoryTheory.Injective.d (CategoryTheory.Injective.ι Z) } }.2.snd) = 0) } }.snd.fst = 0) (fun t => { fst := CategoryTheory.Injective.syzygies t.snd.snd.snd.snd.fst, snd := { fst := CategoryTheory.Injective.d t.snd.snd.snd.snd.fst, snd := (_ : CategoryTheory.CategoryStruct.comp t.snd.snd.snd.snd.fst (CategoryTheory.Injective.d t.snd.snd.snd.snd.fst) = 0) } }) n).X₀
                      @[irreducible]

                      In any abelian category with enough injectives, InjectiveResolution.of Z constructs an injective resolution of the object Z.

                      Instances For

                        If X is a cochain complex of injective objects and we have a quasi-isomorphism f : Y[0] ⟶ X, then X is an injective resolution of Y.

                        Instances For