Documentation

DerivedAlgGeo.Algebra.Homology.DerivedCategory.Ext.Adjunction

Ext along an adjunction with exact left adjoint #

For L ⊣ R between abelian categories with L and R exact, there is a comparison

Ext^n (L A) B → Ext^n A (R B)

pushing a class along R and precomposing with the unit. This file constructs it, proves it is additive, and settles the two ends of the intended induction: degree zero, and positive degree on an injective.

Why this file exists #

Sheaf.H n F is Ext out of the constant sheaf — the derived-category Ext of Algebra/Homology/DerivedCategory/Ext/, not the injective-resolution Ext R C n of CategoryTheory/Abelian/Ext.lean. So the cohomology comparison #572 step 3 asks for, Hⁱ(X, F) ≅ Hⁱ(Pⁿ, ι_* F) along a closed immersion, is an Ext transport along ι⁻¹ ⊣ ι_* and not a Čech computation. Sites/Sheaves/ConstantPullback.lean moved the constant sheaf across that adjunction; this file is the other half.

Nothing at the pin relates Ext to an adjunction. Grepping Algebra/Homology/ and CategoryTheory/Abelian/ returns nothing under any spelling, so the statement here is new to the tree and is not specific to sheaves — it is stated for arbitrary abelian categories.

Exactness of R is a real hypothesis #

Ext.mapExactFunctor requires its functor exact, so R is assumed exact and not merely left exact. That is legitimate for the intended application — ι_* along a closed immersion is exact — but it is not the general shape of an adjunction, and a caller who has only a left-exact right adjoint gets nothing from this file.

The theorem #

extAdjunctionAddEquiv — the comparison is an isomorphism of additive groups in every degree. EnoughInjectives D is what the proof needs and the only hypothesis beyond exactness.

Both halves are inductions on the degree, and both run on the same three-step shape: embed B ↪ I with I injective, take the cokernel Q, and use that R carries that short exact sequence to a short exact sequence in C whose middle term R I is again injective — which is preservesInjectiveObjects_of_adj, and is the reason the argument closes at all.

The degree-zero base cases are extAdjunctionMap_mk₀: there the comparison is the adjunction's hom-equivalence, which is bijective because Adjunction.homEquiv is an Equiv.

bijective_extAdjunctionMap_of_injective is not used by either induction. It is kept because it is the statement that makes the shape plausible before the induction is written, and because it is the cheap sanity check on the setup: if the comparison were wrong, it would already fail there.

A rw/simp trap worth recording #

Ext.mk₀_comp_mk₀ is @[simp], its statement matches extAdjunctionMap's composite at degree zero syntactically, and neither rw nor simp closes the goal — the degree-addition proof term does not unify. exact Ext.mk₀_comp_mk₀ _ _ does. The same shape will recur anywhere Ext.comp is unfolded at a specific degree.

Main results #

noncomputable def CategoryTheory.extAdjunctionMap {C : Type u} [Category.{v, u} C] [Abelian C] {D : Type u'} [Category.{v', u'} D] [Abelian D] {L : Functor C D} {R : Functor D C} (adj : L ⊣ R) [R.Additive] [Limits.PreservesFiniteLimits R] [Limits.PreservesFiniteColimits R] [HasExt C] [HasExt D] {A : C} {B : D} {n : ℕ} (e : Abelian.Ext (L.obj A) B n) :
Abelian.Ext A (R.obj B) n

The comparison Ext^n (L A) B → Ext^n A (R B).

Push the class along R, then precompose with the unit of the adjunction. Both steps need R exact: Ext.mapExactFunctor is only defined for an exact functor.

Equations
Instances For
    @[simp]
    theorem CategoryTheory.extAdjunctionMap_zero {C : Type u} [Category.{v, u} C] [Abelian C] {D : Type u'} [Category.{v', u'} D] [Abelian D] {L : Functor C D} {R : Functor D C} (adj : L ⊣ R) [R.Additive] [Limits.PreservesFiniteLimits R] [Limits.PreservesFiniteColimits R] [HasExt C] [HasExt D] {A : C} {B : D} {n : ℕ} :
    theorem CategoryTheory.extAdjunctionMap_add {C : Type u} [Category.{v, u} C] [Abelian C] {D : Type u'} [Category.{v', u'} D] [Abelian D] {L : Functor C D} {R : Functor D C} (adj : L ⊣ R) [R.Additive] [Limits.PreservesFiniteLimits R] [Limits.PreservesFiniteColimits R] [HasExt C] [HasExt D] {A : C} {B : D} {n : ℕ} (e f : Abelian.Ext (L.obj A) B n) :
    noncomputable def CategoryTheory.extAdjunctionAddHom {C : Type u} [Category.{v, u} C] [Abelian C] {D : Type u'} [Category.{v', u'} D] [Abelian D] {L : Functor C D} {R : Functor D C} (adj : L ⊣ R) [R.Additive] [Limits.PreservesFiniteLimits R] [Limits.PreservesFiniteColimits R] [HasExt C] [HasExt D] (A : C) (B : D) (n : ℕ) :
    Abelian.Ext (L.obj A) B n →+ Abelian.Ext A (R.obj B) n

    The comparison as an additive map, which is how the induction consumes it: the long exact sequences of Ext are sequences of additive groups, and a bare function does not map into them.

    Equations
    Instances For
      @[simp]
      theorem CategoryTheory.extAdjunctionAddHom_apply {C : Type u} [Category.{v, u} C] [Abelian C] {D : Type u'} [Category.{v', u'} D] [Abelian D] {L : Functor C D} {R : Functor D C} (adj : L ⊣ R) [R.Additive] [Limits.PreservesFiniteLimits R] [Limits.PreservesFiniteColimits R] [HasExt C] [HasExt D] (A : C) (B : D) (n : ℕ) (e : Abelian.Ext (L.obj A) B n) :
      theorem CategoryTheory.extAdjunctionMap_comp {C : Type u} [Category.{v, u} C] [Abelian C] {D : Type u'} [Category.{v', u'} D] [Abelian D] {L : Functor C D} {R : Functor D C} (adj : L ⊣ R) [R.Additive] [Limits.PreservesFiniteLimits R] [Limits.PreservesFiniteColimits R] [HasExt C] [HasExt D] {A : C} {Y Z : D} {a b c : ℕ} (x : Abelian.Ext (L.obj A) Y a) (e : Abelian.Ext Y Z b) (h : a + b = c) :

      The comparison is natural in the second variable.

      Post-composing before or after the comparison gives the same class. This is the lemma the induction step runs on: it is what makes the comparison a morphism of the two long exact sequences rather than a family of unrelated maps.

      The proof is Ext.mapExactFunctor_comp followed by associativity — no exactness of the sequences and no injectivity is used, so it holds for arbitrary classes in arbitrary degrees.

      theorem CategoryTheory.extAdjunctionMap_comp_mk₀ {C : Type u} [Category.{v, u} C] [Abelian C] {D : Type u'} [Category.{v', u'} D] [Abelian D] {L : Functor C D} {R : Functor D C} (adj : L ⊣ R) [R.Additive] [Limits.PreservesFiniteLimits R] [Limits.PreservesFiniteColimits R] [HasExt C] [HasExt D] {A : C} {Y Z : D} {a : ℕ} (x : Abelian.Ext (L.obj A) Y a) (f : Y ⟶ Z) :

      Naturality against a morphism, the Ext.mk₀ case of extAdjunctionMap_comp.

      This is the square for the two "easy" maps of the long exact sequences — the ones induced by S.f and S.g.

      theorem CategoryTheory.extAdjunctionMap_comp_extClass {C : Type u} [Category.{v, u} C] [Abelian C] {D : Type u'} [Category.{v', u'} D] [Abelian D] {L : Functor C D} {R : Functor D C} (adj : L ⊣ R) [R.Additive] [Limits.PreservesFiniteLimits R] [Limits.PreservesFiniteColimits R] [HasExt C] [HasExt D] {A : C} {S : ShortComplex D} (hS : S.ShortExact) {n₀ n₁ : ℕ} (hn₁ : n₀ + 1 = n₁) (x₃ : Abelian.Ext (L.obj A) S.X₃ n₀) :
      extAdjunctionMap adj (x₃.comp hS.extClass hn₁) = (extAdjunctionMap adj x₃).comp ⋯.extClass hn₁

      The connecting square.

      The comparison commutes with the connecting class of a short exact sequence. R is exact, so it carries S to a short exact sequence in C, and Ext.mapExactFunctor_extClass says the connecting class goes along with it.

      Together with extAdjunctionMap_comp_mk₀ this makes the comparison a morphism of the two long exact sequences, which is the entire structural input to the dimension-shifting induction.

      In degree zero the comparison is the adjunction's hom-equivalence.

      Stated in Ext.mk₀ form rather than through Ext.homEquiv₀, because that is the form the induction's base case needs and it avoids a round trip through the equivalence.

      The proof is three rewrites and then exact, not simp — see the module docstring on Ext.mk₀_comp_mk₀.

      A right adjoint whose left adjoint preserves monomorphisms preserves injectives.

      Not an instance: adj is not inferrable from R alone, so instance search cannot find it. Every use is an explicit haveI.

      The target vanishes in positive degree, because R B is injective.

      The comparison is bijective in positive degree on an injective.

      Both sides are subsingletons — the source by Ext.subsingleton_of_injective directly, the target by subsingleton_ext_right_of_injective — so there is nothing to check. This is the base case the dimension shift descends to, and it is the only reason the induction terminates.

      In degree zero the comparison is bijective: it is the adjunction hom-equivalence transported through Ext.mk₀.

      The comparison is surjective in every degree.

      This is surjective_extComparisonMap for u := adj.unit.app A: degree zero is the adjunction, and R I is injective for injective I (preservesInjectiveObjects_of_adj), hence acyclic.

      The comparison is injective in every degree. Likewise a special case of injective_extComparisonMap.

      Ext along an adjunction with exact left adjoint.

      Ext^n (L A) B ≃+ Ext^n A (R B), for every n. This is the statement the cohomology comparison of #572 step 3 instantiates at L = ι⁻¹, R = ι_* for a closed immersion.

      Equations
      Instances For
        noncomputable def CategoryTheory.extAdjunctionLinearMap {C : Type u} [Category.{v, u} C] [Abelian C] {D : Type u'} [Category.{v', u'} D] [Abelian D] {L : Functor C D} {R : Functor D C} (adj : L ⊣ R) [R.Additive] [Limits.PreservesFiniteLimits R] [Limits.PreservesFiniteColimits R] [HasExt C] [HasExt D] {S : Type t} [CommRing S] [Linear S C] [Linear S D] [Functor.Linear S R] (A : C) (B : D) (n : ℕ) :
        Abelian.Ext (L.obj A) B n →ₗ[S] Abelian.Ext A (R.obj B) n

        The Ext comparison along a linear exact right adjoint is linear.

        The scalar on an Ext class is postcomposition by the corresponding scalar endomorphism. The exact functor R carries scalar multiples to scalar multiples, and Ext composition is linear in the second variable.

        Equations
        Instances For
          @[simp]
          theorem CategoryTheory.extAdjunctionLinearMap_apply {C : Type u} [Category.{v, u} C] [Abelian C] {D : Type u'} [Category.{v', u'} D] [Abelian D] {L : Functor C D} {R : Functor D C} (adj : L ⊣ R) [R.Additive] [Limits.PreservesFiniteLimits R] [Limits.PreservesFiniteColimits R] [HasExt C] [HasExt D] {S : Type t} [CommRing S] [Linear S C] [Linear S D] [Functor.Linear S R] (A : C) (B : D) (n : ℕ) (a✝ : Abelian.Ext (L.obj A) B n) :
          (extAdjunctionLinearMap adj A B n) a✝ = (↑(extAdjunctionAddHom adj A B n)).toFun a✝

          Linear Ext along an adjunction with exact left adjoint.

          This is extAdjunctionAddEquiv with its canonical scalar compatibility exposed. Only the right adjoint must be linear: it is the functor applied to Ext classes in the comparison map.

          Equations
          Instances For
            noncomputable def CategoryTheory.Abelian.Ext.precompAddEquiv {C : Type u} [Category.{v, u} C] [Abelian C] [HasExt C] {X X' : C} (e : X ≅ X') (B : C) (n : ℕ) :
            Ext X' B n ≃+ Ext X B n

            Precomposition with an isomorphism is an isomorphism of Ext groups.

            Not in Mathlib at the pin under any spelling, and needed the moment a comparison identifies the first variable up to isomorphism rather than on the nose — which is exactly what happens when the constant sheaf is carried across a pullback.

            Equations
            • One or more equations did not get rendered due to their size.
            Instances For
              noncomputable def CategoryTheory.Abelian.Ext.precompLinearEquiv {C : Type u} [Category.{v, u} C] [Abelian C] [HasExt C] {S : Type t} [CommRing S] [Linear S C] {X X' : C} (e : X ≅ X') (B : C) (n : ℕ) :
              Ext X' B n ≃ₗ[S] Ext X B n

              Linear transport in the first variable of Ext along an isomorphism.

              This is the scalar-compatible refinement of precompAddEquiv. The scalar action on Ext is linear in either argument of the Yoneda product, so precomposition with the degree-zero class of an isomorphism is linear.

              Equations
              • One or more equations did not get rendered due to their size.
              Instances For