Skip to content

Commit ced0cef

Browse files
feat(SchwartzMap): prove whole file with Aristotle (#175)
Co-authored-by: Aristotle Harmonic [aristotle-harmonic@harmonic.fun](mailto:aristotle-harmonic@harmonic.fun) --------- Co-authored-by: Aristotle-Harmonic <232223898+aristotle-harmonic@users.noreply.github.com>
1 parent 71cf600 commit ced0cef

File tree

1 file changed

+24
-19
lines changed

1 file changed

+24
-19
lines changed

SpherePacking/ForMathlib/PoissonSummation/SchwartzMap.lean

Lines changed: 24 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,15 @@ apply to cases more general than just ℝ-vector spaces, but we do not worry abo
2525
open SchwartzMap
2626

2727
open Real Complex BigOperators SchwartzMap Function PiLp
28+
2829
open LinearMap LinearEquiv ContinuousLinearEquiv ContinuousLinearMap
2930

3031
variable {E F H : Type*}
32+
3133
variable [NormedAddCommGroup E] [NormedSpace ℝ E] [FiniteDimensional ℝ E]
34+
3235
variable [NormedAddCommGroup F] [NormedSpace ℝ F] [FiniteDimensional ℝ F]
36+
3337
variable [NormedAddCommGroup H] [NormedSpace ℝ H] [FiniteDimensional ℝ H]
3438

3539
-- In finite-dimensional spaces, any linear equivalence is a continuous linear equivalence.
@@ -99,33 +103,28 @@ by
99103
using ((EuclideanSpace.proj (ι := Fin 1) (𝕜 := ℝ) 0 : Euc(1) →L[ℝ] ℝ).contDiff)
100104

101105
-- We first show temperate growth.
102-
-- #check Function.HasTemperateGrowth
103-
104-
-- We can use the following tool to show temperate growth.
105-
-- #check Function.HasTemperateGrowth.of_fderiv
106106

107107
-- Note: We can probably do away with the `x` here as I doubt any of the proofs will need it.
108+
108109
/-- The Jacobian of `coordinateEmbedding₁₂ x` for all `x : ℝ`. -/
109-
def coordinateEmbedding₁₂_fderiv (x : ℝ) : Euc(1) →L[ℝ] Euc(2) where
110+
def coordinateEmbedding₁₂_fderiv (_x : ℝ) : Euc(1) →L[ℝ] Euc(2) where
110111
toFun := fun y => (ContinuousLinearEquiv.funUnique (Fin 1) ℝ ℝ y) • !₂[(0 : ℝ), 1]
111-
cont := by
112-
113-
sorry
114-
map_add' := sorry
115-
map_smul' := sorry
112+
cont := (continuous_apply _).smul continuous_const
113+
map_add' := by simp [add_smul]
114+
map_smul' := by simp [smul_smul]
116115

117116
/-- The Jacobian of `coordinateEmbedding₁₂ x` is the constant `!₂[0, 1]`. -/
118117
theorem coordinateEmbedding₁₂_hasDerivAt (x : ℝ) (p : Euc(1)) :
119118
HasFDerivAt (𝕜 := ℝ) (coordinateEmbedding₁₂ x) (coordinateEmbedding₁₂_fderiv x) p := by
120-
sorry
121-
122-
-- We need to use the following to get an expression for the `fderiv` of `coordinateEmbedding₁₂ x`.
123-
-- #check HasFDerivAt.fderiv
119+
have h_diff_zero (y : Euc(1)):
120+
coordinateEmbedding₁₂ x y - coordinateEmbedding₁₂ x p -
121+
coordinateEmbedding₁₂_fderiv x (y - p) = 0 := by
122+
ext i; fin_cases i <;> simp [coordinateEmbedding₁₂, coordinateEmbedding₁₂_fderiv]
123+
simp_all [hasFDerivAt_iff_tendsto]
124124

125125
/-- The Jacobian of `coordinateEmbedding₁₂` has temperate growth. -/
126126
theorem fderiv_coordinateEmbedding₁₂_hasTemperateGrowth (x : ℝ) :
127-
Function.HasTemperateGrowth (fderiv ℝ (coordinateEmbedding₁₂ x)) :=
128-
by
127+
Function.HasTemperateGrowth (fderiv ℝ (coordinateEmbedding₁₂ x)) := by
129128
simpa [funext (fun p => by simpa using (coordinateEmbedding₁₂_hasDerivAt x p).fderiv)]
130129
using Function.HasTemperateGrowth.const (coordinateEmbedding₁₂_fderiv x)
131130

@@ -135,13 +134,18 @@ example {a b : ℝ} : 0 ≤ a → 0 ≤ b → (a ≤ b ↔ a ^ 2 ≤ b ^ 2) := b
135134
/-- `coordinateEmbedding₁₂` has temperate growth. -/
136135
theorem coordinateEmbedding₁₂_hasTemperateGrowth (x : ℝ) :
137136
(coordinateEmbedding₁₂ x).HasTemperateGrowth := by
138-
refine Function.HasTemperateGrowth.of_fderiv (fderiv_coordinateEmbedding₁₂_hasTemperateGrowth x)
137+
refine (fderiv_coordinateEmbedding₁₂_hasTemperateGrowth x).of_fderiv
139138
((coordinateEmbedding₁₂_smooth x).differentiable le_top) (k := 1) (C := max ‖x‖ 1) ?_
140139
intro y
141140
simp only [coordinateEmbedding₁₂, coe_funUnique, eval, Fin.default_eq_zero, Fin.isValue,
142141
ENNReal.toReal_ofNat, Nat.ofNat_pos, norm_eq_sum, Real.norm_eq_abs, rpow_two, _root_.sq_abs,
143-
Fin.sum_univ_two, one_div, Finset.univ_unique, Finset.sum_singleton, pow_one]
144-
sorry
142+
Fin.sum_univ_two, one_div, Finset.univ_unique, Finset.sum_singleton, pow_one]
143+
have h_triangle : Real.sqrt (x^2 + y 0^2) ≤ |x| + |y 0| :=
144+
Real.sqrt_le_iff.mpr
145+
by positivity, by cases abs_cases x <;> cases abs_cases ( y 0 ) <;> nlinarith⟩
146+
have h_bound : Real.sqrt (x^2 + y 0^2) ≤ max |x| 1 * (1 + |y 0|) := by
147+
cases max_cases |x| 1 <;> nlinarith [abs_nonneg x, abs_nonneg (y 0)]
148+
norm_num [← Real.sqrt_eq_rpow, Real.sqrt_sq_eq_abs] at * ; linarith!
145149

146150
-- Next, we show the antilipschitz condition. This is significantly easier.
147151
-- #check AntilipschitzWith
@@ -163,4 +167,5 @@ def SchwartzMap_one_of_SchwartzMap_two (x : ℝ) : 𝓢(Euc(2), ℂ) →L[ℝ]
163167
(coordinateEmbedding₁₂_antiLipschitzWith x)
164168

165169
end Inductive_Dimensions
170+
166171
end SchwartzMap

0 commit comments

Comments
 (0)