Documentation

LeanPool.JacobianDiffgeo.MappingDegree.RootCounting

Planar root counting (mapping-degree, planar layer) #

Everything about the roots of z ^ k = w in that the surface-level fiber count needs:

This file has zero project imports; LocalConstancy.lean bridges analyticOrderAt to RS.multiplicity via local-multiplicity's chart invariance.

theorem RS.exists_pow_eq {k : } (hk : k 0) {w : } (hw : w 0) :
∃ (α : ), α ^ k = w

k-th roots exist in (via exp/log; deliberately avoids IsAlgClosed.exists_pow_nat_eq, whose instance would drag in the FTA import).

theorem RS.setOf_pow_eq_zero {k : } (hk : k 0) :
{z : | z ^ k = 0} = {0}
theorem RS.setOf_pow_eq_coe_toFinset {k : } (hk : k 0) (w : ) :

The root set of z ^ k = w, as the coercion of the nthRoots finset.

theorem RS.setOf_pow_eq_finite {k : } (hk : k 0) (w : ) :
{z : | z ^ k = w}.Finite
theorem RS.card_nthRoots_toFinset {k : } (hk : k 0) {w : } (hw : w 0) :
theorem RS.ncard_setOf_pow_eq {k : } (hk : k 0) {w : } (hw : w 0) :
{z : | z ^ k = w}.ncard = k
theorem RS.norm_lt_of_pow_eq {k : } (hk : k 0) {z w : } {ρ : } ( : 0 ρ) (h : z ^ k = w) (hw : w < ρ ^ k) :
z < ρ

Roots are trapped in the ball whose k-th power ball contains w.

theorem RS.analyticOrderAt_pow_zero (k : ) :
analyticOrderAt (fun (z : ) => z ^ k) 0 = k
theorem RS.analyticOrderAt_pow_sub_pow {k : } (hk : k 0) {ζ : } ( : ζ 0) :
analyticOrderAt (fun (z : ) => z ^ k - ζ ^ k) ζ = 1
theorem RS.sum_toNat_analyticOrderAt_pow_sub {k : } (hk : k 0) (w : ) :
∑ᶠ (ζ : ) (_ : ζ {z : | z ^ k = w}), (analyticOrderAt (fun (z : ) => z ^ k - w) ζ).toNat = k

THE planar counting identity: the total multiplicity of zz ^ k over any w is k (one root of order k when w = 0; k simple roots otherwise). Uniform in w, so surface consumers need no branched/unbranched case split.