Samplinglib
Lean gate not recorded for this source state main · 0e31a3cda412
production module

AutoSamplingTheory.TechnicalLemmas.FunctionalInequalities.WeightedGradient

Read the mathematical statements and proofs in order

1 named declarations scanned from AutoSamplingTheory/TechnicalLemmas/FunctionalInequalities/WeightedGradient.lean.

Imports
Imported by
Placeholder scan
0 declaration(s) flagged
Gate status
Partial

Declarations

theorem AutoSamplingTheory.TechnicalLemmas.FunctionalInequalities.WeightedGradient.compact_gradient_closable Partial Not mapped

Read the complete mathematical statement and proof, with Lean below each

No declaration docstring.

theorem compact_gradient_closable (W : E → ℝ) (hW : ContDiff ℝ 1 W)
    (hI : Integrable (fun x => Real.exp (-W x))) :
    let μ := (volume : Measure E).tilted (fun x => -W x)
    ∃ D : Lp ℝ 2 μ →ₗ.[ℝ] Lp E 2 μ,
      Dense (D.domain : Set (Lp ℝ 2 μ)) ∧ D.IsClosable ∧ D.closure.IsClosed ∧
      ∀ (u : Lp ℝ 2 μ) (v : Lp E 2 μ), (u,v) ∈ D.graph ↔
        ∃ f : E → ℝ, ContDiff ℝ ∞ f ∧ HasCompactSupport f ∧
          u =ᵐ[μ] f ∧ v =ᵐ[μ] gradient f := by
  have weighted_directional (W f g : E → ℝ) (hW : ContDiff ℝ 1 W)
      (hf : ContDiff ℝ 1 f) (hg : ContDiff ℝ 1 g)
      (hgc : HasCompactSupport g) (v : E) :
      (∫ x, Real.exp (-W x) * g x * fderiv ℝ f x v) =
        - ∫ x, Real.exp (-W x) *
          (fderiv ℝ g x v - g x * fderiv ℝ W x v) * f x := by
    let F := fun x => Real.exp (-W x) * g x
    have hF : ContDiff ℝ 1 F := hW.neg.exp.mul hg
    have hFc : HasCompactSupport F := hgc.mul_left
    have hDF : Continuous (fun x => fderiv ℝ F x v) :=
      (hF.fderiv_right (m := 0) (by norm_num)).continuous.clm_apply continuous_const
    have hDf : Continuous (fun x => fderiv ℝ f x v) :=
      (hf.fderiv_right (m := 0) (by norm_num)).continuous.clm_apply continuous_const
    have hDFc : HasCompactSupport (fun x => fderiv ℝ F x v) := by
      refine HasCompactSupport.of_support_subset_isCompact hFc.isCompact ?_
      intro x hx
      by_contra hn
      exact hx (by simp [fderiv_of_notMem_tsupport ℝ hn])
    have h1 : Integrable (fun x => fderiv ℝ F x v * f x) :=
      (hDF.mul hf.continuous).integrable_of_hasCompactSupport hDFc.mul_right
    have h2 : Integrable (fun x => F x * fderiv ℝ f x v) :=
      (hF.continuous.mul hDf).integrable_of_hasCompactSupport hFc.mul_right
    have h3 : Integrable (fun x => F x * f x) :=
      (hF.continuous.mul hf.continuous).integrable_of_hasCompactSupport hFc.mul_right
    have hi := integral_mul_fderiv_eq_neg_fderiv_mul_of_integrable h1 h2 h3
      (fun x _ => hF.differentiable one_ne_zero x)
      (fun x _ => hf.differentiable one_ne_zero x)
    change (∫ x, F x * fderiv ℝ f x v) = _
    rw [hi]
    congr 1
    apply integral_congr_ae
    filter_upwards [] with x
    have hd := ((hW.differentiable one_ne_zero x).hasFDerivAt.neg.exp).mul
      (hg.differentiable one_ne_zero x).hasFDerivAt
    have he : fderiv ℝ F x v = Real.exp (-W x) *
        (fderiv ℝ g x v - g x * fderiv ℝ W x v) := by
-- Source excerpt truncated; follow the exact source link.

Excerpt truncated; the exact source link is authoritative.