monodromy: continuation of log f along pole/zero-avoiding paths #
Unit: monodromy (docs/design/monodromy.md §4.2). The DAG-critical deliverable: a continuous
branch of log f (equivalently, a primitive of dlog f = df/f) along any path avoiding the
zeros/poles of a meromorphic function f : ℳ X, with the defining exponential compatibility
exp (F t) = f.holoRepr (γ.extend t).
dlogForm is built by reusing Jacobian/Forms/MDifferential.lean's RS.mdifferential
(the differential of a holomorphic function) and RS.Form1.smulFun (multiplication of a form by
a holomorphic function) — both already proved generically over any X satisfying the standing
surface hypotheses — instantiated with X := poleZeroLocus f (the open locus, Jacobian/Monodromy /OpenLocus.lean). This sidesteps entirely the chart-transition/subtypeRestr bookkeeping a
from-scratch Form1CoeffData construction would need: f.holoRepr restricted to the locus is
ContMDiff (mathlib's contMDiffAt_subtype_iff — smoothness of an open-submanifold restriction
is exactly a per-point statement), nonvanishing there (order 0 at every point of the locus, by
construction), hence its logarithmic derivative (f.holoRepr)⁻¹ • d(f.holoRepr) assembles as a
genuine Form1 (poleZeroLocus f) via the two already-built combinators, no new coefficient-data
proof needed.
The exponential-compatibility theorem (exp_eq_holoRepr_of_isPrimitiveAlong) shows any primitive
of dlogForm normalized at the starting value is an honest branch of log f, by exhibiting
H t := f.holoRepr (γ.extend t) * exp (-(F t)) as locally constant (zero-derivative argument, via
RS.eventuallyEq_of_hasDerivAt_eq) and hence globally constant (ℝ preconnected) — no branch-cut
case analysis on Complex.log/Complex.arg anywhere.
Main declarations:
RS.Monodromy.poleZeroLocus,RS.Monodromy.dlogForm— the pole/zero-free locus and the logarithmic-derivative 1-form on it.RS.Monodromy.exp_eq_holoRepr_of_isPrimitiveAlong— the exponential-compatibility theorem.RS.Monodromy.exists_logBranchAlong,RS.Monodromy.logBranchAlong_unique— existence with a prescribed initial branch value, and uniqueness (both bookkeeping overPath's already-built existence/uniqueness API).
The pole/zero-free locus #
The zero/pole locus of f as an open pole-free locus ((divisor f).support is finite by
compactness, hence closed by T2Space).
Equations
Instances For
Lift a path avoiding f's zeros/poles into poleZeroLocus f.
NB: this is a thin specialization of Path.liftOpenLocus (OpenLocus.lean) landing directly in
poleZeroLocus f rather than in the definitionally-equal-but-syntactically-different
openLocusOfFinite (finite_support_divisor f). This is not cosmetic: with the general
Path.liftOpenLocus (finite_support_divisor f).isClosed γ hγ spelling, X's ChartedSpace/
IsManifold instance search for RS.IsPrimitiveAlong/RS.Form1 gets confused whenever both that
term's type and a separately-mentioned poleZeroLocus f (from dlogForm f hf) occur in the same
elaboration problem — Lean's instance cache keys on the syntactic form, and the two (defeq) forms
of the locus type produce inconsistent cached instance terms, a synthInstance failure with no
direct paper-mathematics content (confirmed by direct trace inspection: Opens.instChartedSpace
resolves correctly for either form in isolation, but not when both appear together). Landing
liftPoleZeroLocus's output type in poleZeroLocus f syntactically, once and for all, sidesteps
the issue for every downstream use.
Equations
- RS.Monodromy.Path.liftPoleZeroLocus γ hγ = { toFun := fun (t : ↑unitInterval) => ⟨γ t, ⋯⟩, continuous_toFun := ⋯, source' := ⋯, target' := ⋯ }
Instances For
The lift's extend recovers γ.extend pointwise.
f.holoRepr restricted to the locus is a nonvanishing holomorphic function #
f.holoRepr does not vanish anywhere on the order-zero locus (a helper for the general
"order exactly zero ⇒ the canonical representative is nonzero there" fact, R2 in the design).
The logarithmic-derivative 1-form df/f of f, a genuine holomorphic 1-form on the
pole/zero-free open locus poleZeroLocus f — assembled from RS.mdifferential/RS.Form1.smulFun
(both already built, generically over any surface satisfying the standing hypotheses),
instantiated with X := poleZeroLocus f.
Equations
- One or more equations did not get rendered due to their size.
Instances For
dlogForm's coefficient in any maximal-atlas chart of the locus, on the chart target: the
familiar (f'/f)-shape logarithmic derivative, read through the chart.
The exponential-compatibility theorem #
The exponential-compatibility theorem. Any primitive of dlogForm f hf along a
pole/zero-avoiding path is an honest continuous branch of log f along the path, PROVIDED it is
normalized so that exp (F 0) = f.holoRepr x: exp (F t) = f.holoRepr (γ.extend t) for every
t. Proved by exhibiting H t := f.holoRepr (γ.extend t) * exp (-(F t)) as locally constant
(zero-derivative argument on each chart) and hence globally constant (ℝ preconnected) — no
branch-cut case analysis on Complex.log/Complex.arg anywhere.
Existence and uniqueness of a log branch with a prescribed initial value #
Existence, with a prescribed initial branch value: a continuous branch of log f along
any path avoiding the zeros/poles of f, starting at a chosen c₀ with exp c₀ = f.holoRepr x.
Uniqueness (free, from Path's own sub_eq_sub): two branches agreeing at t = 0 agree
everywhere — no new proof, a direct instantiation over the open locus.