All proofs
Project-declaredLean 4.29.0-rc6 · mathlib@5c8398df5281

Exists smooth compact Support W1p approx univ

DeGiorgi.exists_smooth_compactSupport_W1p_approx_univ

Plain-language statement

Global smooth compactly supported approximation of a compactly supported W^{1,p} function on ℝ^d, in the finite-p regime.

Exact Lean statement

theorem exists_smooth_compactSupport_W1p_approx_univ
    {p : ℝ} (hp : 1 < p)
    {u : E → ℝ}
    (hw : MemW1pWitness (ENNReal.ofReal p) u Set.univ)
    (hu_compact : HasCompactSupport u) :
    ∃ φ : ℕ → E → ℝ,
      (∀ n, ContDiff ℝ (⊤ : ℕ∞) (φ n)) ∧
      (∀ n, HasCompactSupport (φ n)) ∧
      (∀ n,
        tsupport (φ n) ⊆
          Metric.cthickening (shrinkingBump (d := d) n).rOut (tsupport u)) ∧
      Tendsto
        (fun n => eLpNorm (fun x => φ n x - u x) (ENNReal.ofReal p) volume)
        atTop (nhds 0) ∧
      (∀ i : Fin d,
        Tendsto
          (fun n =>
            eLpNorm
              (fun x => (fderiv ℝ (φ n) x) (EuclideanSpace.single i 1) - hw.weakGrad x i)
              (ENNReal.ofReal p) volume)
          atTop (nhds 0))

Formal artifact

Lean source

Canonical source
Full Lean sourceLean 4
theorem exists_smooth_compactSupport_W1p_approx_univ    {p : } (hp : 1 < p)    {u : E  }    (hw : MemW1pWitness (ENNReal.ofReal p) u Set.univ)    (hu_compact : HasCompactSupport u) :     φ :   E  ,      ( n, ContDiff  (⊤ : ∞) (φ n))       ( n, HasCompactSupport (φ n))       ( n,        tsupport (φ n)           Metric.cthickening (shrinkingBump (d := d) n).rOut (tsupport u))       Tendsto        (fun n => eLpNorm (fun x => φ n x - u x) (ENNReal.ofReal p) volume)        atTop (nhds 0)       ( i : Fin d,        Tendsto          (fun n =>            eLpNorm              (fun x => (fderiv  (φ n) x) (EuclideanSpace.single i 1) - hw.weakGrad x i)              (ENNReal.ofReal p) volume)          atTop (nhds 0)) := by  let _ := (inferInstance : NeZero d)  have hp_le : 1  p := le_of_lt hp  have hp_enn : (1 : 0∞)  ENNReal.ofReal p := by    simpa using (ENNReal.ofReal_le_ofReal hp_le : ENNReal.ofReal (1 : )  ENNReal.ofReal p)  have hu_memLp : MemLp u (ENNReal.ofReal p) volume := by    simpa [Measure.restrict_univ] using hw.memLp  let φ :   E   := fun n =>    ((shrinkingBump (d := d) n).normed volume      ⋆[ContinuousLinearMap.lsmul  , volume] u)  refine φ, ?_, ?_, ?_, ?_, ?_  · intro n    exact (shrinkingBump (d := d) n).hasCompactSupport_normed.contDiff_convolution_left      (L := ContinuousLinearMap.lsmul  )      ((shrinkingBump (d := d) n).contDiff_normed)      (hu_memLp.locallyIntegrable hp_enn)  · intro n    apply HasCompactSupport.intro'      (K := Metric.cthickening (shrinkingBump (d := d) n).rOut (tsupport u))      (hu_compact.isCompact.cthickening (r := (shrinkingBump (d := d) n).rOut))      (hu_compact.isCompact.cthickening (r := (shrinkingBump (d := d) n).rOut)).isClosed    intro x hx    exact zero_outside_of_tsupport_subset:= Metric.cthickening (shrinkingBump (d := d) n).rOut (tsupport u))      (tsupport_normed_convolution_subset_cthickening        (d := d) (shrinkingBump (d := d) n) hu_compact)      hx  · intro n    exact tsupport_normed_convolution_subset_cthickening      (d := d) (shrinkingBump (d := d) n) hu_compact  · simpa [φ] using      tendsto_eLpNorm_normedConvolution_sub (d := d) hp_le hu_memLp  · intro i    have hGi_memLp : MemLp (fun y => hw.weakGrad y i) (ENNReal.ofReal p) volume := by      simpa [Measure.restrict_univ] using hw.weakGrad_component_memLp i    have hEq :        (fun n =>          eLpNorm            (fun x => (fderiv  (φ n) x) (EuclideanSpace.single i 1) - hw.weakGrad x i)            (ENNReal.ofReal p) volume) =          fun n =>            eLpNorm              (fun x =>                ((shrinkingBump (d := d) n).normed volume                  ⋆[ContinuousLinearMap.lsmul  , volume] (fun y => hw.weakGrad y i)) x -                  hw.weakGrad x i)              (ENNReal.ofReal p) volume := by      funext n      refine eLpNorm_congr_ae ?_      filter_upwards with x      let bump : E   := (shrinkingBump (d := d) n).normed volume      let Dbump : E  E L[]  := fderiv  bump      let ei : E := EuclideanSpace.single i 1      have hbump1 : ContDiff  1 bump := by        simpa [bump] using          ((shrinkingBump (d := d) n).contDiff_normed : ContDiff  1 ((shrinkingBump (d := d) n).normed volume))      have hfd :=        (shrinkingBump (d := d) n).hasCompactSupport_normed.hasFDerivAt_convolution_left          (L := ContinuousLinearMap.lsmul  )          hbump1          (hu_memLp.locallyIntegrable hp_enn) x      have hDbump_cont : Continuous Dbump := by        simpa [Dbump, bump] using hbump1.continuous_fderiv one_ne_zero      have hDbump_compact : HasCompactSupport Dbump := by        simpa [Dbump, bump] using ((shrinkingBump (d := d) n).hasCompactSupport_normed.fderiv (𝕜 := ))      have hfd' :          (fderiv  (φ n) x) ei =            (((Dbump ⋆[                ContinuousLinearMap.precompL E (ContinuousLinearMap.lsmul  ), volume] u) x)                ei) := by        simpa [φ, bump, Dbump, ei] using          congrArg (fun A : E L[]  => A ei) hfd.fderiv      have hconv_apply :          (((Dbump ⋆[              ContinuousLinearMap.precompL E (ContinuousLinearMap.lsmul  ), volume] u) x) ei) =            (((fun y => (fderiv  bump y) ei)              ⋆[ContinuousLinearMap.lsmul  , volume] u) x) := by        calc          (((Dbump ⋆[              ContinuousLinearMap.precompL E (ContinuousLinearMap.lsmul  ), volume] u) x) ei)              =            ((u ⋆[              ContinuousLinearMap.precompR E (ContinuousLinearMap.lsmul  ).flip, volume] Dbump) x) ei := by                simpa [ContinuousLinearMap.precompL, Dbump] using                  congrArg (fun F => F x ei)                    (MeasureTheory.convolution_flip                      (L := ContinuousLinearMap.precompR E (ContinuousLinearMap.lsmul  ).flip):= volume) (f := u) (g := Dbump))          _ = (u ⋆[(ContinuousLinearMap.lsmul  ).flip, volume] (fun y => Dbump y ei)) x := by                simpa [Dbump, bump] using                  (MeasureTheory.convolution_precompR_apply                    (L := (ContinuousLinearMap.lsmul  ).flip):= volume) (f := u) (g := Dbump)                    (hf := hu_memLp.locallyIntegrable hp_enn)                    (hcg := hDbump_compact) (hg := hDbump_cont) (x₀ := x) (x := ei))          _ = (((fun y => Dbump y ei) ⋆[ContinuousLinearMap.lsmul  , volume] u) x) := by                simpa [smul_eq_mul, mul_comm] using                  congrArg (fun F => F x)                    ((MeasureTheory.convolution_flip                      (L := (ContinuousLinearMap.lsmul  ).flip):= volume) (f := u) (g := fun y => Dbump y ei)).symm)      calc        (fderiv  (φ n) x) ei - hw.weakGrad x i          = (((Dbump ⋆[                ContinuousLinearMap.precompL E (ContinuousLinearMap.lsmul  ), volume] u) x)                ei) - hw.weakGrad x i := by                  rw [hfd']        _ = (((fun y =>              (fderiv  bump y) ei)                ⋆[ContinuousLinearMap.lsmul  , volume] u) x) - hw.weakGrad x i := by                  rw [hconv_apply]        _ = ((bump)              ⋆[ContinuousLinearMap.lsmul  , volume] (fun y => hw.weakGrad y i)) x -                hw.weakGrad x i := by                  simpa [ei] using                    congrArg (fun z => z - hw.weakGrad x i)                      (convolution_fderiv_eq_convolution_weakPartial_univ                        (d := d) (i := i) (u := u) (g := fun y => hw.weakGrad y i):= bump)                        (hw.isWeakGrad i)                        (by                          simpa [bump] using                            ((shrinkingBump (d := d) n).contDiff_normed :                              ContDiff  (⊤ : ∞) ((shrinkingBump (d := d) n).normed volume)))                        ((shrinkingBump (d := d) n).hasCompactSupport_normed) x)    exact hEq ▸ tendsto_eLpNorm_normedConvolution_sub (d := d) hp_le hGi_memLp
Project
DeGiorgi
License
Apache-2.0
Commit
4c1b3077d378
Source
DeGiorgi/SobolevSpace/Approximation.lean:1032-1177

Reuse this declaration

Bring the exact result into your workflow

The import identifies the source module. Your project still needs the pinned package dependency shown on this page.

What this badge means

This completion status comes from the project or community source. It has not yet been represented here as an independent rebuild and axiom audit.

Continue in this project

Related declarations

Project-declaredLean 4.29.0-rc6

Ae eq of tendsto e Lp Norm sub

BareFunction.ae_eq_of_tendsto_eLpNorm_sub

Plain-language statement

Lp limit uniqueness: if f_n → g₁ and f_n → g₂ in eLpNorm, then g₁ =ᵐ g₂.

partial differential equationsregularity theoryanalysis

Source project: DeGiorgi

Person-level attribution pending.

View proof record
Project-declaredLean 4.29.0-rc6

E Lp Norm pi le sum component

BareFunction.eLpNorm_pi_le_sum_component

Plain-language statement

Vector eLpNorm ≤ sum of component eLpNorms for Pi-valued functions. Uses eLpNorm_mono_real for the pointwise bound together with eLpNorm_sum_le for ℝ-valued functions, avoiding Pi instance synthesis.

partial differential equationsregularity theoryanalysis

Source project: DeGiorgi

Person-level attribution pending.

View proof record
Project-declaredLean 4.29.0-rc6

Mem Lp of tendsto e Lp Norm

BareFunction.memLp_of_tendsto_eLpNorm

Plain-language statement

If f n → g in eLpNorm and each f n ∈ Lp, then g ∈ Lp, provided g is AEStronglyMeasurable. Avoids the Lp type entirely. The key observation: eLpNorm (f n - g) → 0 means eLpNorm (f N - g) < 1 for some N. Then eLpNorm g ≤ eLpNorm (f N - g) + eLpNorm (f N) < ∞.

partial differential equationsregularity theoryanalysis

Source project: DeGiorgi

Person-level attribution pending.

View proof record