Documentation

LeanPool.JacobianDiffgeo.MeromorphicTrace.PlanarTrace

The planar trace atom traceZk (meromorphic-trace, cluster 2) #

Unit: meromorphic-trace (docs/design/meromorphic-trace.md §2 D6, §4.4, §5 P4-P6). Purely planar (mathlib + MappingDegree.RootCounting + LocalMultiplicity.KthRoot + ResidueCalculus); no manifold content, independent of ToP1/OrderMultiplicity/ArgumentPrinciple.

noncomputable def RS.MTrace.traceZk (h : ) (k : ) (w : ) :

The trace of h along zz ^ k at w: the sum of h over the (generically k-element) root set. Junk-free by convention: at w = 0 the root set is the singleton {0} (for k ≠ 0), giving h 0; at w with k = 0 the support is either empty or all of , and finsum junks to 0 in the latter case unless h itself has finite support there.

Equations
Instances For
    theorem RS.MTrace.traceZk_def (h : ) (k : ) (w : ) :
    traceZk h k w = ∑ᶠ (z : ) (_ : z {z : | z ^ k = w}), h z
    theorem RS.MTrace.traceZk_eq_finset_sum {k : } (h : ) (hk : k 0) (w : ) :
    traceZk h k w = z.toFinset, h z

    Master conversion to a Finset sum, valid for every w (the root set is always finite once k ≠ 0, regardless of w).

    theorem RS.MTrace.traceZk_apply_of_ne_zero {h : } {k : } {w : } (hk : k 0) (_hw : w 0) :
    traceZk h k w = z.toFinset, h z
    theorem RS.MTrace.traceZk_zero_apply {h : } {k : } (hk : k 0) :
    traceZk h k 0 = h 0

    Honest but junk value at the branch point: traceZk h k 0 = h 0 (the root set of z ^ k = 0 is the singleton {0}). Never used to reason about MeromorphicAt/laurentCoeffAt/resAt at 0, all of which are 𝓝[≠]0-germ notions and hence blind to this junk (see the design's junk ledger, §6).

    Linearity #

    theorem RS.MTrace.traceZk_add {h g : } {k : } (hk : k 0) :
    traceZk (h + g) k = traceZk h k + traceZk g k

    Additivity, guarded by k ≠ 0 (deviation from the design's unconditional statement: at k = 0, w = 1 the root set is all of , and additivity fails there whenever one summand has finite support on and the other does not — e.g. h₁ = Set.indicator {0} 1, h₂ = 1. With k ≠ 0 the root set is always finite, so this is not an issue.).

    theorem RS.MTrace.traceZk_fun_add {h g : } {k : } (hk : k 0) :
    traceZk (fun (z : ) => h z + g z) k = fun (w : ) => traceZk h k w + traceZk g k w
    theorem RS.MTrace.traceZk_const_mul {h : } (c : ) (k : ) :
    traceZk (fun (z : ) => c * h z) k = fun (w : ) => c * traceZk h k w

    Unconditional in k (scalar multiplication by c does not change support-finiteness, so no k ≠ 0 guard is needed, unlike traceZk_add).

    theorem RS.MTrace.traceZk_comp_pow {k : } (g : ) (hk : k 0) {w : } (hw : w 0) :
    traceZk (fun (z : ) => g (z ^ k)) k w = k * g w

    Trace of a pullback (branch-point caveat: only away from 0, see the design's junk ledger, §6 — the identity is genuinely false at w = 0).

    Analyticity away from the branch point (P4) #

    theorem RS.MTrace.analyticAt_traceZk {h : } {k : } (hk : k 0) {ρ : } ( : 0 < ρ) (hh : AnalyticOnNhd h (Metric.ball 0 ρ \ {0})) {w₀ : } (hw₀ : w₀ 0) (hw₀ρ : w₀ < ρ ^ k) :

    traceZk h k is analytic at any w₀ ≠ 0 all of whose k-th roots lie in h's domain of analyticity ball 0 ρ \ {0}. Local branches (AnalyticAt.exists_pow_eq) witness analyticity; no monodromy — the branches are never assembled into a global formula across a branch cut.

    Meromorphy at the branch point (P5) #

    theorem RS.MTrace.meromorphicAt_traceZk {h : } {k : } (hh : MeromorphicAt h 0) (hk : k 0) :

    traceZk h k is meromorphic at 0 whenever h is, via a norm/zpow growth bound on the root-sum and Riemann's removable-singularity theorem (Complex.differentiableOn_update_limUnder_of_bddAbove) — no monodromy, no convergent global Laurent series needed for existence.

    The Laurent-coefficient formula (P6) #

    Route (tsum-free; a sharpening of the file's previously recorded candidate route (b)): expand the unit factor u of h's order presentation h =ᶠ[𝓝[≠]0] (·)^n₀ * u by the EXACT pointwise Taylor remainder u = P + (·)^M * r (RS.AnalyticAt.exists_taylor_remainder), choosing the cutoff M so that n₀ + M = k * s' is an exact multiple of k with s' > m. Then, summing over the root set of z ^ k = w (w ≠ 0):

    All coefficients are then read off by residue-calculus's presentation-independent characterization laurentCoeffAt_of_eventuallyEq and the built linearity/shift API.

    theorem RS.MTrace.traceZk_zpow {k : } (hk : k 0) (e : ) {w : } (hw : w 0) :
    traceZk (fun (z : ) => z ^ e) k w = if k e then k * w ^ (e / k) else 0

    Closed form for the trace of a zpow monomial (w ≠ 0): the sum of z ^ e over the k roots of w collapses by the geometric sum of roots of unity to k * w ^ (e / k) when k ∣ e and to 0 otherwise. Purely algebraic — no branches, no analyticity.

    theorem RS.MTrace.laurentCoeffAt_traceZk {h : } {k : } (hh : MeromorphicAt h 0) (hk : k 0) (m : ) :
    laurentCoeffAt (traceZk h k) 0 m = k * laurentCoeffAt h 0 (k * m)

    THE Laurent-coefficient formula for traceZk (P6): tracing along zz ^ k keeps exactly every k-th Laurent coefficient, scaled by k. See the section header for the proof route.

    theorem RS.MTrace.resAt_traceZk {h : } {k : } (hh : MeromorphicAt h 0) (hk : k 0) :
    resAt (traceZk h k) 0 = k * laurentCoeffAt h 0 (-k)

    Residue corollary of P6 (design §4.4): the residue of the trace is k times h's coefficient at index -k — NOT h's residue unless k = 1. (Miranda's residue identity Res(Tr(h·ω)) = ∑ Res(h·ω) needs the form's Jacobian factor to compensate this shift; that is form-trace-tower's job, confirming the scope split.)