Paper IX · Lean source
PolynomialAnalyticEvaluation.lean
Selected results recorded Coverage and evidence
Compiler/replay evidence is reported for a subset or bounded block. No whole-work coverage is implied.
This viewer reads the retained source; it does not run Lean or assign new claim mappings.
polynomial_regularity/formalization/PolynomialAnalyticEvaluation.lean87 lines
Original source path
preserved/PRSC_IX_Consolidated_Manuscript/polynomial_regularity/formalization/PolynomialAnalyticEvaluation.leanSkip declarations and read code
1 module
2 public import PolynomialWeightedInverse
3 public import Mathlib.Analysis.Analytic.Polynomial
4 public import Mathlib.Analysis.Analytic.Constructions
5 public import Mathlib.Analysis.Calculus.FDeriv.Mul
6 public import Mathlib.Analysis.Calculus.FDeriv.Prod
7 public import Mathlib.Analysis.Normed.Module.FiniteDimension
8
9 @[expose] public section
10 noncomputable section
11 set_option autoImplicit false
12
13 namespace Komorebi.PolynomialAnalyticEvaluation
14 open Matrix
15 variable {𝕜 : Type*} [NontriviallyNormedField 𝕜] [CompleteSpace 𝕜]
16 variable {n m : ℕ}
17
18 /-- The continuous linear map represented by a finite matrix. -/
19 def matrixCLM (A : Matrix (Fin m) (Fin n) 𝕜) :
20 (Fin n → 𝕜) →L[𝕜] (Fin m → 𝕜) := A.mulVecLin.toContinuousLinearMap
21
22 @[simp] theorem matrixCLM_apply (A : Matrix (Fin m) (Fin n) 𝕜) (v : Fin n → 𝕜) :
23 matrixCLM A v = A.mulVec v := rfl
24
25 /-- Actual evaluation of each polynomial in a system. -/
26 def evalSystem (F : Fin m → MvPolynomial (Fin n) 𝕜) (a : Fin n → 𝕜) : Fin m → 𝕜 :=
27 fun i => MvPolynomial.eval a (F i)
28
29 /-- The formal partial derivatives give a continuous linear functional. -/
30 def polynomialDeriv (P : MvPolynomial (Fin n) 𝕜) (a : Fin n → 𝕜) :
31 (Fin n → 𝕜) →L[𝕜] 𝕜 :=
32 ∑ j, MvPolynomial.eval a (MvPolynomial.pderiv j P) • ContinuousLinearMap.proj j
33
34 omit [CompleteSpace 𝕜] in
35 @[simp] theorem polynomialDeriv_apply (P : MvPolynomial (Fin n) 𝕜)
36 (a v : Fin n → 𝕜) :
37 polynomialDeriv P a v = ∑ j, MvPolynomial.eval a (MvPolynomial.pderiv j P) * v j := by
38 simp [polynomialDeriv]
39
40 omit [CompleteSpace 𝕜] in
41 /-- Polynomial evaluation has strict derivative equal to its actual formal gradient. -/
42 theorem hasStrictFDerivAt_eval (P : MvPolynomial (Fin n) 𝕜) (a : Fin n → 𝕜) :
43 HasStrictFDerivAt (fun x => MvPolynomial.eval x P) (polynomialDeriv P a) a := by
44 induction P using MvPolynomial.induction_on with
45 | C c =>
46 have hder : polynomialDeriv (MvPolynomial.C c) a = 0 := by
47 ext v
48 simp
49 rw [hder]
50 convert! (hasStrictFDerivAt_const (𝕜 := 𝕜) c a) using 1; ext x; simp
51 | add P Q hP hQ =>
52 have hder : polynomialDeriv (P + Q) a = polynomialDeriv P a + polynomialDeriv Q a := by
53 ext v
54 simp [Finset.sum_add_distrib, add_mul]
55 rw [hder]
56 convert! hP.add hQ using 1; ext x; simp
57 | mul_X P j hP =>
58 have hder : polynomialDeriv (P * MvPolynomial.X j) a =
59 MvPolynomial.eval a P • ContinuousLinearMap.proj j + a j • polynomialDeriv P a := by
60 ext v
61 simp [MvPolynomial.pderiv_X, Pi.single_apply, apply_ite, Finset.sum_add_distrib,
62 mul_add, Finset.mul_sum, mul_left_comm, mul_comm]
63 rw [hder]
64 convert! hP.mul (hasStrictFDerivAt_apply j a) using 1; ext x; simp
65
66 /-- Actual finite polynomial systems are analytic at every point. -/
67 theorem analyticAt_evalSystem (F : Fin m → MvPolynomial (Fin n) 𝕜) (a : Fin n → 𝕜) :
68 AnalyticAt 𝕜 (evalSystem F) a := by
69 exact AnalyticAt.pi fun i => AnalyticOnNhd.eval_mvPolynomial (F i) a (Set.mem_univ a)
70
71 /-- Actual finite polynomial systems are analytic on the whole ambient space. -/
72 theorem analyticOnNhd_evalSystem (F : Fin m → MvPolynomial (Fin n) 𝕜) :
73 AnalyticOnNhd 𝕜 (evalSystem F) Set.univ := fun a _ => analyticAt_evalSystem F a
74
75 /-- The derivative matrix is exactly the evaluated formal Jacobian, with no derivative hypothesis. -/
76 theorem hasStrictFDerivAt_evalSystem (F : Fin m → MvPolynomial (Fin n) 𝕜)
77 (a : Fin n → 𝕜) :
78 HasStrictFDerivAt (evalSystem F) (matrixCLM (PolynomialWeightedInverse.jacobian F a)) a := by
79 have h := hasStrictFDerivAt_pi.mpr (fun i => hasStrictFDerivAt_eval (F i) a)
80 have hder : ContinuousLinearMap.pi (fun i => polynomialDeriv (F i) a) =
81 matrixCLM (PolynomialWeightedInverse.jacobian F a) := by
82 ext v i
83 simp [PolynomialWeightedInverse.jacobian, Matrix.mulVec, dotProduct]
84 rw [← hder]
85 convert! h using 1
86
87 end Komorebi.PolynomialAnalyticEvaluation
Original file and source record
This copy matches the recorded source file. Its publication here does not change the work’s review status.
SHA-256: f8d75e73ac2df1e336c55889da4e81184f54ff6bffe94eee0112d90e905ff57f
Back to Paper IX: Arithmetic Packets, Dyadic Towers, and Local Polynomial Deformation