The primitive of a polynomial variable Čech cocycle in nonnegative degree #
The vanishing computation of #340, in cochain form. Given a degree-(n+1) cochain s of the
variable Čech cover whose differential vanishes, cechPrimitive is the cochain t with
d t = s: per block F, a cone point i₀ ∉ F is chosen and the block component of s is
contracted through the homotopy y ↦ Π (s_F (i₀ :: y)); the finitely many blocks of each
tuple then reassemble by sum_cechBlockProj.
cechBlockPrimitive— the per-block candidate primitive. For a block with no cone point — only possible when the block is all of a finite variable set — it is0, andcechBlockProj_eq_zero_of_forall_memsays the block component of everything vanishes there: such a block would need every variable's exponent negative, while the twistd ≥ 0fixes the total atd. This is where nonnegativity of the twist is spent, and the only place.cechPrimitive_isPrimitive— the homotopy computationd (h s) + h (d s) = s, elementwise. Thej = 0face of the cone tuple returns the block component through the retraction (cechHomotopy_cechFace_zero); every other face cancels between the two sides through the square (cechHomotopy_cechFace_succ); and the per-block identities sum over(tupleExponent x).support.powersettos x.
The statement is against the face maps directly, not against the complex; the complex-level
exactness and the Hⁿ(Pⁿ, O(d)) = 0 statement are derived downstream, where
polynomialVariableCechComplex_d_apply converts between the two forms.
Tags #
contracting homotopy, Čech complex, multivariate polynomial, vanishing
The top block is empty for a nonnegative twist #
If every variable lies in F, the block-F component of a legitimate numerator vanishes:
its Laurent exponents would be everywhere negative while their total is the twist d ≥ 0.
The witness j₀ rules out the empty variable set, where the empty block carries the
constants. This is the only place the nonnegativity of the twist enters the vanishing
argument.
The block of everything, over a nonempty variable set, projects everything to zero when the twist is nonnegative.
The Čech form: any tuple supplies the witness.
Support bookkeeping for the reassembly #
Dropping an index shrinks the support of the tuple exponent.
A tuple's exponent is supported on at most its own length: each index contributes one variable, and repetitions only shrink the support.
A tuple too short to meet every variable kills the full block.
This is what carries the vanishing computation at a negative twist, where the degree argument
behind cechBlockProj_eq_zero_of_forall_mem is unavailable: a block containing every variable has
Fintype.card ι elements, while a tuple of length n + 2 supports at most n + 2, so over a
larger variable set the block cannot sit inside the tuple's support and
cechBlockProj_eq_zero_of_not_subset applies. The twist plays no part.
This is the first statement in the lane that needs the variable set finite.
A block of the cone tuple avoiding the cone point is a block of the base tuple.
The block projections commute with the inverse tuple transport.
The candidate primitive #
The per-block candidate primitive: contract the block-F component of s through the
cone point, when one exists. A block with no cone point contributes nothing — and by
cechBlockProj_eq_zero_of_forall_mem it has nothing to contribute.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The per-block primitive of a block off the tuple's support vanishes: the cone point is outside the block, so the cone tuple's support helps only through the base tuple's.
The candidate primitive: the finitely many blocks of the tuple, contracted and summed.
Equations
- MvPolynomial.cechPrimitive ι k h𝓜 s y = ∑ F ∈ (MvPolynomial.tupleExponent ι y).support.powerset, MvPolynomial.cechBlockPrimitive ι k h𝓜 F s y
Instances For
The homotopy computation #
The per-block homotopy identity, on a block with a cone point. The alternating sum of the
faces of the per-block primitive is the block-F component of s x.
Apply the block projection and the homotopy map to the cocycle identity at i₀ :: x: the j = 0
face returns (s x)_F through the retraction, and the j.succ faces are exactly the faces of the
per-block primitive, with one sign lost, through the square.
No hypothesis on the twist appears here, and none is needed. Every block except the one containing every variable has a cone point, so this alone says the cohomology of the Čech complex is carried entirely by the full block — which is what makes both the vanishing below the top degree and the finiteness of the top group statements about a single block.
The per-block homotopy identity, for every block.
With a cone point this is cechBlockPrimitive_faces_of_exists; without one both sides vanish, the
left because the per-block primitive is 0 by construction and the right by hfull.
hfull is the only place this argument ever cared about the sign of the twist, and taking it
as a hypothesis is what makes the computation available at either sign. It constrains s alone
rather than every term, which is what lets the top degree use it: there the full block is not
empty and only the given cochain can be assumed to miss it. Three things discharge it, for
different reasons:
- a nonnegative twist —
cechBlockProj_eq_zero_of_forall_mem. Every Laurent exponent in such a block is negative in every variable while their total isd ≥ 0, so the block is empty; - a tuple too short to meet every variable —
cechBlockProj_eq_zero_of_card_lt. A tuple of lengthn + 2has support of at most that size, so over a variable set with more elements the full block is not contained in it, whatever the twist; - a cochain already carrying no full block, whatever the twist and however long the tuple. This is the top-degree use, where neither of the first two is available.
The second is what carries the negative case below the top, and it is why finiteness of the variable set enters the lane here and nowhere earlier.
The vanishing computation. The alternating face sum of cechPrimitive s is s: per
block the previous identity applies — after extending each tuple's block sum to the blocks of
x, which costs nothing since a block off a tuple's support contributes zero — and the block
components of s x reassemble by sum_cechBlockProj.