A machine-checked solution to the Jacobians challenge

27.11. TailDuality.TailMultiplication🔗

Jacobians.TailDuality.TailMultiplicationsource

finite_setOf_laurentCoeff_ne_zero_lt

For a meromorphic germ, only finitely many Laurent coefficients below any level are nonzero.

theorem finite_setOf_laurentCoeff_ne_zero_lt {g : ℂ → ℂ} {c : ℂ} (hg : MeromorphicAt g c)
    (b : ℤ) : {n : ℤ | n < b ∧ laurentCoeff g c n ≠ 0}.Finite

tailFnAt

The tail polynomial of Z at p, as an actual function: tailFnAt Z p (z) = ∑_{(p,n) ∈ supp Z} Z(p,n)·(z − c_p)^n.

noncomputable def tailFnAt (Z : TailSpace X) (p : X) : ℂ → ℂ

tailFnAt_def

theorem tailFnAt_def (Z : TailSpace X) (p : X) :
    tailFnAt Z p = fun z => ∑ q ∈ Z.support,
      (if q.1 = p then Z q * (z - (chartAt (H := ℂ) p) p) ^ q.2 else 0)

meromorphicAt_tailFnAt

theorem meromorphicAt_tailFnAt (Z : TailSpace X) (p : X) :
    MeromorphicAt (tailFnAt Z p) ((chartAt (H := ℂ) p) p)

laurentCoeff_tailFnAt

The coefficients of the tail polynomial are the tail entries.

theorem laurentCoeff_tailFnAt (Z : TailSpace X) (p : X) (n : ℤ) :
    laurentCoeff (tailFnAt Z p) ((chartAt (H := ℂ) p) p) n = Z (p, n)

tailFnAt_add

The tail polynomial is additive in Z.

theorem tailFnAt_add (Z₁ Z₂ : TailSpace X) (p : X) (z : ℂ) :
    tailFnAt (Z₁ + Z₂) p z = tailFnAt Z₁ p z + tailFnAt Z₂ p z

tailFnAt_smul

The tail polynomial is homogeneous in Z.

theorem tailFnAt_smul (c : ℂ) (Z : TailSpace X) (p : X) (z : ℂ) :
    tailFnAt (c • Z) p z = c * tailFnAt Z p z

tailFnAt_eq_zero_of_notMem

For p outside the base points of Z, the tail polynomial vanishes.

theorem tailFnAt_eq_zero_of_notMem (Z : TailSpace X) (p : X)
    (hp : p ∉ Z.support.image Prod.fst) (z : ℂ) : tailFnAt Z p z = 0

tailMulFun

The entries of μ_ψ(Z) at target level E: the coefficients of ψ·(tail polynomial), truncated below −E.

noncomputable def tailMulFun (ψ : MeromorphicFunction X) (E : Divisor X) (Z : TailSpace X) :
    (X × ℤ) → ℂ

meromorphicAt_psi_mul_tailFnAt

theorem meromorphicAt_psi_mul_tailFnAt (ψ : MeromorphicFunction X) (Z : TailSpace X) (p : X) :
    MeromorphicAt (fun z => ψ.toFun ((chartAt (H := ℂ) p).symm z) * tailFnAt Z p z)
      ((chartAt (H := ℂ) p) p)

finite_support_tailMulFun

theorem finite_support_tailMulFun (ψ : MeromorphicFunction X) (E : Divisor X)
    (Z : TailSpace X) : (Function.support (tailMulFun ψ E Z)).Finite

tailMulRaw

μ_ψ(Z) as a tail divisor.

noncomputable def tailMulRaw (ψ : MeromorphicFunction X) (E : Divisor X) (Z : TailSpace X) :
    TailSpace X

tailMulRaw_apply

theorem tailMulRaw_apply (ψ : MeromorphicFunction X) (E : Divisor X) (Z : TailSpace X)
    (q : X × ℤ) : tailMulRaw ψ E Z q = tailMulFun ψ E Z q

tailMulRaw_mem

theorem tailMulRaw_mem (ψ : MeromorphicFunction X) (E : Divisor X) (Z : TailSpace X) :
    tailMulRaw ψ E Z ∈ tailSubspace (X := X) E

tailMul

Miranda's multiplication operator μ_ψ (Ch. VI p. 179) at target level E, as a linear endomorphism of the ambient tail space (range in 𝒯[E] by tailMulRaw_mem).

noncomputable def tailMul (ψ : MeromorphicFunction X) (E : Divisor X) :
    TailSpace X →ₗ[ℂ] TailSpace X where

tailMul_apply

theorem tailMul_apply (ψ : MeromorphicFunction X) (E : Divisor X) (Z : TailSpace X)
    (q : X × ℤ) :
    tailMul ψ E Z q = if q.2 < -(E q.1)
      then laurentCoeff
        (fun z => ψ.toFun ((chartAt (H := ℂ) q.1).symm z) * tailFnAt Z q.1 z)
        ((chartAt (H := ℂ) q.1) q.1) q.2
      else 0

tailMul_tailMap

Miranda (2.2): μ_ψ(α_D f) = α_E(ψ·f) whenever −E ≤ ord ψ + (−D) pointwise — the re-truncated coefficients of ψ·(D-tail of f) and of ψ·f agree below −E, because ψ times the complementary part of f has order ≥ ord ψ − D ≥ −E.

theorem tailMul_tailMap [T2Space X] [CompactSpace X] [ConnectedSpace X] [IsManifold 𝓘(ℂ) ω X]
    (ψ f : MeromorphicFunction X) (D E : Divisor X)
    (hE : ∀ p : X, ((-(E p) : ℤ) : WithTop ℤ) ≤ ψ.orderW p + ((-(D p) : ℤ) : WithTop ℤ)) :
    tailMul ψ E (tailMap (X := X) D f) = tailMap (X := X) E (ψ * f)