AutoSamplingTheory.ExampleCases.SmoothedPicardHMC.ApproximateInitialGradientMoment
Read the mathematical statements and proofs in order
8 named declarations scanned from AutoSamplingTheory/ExampleCases/SmoothedPicardHMC/ApproximateInitialGradientMoment.lean.
Declarations
theorem AutoSamplingTheory.ExampleCases.SmoothedPicardHMC.ApproximateInitialGradientMoment.gaussian_square Partial Not mapped
No declaration docstring.
private theorem gaussian_square :
Integrable (fun x : E => ‖x‖^2) (stdGaussian E) ∧
(∫ x : E, ‖x‖^2 ∂stdGaussian E) = Module.finrank ℝ E := by
classical
have hi : Integrable (fun x : E => ‖x‖^2) (stdGaussian E) :=
(memLp_two_iff_integrable_sq_norm (by fun_prop)).1 IsGaussian.memLp_two_id
let b := stdOrthonormalBasis ℝ E
have hdir (i) : (∫ x : E, (inner ℝ (b i) x)^2 ∂stdGaussian E) = 1 := by
have hh := covarianceBilin_apply (μ := stdGaussian E) IsGaussian.memLp_two_id (b i) (b i)
rw [covarianceBilin_stdGaussian] at hh
change inner ℝ (b i) (b i) = _ at hh
simpa [integral_id_stdGaussian, real_inner_self_eq_norm_sq,
b.orthonormal.norm_eq_one, pow_two] using hh.symm
have hL1 (i) : Integrable (fun x : E => (inner ℝ (b i) x)^2) (stdGaussian E) := by
apply hi.mono' (by fun_prop)
filter_upwards with x
rw [Real.norm_eq_abs, abs_of_nonneg (sq_nonneg _)]
have hb := norm_inner_le_norm (𝕜 := ℝ) (b i) x
rw [b.orthonormal.norm_eq_one, one_mul] at hb
have hsq := sq_le_sq₀ (norm_nonneg (inner ℝ (b i) x)) (norm_nonneg x) |>.2 hb
simpa [Real.norm_eq_abs, sq_abs] using hsq
refine ⟨hi, ?_⟩
calc
(∫ x : E, ‖x‖^2 ∂stdGaussian E) =
∫ x : E, ∑ i, (inner ℝ (b i) x)^2 ∂stdGaussian E := by
apply integral_congr_ae
filter_upwards with x
simpa [Real.norm_eq_abs, sq_abs] using (b.sum_sq_norm_inner_right x).symm
_ = ∑ i, ∫ x : E, (inner ℝ (b i) x)^2 ∂stdGaussian E :=
integral_finsetSum _ (fun i _ => hL1 i)
_ = Module.finrank ℝ E := by simp [hdir]
AutoSamplingTheory/ExampleCases/SmoothedPicardHMC/ApproximateInitialGradientMoment.lean:38published source at ed709a7f320d
theorem AutoSamplingTheory.ExampleCases.SmoothedPicardHMC.ApproximateInitialGradientMoment.gaussian_perturbation_square Partial Not mapped
No declaration docstring.
private theorem gaussian_perturbation_square {μ : Measure E} [IsProbabilityMeasure μ]
{g : E → E} (hg : Continuous g)
(hi : Integrable (fun x => ‖g x‖^2) μ) (c : ℝ) :
Integrable (fun p : E × E => ‖g p.1 - c • p.2‖^2) (μ.prod (stdGaussian E)) ∧
(∫ p : E × E, ‖g p.1 - c • p.2‖^2 ∂μ.prod (stdGaussian E)) =
(∫ x, ‖g x‖^2 ∂μ) + c^2 * Module.finrank ℝ E := by
have hg1 : Integrable g μ := MemLp.integrable (by norm_num : 1 ≤ (2 : ℝ≥0∞))
((memLp_two_iff_integrable_sq_norm hg.aestronglyMeasurable).2 hi)
have hz1 : Integrable (fun z : E => z) (stdGaussian E) := IsGaussian.integrable_id
have hcross : Integrable (fun p : E × E => inner ℝ (g p.1) p.2)
(μ.prod (stdGaussian E)) :=
hg1.op_fst_snd (by fun_prop) ⟨1, by intro x y; simpa using norm_inner_le_norm (𝕜 := ℝ) x y⟩ hz1
have hcross0 : (∫ p : E × E, inner ℝ (g p.1) p.2 ∂μ.prod (stdGaussian E)) = 0 := by
rw [integral_prod _ hcross]
have hz (x : E) : (∫ z : E, inner ℝ (g x) z ∂stdGaussian E) = 0 :=
integral_strongDual_stdGaussian (innerSL ℝ (g x))
simp only [hz, integral_zero]
have hp := hi.comp_fst (stdGaussian E)
have hq := (gaussian_square (E := E)).1.comp_snd μ
have hqc : Integrable (fun p : E × E => c^2 * ‖p.2‖^2)
(μ.prod (stdGaussian E)) := hq.const_mul (c^2)
have hcc : Integrable (fun p : E × E => (2*c) * inner ℝ (g p.1) p.2)
(μ.prod (stdGaussian E)) := hcross.const_mul (2*c)
have hsum : Integrable (fun p : E × E => ‖g p.1‖^2 + c^2 * ‖p.2‖^2)
(μ.prod (stdGaussian E)) := hp.add hqc
have hexpand (p : E × E) : ‖g p.1 - c • p.2‖^2 =
‖g p.1‖^2 + c^2 * ‖p.2‖^2 - (2*c) * inner ℝ (g p.1) p.2 := by
rw [norm_sub_sq_real, norm_smul, real_inner_smul_right]
simp only [Real.norm_eq_abs, mul_pow, sq_abs]
ring
have hwhole : Integrable (fun p : E × E => ‖g p.1 - c • p.2‖^2)
(μ.prod (stdGaussian E)) := by
have hd : Integrable (fun p : E × E =>
‖g p.1‖^2 + c^2 * ‖p.2‖^2 - (2*c) * inner ℝ (g p.1) p.2)
(μ.prod (stdGaussian E)) := hsum.sub hcc
simpa only [hexpand] using hd
refine ⟨hwhole, ?_⟩
simp_rw [hexpand]
rw [integral_sub hsum hcc, integral_add hp hqc,
integral_const_mul, integral_const_mul, hcross0]
simp only [mul_zero, sub_zero]
rw [integral_prod _ hp, integral_prod _ hq]
simp [(gaussian_square (E := E)).2]
-- Source excerpt truncated; follow the exact source link.
AutoSamplingTheory/ExampleCases/SmoothedPicardHMC/ApproximateInitialGradientMoment.lean:70published source at ed709a7f320d
Excerpt truncated; the exact source link is authoritative.
theorem AutoSamplingTheory.ExampleCases.SmoothedPicardHMC.ApproximateInitialGradientMoment.lipschitz_square_bound Partial Not mapped
No declaration docstring.
private theorem lipschitz_square_bound {g : E → E} {b : ℝ≥0}
(hg : LipschitzWith b g) (x y : E) :
‖g x‖^2 ≤ 2 * ‖g y‖^2 + 2 * (b : ℝ)^2 * ‖x-y‖^2 := by
have hLip : ‖g x - g y‖ ≤ (b : ℝ) * ‖x-y‖ := by
simpa only [dist_eq_norm] using hg.dist_le_mul x y
have htri := norm_sub_norm_le (g x) (g y)
have hnorm : ‖g x‖ ≤ ‖g y‖ + (b : ℝ) * ‖x-y‖ := by linarith
have hnonneg : 0 ≤ (b : ℝ) * ‖x-y‖ := mul_nonneg b.coe_nonneg (norm_nonneg _)
nlinarith [norm_nonneg (g x), norm_nonneg (g y),
sq_nonneg (‖g y‖ - (b : ℝ) * ‖x-y‖)]
AutoSamplingTheory/ExampleCases/SmoothedPicardHMC/ApproximateInitialGradientMoment.lean:115published source at ed709a7f320d
theorem AutoSamplingTheory.ExampleCases.SmoothedPicardHMC.ApproximateInitialGradientMoment.smoothing_square Partial Not mapped
No declaration docstring.
private theorem smoothing_square {μ : Measure E} [IsProbabilityMeasure μ]
{g : E → E} {b : ℝ≥0} (hg : LipschitzWith b g)
(hi : Integrable (fun x => ‖g x‖^2) μ) (σ : ℝ) :
let ρ := TechnicalLemmas.Measure.GaussianSmoothing.gaussianSmoothing μ σ
Integrable (fun x => ‖g x‖^2) ρ ∧
(∫ x, ‖g x‖^2 ∂ρ) ≤ 2 * (∫ x, ‖g x‖^2 ∂μ) +
2 * (b : ℝ)^2 * σ^2 * Module.finrank ℝ E := by
let ρ := TechnicalLemmas.Measure.GaussianSmoothing.gaussianSmoothing μ σ
let A : E × E → E := fun p => p.1 + σ • p.2
have hA : Measurable A := by fun_prop
have hc : Continuous (fun x => ‖g x‖^2) := hg.continuous.norm.pow 2
have hprod : μ.prod (TechnicalLemmas.Measure.GaussianSmoothing.scaledStdGaussian (E := E) σ) =
(μ.prod (stdGaussian E)).map (Prod.map id (fun z : E => σ • z)) := by
simpa only [Measure.map_id, TechnicalLemmas.Measure.GaussianSmoothing.scaledStdGaussian] using
Measure.map_prod_map μ (stdGaussian E) measurable_id (by fun_prop : Measurable (fun z : E => σ • z))
have hρ : ρ = (μ.prod (stdGaussian E)).map A := by
dsimp [ρ, TechnicalLemmas.Measure.GaussianSmoothing.gaussianSmoothing,
TechnicalLemmas.Measure.CommonNoiseContraction.addNoise]
rw [hprod, Measure.map_map (by fun_prop) (by fun_prop)]
rfl
have hp := hi.comp_fst (stdGaussian E)
have hq := (gaussian_square (E := E)).1.comp_snd μ
have hdom : Integrable (fun p : E × E =>
2 * ‖g p.1‖^2 + (2 * (b : ℝ)^2 * σ^2) * ‖p.2‖^2)
(μ.prod (stdGaussian E)) := (hp.const_mul 2).add (hq.const_mul _)
have hbound (p : E × E) : ‖g (A p)‖^2 ≤
2 * ‖g p.1‖^2 + (2 * (b : ℝ)^2 * σ^2) * ‖p.2‖^2 := by
have hb := lipschitz_square_bound hg (A p) p.1
have hd : A p - p.1 = σ • p.2 := by dsimp [A]; abel
rw [hd, norm_smul] at hb
simpa only [Real.norm_eq_abs, mul_pow, sq_abs, mul_assoc] using hb
have hcomp : Integrable (fun p => ‖g (A p)‖^2) (μ.prod (stdGaussian E)) := by
apply hdom.mono' (hc.comp (by fun_prop : Continuous A)).aestronglyMeasurable
filter_upwards with p
change ‖(‖g (A p)‖^2 : ℝ)‖ ≤ _
rw [Real.norm_eq_abs, abs_of_nonneg (sq_nonneg ‖g (A p)‖)]
exact hbound p
have hρi : Integrable (fun x => ‖g x‖^2) ρ := by
rw [hρ]
exact (integrable_map_measure hc.aestronglyMeasurable hA.aemeasurable).2 hcomp
refine ⟨hρi, ?_⟩
change (∫ x, ‖g x‖^2 ∂ρ) ≤ _
rw [hρ, integral_map hA.aemeasurable hc.aestronglyMeasurable]
have hm := integral_mono hcomp hdom hbound
-- Source excerpt truncated; follow the exact source link.
AutoSamplingTheory/ExampleCases/SmoothedPicardHMC/ApproximateInitialGradientMoment.lean:126published source at ed709a7f320d
Excerpt truncated; the exact source link is authoritative.
theorem AutoSamplingTheory.ExampleCases.SmoothedPicardHMC.ApproximateInitialGradientMoment.coupling_square Partial Not mapped
No declaration docstring.
private theorem coupling_square {μ ν : Measure E} {γ : Measure (E × E)}
{g : E → E} {b : ℝ≥0} {s : ℝ} (hg : LipschitzWith b g)
(hi : Integrable (fun x => ‖g x‖^2) ν)
(hγ : TechnicalLemmas.Measure.Transport.IsCoupling γ μ ν) (hs : 0 ≤ s)
(hcost : (∫⁻ p, TechnicalLemmas.Measure.WassersteinSpace.quadraticCost p ∂γ) ≤ ENNReal.ofReal s) :
Integrable (fun x => ‖g x‖^2) μ ∧
(∫ x, ‖g x‖^2 ∂μ) ≤ 2 * (∫ x, ‖g x‖^2 ∂ν) + 2 * (b : ℝ)^2 * s := by
have hc : Continuous (fun x => ‖g x‖^2) := hg.continuous.norm.pow 2
have hmp1 := TechnicalLemmas.Measure.CouplingQuadraticIntegrability.measurePreserving_fst_of_isCoupling hγ
have hmp2 := TechnicalLemmas.Measure.CouplingQuadraticIntegrability.measurePreserving_snd_of_isCoupling hγ
have hq : Integrable (fun p : E × E => ‖g p.2‖^2) γ :=
hmp2.integrable_comp_of_integrable hi
have hd : Integrable (fun p : E × E => ‖p.1-p.2‖^2) γ := by
have hm : AEMeasurable (fun p : E × E =>
TechnicalLemmas.Measure.WassersteinSpace.quadraticCost p) γ := by
unfold TechnicalLemmas.Measure.WassersteinSpace.quadraticCost
fun_prop
have ht := integrable_toReal_of_lintegral_ne_top hm
(lt_of_le_of_lt hcost ENNReal.ofReal_lt_top).ne
simpa [TechnicalLemmas.Measure.WassersteinSpace.quadraticCost] using ht
have hdint : (∫ p : E × E, ‖p.1-p.2‖^2 ∂γ) ≤ s := by
apply (ENNReal.ofReal_le_ofReal_iff hs).1
rw [ofReal_integral_eq_lintegral_ofReal hd (Filter.Eventually.of_forall (fun p => sq_nonneg _))]
exact hcost
have hdom : Integrable (fun p : E × E => 2 * ‖g p.2‖^2 + 2 * (b : ℝ)^2 * ‖p.1-p.2‖^2) γ :=
(hq.const_mul 2).add (hd.const_mul _)
have hp : Integrable (fun p : E × E => ‖g p.1‖^2) γ := by
apply hdom.mono' (hc.comp continuous_fst).aestronglyMeasurable
filter_upwards with p
change ‖(‖g p.1‖^2 : ℝ)‖ ≤ _
rw [Real.norm_eq_abs, abs_of_nonneg (sq_nonneg ‖g p.1‖)]
exact lipschitz_square_bound hg p.1 p.2
have hμ : Integrable (fun x => ‖g x‖^2) μ := by
rw [← hmp1.map_eq]
exact (integrable_map_measure hc.aestronglyMeasurable measurable_fst.aemeasurable).2 hp
have hpint : (∫ p : E × E, ‖g p.1‖^2 ∂γ) = ∫ x, ‖g x‖^2 ∂μ := by
rw [← hmp1.map_eq, integral_map measurable_fst.aemeasurable hc.aestronglyMeasurable]
have hqint : (∫ p : E × E, ‖g p.2‖^2 ∂γ) = ∫ x, ‖g x‖^2 ∂ν := by
rw [← hmp2.map_eq, integral_map measurable_snd.aemeasurable hc.aestronglyMeasurable]
have hm := integral_mono hp hdom (fun p => lipschitz_square_bound hg p.1 p.2)
rw [integral_add (hq.const_mul 2) (hd.const_mul _), integral_const_mul,
integral_const_mul, hpint, hqint] at hm
refine ⟨hμ, hm.trans ?_⟩
gcongr
-- Source excerpt truncated; follow the exact source link.
AutoSamplingTheory/ExampleCases/SmoothedPicardHMC/ApproximateInitialGradientMoment.lean:179published source at ed709a7f320d
Excerpt truncated; the exact source link is authoritative.
theorem AutoSamplingTheory.ExampleCases.SmoothedPicardHMC.ApproximateInitialGradientMoment.wasserstein_square Partial Not mapped
No declaration docstring.
private theorem wasserstein_square {μ ν : Measure E}
{g : E → E} {b : ℝ≥0} {r : ℝ} (hg : LipschitzWith b g)
(hi : Integrable (fun x => ‖g x‖^2) ν)
(hw : TechnicalLemmas.Measure.WassersteinSpace.wassersteinDistance μ ν ^ 2 ≤
ENNReal.ofReal (r^2)) :
Integrable (fun x => ‖g x‖^2) μ ∧
(∫ x, ‖g x‖^2 ∂μ) ≤ 2 * (∫ x, ‖g x‖^2 ∂ν) + 2 * (b : ℝ)^2 * r^2 := by
have hall (s : ℝ) (hs : r^2 < s) :
Integrable (fun x => ‖g x‖^2) μ ∧
(∫ x, ‖g x‖^2 ∂μ) ≤ 2 * (∫ x, ‖g x‖^2 ∂ν) + 2 * (b : ℝ)^2 * s := by
have hs0 : 0 < s := (sq_nonneg r).trans_lt hs
have hcost : TechnicalLemmas.Measure.Transport.transportCost
(TechnicalLemmas.Measure.WassersteinSpace.quadraticCost (E := E)) μ ν < ENNReal.ofReal s := by
rw [← TechnicalLemmas.Measure.WassersteinSpace.wassersteinDistance_sq]
exact hw.trans_lt ((ENNReal.ofReal_lt_ofReal_iff hs0).2 hs)
obtain ⟨γ, hγ, hc⟩ :=
TechnicalLemmas.Measure.Transport.exists_isCoupling_lintegral_lt_of_transportCost_lt
(TechnicalLemmas.Measure.WassersteinSpace.quadraticCost (E := E)) μ ν hcost
exact coupling_square hg hi hγ hs0.le hc.le
refine ⟨(hall (r^2+1) (by linarith)).1, ?_⟩
apply le_of_forall_pos_le_add
intro ε hε
have hden : 0 < 2 * (b : ℝ)^2 + 1 := by positivity
have hδ : 0 < ε / (2 * (b : ℝ)^2 + 1) := div_pos hε hden
have hbound := (hall (r^2 + ε/(2*(b : ℝ)^2+1)) (by linarith)).2
have heq := div_mul_cancel₀ ε hden.ne'
nlinarith
omit [FiniteDimensional ℝ E] [MeasurableSpace E] [BorelSpace E] in
AutoSamplingTheory/ExampleCases/SmoothedPicardHMC/ApproximateInitialGradientMoment.lean:225published source at ed709a7f320d
theorem AutoSamplingTheory.ExampleCases.SmoothedPicardHMC.ApproximateInitialGradientMoment.regularized_gradient Partial Not mapped
No declaration docstring.
private theorem regularized_gradient {U : E → ℝ} (hU : ContDiff ℝ 2 U)
{A : ℝ} (hA : 0 < A) (u x : E) :
gradient (fun t => U t + ‖t-u‖^2/(2*A)) x = gradient U x + A⁻¹ • (x-u) := by
have heq : (fun t => U t + ‖t-u‖^2/(2*A)) =
(fun t => U t + (A⁻¹/2)*‖t-u‖^2) := by
funext t
field_simp
rw [heq]
have hq : HasFDerivAt (fun t => (A⁻¹/2)*‖t-u‖^2)
(A⁻¹ • innerSL ℝ (x-u)) x := by
convert (((hasFDerivAt_id x).sub_const u).norm_sq).const_mul (A⁻¹/2)
using 1 <;> first | rfl | (ext v; simp; ring)
apply HasGradientAt.gradient
rw [hasGradientAt_iff_hasFDerivAt]
change HasFDerivAt (fun t => U t+(A⁻¹/2)*‖t-u‖^2)
((toDual ℝ E) (gradient U x + A⁻¹ • (x-u))) x
convert! ((hU.differentiable (by norm_num)) x).hasGradientAt.hasFDerivAt.add hq using 1
simp only [map_add, map_smul]
rfl
AutoSamplingTheory/ExampleCases/SmoothedPicardHMC/ApproximateInitialGradientMoment.lean:254published source at ed709a7f320d
theorem AutoSamplingTheory.ExampleCases.SmoothedPicardHMC.ApproximateInitialGradientMoment.approximate_initial_gradient_moment Partial Not mapped
Read the complete mathematical statement and proof, with Lean below each
No declaration docstring.
theorem approximate_initial_gradient_moment {U : E → ℝ} {α β : ℝ≥0}
(hα : 0 < α) (hαβ : α ≤ β) (hU : ContDiff ℝ 2 U)
(hH : ∀ x v : E, (α : ℝ)*‖v‖^2 ≤ fderiv ℝ (fderiv ℝ U) x v v ∧
fderiv ℝ (fderiv ℝ U) x v v ≤ (β : ℝ)*‖v‖^2)
{η τ r : ℝ} (hη : 0 ≤ η) (hτ : 0 < τ) (_hr : 0 ≤ r)
(ν : Measure E) [IsProbabilityMeasure ν]
(hw : TechnicalLemmas.Measure.WassersteinSpace.wassersteinDistance ν
(TechnicalLemmas.Measure.GaussianSmoothing.gaussianSmoothing
((volume : Measure E).tilted (fun x => -U x)) (Real.sqrt η)) ^ 2 ≤ ENNReal.ofReal (r^2)) :
let d : ℝ := Module.finrank ℝ E
let M := 4*(β : ℝ)*d + 4*(β : ℝ)^2*η*d + 2*(β : ℝ)^2*r^2
let F := fun y z x : E => U x + ‖x-(y+Real.sqrt τ • z)‖^2/(2*(η+τ))
Integrable (fun y => ‖gradient U y‖^2) ν ∧
(∫ y, ‖gradient U y‖^2 ∂ν) ≤ M ∧
(∀ y z, gradient (F y z) y = gradient U y - (Real.sqrt τ/(η+τ)) • z) ∧
Integrable (fun p : E × E => ‖gradient (F p.1 p.2) p.1‖^2) (ν.prod (stdGaussian E)) ∧
(∫ p : E × E, ‖gradient (F p.1 p.2) p.1‖^2 ∂ν.prod (stdGaussian E)) =
(∫ y, ‖gradient U y‖^2 ∂ν) + τ*d/(η+τ)^2 ∧
(∫ p : E × E, ‖gradient (F p.1 p.2) p.1‖^2 ∂ν.prod (stdGaussian E)) ≤ M + τ*d/(η+τ)^2 ∧
(β=1 → η≤1/4 → (∫ p : E × E, ‖gradient (F p.1 p.2) p.1‖^2 ∂ν.prod (stdGaussian E)) ≤
5*(d+r^2+τ*d/(η+τ)^2)) := by
let d : ℝ := Module.finrank ℝ E
let μ := (volume : Measure E).tilted (fun x => -U x)
let ρ := TechnicalLemmas.Measure.GaussianSmoothing.gaussianSmoothing μ (Real.sqrt η)
let M := 4*(β : ℝ)*d + 4*(β : ℝ)^2*η*d + 2*(β : ℝ)^2*r^2
let F := fun y z x : E => U x + ‖x-(y+Real.sqrt τ • z)‖^2/(2*(η+τ))
have hG := TechnicalLemmas.Analysis.GibbsGradientMoment.gibbs_gradient_moment hα hαβ hU hH
have : IsProbabilityMeasure μ := hG.1
have hbase := TechnicalLemmas.Analysis.QuadraticRegularization.strongConvexOn_and_lipschitzWith_gradient_add_quadratic
(r := 0) hU hH (0 : E)
have hLip : LipschitzWith β (gradient U) := by simpa using hbase.2
have hSm := smoothing_square hLip hG.2.1 (Real.sqrt η)
have hW := wasserstein_square hLip hSm.1 hw
have hbound : (∫ y, ‖gradient U y‖^2 ∂ν) ≤ M := by
have h1 := hG.2.2.2.2
have h2 := hSm.2
have h3 := hW.2
rw [Real.sq_sqrt hη] at h2
dsimp [M, d, μ, ρ] at *
linarith
have hA : 0 < η+τ := add_pos_of_nonneg_of_pos hη hτ
have hgrad (y z : E) : gradient (F y z) y =
gradient U y - (Real.sqrt τ/(η+τ)) • z := by
rw [regularized_gradient hU hA]
-- Source excerpt truncated; follow the exact source link.
AutoSamplingTheory/ExampleCases/SmoothedPicardHMC/ApproximateInitialGradientMoment.lean:274published source at ed709a7f320d
Excerpt truncated; the exact source link is authoritative.
Complete Lean source
AutoSamplingTheory/ExampleCases/SmoothedPicardHMC/ApproximateInitialGradientMoment.lean — full module with imports and context
import AutoSamplingTheory.TechnicalLemmas.Analysis.GibbsGradientMoment
import AutoSamplingTheory.TechnicalLemmas.Measure.GaussianSmoothing
import AutoSamplingTheory.TechnicalLemmas.Measure.CouplingQuadraticIntegrability
import Mathlib.MeasureTheory.Function.L2Space
import Mathlib.MeasureTheory.Integral.Prod
import Mathlib.Tactic
/-!
# Actual approximate initialization gradient moments
The initial-gradient estimates in Section 6.3 of Chen, Chewi, Lu and Zhang,
arXiv:2609.06906v1, are derived for the actual approximate input law. Genuine
curvature supplies the normalized Gibbs moment, actual independent Gaussian
smoothing supplies its smoothed counterpart, and finite-cost near-optimal
couplings transfer integrability and the moment bound to the actual output.
The regularized potential uses the same pair (Y,Z) as its starting point and
random center. Absolute integrability is established before eliminating its
Gaussian cross term. The final constant 5 is a sufficient constant derived
here, not a numerical constant quoted from the paper. General beta and a
coordinate-free finite-dimensional domain, including dimension zero, are
explicit extensions. The nonnegative r hypothesis is retained publicly.
This fixed-call moment theorem does not construct a jointly measurable stopped
gradient-descent program for the random center, establish conditional history
invariants, or sum reference-query costs. Neither paper is completed here.
-/
noncomputable section
open MeasureTheory ProbabilityTheory InnerProductSpace
open scoped NNReal ENNReal RealInnerProductSpace
namespace AutoSamplingTheory.ExampleCases.SmoothedPicardHMC.ApproximateInitialGradientMoment
variable {E : Type*} [NormedAddCommGroup E] [InnerProductSpace ℝ E]
[CompleteSpace E] [FiniteDimensional ℝ E] [MeasurableSpace E] [BorelSpace E]
private theorem gaussian_square :
Integrable (fun x : E => ‖x‖^2) (stdGaussian E) ∧
(∫ x : E, ‖x‖^2 ∂stdGaussian E) = Module.finrank ℝ E := by
classical
have hi : Integrable (fun x : E => ‖x‖^2) (stdGaussian E) :=
(memLp_two_iff_integrable_sq_norm (by fun_prop)).1 IsGaussian.memLp_two_id
let b := stdOrthonormalBasis ℝ E
have hdir (i) : (∫ x : E, (inner ℝ (b i) x)^2 ∂stdGaussian E) = 1 := by
have hh := covarianceBilin_apply (μ := stdGaussian E) IsGaussian.memLp_two_id (b i) (b i)
rw [covarianceBilin_stdGaussian] at hh
change inner ℝ (b i) (b i) = _ at hh
simpa [integral_id_stdGaussian, real_inner_self_eq_norm_sq,
b.orthonormal.norm_eq_one, pow_two] using hh.symm
have hL1 (i) : Integrable (fun x : E => (inner ℝ (b i) x)^2) (stdGaussian E) := by
apply hi.mono' (by fun_prop)
filter_upwards with x
rw [Real.norm_eq_abs, abs_of_nonneg (sq_nonneg _)]
have hb := norm_inner_le_norm (𝕜 := ℝ) (b i) x
rw [b.orthonormal.norm_eq_one, one_mul] at hb
have hsq := sq_le_sq₀ (norm_nonneg (inner ℝ (b i) x)) (norm_nonneg x) |>.2 hb
simpa [Real.norm_eq_abs, sq_abs] using hsq
refine ⟨hi, ?_⟩
calc
(∫ x : E, ‖x‖^2 ∂stdGaussian E) =
∫ x : E, ∑ i, (inner ℝ (b i) x)^2 ∂stdGaussian E := by
apply integral_congr_ae
filter_upwards with x
simpa [Real.norm_eq_abs, sq_abs] using (b.sum_sq_norm_inner_right x).symm
_ = ∑ i, ∫ x : E, (inner ℝ (b i) x)^2 ∂stdGaussian E :=
integral_finsetSum _ (fun i _ => hL1 i)
_ = Module.finrank ℝ E := by simp [hdir]
private theorem gaussian_perturbation_square {μ : Measure E} [IsProbabilityMeasure μ]
{g : E → E} (hg : Continuous g)
(hi : Integrable (fun x => ‖g x‖^2) μ) (c : ℝ) :
Integrable (fun p : E × E => ‖g p.1 - c • p.2‖^2) (μ.prod (stdGaussian E)) ∧
(∫ p : E × E, ‖g p.1 - c • p.2‖^2 ∂μ.prod (stdGaussian E)) =
(∫ x, ‖g x‖^2 ∂μ) + c^2 * Module.finrank ℝ E := by
have hg1 : Integrable g μ := MemLp.integrable (by norm_num : 1 ≤ (2 : ℝ≥0∞))
((memLp_two_iff_integrable_sq_norm hg.aestronglyMeasurable).2 hi)
have hz1 : Integrable (fun z : E => z) (stdGaussian E) := IsGaussian.integrable_id
have hcross : Integrable (fun p : E × E => inner ℝ (g p.1) p.2)
(μ.prod (stdGaussian E)) :=
hg1.op_fst_snd (by fun_prop) ⟨1, by intro x y; simpa using norm_inner_le_norm (𝕜 := ℝ) x y⟩ hz1
have hcross0 : (∫ p : E × E, inner ℝ (g p.1) p.2 ∂μ.prod (stdGaussian E)) = 0 := by
rw [integral_prod _ hcross]
have hz (x : E) : (∫ z : E, inner ℝ (g x) z ∂stdGaussian E) = 0 :=
integral_strongDual_stdGaussian (innerSL ℝ (g x))
simp only [hz, integral_zero]
have hp := hi.comp_fst (stdGaussian E)
have hq := (gaussian_square (E := E)).1.comp_snd μ
have hqc : Integrable (fun p : E × E => c^2 * ‖p.2‖^2)
(μ.prod (stdGaussian E)) := hq.const_mul (c^2)
have hcc : Integrable (fun p : E × E => (2*c) * inner ℝ (g p.1) p.2)
(μ.prod (stdGaussian E)) := hcross.const_mul (2*c)
have hsum : Integrable (fun p : E × E => ‖g p.1‖^2 + c^2 * ‖p.2‖^2)
(μ.prod (stdGaussian E)) := hp.add hqc
have hexpand (p : E × E) : ‖g p.1 - c • p.2‖^2 =
‖g p.1‖^2 + c^2 * ‖p.2‖^2 - (2*c) * inner ℝ (g p.1) p.2 := by
rw [norm_sub_sq_real, norm_smul, real_inner_smul_right]
simp only [Real.norm_eq_abs, mul_pow, sq_abs]
ring
have hwhole : Integrable (fun p : E × E => ‖g p.1 - c • p.2‖^2)
(μ.prod (stdGaussian E)) := by
have hd : Integrable (fun p : E × E =>
‖g p.1‖^2 + c^2 * ‖p.2‖^2 - (2*c) * inner ℝ (g p.1) p.2)
(μ.prod (stdGaussian E)) := hsum.sub hcc
simpa only [hexpand] using hd
refine ⟨hwhole, ?_⟩
simp_rw [hexpand]
rw [integral_sub hsum hcc, integral_add hp hqc,
integral_const_mul, integral_const_mul, hcross0]
simp only [mul_zero, sub_zero]
rw [integral_prod _ hp, integral_prod _ hq]
simp [(gaussian_square (E := E)).2]
omit [InnerProductSpace ℝ E] [CompleteSpace E] [FiniteDimensional ℝ E] [MeasurableSpace E] [BorelSpace E] in
private theorem lipschitz_square_bound {g : E → E} {b : ℝ≥0}
(hg : LipschitzWith b g) (x y : E) :
‖g x‖^2 ≤ 2 * ‖g y‖^2 + 2 * (b : ℝ)^2 * ‖x-y‖^2 := by
have hLip : ‖g x - g y‖ ≤ (b : ℝ) * ‖x-y‖ := by
simpa only [dist_eq_norm] using hg.dist_le_mul x y
have htri := norm_sub_norm_le (g x) (g y)
have hnorm : ‖g x‖ ≤ ‖g y‖ + (b : ℝ) * ‖x-y‖ := by linarith
have hnonneg : 0 ≤ (b : ℝ) * ‖x-y‖ := mul_nonneg b.coe_nonneg (norm_nonneg _)
nlinarith [norm_nonneg (g x), norm_nonneg (g y),
sq_nonneg (‖g y‖ - (b : ℝ) * ‖x-y‖)]
private theorem smoothing_square {μ : Measure E} [IsProbabilityMeasure μ]
{g : E → E} {b : ℝ≥0} (hg : LipschitzWith b g)
(hi : Integrable (fun x => ‖g x‖^2) μ) (σ : ℝ) :
let ρ := TechnicalLemmas.Measure.GaussianSmoothing.gaussianSmoothing μ σ
Integrable (fun x => ‖g x‖^2) ρ ∧
(∫ x, ‖g x‖^2 ∂ρ) ≤ 2 * (∫ x, ‖g x‖^2 ∂μ) +
2 * (b : ℝ)^2 * σ^2 * Module.finrank ℝ E := by
let ρ := TechnicalLemmas.Measure.GaussianSmoothing.gaussianSmoothing μ σ
let A : E × E → E := fun p => p.1 + σ • p.2
have hA : Measurable A := by fun_prop
have hc : Continuous (fun x => ‖g x‖^2) := hg.continuous.norm.pow 2
have hprod : μ.prod (TechnicalLemmas.Measure.GaussianSmoothing.scaledStdGaussian (E := E) σ) =
(μ.prod (stdGaussian E)).map (Prod.map id (fun z : E => σ • z)) := by
simpa only [Measure.map_id, TechnicalLemmas.Measure.GaussianSmoothing.scaledStdGaussian] using
Measure.map_prod_map μ (stdGaussian E) measurable_id (by fun_prop : Measurable (fun z : E => σ • z))
have hρ : ρ = (μ.prod (stdGaussian E)).map A := by
dsimp [ρ, TechnicalLemmas.Measure.GaussianSmoothing.gaussianSmoothing,
TechnicalLemmas.Measure.CommonNoiseContraction.addNoise]
rw [hprod, Measure.map_map (by fun_prop) (by fun_prop)]
rfl
have hp := hi.comp_fst (stdGaussian E)
have hq := (gaussian_square (E := E)).1.comp_snd μ
have hdom : Integrable (fun p : E × E =>
2 * ‖g p.1‖^2 + (2 * (b : ℝ)^2 * σ^2) * ‖p.2‖^2)
(μ.prod (stdGaussian E)) := (hp.const_mul 2).add (hq.const_mul _)
have hbound (p : E × E) : ‖g (A p)‖^2 ≤
2 * ‖g p.1‖^2 + (2 * (b : ℝ)^2 * σ^2) * ‖p.2‖^2 := by
have hb := lipschitz_square_bound hg (A p) p.1
have hd : A p - p.1 = σ • p.2 := by dsimp [A]; abel
rw [hd, norm_smul] at hb
simpa only [Real.norm_eq_abs, mul_pow, sq_abs, mul_assoc] using hb
have hcomp : Integrable (fun p => ‖g (A p)‖^2) (μ.prod (stdGaussian E)) := by
apply hdom.mono' (hc.comp (by fun_prop : Continuous A)).aestronglyMeasurable
filter_upwards with p
change ‖(‖g (A p)‖^2 : ℝ)‖ ≤ _
rw [Real.norm_eq_abs, abs_of_nonneg (sq_nonneg ‖g (A p)‖)]
exact hbound p
have hρi : Integrable (fun x => ‖g x‖^2) ρ := by
rw [hρ]
exact (integrable_map_measure hc.aestronglyMeasurable hA.aemeasurable).2 hcomp
refine ⟨hρi, ?_⟩
change (∫ x, ‖g x‖^2 ∂ρ) ≤ _
rw [hρ, integral_map hA.aemeasurable hc.aestronglyMeasurable]
have hm := integral_mono hcomp hdom hbound
have hsum : (∫ p : E × E, 2 * ‖g p.1‖^2 + (2 * (b : ℝ)^2 * σ^2) * ‖p.2‖^2
∂μ.prod (stdGaussian E)) =
2 * (∫ x, ‖g x‖^2 ∂μ) + 2 * (b : ℝ)^2 * σ^2 * Module.finrank ℝ E := by
rw [integral_add (hp.const_mul 2) (hq.const_mul _), integral_const_mul, integral_const_mul,
integral_prod _ hp, integral_prod _ hq]
simp [(gaussian_square (E := E)).2]
exact hm.trans_eq hsum
omit [CompleteSpace E] in
private theorem coupling_square {μ ν : Measure E} {γ : Measure (E × E)}
{g : E → E} {b : ℝ≥0} {s : ℝ} (hg : LipschitzWith b g)
(hi : Integrable (fun x => ‖g x‖^2) ν)
(hγ : TechnicalLemmas.Measure.Transport.IsCoupling γ μ ν) (hs : 0 ≤ s)
(hcost : (∫⁻ p, TechnicalLemmas.Measure.WassersteinSpace.quadraticCost p ∂γ) ≤ ENNReal.ofReal s) :
Integrable (fun x => ‖g x‖^2) μ ∧
(∫ x, ‖g x‖^2 ∂μ) ≤ 2 * (∫ x, ‖g x‖^2 ∂ν) + 2 * (b : ℝ)^2 * s := by
have hc : Continuous (fun x => ‖g x‖^2) := hg.continuous.norm.pow 2
have hmp1 := TechnicalLemmas.Measure.CouplingQuadraticIntegrability.measurePreserving_fst_of_isCoupling hγ
have hmp2 := TechnicalLemmas.Measure.CouplingQuadraticIntegrability.measurePreserving_snd_of_isCoupling hγ
have hq : Integrable (fun p : E × E => ‖g p.2‖^2) γ :=
hmp2.integrable_comp_of_integrable hi
have hd : Integrable (fun p : E × E => ‖p.1-p.2‖^2) γ := by
have hm : AEMeasurable (fun p : E × E =>
TechnicalLemmas.Measure.WassersteinSpace.quadraticCost p) γ := by
unfold TechnicalLemmas.Measure.WassersteinSpace.quadraticCost
fun_prop
have ht := integrable_toReal_of_lintegral_ne_top hm
(lt_of_le_of_lt hcost ENNReal.ofReal_lt_top).ne
simpa [TechnicalLemmas.Measure.WassersteinSpace.quadraticCost] using ht
have hdint : (∫ p : E × E, ‖p.1-p.2‖^2 ∂γ) ≤ s := by
apply (ENNReal.ofReal_le_ofReal_iff hs).1
rw [ofReal_integral_eq_lintegral_ofReal hd (Filter.Eventually.of_forall (fun p => sq_nonneg _))]
exact hcost
have hdom : Integrable (fun p : E × E => 2 * ‖g p.2‖^2 + 2 * (b : ℝ)^2 * ‖p.1-p.2‖^2) γ :=
(hq.const_mul 2).add (hd.const_mul _)
have hp : Integrable (fun p : E × E => ‖g p.1‖^2) γ := by
apply hdom.mono' (hc.comp continuous_fst).aestronglyMeasurable
filter_upwards with p
change ‖(‖g p.1‖^2 : ℝ)‖ ≤ _
rw [Real.norm_eq_abs, abs_of_nonneg (sq_nonneg ‖g p.1‖)]
exact lipschitz_square_bound hg p.1 p.2
have hμ : Integrable (fun x => ‖g x‖^2) μ := by
rw [← hmp1.map_eq]
exact (integrable_map_measure hc.aestronglyMeasurable measurable_fst.aemeasurable).2 hp
have hpint : (∫ p : E × E, ‖g p.1‖^2 ∂γ) = ∫ x, ‖g x‖^2 ∂μ := by
rw [← hmp1.map_eq, integral_map measurable_fst.aemeasurable hc.aestronglyMeasurable]
have hqint : (∫ p : E × E, ‖g p.2‖^2 ∂γ) = ∫ x, ‖g x‖^2 ∂ν := by
rw [← hmp2.map_eq, integral_map measurable_snd.aemeasurable hc.aestronglyMeasurable]
have hm := integral_mono hp hdom (fun p => lipschitz_square_bound hg p.1 p.2)
rw [integral_add (hq.const_mul 2) (hd.const_mul _), integral_const_mul,
integral_const_mul, hpint, hqint] at hm
refine ⟨hμ, hm.trans ?_⟩
gcongr
omit [CompleteSpace E] in
private theorem wasserstein_square {μ ν : Measure E}
{g : E → E} {b : ℝ≥0} {r : ℝ} (hg : LipschitzWith b g)
(hi : Integrable (fun x => ‖g x‖^2) ν)
(hw : TechnicalLemmas.Measure.WassersteinSpace.wassersteinDistance μ ν ^ 2 ≤
ENNReal.ofReal (r^2)) :
Integrable (fun x => ‖g x‖^2) μ ∧
(∫ x, ‖g x‖^2 ∂μ) ≤ 2 * (∫ x, ‖g x‖^2 ∂ν) + 2 * (b : ℝ)^2 * r^2 := by
have hall (s : ℝ) (hs : r^2 < s) :
Integrable (fun x => ‖g x‖^2) μ ∧
(∫ x, ‖g x‖^2 ∂μ) ≤ 2 * (∫ x, ‖g x‖^2 ∂ν) + 2 * (b : ℝ)^2 * s := by
have hs0 : 0 < s := (sq_nonneg r).trans_lt hs
have hcost : TechnicalLemmas.Measure.Transport.transportCost
(TechnicalLemmas.Measure.WassersteinSpace.quadraticCost (E := E)) μ ν < ENNReal.ofReal s := by
rw [← TechnicalLemmas.Measure.WassersteinSpace.wassersteinDistance_sq]
exact hw.trans_lt ((ENNReal.ofReal_lt_ofReal_iff hs0).2 hs)
obtain ⟨γ, hγ, hc⟩ :=
TechnicalLemmas.Measure.Transport.exists_isCoupling_lintegral_lt_of_transportCost_lt
(TechnicalLemmas.Measure.WassersteinSpace.quadraticCost (E := E)) μ ν hcost
exact coupling_square hg hi hγ hs0.le hc.le
refine ⟨(hall (r^2+1) (by linarith)).1, ?_⟩
apply le_of_forall_pos_le_add
intro ε hε
have hden : 0 < 2 * (b : ℝ)^2 + 1 := by positivity
have hδ : 0 < ε / (2 * (b : ℝ)^2 + 1) := div_pos hε hden
have hbound := (hall (r^2 + ε/(2*(b : ℝ)^2+1)) (by linarith)).2
have heq := div_mul_cancel₀ ε hden.ne'
nlinarith
omit [FiniteDimensional ℝ E] [MeasurableSpace E] [BorelSpace E] in
private theorem regularized_gradient {U : E → ℝ} (hU : ContDiff ℝ 2 U)
{A : ℝ} (hA : 0 < A) (u x : E) :
gradient (fun t => U t + ‖t-u‖^2/(2*A)) x = gradient U x + A⁻¹ • (x-u) := by
have heq : (fun t => U t + ‖t-u‖^2/(2*A)) =
(fun t => U t + (A⁻¹/2)*‖t-u‖^2) := by
funext t
field_simp
rw [heq]
have hq : HasFDerivAt (fun t => (A⁻¹/2)*‖t-u‖^2)
(A⁻¹ • innerSL ℝ (x-u)) x := by
convert (((hasFDerivAt_id x).sub_const u).norm_sq).const_mul (A⁻¹/2)
using 1 <;> first | rfl | (ext v; simp; ring)
apply HasGradientAt.gradient
rw [hasGradientAt_iff_hasFDerivAt]
change HasFDerivAt (fun t => U t+(A⁻¹/2)*‖t-u‖^2)
((toDual ℝ E) (gradient U x + A⁻¹ • (x-u))) x
convert! ((hU.differentiable (by norm_num)) x).hasGradientAt.hasFDerivAt.add hq using 1
simp only [map_add, map_smul]
rfl
theorem approximate_initial_gradient_moment {U : E → ℝ} {α β : ℝ≥0}
(hα : 0 < α) (hαβ : α ≤ β) (hU : ContDiff ℝ 2 U)
(hH : ∀ x v : E, (α : ℝ)*‖v‖^2 ≤ fderiv ℝ (fderiv ℝ U) x v v ∧
fderiv ℝ (fderiv ℝ U) x v v ≤ (β : ℝ)*‖v‖^2)
{η τ r : ℝ} (hη : 0 ≤ η) (hτ : 0 < τ) (_hr : 0 ≤ r)
(ν : Measure E) [IsProbabilityMeasure ν]
(hw : TechnicalLemmas.Measure.WassersteinSpace.wassersteinDistance ν
(TechnicalLemmas.Measure.GaussianSmoothing.gaussianSmoothing
((volume : Measure E).tilted (fun x => -U x)) (Real.sqrt η)) ^ 2 ≤ ENNReal.ofReal (r^2)) :
let d : ℝ := Module.finrank ℝ E
let M := 4*(β : ℝ)*d + 4*(β : ℝ)^2*η*d + 2*(β : ℝ)^2*r^2
let F := fun y z x : E => U x + ‖x-(y+Real.sqrt τ • z)‖^2/(2*(η+τ))
Integrable (fun y => ‖gradient U y‖^2) ν ∧
(∫ y, ‖gradient U y‖^2 ∂ν) ≤ M ∧
(∀ y z, gradient (F y z) y = gradient U y - (Real.sqrt τ/(η+τ)) • z) ∧
Integrable (fun p : E × E => ‖gradient (F p.1 p.2) p.1‖^2) (ν.prod (stdGaussian E)) ∧
(∫ p : E × E, ‖gradient (F p.1 p.2) p.1‖^2 ∂ν.prod (stdGaussian E)) =
(∫ y, ‖gradient U y‖^2 ∂ν) + τ*d/(η+τ)^2 ∧
(∫ p : E × E, ‖gradient (F p.1 p.2) p.1‖^2 ∂ν.prod (stdGaussian E)) ≤ M + τ*d/(η+τ)^2 ∧
(β=1 → η≤1/4 → (∫ p : E × E, ‖gradient (F p.1 p.2) p.1‖^2 ∂ν.prod (stdGaussian E)) ≤
5*(d+r^2+τ*d/(η+τ)^2)) := by
let d : ℝ := Module.finrank ℝ E
let μ := (volume : Measure E).tilted (fun x => -U x)
let ρ := TechnicalLemmas.Measure.GaussianSmoothing.gaussianSmoothing μ (Real.sqrt η)
let M := 4*(β : ℝ)*d + 4*(β : ℝ)^2*η*d + 2*(β : ℝ)^2*r^2
let F := fun y z x : E => U x + ‖x-(y+Real.sqrt τ • z)‖^2/(2*(η+τ))
have hG := TechnicalLemmas.Analysis.GibbsGradientMoment.gibbs_gradient_moment hα hαβ hU hH
have : IsProbabilityMeasure μ := hG.1
have hbase := TechnicalLemmas.Analysis.QuadraticRegularization.strongConvexOn_and_lipschitzWith_gradient_add_quadratic
(r := 0) hU hH (0 : E)
have hLip : LipschitzWith β (gradient U) := by simpa using hbase.2
have hSm := smoothing_square hLip hG.2.1 (Real.sqrt η)
have hW := wasserstein_square hLip hSm.1 hw
have hbound : (∫ y, ‖gradient U y‖^2 ∂ν) ≤ M := by
have h1 := hG.2.2.2.2
have h2 := hSm.2
have h3 := hW.2
rw [Real.sq_sqrt hη] at h2
dsimp [M, d, μ, ρ] at *
linarith
have hA : 0 < η+τ := add_pos_of_nonneg_of_pos hη hτ
have hgrad (y z : E) : gradient (F y z) y =
gradient U y - (Real.sqrt τ/(η+τ)) • z := by
rw [regularized_gradient hU hA]
have he : y-(y+Real.sqrt τ • z) = -(Real.sqrt τ • z) := by abel
rw [he]
simp only [smul_neg, smul_smul, sub_eq_add_neg, div_eq_mul_inv, mul_comm]
have hP := gaussian_perturbation_square hLip.continuous hW.1 (Real.sqrt τ/(η+τ))
have hnoise : (Real.sqrt τ/(η+τ))^2 * d = τ*d/(η+τ)^2 := by
rw [div_pow, Real.sq_sqrt hτ.le]
ring
have hEq : (∫ p : E × E, ‖gradient (F p.1 p.2) p.1‖^2 ∂ν.prod (stdGaussian E)) =
(∫ y, ‖gradient U y‖^2 ∂ν) + τ*d/(η+τ)^2 := by
simp_rw [hgrad]
exact hP.2.trans (by rw [show (Module.finrank ℝ E : ℝ)=d from rfl, hnoise])
refine ⟨hW.1, hbound, hgrad, ?_, hEq, ?_, ?_⟩
· change Integrable (fun p : E × E => ‖gradient (F p.1 p.2) p.1‖^2) (ν.prod (stdGaussian E))
simpa only [hgrad] using hP.1
· rw [hEq]
change (∫ y, ‖gradient U y‖^2 ∂ν) + τ*d/(η+τ)^2 ≤ M + τ*d/(η+τ)^2
linarith
· intro hβ hηsmall
rw [hEq]
have hd : 0 ≤ d := Nat.cast_nonneg _
have hn : 0 ≤ τ*d/(η+τ)^2 := div_nonneg (mul_nonneg hτ.le hd) (sq_nonneg _)
have hηd : 4*η*d ≤ d := by nlinarith [mul_le_mul_of_nonneg_right hηsmall hd]
simp only [M, hβ, NNReal.coe_one, one_pow, mul_one] at hbound
nlinarith [sq_nonneg r]
end AutoSamplingTheory.ExampleCases.SmoothedPicardHMC.ApproximateInitialGradientMoment