abel-weak-solutions: weak solutions, the planar log-branch, and chain assembly (Forster #
§20.1–20.4)
Unit: abel-weak-solutions (docs/design/abel-weak-solutions.md). Builds the weak-solution
machinery Forster's Abel's-theorem proof (§20.5–20.7) needs, staying in planar pieces glued by
explicit chart formulas (no monodromy/homotopy machinery). Namespace RS.AbelWeak unless noted.
NOT registered in Jacobian.lean (orchestrator's job, per this unit's task hard rules).
API summary #
WeakSolution.lean(Forster §20.1–20.2, D1):IsWeakSolutionAt f a k— the local modelf = ψ(e·)·(e· − e a)^knearain somemaximalAtlascharte,ψsmooth (ℝ-C^∞, i.e.ContDiffAt ℝ ∞) and non-vanishing neare a.IsWeakSolutionOfPair f P Q— the two-point structure this unit's deliverable produces (ℝ-smooth offQ, non-vanishing off{P, Q}, local model+1atP,-1atQ). SCOPE ADDITION (docs/design/abel-theorem.md§1.4/§4.1's finding that Thm 21.4(b) needs thek-point case):IsWeakSolutionOfFinset f a x(Finset-indexed generalization) andisWeakSolutionOfFinset_prod(Forster's Lemma 20.1 — weak solutions of pairwise-disjoint pairs multiply). Also: theContMDiffAt 𝓘(ℝ, ℂ) 𝓘(ℝ, ℂ) ∞↔ planarContDiffAt ℝ ∞chart bridges (contMDiffAt_finsetProd_real,contDiffAt_comp_symm_of_contMDiffAt,contMDiffAt_comp_of_contDiffAt) and the multiplicativity stepIsWeakSolutionAt.mul_of_contMDiffAt.PlanarLogBranch.lean(§6.1, no manifold imports, pureℂ → ℂ):exists_logBranch_disk(disk case: a log branch of any non-vanishing holomorphichon a ball, via mathlib's disk-Morera primitive + a zero-derivative uniqueness argument — noComplex.log/Complex.argbranch-cut case analysis) andexists_exteriorLogBranch(the engine Forster's construction needs: a log branch of(z−b)/(z−a)on{ρ < ‖z‖}fora, b ∈ ball 0 ρ, via the inversionw = 1/ztransporting the exterior region to a genuine disk with no excluded point at all).SingleChart.lean(§6.2–6.3):exists_weakSolutionOfPair_chart— the single-chart weak solution: givenP, Qinside a common charte, both withinball c ρ, and aContDiffBump (0 : ℂ)cutoff interpolating the rational function(z−eP)/(z−eQ)(nearc) to the constant1(outsideclosedBall c ψ.rOut), producesfwithIsWeakSolutionOfPair f P Q, equal to1outside the open sete.symm '' ball c ψ.rOut(compact closure).ChainAssembly.lean(§7): three deliverables —exists_weakSolutionOfFinset— the SCOPE ADDITIONk-point layer, assembled directly fromexists_weakSolutionOfPair_chart(one call per pairwise-disjoint pair, each already living inside its own chart neighbourhood — exactly the shapeabel-theorem's own Thm 21.4(a) disjoint-chart construction produces, per its design's own §1.4 account) plusisWeakSolutionOfFinset_prod.pathIntegral_eq_sum_chartChain— the CC6-compliant telescoped path-integral identity (§7.1's(1/2πi) ∫∫_X (df/f) ∧ ωreplacement, D5): for anyChartChainCand holomorphicη,pathIntegral γ ηequals the finite sum of chart-local primitive differences. PurePath-API bookkeeping, no Stokes.residue_identity_two_point/logDeriv_rat_eq— the Lemma-20.3-specialized residue identity (Stokes-driven): for the two-puncture kernel(w−b)⁻¹ − (w−a)⁻¹(a weak solution's own log-derivative shape,logDeriv_rat_eq) and anyC¹compactly-supportedg, the area integral ofdbargagainst that kernel recoversg b − g a— no local-constancy hypothesis ongneeded (citingplanar-stokes-atoms' own hypothesis-free two-puncture exportRS.integral_wirtingerDbar_mul_inv_sub_sub_inv_sub_eqdirectly).
Status: the general multi-chart exists_weakSolutionOfPair is NOW BUILT (Rechart.lean + #
GeneralChain.lean, closed by the abel-theorem builder, authorized to edit this unit for
exactly this gap)
The design's §6.3/§7.1 deliverable — a weak solution of (P, Q) for an arbitrary path
γ : Path Q P not confined to one chart — is now built in full, zero sorries.
Rechart.lean(the missing "rechart" lemma this unit's original pass flagged as the gap):exists_localModel_of_isWeakSolutionAt—IsWeakSolutionAt's local model, witnessed in onemaximalAtlaschart, can be re-witnessed in ANY OTHERmaximalAtlaschart at the same point. Proved via mathlib's removable-singularity theorem: the transition mapS := e ∘ e'.symmbetween two charts is holomorphic (IsManifold's groupoid compatibility, transported throughContMDiffAt 𝓘(ℂ) 𝓘(ℂ) ωand mathlib's genericcontMDiffAt_iff_contDiffAt), its "divided difference"H := dslope S (e' a)is analytic too (HasFPowerSeriesAt.has_fpower_series_dslope_fslope) and NONZERO at the transition point (Shas a two-sided holomorphic inverse — the reverse transition — so the chain rule onT ∘ S = idforcesderiv S (e' a) ≠ 0), and the unconditional identitysub_smul_dslopegives the exact factorisatione x - e a = (e' x - e' a) * H (e' x)needed to rewrite the local model, withHsupplying the new nonvanishing smooth cofactor. Consumer:IsWeakSolutionAt.mul— fully general order-additive multiplication (subsumingWeakSolution.lean'sIsWeakSolutionAt.mul_of_contMDiffAt'sk2 = 0case), combiningIsWeakSolutionAt f a k1andIsWeakSolutionAt g a k2(witnessed by POSSIBLY DIFFERENT charts, aligned via the rechart lemma) intohequal tof * geverywhere except possibly ata, withIsWeakSolutionAt h a (k1 + k2). The "possibly except ata"Function.updateis not a cosmetic detail: at the cancelling casek1 = -k2 ≠ 0(a+1-order zero meeting a-1-order pole — exactly what happens at every interiorChartChainbreakpoint), the naive productf * ggenuinely disagrees with the correct weak solution AT the pointaitself, becauseIsWeakSolutionAt's local model pins downf's/g's literal (junk-convention) value there viazpow-at-zero (0 ^ k = 0fork ≠ 0, so(f * g) a = 0, but the removable-singularity limit isψ (e a) * φ (e a) ≠ 0);Function.updateat the single pointarepairs this uniformly for everyk1, k2(documented in the file's own docstring in full).GeneralChain.lean(the chain induction, usingRechart.lean's two exports as the engine):exists_weakSolutionOfPair {P Q : X} (hPQ : Q ≠ P) (δ : Path Q P) : ∃ f U, IsWeakSolutionOfPair f P Q ∧ IsOpen U ∧ IsCompact (closure U) ∧ P ∈ U ∧ Q ∈ U ∧ (∀ x ∉ U, f x = 1)— the fully general two-point deliverable, matchingabel-theorem's design's expected signature exactly (§6.3/§7.1). Built by strong induction along aRS.ChartChain δ(Jacobian.Path.Chain, breakpointsM k := δ.extend (C.t k)), gluing one freshSingleChartpiece per chain link at each step viaIsWeakSolutionAt.mul, applied at up to THREE points per step (the chain's fixed basepointM 0, the outgoing old endpointM m, and the new endpointM (m + 1), sinceM 0can coincide with either of the other two — handled by three exhaustive cases via the file's ownmerge_two/merge_two'/chainFinish/chainFinishSamehelper lemmas, INCLUDING the case where the path revisits its own basepointQat an interior time before reachingP). Also exports the small standalone lemmasisWeakSolutionAt_zero_of_ne,IsWeakSolutionAt.contMDiffAt_and_ne_zero_of_zero,IsWeakSolutionAt.contMDiffAt_of_nonneg,IsWeakSolutionAt.apply_eq_zero_of_ne_zero,IsWeakSolutionAt.congr_of_eventuallyEq,isWeakSolutionAt_one_zero(all small, reusable "order ↔ smoothness/vanishing" bridges built along the way; none of these needed a manifold-specificContMDiffMulinstance — the file's owncontMDiffAt_mul_realCompat, mirroringWeakSolution.lean'scontMDiffAt_finsetProd_real, routes every product through planarContDiffAt ℝinextChartAt 𝓘(ℂ) xinstead).
Consumer impact (abel-theorem, #29): both the k-point/Finset use (§1.4,
RS.Abel.exists_mero_of_periodVector_mem, via the already-existing exists_weakSolutionOfFinset)
and the two-point sufficiency direction (§2.1, RS.Abel.exists_mero_of_pathIntegral_mem, via the
now-built exists_weakSolutionOfPair above) have everything they need from this unit.
DAG audit (confirmed at build time) #
paths-and-integrals (Jacobian.Path, now including Jacobian.Path.Chain for ChartChain) and
planar-stokes-atoms (Jacobian.PlanarStokes) are imported, matching the design's recommended
tightened Builds on: line (§2.5) plus the ChartChain dependency the general-chain gap closure
needed. No file here imports Jacobian.Monodromy, Jacobian.FormTrace, or Jacobian.Meromorphic.