A machine-checked solution to the Jacobians challenge

28.7. H1Genus.SerreCupProduct🔗

Jacobians.H1Genus.SerreCupProductsource

mulLeftG

Multiplication of MGerm U by a fixed germ a : MGerm U, as an ℂ-linear map. (MGerm U is a Filter.Germ CommRing; multiplication is -bilinear because the scalar action c • g is the pointwise (c • ·) — definitionally ↑(c • g) — so c • (a*b) = (c•a)*b.)

noncomputable def mulLeftG {U : Opens X} (a : MGerm U) : MGerm U →ₗ[ℂ] MGerm U where

smul_mul_MGerm

Scalar-multiplication / ring-multiplication associativity on MGerm ((a • x) * y = a • (x*y)): the Module ℂ action is the pointwise (a • ·) (definitionally ↑(a • ·)). Proven directly to avoid an IsScalarTower ℂ (MGerm U) (MGerm U) synthesis gap (the Germ Module ℂ comes from the C*-algebra path, not registered as a scalar tower with the ring multiplication).

theorem smul_mul_MGerm {X : Type*} [TopologicalSpace X] {U : Opens X} (a : ℂ) (x y : MGerm U) :
    (a • x) * y = a • (x * y)

rawRestrictG_mul

Germ restriction is a ring hom (rawRestrictG (a*b) = rawRestrictG a * rawRestrictG b): both sides are the germ of the pointwise product precomposed with the open inclusion.

theorem rawRestrictG_mul {X : Type*} [TopologicalSpace X] {U V : Opens X} (h : V ≤ U)
    (a b : MGerm U) :
    rawRestrictG h (a * b) = rawRestrictG h a * rawRestrictG h b

globalGerm

The germ-class on ↥U of (the restriction of) a *global* meromorphic function F. This is the function-side avatar of f·ω₀ after dividing by ω₀: the cup product multiplies a 𝒪_D cochain by this germ.

noncomputable def globalGerm (F : MeromorphicFunction X) (U : Opens X) : MGerm U

rawRestrictG_globalGerm

Restriction of the global germ to a smaller open is the global germ there (F is the same global function; restriction is precomposition with the open inclusion, and (F∘val) ∘ openIncl = F∘val).

theorem rawRestrictG_globalGerm {X : Type*} [TopologicalSpace X] [ChartedSpace ℂ X]
    (F : MeromorphicFunction X)
    {U V : Opens X} (h : V ≤ U) :
    rawRestrictG h (globalGerm F U) = globalGerm F V

ordU_globalMul

The order on ↥U of (F∘val)·g is orderW F (corresponding point) plus the order of g. The key order-additivity (meromorphicOrderAt_mul) behind the poles-cancellation of the cup product.

theorem ordU_globalMul {U : Opens X} (F : MeromorphicFunction X) {g : U → ℂ}
    (hg : IsMeromorphic (U : Type _) g) (x : U) :
    ordU ((F.toFun ∘ Subtype.val) * g) x = F.orderW x.1 + ordU g x

mulConstG_omegaDGerm

Multiplying a 𝒪_D germ by f ∈ L(K−D) lands in 𝒪_K (poles cancel). If f ∈ L(K−D) (div f ≥ D−K) and s ∈ 𝒪_D(U) (div s ≥ −D), then f·s ∈ 𝒪_K(U) (div(f·s) ≥ −K): the order adds (ordU_globalMul), and −(K x) ≤ orderW f x + ordU s from −((K−D) x) ≤ orderW f x and −(D x) ≤ ordU s.

theorem mulConstG_omegaDGerm {D K : Divisor X} {f : MeromorphicFunction X}
    (hf : f ∈ linearSystem (X := X) (K - D)) {U : Opens X} {s : MGerm U}
    (hs : s ∈ OmegaDGerm D U) :
    globalGerm f U * s ∈ OmegaDGerm K U

cupCochain0

Multiply each component of a 0-cochain by the global germ of f on U_i.

noncomputable def cupCochain0 (f : MeromorphicFunction X) : 𝔘.Cochain0 →ₗ[ℂ] 𝔘.Cochain0

cupCochain1

Multiply each component of a 1-cochain by the global germ of f on U_i ∩ U_j.

noncomputable def cupCochain1 (f : MeromorphicFunction X) : 𝔘.Cochain1 →ₗ[ℂ] 𝔘.Cochain1

cupCochain2

Multiply each component of a 2-cochain by the global germ of f on the triple intersection.

noncomputable def cupCochain2 (f : MeromorphicFunction X) : 𝔘.Cochain2 →ₗ[ℂ] 𝔘.Cochain2

cupCochain0_apply

@[simp] theorem cupCochain0_apply {X : Type*} [TopologicalSpace X] [ChartedSpace ℂ X]
    (𝔘 : FiniteFamily X)
    (f : MeromorphicFunction X) (c : 𝔘.Cochain0) (i : 𝔘.ι) :
    cupCochain0 𝔘 f c i = globalGerm f (𝔘.U i) * c i

cupCochain1_apply

@[simp] theorem cupCochain1_apply {X : Type*} [TopologicalSpace X] [ChartedSpace ℂ X]
    (𝔘 : FiniteFamily X)
    (f : MeromorphicFunction X) (c : 𝔘.Cochain1) (p : 𝔘.ι × 𝔘.ι) :
    cupCochain1 𝔘 f c p = globalGerm f (𝔘.U p.1 ⊓ 𝔘.U p.2) * c p

cupCochain2_apply

@[simp] theorem cupCochain2_apply {X : Type*} [TopologicalSpace X] [ChartedSpace ℂ X]
    (𝔘 : FiniteFamily X)
    (f : MeromorphicFunction X) (c : 𝔘.Cochain2) (t : 𝔘.ι × 𝔘.ι × 𝔘.ι) :
    cupCochain2 𝔘 f c t = globalGerm f (𝔘.U t.1 ⊓ 𝔘.U t.2.1 ⊓ 𝔘.U t.2.2) * c t

cupCochain1_comp_cechDelta0

Multiplying by f commutes with δ⁰ (cup ∘ δ⁰ = δ⁰ ∘ cup). On each pair (i,j), both sides equal globalGerm f (U_i∩U_j) · (g_j|_{ij} − g_i|_{ij}) — germ restriction is a ring hom and globalGerm f restricts to globalGerm f.

theorem cupCochain1_comp_cechDelta0 {X : Type*} [TopologicalSpace X] [ChartedSpace ℂ X]
    (𝔘 : FiniteFamily X) (f : MeromorphicFunction X) :
    (cupCochain1 𝔘 f) ∘ₗ 𝔘.cechDelta0 = 𝔘.cechDelta0 ∘ₗ (cupCochain0 𝔘 f)

cupCochain2_comp_cechDelta1

Multiplying by f commutes with δ¹ (cup ∘ δ¹ = δ¹ ∘ cup). Termwise: germ restriction is a ring hom, and globalGerm f restricts to globalGerm f, so the three alternating terms each carry the f-factor through.

theorem cupCochain2_comp_cechDelta1 {X : Type*} [TopologicalSpace X] [ChartedSpace ℂ X]
    (𝔘 : FiniteFamily X) (f : MeromorphicFunction X) :
    (cupCochain2 𝔘 f) ∘ₗ 𝔘.cechDelta1 = 𝔘.cechDelta1 ∘ₗ (cupCochain1 𝔘 f)

cupCochain0_sections0

Multiplying a 0-cochain of 𝒪_D-sections by f ∈ L(K−D) gives a 0-cochain of 𝒪_K-sections.

theorem cupCochain0_sections0 {D K : Divisor X} {f : MeromorphicFunction X}
    (hf : f ∈ linearSystem (X := X) (K - D)) {c : 𝔘.Cochain0} (hc : c ∈ 𝔘.sections0 D) :
    cupCochain0 𝔘 f c ∈ 𝔘.sections0 K

cupCochain1_sections1

Multiplying a 1-cochain of 𝒪_D-sections by f ∈ L(K−D) gives a 1-cochain of 𝒪_K-sections.

theorem cupCochain1_sections1 {D K : Divisor X} {f : MeromorphicFunction X}
    (hf : f ∈ linearSystem (X := X) (K - D)) {c : 𝔘.Cochain1} (hc : c ∈ 𝔘.sections1 D) :
    cupCochain1 𝔘 f c ∈ 𝔘.sections1 K

cupCochain1_cocycles1

The cup product maps 𝒪_D-cocycles to 𝒪_K-cocycles: it preserves ker δ¹ (commutation cup₂ ∘ δ¹ = δ¹ ∘ cup₁) and the sheaf condition (cupCochain1_sections1).

theorem cupCochain1_cocycles1 {D K : Divisor X} {f : MeromorphicFunction X}
    (hf : f ∈ linearSystem (X := X) (K - D)) {c : 𝔘.Cochain1} (hc : c ∈ 𝔘.cocycles1 D) :
    cupCochain1 𝔘 f c ∈ 𝔘.cocycles1 K

cupCochain1_coboundaries1

The cup product maps 𝒪_D-coboundaries to 𝒪_K-coboundaries: cup₁(δ⁰ s) = δ⁰(cup₀ s) (commutation) and cup₀ s is a 𝒪_K-section (cupCochain0_sections0).

theorem cupCochain1_coboundaries1 {D K : Divisor X} {f : MeromorphicFunction X}
    (hf : f ∈ linearSystem (X := X) (K - D)) {c : 𝔘.Cochain1} (hc : c ∈ 𝔘.coboundaries1 D) :
    cupCochain1 𝔘 f c ∈ 𝔘.coboundaries1 K

cupCocyclesMap

The cup product as a linear map of cocycle submodules cocycles1 D → cocycles1 K (the restriction of cupCochain1 f).

noncomputable def cupCocyclesMap {D K : Divisor X} {f : MeromorphicFunction X}
    (hf : f ∈ linearSystem (X := X) (K - D)) :
    ↥(𝔘.cocycles1 D) →ₗ[ℂ] ↥(𝔘.cocycles1 K)

cupH1

The descended cup product on cohomology [ξ] ↦ [f·ξ], cechH1 D →ₗ[ℂ] cechH1 K. Well-defined because the cup product maps cocycles1 D → cocycles1 K (cupCochain1_cocycles1) and coboundaries1 D → coboundaries1 K (cupCochain1_coboundaries1), so it descends through the Z¹/B¹ quotient (Submodule.mapQ).

noncomputable def cupH1 {D K : Divisor X} {f : MeromorphicFunction X}
    (hf : f ∈ linearSystem (X := X) (K - D)) :
    𝔘.cechH1 D →ₗ[ℂ] 𝔘.cechH1 K

cupH1_mk

The action of cupH1 on a class [ξ] represented by a cocycle c: cupH1 hf [c] = [f·c].

@[simp] theorem cupH1_mk {D K : Divisor X} {f : MeromorphicFunction X}
    (hf : f ∈ linearSystem (X := X) (K - D)) (c : ↥(𝔘.cocycles1 D)) :
    cupH1 hf (Submodule.Quotient.mk c) = Submodule.Quotient.mk (cupCocyclesMap hf c)

globalGerm_add

globalGerm is additive in the meromorphic function.

theorem globalGerm_add {X : Type*} [TopologicalSpace X] [ChartedSpace ℂ X]
    (f g : MeromorphicFunction X)
    (U : Opens X) :
    globalGerm (f + g) U = globalGerm f U + globalGerm g U

globalGerm_smul

globalGerm is ℂ-homogeneous in the meromorphic function.

theorem globalGerm_smul {X : Type*} [TopologicalSpace X] [ChartedSpace ℂ X]
    (c : ℂ) (f : MeromorphicFunction X)
    (U : Opens X) :
    globalGerm (c • f) U = c • globalGerm f U

globalGerm_eq_zero_of_germZero

A germ-zero global function has zero germ on every open (orderW f ≡ ⊤ ⟹ globalGerm f U = 0): f.toFun vanishes on a punctured neighbourhood of every point, which transfers to ↥U along the open inclusion.

theorem globalGerm_eq_zero_of_germZero {X : Type*} [TopologicalSpace X] [ChartedSpace ℂ X]
    {f : MeromorphicFunction X}
    (hf : ∀ x, f.orderW x = ⊤) (U : Opens X) : globalGerm f U = 0

cupH1_add

The cup product is additive in f (over a common cocycle representative): the two cocycle-level maps agree (germ multiplication distributes over globalGerm_add), so the descended maps agree.

theorem cupH1_add {D K : Divisor X} {f g : MeromorphicFunction X}
    (hf : f ∈ linearSystem (X := X) (K - D)) (hg : g ∈ linearSystem (X := X) (K - D))
    (hfg : f + g ∈ linearSystem (X := X) (K - D)) (ξ : 𝔘.cechH1 D) :
    cupH1 hfg ξ = cupH1 hf ξ + cupH1 hg ξ

cupH1_smul

The cup product is ℂ-homogeneous in f.

theorem cupH1_smul {D K : Divisor X} (a : ℂ) {f : MeromorphicFunction X}
    (hf : f ∈ linearSystem (X := X) (K - D)) (haf : a • f ∈ linearSystem (X := X) (K - D))
    (ξ : 𝔘.cechH1 D) :
    cupH1 haf ξ = a • cupH1 hf ξ

cupH1_eq_zero_of_germZero

A germ-zero f gives the zero cup map (cupH1 = 0): globalGerm f U = 0 so every cochain is multiplied to 0. This is the descent condition for the junk-free lSysModule (K−D) — the cup product depends only on the germ class of f.

theorem cupH1_eq_zero_of_germZero {D K : Divisor X} {f : MeromorphicFunction X}
    (hf : f ∈ linearSystem (X := X) (K - D)) (hf0 : ∀ x, f.orderW x = ⊤) (ξ : 𝔘.cechH1 D) :
    cupH1 hf ξ = 0

cupSubtype

The cup product as an ℂ-linear map *in f* on the linear system ↥(linearSystem (K−D)), valued in cechH1 D →ₗ[ℂ] cechH1 K.

noncomputable def cupSubtype (D K : Divisor X) :
    ↥(linearSystem (X := X) (K - D)) →ₗ[ℂ] (𝔘.cechH1 D →ₗ[ℂ] 𝔘.cechH1 K) where

cup

The bundled bilinear cup product cup : lSysModule (K−D) →ₗ[ℂ] (cechH1 D →ₗ[ℂ] cechH1 K). ℂ-linear in f (the junk-free source lSysModule) and in ξ — the algebraic input the Forster §17.5 residue pairing ⟨f, ξ⟩ = Res(f·ω₀·ξ) consumes, with the global residue Res : cechH1 K → ℂ applied afterwards. Descends from cupSubtype because a germ-zero f gives the zero cup map (cupH1_eq_zero_of_germZero), so the cup is well-defined on germ classes.

noncomputable def cup (D K : Divisor X) :
    lSysModule (K - D) →ₗ[ℂ] (𝔘.cechH1 D →ₗ[ℂ] 𝔘.cechH1 K)

cup_mk

@[simp] theorem cup_mk (D K : Divisor X) (f : ↥(linearSystem (X := X) (K - D))) (ξ : 𝔘.cechH1 D) :
    cup D K (Submodule.Quotient.mk f) ξ = cupH1 f.2 ξ