canonical-forms: meromorphic 1-forms and the canonical divisor K (namespace RS) #
API summary (see docs/design/canonical-forms.md). Builds on residue-calculus (BUILT) and
finiteness-and-chi (BUILT — its χ-ledger gate closed, see D9 below). Unit COMPLETE: all of
D1–D13 are proved in full, zero sorries across all 8 files.
Architecture (representational revision) #
A meromorphic 1-form is a germ class: RS.MForm X (Quotient.lean) is the quotient of raw
chartAt-indexed coefficient families (RS.MFormData X, MForm.lean — the meromorphic analogue
of Form1's coeffIn API / dbar's Form01, MeromorphicOn coefficients, (1,0)-transition
rule deriv τ, no conjugate) by RS.MFormData.Eqv: agreement of the preferred-chart coefficients
on a punctured neighborhood of every chart center. This is the same CC3 quotient pattern as
ℳ X := MeroGermOn X univ, and fixes the raw representation's junk-value flaw (meromorphic
coefficients carry junk at poles, so RAW equality is too fine: "ord = ⊤ everywhere ⇒ θ = 0"
is FALSE for raw families but DEFINITIONAL for classes). All reading maps (ord, resAt,
laurentCoeffAt, divisor) are germ-at-the-center functionals, so they descend by one-line
congruences; the raw files remain the foundation every proof works through via representatives.
Exports #
- Data layer (
MForm.lean/OrdRes.lean, D1–D4/D6 raw):RS.MFormData X(structure,ext,Zero/Add/Neg/Sub/SMul ℂ/AddCommGroup/Module ℂ);RS.MFormCoeffData X ι/RS.MFormData.ofCoeffs(covering-chart-family constructor, mirrorsForm1CoeffData);RS.MFormData.ord/resAt(read via the fixedchartAt), chart-invarianceRS.MFormData.ord_eq_of_mem_source/resAt_eq_of_mem_source, cross-point readingRS.MFormData.ord_eq_meromorphicOrderAt_of_mem_source(θ.ord p = meromorphicOrderAt (θ.coeffAt x) (chartAt ℂ x p)forpin the chart source — D12's engine); propagationeventually_ord_eq_top/eventually_ord_eq_zero;RS.MFormData.divisor/degree;RS.MFormData.ofForm1/RS.Form1.toMFormData;RS.MFormData.smul/d/dlog(via the canonicalMeroGermOn.holoRepr; thecompat-at-poles case split isRS.deriv_comp_chart_congr). RS.MForm X(Quotient.lean, D1/D2/D4–D6): the quotient type,MForm.mk/exists_rep/ind/sound/mk_eq_mk,AddCommGroup/Module ℂ;RS.MForm.ord/resAt/laurentCoeffAt(lifted,@[simp]ord_mk/resAt_mk/laurentCoeffAt_mk,resAt_eq_laurentCoeffAt);RS.MForm.divisor/degree/divisor_apply/divisor_zero; propagation lemmas; D5RS.MForm.eq_zero_or_forall_ord_ne_top(the global zero-dichotomy, clopen + connectedness) withRS.MForm.ord_ne_top/eq_zero_iff_forall_ord_eq_top.- Differentials & the
ℳ(X)-module structure (Differential.lean, D7):RS.MForm.ofForm1/RS.Form1.toMForm : Form1 X →ₗ[ℂ] MForm X/RS.MForm.ofForm1_injective; the fullModule (ℳ X) (MForm X)instance plusIsScalarTower ℂ (ℳ X) (MForm X)/SMulCommClass ℂ (ℳ X) (MForm X)(via theholoReprgerm identitiesRS.Mero.holoRepr_add/mul/smul/inv/zero/one);RS.MForm.ord_smul_mero((h • Θ).ord x = h.ord x + Θ.ord x);RS.MForm.dwithd_add/d_const;RS.MForm.dlogwith the argument-principle atomRS.MForm.resAt_dlog : (dlog f).resAt x = (f.ord x).untop₀(junk-robust, nof ≠ 0). - D8, one-dimensionality (
OneDimensional.lean):RS.MForm.exists_unique_smul_of_ne_zero(θ₀ ≠ 0 → ∀ θ, ∃! h : ℳ X, θ = h • θ₀; existenceRS.MForm.exists_smul_eqby chart-local ratios +MeroGermOn.exists_glue, uniquenessRS.MForm.smul_left_injectiveviaRS.MForm.smul_eq_zero_iff). Needs[T1Space X] [ConnectedSpace X]. - D10, the canonical divisor (
OneDimensional.lean):RS.canonicalDivisorOf θ₀ := θ₀.divisor(anabbrev),RS.MForm.divisor_smul_mero, andRS.canonicalDivisorOf_linearEquiv(any two canonical divisors differ by a principal divisor). D10 lives here, not in the gatedExistence.lean(see below) — it has no finiteness dependence. - D11 (
LinearSystems.lean):RS.MForm.OmegaSpace D : Submodule ℂ (MForm X)(order-wise, instance-free)/RS.MForm.mem_omegaSpace_iff/RS.MForm.i D(index of speciality);RS.MForm.smul_mem_omegaSpace_iff(the pointwise dictionary);RS.ΩIsoLinSys (h₀ : θ₀ ≠ 0) (D) : MForm.OmegaSpace D ≃ₗ[ℂ] LinSys (D + canonicalDivisorOf θ₀)andRS.i_eq_l_add_canonicalDivisorOf([T1] [T2] [CompactSpace] [ConnectedSpace]). - D12 (
LinearSystems.lean):RS.form1ToOmega/RS.form1ToOmega_surjective/RS.holomorphicMFormsEquiv : Form1 X ≃ₗ[ℂ] MForm.OmegaSpace (0 : Divisor X)(NO topological instances needed — the surjectivity repair works pointwise throughholoRepr), andRS.genus_eq_finrank_omegaSpace_zero([T2] [CompactSpace] [ConnectedSpace]). - D13 (
LinearSystems.lean):RS.MLFormData/.Realizes(on classes, viaMForm.laurentCoeffAt)/.totalRes/.Realizes.resAt_eq. - D9 (
Existence.lean, the unit's raison d'être, gate now closed sinceJacobian/Finiteness/Chi.leanlanded):RS.exists_nonconstant_mero [T2Space X] [CompactSpace X] [ConnectedSpace X] : ∃ f : ℳ X, ∀ c : ℂ, f ≠ algebraMap ℂ (ℳ X) c(Forster 16.11 pattern: a divisorsingle P nof large enough degree forcesl(D) ≥ 2 > 1 = l(0)viafiniteness-and-chi'schi_zero_add_degree_le_l, soL(0) = span{1}is a PROPER subspace ofL(D)) andRS.exists_ne_zero_mform [T2Space X] [CompactSpace X] [ConnectedSpace X] : ∃ θ : MForm X, θ ≠ 0(:= ⟨MForm.d f, MForm.d_ne_zero hf⟩);RS.exists_canonicalDivisor(a canonical divisor concretely exists, feeding D10'scanonicalDivisorOf). AlsoFunction.locallyFinsuppWithin.degree_single (P) (n) : (single P n : Divisor X).degree = n— closes the §1.6Divisor.singlegap honestly: mathlib's ownsinglealready lands inlocallyFinsuppWithin univ Y, definitionallyRS.Divisor X, so no separate constructor was ever needed, only this degree fact (generalizingFiniteness.degree_single's fixedn = 1).RS.MForm.d_ne_zeroalso lives here (moved fromresidue-theorem/Reduction.lean, which had proved it purely with canonical-forms/meromorphic-and-divisors machinery as an internal step — since residue-theorem is DOWNSTREAM of canonical-forms, importing it back would cycle; this is the clean home, andresidue-theoremnow imports it from here).