Documentation

LeanPool.JacobianDiffgeo.SerrePairing

serre-duality-cech: the Serre pairing at the Čech level (namespace RS/RS.SerrePairing) #

API summary (see docs/design/serre-duality-cech.md). Builds on: canonical-forms (BUILT) and residue-calculus (BUILT). Blueprint: "The Serre pairing at the Čech level: the dimension-counting surjectivity core and the duality bookkeeping consumed by the tail route." Per the design's own routing decision (§0.1), this unit owns the pairing formula and its injectivity half; the hard surjectivity half of Serre duality (Miranda VI.3 Lemma 3.4/3.6 and the induction on growing divisors) is squarely serre-duality-tails' (#26) job and is not attempted here.

Exports #

TailSpace.lean #

Pairing.lean (RS.MForm/RS.SerrePairing namespaces) #

Duality.lean (RS.MForm/RS.SerrePairing namespaces, [T1Space X] [ConnectedSpace X]) #

The frozen target for #26 (recorded as documentation — NOT a compiled declaration here) #

The obligation this unit hands off to serre-duality-tails (its own design's §0, "frozen reconciliation"), Serre Duality in full:

theorem RS.TailDuality.i_neg_eq_h1 [T1Space X] [T2Space X] [CompactSpace X] [ConnectedSpace X]
    (D : RS.Divisor X) : RS.MForm.i (-D) = RS.Finiteness.h1 D

The direction is finrank_omegaSpace_le instantiated at H := RS.Cech.H1 D; the direction (Miranda Lemma 3.4/3.6, genuinely new labor) is entirely #26's own. Per serre-duality-tails' own frozen reconciliation (§0.1 of its design), finrank_omegaSpace_le is not literally instantiated there — #26 runs Miranda VI.3 on its own germ tail model (RS.LaurentTail.T D) instead, reusing only this unit's proof pattern (resAt_zpow_mul/laurentCoeffAt_order_ne_zero, spike-verified here) and citing exists_tail_pair_ne_zero's shape directly; Tail X/TailSpace D/ pair/finrank_omegaSpace_le remain fully self-contained, adapter-friendly exports regardless.

Deviations from docs/design/serre-duality-cech.md (recorded honestly) #

  1. The quotient revision (Jacobian/CanonicalForms/Quotient.lean, landed after this design was frozen): MForm X is now the QUOTIENT of a raw data carrier MFormData X by codiscrete/germ agreement, not a raw structure exposing coeffAt directly. pair is defined directly as the finite sum of MForm.laurentCoeffAt values (the design's own pair_eq_finsum_sum formula) via Finsupp.lsum, rather than via resAt of an explicit representative product + resAt_tail_mul — the same mathematical content (see pair_single's proof, the one place a representative's resAt_tail_mul is genuinely exercised, inside RS.laurentCoeffAt_order_ne_zero's proof chain via MForm.laurentCoeffAt_ord_ne_zero), with strictly less proof debt (bilinearity in τ is free from Finsupp.lsum, no manual finsum-over-two-supports bookkeeping).
  2. MForm.OmegaSpace's membership dropped the design's disjunction: it is now the single order-wise condition ∀ x, (-(D x) : WithTop ℤ) ≤ θ.ord x (no θ = 0 ∨ ...), uniform since θ = 0 has ord = ⊤ everywhere. exists_tail_pair_ne_zero/finrank_omegaSpace_le use this directly.
  3. Hypothesis simplification: Duality.lean's theorems need only [T1Space X] [ConnectedSpace X], not the design's listed [T1Space X] [T2Space X] [CompactSpace X] [ConnectedSpace X]MForm.OmegaSpace and Module.finrank are topology-free, per CONVENTIONS.md's "drop hypotheses lemmas don't need, when free to do so".
  4. finrank_omegaSpace_le's proof avoids Submodule.liftQ/LinearMap.quotKerEquivOfSurjective (the design's primary plan, §5 P2): building ↥(TailSpace D) ⧸ LinearMap.ker toH was found to elaborate extremely slowly (deterministic timeout at whnf/isDefEq even at 1,000,000 heartbeats). Root cause, isolated by direct experiment: ↥(TailSpace D) (a Submodule over the doubly-nested Finsupp carrier Tail X := X →₀ (ℤ →₀ ℂ)) has no findable AddCommGroup/ Sub/Neg instance at this pin — AddSubgroupClass (Submodule ℂ (Tail X)) (Tail X) itself fails to synthesize, even though Tail X unwrapped has a perfectly good AddCommGroup, and the SEMIRING-level Submodule.add_mem/smul_mem (not neg_mem/sub_mem) resolve fine. Used instead: the design's own documented risk-3 fallback (§7) — Φ/resDual are built directly from a chosen section Function.surjInv of toH, with a congruence lemma (pair_congr_of_toH_eq) replacing the quotient machinery, and every place a "difference" of ↥(TailSpace D) elements was needed is built as τ + (-1 : ℂ) • σ (+/, confirmed working) rather than τ - σ (Sub, confirmed broken). Zero mathematical content lost; this is exactly the fallback the design pre-registered for this contingency, not an ad-hoc patch. Filed as a coordination note for any future consumer building further Submodules over Tail X/TailSpace D: avoid Submodule.sub_mem/neg_mem/AddSubgroupClass/Sub/Neg on ↥(TailSpace D) directly; use Submodule.add_mem/smul_mem plus the (-1 : ℂ) • · trick instead.

Notes for serre-duality-tails (#26), the adapter surface as built #