Documentation

DerivedAlgGeo.Algebra.MvPolynomial.LaurentProjection

The numerator side of the sign projection #

The projective Čech contracting homotopy consumes a sign projection: given a monomial denominator Xᵞ = X_{i₀}^c · Xᵞ' with γ' i₀ = 0, a map

π : (A(d)_{Xᵞ})₀ → (A(d)_{Xᵞ'})₀

that keeps exactly the Laurent monomials whose i₀-exponent has not gone negative — the ones still admissible once X_{i₀} is no longer inverted.

On a representative p / (Xᵞ)ᵐ that operation is division by a monomial: keep the terms of p divisible by X_{i₀}^{m·c} and shift them down. The geometry-free division identities live in DerivedAlgGeo.Algebra.MvPolynomial.DivMonomial; this file applies them to degree-zero localizations of polynomially graded modules, without assuming a geometric realization.

Main statements #

Implementation notes #

MvPolynomial.divMonomial_monomial_mul_comm is the key generic polynomial fact. A monomial factor may be pulled out through a division only when the two monomials have disjoint support — the hypothesis ∀ j, a j = 0 ∨ s j = 0. Without it the statement is false: dividing X_{i₀} out of X_{i₀} · p is not X_{i₀} · anything. The disjointness is available here for a structural reason, not a lucky one: the factor being pulled out is a power of Xᵞ', which by hypothesis does not involve i₀, while the divisor is a pure power of X_{i₀}.

The γ = X_{i₀}^c · γ' splitting is taken as a hypothesis rather than built with Finsupp.erase. The caller that matters is a Čech face, which produces the two pieces separately (c = 1 and γ' the denominator of the smaller intersection) and never has to take them apart again.

Tags #

monomial division, homogeneous localization, graded module

The projection on numerators #

theorem MvPolynomial.divMonomial_mem_natShift {ι R : Type u} [CommRing R] {γ γ' : ι →₀ ℕ} {i₀ : ι} {c : ℕ} (hγ : γ = Finsupp.single i₀ c + γ') {d m : ℕ} {p : MvPolynomial ι R} (hp : p ∈ GradedModule.natShift (polynomialGrading ι R) d (m • Finsupp.degree γ)) :

The degree bookkeeping. Dividing off X_{i₀}^{m·c} carries a numerator for Xᵞ at twist d to a numerator for Xᵞ' at the same twist d.

Only the denominator's contribution m • γ.degree moves; the twist is untouched. That is what makes the projection a map of O(d)-sections rather than a comparison between different twists.

theorem MvPolynomial.IsPolynomialTwist.divMonomial_mem {ι R : Type u} [CommRing R] {σM : Type u} [SetLike σM (MvPolynomial ι R)] {𝓜 : ℕ → σM} {d : ℤ} (h𝓜 : IsPolynomialTwist 𝓜 d) {γ γ' : ι →₀ ℕ} {i₀ : ι} {c : ℕ} (hγ : γ = Finsupp.single i₀ c + γ') {m : ℕ} {p : MvPolynomial ι R} (hp : p ∈ 𝓜 (m • Finsupp.degree γ)) :
p.divMonomial (Finsupp.single i₀ (m * c)) ∈ 𝓜 (m • Finsupp.degree γ')

The degree bookkeeping, for a twist of either sign.

divMonomial_mem_natShift with natShift replaced by any IsPolynomialTwist. The twist is again untouched: only the denominator's contribution m • γ.degree moves.

The nonnegative proof reads the membership as homogeneity and cancels m * c off the degree directly. That cancellation is not available here, because a negative twist can put the numerator's degree below m * c — and then there is nothing to divide, so the quotient is zero and the p = 0 disjunct of IsPolynomialTwist carries it. The by_cases on the quotient is therefore not defensive bookkeeping; it is the only place the two signs behave differently in this whole argument.

theorem MvPolynomial.IsPolynomialTwist.mul_mem_of_isHomogeneous {ι R : Type u} [CommRing R] {σM : Type u} [SetLike σM (MvPolynomial ι R)] {𝓜 : ℕ → σM} {d : ℤ} (h𝓜 : IsPolynomialTwist 𝓜 d) {a : MvPolynomial ι R} {k n n' : ℕ} (ha : a.IsHomogeneous k) (hn : n' = k + n) {p : MvPolynomial ι R} (hp : p ∈ 𝓜 n) :
a * p ∈ 𝓜 n'

Multiplying a numerator by a homogeneous factor raises its graded piece by that factor's degree and leaves the twist alone.

Three places need this — raising a representative to a higher power of the denominator, and the two columns of the projection square — and each of them read natShift's membership as homogeneity directly. Through IsPolynomialTwist the reading is a case split, because the numerator may be zero in a degree the twist names no graded piece for.

The projection itself #

The numerator operation descends to a map on the localization. A representative is packaged as AwayRep; AwayRep.frac_project_congr says two representatives of one element project to the same fraction, and signProjection is the resulting map, chosen through Exists.choose and pinned by signProjection_awayMk.

structure MvPolynomial.AwayRep (ι R : Type u) [CommRing R] {σM : Type u} [SetLike σM (MvPolynomial ι R)] (𝓜 : ℕ → σM) (γ : ι →₀ ℕ) :

A representative p / (Xᵞ)ᵐ of a degree-zero fraction of the twist 𝓜.

The twist is carried by the graded family rather than by a natural number, so that the whole projection layer is available at either sign; IsPolynomialTwist 𝓜 d is the hypothesis the degree bookkeeping consumes, and it is required only where a degree actually moves.

Instances For
    noncomputable def MvPolynomial.AwayRep.frac {ι R : Type u} [CommRing R] {σM : Type u} [SetLike σM (MvPolynomial ι R)] [AddSubgroupClass σM (MvPolynomial ι R)] {𝓜 : ℕ → σM} [SetLike.GradedSMul (polynomialGrading ι R) 𝓜] {γ : ι →₀ ℕ} (r : AwayRep ι R 𝓜 γ) :

    The fraction a representative names.

    Equations
    Instances For
      theorem MvPolynomial.AwayRep.frac_surjective {ι R : Type u} [CommRing R] {σM : Type u} [SetLike σM (MvPolynomial ι R)] [AddSubgroupClass σM (MvPolynomial ι R)] [Nontrivial R] (𝓜 : ℕ → σM) [SetLike.GradedSMul (polynomialGrading ι R) 𝓜] (γ : ι →₀ ℕ) (z : ↥(GradedModule.DegreeZeroLocalization (polynomialGrading ι R) 𝓜 (Submonoid.powers ((monomial γ) 1)))) :
      ∃ (r : AwayRep ι R 𝓜 γ), r.frac = z

      Every fraction has a representative — this is exists_awayMk, repackaged.

      noncomputable def MvPolynomial.AwayRep.project {ι R : Type u} [CommRing R] {σM : Type u} [SetLike σM (MvPolynomial ι R)] {𝓜 : ℕ → σM} {d : ℤ} (h𝓜 : IsPolynomialTwist 𝓜 d) {γ γ' : ι →₀ ℕ} {i₀ : ι} {c : ℕ} (hγ : γ = Finsupp.single i₀ c + γ') (r : AwayRep ι R 𝓜 γ) :
      AwayRep ι R 𝓜 γ'

      The projected representative: divide the numerator by X_{i₀}^{m·c}, keep the exponent.

      Equations
      Instances For
        theorem MvPolynomial.AwayRep.pow_mul_num_mem {ι R : Type u} [CommRing R] {σM : Type u} [SetLike σM (MvPolynomial ι R)] {𝓜 : ℕ → σM} {d : ℤ} (h𝓜 : IsPolynomialTwist 𝓜 d) {γ : ι →₀ ℕ} (r : AwayRep ι R 𝓜 γ) (t : ℕ) :
        (monomial γ) 1 ^ t * r.num ∈ 𝓜 ((r.pow + t) • Finsupp.degree γ)

        Raising a representative by (Xᵞ)ᵗ keeps it a legitimate numerator.

        The nonnegative proof read num_mem as homogeneity directly. Here the reading goes through IsPolynomialTwist, which also supplies the zero case — a numerator may be zero in a degree where the twist names no graded piece at all.

        theorem MvPolynomial.AwayRep.frac_project_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) {γ γ' : ι →₀ ℕ} {i₀ : ι} {c : ℕ} (hγ : γ = Finsupp.single i₀ c + γ') (hγ' : γ' i₀ = 0) (r : AwayRep ι R 𝓜 γ) (t : ℕ) :
        (project h𝓜 hγ r).frac = GradedModule.DegreeZeroLocalization.awayMk ⋯ (r.pow + t) (((monomial γ) 1 ^ t * r.num).divMonomial (Finsupp.single i₀ ((r.pow + t) * c))) ⋯

        Projecting a representative is the same as raising it first and then projecting.

        This is divMonomial_pow_mul on the numerator and awayMk_shift on the fraction, and it is the only place either is used. Well-definedness follows immediately: it lets both representatives of one element be moved to the same exponent before they are compared.

        theorem MvPolynomial.AwayRep.frac_project_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) {γ γ' : ι →₀ ℕ} {i₀ : ι} {c : ℕ} (hγ : γ = Finsupp.single i₀ c + γ') (hγ' : γ' i₀ = 0) {r₁ r₂ : AwayRep ι R 𝓜 γ} (h : r₁.frac = r₂.frac) :
        (project h𝓜 hγ r₁).frac = (project h𝓜 hγ r₂).frac

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

        awayMk_eq_awayMk_iff turns the hypothesis into a cross-multiplication of numerators, and frac_project_raise moves both projections to the common exponent r₁.pow + r₂.pow where that cross-multiplication is literally the equality of numerators.

        noncomputable def MvPolynomial.signProjection {ι 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) {γ γ' : ι →₀ ℕ} {i₀ : ι} {c : ℕ} (hγ : γ = Finsupp.single i₀ c + γ') (z : ↥(GradedModule.DegreeZeroLocalization (polynomialGrading ι R) 𝓜 (Submonoid.powers ((monomial γ) 1)))) :

        The sign projection, as a map on the localization.

        Defined by choosing a representative; signProjection_awayMk is the equation that pins it down and is what every caller should use. The hypothesis γ' i₀ = 0 is not needed to make the definition — only to make it independent of the choice — so it is required by the equations rather than by the definition.

        Equations
        Instances For
          theorem MvPolynomial.signProjection_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) {γ γ' : ι →₀ ℕ} {i₀ : ι} {c : ℕ} (hγ : γ = Finsupp.single i₀ c + γ') (hγ' : γ' i₀ = 0) (r : AwayRep ι R 𝓜 γ) :
          signProjection h𝓜 hγ r.frac = (AwayRep.project h𝓜 hγ r).frac
          theorem MvPolynomial.signProjection_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) {γ γ' : ι →₀ ℕ} {i₀ : ι} {c : ℕ} (hγ : γ = Finsupp.single i₀ c + γ') (hγ' : γ' i₀ = 0) {m : ℕ} {p : MvPolynomial ι R} (hp : p ∈ 𝓜 (m • Finsupp.degree γ)) :

          The defining equation of the sign projection: on a representative it divides the numerator by X_{i₀}^{m·c} and keeps the exponent.

          The projection retracts the face inclusion #

          theorem MvPolynomial.monomial_single_mem {ι R : Type u} [CommRing R] (i₀ : ι) (c : ℕ) :
          theorem MvPolynomial.laurentFace_mul {ι R : Type u} [CommRing R] {γ γ' : ι →₀ ℕ} {i₀ : ι} {c : ℕ} (hγ : γ = Finsupp.single i₀ c + γ') :
          (monomial γ') 1 * (monomial (Finsupp.single i₀ c)) 1 = (monomial γ) 1
          theorem MvPolynomial.monomial_mem_add_degree {ι R : Type u} [CommRing R] {γ γ' : ι →₀ ℕ} {i₀ : ι} {c : ℕ} (hγ : γ = Finsupp.single i₀ c + γ') :
          noncomputable def MvPolynomial.laurentFace {ι R : Type u} [CommRing R] {σM : Type u} [SetLike σM (MvPolynomial ι R)] [AddSubgroupClass σM (MvPolynomial ι R)] (𝓜 : ℕ → σM) [SetLike.GradedSMul (polynomialGrading ι R) 𝓜] {γ γ' : ι →₀ ℕ} {i₀ : ι} {c : ℕ} (hγ : γ = Finsupp.single i₀ c + γ') :

          The face inclusion (A(d)_{Xᵞ'})₀ → (A(d)_{Xᵞ})₀, in the shape the sign projection retracts. This is DegreeZeroLocalization.faceMap at g₁ * h = g₂ with h = X_{i₀}^c, which is exactly the Čech face of #340's complex.

          Equations
          Instances For
            theorem MvPolynomial.laurentFace_awayMk {ι R : Type u} [CommRing R] {σM : Type u} [SetLike σM (MvPolynomial ι R)] [AddSubgroupClass σM (MvPolynomial ι R)] {𝓜 : ℕ → σM} [SetLike.GradedSMul (polynomialGrading ι R) 𝓜] {γ γ' : ι →₀ ℕ} {i₀ : ι} {c : ℕ} (hγ : γ = Finsupp.single i₀ c + γ') {m : ℕ} {q : MvPolynomial ι R} (hq : q ∈ 𝓜 (m • Finsupp.degree γ')) (hres : (monomial (Finsupp.single i₀ c)) 1 ^ m • q ∈ 𝓜 (m • (c + Finsupp.degree γ'))) :

            The face inclusion in awayMk normal form: it multiplies the numerator by X_{i₀}^{m·c}.

            theorem MvPolynomial.signProjection_laurentFace {ι 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) {γ γ' : ι →₀ ℕ} {i₀ : ι} {c : ℕ} (hγ : γ = Finsupp.single i₀ c + γ') (hγ' : γ' i₀ = 0) (z : ↥(GradedModule.DegreeZeroLocalization (polynomialGrading ι R) 𝓜 (Submonoid.powers ((monomial γ') 1)))) :
            signProjection h𝓜 hγ ((laurentFace 𝓜 hγ) z) = z

            The sign projection retracts the face inclusion: π ∘ ι = id.

            This is the first of the two properties #340's homotopy consumes. On a representative the face multiplies the numerator by X_{i₀}^{m·c} and the projection divides it straight back out (divMonomial_monomial_mul), so nothing survives to check — the content is all in the degree bookkeeping, and in awayMk_deg_congr reconciling the two names γ.degree and c + γ'.degree for the same natural number.

            Additivity of the projection #

            The contracting homotopy applies the projection to an alternating sum of faces, so it consumes the projection as an additive map. Additivity is not free from the definition — signProjection is choice-based — but it reduces to the defining equation once the two summands are put over a common denominator, which is exactly what DegreeZeroLocalization.exists_awayMk_pair supplies. This is the first use of that lemma outside frac_project_raise's single-element version.

            theorem MvPolynomial.signProjection_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) {γ γ' : ι →₀ ℕ} {i₀ : ι} {c : ℕ} (hγ : γ = Finsupp.single i₀ c + γ') (hγ' : γ' i₀ = 0) (z₁ z₂ : ↥(GradedModule.DegreeZeroLocalization (polynomialGrading ι R) 𝓜 (Submonoid.powers ((monomial γ) 1)))) :
            signProjection h𝓜 hγ (z₁ + z₂) = signProjection h𝓜 hγ z₁ + signProjection h𝓜 hγ z₂

            The sign projection is additive. Align the two fractions at a common denominator (exists_awayMk_pair), where the projection is division of the numerator by a fixed monomial (signProjection_awayMk), and division by a monomial is additive (add_divMonomial).

            noncomputable def MvPolynomial.signProjectionHom {ι 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) {γ γ' : ι →₀ ℕ} {i₀ : ι} {c : ℕ} (hγ : γ = Finsupp.single i₀ c + γ') (hγ' : γ' i₀ = 0) :

            The sign projection as an additive map. The hypothesis γ' i₀ = 0 is what additivity costs — see signProjection — so the bundled form carries it. map_zero comes with the bundling; callers should reach equations through signProjectionHom_apply and then signProjection_awayMk.

            Equations
            Instances For
              @[simp]
              theorem MvPolynomial.signProjectionHom_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) {γ γ' : ι →₀ ℕ} {i₀ : ι} {c : ℕ} (hγ : γ = Finsupp.single i₀ c + γ') (hγ' : γ' i₀ = 0) (z : ↥(GradedModule.DegreeZeroLocalization (polynomialGrading ι R) 𝓜 (Submonoid.powers ((monomial γ) 1)))) :
              (signProjectionHom h𝓜 hγ hγ') z = signProjection h𝓜 hγ z

              The projection commutes with the remaining faces #

              signProjection_laurentFace handles the face that reinserts X_{i₀} itself — the j = 0 face of the homotopy, which the projection retracts. Every other face of the Čech complex multiplies the denominator by a variable X_e that is not X_{i₀}, and for those the projection and the face commute. That square is the second and last property #340's contracting homotopy consumes.

              The restriction of §1 of the proof plan — the square only holds on the summands with i₀ ∉ N α — enters here as the hypothesis δ' i₀ = 0: the target denominator of the projection on the face side must not invert X_{i₀}, which encodes both e ≠ i₀ (or the face is the retracted one) and the well-definedness hypothesis of each projection. The unrestricted square with e = i₀ is false, and no statement of it appears.

              theorem MvPolynomial.monomial_single_pow_smul_mem {ι R : Type u} [CommRing R] {σM : Type u} [SetLike σM (MvPolynomial ι R)] {𝓜 : ℕ → σM} {d : ℤ} (h𝓜 : IsPolynomialTwist 𝓜 d) {γ : ι →₀ ℕ} {e : ι} {c' m : ℕ} {p : MvPolynomial ι R} (hp : p ∈ 𝓜 (m • Finsupp.degree γ)) :
              (monomial (Finsupp.single e c')) 1 ^ m • p ∈ 𝓜 (m • (c' + Finsupp.degree γ))

              Multiplying a numerator by (X_e^{c'})ᵐ raises its graded piece by m·c' and keeps the twist. This is the membership fact the face side of the projection square feeds laurentFace_awayMk, stated once because both columns of the square need it.

              theorem MvPolynomial.signProjection_laurentFace_comm {ι 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) {γ γ' δ δ' : ι →₀ ℕ} {i₀ e : ι} {c c' : ℕ} (hγ : γ = Finsupp.single i₀ c + γ') (hγ' : γ' i₀ = 0) (hδγ : δ = Finsupp.single e c' + γ) (hδγ' : δ' = Finsupp.single e c' + γ') (hδsplit : δ = Finsupp.single i₀ c + δ') (hδ'₀ : δ' i₀ = 0) (z : ↥(GradedModule.DegreeZeroLocalization (polynomialGrading ι R) 𝓜 (Submonoid.powers ((monomial γ) 1)))) :
              signProjection h𝓜 hδsplit ((laurentFace 𝓜 hδγ) z) = (laurentFace 𝓜 hδγ') (signProjection h𝓜 hγ z)

              The projection square. Away from the retracted face, the sign projection commutes with the Čech face: restricting along X_e and then projecting out X_{i₀} is projecting first and restricting after.

              The four denominators are supplied as separate splittings because the caller — a Čech differential — produces each of them separately and never has to take one apart. hδ'₀ (δ' i₀ = 0) is the restriction of §1 of #340's proof plan in hypothesis form: with hγ' it forces X_e ≠ X_{i₀} unless c' = 0, which is exactly the disjointness divMonomial_monomial_mul_comm needs to pull the face's monomial through the projection's division. The unrestricted square at e = i₀ is false — that face is the retraction signProjection_laurentFace, not this square.