Skip to main content
AlexKontorovich/PrimeNumberTheoremAnd
Source indexedlemma · leanprover/lean4:v4.32.0

auto_cheby_exists_smooth_nonneg_fourier_kernel

PrimeNumberTheoremAnd.Wiener · PrimeNumberTheoremAnd/Wiener.lean:3580 to 3626

Source documentation

Smooth compactly supported function with non-negative Fourier transform via self-convolution.

Exact Lean statement

lemma auto_cheby_exists_smooth_nonneg_fourier_kernel :
    ∃ (ψ : ℝ → ℂ), ContDiff ℝ ∞ ψ ∧ HasCompactSupport ψ ∧
    (∀ y, 0 ≤ (𝓕 ψ y).re ∧ (𝓕 ψ y).im = 0) ∧ 0 < (𝓕 ψ 0).re

Complete declaration

Lean source

Canonical source
Full Lean sourceLean 4
lemma auto_cheby_exists_smooth_nonneg_fourier_kernel :     (ψ :   ℂ), ContDiff  ∞ ψ  HasCompactSupport ψ     ( y, 0  (𝓕 ψ y).re  (𝓕 ψ y).im = 0)  0 < (𝓕 ψ 0).re := by  obtain φ_real, hφSmooth, hφCompact, hφIcc, _, hφsupp :=    smooth_urysohn_support_Ioo (a := 1/2) (b := 1) (c := 1) (d := 2) (by norm_num) (by norm_num)  let φ :  := Complex.ofReal ∘ φ_real  let φ_rev :  := fun x  conj (φ (-x))  let ψ_fun :  := convolution φ φ_rev (ContinuousLinearMap.mul ℂ ℂ) volume  have hφSmooth' : ContDiff  ∞ φ := contDiff_ofReal.comp hφSmooth  have hφCompact' : HasCompactSupport φ := hφCompact.comp_left rfl  have hφRevSmooth : ContDiff  ∞ φ_rev := Complex.conjCLE.contDiff.comp (hφSmooth'.comp contDiff_neg)  have hφRevCompact : HasCompactSupport φ_rev := (hφCompact'.comp_homeomorph (Homeomorph.neg )).comp_left (by simp)  have hφInt : Integrable φ := hφSmooth'.continuous.integrable_of_hasCompactSupport hφCompact'  have hφRevInt : Integrable φ_rev := hφRevSmooth.continuous.integrable_of_hasCompactSupport hφRevCompact  have hψSmooth : ContDiff  ∞ ψ_fun := by    convert! hφRevCompact.contDiff_convolution_right (ContinuousLinearMap.mul  ℂ)      (hφSmooth'.continuous.locallyIntegrable:= volume)) hφRevSmooth  have hψCompact : HasCompactSupport ψ_fun :=    HasCompactSupport.convolution (ContinuousLinearMap.mul ℂ ℂ) hφCompact' hφRevCompact  refine ψ_fun, hψSmooth, hψCompact, fun y  ?_, ?_  · rw [Real.fourierIntegral_convolution hφInt hφRevInt, Pi.mul_apply,      Real.fourierIntegral_conj_neg y, mul_comm,  Complex.normSq_eq_conj_mul_self]    exact Complex.normSq_nonneg _, rfl  · have hφ_nonneg :  x, 0  φ_real x := fun x  by      have hx := hφIcc x; by_cases h : x  Set.Icc (1:) 1      · simp only [Set.indicator_of_mem h, Pi.one_apply] at hx; linarith      · simp only [Set.indicator_of_notMem h] at hx; exact hx    have hvol_supp : (1 : ENNReal)  volume (Function.support φ_real) := by      have hsub : Set.Ico (1:) 2  Function.support φ_real := fun x hx         hφsupp.symm ▸ Set.mem_Ioo.mpr by linarith [hx.1], hx.2      calc _ = volume (Set.Ico (1:) 2) := by simp [Real.volume_Ico]; norm_num           _  _ := volume.mono hsub    have hφint_pos : 0 < ∫ x, φ_real x :=      (integral_pos_iff_support_of_nonneg_ae (.of_forall hφ_nonneg)        (hφSmooth.continuous.integrable_of_hasCompactSupport hφCompact)).2        (lt_of_lt_of_le (by simp) hvol_supp)    have hFφ0_re : 0 < (𝓕 φ 0).re := by      simp only [φ, fourier_real_eq, mul_zero, neg_zero, AddChar.map_zero_eq_one, one_smul,        Function.comp_apply]      have hint : Integrable (fun x => (φ_real x : ℂ)) :=        (hφSmooth.continuous.integrable_of_hasCompactSupport hφCompact).ofReal      calc (∫ x, (φ_real x : ℂ)).re = ∫ x, (φ_real x : ℂ).re := (integral_re hint).symm        _ = ∫ x, φ_real x := by simp only [Complex.ofReal_re]        _ > 0 := hφint_pos    rw [Real.fourierIntegral_convolution hφInt hφRevInt, Pi.mul_apply,      Real.fourierIntegral_conj_neg 0, mul_comm,  Complex.normSq_eq_conj_mul_self]    exact Complex.normSq_pos.2 (fun h  (ne_of_gt hFφ0_re) (by simp [h]))