Documentation

DerivedAlgGeo.Algebra.MvPolynomial.LaurentBlock

The block decomposition of an away localization #

Step 2 of #340's proof plan decomposes the Čech complex of O(d) by the negative support N α = {j | α j < 0} of the Laurent exponent: the differential preserves N α, each block with a cone point contracts, and for d ≥ 0 every block has a cone point. This file supplies the decomposition at the level of one away localization (A(d)_{Xᵞ})₀, in the form the vanishing argument consumes.

The decomposition is deliberately not packaged as a direct-sum isomorphism or a ∏_F-indexed complex. The consumer — "every positive-degree cocycle is a coboundary" — needs exactly a family of additive projections blockProj γ F d with

Main definitions #

Implementation notes #

laurentFilter is characterised coefficientwise by coeff_laurentFilter_of_eq and coeff_laurentFilter_of_ne, and every identity about it is proved by ext plus a case split on the block of the exponent. This keeps the Finset.filter in its definition — and the classical decidability instance it needs — out of every statement.

laurentFilter_monomial_mul is the single shift identity behind both well-definedness and the face square. Multiplying the numerator by Xᵟ and moving the denominator data from (γ, m) to (γ', m') fixes every Laurent exponent as soon as σ + m • γ = m' • γ'; raising a representative (σ = t • γ) and applying a Čech face (σ = m • single e c) are the two instances, so one lemma serves where #526 needed divMonomial_pow_mul and #539 needed divMonomial_monomial_mul_comm separately.

blockProj descends to the localization through Exists.choose exactly as signProjection does, and everything must go through blockProj_awayMk; the definition itself has no useful rfl behaviour.

Tags #

Laurent monomial, negative support, block decomposition, graded module

The negative support of a Laurent exponent #

noncomputable def MvPolynomial.intNegSupport {ι : Type u} (α : ι →₀ ℤ) :

The negative support of an integer exponent vector: the variables that occur with a negative exponent. This is the N α of #340's proof plan; the block of a Laurent monomial is its negative support, and the Čech differential preserves it.

Equations
Instances For
    theorem MvPolynomial.mem_intNegSupport {ι : Type u} {α : ι →₀ ℤ} {j : ι} :
    j ∈ intNegSupport α ↔ α j < 0

    The negative support of a Laurent exponent lies inside the support of the denominator: a variable the localization does not invert cannot go negative. This is laurentExponent_nonneg_of_apply_eq_zero read as a Finset inclusion, and it is what makes γ.support.powerset a complete block index for (A(d)_{Xᵞ})₀.

    theorem MvPolynomial.finite_setOf_degree_eq_of_neg {ι : Type u} [Fintype ι] (d : ℤ) :
    {α : ι →₀ ℤ | Finsupp.degree α = d ∧ ∀ (j : ι), α j < 0}.Finite

    The full block is indexed by finitely many Laurent exponents.

    An exponent in the block of every variable is negative in every coordinate, and its coordinates sum to the twist. Each coordinate is therefore trapped between -1 above and d + (card ι) - 1 below — the latter because the other card ι - 1 coordinates contribute at most -1 each — so the exponents form a subset of a finite box.

    This is the finiteness the top cohomology of Pⁿ rests on. Below the top degree the full block is empty for a counting reason (cechBlockProj_eq_zero_of_card_lt); in the top degree it is not, and this says it is at least small. Note the set is empty unless d ≤ -(card ι), which is Serre's Hⁿ(Pⁿ, O(d)) = 0 for d > -(n+1) in exponent form — but that is a consequence, not what is proved here.

    theorem MvPolynomial.laurentExponent_sub_of_add_eq {ι : Type u} {γ γ' σ β : ι →₀ ℕ} {m m' : ℕ} (hσ : σ + m • γ = m' • γ') (hle : σ ≤ β) :
    γ.laurentExponent m (β - σ) = γ'.laurentExponent m' β

    The shift identity for Laurent exponents. Multiplying a numerator exponent by Xᵟ while the denominator data moves from (γ, m) to (γ', m') fixes the Laurent exponent as soon as σ + m • γ = m' • γ'. Raising a representative and applying a Čech face are both instances.

    Filtering a numerator by block #

    noncomputable def MvPolynomial.laurentFilter {ι R : Type u} [CommRing R] (γ : ι →₀ ℕ) (m : ℕ) (F : Finset ι) (p : MvPolynomial ι R) :

    Keep the monomials of a numerator whose Laurent exponent over (Xᵞ)ᵐ has negative support exactly F. Characterised coefficientwise by coeff_laurentFilter_of_eq and coeff_laurentFilter_of_ne; the classical decidability this definition needs never reaches a statement.

    Equations
    Instances For
      theorem MvPolynomial.coeff_laurentFilter_of_eq {ι R : Type u} [CommRing R] {γ : ι →₀ ℕ} {m : ℕ} {F : Finset ι} {β : ι →₀ ℕ} (h : intNegSupport (γ.laurentExponent m β) = F) (p : MvPolynomial ι R) :
      coeff β (laurentFilter γ m F p) = coeff β p
      theorem MvPolynomial.coeff_laurentFilter_of_ne {ι R : Type u} [CommRing R] {γ : ι →₀ ℕ} {m : ℕ} {F : Finset ι} {β : ι →₀ ℕ} (h : intNegSupport (γ.laurentExponent m β) ≠ F) (p : MvPolynomial ι R) :
      coeff β (laurentFilter γ m F p) = 0
      theorem MvPolynomial.laurentFilter_add {ι R : Type u} [CommRing R] (γ : ι →₀ ℕ) (m : ℕ) (F : Finset ι) (p q : MvPolynomial ι R) :
      laurentFilter γ m F (p + q) = laurentFilter γ m F p + laurentFilter γ m F q

      Filtering is additive in the numerator, which is what the block projection's additivity descends from.

      theorem MvPolynomial.IsPolynomialTwist.laurentFilter_mem {ι R : Type u} [CommRing R] {σM : Type u} [SetLike σM (MvPolynomial ι R)] {𝓜 : ℕ → σM} {d : ℤ} (h𝓜 : IsPolynomialTwist 𝓜 d) {γ : ι →₀ ℕ} {F : Finset ι} {m : ℕ} {p : MvPolynomial ι R} (hp : p ∈ 𝓜 (m • Finsupp.degree γ)) :
      laurentFilter γ m F p ∈ 𝓜 (m • Finsupp.degree γ)

      Filtering preserves the graded piece: it only discards monomials.

      theorem MvPolynomial.sum_laurentFilter_powerset {ι R : Type u} [CommRing R] (γ : ι →₀ ℕ) (m : ℕ) (p : MvPolynomial ι R) :
      ∑ F ∈ γ.support.powerset, laurentFilter γ m F p = p

      The blocks exhaust the numerator. Summing the filters over all subsets of the denominator's support recovers the numerator: every monomial lands in the single block named by its negative support, and that block is admissible by intNegSupport_laurentExponent_subset. The index γ.support.powerset is finite for every γ, whatever the variable set.

      theorem MvPolynomial.laurentFilter_laurentFilter_self {ι R : Type u} [CommRing R] (γ : ι →₀ ℕ) (m : ℕ) (F : Finset ι) (p : MvPolynomial ι R) :
      laurentFilter γ m F (laurentFilter γ m F p) = laurentFilter γ m F p

      Filtering twice by the same block changes nothing.

      theorem MvPolynomial.laurentFilter_laurentFilter_of_ne {ι R : Type u} [CommRing R] {F F' : Finset ι} (h : F ≠ F') (γ : ι →₀ ℕ) (m : ℕ) (p : MvPolynomial ι R) :
      laurentFilter γ m F (laurentFilter γ m F' p) = 0

      Distinct blocks are disjoint: filtering by one then the other kills everything.

      theorem MvPolynomial.laurentFilter_eq_zero_of_not_subset {ι R : Type u} [CommRing R] {γ : ι →₀ ℕ} {F : Finset ι} (h : ¬F ⊆ γ.support) (m : ℕ) (p : MvPolynomial ι R) :
      laurentFilter γ m F p = 0

      A block outside the denominator's support is empty.

      theorem MvPolynomial.laurentFilter_monomial_mul {ι R : Type u} [CommRing R] {γ γ' σ : ι →₀ ℕ} {m m' : ℕ} (hσ : σ + m • γ = m' • γ') (F : Finset ι) (p : MvPolynomial ι R) :
      laurentFilter γ' m' F ((monomial σ) 1 * p) = (monomial σ) 1 * laurentFilter γ m F p

      The shift identity for filters. Multiplying the numerator by Xᵟ while the denominator data moves from (γ, m) to (γ', m') commutes with filtering, as soon as σ + m • γ = m' • γ' — the hypothesis under which laurentExponent_sub_of_add_eq says no Laurent exponent moves. Raising a representative (σ = t • γ) and applying a Čech face (σ = m • single e c) are the two instances; this one identity is the whole content of both the well-definedness of blockProj and its commutation with the faces.

      The block projection on the localization #

      The filter descends to the away localization exactly as the sign projection did in #526: a representative is filtered, well-definedness is the shift identity plus cross-multiplication, and the resulting map is pinned by its awayMk equation.

      noncomputable def MvPolynomial.AwayRep.blockFilter {ι R : Type u} [CommRing R] {σM : Type u} [SetLike σM (MvPolynomial ι R)] {𝓜 : ℕ → σM} {d : ℤ} (h𝓜 : IsPolynomialTwist 𝓜 d) {γ : ι →₀ ℕ} (F : Finset ι) (r : AwayRep ι R 𝓜 γ) :
      AwayRep ι R 𝓜 γ

      The block-filtered representative: keep the numerator's monomials in block F.

      Equations
      Instances For
        theorem MvPolynomial.AwayRep.frac_blockFilter_raise {ι R : Type u} [CommRing R] {σM : Type u} [SetLike σM (MvPolynomial ι R)] [AddSubgroupClass σM (MvPolynomial ι R)] {𝓜 : ℕ → σM} [SetLike.GradedSMul (polynomialGrading ι R) 𝓜] {d : ℤ} (h𝓜 : IsPolynomialTwist 𝓜 d) {γ : ι →₀ ℕ} (F : Finset ι) (r : AwayRep ι R 𝓜 γ) (t : ℕ) :
        (blockFilter h𝓜 F r).frac = GradedModule.DegreeZeroLocalization.awayMk ⋯ (r.pow + t) (laurentFilter γ (r.pow + t) F ((monomial γ) 1 ^ t * r.num)) ⋯

        Filtering a representative is the same as raising it first and then filtering. This is laurentFilter_monomial_mul at σ = t • γ on the numerator and awayMk_shift on the fraction; well-definedness follows exactly as it did for the sign projection.

        theorem MvPolynomial.AwayRep.frac_blockFilter_congr {ι R : Type u} [CommRing R] {σM : Type u} [SetLike σM (MvPolynomial ι R)] [AddSubgroupClass σM (MvPolynomial ι R)] {𝓜 : ℕ → σM} [SetLike.GradedSMul (polynomialGrading ι R) 𝓜] {d : ℤ} [IsDomain R] (h𝓜 : IsPolynomialTwist 𝓜 d) {γ : ι →₀ ℕ} (F : Finset ι) {r₁ r₂ : AwayRep ι R 𝓜 γ} (h : r₁.frac = r₂.frac) :
        (blockFilter h𝓜 F r₁).frac = (blockFilter h𝓜 F r₂).frac

        Well-definedness. Two representatives of one fraction filter to the same fraction.

        noncomputable def MvPolynomial.blockProj {ι R : Type u} [CommRing R] {σM : Type u} [SetLike σM (MvPolynomial ι R)] [AddSubgroupClass σM (MvPolynomial ι R)] {𝓜 : ℕ → σM} [SetLike.GradedSMul (polynomialGrading ι R) 𝓜] {d : ℤ} [IsDomain R] (h𝓜 : IsPolynomialTwist 𝓜 d) (γ : ι →₀ ℕ) (F : Finset ι) (z : ↥(GradedModule.DegreeZeroLocalization (polynomialGrading ι R) 𝓜 (Submonoid.powers ((monomial γ) 1)))) :

        The block projection, as a map on the localization. Defined by choosing a representative; blockProj_awayMk is the equation that pins it down and is what every caller should use.

        Equations
        Instances For
          theorem MvPolynomial.blockProj_frac {ι R : Type u} [CommRing R] {σM : Type u} [SetLike σM (MvPolynomial ι R)] [AddSubgroupClass σM (MvPolynomial ι R)] {𝓜 : ℕ → σM} [SetLike.GradedSMul (polynomialGrading ι R) 𝓜] {d : ℤ} [IsDomain R] (h𝓜 : IsPolynomialTwist 𝓜 d) (γ : ι →₀ ℕ) (F : Finset ι) (r : AwayRep ι R 𝓜 γ) :
          blockProj h𝓜 γ F r.frac = (AwayRep.blockFilter h𝓜 F r).frac
          theorem MvPolynomial.blockProj_awayMk {ι R : Type u} [CommRing R] {σM : Type u} [SetLike σM (MvPolynomial ι R)] [AddSubgroupClass σM (MvPolynomial ι R)] {𝓜 : ℕ → σM} [SetLike.GradedSMul (polynomialGrading ι R) 𝓜] {d : ℤ} [IsDomain R] (h𝓜 : IsPolynomialTwist 𝓜 d) (γ : ι →₀ ℕ) (F : Finset ι) {m : ℕ} {p : MvPolynomial ι R} (hp : p ∈ 𝓜 (m • Finsupp.degree γ)) :

          The defining equation of the block projection: on a representative it filters the numerator and keeps the exponent.

          theorem MvPolynomial.blockProj_add {ι R : Type u} [CommRing R] {σM : Type u} [SetLike σM (MvPolynomial ι R)] [AddSubgroupClass σM (MvPolynomial ι R)] {𝓜 : ℕ → σM} [SetLike.GradedSMul (polynomialGrading ι R) 𝓜] {d : ℤ} [IsDomain R] (h𝓜 : IsPolynomialTwist 𝓜 d) (γ : ι →₀ ℕ) (F : Finset ι) (z₁ z₂ : ↥(GradedModule.DegreeZeroLocalization (polynomialGrading ι R) 𝓜 (Submonoid.powers ((monomial γ) 1)))) :
          blockProj h𝓜 γ F (z₁ + z₂) = blockProj h𝓜 γ F z₁ + blockProj h𝓜 γ F z₂

          The block projection is additive: align the fractions at a common denominator, where it is laurentFilter_add.

          noncomputable def MvPolynomial.blockProjHom {ι R : Type u} [CommRing R] {σM : Type u} [SetLike σM (MvPolynomial ι R)] [AddSubgroupClass σM (MvPolynomial ι R)] {𝓜 : ℕ → σM} [SetLike.GradedSMul (polynomialGrading ι R) 𝓜] {d : ℤ} [IsDomain R] (h𝓜 : IsPolynomialTwist 𝓜 d) (γ : ι →₀ ℕ) (F : Finset ι) :

          The block projection bundled as an additive map.

          Equations
          Instances For
            @[simp]
            theorem MvPolynomial.blockProjHom_apply {ι R : Type u} [CommRing R] {σM : Type u} [SetLike σM (MvPolynomial ι R)] [AddSubgroupClass σM (MvPolynomial ι R)] {𝓜 : ℕ → σM} [SetLike.GradedSMul (polynomialGrading ι R) 𝓜] {d : ℤ} [IsDomain R] (h𝓜 : IsPolynomialTwist 𝓜 d) (γ : ι →₀ ℕ) (F : Finset ι) (z : ↥(GradedModule.DegreeZeroLocalization (polynomialGrading ι R) 𝓜 (Submonoid.powers ((monomial γ) 1)))) :
            (blockProjHom h𝓜 γ F) z = blockProj h𝓜 γ F z
            theorem MvPolynomial.sum_blockProj {ι R : Type u} [CommRing R] {σM : Type u} [SetLike σM (MvPolynomial ι R)] [AddSubgroupClass σM (MvPolynomial ι R)] {𝓜 : ℕ → σM} [SetLike.GradedSMul (polynomialGrading ι R) 𝓜] {d : ℤ} [IsDomain R] (h𝓜 : IsPolynomialTwist 𝓜 d) (γ : ι →₀ ℕ) (z : ↥(GradedModule.DegreeZeroLocalization (polynomialGrading ι R) 𝓜 (Submonoid.powers ((monomial γ) 1)))) :
            ∑ F ∈ γ.support.powerset, blockProj h𝓜 γ F z = z

            The blocks exhaust the localization. The projections over the finite index γ.support.powerset sum to the identity. This is the whole decomposition step in the form the vanishing argument consumes: no direct sum, no reindexed complex — each element is the finite sum of its blocks, one localization at a time.

            theorem MvPolynomial.blockProj_blockProj_self {ι R : Type u} [CommRing R] {σM : Type u} [SetLike σM (MvPolynomial ι R)] [AddSubgroupClass σM (MvPolynomial ι R)] {𝓜 : ℕ → σM} [SetLike.GradedSMul (polynomialGrading ι R) 𝓜] {d : ℤ} [IsDomain R] (h𝓜 : IsPolynomialTwist 𝓜 d) (γ : ι →₀ ℕ) (F : Finset ι) (z : ↥(GradedModule.DegreeZeroLocalization (polynomialGrading ι R) 𝓜 (Submonoid.powers ((monomial γ) 1)))) :
            blockProj h𝓜 γ F (blockProj h𝓜 γ F z) = blockProj h𝓜 γ F z

            The block projections are idempotent.

            theorem MvPolynomial.blockProj_blockProj_of_ne {ι R : Type u} [CommRing R] {σM : Type u} [SetLike σM (MvPolynomial ι R)] [AddSubgroupClass σM (MvPolynomial ι R)] {𝓜 : ℕ → σM} [SetLike.GradedSMul (polynomialGrading ι R) 𝓜] {d : ℤ} [IsDomain R] (h𝓜 : IsPolynomialTwist 𝓜 d) {F F' : Finset ι} (h : F ≠ F') (γ : ι →₀ ℕ) (z : ↥(GradedModule.DegreeZeroLocalization (polynomialGrading ι R) 𝓜 (Submonoid.powers ((monomial γ) 1)))) :
            blockProj h𝓜 γ F (blockProj h𝓜 γ F' z) = 0

            Distinct block projections are orthogonal.

            theorem MvPolynomial.blockProj_eq_zero_of_not_subset {ι R : Type u} [CommRing R] {σM : Type u} [SetLike σM (MvPolynomial ι R)] [AddSubgroupClass σM (MvPolynomial ι R)] {𝓜 : ℕ → σM} [SetLike.GradedSMul (polynomialGrading ι R) 𝓜] {d : ℤ} [IsDomain R] (h𝓜 : IsPolynomialTwist 𝓜 d) {γ : ι →₀ ℕ} {F : Finset ι} (h : ¬F ⊆ γ.support) (z : ↥(GradedModule.DegreeZeroLocalization (polynomialGrading ι R) 𝓜 (Submonoid.powers ((monomial γ) 1)))) :
            blockProj h𝓜 γ F z = 0

            A block outside the denominator's support projects to zero.

            The faces commute with the block projections #

            A Čech face multiplies numerator and denominator together, so the Laurent exponent of every monomial — and with it the block — never moves. This is the statement "the differential preserves N α" of #340's proof plan, one face and one localization at a time.

            theorem MvPolynomial.laurentFace_blockProj {ι R : Type u} [CommRing R] {σM : Type u} [SetLike σM (MvPolynomial ι R)] [AddSubgroupClass σM (MvPolynomial ι R)] {𝓜 : ℕ → σM} [SetLike.GradedSMul (polynomialGrading ι R) 𝓜] {d : ℤ} [IsDomain R] (h𝓜 : IsPolynomialTwist 𝓜 d) {γ γ' : ι →₀ ℕ} {e : ι} {c : ℕ} (hγ : γ = Finsupp.single e c + γ') (F : Finset ι) (z : ↥(GradedModule.DegreeZeroLocalization (polynomialGrading ι R) 𝓜 (Submonoid.powers ((monomial γ') 1)))) :
            (laurentFace 𝓜 hγ) (blockProj h𝓜 γ' F z) = blockProj h𝓜 γ F ((laurentFace 𝓜 hγ) z)

            The faces commute with the block projections. Restricting along X_e and then taking the block-F component is taking the block-F component and restricting after. This is laurentFilter_monomial_mul at σ = m • single e c; no restriction on F is needed, in contrast to the sign projection's square.