15.64 Products and Tor to 15.80 Characterizing perfect…

Section15.64 Products and Tor#

Section 15.64 of the Stacks Project, Tag 068G. 5 tags here are carried by 5 declarations of the repository (all in StacksFrontier) and 6 registered declarations, quoted below from AxiomMath/Stacks at commit 5ed82d14.

Tag 068G, the section

Tag 068G in the Stacks Project.

RingTheory.TorProducts.derivedTorProduct, a def in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/Tor/DerivedObjectProduct.lean, line 107. The attribute's comment: “products on the Tor of derived objects, the last display of the paragraph following Equation 15.64.0.2”.

The products Torᴿₙ(K, A) ⊗[A] Torᴿₘ(L, A) ⟶ Torᴿₙ₊ₘ(K ⊗ᴸ_R L, A) on the Tor of derived objects K, L ∈ D(R): the cocycle pairing over A carried along the base-change identification.

public noncomputable def derivedTorProduct (f : R →+* A)
    (D : CochainComplex.DerivedExtensionScalars.TotalDerivedExtensionScalars f)
    (K L : DObj R) (n m : ℤ) :
    (derivedTor f D n).obj K ⊗ (derivedTor f D m).obj L ⟶
      (derivedTor f D (n + m)).obj (((canonicalDerivedTensorProductFunctor R).obj K).obj L)

Declarations registered for the tag:

Tag 068H, an equation

Tag 068H in the Stacks Project.

RingTheory.TorProducts.cohomologyTensorProduct, a def in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/Tor/Products.lean, line 289.

Stacks 068H. For any two objects K and L of D(R), tensoring cocycles gives the canonical map Hⁱ(K) ⊗[R] Hʲ(L) ⟶ Hⁱ⁺ʲ(K ⊗ᴸ[R] L).

The representative witness in the result specifies the source's formula [p] ⊗ [q] ↦ [p ⊗ q].

public noncomputable def cohomologyTensorProduct
    (K L : DObj R) (i j : ℤ) : CohomologyTensorProduct K L i j
Tag 068I, an equation

Tag 068I in the Stacks Project.

CochainComplex.DerivedTensor.derivedExtensionScalarsTensorIso, a def in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/Tor/BaseChangeTensorIso.lean, line 829.

The canonical base-change isomorphism (K ⊗ᴸ[R] A) ⊗ᴸ[A] (L ⊗ᴸ[R] A) ≅ (K ⊗ᴸ[R] L) ⊗ᴸ[R] A in D(A), natural in K, L ∈ D(R) and represented on K-flat complexes by standard tensor base change.

public noncomputable def derivedExtensionScalarsTensorIso (f : R →+* A)
    (T_R : DerivedTensorProductGeneral.{uR, max uA v} R)
    (T_A : DerivedTensorProductGeneral.{uA, max uR v} A)
    (D : CochainComplex.DerivedExtensionScalars.TotalDerivedExtensionScalars.{uR, v, uA} f) :
    DerivedExtensionScalarsTensorIso f T_R T_A D
Tag 068J, an equation

Tag 068J in the Stacks Project.

RingTheory.TorProducts.torProduct, a def in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/Tor/CrossProduct/Canonical.lean, line 621.

Stacks 068J. The canonical Tor product Torⁿᴿ(M, A) ⊗[A] Torᵐᴿ(N, A) → Torⁿ⁺ᵐᴿ(M ⊗[R] N, A), simultaneously for all R-modules M and N. Packaging it as a natural transformation records its naturality in both variables.

public noncomputable def torProduct (n m : ℕ) :
    (torBaseChange.{uR, uA, v} R A n).prod (torBaseChange.{uR, uA, v} R A m) ⋙
        tensorBifunctor.{uA, max uR v} A ⟶
      tensorBifunctor.{uR, max uA v} R ⋙ torBaseChange.{uR, uA, v} R A (n + m)
Tag 068K, a lemma

Tag 068K in the Stacks Project.

GradedTor.torPieceMap_isAlgebraHom, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/Tor/GradedAlgebra/Functoriality.lean, line 241. References: SGA 6 VII (2.1), “partial”.

The maps on Tor induced by an R-algebra homomorphism assemble into a homomorphism of the canonical graded A-algebras on Tor: they preserve the unit and the homogeneous multiplication.

public theorem torPieceMap_isAlgebraHom {B C : AlgCat.{v, uR} R} (g : B ⟶ C) :
    torPieceMap.{uR, uA, v} R A g 0 (canonicalAlgebra.{uR, uA, v} R A B).one =
      (canonicalAlgebra.{uR, uA, v} R A C).one ∧
    ∀ (i j : ℤ) (x : torPiece.{uR, uA, v} R A B i)
        (y : torPiece.{uR, uA, v} R A B j),
      torPieceMap.{uR, uA, v} R A g (i + j)
          ((canonicalAlgebra.{uR, uA, v} R A B).mul i j (x ⊗ₜ[A] y)) =
        (canonicalAlgebra.{uR, uA, v} R A C).mul i j
          (torPieceMap.{uR, uA, v} R A g i x ⊗ₜ[A]
            torPieceMap.{uR, uA, v} R A g j y)
Sources

Section15.65 Künneth spectral sequence#

Section 15.65 of the Stacks Project, Tag 0H7V. 5 tags here are carried by 5 declarations of the repository (all in StacksFrontier), quoted below from AxiomMath/Stacks at commit 5ed82d14.

Tag 0H7W, a lemma

Tag 0H7W in the Stacks Project.

CochainComplex.Kunneth.exists_kunneth_convolution_spectral_sequence, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Algebra/Homology/SpectralSequence/Kunneth.lean, line 2171.

For decreasingly filtered complexes K and L satisfying the flatness and K-flatness assumptions of the Künneth construction, there is a convolution-filtered tensor product T and an associated spectral sequence with the expected first page. If both filtrations are finite, or their steps are eventually acyclic and eventually quasi-isomorphic to the underlying complexes, then the first page has finite support in each total degree, the induced filtration on cohomology is finite, and the sequence converges with the canonical stable-page comparison.

public theorem exists_kunneth_convolution_spectral_sequence
    (R : Type u) [CommRing R]
    (K L : FilteredObject (CochainComplex (ModuleCat.{u} R) ℤ) ℤᵒᵖ)
    (hflatK :
      (∀ n : ℤ, Module.Flat R (K.X.X n)) ∧
      (∀ i n : ℤ, Module.Flat R ((K.filtration.obj (op i)).X n)) ∧
      (∀ i n : ℤ, Module.Flat R (((FilteredObject.gr i).obj K).X n)))
    (hflatL :
      (∀ n : ℤ, Module.Flat R (L.X.X n)) ∧
      (∀ i n : ℤ, Module.Flat R ((L.filtration.obj (op i)).X n)) ∧
      (∀ i n : ℤ, Module.Flat R (((FilteredObject.gr i).obj L).X n)))
    (hkflatK : K.X.KFlat ∧ (∀ i : ℤ, (K.filtration.obj (op i)).KFlat) ∧
      (∀ i : ℤ, ((FilteredObject.gr i).obj K).KFlat))
    (hkflatL : L.X.KFlat ∧ (∀ i : ℤ, (L.filtration.obj (op i)).KFlat) ∧
      (∀ i : ℤ, ((FilteredObject.gr i).obj L).KFlat)) :
    ∃ (T : FilteredObject (CochainComplex (ModuleCat.{u} R) ℤ) ℤᵒᵖ)
      (eT : K.X ⊗ L.X ≅ T.X),
      (∀ p n : ℤ, ∀ Q : Subobject (T.X.X n),
        Subobject.mk ((T.filtration.ι.app (op p)).f n) ≤ Q ↔
          ∀ ij : {ij : ℤ × ℤ // ij.1 + ij.2 = p},
            imageSubobject ((((K.filtration.ι.app (op ij.1.1)) ⊗ₘ
              (L.filtration.ι.app (op ij.1.2))) ≫ eT.hom).f n) ≤ Q) ∧
      ∃ (F : ∀ (_p n : ℤ), Subobject (T.X.X n))
        (Z : ∀ (_r _p n : ℤ), Subobject (T.X.X n))
        (D : ∀ (_r _p n : ℤ), Subobject (T.X.X n))
        (FH : ∀ (n _p : ℤ), Subobject (T.X.homology n))
        (E : CohomologicalSpectralSequence (ModuleCat.{u} R) 0)
        (hE : ∀ (r p q n : ℤ) (hr : 0 ≤ r) (_ : n = p + q), (E.page r hr).X (p, q) ≅
          cokernel (Subobject.ofLE _ _ (inf_le_right : D r p n ⊓ Z r p n ≤ Z r p n))),
      (∀ p n : ℤ, F p n = Subobject.mk ((T.filtration.ι.app (op p)).f n)) ∧
      (∀ r p n : ℤ, Z r p n =
        F p n ⊓ (Subobject.pullback (T.X.d n (n + 1))).obj (F (p + r) (n + 1))) ∧
      (∀ r p n : ℤ, D r p n = Z (r - 1) (p + 1) n ⊔
        (Subobject.«exists» (T.X.d (n - 1) n)).obj (Z (r - 1) (p - r + 1) (n - 1))) ∧
      (∀ n p : ℤ, FH n p =
        imageSubobject (HomologicalComplex.homologyMap (T.filtration.ι.app (op p)) n)) ∧
      (∀ p q : ℤ, Nonempty ((E.page 1 (by omega)).X (p, q) ≅
        ∐ fun ij : {ij : ℤ × ℤ // ij.1 + ij.2 = p} ↦
          (((FilteredObject.gr ij.1.1).obj K) ⊗
            ((FilteredObject.gr ij.1.2).obj L)).homology (p + q))) ∧
      (((K.filtration.IsFinite ∧ L.filtration.IsFinite) ∨
          ∃ a b : ℤ, a < b ∧
            (∀ i : ℤ, b < i → (K.filtration.obj (op i)).Acyclic) ∧
            (∀ i : ℤ, i < a → QuasiIso (K.filtration.ι.app (op i))) ∧
            (∀ j : ℤ, b < j → (L.filtration.obj (op j)).Acyclic) ∧
            (∀ j : ℤ, j < a → QuasiIso (L.filtration.ι.app (op j)))) →
      (∀ n : ℤ, {p : ℤ | ¬ IsZero ((E.page 1 (by omega)).X (p, n - p))}.Finite) ∧
      (∀ n : ℤ, ∃ a b : ℤ, a ≤ b ∧ FH n a = ⊤ ∧ FH n b = ⊥) ∧
      (∀ p q : ℤ, ∃ b : ℤ, ∀ (r : ℤ) (hr : 0 ≤ r), b ≤ r →
      (E.page r hr).d (p, q) (p + r, q - r + 1) = 0) ∧
    (∀ p n : ℤ,
      IsGLB (Set.range fun r : ℕ =>
          F p n ⊓ (Subobject.pullback (T.X.d n (n + 1))).obj (F (p + r) (n + 1)) ⊔ F (p + 1) n)
        (kernelSubobject (T.X.d n (n + 1)) ⊓ F p n ⊔ F (p + 1) n) ∧
      IsLUB (Set.range fun r : ℕ =>
          F p n ⊓ (Subobject.«exists» (T.X.d (n - 1) n)).obj (F (p - r) (n - 1)) ⊔
            F (p + 1) n)
        (imageSubobject (T.X.d (n - 1) n) ⊓ F p n ⊔ F (p + 1) n)) ∧
    (∀ p n : ℤ,
      let A := (Subobject.pullback (T.X.iCycles n)).obj (F p n)
      let N := kernelSubobject (T.X.d n (n + 1)) ⊓ F p n ⊔ F (p + 1) n
      let B := imageSubobject (T.X.d (n - 1) n) ⊓ F p n ⊔ F (p + 1) n
      ∃ (a : (A : ModuleCat.{u} R) ⟶ (N : ModuleCat.{u} R))
        (b : (A : ModuleCat.{u} R) ⟶
          image (HomologicalComplex.homologyMap (T.filtration.ι.app (op p)) n))
        (e : cokernel (Subobject.ofLE (B ⊓ N) N inf_le_right) ≅
          cokernel (image.preComp
            (HomologicalComplex.homologyMap (T.filtration.diagram.map
              (homOfLE (Int.le_add_one le_rfl) : (p : ℤ) ⟶ p + 1).op) n)
            (HomologicalComplex.homologyMap (T.filtration.ι.app (op p)) n))),
        A.arrow ≫ T.X.iCycles n = a ≫ N.arrow ∧
        A.arrow ≫ T.X.homologyπ n =
          b ≫ image.ι (HomologicalComplex.homologyMap (T.filtration.ι.app (op p)) n) ∧
        a ≫ cokernel.π (Subobject.ofLE (B ⊓ N) N inf_le_right) ≫ e.hom =
          b ≫ cokernel.π (image.preComp
            (HomologicalComplex.homologyMap (T.filtration.diagram.map
              (homOfLE (Int.le_add_one le_rfl) : (p : ℤ) ⟶ p + 1).op) n)
            (HomologicalComplex.homologyMap (T.filtration.ι.app (op p)) n))))
Tag 0H7X, a lemma

Tag 0H7X in the Stacks Project.

CochainComplex.KFlat.exists_free_kFlat_filtered_resolution, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/KFlat/FilteredResolution.lean, line 1383.

A filtered complex of modules admits a filtered morphism from a complex whose underlying terms, filtration steps, and associated graded pieces are free and K-flat, and this morphism is a quasi-isomorphism on the underlying complex, on every filtration step, and on every associated graded piece.

public theorem exists_free_kFlat_filtered_resolution
    (R : Type u) [CommRing R]
    (K : FilteredObject (CochainComplex (ModuleCat.{u} R) ℤ) ℤᵒᵖ) :
    ∃ (P : FilteredObject (CochainComplex (ModuleCat.{u} R) ℤ) ℤᵒᵖ) (f : P ⟶ K),
      (∀ n : ℤ, Module.Free R (P.X.X n)) ∧
      (∀ i n : ℤ, Module.Free R ((P.filtration.obj (op i)).X n)) ∧
      (∀ i n : ℤ,
        Module.Free R (((FilteredObject.gr i).obj P).X n)) ∧
      P.X.KFlat ∧
      (∀ i : ℤ, (P.filtration.obj (op i)).KFlat) ∧
      (∀ i : ℤ, ((FilteredObject.gr i).obj P).KFlat) ∧
      QuasiIso f.hom ∧
      (∀ i : ℤ, QuasiIso (f.natTrans.app (op i))) ∧
      (∀ i : ℤ, QuasiIso ((FilteredObject.gr i).map f))
Tag 0H7Y, a proposition

Tag 0H7Y in the Stacks Project.

CochainComplex.Kunneth.exists_kunneth_filtered_complex, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Algebra/Homology/SpectralSequence/Kunneth.lean, line 2318.

Two filtered complexes of modules have a filtered K-flat tensor representative whose associated spectral sequence has the expected Künneth first page. If the filtration steps of both complexes are eventually acyclic and eventually quasi-isomorphic to the underlying complexes, then the first page is bounded in every total degree, the induced filtration on cohomology is finite, and the spectral sequence converges canonically to the cohomology of the derived tensor product.

public theorem exists_kunneth_filtered_complex
    (R : Type u) [CommRing R]
    (K L : FilteredObject (CochainComplex (ModuleCat.{u} R) ℤ) ℤᵒᵖ) :
    ∃ (P Q : FilteredObject (CochainComplex (ModuleCat.{u} R) ℤ) ℤᵒᵖ)
      (f : P ⟶ K) (g : Q ⟶ L)
      (T : FilteredObject (CochainComplex (ModuleCat.{u} R) ℤ) ℤᵒᵖ)
      (eT : P.X ⊗ Q.X ≅ T.X),
      ((∀ n : ℤ, Module.Flat R (P.X.X n)) ∧
        (∀ i n : ℤ, Module.Flat R ((P.filtration.obj (op i)).X n)) ∧
        (∀ i n : ℤ, Module.Flat R (((FilteredObject.gr i).obj P).X n)) ∧
        P.X.KFlat ∧
        (∀ i : ℤ, (P.filtration.obj (op i)).KFlat) ∧
        (∀ i : ℤ, ((FilteredObject.gr i).obj P).KFlat) ∧
        QuasiIso f.hom ∧
        (∀ i : ℤ, QuasiIso (f.natTrans.app (op i))) ∧
        (∀ i : ℤ, QuasiIso ((FilteredObject.gr i).map f))) ∧
      ((∀ n : ℤ, Module.Flat R (Q.X.X n)) ∧
        (∀ i n : ℤ, Module.Flat R ((Q.filtration.obj (op i)).X n)) ∧
        (∀ i n : ℤ, Module.Flat R (((FilteredObject.gr i).obj Q).X n)) ∧
        Q.X.KFlat ∧
        (∀ i : ℤ, (Q.filtration.obj (op i)).KFlat) ∧
        (∀ i : ℤ, ((FilteredObject.gr i).obj Q).KFlat) ∧
        QuasiIso g.hom ∧
        (∀ i : ℤ, QuasiIso (g.natTrans.app (op i))) ∧
        (∀ i : ℤ, QuasiIso ((FilteredObject.gr i).map g))) ∧
      (∀ p n : ℤ, ∀ U : Subobject (T.X.X n),
        Subobject.mk ((T.filtration.ι.app (op p)).f n) ≤ U ↔
          ∀ ij : {ij : ℤ × ℤ // ij.1 + ij.2 = p},
            imageSubobject ((((P.filtration.ι.app (op ij.1.1)) ⊗ₘ
              (Q.filtration.ι.app (op ij.1.2))) ≫ eT.hom).f n) ≤ U) ∧
      ∃ (F : ∀ (_p n : ℤ), Subobject (T.X.X n))
        (Z : ∀ (_r _p n : ℤ), Subobject (T.X.X n))
        (D : ∀ (_r _p n : ℤ), Subobject (T.X.X n))
        (FH : ∀ (n _p : ℤ), Subobject (T.X.homology n))
        (E : CohomologicalSpectralSequence (ModuleCat.{u} R) 0)
        (hE : ∀ (r p q n : ℤ) (hr : 0 ≤ r) (_ : n = p + q), (E.page r hr).X (p, q) ≅
          cokernel (Subobject.ofLE _ _
            (inf_le_right : D r p n ⊓ Z r p n ≤ Z r p n))),
        (∀ p n : ℤ, F p n = Subobject.mk ((T.filtration.ι.app (op p)).f n)) ∧
        (∀ r p n : ℤ, Z r p n =
          F p n ⊓ (Subobject.pullback (T.X.d n (n + 1))).obj (F (p + r) (n + 1))) ∧
        (∀ r p n : ℤ, D r p n = Z (r - 1) (p + 1) n ⊔
          (Subobject.«exists» (T.X.d (n - 1) n)).obj (Z (r - 1) (p - r + 1) (n - 1))) ∧
        (∀ n p : ℤ, FH n p =
          imageSubobject (HomologicalComplex.homologyMap (T.filtration.ι.app (op p)) n)) ∧
        (∀ p q : ℤ, Nonempty ((E.page 1 (by omega)).X (p, q) ≅
          ∐ fun ij : {ij : ℤ × ℤ // ij.1 + ij.2 = p} ↦
            (((FilteredObject.gr ij.1.1).obj P) ⊗
              ((FilteredObject.gr ij.1.2).obj Q)).homology (p + q))) ∧
        (((∃ b : ℤ, ∀ i : ℤ, b < i → (K.filtration.obj (op i)).Acyclic) ∧
          (∃ a : ℤ, ∀ i : ℤ, i < a → QuasiIso (K.filtration.ι.app (op i))) ∧
          (∃ b : ℤ, ∀ j : ℤ, b < j → (L.filtration.obj (op j)).Acyclic) ∧
          (∃ a : ℤ, ∀ j : ℤ, j < a → QuasiIso (L.filtration.ι.app (op j)))) →
          (∀ n : ℤ, {p : ℤ | ¬ IsZero ((E.page 1 (by omega)).X (p, n - p))}.Finite) ∧
          (∀ n : ℤ, ∃ a b : ℤ, a ≤ b ∧ FH n a = ⊤ ∧ FH n b = ⊥) ∧
          (∀ p q : ℤ, ∃ b : ℤ, ∀ (r : ℤ) (hr : 0 ≤ r), b ≤ r →
            (E.page r hr).d (p, q) (p + r, q - r + 1) = 0) ∧
          (∀ p n : ℤ,
            IsGLB (Set.range fun r : ℕ ↦
                F p n ⊓ (Subobject.pullback (T.X.d n (n + 1))).obj
                  (F (p + r) (n + 1)) ⊔ F (p + 1) n)
              (kernelSubobject (T.X.d n (n + 1)) ⊓ F p n ⊔ F (p + 1) n) ∧
            IsLUB (Set.range fun r : ℕ ↦
                F p n ⊓ (Subobject.«exists» (T.X.d (n - 1) n)).obj
                  (F (p - r) (n - 1)) ⊔ F (p + 1) n)
              (imageSubobject (T.X.d (n - 1) n) ⊓ F p n ⊔ F (p + 1) n)) ∧
          (∀ p n : ℤ,
            let A := (Subobject.pullback (T.X.iCycles n)).obj (F p n)
            let N := kernelSubobject (T.X.d n (n + 1)) ⊓ F p n ⊔ F (p + 1) n
            let B := imageSubobject (T.X.d (n - 1) n) ⊓ F p n ⊔ F (p + 1) n
            ∃ (a : (A : ModuleCat.{u} R) ⟶ (N : ModuleCat.{u} R))
              (b : (A : ModuleCat.{u} R) ⟶
                image (HomologicalComplex.homologyMap (T.filtration.ι.app (op p)) n))
              (e : cokernel (Subobject.ofLE (B ⊓ N) N inf_le_right) ≅
                cokernel (image.preComp
                  (HomologicalComplex.homologyMap (T.filtration.diagram.map
                    (homOfLE (Int.le_add_one le_rfl) : (p : ℤ) ⟶ p + 1).op) n)
                  (HomologicalComplex.homologyMap (T.filtration.ι.app (op p)) n))),
              A.arrow ≫ T.X.iCycles n = a ≫ N.arrow ∧
              A.arrow ≫ T.X.homologyπ n =
                b ≫ image.ι (HomologicalComplex.homologyMap
                  (T.filtration.ι.app (op p)) n) ∧
              a ≫ cokernel.π (Subobject.ofLE (B ⊓ N) N inf_le_right) ≫ e.hom =
                b ≫ cokernel.π (image.preComp
                  (HomologicalComplex.homologyMap (T.filtration.diagram.map
                    (homOfLE (Int.le_add_one le_rfl) : (p : ℤ) ⟶ p + 1).op) n)
                  (HomologicalComplex.homologyMap
                    (T.filtration.ι.app (op p)) n))))
Tag 0H7Z, a lemma

Tag 0H7Z in the Stacks Project.

CochainComplex.Kunneth.exists_kunneth_spectral_sequence, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Algebra/Homology/SpectralSequence/KunnethTor.lean, line 989. References: EGA III (6.3.2), “(6.3.2.2)”; EGA III (6.5.4), “(6.5.4.2)”; EGA III (6.8.2), “m=2, modules over a ring”.

Künneth spectral sequence. For bounded complexes K and L of modules over a commutative ring, there is a bounded cohomological spectral sequence with E₂^(p,q) = ⊕_(i+j=q) Tor_(-p)(H^i(K), H^j(L)), converging to the cohomology in degree p + q of the derived tensor product. The derived tensor product is represented here by the tensor product of K-flat replacements of K and L.

public theorem exists_kunneth_spectral_sequence
    (R : Type u) [CommRing R]
    (K : CochainComplex (ModuleCat.{v} R) ℤ)
    (L : CochainComplex (ModuleCat.{w} R) ℤ)
    (aK bK aL bL : ℤ) [K.IsGE aK] [K.IsLE bK] [L.IsGE aL] [L.IsLE bL] :
    let S := ULift.{max v w} R
    let U : ModuleCat.{v} R ⥤ ModuleCat.{max u v w} S :=
      ModuleCat.uliftFunctor.{max u w} R ⋙ ModuleCat.restrictScalars ULift.ringEquiv.toRingHom
    let V : ModuleCat.{w} R ⥤ ModuleCat.{max u v w} S :=
      ModuleCat.uliftFunctor.{max u v} R ⋙ ModuleCat.restrictScalars ULift.ringEquiv.toRingHom
    let K' := (U.mapHomologicalComplex (ComplexShape.up ℤ)).obj K
    let L' := (V.mapHomologicalComplex (ComplexShape.up ℤ)).obj L
    ∃ (P Q : CochainComplex (ModuleCat S) ℤ) (f : P ⟶ K') (g : Q ⟶ L')
      (_ : QuasiIso f) (_ : QuasiIso g) (_ : P.KFlat) (_ : Q.KFlat)
      (T : FilteredObject (CochainComplex (ModuleCat S) ℤ) ℤᵒᵖ)
      (eT : P ⊗ Q ≅ T.X)
      (E : E₂CohomologicalSpectralSequence (ModuleCat S))
      (F : ∀ (_p n : ℤ), Subobject (T.X.X n))
      (Z : ∀ (_r _p n : ℤ), Subobject (T.X.X n))
      (D : ∀ (_r _p n : ℤ), Subobject (T.X.X n))
      (FH : ∀ (_n _p : ℤ), Subobject (T.X.homology _n))
      (hE : ∀ (r p q : ℤ) (hr : 2 ≤ r), (E.page r hr).X (p, q) ≅
        cokernel (Subobject.ofLE _ _
          (inf_le_right : D (r - 1) (-q) (p + q) ⊓ Z (r - 1) (-q) (p + q) ≤
            Z (r - 1) (-q) (p + q)))),
      (∀ p n : ℤ, F p n = Subobject.mk ((T.filtration.ι.app (op p)).f n)) ∧
      (∀ r p n : ℤ, Z r p n =
        F p n ⊓ (Subobject.pullback (T.X.d n (n + 1))).obj (F (p + r) (n + 1))) ∧
      (∀ r p n : ℤ, D r p n = Z (r - 1) (p + 1) n ⊔
        (Subobject.«exists» (T.X.d (n - 1) n)).obj (Z (r - 1) (p - r + 1) (n - 1))) ∧
      (∀ n p : ℤ, FH n p =
        imageSubobject (HomologicalComplex.homologyMap (T.filtration.ι.app (op p)) n)) ∧
      (∀ p q : ℤ, p ≤ 0 →
        Nonempty ((E.page 2).X (p, q) ≅
          ∐ fun ij : {ij : ℤ × ℤ // ij.1 + ij.2 = q} ↦
            ((Tor' (ModuleCat S) (-p).toNat).obj (K'.homology ij.1.1)).obj
              (L'.homology ij.1.2))) ∧
      (∀ p q : ℤ, 0 < p → IsZero ((E.page 2).X (p, q))) ∧
      (∀ n : ℤ, {p : ℤ | ¬ IsZero ((E.page 2).X (p, n - p))}.Finite) ∧
      (∀ n : ℤ, ∃ a b : ℤ, a ≤ b ∧ FH n a = ⊤ ∧ FH n b = ⊥) ∧
      (∀ p q : ℤ, ∃ (r₀ : ℤ) (hr₀ : 2 ≤ r₀), ∀ (r : ℤ) (hr : r₀ ≤ r),
        let n := p + q
        let i := -q
        let N := kernelSubobject (T.X.d n (n + 1)) ⊓ F i n ⊔ F (i + 1) n
        let B := imageSubobject (T.X.d (n - 1) n) ⊓ F i n ⊔ F (i + 1) n
        (E.page r (by omega)).d (p, q) (p + r, q - r + 1) = 0 ∧
          Z (r - 1) i n ⊔ F (i + 1) n = N ∧
          (D (r - 1) i n ⊓ Z (r - 1) i n) ⊔ F (i + 1) n = B ⊓ N) ∧
      (∀ p n : ℤ,
        let A := (Subobject.pullback (T.X.iCycles n)).obj (F p n)
        let N := kernelSubobject (T.X.d n (n + 1)) ⊓ F p n ⊔ F (p + 1) n
        let B := imageSubobject (T.X.d (n - 1) n) ⊓ F p n ⊔ F (p + 1) n
        ∃ (a : (A : ModuleCat S) ⟶ (N : ModuleCat S))
          (b : (A : ModuleCat S) ⟶
            image (HomologicalComplex.homologyMap (T.filtration.ι.app (op p)) n))
          (e : cokernel (Subobject.ofLE (B ⊓ N) N inf_le_right) ≅
            cokernel (image.preComp
              (HomologicalComplex.homologyMap (T.filtration.diagram.map
                (homOfLE (Int.le_add_one le_rfl) : (p : ℤ) ⟶ p + 1).op) n)
              (HomologicalComplex.homologyMap (T.filtration.ι.app (op p)) n))),
          A.arrow ≫ T.X.iCycles n = a ≫ N.arrow ∧
          A.arrow ≫ T.X.homologyπ n =
            b ≫ image.ι (HomologicalComplex.homologyMap
              (T.filtration.ι.app (op p)) n) ∧
          a ≫ cokernel.π (Subobject.ofLE (B ⊓ N) N inf_le_right) ≫ e.hom =
            b ≫ cokernel.π (image.preComp
              (HomologicalComplex.homologyMap (T.filtration.diagram.map
                (homOfLE (Int.le_add_one le_rfl) : (p : ℤ) ⟶ p + 1).op) n)
              (HomologicalComplex.homologyMap
                (T.filtration.ι.app (op p)) n)))
Tag 0H80, an example

Tag 0H80 in the Stacks Project.

CochainComplex.Kunneth.tor_isZero_and_exists_kunneth_shortExact, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Algebra/Homology/SpectralSequence/KunnethTor.lean, line 1327. References: EGA III (7.6.4), “(i) short exact sequence”.

Künneth short exact sequence over a Dedekind domain. Higher Tor modules vanish over a Dedekind domain. Thus the bounded Künneth spectral sequence degenerates at E₂, and its edge maps exhibit the cohomology of a derived tensor product as an extension of the direct sum of tensor products in total degree n by the direct sum of first Tor modules in total degree n + 1.

public theorem tor_isZero_and_exists_kunneth_shortExact
    (R : Type u) [CommRing R] [IsDedekindDomain R] :
    let S := ULift.{max v w} R
    let U : ModuleCat.{v} R ⥤ ModuleCat.{max u v w} S :=
      ModuleCat.uliftFunctor.{max u w} R ⋙ ModuleCat.restrictScalars ULift.ringEquiv.toRingHom
    let V : ModuleCat.{w} R ⥤ ModuleCat.{max u v w} S :=
      ModuleCat.uliftFunctor.{max u v} R ⋙ ModuleCat.restrictScalars ULift.ringEquiv.toRingHom
    (∀ (M : ModuleCat.{v} R) (N : ModuleCat.{w} R) (i : ℕ), i ≠ 0 → i ≠ 1 →
      IsZero (((Tor' (ModuleCat S) i).obj (U.obj M)).obj (V.obj N))) ∧
    ∀ (K : CochainComplex (ModuleCat.{v} R) ℤ) (L : CochainComplex (ModuleCat.{w} R) ℤ)
      (aK bK aL bL : ℤ) [K.IsGE aK] [K.IsLE bK] [L.IsGE aL] [L.IsLE bL],
      let K' := (U.mapHomologicalComplex (ComplexShape.up ℤ)).obj K
      let L' := (V.mapHomologicalComplex (ComplexShape.up ℤ)).obj L
      ∃ (P Q : CochainComplex (ModuleCat S) ℤ) (f : P ⟶ K') (g : Q ⟶ L')
        (_ : QuasiIso f) (_ : QuasiIso g) (_ : P.KFlat) (_ : Q.KFlat)
        (T : FilteredObject (CochainComplex (ModuleCat S) ℤ) ℤᵒᵖ)
        (eT : P ⊗ Q ≅ T.X)
        (E : E₂CohomologicalSpectralSequence (ModuleCat S))
        (F : ∀ (_p n : ℤ), Subobject (T.X.X n))
        (Z : ∀ (_r _p n : ℤ), Subobject (T.X.X n))
        (D : ∀ (_r _p n : ℤ), Subobject (T.X.X n))
        (FH : ∀ (_n _p : ℤ), Subobject (T.X.homology _n))
        (_hE : ∀ (r p q : ℤ) (hr : 2 ≤ r), (E.page r hr).X (p, q) ≅
          cokernel (Subobject.ofLE _ _
            (inf_le_right : D (r - 1) (-q) (p + q) ⊓ Z (r - 1) (-q) (p + q) ≤
              Z (r - 1) (-q) (p + q))))
        (e₂ : ∀ (p q : ℤ) (_hp : p ≤ 0), (E.page 2).X (p, q) ≅
          ∐ fun ij : {ij : ℤ × ℤ // ij.1 + ij.2 = q} ↦
            ((Tor' (ModuleCat S) (-p).toNat).obj (K'.homology ij.1.1)).obj
              (L'.homology ij.1.2)),
        (∀ p n : ℤ, F p n = Subobject.mk ((T.filtration.ι.app (op p)).f n)) ∧
        (∀ r p n : ℤ, Z r p n =
          F p n ⊓ (Subobject.pullback (T.X.d n (n + 1))).obj (F (p + r) (n + 1))) ∧
        (∀ r p n : ℤ, D r p n = Z (r - 1) (p + 1) n ⊔
          (Subobject.«exists» (T.X.d (n - 1) n)).obj (Z (r - 1) (p - r + 1) (n - 1))) ∧
        (∀ n p : ℤ, FH n p =
          imageSubobject (HomologicalComplex.homologyMap (T.filtration.ι.app (op p)) n)) ∧
        (∀ p q : ℤ, 0 < p → IsZero ((E.page 2).X (p, q))) ∧
        (∀ n : ℤ, {p : ℤ | ¬ IsZero ((E.page 2).X (p, n - p))}.Finite) ∧
        (∀ n : ℤ, ∃ a b : ℤ, a ≤ b ∧ FH n a = ⊤ ∧ FH n b = ⊥) ∧
        (∀ p q : ℤ, ∃ (r₀ : ℤ) (hr₀ : 2 ≤ r₀), ∀ (r : ℤ) (hr : r₀ ≤ r),
          let n := p + q
          let i := -q
          let N := kernelSubobject (T.X.d n (n + 1)) ⊓ F i n ⊔ F (i + 1) n
          let B := imageSubobject (T.X.d (n - 1) n) ⊓ F i n ⊔ F (i + 1) n
          (E.page r (by omega)).d (p, q) (p + r, q - r + 1) = 0 ∧
            Z (r - 1) i n ⊔ F (i + 1) n = N ∧
            (D (r - 1) i n ⊓ Z (r - 1) i n) ⊔ F (i + 1) n = B ⊓ N) ∧
        (∀ p n : ℤ,
          let A := (Subobject.pullback (T.X.iCycles n)).obj (F p n)
          let N := kernelSubobject (T.X.d n (n + 1)) ⊓ F p n ⊔ F (p + 1) n
          let B := imageSubobject (T.X.d (n - 1) n) ⊓ F p n ⊔ F (p + 1) n
          ∃ (a : (A : ModuleCat S) ⟶ (N : ModuleCat S))
            (b : (A : ModuleCat S) ⟶
              image (HomologicalComplex.homologyMap (T.filtration.ι.app (op p)) n))
            (e : cokernel (Subobject.ofLE (B ⊓ N) N inf_le_right) ≅
              cokernel (image.preComp
                (HomologicalComplex.homologyMap (T.filtration.diagram.map
                  (homOfLE (Int.le_add_one le_rfl) : (p : ℤ) ⟶ p + 1).op) n)
                (HomologicalComplex.homologyMap (T.filtration.ι.app (op p)) n))),
            (A.arrow ≫ T.X.iCycles n = a ≫ N.arrow ∧
            A.arrow ≫ T.X.homologyπ n =
              b ≫ image.ι (HomologicalComplex.homologyMap
                (T.filtration.ι.app (op p)) n) ∧
            a ≫ cokernel.π (Subobject.ofLE (B ⊓ N) N inf_le_right) ≫ e.hom =
              b ≫ cokernel.π (image.preComp
                (HomologicalComplex.homologyMap (T.filtration.diagram.map
                  (homOfLE (Int.le_add_one le_rfl) : (p : ℤ) ⟶ p + 1).op) n)
                (HomologicalComplex.homologyMap
                  (T.filtration.ι.app (op p)) n)))) ∧
        (∀ (r p q : ℤ) (hr : 2 ≤ r),
          (E.page r hr).d (p, q) (p + r, q - r + 1) = 0) ∧
        ∀ n : ℤ,
          FH n (-n - 1) = ⊤ ∧ FH n (-n + 1) = ⊥ ∧
          ∃ (torZeroTensor :
              (∐ fun ij : {ij : ℤ × ℤ // ij.1 + ij.2 = n} ↦
                ((Tor' (ModuleCat S) (-0 : ℤ).toNat).obj
                  (K'.homology ij.1.1)).obj (L'.homology ij.1.2)) ≅
              ∐ fun ij : {ij : ℤ × ℤ // ij.1 + ij.2 = n} ↦
                K'.homology ij.1.1 ⊗ L'.homology ij.1.2)
            (torOne :
              (∐ fun ij : {ij : ℤ × ℤ // ij.1 + ij.2 = n + 1} ↦
                ((Tor' (ModuleCat S) (-(-1 : ℤ)).toNat).obj
                  (K'.homology ij.1.1)).obj (L'.homology ij.1.2)) ≅
              ∐ fun ij : {ij : ℤ × ℤ // ij.1 + ij.2 = n + 1} ↦
                ((Tor' (ModuleCat S) 1).obj (K'.homology ij.1.1)).obj
                  (L'.homology ij.1.2))
            (eTensor : (E.page 2).X (0, n) ≅
              ∐ fun ij : {ij : ℤ × ℤ // ij.1 + ij.2 = n} ↦
                K'.homology ij.1.1 ⊗ L'.homology ij.1.2)
            (eTor : (E.page 2).X (-1, n + 1) ≅
              ∐ fun ij : {ij : ℤ × ℤ // ij.1 + ij.2 = n + 1} ↦
                ((Tor' (ModuleCat S) 1).obj (K'.homology ij.1.1)).obj
                  (L'.homology ij.1.2))
            (e₀ : (E.page 2).X (0, n) ≅ (FH n (-n) : ModuleCat S))
            (e₁ : (E.page 2).X (-1, n + 1) ≅ cokernel (FH n (-n)).arrow)
            (ι : (∐ fun ij : {ij : ℤ × ℤ // ij.1 + ij.2 = n} ↦
                K'.homology ij.1.1 ⊗ L'.homology ij.1.2) ⟶ (P ⊗ Q).homology n)
            (π : (P ⊗ Q).homology n ⟶
              ∐ fun ij : {ij : ℤ × ℤ // ij.1 + ij.2 = n + 1} ↦
                ((Tor' (ModuleCat S) 1).obj (K'.homology ij.1.1)).obj
                  (L'.homology ij.1.2))
            (h : ι ≫ π = 0),
            eTensor = (e₂ 0 n (by omega)).trans torZeroTensor ∧
            eTor = (e₂ (-1) (n + 1) (by omega)).trans torOne ∧
            ι = eTensor.inv ≫ e₀.hom ≫ (FH n (-n)).arrow ≫
                HomologicalComplex.homologyMap eT.inv n ∧
            π = HomologicalComplex.homologyMap eT.hom n ≫
                cokernel.π (FH n (-n)).arrow ≫ e₁.inv ≫ eTor.hom ∧
            (ShortComplex.mk ι π h).ShortExact
Sources

Section15.66 Pseudo-coherent modules, I#

Section 15.66 of the Stacks Project, Tag 064N. 19 tags here are carried by 25 declarations of the repository (all in StacksFrontier), quoted below from AxiomMath/Stacks at commit 5ed82d14.

Tag 064P, an equation

Tag 064P in the Stacks Project.

StacksDraft.PseudoCoherence.HasFiniteFreeResolutionUpTo, a def in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/PseudoCoherent/Module.lean, line 76.

A module has a finite free resolution through degree n if there is an exact sequence R^{a_n} → ⋯ → R^{a_0} → M → 0. Exactness is required at M and at every finite free term except the leftmost one.

def HasFiniteFreeResolutionUpTo
    (R : Type u) [Ring R] (M : Type v) [AddCommGroup M] [Module R M] (n : ℕ) : Prop
Tag 064Q, a definition

Tag 064Q in the Stacks Project.

StacksDraft.PseudoCoherence.IsPseudoCoherentFrom, a def in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Algebra/Homology/PseudoCoherent.lean, line 123. The attribute's comment: “(1)”. References: SGA 6 II (2.3.2).

An object K of D(R) is m-pseudo-coherent when there is a bounded complex E of finite free R-modules and a morphism α : Q(E) ⟶ K in D(R), where Q sends a complex to its image in the derived category, such that Hⁱ(α) is an isomorphism for every i > m and Hᵐ(α) is surjective.

def IsPseudoCoherentFrom (K : DerivedCategory (ModuleCat.{v} R)) (m : ℤ) : Prop

StacksDraft.PseudoCoherence.IsPseudoCoherent, a def in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Algebra/Homology/PseudoCoherent.lean, line 132. The attribute's comment: “(2)”.

An object K of D(R) is pseudo-coherent when it is represented by a bounded-above complex of finite free R-modules.

def IsPseudoCoherent (K : DerivedCategory (ModuleCat.{v} R)) : Prop

StacksDraft.PseudoCoherence.IsModulePseudoCoherentFrom, a def in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Algebra/Homology/PseudoCoherent.lean, line 139. The attribute's comment: “(3)”.

An R-module M is m-pseudo-coherent when the object of D(R) concentrated in degree 0 with value M is m-pseudo-coherent.

def IsModulePseudoCoherentFrom (M : Type v) [AddCommGroup M] [Module R M] (m : ℤ) : Prop

StacksDraft.PseudoCoherence.IsModulePseudoCoherent, a def in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Algebra/Homology/PseudoCoherent.lean, line 146. The attribute's comment: “(4)”.

An R-module M is pseudo-coherent when the object of D(R) concentrated in degree 0 with value M is pseudo-coherent.

def IsModulePseudoCoherent (M : Type v) [AddCommGroup M] [Module R M] : Prop
Tag 064R, a lemma

Tag 064R in the Stacks Project.

PseudoCoherence.isPseudoCoherent_of_distinguished_one, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/PseudoCoherent/Triangle.lean, line 848. The attribute's comment: “(1)”. References: SGA 6 I (2.6), “special case”; SGA 6 III (1.4), “special case”.

Statement (1). If K is (m+1)-pseudo-coherent and L is m-pseudo-coherent, and (K, L, M, f, g, h) is a distinguished triangle, then M is m-pseudo-coherent.

Assembled from the three sub-lemmas above. The degree bookkeeping: with α : Q P ⟶ K iso on H^i (i > m+1)/epi on H^{m+1} and β : Q E ⟶ L iso on H^i (i > m)/epi on H^m, the cone C carries μ = φ.hom₃ : Q C ⟶ M. For i > m: H^i(α) is epi (iso if i > m+1, epi if i = m+1), H^i(β) iso, H^{i+1}(α) iso (since i+1 > m+1), H^{i+1}(β) mono (iso since i+1 > m), so Sub-lemma B gives H^i(μ) iso. For i = m: H^m(β) epi, H^{m+1}(α) epi, H^{m+1}(β) mono (iso since m+1 > m), so Sub-lemma C gives H^m(μ) epi. Hence (C, μ) witnesses that M is m-pseudo-coherent.

theorem isPseudoCoherent_of_distinguished_one
    (m : ℤ) (T : Triangle (DerivedCategory (ModuleCat.{v} R)))
    (hT : T ∈ distinguishedTriangles)
    (hK : IsPseudoCoherentFrom T.obj₁ (m + 1))
    (hL : IsPseudoCoherentFrom T.obj₂ m) :
    IsPseudoCoherentFrom T.obj₃ m

PseudoCoherence.isPseudoCoherent_of_distinguished_two, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/PseudoCoherent/Triangle.lean, line 905. The attribute's comment: “(2)”. References: SGA 6 I (2.5), “b), modules over a ring”; SGA 6 I (2.6), “special case”; SGA 6 III (1.4), “special case”.

Statement (2). If K and M are both m-pseudo-coherent, and (K, L, M, f, g, h) is a distinguished triangle, then L is m-pseudo-coherent.

Reduction to (1): apply (1) to the (distinguished) inverse-rotated triangle (M⟦-1⟧, K, L), using that M⟦-1⟧ is (m+1)-pseudo-coherent (shift of the m-pseudo-coherent M) and K is m-pseudo-coherent.

theorem isPseudoCoherent_of_distinguished_two
    (m : ℤ) (T : Triangle (DerivedCategory (ModuleCat.{v} R)))
    (hT : T ∈ distinguishedTriangles)
    (hK : IsPseudoCoherentFrom T.obj₁ m)
    (hM : IsPseudoCoherentFrom T.obj₃ m) :
    IsPseudoCoherentFrom T.obj₂ m

PseudoCoherence.isPseudoCoherent_of_distinguished_three, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/PseudoCoherent/Triangle.lean, line 930. The attribute's comment: “(3)”. References: SGA 6 I (2.6), “special case”; SGA 6 III (1.4), “special case”.

Statement (3). If L is (m+1)-pseudo-coherent and M is m-pseudo-coherent, and (K, L, M, f, g, h) is a distinguished triangle, then K is (m+1)-pseudo-coherent.

Reduction to (1): apply (1) to the (distinguished) rotated triangle (L, M, K⟦1⟧), concluding K⟦1⟧ is m-pseudo-coherent; shifting back by -1 and transporting along the isomorphism (K⟦1⟧)⟦-1⟧ ≅ K yields that K is (m+1)-pseudo-coherent.

theorem isPseudoCoherent_of_distinguished_three
    (m : ℤ) (T : Triangle (DerivedCategory (ModuleCat.{v} R)))
    (hT : T ∈ distinguishedTriangles)
    (hL : IsPseudoCoherentFrom T.obj₂ (m + 1))
    (hM : IsPseudoCoherentFrom T.obj₃ m) :
    IsPseudoCoherentFrom T.obj₁ (m + 1)
Tag 064S, a lemma

Tag 064S in the Stacks Project.

PseudoCoherence.finite_homology_of_isPseudoCoherentFrom, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/PseudoCoherent/Homology.lean, line 364. The attribute's comment: “(1)”.

Statement 1 (Stacks 064S). If K^• is m-pseudo-coherent and H^i(K^•) = 0 for all i > m, then H^m(K^•) is a finite type R-module.

theorem finite_homology_of_isPseudoCoherentFrom {R : Type u} [Ring R]
    [HasDerivedCategory (ModuleCat.{v} R)] (K : DerivedCategory (ModuleCat.{v} R))
    (m : ℤ) (hK : IsPseudoCoherentFrom K m)
    (hvanish : ∀ i : ℤ, m < i →
      IsZero ((DerivedCategory.homologyFunctor (ModuleCat R) i).obj K)) :
    Module.Finite R ((DerivedCategory.homologyFunctor (ModuleCat R) m).obj K)

PseudoCoherence.finitePresentation_homology_succ_of_isPseudoCoherentFrom, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/PseudoCoherent/Homology.lean, line 399. The attribute's comment: “(2)”.

Statement 2 (Stacks 064S). If K^• is m-pseudo-coherent and H^i(K^•) = 0 for all i > m + 1, then H^{m+1}(K^•) is a finitely presented R-module.

theorem finitePresentation_homology_succ_of_isPseudoCoherentFrom {R : Type u} [Ring R]
    [HasDerivedCategory (ModuleCat.{v} R)] (K : DerivedCategory (ModuleCat.{v} R))
    (m : ℤ) (hK : IsPseudoCoherentFrom K m)
    (hvanish : ∀ i : ℤ, m + 1 < i →
      IsZero ((DerivedCategory.homologyFunctor (ModuleCat R) i).obj K)) :
    Module.FinitePresentation R
      ((DerivedCategory.homologyFunctor (ModuleCat R) (m + 1)).obj K)
Tag 064T, a lemma

Tag 064T in the Stacks Project.

StacksDraft.PseudoCoherence.modulePseudoCoherent_iff_finiteness_and_resolutions, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/PseudoCoherent/Module.lean, line 471. References: SGA 6 I (2.9), “special case”.

Finite generation, finite presentation, finite free resolutions of a fixed length, and infinite finite free resolutions characterize the corresponding forms of pseudo-coherence for a module, represented in a universe containing both R and M.

theorem modulePseudoCoherent_iff_finiteness_and_resolutions
    [HasDerivedCategory (ModuleCat.{max v u} R)] (M : Type v) [AddCommGroup M] [Module R M] :
    (IsModulePseudoCoherentFrom (R := R) (ULift.{u} M) 0 ↔ Module.Finite R M) ∧
    (IsModulePseudoCoherentFrom (R := R) (ULift.{u} M) (-1) ↔ Module.FinitePresentation R M) ∧
    (∀ d : ℕ, IsModulePseudoCoherentFrom (R := R) (ULift.{u} M) (-(d : ℤ)) ↔
      HasFiniteFreeResolutionOfLength (R := R) (ULift.{u} M) d) ∧
    (IsModulePseudoCoherent (R := R) (ULift.{u} M) ↔
      Nonempty (FiniteFreeModuleResolution R (ULift.{u} M)))
Tag 064U, a lemma

Tag 064U in the Stacks Project.

StacksDraft.PseudoCoherence.pseudoCoherent_iff_pseudoCoherentFrom_all_iff_finiteProjective, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/PseudoCoherent/Basic.lean, line 1041.

Stacks 064U. Pseudo-coherence is equivalent both to m-pseudo-coherence for every integer m and to admitting a bounded-above finite projective representative. If cohomology vanishes above b, a finite free representative can be chosen to vanish above b.

theorem pseudoCoherent_iff_pseudoCoherentFrom_all_iff_finiteProjective
    {R : Type u} [Ring R] [HasDerivedCategory (ModuleCat.{max u v} R)]
    (K : DerivedCategory (ModuleCat.{max u v} R)) (b : ℤ) :
    let allDegrees := ∀ m : ℤ, IsPseudoCoherentFrom K m
    let finiteProjectiveRepresentative :=
      ∃ P : CochainComplex (ModuleCat.{max u v} R) ℤ,
        (∃ n : ℤ, P.IsStrictlyLE n) ∧
          (∀ i : ℤ, Module.Finite R (P.X i) ∧ Module.Projective R (P.X i)) ∧
          Nonempty (DerivedCategory.Q.obj P ≅ K)
    (IsPseudoCoherent K ↔ allDegrees) ∧
      (IsPseudoCoherent K ↔ finiteProjectiveRepresentative) ∧
      (IsPseudoCoherent K →
        (∀ i : ℤ, b < i →
          IsZero ((DerivedCategory.homologyFunctor (ModuleCat.{max u v} R) i).obj K)) →
        ∃ (F : CochainComplex (ModuleCat.{max u v} R) ℤ)
          (α : DerivedCategory.Q.obj F ⟶ K),
            (∀ i : ℤ, Module.Finite R (F.X i) ∧ Module.Free R (F.X i)) ∧
              F.IsStrictlyLE b ∧ IsIso α)
Tag 064V, a lemma

Tag 064V in the Stacks Project.

StacksDraft.PseudoCoherence.isPseudoCoherent_of_distinguished, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/PseudoCoherent/Basic.lean, line 1151. References: SGA 6 I (2.5), “b), pseudo-coherent case”; SGA 6 I (2.6), “partial”.

Stacks 064V. In a distinguished triangle in D(R), if two of the three objects are pseudo-coherent, then so is the third.

theorem isPseudoCoherent_of_distinguished
    {R : Type u} [Ring R] [HasDerivedCategory (ModuleCat.{v} R)]
    (T : Triangle (DerivedCategory (ModuleCat.{v} R)))
    (hT : T ∈ distinguishedTriangles) :
    (IsPseudoCoherent T.obj₁ → IsPseudoCoherent T.obj₂ → IsPseudoCoherent T.obj₃) ∧
    (IsPseudoCoherent T.obj₁ → IsPseudoCoherent T.obj₃ → IsPseudoCoherent T.obj₂) ∧
    (IsPseudoCoherent T.obj₂ → IsPseudoCoherent T.obj₃ → IsPseudoCoherent T.obj₁)
Tag 064W, a lemma

Tag 064W in the Stacks Project.

StacksDraft.PseudoCoherence.isPseudoCoherentFrom_of_vanishing_and_finite_homology, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/PseudoCoherent/Module.lean, line 745. References: SGA 6 I (2.11), “b), H^i=0 for i>m+1”.

Vanishing above degree m, with the appropriate finiteness assumptions on the cohomology in degrees m and m + 1, implies m-pseudo-coherence.

theorem isPseudoCoherentFrom_of_vanishing_and_finite_homology
    {R : Type u} [Ring R] [HasDerivedCategory (ModuleCat.{v} R)] [Small.{v} R]
    (K : DerivedCategory (ModuleCat.{v} R)) (m : ℤ) :
    ((∀ i : ℤ, m ≤ i →
        IsZero ((DerivedCategory.homologyFunctor (ModuleCat.{v} R) i).obj K)) →
      IsPseudoCoherentFrom K m) ∧
    ((∀ i : ℤ, m < i →
        IsZero ((DerivedCategory.homologyFunctor (ModuleCat.{v} R) i).obj K)) →
      Module.Finite R ((DerivedCategory.homologyFunctor (ModuleCat.{v} R) m).obj K) →
      IsPseudoCoherentFrom K m) ∧
    ((∀ i : ℤ, m + 1 < i →
        IsZero ((DerivedCategory.homologyFunctor (ModuleCat.{v} R) i).obj K)) →
      Module.FinitePresentation R
        ((DerivedCategory.homologyFunctor (ModuleCat.{v} R) (m + 1)).obj K) →
      Module.Finite R ((DerivedCategory.homologyFunctor (ModuleCat.{v} R) m).obj K) →
      IsPseudoCoherentFrom K m)
Tag 064X, a lemma

Tag 064X in the Stacks Project.

PseudoCoherence.isPseudoCoherentFrom_and_pseudoCoherent_of_biproduct, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/PseudoCoherent/Characterization.lean, line 103. References: SGA 6 I (2.12), “necessity”.

Stacks 064X. Each summand of an m-pseudo-coherent binary biproduct is m-pseudo-coherent, and each summand of a pseudo-coherent binary biproduct is pseudo-coherent.

theorem isPseudoCoherentFrom_and_pseudoCoherent_of_biproduct
    {R : Type u} [Ring R] (K L : DerivedCategory (ModuleCat.{v} R)) (m : ℤ) :
    (IsPseudoCoherentFrom (K ⊞ L) m →
      IsPseudoCoherentFrom K m ∧ IsPseudoCoherentFrom L m) ∧
    (IsPseudoCoherent (K ⊞ L) → IsPseudoCoherent K ∧ IsPseudoCoherent L)
Tag 064Y, a lemma

Tag 064Y in the Stacks Project.

StacksDraft.PseudoCoherence.pseudoCoherentFrom_and_pseudoCoherent_of_boundedAbove, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/PseudoCoherent/Module.lean, line 617. References: SGA 5 VIII (5.1), “'if' direction”; SGA 6 I (2.11), “Part a), special case”.

A bounded-above complex with suitably pseudo-coherent terms is pseudo-coherent in the corresponding degrees. In particular, pseudo-coherence of every term implies pseudo-coherence of the complex.

theorem pseudoCoherentFrom_and_pseudoCoherent_of_boundedAbove
    (K : CochainComplex (ModuleCat.{v} R) ℤ) (hK : ∃ b : ℤ, K.IsStrictlyLE b) :
    (∀ m : ℤ, (∀ i : ℤ, IsModulePseudoCoherentFrom (R := R) (K.X i) (m - i)) →
      IsPseudoCoherentFrom (DerivedCategory.Q.obj K) m) ∧
    ((∀ i : ℤ, IsModulePseudoCoherent (R := R) (K.X i)) →
      IsPseudoCoherent (DerivedCategory.Q.obj K))
Tag 066B, a lemma

Tag 066B in the Stacks Project.

StacksDraft.PseudoCoherence.pseudoCoherentFrom_and_pseudoCoherent_of_boundedAbove_cohomology, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/PseudoCoherent/Module.lean, line 884.

A cohomologically bounded-above derived object whose cohomology modules are pseudo-coherent in the corresponding degrees is pseudo-coherent.

theorem pseudoCoherentFrom_and_pseudoCoherent_of_boundedAbove_cohomology
    (K : DerivedCategory (ModuleCat.{v} R))
    (hK : ∃ b : ℤ, ∀ i : ℤ, b < i →
      IsZero ((DerivedCategory.homologyFunctor (ModuleCat.{v} R) i).obj K)) :
    (∀ m : ℤ,
      (∀ i : ℤ, IsModulePseudoCoherentFrom (R := R)
        ((DerivedCategory.homologyFunctor (ModuleCat.{v} R) i).obj K) (m - i)) →
      IsPseudoCoherentFrom K m) ∧
    ((∀ i : ℤ, IsModulePseudoCoherent (R := R)
        ((DerivedCategory.homologyFunctor (ModuleCat.{v} R) i).obj K)) →
      IsPseudoCoherent K)
Tag 064Z, a lemma

Tag 064Z in the Stacks Project.

StacksDraft.PseudoCoherence.pseudoCoherentFrom_and_pseudoCoherent_iff_restrictScalars, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/PseudoCoherent/ChangeOfRings.lean, line 452. References: SGA 6 III (1.12), “affine case, X = Y”.

Stacks 064Z. If B is pseudo-coherent as an A-module, restriction of scalars along A → B preserves and reflects both m-pseudo-coherence and pseudo-coherence of complexes.

theorem pseudoCoherentFrom_and_pseudoCoherent_iff_restrictScalars
    {A : Type u} {B : Type v} [Ring A] [Ring B] (f : A →+* B)
    (hB : IsModulePseudoCoherent (R := A)
      ((ModuleCat.restrictScalars f).obj (ModuleCat.of B B)))
    (K : CochainComplex (ModuleCat.{max u v w} B) ℤ) (m : ℤ) :
    let Kₐ := ((ModuleCat.restrictScalars.{max u v w} f).mapHomologicalComplex
      (ComplexShape.up ℤ)).obj K
    (IsPseudoCoherentFrom (DerivedCategory.Q.obj K) m ↔
      IsPseudoCoherentFrom (DerivedCategory.Q.obj Kₐ) m) ∧
    (IsPseudoCoherent (DerivedCategory.Q.obj K) ↔
      IsPseudoCoherent (DerivedCategory.Q.obj Kₐ))
Tag 0650, a lemma

Tag 0650 in the Stacks Project.

StacksDraft.PseudoCoherence.derivedExtensionScalars_preserves_pseudoCoherent, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/PseudoCoherent/BaseChange.lean, line 671. References: SGA 6 I (2.13), “special case”.

Derived extension of scalars along a homomorphism f : R →+* A of commutative rings preserves m-pseudo-coherent objects of the derived category for every integer m, and it preserves pseudo-coherent objects. The source ring, the target ring and the module carrier live in three independent universes.

public theorem derivedExtensionScalars_preserves_pseudoCoherent
    {R : Type uR} {A : Type uA} [CommRing R] [CommRing A] (f : R →+* A)
    (K : DerivedCategory (ModuleCat.{v} R)) :
    (∀ m : ℤ, IsPseudoCoherentFrom K m →
      IsPseudoCoherentFrom ((derivedExtensionScalars f).obj K) m) ∧
      (IsPseudoCoherent K → IsPseudoCoherent ((derivedExtensionScalars f).obj K))
Tag 066C, a lemma

Tag 066C in the Stacks Project.

StacksDraft.PseudoCoherence.extensionScalars_preserves_pseudoCoherent, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/PseudoCoherent/ChangeOfRings.lean, line 83.

Stacks 066C. Extension of scalars along a flat ring homomorphism preserves m-pseudo-coherent modules for every integer m and preserves pseudo-coherent modules.

theorem extensionScalars_preserves_pseudoCoherent
    {A : Type u} {B : Type v} [CommRing A] [CommRing B] (f : A →+* B) (hf : f.Flat)
    (M : ModuleCat.{w} A) :
    (∀ m : ℤ, IsModulePseudoCoherentFrom (R := A) M m →
      IsModulePseudoCoherentFrom (R := B) ((ModuleCat.extendScalars f).obj M) m) ∧
      (IsModulePseudoCoherent (R := A) M →
        IsModulePseudoCoherent (R := B) ((ModuleCat.extendScalars f).obj M))
Tag 066D, a lemma

Tag 066D in the Stacks Project.

StacksDraft.PseudoCoherence.isPseudoCoherentFrom_and_isPseudoCoherent_of_localization, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/PseudoCoherent/Local.lean, line 582.

Stacks 066D. Both m-pseudo-coherence and pseudo-coherence descend from a finite principal open cover.

theorem isPseudoCoherentFrom_and_isPseudoCoherent_of_localization
    {R : Type u} [CommRing R] {ι : Type*} [Finite ι]
    (f : ι → R) (hf : Ideal.span (Set.range f) = ⊤)
    (K : DerivedCategory (ModuleCat.{max v u} R)) (m : ℤ) :
    ((∀ i, IsPseudoCoherentFrom ((localizationAwayFunctorAux.{u, v} (f i)).obj K) m) →
      IsPseudoCoherentFrom K m) ∧
    ((∀ i, IsPseudoCoherent ((localizationAwayFunctorAux.{u, v} (f i)).obj K)) →
      IsPseudoCoherent K)
Tag 068R, a lemma

Tag 068R in the Stacks Project.

StacksDraft.PseudoCoherence.isPseudoCoherentFrom_and_isPseudoCoherent_of_faithfullyFlat_baseChange, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/PseudoCoherent/Local.lean, line 550.

Stacks 068R. Both m-pseudo-coherence and pseudo-coherence descend along a faithfully flat extension of commutative rings.

theorem isPseudoCoherentFrom_and_isPseudoCoherent_of_faithfullyFlat_baseChange
    {R : Type u} {S : Type v} [CommRing R] [CommRing S]
    (f : R →+* S) (hf : f.FaithfullyFlat)
    (K : CochainComplex (ModuleCat.{max u w} R) ℤ) (m : ℤ) :
    (IsPseudoCoherentFrom
        (DerivedCategory.Q.obj
          (((ModuleCat.extendScalars.{u, v, max u w} f).mapHomologicalComplex
            (ComplexShape.up ℤ)).obj K)) m →
      IsPseudoCoherentFrom (DerivedCategory.Q.obj K) m) ∧
    (IsPseudoCoherent
        (DerivedCategory.Q.obj
          (((ModuleCat.extendScalars.{u, v, max u w} f).mapHomologicalComplex
            (ComplexShape.up ℤ)).obj K)) →
      IsPseudoCoherent (DerivedCategory.Q.obj K))
Tag 0DJE, a lemma

Tag 0DJE in the Stacks Project.

StacksDraft.PseudoCoherence.pseudoCoherent_derivedTensorProduct_largeUniverse, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/PseudoCoherent/Tensor.lean, line 487.

Stacks 0DJE. If K is n-pseudo-coherent and has no cohomology above a, and L is m-pseudo-coherent and has no cohomology above b, then their derived tensor product K ⊗ᴸ L is max (m + a) (n + b)-pseudo-coherent. Moreover, the derived tensor product of two pseudo-coherent objects is pseudo-coherent.

The modules live in a universe max u v independent of the ring's universe u, as in the source, and the derived tensor product is the one of Stacks 064M, CochainComplex.DerivedTensor.derivedTensorProduct: one endofunctor derivedTensorProduct L of D(R) for each object L.

public theorem pseudoCoherent_derivedTensorProduct_largeUniverse
    (K L : DerivedCategory (ModuleCat.{max u v} R)) :
    (∀ n m a b : ℤ,
      IsPseudoCoherentFrom K n →
      (∀ i : ℤ, a < i →
        IsZero ((DerivedCategory.homologyFunctor (ModuleCat.{max u v} R) i).obj K)) →
      IsPseudoCoherentFrom L m →
      (∀ j : ℤ, b < j →
        IsZero ((DerivedCategory.homologyFunctor (ModuleCat.{max u v} R) j).obj L)) →
      IsPseudoCoherentFrom
        ((CochainComplex.DerivedTensor.derivedTensorProduct L).obj K)
        (max (m + a) (n + b))) ∧
      (IsPseudoCoherent K → IsPseudoCoherent L →
        IsPseudoCoherent ((CochainComplex.DerivedTensor.derivedTensorProduct L).obj K))
Tag 066E, a lemma

Tag 066E in the Stacks Project.

StacksDraft.PseudoCoherence.pseudoCoherent_iff_boundedAbove_finite_homology, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/PseudoCoherent/Coherent.lean, line 238.

Stacks 066E. Over a Noetherian ring, pseudo-coherence from degree m means bounded-above finite homology in degrees at least m; pseudo-coherence means bounded-above finite homology in all degrees; and pseudo-coherence of a module is equivalent to its finiteness.

theorem pseudoCoherent_iff_boundedAbove_finite_homology
    {R : Type u} [Ring R] [IsNoetherianRing R] [Small.{v} R]
    (K : DerivedCategory (ModuleCat.{v} R)) (m : ℤ)
    (M : Type v) [AddCommGroup M] [Module R M] :
    (IsPseudoCoherentFrom K m ↔
      (∃ b : ℤ, ∀ i : ℤ, b < i →
        IsZero ((DerivedCategory.homologyFunctor (ModuleCat.{v} R) i).obj K)) ∧
      ∀ i : ℤ, m ≤ i →
        Module.Finite R ((DerivedCategory.homologyFunctor (ModuleCat.{v} R) i).obj K)) ∧
    (IsPseudoCoherent K ↔
      (∃ b : ℤ, ∀ i : ℤ, b < i →
        IsZero ((DerivedCategory.homologyFunctor (ModuleCat.{v} R) i).obj K)) ∧
      ∀ i : ℤ,
        Module.Finite R ((DerivedCategory.homologyFunctor (ModuleCat.{v} R) i).obj K)) ∧
    (IsModulePseudoCoherent (R := R) M ↔ Module.Finite R M)
Tag 0EWZ, a lemma

Tag 0EWZ in the Stacks Project.

StacksDraft.PseudoCoherence.pseudoCoherentFrom_iff_finite_and_coherent_homology, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/PseudoCoherent/Coherent.lean, line 410. References: SGA 6 I (3.5), “b), coherent ring”; SGA 6 I (2.11), “Part b), special case”.

Stacks 0EWZ. Over a coherent ring, a bounded-above derived object is m-pseudo-coherent exactly when its degree-m cohomology is finite and its higher cohomology modules are coherent, equivalently finitely presented. It is pseudo-coherent exactly when all its cohomology modules are coherent.

theorem pseudoCoherentFrom_iff_finite_and_coherent_homology
    {R : Type u} [CommRing R] [IsCoherentRing R]
    (K : DerivedCategory (ModuleCat.{max u v} R))
    (hK : ∃ b : ℤ, ∀ i : ℤ, b < i →
      IsZero ((DerivedCategory.homologyFunctor (ModuleCat.{max u v} R) i).obj K))
    (m : ℤ) :
    let H := fun i : ℤ =>
      (DerivedCategory.homologyFunctor (ModuleCat.{max u v} R) i).obj K
    let finiteAndCoherent :=
      Module.Finite R (H m) ∧ ∀ i : ℤ, m < i → Module.IsCoherent R (H i)
    let finiteAndFinitePresentation :=
      Module.Finite R (H m) ∧ ∀ i : ℤ, m < i → Module.FinitePresentation R (H i)
    (IsPseudoCoherentFrom K m ↔ finiteAndCoherent) ∧
      (finiteAndCoherent ↔ finiteAndFinitePresentation) ∧
      (IsPseudoCoherent K ↔ ∀ i : ℤ, Module.IsCoherent R (H i))
Sources

Section15.67 Pseudo-coherent modules, II#

Section 15.67 of the Stacks Project, Tag 0G8V. 7 tags here are carried by 7 declarations of the repository (all in StacksFrontier), quoted below from AxiomMath/Stacks at commit 5ed82d14.

Tag 0G8W, a lemma

Tag 0G8W in the Stacks Project.

StacksDraft.PseudoCoherence.colimit_ext_comparison_isIso_of_lt_and_mono, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/PseudoCoherent/Ext.lean, line 589.

Stacks 0G8W. If K is m-pseudo-coherent, then the canonical map from the filtered colimit of Extⁿ(K, Mᵢ) to Extⁿ(K, colim Mᵢ) is an isomorphism for n < -m, and is a monomorphism for n = -m.

theorem colimit_ext_comparison_isIso_of_lt_and_mono
    {R : Type u} [Ring R] {ι : Type v} [Category.{v} ι] [IsFiltered ι]
    (M : ι ⥤ ModuleCat.{v} R) (K : DerivedCategory (ModuleCat.{v} R)) (m : ℤ)
    (hK : IsPseudoCoherentFrom K m) :
    let extFunctor (n : ℤ) :=
      DerivedCategory.singleFunctor (ModuleCat.{v} R) 0 ⋙
        shiftFunctor (DerivedCategory (ModuleCat.{v} R)) n ⋙
        preadditiveCoyoneda.obj (Opposite.op K)
    (∀ n : ℤ, n < -m →
      IsIso (colimit.desc (M ⋙ extFunctor n)
        ((extFunctor n).mapCocone (colimit.cocone M)))) ∧
      Mono (colimit.desc (M ⋙ extFunctor (-m))
        ((extFunctor (-m)).mapCocone (colimit.cocone M)))
Tag 0G8X, a lemma

Tag 0G8X in the Stacks Project.

StacksDraft.PseudoCoherence.isPseudoCoherentFrom_iff_colimit_ext_comparison, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/PseudoCoherent/Ext.lean, line 1246.

Stacks 0G8X. A cohomologically bounded-above object K is m-pseudo-coherent if and only if, for every filtered diagram of modules, the canonical map from the filtered colimit of Extⁿ(K, -) to its value on the colimit is an isomorphism for n < -m and a monomorphism for n = -m.

theorem isPseudoCoherentFrom_iff_colimit_ext_comparison
    {R : Type u} [Ring R] [Small.{v} R]
    (K : DerivedCategory (ModuleCat.{v} R)) (m : ℤ)
    (hK : ∃ n : ℤ, K.IsLE n) :
    IsPseudoCoherentFrom K m ↔
      ∀ (ι : Type v) [Category.{v} ι] [IsFiltered ι]
        (M : ι ⥤ ModuleCat.{v} R),
        let extFunctor (n : ℤ) :=
          DerivedCategory.singleFunctor (ModuleCat.{v} R) 0 ⋙
            shiftFunctor (DerivedCategory (ModuleCat.{v} R)) n ⋙
            preadditiveCoyoneda.obj (Opposite.op K)
        (∀ n : ℤ, n < -m →
          IsIso (colimit.desc (M ⋙ extFunctor n)
            ((extFunctor n).mapCocone (colimit.cocone M)))) ∧
          Mono (colimit.desc (M ⋙ extFunctor (-m))
            ((extFunctor (-m)).mapCocone (colimit.cocone M)))
Tag 087Q, a lemma

Tag 087Q in the Stacks Project.

StacksDraft.PseudoCoherence.canonicalExtTensorComparison_bijective, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/PseudoCoherent/HomFlat.lean, line 468. References: EGA 0 (6.2.2); SGA 4 V (8.2.10), “modules over a ring”; SGA 6 I (3.7), “affine case, modules”.

Stacks 087Q. The canonical Hom--tensor map is bijective for a finitely presented source and flat tensor factor. The canonical Ext--tensor map is bijective below the pseudo-coherence cutoff for a flat tensor factor.

theorem canonicalExtTensorComparison_bijective [HasDerivedCategory (ModuleCat.{v} R)] :
    ∀ (M : Type v) (N : Type w) (L : Type x)
        [AddCommGroup M] [Module R M] [AddCommGroup N] [Module R N]
        [AddCommGroup L] [Module R L] [Module.Flat R L],
        (Module.FinitePresentation R M →
          Function.Bijective
            (TensorProduct.rTensorHomToHomRTensor (RingHom.id R) M N L)) ∧
        (∀ (d : ℕ), IsModulePseudoCoherentFrom (R := R) M (-(d : ℤ)) →
          ∀ i < d, Function.Bijective
            (canonicalExtTensorComparison R (ModuleCat.of R (ULift.{max u v w x} M))
              (ModuleCat.of R (ULift.{max u v w x} N))
              (ModuleCat.of R (ULift.{max u v w x} L)) i))
Tag 087R, a lemma

Tag 087R in the Stacks Project.

StacksDraft.PseudoCoherence.baseChange_ext_bijective_of_pseudoCoherent, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/PseudoCoherent/HomFlat.lean, line 881.

Stacks 087R. The canonical Ext base-change map is bijective in degree zero for finitely presented modules, below the pseudo-coherence cutoff, and in every degree for finite modules over a Noetherian ring.

The maps η and t are characterized on original elements by m ↦ 1 ⊗ m and n ⊗ s ↦ s ⊗ n. The equation c.comp β = a and its uniqueness clause specify the canonical comparison in every degree. The commuting square using uliftExtLinearEquiv₀ transports β in degree zero to homBaseChangeComparison on the original modules.

theorem baseChange_ext_bijective_of_pseudoCoherent
    (R : Type uR) (S : Type uS) (M : Type uM) (N : Type uN)
    [CommRing R] [CommRing S] [Algebra R S] [Module.Flat R S]
    [AddCommGroup M] [Module R M] [AddCommGroup N] [Module R N]
    [HasDerivedCategory (ModuleCat.{uM} R)] :
    let RM := ModuleCat.of R (ULift.{max uR uS uM uN} M)
    let RN := ModuleCat.of R (ULift.{max uR uS uM uN} N)
    let L := ModuleCat.of R (ULift.{max uR uS uM uN} S)
    let SM := ModuleCat.of S (ULift.{max uR uS uM uN} (S ⊗[R] M))
    let SN := ModuleCat.of S (ULift.{max uR uS uM uN} (S ⊗[R] N))
    let E := (ModuleCat.restrictScalars (algebraMap R S)).obj SN
    ∃ (η : RM ⟶ (ModuleCat.restrictScalars (algebraMap R S)).obj SM)
        (t : ModuleCat.of R (RN ⊗[R] L) ⟶ E),
      (∀ m : M, η (ULift.up m) = ULift.up ((1 : S) ⊗ₜ[R] m)) ∧
      (∀ (n : N) (s : S), t (ULift.up n ⊗ₜ[R] ULift.up s) =
        ULift.up (s ⊗ₜ[R] n)) ∧
      (∀ t' : ModuleCat.of R (RN ⊗[R] L) ⟶ E,
        (∀ (n : N) (s : S), t' (ULift.up n ⊗ₜ[R] ULift.up s) =
          ULift.up (s ⊗ₜ[R] n)) → t' = t) ∧
      ∀ i : ℕ,
        let c : Ext SM SN i →+ Ext RM E i :=
          ((Ext.mk₀ η).precomp E (zero_add i)).comp
            ((ModuleCat.restrictScalars (algebraMap R S)).mapExtAddHom SM SN i)
        let a : (Ext RM RN i) ⊗[R] S →+ Ext RM E i :=
          (((Ext.mk₀ t).postcomp RM (add_zero i)).comp
            (canonicalExtTensorComparison R RM RN L i).toAddMonoidHom).comp
              (TensorProduct.map (LinearMap.id : Ext RM RN i →ₗ[R] Ext RM RN i)
                (ULift.moduleEquiv.symm.toLinearMap : S →ₗ[R] L)).toAddMonoidHom
        ∃ β : (Ext RM RN i) ⊗[R] S →+ Ext SM SN i,
          c.comp β = a ∧
          (∀ γ : (Ext RM RN i) ⊗[R] S →+ Ext SM SN i,
            c.comp γ = a → γ = β) ∧
          (∀ (e : Ext RM RN i) (s r : S),
            β (e ⊗ₜ[R] (r * s)) = r • β (e ⊗ₜ[R] s)) ∧
          (∀ h : i = 0, ∀ x : (Ext RM RN 0) ⊗[R] S,
            uliftExtLinearEquiv₀.{uS, max uS uM, max uS uN, uR} S (S ⊗[R] M) (S ⊗[R] N)
                ((h ▸ β) x) =
              homBaseChangeComparison R S M N
                (TensorProduct.congr (uliftExtLinearEquiv₀.{uR, uM, uN, uS} R M N)
                  (LinearEquiv.refl R S) x)) ∧
          (i = 0 → Module.FinitePresentation R M → Function.Bijective β) ∧
          (∀ d : ℕ, IsModulePseudoCoherentFrom (R := R) M (-(d : ℤ)) →
            i < d → Function.Bijective β) ∧
          (IsNoetherianRing R → Module.Finite R M → Function.Bijective β)
Tag 0CYB, a lemma

Tag 0CYB in the Stacks Project.

StacksDraft.PseudoCoherence.pseudoCoherent_iff_derivedTensor_preserves_products, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/PseudoCoherent/Products/Characterization.lean, line 725.

Stacks 0CYB. Pseudo-coherence of a bounded-above complex is equivalent to derived tensor product commuting with arbitrary products; the degreewise variants characterize m-pseudo-coherence.

theorem pseudoCoherent_iff_derivedTensor_preserves_products
    (T : DerivedTensorProduct.{u, v, w} R) (P : DerivedProducts.{u, v, w} R)
    (K : DerivedCategory.Minus (ModuleCat.{max v w} (SmallRing.{u, v, w} R))) (m : ℤ) :
    List.TFAE [
      IsPseudoCoherent K.obj,
      ∀ (A : Type (max v w)) (Q : A → ModuleCat.{max v w} (SmallRing.{u, v, w} R)),
        IsIso (tensorProductComparison T P K.obj A Q),
      ∀ (A : Type (max v w)) (Q : ModuleCat.{max v w} (SmallRing.{u, v, w} R)),
        IsIso (tensorPowerComparison T P K.obj A Q),
      ∀ A : Type (max v w), IsIso (tensorRingPowerComparison T P K.obj A)] ∧
    List.TFAE [
      IsPseudoCoherentFrom K.obj m,
      ∀ (A : Type (max v w)) (Q : A → ModuleCat.{max v w} (SmallRing.{u, v, w} R)),
        (∀ i : ℤ, m < i → IsIso ((DerivedCategory.homologyFunctor _ i).map
          (tensorProductComparison T P K.obj A Q))) ∧
        Epi ((DerivedCategory.homologyFunctor _ m).map
          (tensorProductComparison T P K.obj A Q)),
      ∀ (A : Type (max v w)) (Q : ModuleCat.{max v w} (SmallRing.{u, v, w} R)),
        (∀ i : ℤ, m < i → IsIso ((DerivedCategory.homologyFunctor _ i).map
          (tensorPowerComparison T P K.obj A Q))) ∧
        Epi ((DerivedCategory.homologyFunctor _ m).map
          (tensorPowerComparison T P K.obj A Q)),
      ∀ A : Type (max v w),
        (∀ i : ℤ, m < i → IsIso ((DerivedCategory.homologyFunctor _ i).map
          (tensorRingPowerComparison T P K.obj A))) ∧
        Epi ((DerivedCategory.homologyFunctor _ m).map
          (tensorRingPowerComparison T P K.obj A))]
Tag 0G8Y, a lemma

Tag 0G8Y in the Stacks Project.

StacksDraft.PseudoCoherence.exists_finitelyPresented_module_mono_homology, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/PseudoCoherent/Ext.lean, line 1319.

Stacks 0G8Y. For every degree i, the degree-i cohomology of a pseudo-coherent object of D(R) embeds in a finitely presented R-module, and the embedding is induced by a morphism from the object to that module placed in degree i.

theorem exists_finitelyPresented_module_mono_homology {R : Type u} [Ring R]
    (K : DerivedCategory (ModuleCat.{v} R)) (hK : IsPseudoCoherent K) (i : ℤ) :
    ∃ (M : ModuleCat.{v} R), Module.FinitePresentation R M ∧
      ∃ f : K ⟶ (DerivedCategory.singleFunctor (ModuleCat.{v} R) i).obj M,
        Mono ((DerivedCategory.homologyFunctor (ModuleCat.{v} R) i).map f ≫
          (DerivedCategory.singleFunctorCompHomologyFunctorIso
            (ModuleCat.{v} R) i).hom.app M)
Tag 0A7D, a lemma

Tag 0A7D in the Stacks Project.

StacksDraft.PseudoCoherence.exists_finite_module_detecting_homology_mod_ideal, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/PseudoCoherent/Noetherian.lean, line 74.

Stacks 0A7D. If degree-i cohomology of a pseudo-coherent complex over a Noetherian ring is nonzero modulo an ideal, it is detected by a map to a finite module annihilated by a power of that ideal, placed in degree i.

public theorem exists_finite_module_detecting_homology_mod_ideal
    {A : Type u} [CommRing A] [IsNoetherianRing A]
    (K : DerivedCategory (ModuleCat.{v} A)) (hK : IsPseudoCoherent K)
    (m : Ideal A) (i : ℤ)
    (hi : Nontrivial
      (((DerivedCategory.homologyFunctor (ModuleCat.{v} A) i).obj K) ⧸
        (m • (⊤ : Submodule A
          ((DerivedCategory.homologyFunctor (ModuleCat.{v} A) i).obj K))))) :
    ∃ (E : ModuleCat.{v} A), Module.Finite A E ∧
      (∃ n : ℕ, m ^ n • (⊤ : Submodule A E) = ⊥) ∧
      ∃ f : K ⟶ (DerivedCategory.singleFunctor (ModuleCat.{v} A) i).obj E,
        (DerivedCategory.homologyFunctor (ModuleCat.{v} A) i).map f ≫
          (DerivedCategory.singleFunctorCompHomologyFunctorIso
            (ModuleCat.{v} A) i).hom.app E ≠ 0
Sources

Section15.68 Tor dimension#

Section 15.68 of the Stacks Project, Tag 0651. 20 tags here are carried by 25 declarations of the repository (all in StacksFrontier), quoted below from AxiomMath/Stacks at commit 5ed82d14.

Tag 0652, a definition

Tag 0652 in the Stacks Project.

StacksDraft.TorAmplitude.HasTorAmplitude, a def in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/TorAmplitude/Defs.lean, line 80. The attribute's comment: “(1)”. References: SGA 4½ Rapport (4.5), “tor-dimension ≤ r”; SGA 6 I (5.2), “Tor-amp(F) ⊂ [m,n]”.

An object K of D(R) has Tor amplitude in [a, b] if, for every R-module M, the cohomology of K ⊗ᴸ[R] M[0] vanishes in every degree outside [a, b].

The comparison and _isLeftDerived arguments certify that derivedTensor is the total left derived functor of ordinary tensor product in the first variable.

public def HasTorAmplitude {R : Type u} [CommRing R]
    [HasDerivedCategory (ModuleCat.{v} R)]
    (derivedTensor :
      DerivedCategory (ModuleCat.{v} R) ⥤
        DerivedCategory (ModuleCat.{v} R) ⥤ DerivedCategory (ModuleCat.{v} R))
    (comparison : ∀ M : ModuleCat.{v} R,
      DerivedCategory.Q ⋙
          derivedTensor.flip.obj
            ((DerivedCategory.singleFunctor (ModuleCat.{v} R) 0).obj M) ⟶
        (tensorModuleRight M).mapHomologicalComplex
            (ComplexShape.up ℤ) ⋙ DerivedCategory.Q)
    (_isLeftDerived : ∀ M : ModuleCat.{v} R,
      (derivedTensor.flip.obj
          ((DerivedCategory.singleFunctor (ModuleCat.{v} R) 0).obj M)).IsLeftDerivedFunctor
        (comparison M)
        (HomologicalComplex.quasiIso (ModuleCat.{v} R) (ComplexShape.up ℤ)))
    (K : DerivedCategory (ModuleCat.{v} R)) (a b : ℤ) : Prop

StacksDraft.TorAmplitude.HasFiniteTorDimension, a def in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/TorAmplitude/Defs.lean, line 107. The attribute's comment: “(2)”. References: SGA 4½ Rapport (4.5), “finite tor dimension”; SGA 5 I (1.10), “affine case (torf)”; SGA 6 I (5.2), “finite flat amplitude”.

An object of D(R) has finite Tor dimension if it has Tor amplitude in some finite integer interval.

public def HasFiniteTorDimension {R : Type u} [CommRing R]
    [HasDerivedCategory (ModuleCat.{v} R)]
    (derivedTensor :
      DerivedCategory (ModuleCat.{v} R) ⥤
        DerivedCategory (ModuleCat.{v} R) ⥤ DerivedCategory (ModuleCat.{v} R))
    (comparison : ∀ M : ModuleCat.{v} R,
      DerivedCategory.Q ⋙
          derivedTensor.flip.obj
            ((DerivedCategory.singleFunctor (ModuleCat.{v} R) 0).obj M) ⟶
        (tensorModuleRight M).mapHomologicalComplex
            (ComplexShape.up ℤ) ⋙ DerivedCategory.Q)
    (isLeftDerived : ∀ M : ModuleCat.{v} R,
      (derivedTensor.flip.obj
          ((DerivedCategory.singleFunctor (ModuleCat.{v} R) 0).obj M)).IsLeftDerivedFunctor
        (comparison M)
        (HomologicalComplex.quasiIso (ModuleCat.{v} R) (ComplexShape.up ℤ)))
    (K : DerivedCategory (ModuleCat.{v} R)) : Prop

StacksDraft.TorAmplitude.HasTorDimensionLE, a def in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/TorAmplitude/Defs.lean, line 129. The attribute's comment: “(3)”. References: SGA 4 XVII (4.1.9), “module over a ring”; SGA 4½ Rapport (4.5), “module case”.

An R-module M has Tor dimension at most d if M[0] has Tor amplitude in [-d, 0].

public def HasTorDimensionLE {R : Type u} [CommRing R]
    [HasDerivedCategory (ModuleCat.{v} R)]
    (derivedTensor :
      DerivedCategory (ModuleCat.{v} R) ⥤
        DerivedCategory (ModuleCat.{v} R) ⥤ DerivedCategory (ModuleCat.{v} R))
    (comparison : ∀ N : ModuleCat.{v} R,
      DerivedCategory.Q ⋙
          derivedTensor.flip.obj
            ((DerivedCategory.singleFunctor (ModuleCat.{v} R) 0).obj N) ⟶
        (tensorModuleRight N).mapHomologicalComplex
            (ComplexShape.up ℤ) ⋙ DerivedCategory.Q)
    (isLeftDerived : ∀ N : ModuleCat.{v} R,
      (derivedTensor.flip.obj
          ((DerivedCategory.singleFunctor (ModuleCat.{v} R) 0).obj N)).IsLeftDerivedFunctor
        (comparison N)
        (HomologicalComplex.quasiIso (ModuleCat.{v} R) (ComplexShape.up ℤ)))
    (M : ModuleCat.{v} R) (d : ℤ) : Prop

StacksDraft.TorAmplitude.ModuleHasFiniteTorDimension, a def in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/TorAmplitude/Defs.lean, line 152. The attribute's comment: “(4)”.

An R-module M has finite Tor dimension if M[0] has finite Tor dimension as an object of D(R).

public def ModuleHasFiniteTorDimension {R : Type u} [CommRing R]
    [HasDerivedCategory (ModuleCat.{v} R)]
    (derivedTensor :
      DerivedCategory (ModuleCat.{v} R) ⥤
        DerivedCategory (ModuleCat.{v} R) ⥤ DerivedCategory (ModuleCat.{v} R))
    (comparison : ∀ N : ModuleCat.{v} R,
      DerivedCategory.Q ⋙
          derivedTensor.flip.obj
            ((DerivedCategory.singleFunctor (ModuleCat.{v} R) 0).obj N) ⟶
        (tensorModuleRight N).mapHomologicalComplex
            (ComplexShape.up ℤ) ⋙ DerivedCategory.Q)
    (isLeftDerived : ∀ N : ModuleCat.{v} R,
      (derivedTensor.flip.obj
          ((DerivedCategory.singleFunctor (ModuleCat.{v} R) 0).obj N)).IsLeftDerivedFunctor
        (comparison N)
        (HomologicalComplex.quasiIso (ModuleCat.{v} R) (ComplexShape.up ℤ)))
    (M : ModuleCat.{v} R) : Prop
Tag 0653, a lemma

Tag 0653 in the Stacks Project.

StacksDraft.TorAmplitude.cokernel_flat_of_torAmplitude, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/TorAmplitude/DerivedComparison.lean, line 497.

Stacks Tag 0653. Let R be a ring, a b : ℤ, and K a bounded above cochain complex of flat R-modules which, as an object of D(R), has Tor amplitude in [a, b] for some certified derived tensor product. Then Coker(d_K^{a-1}) = K^a / Im(d_K^{a-1}) is a flat R-module.

The ring universe u and the module universe are independent: R : Type u and the complex lives in ModuleCat.{max u v} R. Flatness of the terms is spelled out rather than written as StacksDraft.TorAmplitude.Termwise.IsComplexOfFlats, which is available only when the two universes agree.

The derived tensor product is an arbitrary certified one, so the statement does not depend on a construction of it. Boundedness enters through the comparison: the counit of the total left derived functor of termwise tensoring is invertible at a bounded above complex of flat modules (isIso_termwiseDerivedCounit_app_of_flat), which makes the given comparison map a split epimorphism there, and cohomology carries that split epimorphism from a vanishing source to a vanishing target.

public theorem cokernel_flat_of_torAmplitude
    (K : CochainComplex (ModuleCat.{max u v} R) ℤ) (a b : ℤ)
    (hbounded : BoundedAbove K) (hflat : ∀ n : ℤ, Module.Flat R (K.X n))
    (hamp : HasTorAmplitude derivedTensor comparison isLeftDerived
      (DerivedCategory.Q.obj K) a b) :
    Module.Flat R (cokernel (K.d (a - 1) a) : ModuleCat.{max u v} R)
Tag 0654, a lemma

Tag 0654 in the Stacks Project.

StacksDraft.TorAmplitude.hasTorAmplitudeCanonical_iff_hasFlatRepresentative, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/TorAmplitude/CanonicalCertificate.lean, line 315. References: SGA 6 I (5.1), “affine case”; SGA 4 XVII (4.1.9), “over a ring, (i)<=>(iii)”.

An object K of D(R) has Tor amplitude in [a, b] — at the canonical derived tensor product of Stacks 0BYI — if and only if it is represented by a complex of flat R-modules concentrated in degrees [a, b].

public theorem hasTorAmplitudeCanonical_iff_hasFlatRepresentative (R : Type u) [CommRing R]
    (K : DerivedCategory (ModuleCat.{u} R)) (a b : ℤ) :
    HasTorAmplitudeCanonical R K a b ↔ HasFlatRepresentative K a b
Tag 0BYL, a lemma

Tag 0BYL in the Stacks Project.

StacksDraft.TorAmplitude.hasTorAmplitudeAbove_iff_exists_kFlat_flat_representative_canonical, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/TorAmplitude/KFlatRepresentative.lean, line 265. References: SGA 4 XVII (4.1.9), “ring case, one-sided”.

Stacks 0BYL. An object K of D(R) has Tor amplitude in [a, ∞] — that is, the derived tensor product of K with any module M placed in cohomological degree zero has vanishing cohomology in all degrees below a — if and only if K is represented by a K-flat complex of flat modules concentrated in degrees at least a.

The derived tensor product here is the canonical one, CochainComplex.DerivedTensor.canonicalDerivedTensorProduct R of Stacks 0BYI, so the statement is an assertion about a specific bifunctor rather than a claim quantified over certificates. It is obtained by instantiating StacksDraft.TorAmplitude.hasTorAmplitudeAbove_iff_exists_kFlat_flat_representative, which proves the equivalence for an arbitrary certified derived tensor bifunctor, at that canonical choice.

public theorem hasTorAmplitudeAbove_iff_exists_kFlat_flat_representative_canonical
    (K : DerivedCategory (ModuleCat.{u} R)) (a : ℤ) :
    (∀ (M : ModuleCat.{u} R) (i : ℤ), i < a →
        IsZero ((DerivedCategory.homologyFunctor (ModuleCat.{u} R) i).obj
          (((CochainComplex.DerivedTensor.canonicalDerivedTensorProduct R).tensor.obj K).obj
            ((DerivedCategory.singleFunctor (ModuleCat.{u} R) 0).obj M)))) ↔
      ∃ E : CochainComplex (ModuleCat.{u} R) ℤ,
        E.KFlat ∧
          (∀ n : ℤ, Module.Flat R (E.X n)) ∧
          E.IsStrictlyGE a ∧
          Nonempty (K ≅ DerivedCategory.Q.obj E)
Tag 0655, a lemma

Tag 0655 in the Stacks Project.

StacksDraft.TorAmplitude.hasTorAmplitude_obj₃_of_obj₁_obj₂, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/TorAmplitude/Triangle.lean, line 345. The attribute's comment: “(1)”.

Stacks 0655 (1). Let K → L → M → K[1] be a distinguished triangle in D(R). If K has Tor amplitude in [a + 1, b + 1] and L has Tor amplitude in [a, b], then M has Tor amplitude in [a, b].

Tor amplitude is StacksDraft.TorAmplitude.HasTorAmplitude of Stacks 0652, so the bifunctor derivedTensor is certified by comparison and isLeftDerived to be the derived tensor product. This is part (1) of the source statement; the mathematics is the long exact cohomology sequence of the triangle (K, L, M) tensored with M'[0], as in the uncertified-datum helper Stacks.TorAmplitudeTriangle.hasTorAmplitudeIn_obj₃_of_obj₁_obj₂, which this endpoint does not use because that helper pins the module carriers to the ring universe.

theorem hasTorAmplitude_obj₃_of_obj₁_obj₂
    (T : Triangle (DerivedCategory (ModuleCat.{v} R)))
    (hT : T ∈ distTriang (DerivedCategory (ModuleCat.{v} R))) (a b : ℤ)
    (hK : HasTorAmplitude derivedTensor comparison isLeftDerived T.obj₁ (a + 1) (b + 1))
    (hL : HasTorAmplitude derivedTensor comparison isLeftDerived T.obj₂ a b) :
    HasTorAmplitude derivedTensor comparison isLeftDerived T.obj₃ a b

StacksDraft.TorAmplitude.hasTorAmplitude_obj₂_of_obj₁_obj₃, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/TorAmplitude/Triangle.lean, line 374. The attribute's comment: “(2)”.

Stacks 0655 (2). Let K → L → M → K[1] be a distinguished triangle in D(R). If K and M both have Tor amplitude in [a, b], then L has Tor amplitude in [a, b].

Tor amplitude is StacksDraft.TorAmplitude.HasTorAmplitude of Stacks 0652, so the bifunctor derivedTensor is certified by comparison and isLeftDerived to be the derived tensor product. This is part (2) of the source statement; the mathematics is the long exact cohomology sequence of the triangle (K, L, M) tensored with M'[0], as in the uncertified-datum helper Stacks.TorAmplitudeTriangle.hasTorAmplitudeIn_obj₂_of_obj₁_obj₃, which this endpoint does not use because that helper pins the module carriers to the ring universe.

theorem hasTorAmplitude_obj₂_of_obj₁_obj₃
    (T : Triangle (DerivedCategory (ModuleCat.{v} R)))
    (hT : T ∈ distTriang (DerivedCategory (ModuleCat.{v} R))) (a b : ℤ)
    (hK : HasTorAmplitude derivedTensor comparison isLeftDerived T.obj₁ a b)
    (hM : HasTorAmplitude derivedTensor comparison isLeftDerived T.obj₃ a b) :
    HasTorAmplitude derivedTensor comparison isLeftDerived T.obj₂ a b

StacksDraft.TorAmplitude.hasTorAmplitude_obj₁_of_obj₂_obj₃, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/TorAmplitude/Triangle.lean, line 403. The attribute's comment: “(3)”.

Stacks 0655 (3). Let K → L → M → K[1] be a distinguished triangle in D(R). If L has Tor amplitude in [a + 1, b + 1] and M has Tor amplitude in [a, b], then K has Tor amplitude in [a + 1, b + 1].

Tor amplitude is StacksDraft.TorAmplitude.HasTorAmplitude of Stacks 0652, so the bifunctor derivedTensor is certified by comparison and isLeftDerived to be the derived tensor product. This is part (3) of the source statement; the mathematics is the long exact cohomology sequence of the triangle (K, L, M) tensored with M'[0], as in the uncertified-datum helper Stacks.TorAmplitudeTriangle.hasTorAmplitudeIn_obj₁_of_obj₂_obj₃, which this endpoint does not use because that helper pins the module carriers to the ring universe.

theorem hasTorAmplitude_obj₁_of_obj₂_obj₃
    (T : Triangle (DerivedCategory (ModuleCat.{v} R)))
    (hT : T ∈ distTriang (DerivedCategory (ModuleCat.{v} R))) (a b : ℤ)
    (hL : HasTorAmplitude derivedTensor comparison isLeftDerived T.obj₂ (a + 1) (b + 1))
    (hM : HasTorAmplitude derivedTensor comparison isLeftDerived T.obj₃ a b) :
    HasTorAmplitude derivedTensor comparison isLeftDerived T.obj₁ (a + 1) (b + 1)
Tag 066F, a lemma

Tag 066F in the Stacks Project.

StacksDraft.TorAmplitude.hasTorDimensionLECanonical_iff_hasFlatRepresentative, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/TorAmplitude/CanonicalCertificate.lean, line 329. References: SGA 4 XVII (4.1.9), “module over a ring”; SGA 6 I (5.4), “commutative ring”; SGA 6 I (5.1), “module over a ring”.

An R-module M has Tor dimension at most d — at the canonical derived tensor product — if and only if it admits a flat resolution of length d, that is, a complex of flat modules concentrated in degrees [-d, 0] representing M[0]. In particular M has Tor dimension at most 0 if and only if M is flat.

public theorem hasTorDimensionLECanonical_iff_hasFlatRepresentative (R : Type u) [CommRing R]
    (M : ModuleCat.{u} R) (d : ℕ) :
    (HasTorDimensionLECanonical R M d ↔
        HasFlatRepresentative
          ((DerivedCategory.singleFunctor (ModuleCat.{u} R) 0).obj M) (-(d : ℤ)) 0) ∧
      (HasTorAmplitudeCanonical R
          ((DerivedCategory.singleFunctor (ModuleCat.{u} R) 0).obj M) 0 0 ↔
        Module.Flat R M)
Tag 066G, a lemma

Tag 066G in the Stacks Project.

StacksDraft.TorAmplitude.hasTorAmplitude_of_biprod, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/TorAmplitude/Summand.lean, line 51.

If K ⊕ L has Tor amplitude in [a, b], then both K and L have Tor amplitude in [a, b].

public theorem hasTorAmplitude_of_biprod {R : Type u} [CommRing R]
    (derivedTensor :
      DerivedCategory (ModuleCat.{v} R) ⥤
        DerivedCategory (ModuleCat.{v} R) ⥤ DerivedCategory (ModuleCat.{v} R))
    (comparison : ∀ M : ModuleCat.{v} R,
      DerivedCategory.Q ⋙
          derivedTensor.flip.obj
            ((DerivedCategory.singleFunctor (ModuleCat.{v} R) 0).obj M) ⟶
        (tensorModuleRight M).mapHomologicalComplex
            (ComplexShape.up ℤ) ⋙ DerivedCategory.Q)
    (isLeftDerived : ∀ M : ModuleCat.{v} R,
      (derivedTensor.flip.obj
          ((DerivedCategory.singleFunctor (ModuleCat.{v} R) 0).obj M)).IsLeftDerivedFunctor
        (comparison M)
        (HomologicalComplex.quasiIso (ModuleCat.{v} R) (ComplexShape.up ℤ)))
    (K L : DerivedCategory (ModuleCat.{v} R)) (a b : ℤ)
    (h : HasTorAmplitude derivedTensor comparison isLeftDerived (K ⊞ L) a b) :
    HasTorAmplitude derivedTensor comparison isLeftDerived K a b ∧
      HasTorAmplitude derivedTensor comparison isLeftDerived L a b
Tag 066H, a lemma

Tag 066H in the Stacks Project.

StacksDraft.TorAmplitude.hasTorAmplitude_and_finiteTorDimension_of_bounded_complex, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/TorAmplitude/Criteria.lean, line 166.

Stacks 066H. A bounded complex whose term in degree i has Tor amplitude in [a - i, b - i] has Tor amplitude in [a, b]. In particular, if every term of a bounded complex has finite Tor dimension, then the complex has finite Tor dimension.

theorem hasTorAmplitude_and_finiteTorDimension_of_bounded_complex
    {R : Type} [CommRing R] (D : Stacks.TorAmplitudeTriangle.DerivedTensoring R)
    (K : CochainComplex (ModuleCat.{0} R) ℤ)
    (_hK : ∃ m n : ℤ, K.IsStrictlyGE m ∧ K.IsStrictlyLE n) :
    (∀ a b : ℤ, (∀ i : ℤ, Stacks.TorAmplitudeTriangle.HasTorAmplitudeIn D
          ((DerivedCategory.singleFunctor (ModuleCat.{0} R) 0).obj (K.X i))
          (a - i) (b - i)) →
        Stacks.TorAmplitudeTriangle.HasTorAmplitudeIn D (DerivedCategory.Q.obj K) a b) ∧
      ((∀ i : ℤ, ∃ aᵢ bᵢ : ℤ, Stacks.TorAmplitudeTriangle.HasTorAmplitudeIn D
          ((DerivedCategory.singleFunctor (ModuleCat.{0} R) 0).obj (K.X i)) aᵢ bᵢ) →
        ∃ a' b' : ℤ, Stacks.TorAmplitudeTriangle.HasTorAmplitudeIn D
          (DerivedCategory.Q.obj K) a' b')
Tag 066I, a lemma

Tag 066I in the Stacks Project.

StacksDraft.TorAmplitude.hasTorAmplitudeIn_of_cohomology, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/TorAmplitude/Criteria.lean, line 341.

Stacks 066I. A bounded derived object has Tor amplitude in [a, b] if its degree-i cohomology module has Tor amplitude in [a - i, b - i] for every i. In particular, if all of its cohomology modules have finite Tor dimension, then so does the derived object.

theorem hasTorAmplitudeIn_of_cohomology (R : Type) [CommRing R]
    (D : Stacks.TorAmplitudeTriangle.DerivedTensoring R)
    (K : DerivedCategory.Bounded (ModuleCat R)) :
    (∀ a b : ℤ,
      (∀ i : ℤ,
        Stacks.TorAmplitudeTriangle.HasTorAmplitudeIn D
          ((DerivedCategory.singleFunctor (ModuleCat R) 0).obj
            ((DerivedCategory.homologyFunctor (ModuleCat R) i).obj K.obj))
          (a - i) (b - i)) →
        Stacks.TorAmplitudeTriangle.HasTorAmplitudeIn D K.obj a b) ∧
      ((∀ i : ℤ, ∃ a b : ℤ,
        Stacks.TorAmplitudeTriangle.HasTorAmplitudeIn D
          ((DerivedCategory.singleFunctor (ModuleCat R) 0).obj
            ((DerivedCategory.homologyFunctor (ModuleCat R) i).obj K.obj)) a b) →
        ∃ a b : ℤ, Stacks.TorAmplitudeTriangle.HasTorAmplitudeIn D K.obj a b)
Tag 0B66, a lemma

Tag 0B66 in the Stacks Project.

StacksDraft.TorAmplitude.hasTorAmplitudeCanonical_derivedTensorProduct, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/TorAmplitude/CompositionCanonical.lean, line 70.

Let A → B be a map of commutative rings and let K and L be complexes of B-modules. If K has Tor amplitude in [a, b] as a complex of B-modules and L, after restriction of scalars, has Tor amplitude in [c, d] as a complex of A-modules, then K ⊗_B^L L, after restriction of scalars, has Tor amplitude in [a + c, b + d] as a complex of A-modules.

All three Tor amplitudes are those of Stacks 0652 at the canonical derived tensor product of Stacks 0BYI, and K ⊗_B^L L is that canonical derived tensor product over B.

public theorem hasTorAmplitudeCanonical_derivedTensorProduct
    (A B : Type u) [CommRing A] [CommRing B] [Algebra A B]
    (K L : CochainComplex (ModuleCat.{u} B) ℤ) (a b c d : ℤ)
    (hK : HasTorAmplitudeCanonical B (DerivedCategory.Q.obj K) a b)
    (hL : HasTorAmplitudeCanonical A
      ((ModuleCat.restrictScalars (algebraMap A B)).mapDerivedCategory.obj
        (DerivedCategory.Q.obj L)) c d) :
    HasTorAmplitudeCanonical A
      ((ModuleCat.restrictScalars (algebraMap A B)).mapDerivedCategory.obj
        (((canonicalDerivedTensorProduct B).tensor.obj (DerivedCategory.Q.obj K)).obj
          (DerivedCategory.Q.obj L))) (a + c) (b + d)
Tag 066J, a lemma

Tag 066J in the Stacks Project.

StacksDraft.TorAmplitude.hasTorAmplitudeIn_restrictScalars, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/TorAmplitude/ChangeOfRings.lean, line 80.

Stacks 066J. A complex of B-modules with Tor amplitude in [a, b] retains that Tor-amplitude bound after restriction of scalars along a flat ring map A → B.

theorem hasTorAmplitudeIn_restrictScalars
    (A : Type u) (B : Type v) [CommRing A] [CommRing B]
    [Algebra A B] [Module.Flat A B]
    (K : CochainComplex (ModuleCat.{w} B) ℤ) (a b : ℤ)
    (hK : ∃ E : CochainComplex (ModuleCat.{w} B) ℤ,
      StacksDraft.TorAmplitude.Termwise.IsComplexOfFlats E ∧ E.IsStrictlyGE a ∧ E.IsStrictlyLE b ∧
        Nonempty (DerivedCategory.Q.obj K ≅ DerivedCategory.Q.obj E)) :
    ∃ E : CochainComplex (ModuleCat.{w} A) ℤ,
      StacksDraft.TorAmplitude.Termwise.IsComplexOfFlats E ∧ E.IsStrictlyGE a ∧ E.IsStrictlyLE b ∧
        Nonempty ((DerivedCategory.Q.obj
          (((ModuleCat.restrictScalars.{w} (algebraMap A B)).mapHomologicalComplex
            (ComplexShape.up ℤ)).obj K) :
            DerivedCategory (ModuleCat.{w} A)) ≅
          DerivedCategory.Q.obj E)
Tag 066K, a lemma

Tag 066K in the Stacks Project.

StacksDraft.TorAmplitude.hasTorAmplitudeCanonicalLift_restrictScalars_of_torDimensionLE, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/TorAmplitude/CompositionCanonical.lean, line 149.

Let f : A → B be a map of commutative rings and let K be a complex of B-modules; the two rings and the carriers of K live in three independent universes. If B has Tor dimension at most d as an A-module, that is, if B placed in degree zero has Tor amplitude in [-d, 0] over A, then K, after restriction of scalars along f, has Tor amplitude in [a - d, b] over A.

Tor amplitude is HasTorAmplitudeCanonicalLift, that is, Stacks 0652 at the canonical derived tensor product of Stacks 0BYI on the ring lifted into the ambient universe.

public theorem hasTorAmplitudeCanonicalLift_restrictScalars_of_torDimensionLE
    {A : Type u} {B : Type v} [CommRing A] [CommRing B] (f : A →+* B)
    (K : CochainComplex (ModuleCat.{w} B) ℤ) (a b d : ℤ)
    (hB : HasTorAmplitudeCanonicalLift.{u, v, w}
      ((DerivedCategory.singleFunctor (ModuleCat.{v} A) 0).obj
        ((ModuleCat.restrictScalars f).obj (ModuleCat.of B B))) (-d) 0)
    (hK : HasTorAmplitudeCanonicalLift.{v, w, u} (DerivedCategory.Q.obj K) a b) :
    HasTorAmplitudeCanonicalLift.{u, w, v}
      (DerivedCategory.Q.obj
        (((ModuleCat.restrictScalars.{w} f).mapHomologicalComplex (ComplexShape.up ℤ)).obj K))
      (a - d) b
Tag 066L, a lemma

Tag 066L in the Stacks Project.

StacksDraft.TorAmplitude.hasTorAmplitude_derivedExtendScalars, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/TorAmplitude/BaseChange.lean, line 370.

Stacks 066L. Let A → B be a map of commutative rings and let K be an object of D(A) with Tor amplitude in [a, b]. Then K ⊗_A^L B has Tor amplitude in [a, b] as an object of D(B).

The derived tensor products over A and over B are certified as in Stacks 0652, and derived extension of scalars is certified in the same style: extendDerived is equipped with a comparison map extendComparison to termwise extension of scalars making it the total left derived functor of the latter.

public theorem hasTorAmplitude_derivedExtendScalars {A B : Type u} [CommRing A] [CommRing B]
    [Algebra A B]
    (extendDerived : DerivedCategory (ModuleCat.{u} A) ⥤ DerivedCategory (ModuleCat.{u} B))
    (extendComparison : DerivedCategory.Q ⋙ extendDerived ⟶
      (ModuleCat.extendScalars (algebraMap A B)).mapHomologicalComplex (ComplexShape.up ℤ) ⋙
        DerivedCategory.Q)
    (extendIsLeftDerived : extendDerived.IsLeftDerivedFunctor extendComparison
      (HomologicalComplex.quasiIso (ModuleCat.{u} A) (ComplexShape.up ℤ)))
    (derivedTensorA : DerivedCategory (ModuleCat.{u} A) ⥤
      DerivedCategory (ModuleCat.{u} A) ⥤ DerivedCategory (ModuleCat.{u} A))
    (comparisonA : ∀ M : ModuleCat.{u} A,
      DerivedCategory.Q ⋙ derivedTensorA.flip.obj
          ((DerivedCategory.singleFunctor (ModuleCat.{u} A) 0).obj M) ⟶
        (tensorModuleRight M).mapHomologicalComplex (ComplexShape.up ℤ) ⋙ DerivedCategory.Q)
    (isLeftDerivedA : ∀ M : ModuleCat.{u} A,
      (derivedTensorA.flip.obj
          ((DerivedCategory.singleFunctor (ModuleCat.{u} A) 0).obj M)).IsLeftDerivedFunctor
        (comparisonA M)
        (HomologicalComplex.quasiIso (ModuleCat.{u} A) (ComplexShape.up ℤ)))
    (derivedTensorB : DerivedCategory (ModuleCat.{u} B) ⥤
      DerivedCategory (ModuleCat.{u} B) ⥤ DerivedCategory (ModuleCat.{u} B))
    (comparisonB : ∀ M : ModuleCat.{u} B,
      DerivedCategory.Q ⋙ derivedTensorB.flip.obj
          ((DerivedCategory.singleFunctor (ModuleCat.{u} B) 0).obj M) ⟶
        (tensorModuleRight M).mapHomologicalComplex (ComplexShape.up ℤ) ⋙ DerivedCategory.Q)
    (isLeftDerivedB : ∀ M : ModuleCat.{u} B,
      (derivedTensorB.flip.obj
          ((DerivedCategory.singleFunctor (ModuleCat.{u} B) 0).obj M)).IsLeftDerivedFunctor
        (comparisonB M)
        (HomologicalComplex.quasiIso (ModuleCat.{u} B) (ComplexShape.up ℤ)))
    (K : DerivedCategory (ModuleCat.{u} A)) (a b : ℤ)
    (hK : HasTorAmplitude derivedTensorA comparisonA isLeftDerivedA K a b) :
    HasTorAmplitude derivedTensorB comparisonB isLeftDerivedB (extendDerived.obj K) a b
Tag 066M, a lemma

Tag 066M in the Stacks Project.

StacksDraft.TorAmplitude.hasTorDimensionLECanonical_extendScalars_of_flat, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/TorAmplitude/CanonicalCertificate.lean, line 345.

Let f : A →+* B be a flat homomorphism of commutative rings. If the A-module M has Tor dimension at most d, then the B-module B ⊗_A M has Tor dimension at most d. Both Tor dimensions are read at the canonical derived tensor product of the ring in question.

public theorem hasTorDimensionLECanonical_extendScalars_of_flat {A B : Type u} [CommRing A]
    [CommRing B] (f : A →+* B) (hf : f.Flat) (M : ModuleCat.{u} A) (d : ℕ)
    (hM : HasTorDimensionLECanonical A M d) :
    HasTorDimensionLECanonical B ((ModuleCat.extendScalars.{u, u, u} f).obj M) d
Tag 0B67, a lemma

Tag 0B67 in the Stacks Project.

StacksDraft.TorAmplitude.hasTorAmplitude_iff_localized_at_primes_iff_maximals, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/TorAmplitude/Local.lean, line 636.

A complex of B-modules has Tor amplitude in [a, b] over A if and only if its localisation at every prime ideal q of B has Tor amplitude in [a, b] over A_{q ∩ A}; equivalently, it is enough to test this at every maximal ideal of B.

theorem hasTorAmplitude_iff_localized_at_primes_iff_maximals
    (A B : Type u) [CommRing A] [CommRing B] [Algebra A B]
    (K : CochainComplex (ModuleCat.{u} B) ℤ) (a b : ℤ) :
    (StacksDraft.TorAmplitude.FaithfullyFlat.HasTorAmplitude
        ((CochainComplex.restrictScalars (algebraMap A B)).obj K) a b ↔
      ∀ (q : Ideal B) [q.IsPrime], HasTorAmplitudeAt A K q a b) ∧
    ((∀ (q : Ideal B) [q.IsPrime], HasTorAmplitudeAt A K q a b) ↔
      ∀ (m : Ideal B) (hm : m.IsMaximal),
        letI : m.IsPrime := hm.isPrime
        HasTorAmplitudeAt A K m a b)
Tag 066N, a lemma

Tag 066N in the Stacks Project.

StacksDraft.TorAmplitude.hasTorAmplitude_of_localizationSpan, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/TorAmplitude/Local.lean, line 147.

If a complex has Tor amplitude in [a, b] after localization at every member of a set generating the unit ideal, then it has Tor amplitude in [a, b].

theorem hasTorAmplitude_of_localizationSpan
    {R : Type u} [CommRing R] (s : Set R) (hs : Ideal.span s = ⊤)
    (K : CochainComplex (ModuleCat.{u} R) ℤ) (a b : ℤ)
    (hK : ∀ f : s, StacksDraft.TorAmplitude.FaithfullyFlat.HasTorAmplitude
      ((CochainComplex.extendScalars
        (algebraMap R (Localization.Away (f : R)))).obj K) a b) :
    StacksDraft.TorAmplitude.FaithfullyFlat.HasTorAmplitude K a b
Tag 068S, a lemma

Tag 068S in the Stacks Project.

StacksDraft.TorAmplitude.hasTorAmplitudeCanonical_of_faithfullyFlat, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/TorAmplitude/CanonicalCertificate.lean, line 358.

Tor amplitude descends along a faithfully flat ring map f : R →+* S: if the base change of K along f has Tor amplitude in [a, b], then so does K. Both sides are read at the canonical derived tensor products of the two rings lifted by ULift into the universe of the modules, and the base change is extension of scalars along the lifted ring map.

public theorem hasTorAmplitudeCanonical_of_faithfullyFlat
    {R : Type u} {S : Type v} [CommRing R] [CommRing S]
    (f : R →+* S) (hf : f.FaithfullyFlat)
    (K : CochainComplex (ModuleCat.{max u v w} (ULift.{max v w} R)) ℤ) (a b : ℤ)
    (h : HasTorAmplitudeCanonical (ULift.{max u w} S)
      (DerivedCategory.Q.obj
        ((CochainComplex.extendScalars (f.ulift.{max v w, max u w})).obj K)) a b) :
    HasTorAmplitudeCanonical (ULift.{max v w} R) (DerivedCategory.Q.obj K) a b
Tag 0DJF, a lemma

Tag 0DJF in the Stacks Project.

StacksDraft.TorAmplitude.FaithfullyFlat.hasTorAmplitudeIn_iff_extendScalars, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/TorAmplitude/FaithfullyFlat.lean, line 1134.

Let R → A → B be ring maps with A → B faithfully flat, and let K ∈ D(A). Then, viewing both K and K ⊗_A^L B as objects of D(R) via restriction of scalars, K has tor-amplitude in [a, b] over R if and only if K ⊗_A^L B has tor-amplitude in [a, b] over R.

theorem hasTorAmplitudeIn_iff_extendScalars
    (R A B : Type u) [CommRing R] [CommRing A] [CommRing B]
    [Algebra R A] [Algebra A B] [Algebra R B] [IsScalarTower R A B]
    [Module.FaithfullyFlat A B]
    (K : CochainComplex (ModuleCat.{u} A) ℤ) (a b : ℤ) :
    HasTorAmplitude ((CochainComplex.restrictScalars (algebraMap R A)).obj K) a b ↔
      HasTorAmplitude ((CochainComplex.restrictScalars (algebraMap R B)).obj
        ((CochainComplex.extendScalars (algebraMap A B)).obj K)) a b
Tag 066P, a lemma

Tag 066P in the Stacks Project.

StacksDraft.TorAmplitude.torAmplitude_and_finiteTorDimension_of_globalDimension_le, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/TorAmplitude/GlobalDimension.lean, line 331. References: SGA 6 I (5.9), “special case”; SGA 6 III (3.2), “special case”.

Stacks 066P. Let R be a ring of global dimension at most d. Then

  1. every R-module placed in degree 0 has Tor amplitude in [-d, 0], i.e. Tor dimension at most d;
  2. a complex whose cohomology is concentrated in [a, b] has Tor amplitude in [a - d, b];
  3. a complex has finite Tor dimension if and only if it lies in the bounded derived category.
public theorem torAmplitude_and_finiteTorDimension_of_globalDimension_le
    (R : Type u) [CommRing R] (d : ℕ) (hR : ringGlobalDimension R ≤ d) :
    (∀ M : ModuleCat.{u} R,
      StacksDraft.TorAmplitude.FaithfullyFlat.HasTorAmplitude
        ((CochainComplex.singleFunctor (ModuleCat.{u} R) 0).obj M) (-(d : ℤ)) 0) ∧
    (∀ (K : CochainComplex (ModuleCat.{u} R) ℤ) (a b : ℤ),
      (∀ i : ℤ, (i < a ∨ b < i) → IsZero (K.homology i)) →
        StacksDraft.TorAmplitude.FaithfullyFlat.HasTorAmplitude K (a - d) b) ∧
    (∀ K : CochainComplex (ModuleCat.{u} R) ℤ,
      (∃ a b : ℤ, StacksDraft.TorAmplitude.FaithfullyFlat.HasTorAmplitude K a b) ↔
        (DerivedCategory.TStructure.t (C := ModuleCat.{u} R)).bounded
          (DerivedCategory.Q.obj K))
Tag 0H75, a lemma

Tag 0H75 in the Stacks Project.

StacksDraft.TorAmplitude.hasTorAmplitudeIn_derivedExtensionScalars_certified_iff, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/TorAmplitude/NilpotentCertified.lean, line 418.

Stacks 0H75. Let f : R' → R be a surjective map of commutative rings whose kernel is a nilpotent ideal, and let L be the derived base change along f. For every object K of D(R') and every finite interval [a, b], the object L.obj K has Tor amplitude in [a, b] if and only if K does.

L is quantified over together with its comparison to termwise extension of scalars and the Functor.IsLeftDerivedFunctor certificate, which pins it down as the derived base change rather than an arbitrary functor. Each of the two derived tensor products is quantified as a StacksDraft.TorAmplitude.CertifiedDerivedTensoring: the bifunctor, its comparison with termwise tensoring by a module placed in degree zero, and the universal property making each - ⊗ᴸ M[0] the total left derived functor of - ⊗ M. That is exactly the datum Stacks 0652 reads Tor amplitude off, and no more; in particular neither the comparison at pairs of K-flat complexes nor exactness in the second variable is assumed.

The universe of R', the universe of R and the universe of the module carriers are independent: R' : Type u, R : Type v, and both rings' modules are read in ModuleCat.{max u v w}, as in the source statement. Neither ring is ULifted in the statement.

The proof moves both sides into the lifted rings, where the ring universe and the module universe coincide, by hasTorAmplitude_iff_scalarLift for the Tor amplitudes and derivedExtensionLiftSquare for the base change, and there applies hasTorAmplitudeIn_derivedExtensionScalars_iff_sameUniverse to the canonical derived tensor product of Stacks 0BYI.

public theorem hasTorAmplitudeIn_derivedExtensionScalars_certified_iff
    (hf : Function.Surjective f) (hnil : IsNilpotent (RingHom.ker f))
    (L : DerivedCategory (ModuleCat.{max u v w} R') ⥤ DerivedCategory (ModuleCat.{max u v w} R))
    (comparison : DerivedCategory.Q (C := ModuleCat.{max u v w} R') ⋙ L ⟶
      (ModuleCat.extendScalars.{u, v, max u v w} f).mapHomologicalComplex
          (ComplexShape.up ℤ) ⋙ DerivedCategory.Q (C := ModuleCat.{max u v w} R))
    [L.IsLeftDerivedFunctor comparison
      (HomologicalComplex.quasiIso (ModuleCat.{max u v w} R') (ComplexShape.up ℤ))]
    (D' : CertifiedDerivedTensoring.{u, max u v w} R')
    (D : CertifiedDerivedTensoring.{v, max u v w} R)
    (K : DerivedCategory (ModuleCat.{max u v w} R')) (a b : ℤ) :
    D.HasTorAmplitudeIn (L.obj K) a b ↔ D'.HasTorAmplitudeIn K a b
Sources

Section15.69 Spectral sequences for Ext#

Section 15.69 of the Stacks Project, Tag 0AVG. 2 tags here are carried by 2 declarations of the repository (all in StacksFrontier), quoted below from AxiomMath/Stacks at commit 5ed82d14.

Tag 0AVH, an equation

Tag 0AVH in the Stacks Project.

StacksDraft.ExtSpectralSequence.exists_ext_homology_spectralSequence, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/Ext/SpectralSequence.lean, line 794.

Stacks 0AVH. For M in an abelian category with enough injectives and K in its bounded below derived category, there is a filtered complex T of abelian groups, together with the filtration, cycle, boundary and induced-filtration data Fil, Z, D, FH of [Stacks, Tag 012M], a spectral sequence E whose page at (r, p, q) is identified with the canonical subquotient Z_r^{p,q}/(D_r^{p,q} ⊓ Z_r^{p,q}) and whose differential is induced by the differential of T, and isomorphisms Hⁿ(T) ≅ Extⁿ(M, K) and E₂ⁱʲ ≅ Extⁱ(M, Hʲ(K)), the latter factoring through the canonical page-2 subquotient. The spectral sequence is bounded, the filtration it induces on each Hⁿ(T) is finite, it converges to H^*(T) (the differentials vanish for r ≫ 0 and the inclusions (012S) and (012T) for the stable cycles and boundaries are equalities, which by [Stacks, Tag 012V] says exactly that E_∞^{p,q} is the graded piece gr^pHⁿ(T)), and on each total-degree diagonal every page vanishes outside a finite range of columns, so the spectral sequence degenerates there.

T is Tot(Hom(M, I)) for I a Cartan-Eilenberg resolution ([Stacks, Tag 015I]) of a bounded below complex of injective objects representing K, filtered by the second coordinate; the pages are identified by [Stacks, Tag 0130] and the second page is rewritten with [Stacks, Tag 015J] and StacksDraft.DerivedCoyoneda.rightDerivedSmallCoyonedaIso. The column vanishing is deduced from the finiteness of the diagonals of the zeroth page, which propagates to every later page because each page object is the homology of the previous one (CategoryTheory.SpectralSequence.isZero_page_of_le); it does not involve the stable cycles.

This is the 0AVH endpoint; exists_ext_homology_spectralSequence_of_data is the same statement with Fil, Z, D, FH universally quantified, with the e₂/filteredE₂Iso compatibility, the differential compatibility and the column-vanishing conjuncts dropped, and with E₂ identified with Ext by an isomorphism not tied to the canonical subquotient.

public theorem exists_ext_homology_spectralSequence
    (C : Type u) [Category.{v} C] [Abelian C] [EnoughInjectives C]
    [HasDerivedCategory.{w} C] (M : C) (K : DerivedCategory.Plus C) :
    ∃ (T : FilteredObject (CochainComplex AddCommGrpCat.{w} ℤ) ℤᵒᵖ)
      (Fil : ∀ (_p n : ℤ), Subobject (T.X.X n))
      (_hFil : ∀ p n : ℤ, Fil p n = Subobject.mk ((T.filtration.ι.app (op p)).f n))
      (Z : ∀ (_r _p n : ℤ), Subobject (T.X.X n))
      (_hZ : ∀ r p n : ℤ, Z r p n =
        Fil p n ⊓ (Subobject.pullback (T.X.d n (n + 1))).obj (Fil (p + r) (n + 1)))
      (D : ∀ (_r _p n : ℤ), Subobject (T.X.X n))
      (_hD : ∀ r p n : ℤ, D r p n = Z (r - 1) (p + 1) n ⊔
        (Subobject.«exists» (T.X.d (n - 1) n)).obj (Z (r - 1) (p - r + 1) (n - 1)))
      (FH : ∀ (n _p : ℤ), Subobject (T.X.homology n))
      (_hFH : ∀ n p : ℤ, FH n p =
        imageSubobject (HomologicalComplex.homologyMap (T.filtration.ι.app (op p)) n))
      (E : CohomologicalSpectralSequence AddCommGrpCat.{w} 0)
      (pageIso : ∀ (r p q n : ℤ) (hr : 0 ≤ r) (_ : n = p + q), (E.page r hr).X (p, q) ≅
        cokernel (Subobject.ofLE _ _ (inf_le_right : D r p n ⊓ Z r p n ≤ Z r p n)))
      (filteredE₂Iso : ∀ i j : ℤ,
        cokernel (Subobject.ofLE _ _
            (inf_le_right : D 2 i (i + j) ⊓ Z 2 i (i + j) ≤ Z 2 i (i + j))) ≅
          AddCommGrpCat.of (Abelian.zExt.{u, v, w} M
            ((DerivedCategory.homologyFunctor.{w, v, u} C j).obj
              (DerivedCategory.Plus.ι.{w, v, u}.obj K)) i))
      (e₂ : ∀ i j : ℤ, (E.page 2 zero_le_two).X (i, j) ≅
        AddCommGrpCat.of (Abelian.zExt.{u, v, w} M
          ((DerivedCategory.homologyFunctor.{w, v, u} C j).obj
            (DerivedCategory.Plus.ι.{w, v, u}.obj K)) i))
      (_abutmentIso : ∀ n : ℤ, T.X.homology n ≅
        AddCommGrpCat.of (DerivedCategory.Ext.{u, v, w}
          ((DerivedCategory.singleFunctor.{w, v, u} C 0).obj M)
          (DerivedCategory.Plus.ι.{w, v, u}.obj K) n)),
      (∀ i j : ℤ, (e₂ i j).hom =
        (pageIso 2 i j (i + j) zero_le_two rfl).hom ≫ (filteredE₂Iso i j).hom) ∧
      (∀ (r p q n : ℤ) (hr : 0 ≤ r) (hn : n = p + q),
        ∃ δ : (Z r p n : AddCommGrpCat.{w}) ⟶ (Z r (p + r) (n + 1) : AddCommGrpCat.{w}),
          δ ≫ (Z r (p + r) (n + 1)).arrow = (Z r p n).arrow ≫ T.X.d n (n + 1) ∧
          cokernel.π (Subobject.ofLE _ _ (inf_le_right : D r p n ⊓ Z r p n ≤ Z r p n)) ≫
              (pageIso r p q n hr hn).inv ≫ (E.page r hr).d (p, q) (p + r, q - r + 1) =
            δ ≫ cokernel.π (Subobject.ofLE _ _ (inf_le_right :
                D r (p + r) (n + 1) ⊓ Z r (p + r) (n + 1) ≤ Z r (p + r) (n + 1))) ≫
              (pageIso r (p + r) (q - r + 1) (n + 1) hr (by omega)).inv) ∧
      (∀ n : ℤ, {p : ℤ | ¬ IsZero ((E.page 0 le_rfl).X (p, n - p))}.Finite) ∧
      (∀ n : ℤ, ∃ a b : ℤ, a ≤ b ∧ FH n a = ⊤ ∧ FH n b = ⊥) ∧
      (∀ p q : ℤ, ∃ b : ℤ, ∀ (r : ℤ) (hr : 0 ≤ r), b ≤ r →
        (E.page r hr).d (p, q) (p + r, q - r + 1) = 0) ∧
      (∀ p n : ℤ,
        IsGLB (Set.range fun r : ℕ =>
            Fil p n ⊓ (Subobject.pullback (T.X.d n (n + 1))).obj (Fil (p + r) (n + 1)) ⊔
              Fil (p + 1) n)
          (kernelSubobject (T.X.d n (n + 1)) ⊓ Fil p n ⊔ Fil (p + 1) n) ∧
        IsLUB (Set.range fun r : ℕ =>
            Fil p n ⊓ (Subobject.«exists» (T.X.d (n - 1) n)).obj (Fil (p - r) (n - 1)) ⊔
              Fil (p + 1) n)
          (imageSubobject (T.X.d (n - 1) n) ⊓ Fil p n ⊔ Fil (p + 1) n)) ∧
      ∀ n : ℤ, ∃ a b : ℤ, a ≤ b ∧
        ∀ (r i j : ℤ) (hr : 0 ≤ r), i + j = n → (i < a ∨ b < i) →
          IsZero ((E.page r hr).X (i, j))
Tag 0AVI, an equation

Tag 0AVI in the Stacks Project.

StacksDraft.ExtSpectralSequence.exists_ext_complex_spectralSequence, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/Ext/SpectralSequence.lean, line 633.

Stacks 0AVI. If a bounded below complex K represents an object of the bounded below derived category, there is a cohomological spectral sequence E₁ⁱʲ = Extʲ(M, Kⁱ) abutting to Extⁱ⁺ʲ(M, K).

public theorem exists_ext_complex_spectralSequence
    (C : Type u) [Category.{v} C] [Abelian C] [EnoughInjectives C]
    [HasDerivedCategory.{w} C] (M : C) (K : CochainComplex C ℤ)
    (hK : ∃ a : ℤ, K.IsStrictlyGE a) :
    ∃ (E : CohomologicalSpectralSequence AddCommGrpCat.{w} 1)
      (_e₁ : ∀ i j : ℤ, (E.page 1).X (i, j) ≅
        AddCommGrpCat.of (Abelian.zExt.{u, v, w} M (K.X i) j))
      (G : ∀ _p n : ℤ, Subobject
        (AddCommGrpCat.of
          (DerivedCategory.Ext.{u, v, w}
            ((DerivedCategory.singleFunctor.{w, v, u} C 0).obj M)
            (DerivedCategory.Q.obj K) n)))
      (hG : ∀ p p' n : ℤ, p ≤ p' → G p' n ≤ G p n),
      (∀ n : ℤ, ∃ a b : ℤ, a ≤ b ∧ G a n = ⊤ ∧ G b n = ⊥) ∧
      ∀ p q : ℤ, ∃ r₀ : ℤ, 1 ≤ r₀ ∧ ∀ (r : ℤ) (hr : 1 ≤ r), r₀ ≤ r →
        (E.page r hr).d (p, q) (p + r, q + 1 - r) = 0 ∧
        (E.page r hr).d (p - r, q + r - 1) (p, q) = 0 ∧
        Nonempty ((E.page r hr).X (p, q) ≅
          cokernel (Subobject.ofLE (G (p + 1) (p + q)) (G p (p + q))
            (hG p (p + 1) (p + q) (by omega))))
Sources

Section15.70 Projective dimension#

Section 15.70 of the Stacks Project, Tag 0A5M. 3 tags here are carried by 4 declarations of the repository (all in StacksFrontier), quoted below from AxiomMath/Stacks at commit 5ed82d14.

Tag 0A5N, a definition

Tag 0A5N in the Stacks Project.

StacksDraft.ProjectiveDimension.HasProjectiveAmplitude, a def in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Algebra/Homology/ProjectiveDimension/Amplitude.lean, line 48. The attribute's comment: “projective amplitude”.

An object of D(R) has projective amplitude in [a, b] if it is represented by a complex of projective R-modules whose terms vanish outside degrees a through b.

public def HasProjectiveAmplitude
    (K : DerivedCategory (ModuleCat.{v} R)) (a b : ℤ) : Prop

StacksDraft.ProjectiveDimension.HasFiniteProjectiveDimension, a def in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Algebra/Homology/ProjectiveDimension/Amplitude.lean, line 58. The attribute's comment: “finite projective dimension”.

An object of D(R) has finite projective dimension if it is represented by a bounded complex of projective R-modules.

public def HasFiniteProjectiveDimension
    (K : DerivedCategory (ModuleCat.{v} R)) : Prop
Tag 0A5P, a lemma

Tag 0A5P in the Stacks Project.

StacksDraft.ProjectiveDimension.hasProjectiveAmplitude_iff_ext_vanishing, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Algebra/Homology/ProjectiveDimension/Criteria.lean, line 464.

Stacks 0A5P. Projective amplitude in [a, b] is equivalent to vanishing of all Ext groups outside degrees [-b, -a]; equivalently, it can be detected using upper cohomology vanishing and Ext groups above degree -a, or using cohomology outside [a - 1, b] and the single Ext degree -a + 1.

public theorem hasProjectiveAmplitude_iff_ext_vanishing [Small.{v} R]
    (K : DerivedCategory (ModuleCat.{v} R)) (a b : ℤ) :
    let moduleObject := fun N : ModuleCat.{v} R ↦
      (DerivedCategory.singleFunctor (ModuleCat.{v} R) 0).obj N
    let projectiveAmplitude := HasProjectiveAmplitude K a b
    let extOutsideVanishes := ∀ (N : ModuleCat.{v} R) (i : ℤ),
      i ∉ Set.Icc (-b) (-a) → Subsingleton (DerivedCategory.Ext K (moduleObject N) i)
    let upperVanishing :=
      (∀ n : ℤ, b < n → IsZero ((DerivedCategory.homologyFunctor (ModuleCat.{v} R) n).obj K)) ∧
        ∀ (N : ModuleCat.{v} R) (i : ℤ), -a < i →
          Subsingleton (DerivedCategory.Ext K (moduleObject N) i)
    let endpointVanishing :=
      (∀ n : ℤ, n ∉ Set.Icc (a - 1) b →
        IsZero ((DerivedCategory.homologyFunctor (ModuleCat.{v} R) n).obj K)) ∧
        ∀ N : ModuleCat.{v} R,
          Subsingleton (DerivedCategory.Ext K (moduleObject N) (-a + 1))
    (projectiveAmplitude ↔ extOutsideVanishes) ∧
      (extOutsideVanishes ↔ upperVanishing) ∧
      (upperVanishing ↔ endpointVanishing)
Tag 0A5Q, an example

Tag 0A5Q in the Stacks Project.

StacksDraft.ProjectiveDimension.dualNumber_quotient_eps_periodic_resolution_infinite_dimension, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Algebra/Homology/ProjectiveDimension/DualNumbers.lean, line 277.

Stacks 0A5Q. For the ring R = k[ε] of dual numbers over a field and M = R/(ε), the module M is represented by the periodic free complex with all differentials multiplication by ε, but M has infinite projective dimension.

public theorem dualNumber_quotient_eps_periodic_resolution_infinite_dimension
    (k : Type u) [Field k]
    [HasDerivedCategory.{w} (ModuleCat.{u} (DualNumber k))] :
    let R := DualNumber k
    let ε : R := DualNumber.eps
    let M := ModuleCat.of R (R ⧸ Ideal.span {ε})
    projectiveDimension M = ⊤ ∧
      ∃ P : CochainComplex (ModuleCat.{u} R) ℤ,
        Nonempty
          (DerivedCategory.Q.obj P ≅
            (DerivedCategory.singleFunctor (ModuleCat.{u} R) 0).obj M) ∧
          (∀ i : ℤ, 0 < i → IsZero (P.X i)) ∧
          ∃ e : ∀ n : ℕ, P.X (-(n : ℤ)) ≅ ModuleCat.of R R,
            ∀ n : ℕ,
              P.d (-((n + 1 : ℕ) : ℤ)) (-(n : ℤ)) ≫ (e n).hom =
                (e (n + 1)).hom ≫
                  ModuleCat.ofHom (LinearMap.mulLeft R ε)
Sources

Section15.71 Injective dimension#

Section 15.71 of the Stacks Project, Tag 0A5R. 7 tags here are carried by 8 declarations of the repository (all in StacksFrontier), quoted below from AxiomMath/Stacks at commit 5ed82d14.

Tag 0A5S, a definition

Tag 0A5S in the Stacks Project.

StacksDraft.InjectiveDimension.HasInjectiveAmplitude, a def in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Algebra/Homology/InjectiveDimension.lean, line 44. The attribute's comment: “injective amplitude”. References: SGA 6 I (5.7), “(i) definition”.

An object of a derived category has injective amplitude in [a, b] if it is isomorphic to the image of a cochain complex which vanishes below a and above b and whose terms are injective.

public def HasInjectiveAmplitude (K : DerivedCategory C) (a b : ℤ) : Prop

StacksDraft.InjectiveDimension.HasFiniteInjectiveDimension, a def in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Algebra/Homology/InjectiveDimension.lean, line 51. The attribute's comment: “finite injective dimension”.

An object of a derived category has finite injective dimension if it has injective amplitude in some finite integer interval.

public def HasFiniteInjectiveDimension (K : DerivedCategory C) : Prop
Tag 0A5T, a lemma

Tag 0A5T in the Stacks Project.

StacksDraft.InjectiveDimension.hasInjectiveAmplitude_iff_ext_vanishing_iff_quotient_vanishing, a lemma in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Algebra/Homology/InjectiveDimension/Criteria.lean, line 362. References: EGA 0 (17.2.1), “partial”.

Stacks 0A5T. An object of the derived category of modules has injective amplitude in [a, b] if and only if its Ext groups from all modules vanish in degrees outside [a, b]; this is in turn equivalent to testing the same vanishing only on quotients by ideals.

public lemma hasInjectiveAmplitude_iff_ext_vanishing_iff_quotient_vanishing
    {R : Type u} [CommRing R] [Small.{v} R] [HasDerivedCategory (ModuleCat.{v} R)]
    (K : DerivedCategory (ModuleCat.{v} R)) (a b : ℤ) :
    (HasInjectiveAmplitude K a b ↔
      ∀ (N : ModuleCat.{v} R) (i : ℤ), i < a ∨ b < i →
        Subsingleton
          (DerivedCategory.Ext
            ((DerivedCategory.singleFunctor (ModuleCat.{v} R) 0).obj N) K i)) ∧
    ((∀ (N : ModuleCat.{v} R) (i : ℤ), i < a ∨ b < i →
        Subsingleton
          (DerivedCategory.Ext
            ((DerivedCategory.singleFunctor (ModuleCat.{v} R) 0).obj N) K i)) ↔
      ∀ (I : Ideal R) (i : ℤ), i < a ∨ b < i →
        Subsingleton
          (DerivedCategory.Ext
            ((DerivedCategory.singleFunctor (ModuleCat.{v} R) 0).obj
              (ModuleCat.of R (Shrink.{v} (R ⧸ I)))) K i))
Tag 0EX0, an example

Tag 0EX0 in the Stacks Project.

StacksDraft.InjectiveDimension.dedekindDomain_ideal_projective_and_bounded_complex_splitting, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Algebra/Homology/InjectiveDimension/Examples.lean, line 464.

Stacks 0EX0. Ideals over a Dedekind domain are finite projective. Hence cyclic modules have projective dimension at most one, every module has injective dimension at most one, all Ext groups in degrees at least two vanish, and every bounded derived object is isomorphic to the finite direct sum of its cohomologies placed in their degrees.

public theorem dedekindDomain_ideal_projective_and_bounded_complex_splitting
    (R : Type u) [CommRing R] [IsDedekindDomain R] [Small.{v} R] :
    (∀ I : Ideal R, Module.Finite R I ∧ Module.Projective R I) ∧
      (∀ I : Ideal R,
        HasProjectiveDimensionLE (ModuleCat.of R (Shrink.{v} (R ⧸ I))) 1) ∧
      (∀ M : ModuleCat.{v} R, HasInjectiveDimensionLE M 1) ∧
      (∀ (M N : ModuleCat.{v} R) (i : ℕ), 2 ≤ i →
        Subsingleton (Abelian.Ext M N i)) ∧
      ∀ (K : DerivedCategory (ModuleCat.{v} R)) (a b : ℤ), K.IsGE a → K.IsLE b →
        Nonempty (K ≅ ⨁ fun i : Finset.Icc a b =>
          (DerivedCategory.singleFunctor (ModuleCat.{v} R) i.1).obj
            ((DerivedCategory.homologyFunctor (ModuleCat.{v} R) i.1).obj K))
Tag 0A5U, an example

Tag 0A5U in the Stacks Project.

StacksDraft.InjectiveDimension.dualNumber_residueField_infinite_injectiveDimension, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Algebra/Homology/InjectiveDimension/Examples.lean, line 422.

Stacks 0A5U. Let R be the ring of dual numbers over a field and let M = R/(ε). Then R is injective as an R-module, M is quasi-isomorphic to the left-unbounded complex of copies of R whose differentials are multiplication by ε, and M has infinite injective dimension.

public theorem dualNumber_residueField_infinite_injectiveDimension (k : Type u) [Field k] :
    let R := DualNumber k
    let M := ModuleCat.of R (R ⧸ Ideal.span ({DualNumber.eps} : Set R))
    Module.Injective R R ∧
      (∃ (K : CochainComplex (ModuleCat R) ℤ)
          (e : ∀ (i : ℤ) (_ : i ≤ 0), K.X i ≅ ModuleCat.of R R)
          (q : K ⟶ (CochainComplex.singleFunctor (ModuleCat R) 0).obj M),
        QuasiIso q ∧
          (q.f 0 = (e 0 (by omega)).hom ≫
            ModuleCat.ofHom (Submodule.mkQ (Ideal.span ({DualNumber.eps} : Set R)))) ∧
          (∀ (i : ℤ) (hi : i < 0),
            (e i (by omega)).hom ≫ ModuleCat.ofHom (LinearMap.mulLeft R DualNumber.eps) =
              K.d i (i + 1) ≫ (e (i + 1) (by omega)).hom) ∧
          (∀ (i : ℤ), 0 < i → IsZero (K.X i))) ∧
      (∀ n : ℕ, ¬ HasInjectiveDimensionLE M n)
Tag 0A5V, a lemma

Tag 0A5V in the Stacks Project.

StacksDraft.InjectiveDimension.hasFiniteInjectiveDimension_of_bounded, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Algebra/Homology/InjectiveDimension/Criteria.lean, line 505.

Stacks 0A5V. A bounded object of the derived category of modules has finite injective dimension if all its cohomology modules have finite injective dimension. Likewise, a derived object represented by a bounded complex whose terms all have finite injective dimension has finite injective dimension.

public theorem hasFiniteInjectiveDimension_of_bounded
    {R : Type u} [CommRing R] [Small.{v} R] [HasDerivedCategory (ModuleCat.{v} R)]
    (K : DerivedCategory (ModuleCat.{v} R)) :
    ((∃ a b : ℤ, K.IsGE a ∧ K.IsLE b) →
      (∀ i : ℤ, ∃ n : ℕ,
        HasInjectiveDimensionLE
          ((DerivedCategory.homologyFunctor (ModuleCat.{v} R) i).obj K) n) →
      HasFiniteInjectiveDimension K) ∧
    (∀ (L : CochainComplex (ModuleCat.{v} R) ℤ),
      Nonempty (DerivedCategory.Q.obj L ≅ K) →
      (∃ a b : ℤ, L.IsStrictlyGE a ∧ L.IsStrictlyLE b) →
      (∀ i : ℤ, ∃ n : ℕ, HasInjectiveDimensionLE (L.X i) n) →
      HasFiniteInjectiveDimension K)
Tag 0DW2, a lemma

Tag 0DW2 in the Stacks Project.

StacksDraft.InjectiveDimension.hasFiniteInjectiveDimension_iff_quotient_ext_vanishing, a lemma in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Algebra/Homology/InjectiveDimension/Noetherian.lean, line 451.

Stacks 0DW2. For a bounded below complex with finite cohomology over a Noetherian ring, finite injective dimension can be tested by uniform high-degree Ext vanishing against the quotients by all ideals containing an ideal in the Jacobson radical.

public lemma hasFiniteInjectiveDimension_iff_quotient_ext_vanishing
    {R : Type u} [CommRing R] [IsNoetherianRing R] [Small.{v} R]
    (I : Ideal R) (hI : I ≤ Ideal.jacobson (⊥ : Ideal R))
    (K : DerivedCategory.Plus (ModuleCat.{v} R))
    (hK : ∀ i : ℤ, Module.Finite R
      ((DerivedCategory.homologyFunctor (ModuleCat.{v} R) i).obj
        (DerivedCategory.Plus.ι.obj K))) :
    HasFiniteInjectiveDimension (DerivedCategory.Plus.ι.obj K) ↔
      ∃ b : ℤ, ∀ (J : Ideal R), I ≤ J → ∀ i : ℤ, b < i →
        Subsingleton
          (DerivedCategory.Ext
            ((DerivedCategory.singleFunctor (ModuleCat.{v} R) 0).obj
              (ModuleCat.of R (Shrink.{v} (R ⧸ J))))
            (DerivedCategory.Plus.ι.obj K) i)
Tag 0AVJ, a lemma

Tag 0AVJ in the Stacks Project.

StacksDraft.InjectiveDimension.hasFiniteInjectiveDimension_iff_residueField_ext_vanishing, a lemma in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Algebra/Homology/InjectiveDimension/Noetherian.lean, line 498.

Stacks 0AVJ. A bounded below complex with finite cohomology over a Noetherian local ring has finite injective dimension if and only if its Ext groups from the residue field vanish in all sufficiently high degrees.

public lemma hasFiniteInjectiveDimension_iff_residueField_ext_vanishing
    {R : Type u} [CommRing R] [IsLocalRing R] [IsNoetherianRing R] [Small.{v} R]
    (K : DerivedCategory.Plus (ModuleCat.{v} R))
    (hK : ∀ i : ℤ, Module.Finite R
      ((DerivedCategory.homologyFunctor (ModuleCat.{v} R) i).obj
        (DerivedCategory.Plus.ι.obj K))) :
    HasFiniteInjectiveDimension (DerivedCategory.Plus.ι.obj K) ↔
      ∃ b : ℤ, ∀ i : ℤ, b < i →
        Subsingleton
          (DerivedCategory.Ext
            ((DerivedCategory.singleFunctor (ModuleCat.{v} R) 0).obj
              (ModuleCat.of R (Shrink.{v} (R ⧸ IsLocalRing.maximalIdeal R))))
            (DerivedCategory.Plus.ι.obj K) i)
Sources

Section15.72 Modules which are close to being projective#

Section 15.72 of the Stacks Project, Tag 0G8Z. 7 tags here are carried by 10 declarations of the repository (all in StacksFrontier), quoted below from AxiomMath/Stacks at commit 5ed82d14.

Tag 0G90, a lemma

Tag 0G90 in the Stacks Project.

factorsThroughProj_iff_free, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Algebra/Module/IProjective.lean, line 74. The attribute's comment: “(1)”.

A linear map factors through a projective module if and only if it factors through a free module.

theorem factorsThroughProj_iff_free
    {R : Type u} {M : Type v} {N : Type w} [CommRing R]
    [AddCommGroup M] [Module R M] [AddCommGroup N] [Module R N] (φ : M →ₗ[R] N) :
    FactorsThroughProj φ ↔ FactorsThroughFree φ

FactorsThroughProj.submodule, a def in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Algebra/Module/IProjective.lean, line 121. The attribute's comment: “(2)”.

The R-linear maps M →ₗ[R] N which factor through a projective R-module form an R-submodule of M →ₗ[R] N.

def FactorsThroughProj.submodule (R : Type u) [CommRing R] (M : Type v) (N : Type w)
    [AddCommGroup M] [Module R M] [AddCommGroup N] [Module R N] :
    Submodule R (M →ₗ[R] N)

FactorsThroughProj.comp_comp, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Algebra/Module/IProjective.lean, line 144. The attribute's comment: “(3)”.

Factoring through a projective module is stable under precomposition and postcomposition by arbitrary linear maps.

theorem FactorsThroughProj.comp_comp {R : Type u} [CommRing R] {M : Type v} {N : Type w}
    [AddCommGroup M] [Module R M] [AddCommGroup N] [Module R N] {φ : M →ₗ[R] N}
    (hφ : FactorsThroughProj φ) {M' : Type*} {N' : Type*} [AddCommGroup M'] [Module R M']
    [AddCommGroup N'] [Module R N'] (ψ : M' →ₗ[R] M) (ξ : N →ₗ[R] N') :
    FactorsThroughProj (ξ ∘ₗ φ ∘ₗ ψ)
Tag 0G91, a lemma

Tag 0G91 in the Stacks Project.

Module.exists_finite_projective_factorization, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Algebra/Module/IProjective.lean, line 343.

A linear map out of a finite module which factors through a projective module already factors through a finite projective module.

theorem Module.exists_finite_projective_factorization
    {R : Type u} [CommRing R] {M : Type v} {N : Type w}
    [AddCommGroup M] [Module R M] [Module.Finite R M]
    [AddCommGroup N] [Module R N] (φ : M →ₗ[R] N) (hφ : FactorsThroughProj φ) :
    ∃ (P : Type (max u v w)) (_ : AddCommGroup P) (_ : Module R P)
      (_ : Module.Finite R P) (_ : Module.Projective R P)
      (α : M →ₗ[R] P) (β : P →ₗ[R] N), φ = β ∘ₗ α
Tag 0G92, a lemma

Tag 0G92 in the Stacks Project.

Module.isIProjective_iff_free, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Algebra/Module/IProjective.lean, line 165. The attribute's comment: “(1)-(2)”.

M is I-projective if and only if for every a ∈ I the multiplication-by-a endomorphism of M factors through a free R-module.

theorem Module.isIProjective_iff_free (R : Type u) [CommRing R] (I : Ideal R) (M : Type v)
    [AddCommGroup M] [Module R M] :
    Module.IsIProjective R I M ↔ ∀ a ∈ I, FactorsThroughFree ((LinearMap.lsmul R M) a)

Module.isIProjective_iff_ext_annihilated, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Algebra/Module/IProjective.lean, line 205. The attribute's comment: “(1)-(3)”.

M is I-projective if and only if I annihilates Ext¹_R(M, N) for every R-module N.

theorem Module.isIProjective_iff_ext_annihilated (R : Type u) [CommRing R] [Small.{v} R]
    (I : Ideal R) (M : Type v) [AddCommGroup M] [Module R M] :
    Module.IsIProjective R I M ↔
      ∀ (N : Type v) [AddCommGroup N] [Module R N],
        I ≤ Module.annihilator R
          (Abelian.Ext (ModuleCat.of R M) (ModuleCat.of R N) 1)
Tag 0G93, a definition

Tag 0G93 in the Stacks Project.

Module.IsIProjective, a def in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Algebra/Module/IProjective.lean, line 158.

An R-module M is I-projective, for an ideal I of R, if for every a ∈ I the multiplication-by-a endomorphism m ↦ a • m of M factors through a projective R-module.

def Module.IsIProjective (R : Type u) [CommRing R] (I : Ideal R) (M : Type v)
    [AddCommGroup M] [Module R M] : Prop
Tag 0G94, a lemma

Tag 0G94 in the Stacks Project.

Module.isIProjective_of_smul_eq_zero, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Algebra/Module/IProjective.lean, line 252.

If M is annihilated by the ideal I, that is a • m = 0 for all a ∈ I and m : M, then M is I-projective.

theorem Module.isIProjective_of_smul_eq_zero {R : Type u} [CommRing R] (I : Ideal R) (M : Type v)
    [AddCommGroup M] [Module R M] (h : ∀ a ∈ I, ∀ m : M, a • m = 0) :
    Module.IsIProjective R I M
Tag 0G95, a lemma

Tag 0G95 in the Stacks Project.

Module.isIProjective_of_injective_of_exact, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Algebra/Module/IProjective.lean, line 263.

Given a short exact sequence 0 → K →[i] P →[p] M → 0 of R-modules with M I-projective and P projective, the module K is I-projective.

theorem Module.isIProjective_of_injective_of_exact {R : Type*} [CommRing R] (I : Ideal R)
    {K P M : Type u} [AddCommGroup K] [Module R K] [AddCommGroup P] [Module R P]
    [Module.Projective R P] [AddCommGroup M] [Module R M] (i : K →ₗ[R] P) (p : P →ₗ[R] M)
    (hi : Function.Injective i) (hp : Function.Surjective p)
    (hexact : LinearMap.range i = LinearMap.ker p)
    (hM : Module.IsIProjective R I M) :
    Module.IsIProjective R I K
Tag 0G96, a lemma

Tag 0G96 in the Stacks Project.

Module.IsIProjective.dual, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Algebra/Module/IProjective.lean, line 360.

If M is a finite I-projective R-module, then its dual M^∨ = Hom_R(M, R) is I-projective.

theorem Module.IsIProjective.dual (R : Type u) [CommRing R] (I : Ideal R) (M : Type v)
    [AddCommGroup M] [Module R M] [Module.Finite R M]
    (hM : Module.IsIProjective R I M) :
    Module.IsIProjective R I (Module.Dual R M)
Sources

Section15.73 Hom complexes#

Section 15.73 of the Stacks Project, Tag 0A8H. 11 tags here are carried by 28 declarations of the repository (all in StacksFrontier), quoted below from AxiomMath/Stacks at commit 5ed82d14.

Tag 0A5X, an equation

Tag 0A5X in the Stacks Project.

homComplexHomologyAddEquiv, a def in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/HomComplex/RHom.lean, line 109.

Stacks 0A5X. The canonical identification Hⁿ(Hom^•(L, M)) ≃+ Hom_{K(C)}(L, M⟦n⟧) of the degree-n cohomology of the Hom complex with morphisms in the homotopy category.

noncomputable def homComplexHomologyAddEquiv
    {C : Type u} [Category.{v} C] [Preadditive C] (L M : CochainComplex C ℤ) (n : ℤ) :
    (L.HomComplex M).homology n ≃+
      ((HomotopyCategory.quotient C (ComplexShape.up ℤ)).obj L ⟶
        (HomotopyCategory.quotient C (ComplexShape.up ℤ)).obj (M⟦n⟧))
Tag 0A5Y, a lemma

Tag 0A5Y in the Stacks Project.

Stacks.HomComplex.Currying.curryIso, a def in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/HomComplex/Currying.lean, line 327.

Stacks 0A5Y. The canonical tensor–Hom currying isomorphism of complexes of R-modules Hom^•(K, Hom^•(L, M)) ≅ Hom^•(Tot(K ⊗_R L), M), given in each degree by transposing a degreewise linear map.

noncomputable def curryIso (K L M : CochainComplex (ModuleCat.{u} R) ℤ) :
    HomComplexR R K (HomComplexR R L M) ≅ HomComplexR R (K ⊗ L) M

Stacks.HomComplex.Currying.curryIso_hom_apply, a lemma in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/HomComplex/Currying.lean, line 342.

Stacks 0A5Y. The currying isomorphism sends a cochain α to the cochain whose value on the summand K^r ⊗ L^s of Tot^t(K ⊗ L) is x ⊗ y ↦ α^r(x)(y). This determines it in every degree and on every summand.

lemma curryIso_hom_apply (K L M : CochainComplex (ModuleCat.{u} R) ℤ) (n r s t p : ℤ)
    (hrs : r + s = t) (htp : t + n = p)
    (α : Cochain K (HomComplexR R L M) n) (x : K.X r) (y : L.X s) :
    ((((curryIso K L M).hom.f n).hom α).v t p htp).hom
        ((ιTensorObj K L r s t hrs).hom (x ⊗ₜ[R] y)) =
      (((α.v r (r + n) (by omega)).hom x).v s p (by omega)).hom y

Stacks.HomComplex.Currying.curryIso_naturality_left, a lemma in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/HomComplex/Currying.lean, line 413.

Stacks 0A5Y. Currying is contravariantly natural in the first complex: precomposing with f : K' ⟶ K inside the iterated Hom complex corresponds to precomposing with f ▷ L on the total complex.

lemma curryIso_naturality_left {K K' L M : CochainComplex (ModuleCat.{u} R) ℤ} (f : K' ⟶ K) :
    Stacks.HomComplex.TensorHomMap.precomp R K' K (HomComplexR R L M) f ≫ (curryIso K' L M).hom =
      (curryIso K L M).hom ≫ Stacks.HomComplex.TensorHomMap.precomp R (K' ⊗ L) (K ⊗ L) M (f ▷ L)

Stacks.HomComplex.Currying.curryIso_naturality_middle, a lemma in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/HomComplex/Currying.lean, line 435.

Stacks 0A5Y. Currying is contravariantly natural in the middle complex: precomposing the inner Hom complex with f : L' ⟶ L corresponds to precomposing with K ◁ f on the total complex.

lemma curryIso_naturality_middle {K L L' M : CochainComplex (ModuleCat.{u} R) ℤ} (f : L' ⟶ L) :
    Stacks.HomComplex.TensorHomMap.postcomp R K (HomComplexR R L M) (HomComplexR R L' M)
        (Stacks.HomComplex.TensorHomMap.precomp R L' L M f) ≫ (curryIso K L' M).hom =
      (curryIso K L M).hom ≫ Stacks.HomComplex.TensorHomMap.precomp R (K ⊗ L') (K ⊗ L) M (K ◁ f)

Stacks.HomComplex.Currying.curryIso_naturality_right, a lemma in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/HomComplex/Currying.lean, line 460.

Stacks 0A5Y. Currying is covariantly natural in the target complex.

lemma curryIso_naturality_right {K L M M' : CochainComplex (ModuleCat.{u} R) ℤ} (f : M ⟶ M') :
    Stacks.HomComplex.TensorHomMap.postcomp R K (HomComplexR R L M) (HomComplexR R L M')
        (Stacks.HomComplex.TensorHomMap.postcomp R L M M' f) ≫ (curryIso K L M').hom =
      (curryIso K L M).hom ≫ Stacks.HomComplex.TensorHomMap.postcomp R (K ⊗ L) M M' f
Tag 0A5Z, an equation

Tag 0A5Z in the Stacks Project.

StacksDraft.TensorHomEquiv.tensorHomEquiv, an alias in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Algebra/Module/TensorHomEquiv.lean, line 57.

Stacks 0A5Z. Linear maps into a module of linear maps are canonically equivalent to linear maps out of the corresponding tensor product: Hom_R(K, Hom_R(L, M)) is identified with Hom_R(K ⊗_R L, M) by sending f to the map determined by x ⊗ y ↦ f(x)(y).

alias tensorHomEquiv

StacksDraft.TensorHomEquiv.tensorHomEquiv, an alias in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Algebra/Module/TensorHomEquiv.lean, line 57.

Stacks 0A5Z. Linear maps into a module of linear maps are canonically equivalent to linear maps out of the corresponding tensor product: Hom_R(K, Hom_R(L, M)) is identified with Hom_R(K ⊗_R L, M) by sending f to the map determined by x ⊗ y ↦ f(x)(y).

alias tensorHomEquiv

StacksDraft.TensorHomEquiv.tensorHomEquiv_apply, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Algebra/Module/TensorHomEquiv.lean, line 62.

Stacks 0A5Z. The tensor–Hom equivalence sends f : K →ₗ[R] L →ₗ[R] M to the linear map taking the pure tensor x ⊗ y to f x y.

theorem tensorHomEquiv_apply {R : Type*} [CommRing R] (K L M : Type*)
    [AddCommGroup K] [AddCommGroup L] [AddCommGroup M]
    [Module R K] [Module R L] [Module R M]
    (f : K →ₗ[R] L →ₗ[R] M) (x : K) (y : L) :
    tensorHomEquiv (RingHom.id R) K L M f (x ⊗ₜ[R] y) = f x y

StacksDraft.TensorHomEquiv.tensorHomEquiv_apply, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Algebra/Module/TensorHomEquiv.lean, line 62.

Stacks 0A5Z. The tensor–Hom equivalence sends f : K →ₗ[R] L →ₗ[R] M to the linear map taking the pure tensor x ⊗ y to f x y.

theorem tensorHomEquiv_apply {R : Type*} [CommRing R] (K L M : Type*)
    [AddCommGroup K] [AddCommGroup L] [AddCommGroup M]
    [Module R K] [Module R L] [Module R M]
    (f : K →ₗ[R] L →ₗ[R] M) (x : K) (y : L) :
    tensorHomEquiv (RingHom.id R) K L M f (x ⊗ₜ[R] y) = f x y

StacksDraft.TensorHomEquiv.tensorHomEquiv_symm_apply, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Algebra/Module/TensorHomEquiv.lean, line 72.

Stacks 0A5Z. The inverse of the tensor–Hom equivalence sends g : K ⊗[R] L →ₗ[R] M to the map x ↦ y ↦ g (x ⊗ y).

theorem tensorHomEquiv_symm_apply {R : Type*} [CommRing R] (K L M : Type*)
    [AddCommGroup K] [AddCommGroup L] [AddCommGroup M]
    [Module R K] [Module R L] [Module R M]
    (g : K ⊗[R] L →ₗ[R] M) (x : K) (y : L) :
    ((tensorHomEquiv (RingHom.id R) K L M).symm g) x y = g (x ⊗ₜ[R] y)

StacksDraft.TensorHomEquiv.tensorHomEquiv_symm_apply, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Algebra/Module/TensorHomEquiv.lean, line 72.

Stacks 0A5Z. The inverse of the tensor–Hom equivalence sends g : K ⊗[R] L →ₗ[R] M to the map x ↦ y ↦ g (x ⊗ y).

theorem tensorHomEquiv_symm_apply {R : Type*} [CommRing R] (K L M : Type*)
    [AddCommGroup K] [AddCommGroup L] [AddCommGroup M]
    [Module R K] [Module R L] [Module R M]
    (g : K ⊗[R] L →ₗ[R] M) (x : K) (y : L) :
    ((tensorHomEquiv (RingHom.id R) K L M).symm g) x y = g (x ⊗ₜ[R] y)
Tag 0GWQ, a remark

Tag 0GWQ in the Stacks Project.

Stacks.HomComplex.MonoidalClosed.cochainComplex_symmetricMonoidalClosed, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/HomComplex/Currying.lean, line 688.

Stacks 0GWQ. Cochain complexes of modules over a commutative ring form a symmetric monoidal closed category. The concrete Hom complexes, with pre- and postcomposition on morphisms, form a bifunctor naturally isomorphic to the internal Hom bifunctor. Under this isomorphism, the closed-structure adjunction, after applying the symmetry K ⊗ L ≅ L ⊗ K, is the canonical currying isomorphism of Hom complexes. Moreover, a degree-zero cochain is the cochain of a unique morphism of complexes if and only if its differential vanishes.

theorem cochainComplex_symmetricMonoidalClosed (R : Type u) [CommRing R] :
    ∃ (s : SymmetricCategory (CochainComplex (ModuleCat.{u} R) ℤ)),
      letI := s
      ∃ (closed : MonoidalClosed (CochainComplex (ModuleCat.{u} R) ℤ)),
        letI := closed
        ∃ (H : (CochainComplex (ModuleCat.{u} R) ℤ)ᵒᵖ ⥤
            CochainComplex (ModuleCat.{u} R) ℤ ⥤ CochainComplex (ModuleCat.{u} R) ℤ)
          (hObj : ∀ (L M : CochainComplex (ModuleCat.{u} R) ℤ),
            (H.obj (Opposite.op L)).obj M = HomComplexR R L M),
          (∀ (L M N : CochainComplex (ModuleCat.{u} R) ℤ) (f : M ⟶ N),
            (H.obj (Opposite.op L)).map f =
              eqToHom (hObj L M) ≫ Stacks.HomComplex.TensorHomMap.postcomp R L M N f ≫ eqToHom (hObj
                L N).symm) ∧
          (∀ (K L M : CochainComplex (ModuleCat.{u} R) ℤ) (f : K ⟶ L),
            (H.map f.op).app M =
              eqToHom (hObj L M) ≫ Stacks.HomComplex.TensorHomMap.precomp R K L M f ≫ eqToHom (hObj
                K M).symm) ∧
          ∃ e : MonoidalClosed.internalHom ≅ H,
            (∀ (L M : CochainComplex (ModuleCat.{u} R) ℤ) (f : Cochain L M 0),
                (∃! φ : L ⟶ M, Cochain.ofHom φ = f) ↔ δ 0 1 f = 0) ∧
            ∀ (K L M : CochainComplex (ModuleCat.{u} R) ℤ)
                (φ : K ⟶ HomComplexR R L M),
              Cochain.ofHom
                  ((s.toBraidedCategory.braiding K L).hom ≫
                    MonoidalClosed.uncurry
                      (φ ≫ eqToHom (hObj L M).symm ≫ (e.app (Opposite.op L)).inv.app M)) =
                (Stacks.HomComplex.Currying.curryIso K L M).hom.f 0 (Cochain.ofHom φ)
Tag 0A8I, a lemma

Tag 0A8I in the Stacks Project.

composition_morphism_exists, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/HomComplex/Composition.lean, line 144. References: SGA 4 XVII (1.1.10), “(iii), special case”.

There is a morphism of complexes of R-modules c : tensorObj (HomComplexR R L M) (HomComplexR R K L) ⟶ HomComplexR R K M such that for β : Cochain L M p and γ : Cochain K L q with p + q = n, the (p, q)-component of c sends β ⊗ₜ γ to the composite cochain γ.comp β.

theorem composition_morphism_exists :
    ∃ c : HomologicalComplex.tensorObj (HomComplexR R L M) (HomComplexR R K L) ⟶ HomComplexR R K M,
      ∀ (p q n : ℤ) (h : p + q = n) (β : Cochain L M p) (γ : Cochain K L q),
        (HomologicalComplex.ιTensorObj (HomComplexR R L M) (HomComplexR R K L) p q n h ≫ c.f n).hom
            (β ⊗ₜ[R] γ)
          = γ.comp β (by rw [add_comm]; exact h)
Tag 0BYM, a lemma

Tag 0BYM in the Stacks Project.

Stacks.HomComplex.TensorHomComparison.theta, a def in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/HomComplex/TensorHom.lean, line 431.

Stacks 0BYM. The canonical morphism of complexes Θ : Tot(K ⊗_R Hom^•(M, L)) ⟶ Hom^•(M, Tot(K ⊗_R L)), given in degree n by thetaDeg.

noncomputable def theta (K L M : CochainComplex (ModuleCat R) ℤ) :
    (K ⊗ HomComplexR R M L) ⟶ HomComplexR R M (K ⊗ L)

Stacks.HomComplex.TensorHomComparison.theta_natural_K, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/HomComplex/TensorHom.lean, line 465.

Stacks 0BYM (naturality in K). For fK : K ⟶ K', Θ ≫ Hom^•(id_M, fK ▷ L) = (fK ▷ Hom^•(M, L)) ≫ Θ.

theorem theta_natural_K (K K' L M : CochainComplex (ModuleCat R) ℤ) (fK : K ⟶ K') :
    theta K L M ≫ HomCxMap M M (K ⊗ L) (K' ⊗ L) (𝟙 M) (fK ▷ L)
      = (fK ▷ HomComplexR R M L) ≫ theta K' L M

Stacks.HomComplex.TensorHomComparison.theta_natural_L, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/HomComplex/TensorHom.lean, line 496.

Stacks 0BYM (naturality in L). For gL : L ⟶ L', Θ ≫ Hom^•(id_M, K ◁ gL) = (K ◁ Hom^•(id_M, gL)) ≫ Θ.

theorem theta_natural_L (K L L' M : CochainComplex (ModuleCat R) ℤ) (gL : L ⟶ L') :
    theta K L M ≫ HomCxMap M M (K ⊗ L) (K ⊗ L') (𝟙 M) (K ◁ gL)
      = (K ◁ HomCxMap M M L L' (𝟙 M) gL) ≫ theta K L' M

Stacks.HomComplex.TensorHomComparison.theta_natural_M, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/HomComplex/TensorHom.lean, line 528.

Stacks 0BYM (naturality in M). For hM : M' ⟶ M, Θ ≫ Hom^•(hM, id_{K ⊗ L}) = (K ◁ Hom^•(hM, id_L)) ≫ Θ.

theorem theta_natural_M (K L M M' : CochainComplex (ModuleCat R) ℤ) (hM : M' ⟶ M) :
    theta K L M ≫ HomCxMap M M' (K ⊗ L) (K ⊗ L) hM (𝟙 (K ⊗ L))
      = (K ◁ HomCxMap M M' L L hM (𝟙 L)) ≫ theta K L M'
Tag 0A62, a lemma

Tag 0A62 in the Stacks Project.

Stacks.HomComplex.TensorHomMap.Phi, a def in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/HomComplex/Basic.lean, line 301.

Stacks 0A62. The morphism of complexes of R-modules Φ_{K,L} : K ⟶ Hom^•(L, Tot(K ⊗_R L)) whose degree-n component sends β ∈ K^n to the cochain y ↦ β ⊗ y.

noncomputable def Phi (K L : CochainComplex (ModuleCat R) ℤ) :
    K ⟶ CochainComplex.HomComplexR R L (K ⊗ L)

Stacks.HomComplex.TensorHomMap.Phi_natural_mixed, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/HomComplex/Basic.lean, line 316.

Stacks 0A62. For f : K ⟶ K' and g : L ⟶ L', postcomposing Φ_{K,L} with Tot(f ⊗ g) = f ⊗ₘ g equals f ≫ Φ_{K',L'} followed by precomposition with g; both send β and y to f(β) ⊗ g(y).

theorem Phi_natural_mixed (K K' L L' : CochainComplex (ModuleCat R) ℤ) (f : K ⟶ K') (g : L ⟶ L') :
    Phi R K L ≫ postcomp R L (K ⊗ L) (K' ⊗ L') (f ⊗ₘ g) =
      f ≫ Phi R K' L' ≫ precomp R L L' (K' ⊗ L') g
Tag 0A60, a lemma

Tag 0A60 in the Stacks Project.

ChainEvaluation.chainEvaluation, a def in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/HomComplex/Evaluation.lean, line 454.

Stacks 0A60. The canonical morphism of complexes Tot(Hom^•(J, I) ⊗ K) ⟶ Hom^•(Hom^•(K, J), I). On homogeneous elements it sends f ⊗ k to the map g ↦ f (g k), with the Koszul signs of the total and Hom complexes.

noncomputable def chainEvaluation
    (K J I : CochainComplex (ModuleCat R) ℤ) :
    (HomComplexR R J I ⊗ K) ⟶ HomComplexR R (HomComplexR R K J) I

ChainEvaluation.chainEvaluation_natural_K, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/HomComplex/Evaluation.lean, line 481.

Stacks 0A60. Evaluation is natural in the complex K being evaluated at: tensoring with f : K ⟶ K' and then evaluating is evaluating and then precomposing the outer Hom complex with f^* : Hom^•(K', J) ⟶ Hom^•(K, J).

theorem chainEvaluation_natural_K
    (K K' J I : CochainComplex (ModuleCat.{u} R) ℤ) (f : K ⟶ K') :
    (HomComplexR R J I ◁ f) ≫ chainEvaluation K' J I =
      chainEvaluation K J I ≫ Stacks.HomComplex.TensorHomMap.precomp R (HomComplexR R K' J)
        (HomComplexR R K J) I (Stacks.HomComplex.TensorHomMap.precomp R K K' J f)

ChainEvaluation.chainEvaluation_natural_J, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/HomComplex/Evaluation.lean, line 548.

Stacks 0A60. Evaluation is natural in the middle complex J: precomposing the inner Hom complex with f : J ⟶ J' on the source corresponds to postcomposing Hom^•(K, J) ⟶ Hom^•(K, J') on the target.

theorem chainEvaluation_natural_J
    (K J J' I : CochainComplex (ModuleCat.{u} R) ℤ) (f : J ⟶ J') :
    (Stacks.HomComplex.TensorHomMap.precomp R J J' I f ▷ K) ≫ chainEvaluation K J I =
      chainEvaluation K J' I ≫ Stacks.HomComplex.TensorHomMap.precomp R (HomComplexR R K J)
        (HomComplexR R K J') I (Stacks.HomComplex.TensorHomMap.postcomp R K J J' f)

ChainEvaluation.chainEvaluation_natural_I, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/HomComplex/Evaluation.lean, line 624.

Stacks 0A60. Evaluation is natural in the target complex I: postcomposing with f : I ⟶ I' commutes with evaluation.

theorem chainEvaluation_natural_I
    (K J I I' : CochainComplex (ModuleCat.{u} R) ℤ) (f : I ⟶ I') :
    (Stacks.HomComplex.TensorHomMap.postcomp R J I I' f ▷ K) ≫ chainEvaluation K J I' =
      chainEvaluation K J I ≫ Stacks.HomComplex.TensorHomMap.postcomp R (HomComplexR R K J) I I' f

ChainEvaluation.chainEvaluation_tmul, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/HomComplex/Evaluation.lean, line 799.

Stacks 0A60. The homogeneous formula for chainEvaluation: the image of φ ⊗ k sends a cochain ψ to φ (ψ k), up to the Koszul sign (-1)^(s + (-a) s) of evaluation.

theorem chainEvaluation_tmul
    (K J I : CochainComplex (ModuleCat.{u} R) ℤ)
    (t s n q p a : ℤ) (hn : t + s = n) (hq : q + n = p)
    (ha : s + q = a) (hp : a + t = p)
    (φ : Cochain J I t) (k : K.X s) (ψ : Cochain K J q) :
    ((((chainEvaluation K J I).f n).hom
      ((ιTensorObj (HomComplexR R J I) K t s n hn).hom (φ ⊗ₜ[R] k))).v
        q p hq).hom ψ =
      (s + (-a) * s).negOnePow •
        (φ.v a p hp).hom ((ψ.v s a ha).hom k)
Tag 0FNE, an equation

Tag 0FNE in the Stacks Project.

CochainComplex.HomComplex.iteratedHomComplex_differential_apply, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/HomComplex/Differentials.lean, line 87.

Stacks 0FNE. The differential of a degree-n cochain in Hom^•(Hom^•(K, L), M), evaluated on f ∈ Hom^{-s-1}(K, L), is the sum of the target, middle and source differential terms, with respective signs 1, -(-1)^n and (-1)^(p+1).

theorem iteratedHomComplex_differential_apply
    {R : Type u} [CommRing R]
    (K L M : CochainComplex (ModuleCat.{v} R) ℤ)
    (n p s : ℤ) (hps : p + s = n)
    (β : Cochain (HomComplexR R K L) M n)
    (f : Cochain K L (-s - 1)) :
    ((δ n (n + 1) β).v (-s - 1) p (by omega)).hom f =
      (M.d (p - 1) p).hom ((β.v (-s - 1) (p - 1) (by omega)).hom f) -
        n.negOnePow •
          ((β.v (-s) p (by omega)).hom
            (f.comp (Cochain.diff L) (by omega))) +
        (p + 1).negOnePow •
          ((β.v (-s) p (by omega)).hom
            ((Cochain.diff K).comp f (by omega)))
Tag 0FNF, an equation

Tag 0FNF in the Stacks Project.

CochainComplex.HomComplex.tensorHomComplex_differential_component, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/HomComplex/Differentials.lean, line 221.

Stacks 0FNF. On the (p, q, r)-component of Tot(Hom^•(L, M) ⊗ K), the total differential is the Hom-complex differential plus (-1)^(p+q) times the differential of K; the Hom-complex differential itself is postcomposition by d_M minus (-1)^(p+q) times precomposition by d_L. Thus the total differential is the three-term expression d_M - (-1)^(p+q) d_L + (-1)^(p+q) d_K.

theorem tensorHomComplex_differential_component
    (L M K : CochainComplex (ModuleCat R) ℤ) (p q r : ℤ) :
    let H := HomComplexR R L M
    let T := HomologicalComplex.tensorObj H K
    ((homComponent R L M p q ▷ K.X r) ≫
          HomologicalComplex.ιTensorObj H K (p + q) r (p + q + r) rfl ≫
          T.d (p + q + r) (p + q + r + 1) =
        (postcomposeDifferential R L M p q ▷ K.X r) ≫
            (homComponent R L M (p + 1) q ▷ K.X r) ≫
            HomologicalComplex.ιTensorObj H K (p + 1 + q) r
              (p + q + r + 1) (by omega) +
          -(p + q).negOnePow •
            ((precomposeDifferential R L M p q ▷ K.X r) ≫
              (homComponent R L M p (q + 1) ▷ K.X r) ≫
              HomologicalComplex.ιTensorObj H K (p + (q + 1)) r
                (p + q + r + 1) (by omega)) +
          (p + q).negOnePow •
            ((homComponent R L M p q ⊗ₘ K.d r (r + 1)) ≫
              HomologicalComplex.ιTensorObj H K (p + q) (r + 1)
                (p + q + r + 1) (by omega)))
Tag 0A61, a remark

Tag 0A61 in the Stacks Project.

ChainEvaluation.homComplex_braiding_sign_eq_evaluation_sign, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/HomComplex/Evaluation.lean, line 1053.

Stacks 0A61. For any Koszul symmetric structure on cochain complexes — one whose braiding restricts on the summand A^p ⊗ B^q to (-1)^{pq} times the symmetry of ModuleCat R — the braiding on the summand K^r ⊗ Hom^{a-r}(K, J) carries the sign (-1)^{r + (-a) r} that occurs in the direct construction of evaluation into an iterated Hom complex (chainEvaluation_tmul). So the monoidal construction of the map of Stacks 0A60 and the direct one use the same sign.

theorem homComplex_braiding_sign_eq_evaluation_sign
    (s : SymmetricCategory (CochainComplex (ModuleCat.{u} R) ℤ))
    (hKoszul : ∀ (A B : CochainComplex (ModuleCat.{u} R) ℤ) (p q n : ℤ) (h : p + q = n),
      ιTensorObj A B p q n h ≫ (s.toBraidedCategory.braiding A B).hom.f n =
        ((p * q).negOnePow : ℤˣ) •
          ((β_ (A.X p) (B.X q)).hom ≫
            ιTensorObj B A q p n (by simpa [add_comm] using h)))
    (K J : CochainComplex (ModuleCat.{u} R) ℤ) (a r : ℤ) :
    ιTensorObj K (HomComplexR R K J) r (a - r) a (by omega) ≫
        (s.toBraidedCategory.braiding K (HomComplexR R K J)).hom.f a =
      ((r + (-a) * r).negOnePow : ℤˣ) •
        ((β_ (K.X r) ((HomComplexR R K J).X (a - r))).hom ≫
          ιTensorObj (HomComplexR R K J) K (a - r) r a (by omega))
Sources

Section15.74 Sign rules#

Section 15.74 of the Stacks Project, Tag 0FNG. 7 tags here are carried by 9 declarations of the repository (all in StacksFrontier), quoted below from AxiomMath/Stacks at commit 5ed82d14.

Tag 0FNH, an item

Tag 0FNH in the Stacks Project.

CochainComplex.HomComplex.tensorShiftIso, a def in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/HomComplex/ShiftTensor.lean, line 77. The attribute's comment: “canonical isomorphism”.

Stacks 0FNH. The canonical isomorphism from the shift by a + b of the tensor product M ⊗ N to the tensor product M[a] ⊗ N[b] of the shifts.

It is the inverse of the composite that removes the shift from the first factor, then from the second factor, and finally recombines the two shifts; see CochainComplex.HomComplex.tensorShiftIso_hom_ι_and_naturality for the homogeneous formula that pins it down.

noncomputable def tensorShiftIso (M N : CochainComplex (ModuleCat R) ℤ) (a b : ℤ) :
    (M ⊗ N)⟦a + b⟧ ≅ M⟦a⟧ ⊗ N⟦b⟧

CochainComplex.HomComplex.tensorShiftHom, a def in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/HomComplex/ShiftTensor.lean, line 90. The attribute's comment: “corresponding shifted map”.

Stacks 0FNH. The morphism corresponding to CochainComplex.HomComplex.tensorShiftIso: its source is the unshifted tensor product and its target is the tensor product of the shifts, shifted back by -a - b.

noncomputable def tensorShiftHom (M N : CochainComplex (ModuleCat R) ℤ) (a b : ℤ) :
    M ⊗ N ⟶ (M⟦a⟧ ⊗ N⟦b⟧)⟦-a - b⟧

CochainComplex.HomComplex.tensorShiftIso_hom_ι_and_naturality, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/HomComplex/ShiftTensor.lean, line 225. The attribute's comment: “homogeneous sign formula and naturality”.

Stacks 0FNH. On the summand M^p ⊗ N^q, the simultaneous-shift isomorphism CochainComplex.HomComplex.tensorShiftIso is multiplication by the Koszul sign (-1)^(p*b) followed by the canonical inclusion of M[a]^{p-a} ⊗ N[b]^{q-b} into the shifted total complex. Since the homogeneous summands generate, this determines the isomorphism. It is moreover natural in both complexes.

theorem tensorShiftIso_hom_ι_and_naturality
    (M N : CochainComplex (ModuleCat R) ℤ) (a b : ℤ) :
    (∀ (p q : ℤ),
      HomologicalComplex.ιTensorObj M N p q (p + q) rfl ≫
          (CochainComplex.shiftFunctorObjXIso (M ⊗ N) (a + b)
            (p + q - a - b) (p + q) (by omega)).inv ≫
          (tensorShiftIso M N a b).hom.f (p + q - a - b) =
        ((p * b).negOnePow : ℤˣ) •
          ((CochainComplex.shiftFunctorObjXIso M a (p - a) p (by omega)).inv ⊗ₘ
              (CochainComplex.shiftFunctorObjXIso N b (q - b) q (by omega)).inv) ≫
            HomologicalComplex.ιTensorObj (M⟦a⟧) (N⟦b⟧)
              (p - a) (q - b) (p + q - a - b) (by omega)) ∧
      (∀ (M' N' : CochainComplex (ModuleCat R) ℤ) (f : M ⟶ M') (g : N ⟶ N'),
        (HomologicalComplex.tensorHom f g)⟦a + b⟧' ≫
            (tensorShiftIso M' N' a b).hom =
          (tensorShiftIso M N a b).hom ≫
            HomologicalComplex.tensorHom (f⟦a⟧') (g⟦b⟧'))
Tag 0GWR, an item

Tag 0GWR in the Stacks Project.

TotalTensorComplex.cochainComplex_symmetricMonoidalCategory, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/TensorComplex/Monoidal.lean, line 115.

The category of cochain complexes of modules over a commutative ring, with tensor product given by the total complex of the degreewise tensor product, is symmetric monoidal. On the summand of bidegree (p, q), its braiding is the ordinary symmetry of tensor products multiplied by the Koszul sign (-1)^(p*q).

public theorem cochainComplex_symmetricMonoidalCategory (R : Type u) [CommRing R] :
    ∃ s : SymmetricCategory (CochainComplex (ModuleCat R) ℤ),
      ∀ (K L : CochainComplex (ModuleCat R) ℤ) (p q n : ℤ) (h : p + q = n),
        HomologicalComplex.ιTensorObj K L p q n h ≫
            (s.toBraidedCategory.braiding K L).hom.f n =
          ((p * q).negOnePow : ℤˣ) •
            ((β_ (K.X p) (L.X q)).hom ≫
              HomologicalComplex.ιTensorObj L K q p n (by simpa [add_comm] using h))
Tag 0FNJ, a lemma

Tag 0FNJ in the Stacks Project.

ModuleCat.LeftDual.finite_projective_and_linearDual_equiv_of_exactPairing, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Algebra/Category/ModuleCat/LeftDual.lean, line 254.

If N is a left dual of M in the monoidal category of R-modules, then M and N are finite projective. Moreover, contraction with the coevaluation identifies M⁺ with N, and under this identification the given evaluation map sends n ⊗ m to the value at m of the functional corresponding to n.

theorem finite_projective_and_linearDual_equiv_of_exactPairing :
    Module.Finite R M ∧ Module.Projective R M ∧
      Module.Finite R N ∧ Module.Projective R N ∧
        ∃ e : Module.Dual R M ≃ₗ[R] N,
          e.toLinearMap = linearDualToLeftDual R M N ∧
            ∀ (n : N) (m : M),
              (ε_ (ModuleCat.of R M) (ModuleCat.of R N)).hom (n ⊗ₜ[R] m) = e.symm n m
Tag 0FNK, a lemma

Tag 0FNK in the Stacks Project.

CochainComplex.LeftDual.exactPairing_iff_bounded_finiteProjective, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/LeftDual.lean, line 1127.

A complex of modules and a chosen left dual are bounded complexes of finite projective modules, and the pairing is the termwise linear-dual pairing with signed transpose differential. Conversely, every bounded complex of finite projective modules admits exactly this construction as a left dual.

theorem exactPairing_iff_bounded_finiteProjective (R : Type u) [CommRing R] :
    (∀ (M N : CochainComplex (ModuleCat R) ℤ) (p : ExactPairing M N),
      (∃ a b : ℤ, M.IsStrictlyGE a ∧ M.IsStrictlyLE b) ∧
        (∃ a b : ℤ, N.IsStrictlyGE a ∧ N.IsStrictlyLE b) ∧
        (∀ n : ℤ, Module.Finite R (M.X n) ∧ Module.Projective R (M.X n)) ∧
        (∀ n : ℤ, Module.Finite R (N.X n) ∧ Module.Projective R (N.X n)) ∧
        IsLinearDualPairing R M N p) ∧
      (∀ M : CochainComplex (ModuleCat R) ℤ,
        (∃ a b : ℤ, M.IsStrictlyGE a ∧ M.IsStrictlyLE b) →
        (∀ n : ℤ, Module.Finite R (M.X n) ∧ Module.Projective R (M.X n)) →
        ∃ (N : CochainComplex (ModuleCat R) ℤ) (p : ExactPairing M N),
          (∃ a b : ℤ, N.IsStrictlyGE a ∧ N.IsStrictlyLE b) ∧
            IsLinearDualPairing R M N p)
Tag 0FNL, an item

Tag 0FNL in the Stacks Project.

CochainComplex.LeftDual.tensorLeftDualIsoHomComplex, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/LeftDual.lean, line 1261.

Stacks 0FNL. For a complex M with left dual N, the canonical sign-free tensor–Hom morphism is a natural isomorphism K ⊗ N ≅ Hom^•(M, K). On the summand K^p ⊗ N^q, its component in Hom(M^{-q}, K^p) sends x ⊗ y to the map m ↦ ε(y ⊗ m) • x.

theorem tensorLeftDualIsoHomComplex
    (M N : CochainComplex (ModuleCat R) ℤ) (pairing : ExactPairing M N) :
    letI := pairing
    ∃ e : ∀ K : CochainComplex (ModuleCat R) ℤ,
        K ⊗ N ≅ HomComplexR R M K,
      (∀ (K : CochainComplex (ModuleCat R) ℤ) (n p q : ℤ) (hpq : p + q = n)
          (x : K.X p) (y : N.X q) (m : M.X (-q)),
        (((((e K).hom.f n).hom
            ((ιTensorObj K N p q n hpq).hom (x ⊗ₜ[R] y))) : Cochain M K n).v
              (-q) p (by omega)).hom m =
          ((ιTensorObj N M q (-q) 0 (by omega) ≫ (ε_ M N).f 0 ≫
              (singleObjXSelf (ComplexShape.up ℤ) 0 (𝟙_ (ModuleCat R))).hom).hom
            (y ⊗ₜ[R] m)) • x) ∧
        ∀ (K L : CochainComplex (ModuleCat R) ℤ) (f : K ⟶ L),
          (e K).hom ≫ Stacks.HomComplex.TensorHomComparison.HomCxMap M M K L (𝟙 M) f =
            (f ▷ N) ≫ (e L).hom
Tag 0FNM, an item

Tag 0FNM in the Stacks Project.

CochainComplex.HomComplex.evaluationToDoubleHom_apply, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/HomComplex/Differentials.lean, line 501.

Stacks 0FNM. The canonical evaluation into the double Hom complex sends homogeneous x ∈ K^n and f ∈ Hom^m(K, M) to (-1)^(nm) f(x). It is natural in K and dinatural in the coefficient complex M.

theorem evaluationToDoubleHom_apply :
    (∀ (K M : CochainComplex (ModuleCat.{u} R) ℤ) (n m : ℤ)
        (x : K.X n) (f : Cochain K M m),
      ((((evaluationToDoubleHom K M).f n).hom x).v m (m + n) (by omega)).hom f =
        (n * m).negOnePow • (f.v n (m + n) (by omega)).hom x) ∧
    (∀ (K K' M : CochainComplex (ModuleCat.{u} R) ℤ) (g : K ⟶ K'),
      evaluationToDoubleHom K M ≫
          Stacks.HomComplex.TensorHomMap.precomp R (HomComplexR R K' M) (HomComplexR R K M) M
            (Stacks.HomComplex.TensorHomMap.precomp R K K' M g) =
        g ≫ evaluationToDoubleHom K' M) ∧
    (∀ (K M M' : CochainComplex (ModuleCat.{u} R) ℤ) (g : M ⟶ M'),
      evaluationToDoubleHom K M ≫
          Stacks.HomComplex.TensorHomMap.postcomp R (HomComplexR R K M) M M' g =
        evaluationToDoubleHom K M' ≫
          Stacks.HomComplex.TensorHomMap.precomp R (HomComplexR R K M) (HomComplexR R K M') M'
            (Stacks.HomComplex.TensorHomMap.postcomp R K M M' g))
Tag 0FNN, an item

Tag 0FNN in the Stacks Project.

CochainComplex.HomComplex.homComplexShiftIso, a def in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/HomComplex/ShiftHom.lean, line 191.

Stacks 0FNN. The canonical identification Hom^•(M, K)[a - b] ≅ Hom^•(M[b], K[a]).

After shifting the identification back to a map Hom^•(M, K) ⟶ Hom^•(M[b], K[a])[b - a], its degree-n component is the sign (-1)^(n b) times the evident reindexing. The final conjunct is the homogeneous differential calculation: before inserting this degree-dependent sign, the target differential is (-1)^b times the reindexed source differential.

noncomputable def homComplexShiftIso (R : Type*) [CommRing R]
    (M K : CochainComplex (ModuleCat R) ℤ) (a b : ℤ) :
    { e : (CochainComplex.HomComplexR R M K)⟦a - b⟧ ≅
        CochainComplex.HomComplexR R (M⟦b⟧) (K⟦a⟧) //
      let H := CochainComplex.HomComplexR R M K
      let T := CochainComplex.HomComplexR R (M⟦b⟧) (K⟦a⟧)
      let reindex : ∀ n : ℤ, Cochain M K n → Cochain (M⟦b⟧) (K⟦a⟧) (n + (b - a)) :=
        fun n z ↦ Cochain.mk fun p q _ ↦
          (M.shiftFunctorObjXIso b p (p + b) rfl).hom ≫
            z.v (p + b) (q + a) (by omega) ≫
            (K.shiftFunctorObjXIso a q (q + a) rfl).inv
      let g : H ⟶ T⟦b - a⟧ :=
        (shiftFunctorCompIsoId _ (a - b) (b - a) (by omega)).inv.app H ≫ e.hom⟦b - a⟧'
      (∀ (n : ℤ) (z : Cochain M K n),
        (T.shiftFunctorObjXIso (b - a) n (n + (b - a)) rfl).hom.hom ((g.f n).hom z) =
          (n * b).negOnePow • reindex n z) ∧
      (∀ (n : ℤ) (z : Cochain M K n),
        (T.shiftFunctorObjXIso (b - a) (n + 1) (n + 1 + (b - a)) rfl).hom.hom
            (((T⟦b - a⟧).d n (n + 1)).hom
              ((T.shiftFunctorObjXIso (b - a) n (n + (b - a)) rfl).inv.hom
                (reindex n z))) =
          b.negOnePow • reindex (n + 1) (δ n (n + 1) z)) }
Sources

Section15.75 Derived hom#

Section 15.75 of the Stacks Project, Tag 0A5W. 8 tags here are carried by 18 declarations of the repository (all in StacksFrontier), quoted below from AxiomMath/Stacks at commit 5ed82d14.

Tag 0A63, an equation

Tag 0A63 in the Stacks Project.

StacksDraft.DerivedHom.homInternalHomEquiv, a def in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/HomComplex/DerivedAdjunction.lean, line 2909.

Stacks 0A63. The canonical characterization equation in D(R): Hom(K, RHom(L, M)) ≃+ Hom(K ⊗ᴸ L, M). The bifunctors and the equivalence are transported from the fixed K-flat/K-injective construction, with compatibility given by derivedTensorULiftIso and derivedHomULiftIso. No adjunction or scalar equivalence is supplied as a parameter. The ring, module enlargement, and derived-morphism universes are independent.

public noncomputable def homInternalHomEquiv {R : Type u} [CommRing R]
    [HasDerivedCategory.{w} (ModuleCat.{max u v} R)]
    (K L M : DerivedCategory (ModuleCat.{max u v} R)) :
    (K ⟶ (derivedHomAdjunctionOverRing R).hom.obj (Opposite.op L, M)) ≃+
      ((derivedHomAdjunctionOverRing R).tensor.obj (K, L) ⟶ M)
Tag 0A64, an equation

Tag 0A64 in the Stacks Project.

homComplex_of_isKInjective_represents_RHom, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/HomComplex/RHom.lean, line 272.

Stacks 0A64. If I is K-injective, then the degree-n cohomology of the Hom complex Hom^•(L, I) is canonically identified with the morphisms L ⟶ I⟦n⟧ in the derived category; equivalently, when I represents M, this is Hⁿ(RHom(L, M)) = Hom(L, M⟦n⟧).

theorem homComplex_of_isKInjective_represents_RHom (L I : CochainComplex C ℤ) [I.IsKInjective]
    (n : ℤ) :
    Function.Bijective
      (fun (c : CochainComplex.HomComplex.CohomologyClass L I n) ↦
        DerivedCategory.Qh.map
          (CochainComplex.HomComplex.CohomologyClass.homAddEquiv c))
Tag 0A65, a lemma

Tag 0A65 in the Stacks Project.

StacksDraft.DerivedHom.derivedHomCurrying, a def in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/HomComplex/DerivedAdjunction.lean, line 3927. References: SGA 6 I (7.4), “affine case, 1st iso”; SGA 7 VIII (1.1), “(1.1.2) in D(R)”.

Stacks 0A65. Derived Hom satisfies the canonical currying isomorphism RHom(K, RHom(L, M)) ≅ RHom(K ⊗ᴸ L, M), functorially in K, L, and M. On K-flat/K-injective representatives this is the Hom-complex currying map of Stacks 0A5Y. On degree-zero cohomology this is the derived tensor--Hom equivalence of Stacks 0A63.

public noncomputable def derivedHomCurrying {R : Type u} [CommRing R]
    [HasDerivedCategory.{v} (ModuleCat.{u} R)] :
    DerivedHomCurrying (derivedHomAdjunction (R := R))
Tag 0A66, a lemma

Tag 0A66 in the Stacks Project.

StacksDraft.DerivedHom.projectiveHomComparison, a def in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/HomComplex/ProjectiveRHom.lean, line 387.

Stacks 0A66. A bounded-above complex of projective modules computes the derived internal Hom against every target complex. The comparison is natural in both variables, recovers the defining K-injective model, and hence is the comparison induced by a K-injective resolution in the proof of the source lemma.

def projectiveHomComparison {R : Type u} [CommRing R]
    [HasDerivedCategory.{w} (ModuleCat.{u} R)] : ProjectiveHomComparison R

StacksDraft.DerivedHom.projectiveHomComparisonULift, an abbrev in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/HomComplex/ProjectiveRHom.lean, line 403.

The comparison of Stacks 0A66 in an independently chosen module universe. The lifted ring is canonically isomorphic to R, and retains all naturality and model comparisons.

abbrev projectiveHomComparisonULift {R : Type u} [CommRing R]
    [HasDerivedCategory.{w} (ModuleCat.{max u v} (ULift.{v} R))] :
    ProjectiveHomComparison (ULift.{v} R)

cohomologyClassRHomAddEquiv, a def in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/HomComplex/RHom.lean, line 293.

Stacks 0A66. Let P be a bounded above complex of projective R-modules and L a complex of R-modules. The degree-n cohomology classes of Hom^•(P, L) are canonically isomorphic as abelian groups to Hom_{D(R)}(P, L⟦n⟧), the isomorphism sending a class to the image under DerivedCategory.Qh of the corresponding morphism P ⟶ L⟦n⟧ in the homotopy category. This is the assertion that Hom^•(P, L) represents RHom_R(P, L).

noncomputable def cohomologyClassRHomAddEquiv (P L : CochainComplex (ModuleCat R) ℤ) (d n : ℤ)
    [P.IsStrictlyLE d] [∀ i, CategoryTheory.Projective (P.X i)] :
    CochainComplex.HomComplex.CohomologyClass P L n ≃+
      (DerivedCategory.Qh.obj
          ((HomotopyCategory.quotient (ModuleCat R) (ComplexShape.up ℤ)).obj P) ⟶
        DerivedCategory.Qh.obj
          ((HomotopyCategory.quotient (ModuleCat R) (ComplexShape.up ℤ)).obj (L⟦n⟧)))

homComplexHomologyRHomAddEquiv, a def in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/HomComplex/RHom.lean, line 319.

Stacks 0A66. The comparison isomorphism of [stacks 0A66] read on the homology of the Hom complex: for P a bounded above complex of projective R-modules, Hⁿ(Hom^•(P, L)) ≃+ Hom_{D(R)}(P, L⟦n⟧), so Hom^•(P, L) represents RHom_R(P, L).

noncomputable def homComplexHomologyRHomAddEquiv (P L : CochainComplex (ModuleCat R) ℤ)
    (d n : ℤ) [P.IsStrictlyLE d] [∀ i, CategoryTheory.Projective (P.X i)] :
    (P.HomComplex L).homology n ≃+
      (DerivedCategory.Qh.obj
          ((HomotopyCategory.quotient (ModuleCat R) (ComplexShape.up ℤ)).obj P) ⟶
        DerivedCategory.Qh.obj
          ((HomotopyCategory.quotient (ModuleCat R) (ComplexShape.up ℤ)).obj (L⟦n⟧)))

homComplex_represents_RHom, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/HomComplex/RHom.lean, line 353. References: SGA 4 XVII (5.5.6.3), “more general”; SGA 4½ Rapport (4.3), “more general”; SGA 5 IIIB (5.7), “partial”; SGA 6 I (7.1.1), “partial”.

Stacks 0A66. Let P be a bounded above complex of projective R-modules and L a complex of R-modules. For every n : ℤ, the map from degree-n cohomology classes of Hom^•(P, L) to Hom_{D(R)}(P, L⟦n⟧), sending a class to the image under DerivedCategory.Qh of the corresponding morphism P ⟶ L⟦n⟧ in the homotopy category, is bijective; that is, Hom^•(P, L) represents RHom_R(P, L).

This is the pointwise shadow of cohomologyClassRHomAddEquiv, from which it is derived.

theorem homComplex_represents_RHom (P L : CochainComplex (ModuleCat R) ℤ) (d n : ℤ)
    [P.IsStrictlyLE d] [∀ i, CategoryTheory.Projective (P.X i)] :
    Function.Bijective
      (fun (c : CochainComplex.HomComplex.CohomologyClass P L n) =>
        DerivedCategory.Qh.map (CochainComplex.HomComplex.CohomologyClass.homAddEquiv c))

cohomologyClassRHomAddEquiv_naturality_left, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/HomComplex/RHom.lean, line 366.

Stacks 0A66. Naturality of the comparison isomorphism in the first variable: for f : P' ⟶ P a morphism of bounded above complexes of projectives, the square formed by cohomologyClassRHomAddEquiv at P and at P', precomposition by f on cohomology classes, and precomposition by the image of f in D(R) commutes. Thus Hom^•(-, L) represents RHom_R(-, L) contravariantly.

theorem cohomologyClassRHomAddEquiv_naturality_left (P P' L : CochainComplex (ModuleCat R) ℤ)
    (f : P' ⟶ P) (d d' n : ℤ) [P.IsStrictlyLE d] [∀ i, CategoryTheory.Projective (P.X i)]
    [P'.IsStrictlyLE d'] [∀ i, CategoryTheory.Projective (P'.X i)]
    (c : CochainComplex.HomComplex.CohomologyClass P L n) :
    cohomologyClassRHomAddEquiv P' L d' n (cohomologyClassPrecomp f L n c) =
      DerivedCategory.Qh.map
          ((HomotopyCategory.quotient (ModuleCat R) (ComplexShape.up ℤ)).map f) ≫
        cohomologyClassRHomAddEquiv P L d n c

cohomologyClassRHomAddEquiv_naturality_right, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/HomComplex/RHom.lean, line 384.

Stacks 0A66. Naturality of the comparison isomorphism in the second variable: for g : L ⟶ L' the square formed by cohomologyClassRHomAddEquiv at L and at L', postcomposition by g on cohomology classes, and postcomposition by the image of g⟦n⟧' in D(R) commutes. Thus Hom^•(P, -) represents RHom_R(P, -) covariantly.

theorem cohomologyClassRHomAddEquiv_naturality_right (P L L' : CochainComplex (ModuleCat R) ℤ)
    (g : L ⟶ L') (d n : ℤ) [P.IsStrictlyLE d] [∀ i, CategoryTheory.Projective (P.X i)]
    (c : CochainComplex.HomComplex.CohomologyClass P L n) :
    cohomologyClassRHomAddEquiv P L' d n (cohomologyClassPostcomp P g n c) =
      cohomologyClassRHomAddEquiv P L d n c ≫
        DerivedCategory.Qh.map
          ((HomotopyCategory.quotient (ModuleCat R) (ComplexShape.up ℤ)).map (g⟦n⟧'))

homComplexRHom_isKInjective_model_comm, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/HomComplex/RHom.lean, line 402.

Stacks 0A66. Compatibility of the two routes to RHom: for g : L ⟶ I with I K-injective, the square whose left edge is the comparison of [stacks 0A66] for (P, L), whose right edge is the comparison of [stacks 0A64] for (P, I), whose top edge is the map on cohomology classes induced by g, and whose bottom edge is postcomposition with the image of g⟦n⟧' in D(R), commutes. No quasi-isomorphism hypothesis is needed for commutativity.

theorem homComplexRHom_isKInjective_model_comm (P L I : CochainComplex (ModuleCat R) ℤ)
    (g : L ⟶ I) [I.IsKInjective] (d n : ℤ) [P.IsStrictlyLE d]
    [∀ i, CategoryTheory.Projective (P.X i)]
    (c : CochainComplex.HomComplex.CohomologyClass P L n) :
    cohomologyClassRHomAddEquivOfIsKInjective P I n (cohomologyClassPostcomp P g n c) =
      cohomologyClassRHomAddEquiv P L d n c ≫
        DerivedCategory.Qh.map
          ((HomotopyCategory.quotient (ModuleCat R) (ComplexShape.up ℤ)).map (g⟦n⟧'))

homComplexRHom_eq_isKInjective_model_route, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/HomComplex/RHom.lean, line 419.

Stacks 0A66. The comparison of [stacks 0A66] is computed by the comparison of [stacks 0A64] through a K-injective model: if g : L ⟶ I is a quasi-isomorphism with I K-injective, then the bottom edge of the square of homComplexRHom_isKInjective_model_comm is invertible, and the [stacks 0A66] comparison for (P, L) is the [stacks 0A64] comparison for (P, I) applied to the transported class, followed by that inverse. So the two representability statements agree.

theorem homComplexRHom_eq_isKInjective_model_route (P L I : CochainComplex (ModuleCat R) ℤ)
    (g : L ⟶ I) [I.IsKInjective] [QuasiIso g] (d n : ℤ) [P.IsStrictlyLE d]
    [∀ i, CategoryTheory.Projective (P.X i)]
    (c : CochainComplex.HomComplex.CohomologyClass P L n) :
    cohomologyClassRHomAddEquiv P L d n c =
      cohomologyClassRHomAddEquivOfIsKInjective P I n (cohomologyClassPostcomp P g n c) ≫
        CategoryTheory.inv (DerivedCategory.Qh.map
          ((HomotopyCategory.quotient (ModuleCat R) (ComplexShape.up ℤ)).map (g⟦n⟧')))

Dualizing.homComplexRHomologyLinearEquiv, a def in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/RingTheory/Dualizing/RelativeBaseChangeAssemblyLinear.lean, line 99.

[stacks 0A66] read on the derived category, S-linearly. For P a bounded above complex of projective S-modules and L any complex, the degree-n cohomology of the S-linear Hom complex Hom^•_S(P, L) is the module of morphisms P ⟶ L⟦n⟧ in D(S), as S-modules.

This is Dualizing.homComplexRHomologyAddEquiv with the S-action checked. The comparison runs through the cohomology classes of the Hom complex of the underlying abelian groups, where no S-action is available, so the equivariance is read on representatives: a class in H^n(Hom^•_S(P, L)) is the class of a cocycle (Dualizing.LocalDuality.homComplexRHomologyAddEquiv_cyclesMk), the S-action on H^n is the action on cocycles, and the passage from a cocycle to a morphism in the homotopy category is S-linear because CochainComplex.HomComplex.Cocycle.equivHomShift is and because HomotopyCategory.quotient and DerivedCategory.Qh are S-linear functors.

def homComplexRHomologyLinearEquiv (P L : CochainComplex (ModuleCat.{u} S) ℤ) (d n : ℤ)
    [P.IsStrictlyLE d] [∀ i, Projective (P.X i)] :
    ((CochainComplex.HomComplexR S P L).homology n : Type u) ≃ₗ[S]
      (DerivedCategory.Q.obj P ⟶
        (CategoryTheory.shiftFunctor (DerivedCategory (ModuleCat.{u} S)) n).obj
          (DerivedCategory.Q.obj L))
Tag 0A67, a lemma

Tag 0A67 in the Stacks Project.

StacksDraft.DerivedHom.exists_evaluationToIteratedDerivedHom, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/HomComplex/DerivedAdjunction.lean, line 4019.

Stacks 0A67. There is a canonical morphism RHom_R(L, M) ⊗ᴸ_R K ⟶ RHom_R(RHom_R(K, L), M) for arbitrary objects of D(R), natural in all three objects. On K-flat and K-injective representatives it is induced by the chain-level evaluation map of Stacks Tag 0A60 through the standard comparison isomorphisms.

public theorem exists_evaluationToIteratedDerivedHom :
    let D := derivedHomAdjunction (R := R)
    let e₀ := ChainEvaluation.chainEvaluation
    ∃ e : ∀ (K L M : DerivedCategory (ModuleCat R)),
        D.tensor.obj (D.hom.obj (Opposite.op L, M), K) ⟶
          D.hom.obj (Opposite.op (D.hom.obj (Opposite.op K, L)), M),
      (∀ {K K' L M : DerivedCategory (ModuleCat R)} (f : K ⟶ K'),
        D.tensor.map (𝟙 (D.hom.obj (Opposite.op L, M)), f) ≫ e K' L M =
          e K L M ≫ D.hom.map
            ((D.hom.map (f.op, 𝟙 L)).op, 𝟙 M)) ∧
      (∀ {K L L' M : DerivedCategory (ModuleCat R)} (f : L ⟶ L'),
        D.tensor.map (D.hom.map (f.op, 𝟙 M), 𝟙 K) ≫ e K L M =
          e K L' M ≫ D.hom.map
            ((D.hom.map (𝟙 (Opposite.op K), f)).op, 𝟙 M)) ∧
      (∀ {K L M M' : DerivedCategory (ModuleCat R)} (f : M ⟶ M'),
        D.tensor.map (D.hom.map (𝟙 (Opposite.op L), f), 𝟙 K) ≫ e K L M' =
          e K L M ≫ D.hom.map
            (𝟙 (Opposite.op (D.hom.obj (Opposite.op K, L))), f)) ∧
      (∀ (K L M : CochainComplex (ModuleCat R) ℤ) (hK : K.KFlat)
          [L.IsKInjective] [M.IsKInjective],
        D.tensor.map ((D.homIso L M).hom, 𝟙 (DerivedCategory.Q.obj K)) ≫
              (D.tensorIso (HomComplexR R L M) K hK).hom ≫
              DerivedCategory.Q.map (e₀ K L M) ≫
              (D.homIso (HomComplexR R K L) M).inv ≫
              D.hom.map ((D.homIso K L).hom.op, 𝟙 (DerivedCategory.Q.obj M)) =
            e (DerivedCategory.Q.obj K) (DerivedCategory.Q.obj L)
              (DerivedCategory.Q.obj M))
Tag 0A8J, a lemma

Tag 0A8J in the Stacks Project.

StacksDraft.DerivedHom.derivedInternalHomComposition_natural, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/HomComplex/DerivedComposition.lean, line 48.

Stacks 0A8J. The canonical composition morphisms RHom(L, M) ⊗ᴸ RHom(K, L) ⟶ RHom(K, M) in D(R) are contravariantly natural in K, dinatural in L, and covariantly natural in M.

theorem derivedInternalHomComposition_natural
    (R : Type u) [CommRing R] [HasDerivedCategory (ModuleCat R)] :
    (∀ {K K' L M : DerivedCategory (ModuleCat R)} (f : K' ⟶ K),
      (DerivedInternalHom.Model.tensor R).map
            (𝟙 ((DerivedInternalHom.Model.hom R).obj (Opposite.op L, M)),
              (DerivedInternalHom.Model.hom R).map (f.op, 𝟙 L)) ≫
          DerivedInternalHom.Model.composition K' L M =
        DerivedInternalHom.Model.composition K L M ≫
          (DerivedInternalHom.Model.hom R).map (f.op, 𝟙 M)) ∧
    (∀ {K L L' M : DerivedCategory (ModuleCat R)} (f : L' ⟶ L),
      (DerivedInternalHom.Model.tensor R).map
            ((DerivedInternalHom.Model.hom R).map (f.op, 𝟙 M),
              𝟙 ((DerivedInternalHom.Model.hom R).obj (Opposite.op K, L'))) ≫
          DerivedInternalHom.Model.composition K L' M =
        (DerivedInternalHom.Model.tensor R).map
            ((𝟙 ((DerivedInternalHom.Model.hom R).obj (Opposite.op L, M)),
              ((DerivedInternalHom.Model.hom R).map (𝟙 (Opposite.op K), f) :
                (DerivedInternalHom.Model.hom R).obj (Opposite.op K, L') ⟶
                  (DerivedInternalHom.Model.hom R).obj (Opposite.op K, L))) :
              ((DerivedInternalHom.Model.hom R).obj (Opposite.op L, M),
                (DerivedInternalHom.Model.hom R).obj (Opposite.op K, L')) ⟶
              ((DerivedInternalHom.Model.hom R).obj (Opposite.op L, M),
                (DerivedInternalHom.Model.hom R).obj (Opposite.op K, L))) ≫
          DerivedInternalHom.Model.composition K L M) ∧
    (∀ {K L M M' : DerivedCategory (ModuleCat R)} (f : M ⟶ M'),
      (DerivedInternalHom.Model.tensor R).map
            ((DerivedInternalHom.Model.hom R).map (𝟙 (Opposite.op L), f),
              𝟙 ((DerivedInternalHom.Model.hom R).obj (Opposite.op K, L))) ≫
          DerivedInternalHom.Model.composition K L M' =
        DerivedInternalHom.Model.composition K L M ≫
          (DerivedInternalHom.Model.hom R).map (𝟙 (Opposite.op K), f))
Tag 0BYN, a lemma

Tag 0BYN in the Stacks Project.

StacksDraft.DerivedHom.derivedTensorHomDiagonal, an alias in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/HomComplex/DerivedTensorHom.lean, line 66.

Stacks 0BYN. The canonical morphism K ⊗ᴸ RHom(M, L) ⟶ RHom(M, K ⊗ᴸ L) in the derived category.

alias derivedTensorHomDiagonal

StacksDraft.DerivedHom.derivedTensorHomDiagonal_natural, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/HomComplex/DerivedTensorHom.lean, line 71.

Stacks 0BYN. The derived tensor--Hom diagonal is covariantly natural in K and L and contravariantly natural in M.

theorem derivedTensorHomDiagonal_natural :
    (∀ {K K' L M : DerivedCategory (ModuleCat R)} (f : K ⟶ K'),
      (DerivedInternalHom.Model.tensor R).map
          (f, 𝟙 ((DerivedInternalHom.Model.hom R).obj (Opposite.op M, L))) ≫
          derivedTensorHomDiagonal K' L M =
        derivedTensorHomDiagonal K L M ≫
          (DerivedInternalHom.Model.hom R).map
            (𝟙 (Opposite.op M), (DerivedInternalHom.Model.tensor R).map (f, 𝟙 L))) ∧
    (∀ {K L L' M : DerivedCategory (ModuleCat R)} (f : L ⟶ L'),
      (DerivedInternalHom.Model.tensor R).map
          (𝟙 K, (DerivedInternalHom.Model.hom R).map (𝟙 (Opposite.op M), f)) ≫
          derivedTensorHomDiagonal K L' M =
        derivedTensorHomDiagonal K L M ≫
          (DerivedInternalHom.Model.hom R).map
            (𝟙 (Opposite.op M), (DerivedInternalHom.Model.tensor R).map (𝟙 K, f))) ∧
    (∀ {K L M M' : DerivedCategory (ModuleCat R)} (f : M' ⟶ M),
      (DerivedInternalHom.Model.tensor R).map
          (𝟙 K, (DerivedInternalHom.Model.hom R).map (f.op, 𝟙 L)) ≫
          derivedTensorHomDiagonal K L M' =
        derivedTensorHomDiagonal K L M ≫
          (DerivedInternalHom.Model.hom R).map
            (f.op, 𝟙 ((DerivedInternalHom.Model.tensor R).obj (K, L))))
Tag 0A6B, a lemma

Tag 0A6B in the Stacks Project.

StacksDraft.DerivedHom.derivedTensorHomCoevaluation_natural, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/HomComplex/DerivedTensorHom.lean, line 100.

Stacks 0A6B. The canonical morphism K ⟶ RHom(L, K ⊗ᴸ L) is the transpose of the identity on K ⊗ᴸ L; it is covariantly natural in K and dinatural in L.

theorem derivedTensorHomCoevaluation_natural :
    (∀ (K L : DerivedCategory (ModuleCat R)),
      DerivedInternalHom.Model.homEquiv K L ((DerivedInternalHom.Model.tensor R).obj (K, L))
          (DerivedInternalHom.Model.coevaluation K L) =
        𝟙 ((DerivedInternalHom.Model.tensor R).obj (K, L))) ∧
    (∀ {K K' L : DerivedCategory (ModuleCat R)} (f : K ⟶ K'),
      f ≫ DerivedInternalHom.Model.coevaluation K' L =
        DerivedInternalHom.Model.coevaluation K L ≫
          (DerivedInternalHom.Model.hom R).map
            (𝟙 (Opposite.op L), (DerivedInternalHom.Model.tensor R).map (f, 𝟙 L))) ∧
    (∀ {K L L' : DerivedCategory (ModuleCat R)} (g : L ⟶ L'),
      DerivedInternalHom.Model.coevaluation K L' ≫
          (DerivedInternalHom.Model.hom R).map
            ((g.op, 𝟙 ((DerivedInternalHom.Model.tensor R).obj (K, L'))) :
              (Opposite.op L', (DerivedInternalHom.Model.tensor R).obj (K, L')) ⟶
                (Opposite.op L, (DerivedInternalHom.Model.tensor R).obj (K, L'))) =
        DerivedInternalHom.Model.coevaluation K L ≫
          (DerivedInternalHom.Model.hom R).map
            ((𝟙 (Opposite.op L), (DerivedInternalHom.Model.tensor R).map (𝟙 K, g)) :
              (Opposite.op L, (DerivedInternalHom.Model.tensor R).obj (K, L)) ⟶
                (Opposite.op L, (DerivedInternalHom.Model.tensor R).obj (K, L'))))
Sources

Section15.76 Perfect complexes#

Section 15.76 of the Stacks Project, Tag 0656. 18 tags here are carried by 19 declarations of the repository (all in StacksFrontier), quoted below from AxiomMath/Stacks at commit 5ed82d14.

Tag 0657, a definition

Tag 0657 in the Stacks Project.

StacksDraft.Perfect.IsPerfect, a def in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/Perfect/Defs.lean, line 48. The attribute's comment: “(1)”. References: SGA 6 I (4.8), “affine (ring) case”; SGA 6 II (2.2.1), “affine case, perfect”.

Stacks 0657 (1). An object of the derived category of R-modules is perfect if it is isomorphic to a bounded complex of finite projective R-modules.

def IsPerfect {R : Type u} [Ring R]
    [HasDerivedCategory.{w} (ModuleCat.{v} R)]
    (K : DerivedCategory (ModuleCat.{v} R)) : Prop

StacksDraft.Perfect.IsPerfectModule, a def in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/Perfect/Defs.lean, line 62. The attribute's comment: “(2)”. References: SGA 6 I (4.8), “affine case, module”; SGA 6 II (2.2.1), “affine, degree-0 module”.

Stacks 0657 (2). An R-module is perfect if the complex consisting of it placed in degree zero is a perfect object of the derived category of R-modules.

def IsPerfectModule {R : Type u} [Ring R]
    (M : Type v) [AddCommGroup M] [Module R M]
    [HasDerivedCategory.{w} (ModuleCat.{v} R)] : Prop
Tag 0658, a lemma

Tag 0658 in the Stacks Project.

StacksDraft.Perfect.isPerfect_iff_pseudoCoherent_and_finiteTorDimension, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/Perfect/Basic.lean, line 1055. References: SGA 5 VIII (8.1), “commutative rings only”; SGA 6 I (5.8.1), “module over a ring”; SGA 6 I (5.8), “special case”.

Stacks 0658. An object of D(R) is perfect if and only if it is pseudo-coherent and has finite Tor dimension, the latter being recorded by the existence of a bounded flat representative. Moreover a pseudo-coherent object whose Tor amplitude lies in [a, b] is represented by a complex of finite projective modules concentrated in the degrees [a, b].

theorem isPerfect_iff_pseudoCoherent_and_finiteTorDimension
    {R : Type u} [CommRing R] (K : DerivedCategory (ModuleCat.{max u v} R)) :
    (IsPerfect K ↔
      StacksDraft.PseudoCoherence.IsPseudoCoherent K ∧
        ∃ a b : ℤ, HasFlatRepresentative K a b) ∧
      ∀ a b : ℤ, StacksDraft.PseudoCoherence.IsPseudoCoherent K →
        HasFlatRepresentative K a b →
        ∃ E : CochainComplex (ModuleCat.{max u v} R) ℤ,
          (∀ i : ℤ, Module.Finite R (E.X i) ∧ Module.Projective R (E.X i)) ∧
            E.IsStrictlyGE a ∧ E.IsStrictlyLE b ∧
              Nonempty (K ≅ DerivedCategory.Q.obj E)
Tag 066Q, a lemma

Tag 066Q in the Stacks Project.

StacksDraft.Perfect.isPerfectModule_iff_exists_finite_projective_resolution, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/Perfect/Module.lean, line 200.

Stacks 066Q. An R-module is perfect if and only if it has a finite resolution by finite projective R-modules.

theorem isPerfectModule_iff_exists_finite_projective_resolution
    {R : Type u} [CommRing R] (M : Type v) [AddCommGroup M] [Module R M] :
    IsPerfectModule (R := R) M ↔
      ∃ (d : ℕ) (F : ModuleResolution R M),
        (∀ i : ℕ, Module.Finite R (F.complex.X i) ∧ Module.Projective R (F.complex.X i)) ∧
          ∀ i : ℕ, d < i → IsZero (F.complex.X i)
Tag 066R, a lemma

Tag 066R in the Stacks Project.

StacksDraft.Perfect.isPerfect_of_distinguished, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/Perfect/Basic.lean, line 219.

Stacks 066R. In a distinguished triangle in D(R), if two of the three objects are perfect, then so is the third.

theorem isPerfect_of_distinguished
    {R : Type u} [Ring R]
    (T : Triangle (DerivedCategory (ModuleCat.{v} R)))
    (hT : T ∈ distinguishedTriangles) :
    (IsPerfect T.obj₁ → IsPerfect T.obj₂ → IsPerfect T.obj₃) ∧
    (IsPerfect T.obj₁ → IsPerfect T.obj₃ → IsPerfect T.obj₂) ∧
    (IsPerfect T.obj₂ → IsPerfect T.obj₃ → IsPerfect T.obj₁)
Tag 066S, a lemma

Tag 066S in the Stacks Project.

StacksDraft.Perfect.isPerfect_of_biproduct, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/Perfect/Basic.lean, line 918.

Stacks 066S. If a binary biproduct of objects of D(R) is perfect, then both summands are perfect. Perfectness passes to the summands at arbitrary carrier universes: a small projective coefficient quotient supporting the given bounded complex supplies the internal descent.

theorem isPerfect_of_biproduct
    {R : Type u} [CommRing R] (K L : DerivedCategory (ModuleCat.{v} R))
    (h : IsPerfect (K ⊞ L)) :
    IsPerfect K ∧ IsPerfect L
Tag 066T, a lemma

Tag 066T in the Stacks Project.

StacksDraft.Perfect.isPerfect_of_bounded_of_isPerfectModule, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/Perfect/Basic.lean, line 283.

Stacks 066T. A bounded complex of perfect modules over a ring represents a perfect object of the derived category.

theorem isPerfect_of_bounded_of_isPerfectModule
    {R : Type u} [CommRing R]
    (K : CochainComplex (ModuleCat.{v} R) ℤ)
    (hK : ∃ a b : ℤ, K.IsStrictlyGE a ∧ K.IsStrictlyLE b)
    (hP : ∀ i : ℤ, IsPerfectModule (R := R) (K.X i)) :
    IsPerfect (DerivedCategory.Q.obj K)
Tag 066U, a lemma

Tag 066U in the Stacks Project.

StacksDraft.Perfect.isPerfect_of_bounded_of_cohomology_isPerfect, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/Perfect/Basic.lean, line 405. References: SGA 6 I (4.15), “special case”.

Stacks 066U. A bounded object of the derived category of modules whose cohomology modules are all perfect is itself perfect.

theorem isPerfect_of_bounded_of_cohomology_isPerfect
    {R : Type u} [CommRing R] (K : DerivedCategory (ModuleCat.{v} R))
    (hK : (∃ a : ℤ, K.IsGE a) ∧ ∃ b : ℤ, K.IsLE b)
    (hH : ∀ i : ℤ,
      IsPerfectModule (R := R)
        ((DerivedCategory.homologyFunctor (ModuleCat.{v} R) i).obj K)) :
    IsPerfect K
Tag 066V, a lemma

Tag 066V in the Stacks Project.

StacksDraft.Perfect.isPerfect_restrictScalars_of_isPerfectModule, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/Perfect/BaseChange.lean, line 184.

Stacks 066V. Let f : A → B be a homomorphism of commutative rings and assume that B is perfect as an A-module. Then every perfect complex of B-modules is perfect as a complex of A-modules.

theorem isPerfect_restrictScalars_of_isPerfectModule
    (hB : IsPerfectModule (R := A)
      ((ModuleCat.restrictScalars.{uB} f).obj (ModuleCat.of B B)))
    (K : CochainComplex (ModuleCat.{uB} B) ℤ)
    (hK : IsPerfect (DerivedCategory.Q.obj K)) :
    IsPerfect (DerivedCategory.Q.obj
      (((ModuleCat.restrictScalars.{uB} f).mapHomologicalComplex (ComplexShape.up ℤ)).obj K))
Tag 066W, a lemma

Tag 066W in the Stacks Project.

StacksDraft.Perfect.isPerfect_derivedExtensionScalars, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/Perfect/BaseChange.lean, line 261.

Stacks 066W. Let f : A → B be a homomorphism of commutative rings and let K be a perfect object of D(A). Then the derived base change K ⊗_A^L B is a perfect object of D(B).

theorem isPerfect_derivedExtensionScalars (f : A →+* B)
    (K : DerivedCategory (ModuleCat.{max v uA uB} A)) (hK : IsPerfect K) :
    IsPerfect ((CochainComplex.DerivedExtensionScalars.totalDerivedExtensionScalars.{uA, uB, v}
      f).functor.obj K)
Tag 066X, a lemma

Tag 066X in the Stacks Project.

StacksDraft.Perfect.isPerfectModule_tensorProduct_of_flat, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/Perfect/Module.lean, line 270.

Stacks 066X. Flat base change preserves perfect modules.

theorem isPerfectModule_tensorProduct_of_flat
    {A : Type u} {B : Type v} [CommRing A] [CommRing B] [Algebra A B]
    (M : Type w) [AddCommGroup M] [Module A M] [Module.Flat A B]
    (hM : IsPerfectModule (R := A) M) :
    IsPerfectModule (R := B) (B ⊗[A] M)
Tag 0GM0, a lemma

Tag 0GM0 in the Stacks Project.

StacksDraft.Perfect.isPerfect_derivedTensorProduct, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/Perfect/Duality/TensorProductTorAmplitude.lean, line 151. References: SGA 6 I (4.19), “D(R), R a ring”.

Stacks 0GM0. The derived tensor product of two perfect objects of D(A) is perfect.

theorem isPerfect_derivedTensorProduct
    (K L : DerivedCategory (ModuleCat.{max u v} (ULift.{v} R)))
    (hK : IsPerfect K) (hL : IsPerfect L) :
    IsPerfect ((derivedHomData (R := R)).tensor.obj (K, L))
Tag 066Y, a lemma

Tag 066Y in the Stacks Project.

StacksDraft.Perfect.isPerfect_of_localizationSpan, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/Perfect/Local.lean, line 287.

Let R be a commutative ring, let the elements f i generate the unit ideal, and let K be an object of the derived category of R-modules. If the derived localization K ⊗_R R_{f i} is perfect for every i, then K is perfect.

theorem isPerfect_of_localizationSpan {R : Type u} [CommRing R] {ι : Type*} [Finite ι]
    (f : ι → R) (hf : Ideal.span (Set.range f) = ⊤)
    (K : DerivedCategory (ModuleCat.{max u v} R))
    (hK : ∀ i, IsPerfect ((PseudoCoherence.localizationAwayFunctorAux.{u, v} (f i)).obj K)) :
    IsPerfect K
Tag 068T, a lemma

Tag 068T in the Stacks Project.

StacksDraft.Perfect.isPerfect_of_faithfullyFlat_baseChange, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/Perfect/Local.lean, line 618.

Let R → S be a faithfully flat map of commutative rings and let K be a complex of R-modules. If K ⊗_R S is perfect, then K is perfect.

theorem isPerfect_of_faithfullyFlat_baseChange
    {R : Type u} {S : Type v} [CommRing R] [CommRing S]
    (f : R →+* S) (hf : f.FaithfullyFlat)
    (K : CochainComplex (ModuleCat.{max u v w} R) ℤ)
    (hK : IsPerfect
      (DerivedCategory.Q.obj
        (((ModuleCat.extendScalars.{u, v, max u v w} f).mapHomologicalComplex
          (ComplexShape.up ℤ)).obj K))) :
    IsPerfect (DerivedCategory.Q.obj K)
Tag 066Z, a lemma

Tag 066Z in the Stacks Project.

StacksDraft.Perfect.isPerfectModule_iff_finite_and_isPerfect_iff_bounded_finiteCohomology, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/Perfect/Regular.lean, line 247.

Stacks 066Z. Over a regular ring, perfect modules are precisely finite modules, and perfect derived objects are precisely the bounded objects with finite cohomology modules.

theorem isPerfectModule_iff_finite_and_isPerfect_iff_bounded_finiteCohomology
    {R : Type u} [CommRing R] [IsRegularRing R] :
    (∀ (M : Type (max u v)) [AddCommGroup M] [Module R M],
      IsPerfectModule (R := R) M ↔ Module.Finite R M) ∧
    (∀ K : DerivedCategory (ModuleCat.{max u v} R),
      IsPerfect K ↔
        ((∃ a : ℤ, K.IsGE a) ∧ (∃ b : ℤ, K.IsLE b) ∧
          ∀ i : ℤ,
            Module.Finite R
              ((DerivedCategory.homologyFunctor (ModuleCat.{max u v} R) i).obj K)))
Tag 07VI, a lemma

Tag 07VI in the Stacks Project.

StacksDraft.Perfect.isPerfect_derivedDual_and_naturalIsos, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/Perfect/Duality/TensorHom.lean, line 652. References: SGA 6 I (7.7), “affine case”; SGA 6 I (7.3), “affine (ring) case”.

Stacks 07VI. Let A be a ring and let K be a perfect object of D(A). Then the derived dual Kᵛ = RHom_A(K, A) is perfect, the canonical morphism K ⟶ (Kᵛ)ᵛ is an isomorphism, the canonical comparison L ⊗_A^L Kᵛ ⟶ RHom_A(K, L) is an isomorphism functorially in L, and H⁰(L ⊗_A^L Kᵛ) = Ext⁰_A(K, L) functorially in L.

theorem isPerfect_derivedDual_and_naturalIsos
    (K : DerivedCategory (ModuleCat.{max u v} (ULift.{v} R))) (hK : IsPerfect K) :
    PerfectDerivedDuality K
Tag 0H81, a remark

Tag 0H81 in the Stacks Project.

StacksDraft.Perfect.hasFlatRepresentative_derivedDual, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/Perfect/Duality/TensorProductTorAmplitude.lean, line 227. References: SGA 6 I (7.3), “finite Tor-dim stability”.

Stacks 0H81. If a perfect complex has Tor amplitude in [a, b] -- that is, a flat representative supported in [a, b] -- then its derived dual has Tor amplitude in [-b, -a].

theorem hasFlatRepresentative_derivedDual
    (K : DerivedCategory (ModuleCat.{max u v} (ULift.{v} A)))
    (hK : IsPerfect K) {a b : ℤ}
    (hKamp : HasFlatRepresentative K a b) :
    HasFlatRepresentative (derivedDual K) (-b) (-a)
Tag 0BKB, a lemma

Tag 0BKB in the Stacks Project.

StacksDraft.Perfect.isDerivedLimit_derivedHom_of_isHomotopyColimit, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/Perfect/SystemDuality.lean, line 443.

If K is a homotopy colimit of a sequential system of perfect derived objects Kₙ, then RHomₐ(K, E) is a derived inverse limit of the inverse system E ⊗ᴸ Kₙᵛ.

theorem isDerivedLimit_derivedHom_of_isHomotopyColimit
    (Ksys : ℕ ⥤ DerivedCategory (ModuleCat.{max u v} A)) [HasCoproduct Ksys.obj]
    (hperfect : ∀ n : ℕ, IsPerfect (Ksys.obj n))
    (K E : DerivedCategory (ModuleCat.{max u v} A)) (hK : IsHomotopyColimit Ksys K)
    [HasProduct fun n : ℕ ↦ (dualTensorSystem A Ksys E).obj (Opposite.op n)] :
    IsDerivedLimit (dualTensorSystem A Ksys E)
      ((derivedHomAdjunctionOverRing A).hom.obj (Opposite.op K, E))
Tag 0BC7, a lemma

Tag 0BC7 in the Stacks Project.

StacksDraft.Perfect.perfectComplexes_filteredColimit, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/Perfect/Colimit/HomColimit.lean, line 839.

Stacks 0BC7. Let R : I ⥤ CommRingCat be a filtered system of commutative rings whose colimit is computed on underlying sets, and let c be a colimit cocone. Writing E f for the canonical total derived extension of scalars - ⊗ᴸ_A B along f : A →+* B ([stacks 064H]), the following two statements hold.

First, every perfect object K of the derived category of c.pt-modules descends to a finite stage: there are an index i and a perfect object Kᵢ over R.obj i with K ≅ (E (c.ι.app i)).functor.obj Kᵢ.

Second, morphisms out of a perfect complex commute with the filtered colimit. Fix a stage i₀ and objects K₀, L₀ over R.obj i₀ with K₀ perfect. Then derived extension of scalars carries a composition isomorphism comp compatible with the scalar-extension tower on complexes, and the morphisms (E (c.ι.app i₀)).functor.obj K₀ ⟶ (E (c.ι.app i₀)).functor.obj L₀ over the colimit ring form the filtered colimit, over the stages j above i₀, of the morphisms (E (R.map j.hom)).functor.obj K₀ ⟶ (E (R.map j.hom)).functor.obj L₀ over those stages, with the transition maps and the maps to the colimit given by derived extension of scalars conjugated by comp.

public theorem perfectComplexes_filteredColimit
    {I : Type uI} [Category.{uI} I] [IsFiltered I]
    (R : I ⥤ CommRingCat.{uR}) [PreservesColimit R (forget CommRingCat.{uR})]
    (c : Cocone R) (hc : IsColimit c) :
    let E := fun {A B : Type uR} [CommRing A] [CommRing B] (f : A →+* B) ↦
      totalDerivedExtensionScalars.{uR, uR, uR} f
    let D := fun {i j : I} (f : i ⟶ j) ↦ E (R.map f).hom
    let Dlim := fun (i : I) ↦ E (c.ι.app i).hom
    (∀ (K : DerivedCategory (ModuleCat.{uR} c.pt)), IsPerfect K →
        ∃ (i : I) (Kᵢ : DerivedCategory (ModuleCat.{uR} (R.obj i))),
          IsPerfect Kᵢ ∧ Nonempty (K ≅ (Dlim i).functor.obj Kᵢ)) ∧
      (∀ (i₀ : I) (K₀ L₀ : DerivedCategory (ModuleCat.{uR} (R.obj i₀))),
        IsPerfect K₀ →
        ∃ (comp : ∀ {A B C : Type uR} [CommRing A] [CommRing B] [CommRing C]
            (f : A →+* B) (g : B →+* C),
            (E f).functor ⋙ (E g).functor ≅ (E (g.comp f)).functor),
          (∀ {A B C : Type uR} [CommRing A] [CommRing B] [CommRing C]
              (f : A →+* B) (g : B →+* C)
              (P : CochainComplex (ModuleCat.{uR} A) ℤ),
            (E g).functor.map ((E f).comparison.app P) ≫
                (E g).comparison.app
                  (((ModuleCat.extendScalars.{uR, uR, uR} f).mapHomologicalComplex
                    (ComplexShape.up ℤ)).obj P) ≫
                (extensionOfScalarsComplexComp.{uR} f g).inv.app P =
              (comp f g).hom.app (DerivedCategory.Q.obj P) ≫
                (E (g.comp f)).comparison.app P) ∧
        ∃ (H : Under i₀ ⥤ Type (uR + 1))
          (eH : ∀ j : Under i₀,
            H.obj j ≃ ((D j.hom).functor.obj K₀ ⟶ (D j.hom).functor.obj L₀))
          (s : Cocone H)
          (eTarget : s.pt ≃ ((Dlim i₀).functor.obj K₀ ⟶ (Dlim i₀).functor.obj L₀))
          (_hs : IsColimit s),
          (∀ {j k : Under i₀} (w : j ⟶ k) (x : H.obj j),
            let h : (R.map w.right).hom.comp (R.map j.hom).hom = (R.map k.hom).hom :=
              by
                ext x
                calc
                  _ = (R.map (j.hom ≫ w.right)).hom x :=
                    (congrArg (fun q : R.obj i₀ ⟶ R.obj k.right ↦ q.hom x)
                      (R.map_comp j.hom w.right)).symm
                  _ = _ := by rw [w.w]
            let stageComp := comp (R.map j.hom).hom (R.map w.right).hom ≪≫
              derivedExtensionScalarsCongr.{uR} E h
            eH k (H.map w x) =
              stageComp.inv.app K₀ ≫
                (D w.right).functor.map (eH j x) ≫
                stageComp.hom.app L₀) ∧
          (∀ (j : Under i₀)
              (g : (D j.hom).functor.obj K₀ ⟶ (D j.hom).functor.obj L₀),
            let h : (c.ι.app j.right).hom.comp (R.map j.hom).hom = (c.ι.app i₀).hom :=
              congrArg CommRingCat.Hom.hom (c.w j.hom)
            let limitComp := comp (R.map j.hom).hom (c.ι.app j.right).hom ≪≫
              derivedExtensionScalarsCongr.{uR} E h
            eTarget (s.ι.app j ((eH j).symm g)) =
              limitComp.inv.app K₀ ≫ (Dlim j.right).functor.map g ≫
                limitComp.hom.app L₀))
Sources

Section15.77 Lifting complexes#

Section 15.77 of the Stacks Project, Tag 0BC8. 9 tags here are carried by 9 declarations of the repository (all in StacksFrontier), quoted below from AxiomMath/Stacks at commit 5ed82d14.

Tag 0BC9, a lemma

Tag 0BC9 in the Stacks Project.

LiftAcyclic.exists_lift_acyclic_complex, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/LiftAcyclicComplex.lean, line 895.

Stacks 0BC9. A bounded above acyclic complex of R/I-modules with terms of the form P/IP has a bounded above acyclic lift over R with terms satisfying P, whose reduction is isomorphic to the given complex as a complex of R/I-modules.

theorem exists_lift_acyclic_complex
    (P : ModuleCat.{max v u} R → Prop)
    (hPprojective : ∀ M, P M → Module.Projective R M)
    (hPcomplement : ∀ M₁ M₂, P M₁ → P (M₁ ⊞ M₂) → P M₂)
    (hPsurjective : ∀ (M₁ M₂ : ModuleCat.{max v u} R) (f : M₁ ⟶ M₂),
      P M₁ → P M₂ →
      Function.Surjective
        (((ModuleCat.extendScalars.{u, u, max v u} (Ideal.Quotient.mk I)).map f).hom) →
      Function.Surjective f.hom)
    (E : CochainComplex (ModuleCat.{max v u} (R ⧸ I)) ℤ)
    (hbdd : ∃ b, E.IsStrictlyLE b) (hac : ∀ i, E.ExactAt i)
    (hterms : ∀ i, ∃ M, P M ∧ Nonempty
      (E.X i ≅ (ModuleCat.extendScalars.{u, u, max v u} (Ideal.Quotient.mk I)).obj M)) :
    ∃ PC : CochainComplex (ModuleCat.{max v u} R) ℤ,
      (∀ i, P (PC.X i)) ∧ (∃ b, PC.IsStrictlyLE b) ∧
      (∀ i, PC.ExactAt i) ∧
      Nonempty
        (((ModuleCat.extendScalars.{u, u, max v u} (Ideal.Quotient.mk I)).mapHomologicalComplex
            (ComplexShape.up ℤ)).obj PC ≅ E)
Tag 0BCA, a lemma

Tag 0BCA in the Stacks Project.

StacksDraft.Perfect.exists_boundedAbove_lift_representing, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/Perfect/Lifting.lean, line 792.

Stacks 0BCA. Let I ⊆ R and let P be a class of projective R-modules, closed under finite direct sums and complementary summands, such that surjectivity modulo I lifts to surjectivity. A bounded above complex E of R / I-modules whose terms are reductions of modules in P, and which represents K ⊗ᴸ[R] R / I, lifts to a bounded above complex with terms in P representing K, provided K already has some such representative.

theorem exists_boundedAbove_lift_representing
    {R : Type u} [CommRing R] (I : Ideal R)
    (P : ModuleCat.{max v u} R → Prop)
    (K : DerivedCategory (ModuleCat.{max v u} R))
    (E : CochainComplex (ModuleCat.{max v u} (R ⧸ I)) ℤ)
    (hPprojective : ∀ M, P M → Module.Projective R M)
    (hPsum : ∀ M₁ M₂, (P M₁ ∧ P (M₁ ⊞ M₂)) ↔ (P M₁ ∧ P M₂))
    (hPsurjective : ∀ (M₁ M₂ : ModuleCat.{max v u} R) (f : M₁ ⟶ M₂),
      P M₁ → P M₂ →
      Function.Surjective
          (((ModuleCat.extendScalars.{u, u, max v u} (Ideal.Quotient.mk I)).map f).hom) →
        Function.Surjective f.hom)
    (hEbdd : ∃ b, E.IsStrictlyLE b)
    (hEterms : ∀ i, ∃ M, P M ∧ Nonempty
      (E.X i ≅
        (ModuleCat.extendScalars.{u, u, max v u} (Ideal.Quotient.mk I)).obj M))
    (hErep : Nonempty
      ((DerivedCategory.Q).obj E ≅
        (totalDerivedExtensionScalars.{u, u, v} (Ideal.Quotient.mk I)).functor.obj K))
    (hKrep : ∃ KC : CochainComplex (ModuleCat.{max v u} R) ℤ,
      (∀ i, P (KC.X i)) ∧ (∃ b, KC.IsStrictlyLE b) ∧
        Nonempty ((DerivedCategory.Q).obj KC ≅ K)) :
    ∃ PC : CochainComplex (ModuleCat.{max v u} R) ℤ,
      (∀ i, P (PC.X i)) ∧
      (∃ b, PC.IsStrictlyLE b) ∧
      Nonempty
        (((ModuleCat.extendScalars.{u, u, max v u} (Ideal.Quotient.mk I)).mapHomologicalComplex
            (ComplexShape.up ℤ)).obj PC ≅ E) ∧
      Nonempty ((DerivedCategory.Q).obj PC ≅ K)
Tag 09AR, a lemma

Tag 09AR in the Stacks Project.

StacksDraft.Perfect.exists_boundedAbove_projective_lift_representing, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/Perfect/NilpotentLifting.lean, line 698. References: SGA 5 XV (3.Lemma1), “existence of L', v, w”.

Stacks 09AR. Let I be a nilpotent ideal of a commutative ring R and let K be an object of D(R). A bounded above complex E of projective R ⧸ I-modules representing K ⊗ᴸ[R] R ⧸ I lifts to a bounded above complex P of projective R-modules representing K, with P ⊗[R] R ⧸ I isomorphic to E.

public theorem exists_boundedAbove_projective_lift_representing
    {R : Type u} [CommRing R] (I : Ideal R)
    (E : CochainComplex (ModuleCat.{max v u} (R ⧸ I)) ℤ)
    (K : DerivedCategory (ModuleCat.{max v u} R))
    (hEbdd : ∃ b : ℤ, E.IsStrictlyLE b)
    (hEprojective : ∀ i : ℤ, Module.Projective (R ⧸ I) (E.X i))
    (hErep : Nonempty
      ((DerivedCategory.Q).obj E ≅
        (totalDerivedExtensionScalars.{u, u, v} (Ideal.Quotient.mk I)).functor.obj K))
    (hI : IsNilpotent I) :
    ∃ P : CochainComplex (ModuleCat.{max v u} R) ℤ,
      (∃ b : ℤ, P.IsStrictlyLE b) ∧
      (∀ i : ℤ, Module.Projective R (P.X i)) ∧
      Nonempty ((DerivedCategory.Q).obj P ≅ K) ∧
      Nonempty
        (((ModuleCat.extendScalars.{u, u, max v u} (Ideal.Quotient.mk I)).mapHomologicalComplex
          (ComplexShape.up ℤ)).obj P ≅ E)
Tag 0H76, a lemma

Tag 0H76 in the Stacks Project.

StacksDraft.Perfect.isPseudoCoherent_derivedExtensionScalars_iff, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/Perfect/NilpotentLifting.lean, line 811. References: SGA 6 I (2.16.2), “(i), punctual”.

Stacks 0H76. Derived extension of scalars along a surjective map of commutative rings with nilpotent kernel preserves and reflects pseudo-coherence.

Preservation is [stacks 0650]. Reflection is [stacks 09AR]: a bounded above finite projective representative of the reduction, which exists by [stacks 064U], lifts to a bounded above projective representative of K, whose terms are finite because their extensions of scalars are and the kernel is nilpotent.

public theorem isPseudoCoherent_derivedExtensionScalars_iff
    {R' R : Type u} [CommRing R'] [CommRing R] (f : R' →+* R)
    (hf : Function.Surjective f) (hnil : IsNilpotent (RingHom.ker f))
    (K : DerivedCategory (ModuleCat.{max v u} R')) :
    PseudoCoherence.IsPseudoCoherent
        ((totalDerivedExtensionScalars.{u, u, v} f).functor.obj K) ↔
      PseudoCoherence.IsPseudoCoherent K
Tag 0BCB, a lemma

Tag 0BCB in the Stacks Project.

StacksDraft.Perfect.exists_boundedAbove_isStablyFree_lift_representing, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/Perfect/Lifting.lean, line 1054.

Stacks 0BCB. Let I ⊆ R be an ideal every element of whose coset 1 + I is a unit. A bounded above complex E of finite stably free R ⧸ I-modules representing K ⊗ᴸ[R] R ⧸ I, for a pseudo-coherent object K of D(R), lifts to a bounded above complex P of finite stably free R-modules representing K with P ⊗[R] R ⧸ I isomorphic to E. Moreover P is free in every degree in which E is free.

theorem exists_boundedAbove_isStablyFree_lift_representing
    {R : Type u} [CommRing R] (I : Ideal R)
    (K : DerivedCategory (ModuleCat.{max v u} R))
    (E : CochainComplex (ModuleCat.{max v u} (R ⧸ I)) ℤ)
    (hEbdd : ∃ b, E.IsStrictlyLE b)
    (hEterms : ∀ i, Module.Finite (R ⧸ I) (E.X i) ∧ Module.IsStablyFree (R ⧸ I) (E.X i))
    (hErep : Nonempty ((DerivedCategory.Q).obj E ≅
      (totalDerivedExtensionScalars.{u, u, v} (Ideal.Quotient.mk I)).functor.obj K))
    (hK : StacksDraft.PseudoCoherence.IsPseudoCoherent K)
    (hI : ∀ x ∈ I, IsUnit (1 + x)) :
    ∃ P : CochainComplex (ModuleCat.{max v u} R) ℤ,
      (∀ i, Module.Finite R (P.X i) ∧ Module.IsStablyFree R (P.X i)) ∧
      (∃ b, P.IsStrictlyLE b) ∧
      Nonempty
        (((ModuleCat.extendScalars.{u, u, max v u} (Ideal.Quotient.mk I)).mapHomologicalComplex
            (ComplexShape.up ℤ)).obj P ≅ E) ∧
      Nonempty ((DerivedCategory.Q).obj P ≅ K) ∧
      (∀ i, Module.Free (R ⧸ I) (E.X i) → Module.Free R (P.X i))
Tag 0BCC, a lemma

Tag 0BCC in the Stacks Project.

StacksDraft.Perfect.exists_unique_boundedAbove_free_complex_representing, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/Perfect/MinimalRepresentative/LocalRing.lean, line 562.

Stacks 0BCC. Let K be a pseudo-coherent object of the derived category of a commutative local ring R with residue field κ. Its cohomology after derived extension of scalars to κ is finite dimensional in every degree and vanishes above some degree b. Moreover K is represented by a complex vanishing above b whose term in degree i is free of rank dim_κ Hⁱ(K ⊗ᴸ_R κ), and any two complexes with these prescribed terms representing K are isomorphic as complexes.

theorem exists_unique_boundedAbove_free_complex_representing
    {R : Type u} [CommRing R] [IsLocalRing R]
    (K : DerivedCategory (ModuleCat.{max v u} R))
    (hK : StacksDraft.PseudoCoherence.IsPseudoCoherent K) :
    let k := IsLocalRing.ResidueField R
    let H := fun i : ℤ =>
      (DerivedCategory.homologyFunctor (ModuleCat.{max v u} k) i).obj
        ((totalDerivedExtensionScalars.{u, u, v} (IsLocalRing.residue R)).functor.obj K)
    let IsModel := fun P : CochainComplex (ModuleCat.{max v u} R) ℤ =>
      (∀ i, Nonempty (P.X i ≅
        ModuleCat.of R (ULift.{v} (Fin (Module.finrank k (H i)) → R)))) ∧
      Nonempty ((DerivedCategory.Q).obj P ≅ K)
    (∀ i, Module.Finite k (H i)) ∧
      ∃ b : ℤ, (∀ i, b < i → IsZero (H i)) ∧
        ∃ P : CochainComplex (ModuleCat.{max v u} R) ℤ,
          P.IsStrictlyLE b ∧ IsModel P ∧
            ∀ F G, IsModel F → IsModel G → Nonempty (F ≅ G)
Tag 0BCD, a lemma

Tag 0BCD in the Stacks Project.

StacksDraft.Perfect.exists_away_bounded_free_complex_representing, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/Perfect/MinimalRepresentative/PrincipalNeighbourhood.lean, line 322.

Stacks 0BCD. Let R be a commutative ring, p a prime of R and K a perfect object of D(R). The dimensions dᵢ = dim_{κ(p)} Hⁱ(K ⊗ᴸ_R κ(p)) are finite and only finitely many of them are nonzero, and there is an f ∈ R outside p together with a strictly bounded complex over R_f whose term in degree i is free of rank exactly dᵢ and which represents K ⊗ᴸ_R R_f.

theorem exists_away_bounded_free_complex_representing
    {R : Type u} [CommRing R] (p : Ideal R) [p.IsPrime]
    (K : DerivedCategory (ModuleCat.{max v u} R)) (hK : IsPerfect K) :
    let k := p.ResidueField
    let H := fun i : ℤ =>
      (DerivedCategory.homologyFunctor (ModuleCat.{max v u} k) i).obj
        ((totalDerivedExtensionScalars.{u, u, v} (algebraMap R k)).functor.obj K)
    (∀ i, Module.Finite k (H i)) ∧
      {i | Module.finrank k (H i) ≠ 0}.Finite ∧
      ∃ f : R, f ∉ p ∧
        ∃ (P : CochainComplex (ModuleCat.{max v u} (Localization.Away f)) ℤ) (a b : ℤ),
          P.IsStrictlyGE a ∧ P.IsStrictlyLE b ∧
            (∀ i, Nonempty (P.X i ≅ ModuleCat.of (Localization.Away f)
              (ULift.{v} (Fin (Module.finrank k (H i)) → Localization.Away f)))) ∧
            Nonempty ((DerivedCategory.Q).obj P ≅
              (totalDerivedExtensionScalars.{u, u, v}
                (algebraMap R (Localization.Away f))).functor.obj K)
Tag 0F9V, a lemma

Tag 0F9V in the Stacks Project.

StacksDraft.Perfect.exists_away_iso_biprod_trivial_complexes, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/Perfect/MinimalRepresentative/TrivialSummands.lean, line 596.

Stacks 0F9V. Two bounded complexes of finite projective modules representing isomorphic derived objects become isomorphic as complexes over some principal localization, after adjoining finite direct sums of trivial two-term complexes on both sides.

theorem exists_away_iso_biprod_trivial_complexes
    {R : Type u} [CommRing R] (p : Ideal R) [p.IsPrime]
    (M N : CochainComplex (ModuleCat.{max v u} R) ℤ)
    (hMbounded : ∃ a b : ℤ, M.IsStrictlyGE a ∧ M.IsStrictlyLE b)
    (hNbounded : ∃ a b : ℤ, N.IsStrictlyGE a ∧ N.IsStrictlyLE b)
    (hMterms : ∀ i, Module.Finite R (M.X i) ∧ Projective (M.X i))
    (hNterms : ∀ i, Module.Finite R (N.X i) ∧ Projective (N.X i))
    (hMN : Nonempty ((DerivedCategory.Q).obj M ≅ (DerivedCategory.Q).obj N)) :
    ∃ f : R, f ∉ p ∧
      let S := Localization.Away f
      let F := (ModuleCat.extendScalars.{u, u, max v u} (algebraMap R S)).mapHomologicalComplex
        (ComplexShape.up ℤ)
      let IsTrivialSum := fun P : CochainComplex (ModuleCat.{max v u} S) ℤ =>
        ∃ (n : ℕ) (degree : Fin n → ℤ),
          Nonempty (P ≅ ∏ᶜ fun j => CochainComplex.mappingCone
            (𝟙 ((CochainComplex.singleFunctor (ModuleCat.{max v u} S) (degree j)).obj
              (ModuleCat.of S (ULift.{v} S)))))
      ∃ P Q : CochainComplex (ModuleCat.{max v u} S) ℤ,
        IsTrivialSum P ∧ IsTrivialSum Q ∧ Nonempty (F.obj M ⊞ P ≅ F.obj N ⊞ Q)
Tag 0BCE, a lemma

Tag 0BCE in the Stacks Project.

StacksDraft.Perfect.exists_boundedAbove_finiteProjective_lift_representing, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/Perfect/NilpotentLifting.lean, line 267.

Stacks 0BCE. Let (R, I) be a henselian pair and let K be a pseudo-coherent object of D(R). A bounded above complex E of finite projective R ⧸ I-modules representing K ⊗ᴸ[R] R ⧸ I lifts to a bounded above complex P of finite projective R-modules representing K with P ⊗[R] R ⧸ I isomorphic to E. Moreover P is free in every degree in which E is free.

theorem exists_boundedAbove_finiteProjective_lift_representing
    {R : Type u} [CommRing R] (I : Ideal R)
    (K : DerivedCategory (ModuleCat.{max v u} R))
    (E : CochainComplex (ModuleCat.{max v u} (R ⧸ I)) ℤ)
    (hEbdd : ∃ b, E.IsStrictlyLE b)
    (hEterms : ∀ i,
      Module.Finite (R ⧸ I) (E.X i) ∧ Module.Projective (R ⧸ I) (E.X i))
    (hErep : Nonempty
      ((DerivedCategory.Q).obj E ≅
        (totalDerivedExtensionScalars.{u, u, v} (Ideal.Quotient.mk I)).functor.obj K))
    (hK : StacksDraft.PseudoCoherence.IsPseudoCoherent K)
    (hI : HenselianPair R I) :
    ∃ P : CochainComplex (ModuleCat.{max v u} R) ℤ,
      (∀ i, Module.Finite R (P.X i) ∧ Module.Projective R (P.X i)) ∧
      (∃ b, P.IsStrictlyLE b) ∧
      Nonempty
        (((ModuleCat.extendScalars.{u, u, max v u} (Ideal.Quotient.mk I)).mapHomologicalComplex
            (ComplexShape.up ℤ)).obj P ≅ E) ∧
      Nonempty ((DerivedCategory.Q).obj P ≅ K) ∧
      (∀ i, Module.Free (R ⧸ I) (E.X i) → Module.Free R (P.X i))
Sources

Section15.78 Splitting complexes#

Section 15.78 of the Stacks Project, Tag 0BCF. 6 tags here are carried by 6 declarations of the repository (all in StacksFrontier), quoted below from AxiomMath/Stacks at commit 5ed82d14.

Tag 0BCG, a lemma

Tag 0BCG in the Stacks Project.

StacksDraft.ProjectiveAmplitude.hom_eq_zero_and_existsUnique_iso_biprod, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/Perfect/ProjectiveAmplitude.lean, line 181.

Stacks 0BCG. If L has projective amplitude in [a, b], then every morphism from L to an object whose cohomology vanishes in all degrees ≥ a is zero. A distinguished triangle K ⟶ M ⟶ L ⟶ K⟦1⟧ has a splitting M ≅ K ⊞ L compatible with its maps as soon as the cohomology of K vanishes in all degrees ≥ a + 1; if it vanishes in all degrees ≥ a, that compatible splitting is moreover unique.

theorem hom_eq_zero_and_existsUnique_iso_biprod
    {R : Type u} [Ring R] (K L : DerivedCategory (ModuleCat.{v} R)) (a b : ℤ)
    (hL : HasProjectiveAmplitude L a b) :
    ((∀ i : ℤ, a ≤ i → IsZero ((DerivedCategory.homologyFunctor (ModuleCat.{v} R) i).obj K)) →
        ∀ f : L ⟶ K, f = 0) ∧
      ((∀ i : ℤ, a + 1 ≤ i →
          IsZero ((DerivedCategory.homologyFunctor (ModuleCat.{v} R) i).obj K)) →
        ∀ (M : DerivedCategory (ModuleCat.{v} R)) (f : K ⟶ M) (g : M ⟶ L)
          (h : L ⟶ K⟦(1 : ℤ)⟧),
          Triangle.mk f g h ∈ distTriang _ →
            ∃ e : M ≅ K ⊞ L, f ≫ e.hom = biprod.inl ∧ g = e.hom ≫ biprod.snd) ∧
      ((∀ i : ℤ, a ≤ i → IsZero ((DerivedCategory.homologyFunctor (ModuleCat.{v} R) i).obj K)) →
        ∀ (M : DerivedCategory (ModuleCat.{v} R)) (f : K ⟶ M) (g : M ⟶ L)
          (h : L ⟶ K⟦(1 : ℤ)⟧),
          Triangle.mk f g h ∈ distTriang _ →
            ∃! e : M ≅ K ⊞ L, f ≫ e.hom = biprod.inl ∧ g = e.hom ≫ biprod.snd)
Tag 0A1U, a lemma

Tag 0A1U in the Stacks Project.

StacksDraft.Perfect.exists_localization_perfect_truncGE_and_iso_biprod, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/Perfect/FibreCriterion/BaseChangeSurjective.lean, line 328.

Let R be a ring, p ⊂ R a prime and K a pseudo-coherent object of D(R). If for some i ∈ ℤ the map H^i(K) ⊗_R κ(p) → H^i(K ⊗_R^L κ(p)) is surjective, then there is f ∈ R, f ∉ p, such that τ_{≥ i+1}(K ⊗_R R_f) is a perfect object of D(R_f) with Tor amplitude in [i + 1, ∞], together with a canonical isomorphism K ⊗_R R_f ≅ τ_{≤ i}(K ⊗_R R_f) ⊕ τ_{≥ i+1}(K ⊗_R R_f) in D(R_f).

theorem exists_localization_perfect_truncGE_and_iso_biprod
    {R : Type u} [CommRing R] (p : Ideal R) [p.IsPrime]
    (K : DerivedCategory (ModuleCat.{max u v} R))
    (_hK : StacksDraft.PseudoCoherence.IsPseudoCoherent K) (i : ℤ)
    (hbase : CohomologyBaseChangeSurjective.{u, v} p K i) :
    ∃ f : R, f ∉ p ∧
      let Kf := (PseudoCoherence.localizationAwayFunctorAux.{u, v} f).obj K
      let upper := (DerivedCategory.TStructure.t.truncGE (i + 1)).obj Kf
      let lower := (DerivedCategory.TStructure.t.truncLE i).obj Kf
      IsPerfect upper ∧
        (∃ (P : CochainComplex (ModuleCat.{max u v} (Localization.Away f)) ℤ) (b : ℤ),
          P.IsStrictlyGE (i + 1) ∧ P.IsStrictlyLE b ∧
            (∀ j : ℤ, Module.Finite (Localization.Away f) (P.X j)) ∧
            (∀ j : ℤ, Module.Projective (Localization.Away f) (P.X j)) ∧
            Nonempty (upper ≅ DerivedCategory.Q.obj P) ∧
            ∀ (M : ModuleCat.{max u v} (Localization.Away f)) (j : ℤ), j < i + 1 →
              IsZero ((TorAmplitude.tensorComplex P M).homology j)) ∧
        ∃! e : Kf ≅ lower ⊞ upper,
          (DerivedCategory.TStructure.t.truncLEι i).app Kf ≫ e.hom = biprod.inl ∧
            (DerivedCategory.TStructure.t.truncGEπ (i + 1)).app Kf = e.hom ≫ biprod.snd
Tag 0A1V, a lemma

Tag 0A1V in the Stacks Project.

StacksDraft.Perfect.exists_localization_finite_free_homology_and_iso_biprod, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/Perfect/FibreCriterion/ThreeTermSplitting.lean, line 615.

Let R be a ring, p ⊂ R a prime and K a pseudo-coherent object of D(R). If for some i ∈ ℤ both maps H^i(K) ⊗_R κ(p) → H^i(K ⊗_R^L κ(p)) and H^{i-1}(K) ⊗_R κ(p) → H^{i-1}(K ⊗_R^L κ(p)) are surjective, then there is f ∈ R, f ∉ p, such that

  1. τ_{≥ i+1}(K ⊗_R R_f) is a perfect object of D(R_f) with Tor amplitude in [i + 1, ∞],
  2. H^i(K)_f is a finite free R_f-module, and
  3. there is a canonical direct sum decomposition K ⊗_R R_f ≅ τ_{≤ i-1}(K ⊗_R R_f) ⊕ H^i(K)_f[-i] ⊕ τ_{≥ i+1}(K ⊗_R R_f) in D(R_f).
theorem exists_localization_finite_free_homology_and_iso_biprod
    {R : Type u} [CommRing R] (p : Ideal R) [p.IsPrime]
    (K : DerivedCategory (ModuleCat.{max u v} R))
    (hK : StacksDraft.PseudoCoherence.IsPseudoCoherent K) (i : ℤ)
    (hbase_i : CohomologyBaseChangeSurjective.{u, v} p K i)
    (hbase_prev : CohomologyBaseChangeSurjective.{u, v} p K (i - 1)) :
    ∃ f : R, f ∉ p ∧
      let Rf := Localization.Away f
      let Kf := (PseudoCoherence.localizationAwayFunctorAux.{u, v} f).obj K
      let upper := (DerivedCategory.TStructure.t.truncGE (i + 1)).obj Kf
      let lower := (DerivedCategory.TStructure.t.truncLE (i - 1)).obj Kf
      let HiLocalized :=
        (ModuleCat.extendScalars (algebraMap R Rf)).obj
          ((DerivedCategory.homologyFunctor (ModuleCat.{max u v} R) i).obj K)
      let middle :=
        (DerivedCategory.singleFunctor (ModuleCat.{max u v} Rf) i).obj HiLocalized
      let comparison := (localizationAwayHomologyFunctorIso.{u, v} f i).app K
      IsPerfect upper ∧
        (∃ (P : CochainComplex (ModuleCat.{max u v} Rf) ℤ) (b : ℤ),
          P.IsStrictlyGE (i + 1) ∧ P.IsStrictlyLE b ∧
            (∀ j : ℤ, Module.Finite Rf (P.X j)) ∧
            (∀ j : ℤ, Module.Projective Rf (P.X j)) ∧
            Nonempty (upper ≅ DerivedCategory.Q.obj P) ∧
            ∀ (M : ModuleCat.{max u v} Rf) (j : ℤ), j < i + 1 →
              IsZero ((TorAmplitude.tensorComplex P M).homology j)) ∧
        Module.Finite Rf HiLocalized ∧ Module.Free Rf HiLocalized ∧
        ∃! e : Kf ≅ (lower ⊞ middle) ⊞ upper,
          (DerivedCategory.TStructure.t.truncLEι (i - 1)).app Kf ≫ e.hom =
              biprod.inl ≫ biprod.inl ∧
            (DerivedCategory.TStructure.t.truncGEπ (i + 1)).app Kf =
              e.hom ≫ biprod.snd ∧
            (DerivedCategory.homologyFunctor (ModuleCat.{max u v} Rf) i).map e.hom ≫
                (DerivedCategory.homologyFunctor (ModuleCat.{max u v} Rf) i).map biprod.fst ≫
                (DerivedCategory.homologyFunctor (ModuleCat.{max u v} Rf) i).map biprod.snd ≫
                (DerivedCategory.singleFunctorCompHomologyFunctorIso
                  (ModuleCat.{max u v} Rf) i).hom.app HiLocalized = comparison.hom
Tag 068U, a lemma

Tag 068U in the Stacks Project.

StacksDraft.Perfect.exists_localization_iso_biprod_truncGE_truncLE, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/Perfect/FibreCriterion/FibreCohomologyVanishing.lean, line 708.

Let R be a ring, p ⊂ R a prime, i ∈ ℤ and let K be a pseudo-coherent object of D(R) with H^i(K ⊗_R^L κ(p)) = 0. Then there is f ∈ R, f ∉ p, and a canonical direct sum decomposition K ⊗_R R_f = τ_{≥ i+1}(K ⊗_R R_f) ⊕ τ_{≤ i-1}(K ⊗_R R_f) in D(R_f), in which τ_{≥ i+1}(K ⊗_R R_f) is a perfect complex with Tor amplitude in [i + 1, ∞].

theorem exists_localization_iso_biprod_truncGE_truncLE
    {R : Type u} [CommRing R] (p : Ideal R) [p.IsPrime]
    (K : DerivedCategory (ModuleCat.{max u v} R))
    (_hK : StacksDraft.PseudoCoherence.IsPseudoCoherent K) (i : ℤ)
    (hfibre : FibreCohomologyVanishes.{u, v} p K i) :
    ∃ f : R, f ∉ p ∧
      let Kf := (PseudoCoherence.localizationAwayFunctorAux.{u, v} f).obj K
      let upper := (DerivedCategory.TStructure.t.truncGE (i + 1)).obj Kf
      let lower := (DerivedCategory.TStructure.t.truncLE (i - 1)).obj Kf
      IsPerfect upper ∧
        (∃ (P : CochainComplex (ModuleCat.{max u v} (Localization.Away f)) ℤ) (b : ℤ),
          P.IsStrictlyGE (i + 1) ∧ P.IsStrictlyLE b ∧
            (∀ j : ℤ, Module.Finite (Localization.Away f) (P.X j)) ∧
            (∀ j : ℤ, Module.Projective (Localization.Away f) (P.X j)) ∧
            Nonempty (upper ≅ DerivedCategory.Q.obj P) ∧
            ∀ (M : ModuleCat.{max u v} (Localization.Away f)) (j : ℤ), j < i + 1 →
              IsZero ((TorAmplitude.tensorComplex P M).homology j)) ∧
        ∃! e : Kf ≅ upper ⊞ lower,
          (DerivedCategory.TStructure.t.truncGEπ (i + 1)).app Kf = e.hom ≫ biprod.fst ∧
            (DerivedCategory.TStructure.t.truncLEι (i - 1)).app Kf ≫ e.hom = biprod.inr
Tag 0G97, a lemma

Tag 0G97 in the Stacks Project.

StacksDraft.ProjectiveAmplitude.existsUnique_iso_biprod_truncations_of_ext_map_injective, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/Perfect/ProjectiveAmplitude.lean, line 294.

Stacks 0G97. Let K be a bounded above object of D(R) and let a be an integer. Assume that for every injective R-module map M ⟶ M' the induced map Ext^{-a}(K, M) ⟶ Ext^{-a}(K, M') is injective. Then τ_{≥ a + 1}K has projective amplitude in [a + 1, b] for some b, and there is a unique direct sum decomposition K ≅ τ_{≤ a}K ⊞ τ_{≥ a + 1}K compatible with the two canonical truncation maps.

theorem existsUnique_iso_biprod_truncations_of_ext_map_injective
    {R : Type u} [Ring R] (K : DerivedCategory (ModuleCat.{max u v} R)) (a : ℤ)
    (hK : ∃ n : ℤ, K.IsLE n)
    (hExt : ∀ (M M' : ModuleCat.{max u v} R) (f : M ⟶ M'), Mono f →
      Function.Injective (fun x : DerivedCategory.Ext K
          ((DerivedCategory.singleFunctor (ModuleCat.{max u v} R) 0).obj M) (-a) ↦
        x.comp (ShiftedHom.mk₀ 0 rfl
          ((DerivedCategory.singleFunctor (ModuleCat.{max u v} R) 0).map f)) (zero_add _))) :
    ∃ b : ℤ,
      HasProjectiveAmplitude
          ((DerivedCategory.TStructure.t.truncGE (a + 1)).obj K) (a + 1) b ∧
        ∃! e : K ≅
            ((DerivedCategory.TStructure.t.truncLE a).obj K ⊞
              (DerivedCategory.TStructure.t.truncGE (a + 1)).obj K),
          (DerivedCategory.TStructure.t.truncLEι a).app K ≫ e.hom = biprod.inl ∧
            (DerivedCategory.TStructure.t.truncGEπ (a + 1)).app K =
              e.hom ≫ biprod.snd
Tag 0G98, a lemma

Tag 0G98 in the Stacks Project.

StacksDraft.ProjectiveAmplitude.existsUnique_iso_biprod_truncations_of_ext_vanishing, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/Perfect/ProjectiveAmplitude.lean, line 401.

Stacks 0G98. Let K be a bounded above object of D(R) and let a be an integer. Assume Ext^{-a}(K, M) = 0 for every R-module M. Then τ_{≥ a + 1}K has projective amplitude in [a + 1, b] for some b, and there is a unique direct sum decomposition K ≅ τ_{≤ a - 1}K ⊞ τ_{≥ a + 1}K compatible with the two canonical truncation maps.

theorem existsUnique_iso_biprod_truncations_of_ext_vanishing
    {R : Type u} [Ring R] (K : DerivedCategory (ModuleCat.{max u v} R)) (a : ℤ)
    (hK : ∃ n : ℤ, K.IsLE n)
    (hExt : ∀ M : ModuleCat.{max u v} R,
      Subsingleton (DerivedCategory.Ext K
        ((DerivedCategory.singleFunctor (ModuleCat.{max u v} R) 0).obj M) (-a))) :
    ∃ b : ℤ,
      HasProjectiveAmplitude
          ((DerivedCategory.TStructure.t.truncGE (a + 1)).obj K) (a + 1) b ∧
        ∃! e : K ≅
            ((DerivedCategory.TStructure.t.truncLE (a - 1)).obj K ⊞
              (DerivedCategory.TStructure.t.truncGE (a + 1)).obj K),
          (DerivedCategory.TStructure.t.truncLEι (a - 1)).app K ≫ e.hom = biprod.inl ∧
            (DerivedCategory.TStructure.t.truncGEπ (a + 1)).app K =
              e.hom ≫ biprod.snd
Sources

Section15.79 Recognizing perfect complexes#

Section 15.79 of the Stacks Project, Tag 0G99. 6 tags here are carried by 6 declarations of the repository (all in StacksFrontier), quoted below from AxiomMath/Stacks at commit 5ed82d14.

Tag 0BYP, a lemma

Tag 0BYP in the Stacks Project.

StacksDraft.Perfect.exists_away_bounded_free_complex_representing_of_fibre_vanishing_below, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/Perfect/MinimalRepresentative/PrincipalNeighbourhood.lean, line 756.

Stacks 0BYP. Let R be a commutative ring, p a prime of R and K a pseudo-coherent object of D(R) which is bounded below. Set dᵢ = dim_{κ(p)} Hⁱ(K ⊗ᴸ_R κ(p)). If dᵢ = 0 for all i < a, then there is an f ∈ R outside p such that K ⊗ᴸ_R R_f is perfect and is represented by a complex over R_f concentrated in degrees [a, b] whose term in degree i is free of rank exactly dᵢ.

theorem exists_away_bounded_free_complex_representing_of_fibre_vanishing_below
    {R : Type u} [CommRing R] (p : Ideal R) [p.IsPrime]
    (K : DerivedCategory (ModuleCat.{max v u} R))
    (hK : StacksDraft.PseudoCoherence.IsPseudoCoherent K)
    (hbounded : ∃ c : ℤ, K.IsGE c) (a : ℤ) :
    let k := p.ResidueField
    let H := fun i : ℤ =>
      (DerivedCategory.homologyFunctor (ModuleCat.{max v u} k) i).obj
        ((totalDerivedExtensionScalars.{u, u, v} (algebraMap R k)).functor.obj K)
    (∀ i : ℤ, i < a → IsZero (H i)) →
      ∃ f : R, f ∉ p ∧
        let Kf := (totalDerivedExtensionScalars.{u, u, v}
          (algebraMap R (Localization.Away f))).functor.obj K
        IsPerfect Kf ∧
          ∃ (P : CochainComplex (ModuleCat.{max v u} (Localization.Away f)) ℤ) (b : ℤ),
            P.IsStrictlyGE a ∧ P.IsStrictlyLE b ∧
              (∀ i : ℤ, Nonempty (P.X i ≅ ModuleCat.of (Localization.Away f)
                (ULift.{v} (Fin (Module.finrank k (H i)) → Localization.Away f)))) ∧
              Nonempty (DerivedCategory.Q.obj P ≅ Kf)
Tag 068V, a lemma

Tag 068V in the Stacks Project.

StacksDraft.Perfect.isPerfect_and_torAmplitude_iff_fibreCohomologyVanishes, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/Perfect/Local.lean, line 854.

Let R be a commutative ring, let a, b : ℤ and let K be a pseudo-coherent object of the derived category of R-modules. Then K is perfect of Tor amplitude in [a, b] if and only if the cohomology of the derived fibre K ⊗_R^L κ(p) vanishes outside [a, b] for every prime ideal p, and it is enough to test this at the maximal ideals.

Tor amplitude in [a, b] is expressed, as in [stacks 0658], by the existence of a flat representative supported in [a, b]; by [stacks 0654] this is exactly Tor amplitude in [a, b], and the third clause spells that out: every bounded above flat representative of K — which is what computes K ⊗_R^L M — has vanishing cohomology outside [a, b] after tensoring with an arbitrary module.

theorem isPerfect_and_torAmplitude_iff_fibreCohomologyVanishes {R : Type u} [CommRing R]
    (K : DerivedCategory (ModuleCat.{max u v} R))
    (hK : StacksDraft.PseudoCoherence.IsPseudoCoherent K) (a b : ℤ) :
    let perfectWithTorAmplitude :=
      IsPerfect K ∧ HasFlatRepresentative K a b ∧
        ∀ E : CochainComplex (ModuleCat.{max u v} R) ℤ, TorAmplitude.BoundedAbove E →
          TorAmplitude.IsComplexOfFlats E → Nonempty (K ≅ DerivedCategory.Q.obj E) →
            TorAmplitude.HasTorAmplitudeIn E a b
    let primeVanishes := ∀ q : PrimeSpectrum R, ∀ i : ℤ, i < a ∨ b < i →
      FibreCohomologyVanishes.{u, v} q.asIdeal K i
    let maximalVanishes := ∀ m : MaximalSpectrum R, ∀ i : ℤ, i < a ∨ b < i →
      FibreCohomologyVanishes.{u, v} m.asIdeal K i
    (perfectWithTorAmplitude ↔ primeVanishes) ∧ (primeVanishes ↔ maximalVanishes)
Tag 068W, a lemma

Tag 068W in the Stacks Project.

StacksDraft.Perfect.isPerfect_iff_isPerfect_at_primes_of_isBoundedBelow_and_stalkwise_criteria, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/Perfect/Local.lean, line 1250.

Let R be a commutative ring and let K be a pseudo-coherent object of the derived category of R-modules. Then K perfect implies that every stalk K ⊗_R^L R_p is perfect; perfectness at all prime stalks, perfectness at all maximal stalks, and the vanishing of the cohomology of the derived fibre K ⊗_R^L κ(p) in all sufficiently low degrees at every prime or at every maximal ideal are equivalent; and if K is bounded below these are also equivalent to perfectness of K itself.

The derived base change is the canonical one of [stacks 064H], CochainComplex.DerivedExtensionScalars.totalDerivedExtensionScalars.

theorem isPerfect_iff_isPerfect_at_primes_of_isBoundedBelow_and_stalkwise_criteria
    {R : Type u} [CommRing R] (K : DerivedCategory (ModuleCat.{max u v} R))
    (hK : StacksDraft.PseudoCoherence.IsPseudoCoherent K) :
    let perfect := IsPerfect K
    let perfectAtPrimes := ∀ q : PrimeSpectrum R,
      IsPerfect ((CochainComplex.DerivedExtensionScalars.totalDerivedExtensionScalars.{u, u, v}
        (algebraMap R (Localization.AtPrime q.asIdeal))).functor.obj K)
    let perfectAtMaximals := ∀ m : MaximalSpectrum R,
      IsPerfect ((CochainComplex.DerivedExtensionScalars.totalDerivedExtensionScalars.{u, u, v}
        (algebraMap R (Localization.AtPrime m.asIdeal))).functor.obj K)
    let fibreVanishesBelowAtPrimes := ∀ q : PrimeSpectrum R,
      ∃ a : ℤ, ∀ i : ℤ, i < a →
        IsZero ((DerivedCategory.homologyFunctor
          (ModuleCat.{max u v} q.asIdeal.ResidueField) i).obj
            ((CochainComplex.DerivedExtensionScalars.totalDerivedExtensionScalars.{u, u, v}
              (algebraMap R q.asIdeal.ResidueField)).functor.obj K))
    let fibreVanishesBelowAtMaximals := ∀ m : MaximalSpectrum R,
      ∃ a : ℤ, ∀ i : ℤ, i < a →
        IsZero ((DerivedCategory.homologyFunctor
          (ModuleCat.{max u v} m.asIdeal.ResidueField) i).obj
            ((CochainComplex.DerivedExtensionScalars.totalDerivedExtensionScalars.{u, u, v}
              (algebraMap R m.asIdeal.ResidueField)).functor.obj K))
    (perfect → perfectAtPrimes) ∧
      (perfectAtPrimes ↔ perfectAtMaximals) ∧
      (perfectAtPrimes ↔ fibreVanishesBelowAtPrimes) ∧
      (perfectAtMaximals ↔ fibreVanishesBelowAtMaximals) ∧
      ((∃ a : ℤ, K.IsGE a) → (perfect ↔ perfectAtPrimes))
Tag 0G9A, a lemma

Tag 0G9A in the Stacks Project.

StacksDraft.ProjectiveAmplitude.hasProjectiveAmplitude_iff_perfect_iff_ext_vanishing, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/Perfect/ProjectiveAmplitude.lean, line 989.

Stacks 0G9A. Let K be a pseudo-coherent object of D(R) and let a, b be integers. The following are equivalent: (1) K has projective amplitude in [a, b]; (2) K is perfect and has Tor amplitude in [a, b], recorded by the existence of a flat representative supported in [a, b]; (3) Ext^i(K, N) = 0 for every finitely presented R-module N and every i ∉ [-b, -a]; (4) H^n(K) = 0 for n > b and Ext^i(K, N) = 0 for every finitely presented N and every i > -a; (5) H^n(K) = 0 for n ∉ [a - 1, b] and Ext^{-a + 1}(K, N) = 0 for every finitely presented N.

theorem hasProjectiveAmplitude_iff_perfect_iff_ext_vanishing
    {R : Type u} [CommRing R] (K : DerivedCategory (ModuleCat.{max u v} R))
    (hK : StacksDraft.PseudoCoherence.IsPseudoCoherent K) (a b : ℤ) :
    let moduleObject := fun N : ModuleCat.{max u v} R ↦
      (DerivedCategory.singleFunctor (ModuleCat.{max u v} R) 0).obj N
    let projectiveAmplitude := HasProjectiveAmplitude K a b
    let perfectTorAmplitude := Perfect.IsPerfect K ∧ Perfect.HasFlatRepresentative K a b
    let extOutsideVanishes := ∀ N : ModuleCat.{max u v} R, Module.FinitePresentation R N →
      ∀ i : ℤ, i ∉ Set.Icc (-b) (-a) →
        Subsingleton (DerivedCategory.Ext K (moduleObject N) i)
    let upperVanishing :=
      (∀ n : ℤ, b < n →
          IsZero ((DerivedCategory.homologyFunctor (ModuleCat.{max u v} R) n).obj K)) ∧
        ∀ N : ModuleCat.{max u v} R, Module.FinitePresentation R N →
          ∀ i : ℤ, -a < i → Subsingleton (DerivedCategory.Ext K (moduleObject N) i)
    let endpointVanishing :=
      (∀ n : ℤ, n ∉ Set.Icc (a - 1) b →
          IsZero ((DerivedCategory.homologyFunctor (ModuleCat.{max u v} R) n).obj K)) ∧
        ∀ N : ModuleCat.{max u v} R, Module.FinitePresentation R N →
          Subsingleton (DerivedCategory.Ext K (moduleObject N) (-a + 1))
    (projectiveAmplitude ↔ perfectTorAmplitude) ∧
      (perfectTorAmplitude ↔ extOutsideVanishes) ∧
      (extOutsideVanishes ↔ upperVanishing) ∧
      (upperVanishing ↔ endpointVanishing)
Tag 068X, a lemma

Tag 068X in the Stacks Project.

StacksDraft.Perfect.isPerfect_and_torAmplitude_of_flat_of_fibre_globalDimension_le, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/Perfect/FibreDescent.lean, line 530. References: SGA 6 III (4.4), “(ii), special case”.

Stacks 068X. Let A → B be a flat map of commutative rings, let a, b : ℤ and let d ≥ 0 be an integer such that for every prime p of A the fibre ring B ⊗_A κ(p) has global dimension at most d. Let K be an object of the derived category of B-modules which is pseudo-coherent as a complex of B-modules and has Tor amplitude in [a, b] as a complex of A-modules. Then K is perfect as a complex of B-modules with Tor amplitude in [a - d, b].

Tor amplitude is recorded as in [stacks 068V]: by a flat representative supported in the window, which by [stacks 0654] is exactly Tor amplitude, together with the termwise condition on every bounded above flat representative. The hypothesis over A is the same condition for the complex of A-modules underlying K, and hasTorAmplitudeIn_flatRepresentative_of_hasTorAmplitude derives it from derived Tor amplitude against any certified derived tensor product.

theorem isPerfect_and_torAmplitude_of_flat_of_fibre_globalDimension_le [Module.Flat A B]
    (a b : ℤ) (d : ℕ)
    (hfibre : ∀ p : PrimeSpectrum A,
      ringGlobalDimension (TensorProduct A B p.asIdeal.ResidueField) ≤ (d : ℕ))
    (K : DerivedCategory (ModuleCat.{u} B))
    (hK : StacksDraft.PseudoCoherence.IsPseudoCoherent K)
    (hamp : ∀ F : CochainComplex (ModuleCat.{u} A) ℤ, TorAmplitude.BoundedAbove F →
      TorAmplitude.IsComplexOfFlats F →
      Nonempty ((ModuleCat.restrictScalars (algebraMap A B)).mapDerivedCategory.obj K ≅
        DerivedCategory.Q.obj F) → TorAmplitude.HasTorAmplitudeIn F a b) :
    IsPerfect K ∧ HasFlatRepresentative.{u, u} K (a - (d : ℤ)) b ∧
      ∀ E : CochainComplex (ModuleCat.{u} B) ℤ, TorAmplitude.BoundedAbove E →
        TorAmplitude.IsComplexOfFlats E → Nonempty (K ≅ DerivedCategory.Q.obj E) →
          TorAmplitude.HasTorAmplitudeIn E (a - (d : ℤ)) b
Tag 09PC, a lemma

Tag 09PC in the Stacks Project.

StacksDraft.Perfect.isPerfect_and_torAmplitude_of_flat_local_of_regular_closedFibre, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/Perfect/FibreDescent.lean, line 620.

Stacks 09PC. Let A → B be a flat local homomorphism of local rings, let a, b : ℤ and let d ≥ 0 be an integer such that the closed fibre B/m_A B is regular of dimension d. Let K be an object of the derived category of B-modules which is pseudo-coherent as a complex of B-modules and whose derived fibre K ⊗_A^L κ(m_A) has cohomology only in the degrees [a, b]. Then K is perfect as a complex of B-modules with Tor amplitude in [a - d, b].

The source states the hypothesis over A as Tor amplitude in [a, b] and remarks that the weaker condition on the derived fibre suffices; it is that weaker hypothesis which is used here. Tor amplitude in the conclusion is recorded as in [stacks 068V]: by a flat representative supported in the window, which by [stacks 0654] is exactly Tor amplitude, together with the termwise condition on every bounded above flat representative. The derived fibre over A is computed on a bounded above flat representative of the complex of A-modules underlying K, which is what the termwise tensor product with κ(m_A) of such a representative is.

theorem isPerfect_and_torAmplitude_of_flat_local_of_regular_closedFibre [IsLocalRing B]
    [IsLocalHom (algebraMap A B)] [Module.Flat A B] (a b : ℤ) (d : ℕ)
    [IsRegularLocalRing (B ⧸ Ideal.map (algebraMap A B) (maximalIdeal A))]
    (hdim : ringKrullDim (B ⧸ Ideal.map (algebraMap A B) (maximalIdeal A)) = (d : WithBot ℕ∞))
    (K : DerivedCategory (ModuleCat.{u} B))
    (hK : StacksDraft.PseudoCoherence.IsPseudoCoherent K)
    (hfibre : ∀ F : CochainComplex (ModuleCat.{u} A) ℤ, TorAmplitude.BoundedAbove F →
      TorAmplitude.IsComplexOfFlats F →
      Nonempty ((ModuleCat.restrictScalars (algebraMap A B)).mapDerivedCategory.obj K ≅
        DerivedCategory.Q.obj F) →
      ∀ i : ℤ, (i < a ∨ b < i) →
        IsZero ((TorAmplitude.tensorComplex F
          (ModuleCat.of A (maximalIdeal A).ResidueField)).homology i)) :
    IsPerfect K ∧ HasFlatRepresentative.{u, u} K (a - (d : ℤ)) b ∧
      ∀ E : CochainComplex (ModuleCat.{u} B) ℤ, TorAmplitude.BoundedAbove E →
        TorAmplitude.IsComplexOfFlats E → Nonempty (K ≅ DerivedCategory.Q.obj E) →
          TorAmplitude.HasTorAmplitudeIn E (a - (d : ℤ)) b
Sources

Section15.80 Characterizing perfect complexes#

Section 15.80 of the Stacks Project, Tag 07LQ. 5 tags here are carried by 5 declarations of the repository (all in StacksFrontier), quoted below from AxiomMath/Stacks at commit 5ed82d14.

Tag 0ATI, a lemma

Tag 0ATI in the Stacks Project.

StacksDraft.Perfect.isPerfect_eq_triangEnvelope_singleton_regularModule, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/Perfect/Characterizing.lean, line 330.

Stacks 0ATI. The perfect objects of D(R) form the smallest strictly full, saturated, triangulated subcategory containing the regular module R in degree zero. Equivalently, R[0] is a classical generator of the perfect derived category.

theorem isPerfect_eq_triangEnvelope_singleton_regularModule {R : Type u} [Ring R] :
    (IsPerfect : ObjectProperty (DerivedCategory (ModuleCat.{u} R))) =
      (ObjectProperty.singleton
        ((DerivedCategory.singleFunctor (ModuleCat.{u} R) 0).obj
          (ModuleCat.of R R))).triangEnvelope
Tag 07LR, a lemma

Tag 07LR in the Stacks Project.

Stacks.MappingTelescope.isIso_colimHomComparison, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/DerivedCategory/HomColimit.lean, line 451.

Stacks 07LR. Let R be a ring and let K ∈ D(R) be such that for every sequence (E_n) of objects of D(R) with a coproduct, the canonical map ⨁_n Hom_{D(R)}(K, E_n) → Hom_{D(R)}(K, ⨁_n E_n) is an isomorphism. Then for every system of complexes (L_n, t_n) over ℕ with termwise colimit L, the canonical map colim_n Hom_{D(R)}(K, L_n) → Hom_{D(R)}(K, L) is an isomorphism.

theorem isIso_colimHomComparison (K : DMod R) (hK : CommutesWithCountableCoproducts K)
    (L : System R) :
    IsIso (colimHomComparison L K)
Tag 07LT, a proposition

Tag 07LT in the Stacks Project.

StacksDraft.Perfect.isPerfect_iff_isCompactObject, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/Perfect/Characterizing.lean, line 1129.

Stacks 07LT. An object of the derived category of modules over a ring is perfect if and only if it is compact. Perfectness is thus intrinsic to the triangulated category D(R) with its coproducts, referring neither to a representing complex nor to the ring.

theorem isPerfect_iff_isCompactObject
    {R : Type u} [Ring R] (K : DerivedCategory (ModuleCat.{u} R)) :
    IsPerfect K ↔ IsCompactObject.{u} K
Tag 07LU, a lemma

Tag 07LU in the Stacks Project.

StacksDraft.Perfect.isPerfect_of_isPerfect_mod_isNilpotent, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/Perfect/NilpotentLifting.lean, line 884.

Stacks 07LU. An object of D(R) whose derived reduction modulo a nilpotent ideal I is perfect is itself perfect.

A bounded complex of finite projective R ⧸ I-modules representing the reduction lifts, by [stacks 09AR], to a bounded above complex P of projective R-modules representing K. Each term of P is finite because its reduction is, by Nakayama for a nilpotent ideal (finite_of_finite_quotient_of_isNilpotent), and P vanishes below the lower bound of the given complex because a module with vanishing reduction modulo a nilpotent ideal vanishes.

public theorem isPerfect_of_isPerfect_mod_isNilpotent
    {R : Type u} [CommRing R] (I : Ideal R)
    (K : DerivedCategory (ModuleCat.{max v u} R))
    (hK : IsPerfect
      ((totalDerivedExtensionScalars.{u, u, v} (Ideal.Quotient.mk I)).functor.obj K))
    (hI : IsNilpotent I) :
    IsPerfect K
Tag 09AS, a lemma

Tag 09AS in the Stacks Project.

StacksDraft.Perfect.isPerfect_derivedReduction_mul, a theorem in StacksFrontier (drafted, not yet reviewed), declared in StacksFrontier/Homology/Perfect/ProductOfIdeals.lean, line 621.

Stacks 09AS. Let I and J be ideals of a commutative ring R and let K be an object of the derived category of R-modules. If the derived reductions of K modulo I and modulo J are both perfect, then so is the derived reduction of K modulo I * J.

Perfectness modulo I ∩ J follows from isPerfect_of_isPerfect_reductions, applied over the ring R/(I ∩ J) where the images of I and of J meet in zero; and R/(I * J) → R/(I ∩ J) is surjective with nilpotent kernel, so perfectness descends along it.

theorem isPerfect_derivedReduction_mul (I J : Ideal R)
    (K : DerivedCategory (ModuleCat.{max u v} R))
    (hI : IsPerfect
      ((totalDerivedExtensionScalars.{u, u, v} (Ideal.Quotient.mk I)).functor.obj K))
    (hJ : IsPerfect
      ((totalDerivedExtensionScalars.{u, u, v} (Ideal.Quotient.mk J)).functor.obj K)) :
    IsPerfect
      ((totalDerivedExtensionScalars.{u, u, v} (Ideal.Quotient.mk (I * J))).functor.obj K)
Sources

The dependency explorer needs JavaScript and its graph data.

Download the complete graph data.