A machine-checked solution to the Jacobians challenge

19.8. Finiteness.CechFinitenessDtwist🔗

Jacobians.Finiteness.CechFinitenessDtwistsource

piSec

The 𝒪_D Pi-section submodule over a finite family of opens W : ι → Opens X: tuples of germs with each component a 𝒪_D-germ. Both sections0 D and sections1 D are instances of this (with W the cover-sets resp. the pairwise overlaps). Definitionally a Submodule of ∀ i, MGerm (W i).

def piSec {ι : Type*} (W : ι → Opens X) (D : Divisor X) : Submodule ℂ (∀ i, MGerm (W i)) where

piSec_coeff

The component coefficient functional piSec W (D+P) →ₗ[ℂ] ℂ at index i: the order-(−D(P)−1) principal-part coefficient at P on W i when P ∈ W i (coeffGermLin), and 0 otherwise. Its vanishing characterises 𝒪_D-membership of the i-component (piSec_coeff_eq_zero_iff).

noncomputable def piSec_coeff {ι : Type*} (W : ι → Opens X) (D : Divisor X) (P : X) (i : ι) :
    piSec W (D + Finsupp.single P 1) →ₗ[ℂ] ℂ

piSec_coeff_eq_zero_iff

The component coefficient vanishes iff the i-component is a 𝒪_D-germ. When P ∈ W i this is ker_coeffGermLin; when P ∉ W i the coefficient is 0 and the D / D+P section spaces coincide (OmegaDGerm_add_single_eq_of_not_mem), so membership is automatic.

theorem piSec_coeff_eq_zero_iff {ι : Type*} (W : ι → Opens X) (D : Divisor X) (P : X) (i : ι)
    (f : piSec W (D + Finsupp.single P 1)) :
    piSec_coeff W D P i f = 0 ↔ (f : ∀ i, MGerm (W i)) i ∈ OmegaDGerm D (W i)

finiteDimensional_piSec_quotient

The Pi-section skyscraper-correction quotient is finite-dimensional. Over a *finite* family W : ι → Opens X, the quotient piSec W (D+P) ⧸ piSec W D injects, via the tuple of component principal-part coefficients piSec_coeff, into the clean finite-dimensional ι → ℂ; the kernel of that tuple map is exactly piSec W D (piSec_coeff_eq_zero_iff), so the quotient is finite-dimensional. (Routing through ι → ℂ rather than the product of stalk quotients avoids the heavy Module-instance synthesis on the dependent product of OmegaDGerm-quotients.)

theorem finiteDimensional_piSec_quotient {ι : Type*} [Fintype ι] (W : ι → Opens X)
    (D : Divisor X) (P : X) :
    FiniteDimensional ℂ
      (piSec W (D + Finsupp.single P 1) ⧸
        (piSec W D).submoduleOf (piSec W (D + Finsupp.single P 1)))

finiteDimensional_inf_quotient

Finiteness through . For A ≤ B and any K, the quotient (K ⊓ B) ⧸ (K ⊓ A) injects into B ⧸ A (the inclusion K ⊓ B ↪ B), so it is finite-dimensional whenever B ⧸ A is. (Used for cocycles1 = ker δ¹ ⊓ sections1: K = ker δ¹, A/B = sections1 D / sections1 (D+P).)

theorem finiteDimensional_inf_quotient {M : Type*} [AddCommGroup M] [Module ℂ M]
    (K A B : Submodule ℂ M) (_hAB : A ≤ B)
    (hfin : FiniteDimensional ℂ (B ⧸ A.submoduleOf B)) :
    FiniteDimensional ℂ
      ((K ⊓ B : Submodule ℂ M) ⧸ (K ⊓ A).submoduleOf (K ⊓ B : Submodule ℂ M))

finiteDimensional_map_quotient

Finiteness through map. For A0 ≤ B0 and a linear map f, the quotient (map f B0) ⧸ (map f A0) is a quotient (surjective image) of B0 ⧸ A0 (via f descended), so it is finite-dimensional whenever B0 ⧸ A0 is. (Used for coboundaries1 = map δ⁰ sections0.)

theorem finiteDimensional_map_quotient {M N : Type*} [AddCommGroup M] [Module ℂ M]
    [AddCommGroup N] [Module ℂ N] (f : M →ₗ[ℂ] N) (A0 B0 : Submodule ℂ M) (_hAB : A0 ≤ B0)
    (hfin : FiniteDimensional ℂ (B0 ⧸ A0.submoduleOf B0)) :
    FiniteDimensional ℂ ((B0.map f) ⧸ (A0.map f).submoduleOf (B0.map f))

finiteDimensional_sections1_quotient

sections1 (D+P) ⧸ sections1 D is finite-dimensional: it injects into the finite product ∏ p, (OmegaDGerm (D+P) (U_p) ⧸ OmegaDGerm D (U_p)) of stalk quotients (each ≤ 1-dim, finitely many overlaps p : ι × ι).

theorem finiteDimensional_sections1_quotient :
    FiniteDimensional ℂ
      (𝔘.sections1 (D + Finsupp.single P 1) ⧸
        (𝔘.sections1 D).submoduleOf (𝔘.sections1 (D + Finsupp.single P 1)))

finiteDimensional_sections0_quotient

sections0 (D+P) ⧸ sections0 D is finite-dimensional (degree-0 analogue).

theorem finiteDimensional_sections0_quotient :
    FiniteDimensional ℂ
      (𝔘.sections0 (D + Finsupp.single P 1) ⧸
        (𝔘.sections0 D).submoduleOf (𝔘.sections0 (D + Finsupp.single P 1)))

finiteDimensional_cocycles1_quotient

cocycles1 (D+P) ⧸ cocycles1 D is finite-dimensional: the cocycle quotient injects into the section quotient sections1 (D+P) ⧸ sections1 D (cocycles1 = ker δ¹ ⊓ sections1).

theorem finiteDimensional_cocycles1_quotient :
    FiniteDimensional ℂ
      (𝔘.cocycles1 (D + Finsupp.single P 1) ⧸
        (𝔘.cocycles1 D).submoduleOf (𝔘.cocycles1 (D + Finsupp.single P 1)))

finiteDimensional_coboundaries1_quotient

coboundaries1 (D+P) ⧸ coboundaries1 D is finite-dimensional: it is a quotient of the degree-0 section quotient sections0 (D+P) ⧸ sections0 D (coboundaries1 = δ⁰(sections0)).

theorem finiteDimensional_coboundaries1_quotient :
    FiniteDimensional ℂ
      (𝔘.coboundaries1 (D + Finsupp.single P 1) ⧸
        (𝔘.coboundaries1 D).submoduleOf (𝔘.coboundaries1 (D + Finsupp.single P 1)))

h1Map_mk

h1Map on a cocycle class is the class of the cocycle inclusion: h1Map [c] = [incl c]. (The defining Submodule.mapQ computation.)

theorem h1Map_mk (c : 𝔘.cocycles1 D) :
    𝔘.h1Map D P (Submodule.Quotient.mk c)
      = Submodule.Quotient.mk (𝔘.cocyclesIncl D P c)

finiteDimensional_cechH1_add_single_of

Forward per-point step. H¹(𝒪_D) finite ⟹ H¹(𝒪_{D+P}) finite. range h1Map is finite (image of finite-dim H¹(𝒪_D)); coker h1Map is a quotient of cocycles1(D+P)/cocycles1(D) (finite, finiteDimensional_cocycles1_quotient); so H¹(𝒪_{D+P}) is the extension of two finite-dim spaces (Module.Finite.of_submodule_quotient).

theorem finiteDimensional_cechH1_add_single_of
    (h : FiniteDimensional ℂ (𝔘.cechH1 D)) :
    FiniteDimensional ℂ (𝔘.cechH1 (D + Finsupp.single P 1))

finiteDimensional_ker_h1Map

ker (h1Map D P) is finite-dimensional. An element is a D-cocycle class [c]_D whose (D+P)-class vanishes, i.e. c ∈ cocycles1 D ⊓ coboundaries1 (D+P); the H¹-class map surjects that intersection onto ker (h1Map D P) (killing cocycles1 D ⊓ coboundaries1 D), and the resulting domain quotient injects into the finite coboundaries1 (D+P)/coboundaries1 D (finiteDimensional_inf_quotient).

theorem finiteDimensional_ker_h1Map :
    FiniteDimensional ℂ (LinearMap.ker (𝔘.h1Map D P))

finiteDimensional_cechH1_of_add_single

Backward per-point step. H¹(𝒪_{D+P}) finite ⟹ H¹(𝒪_D) finite. ker (h1Map D P) is finite-dimensional (finiteDimensional_ker_h1Map), and H¹(𝒪\_D)/ker (h1Map) ≅ range (h1Map) ⊆ H¹(𝒪\_\{D+P\}) is finite; so H¹(𝒪\_D) is the extension of two finite-dim spaces (Module.Finite.of_submodule_quotient).

theorem finiteDimensional_cechH1_of_add_single
    (h : FiniteDimensional ℂ (𝔘.cechH1 (D + Finsupp.single P 1))) :
    FiniteDimensional ℂ (𝔘.cechH1 D)

finiteDimensional_cechH1_add_single_iff

The bidirectional per-point step. H¹(𝒪_{D+P}) is finite iff H¹(𝒪_D) is.

theorem finiteDimensional_cechH1_add_single_iff :
    FiniteDimensional ℂ (𝔘.cechH1 (D + Finsupp.single P 1)) ↔
      FiniteDimensional ℂ (𝔘.cechH1 D)

finiteDimensional_cechH1_add_singlePoint_iff

H¹(𝒪_{D + single P k}) is finite iff H¹(𝒪_D) is, for any integer k (induct on k via Int.induction_on; ±1 at a time is the per-point step).

theorem finiteDimensional_cechH1_add_singlePoint_iff (k : ℤ) :
    FiniteDimensional ℂ (𝔘.cechH1 (D + Finsupp.single P k)) ↔
      FiniteDimensional ℂ (𝔘.cechH1 D)

finiteDimensional_cechH1_of_zero

Finiteness of H¹(𝒪_D) for any divisor D, on a FIXED cover, from the D = 0 case (the divisor induction). Finsupp.induction on D adds one point at a time; each addition is the single-point step.

theorem finiteDimensional_cechH1_of_zero (h0 : FiniteDimensional ℂ (𝔘.cechH1 (0 : Divisor X)))
    (D : Divisor X) :
    FiniteDimensional ℂ (𝔘.cechH1 D)

finiteDimensional_cechH1_general

General-divisor Čech finiteness (Forster 14.9 + §16 skyscraper). For an arbitrary finite cover 𝔘 and an arbitrary divisor D, H¹(𝔘, 𝒪_D) is finite-dimensional. The D = 0 case (finiteDimensional_cechH1_zero) is climbed to general D one point at a time via the skyscraper stalk quotient (finiteDimensional_cechH1_of_zero).

theorem finiteDimensional_cechH1_general (𝔘 : FiniteCover X) (D : Divisor X) :
    FiniteDimensional ℂ (𝔘.cechH1 D)

exists_cechModel_general

exists_cechModel 𝔘 D — the full, general-divisor statement. Combines the general-divisor finiteness finiteDimensional_cechH1_general (this file) with the artificial single-point Montel model exists_cechModel_of_finiteDimensional (CechModelArtificial). This is exactly the statement of CechFinitenessWiring.exists_cechModel for an ARBITRARY divisor D — the finiteness node's keystone — with no remaining hypotheses. (The CechFinitenessWiring.exists_cechModel declaration itself is discharged by this term once the model-types import cycle is broken; see the project notes.)

theorem exists_cechModel_general (𝔘 : FiniteCover X) (D : Divisor X) :
    ∃ (d : DiskOverlapData) (c : Coboundaries d), Nonempty (𝔘.cechH1 D ≃ₗ[ℂ] c.supH1)