Documentation

PDE.Basics.Heat.HeatSolution

The Fundamental Solution of Heat Equation #

This file formalizes the properties of the heat kernel and its convolution solution following Rustom Choksi's Partial Differential Equations book (Chapter 7.2.2).

We establish:

  1. Regularity properties (continuity and measurability).
  2. $L^\infty$ bounds and decay estimates essential for dominated convergence.
  3. Integrability of the kernel and its derivatives against a function $g$.
  4. differentiation under the integral sign to prove the convolution solves the heat equation.

Reference #

This formalization follows Chapter 7.2.2, "Partial Differential Equations, A First Course" by Professor Rustom Choksi.

1. Definitions and Derivative Shorthands #

We define the convolution of the heat kernel with a function $g$ and introduce shorthand notation for the partial derivatives of the heat kernel.

noncomputable def Heat.heatConvolutionHK (α : ) (g : ) (x t : ) :

The convolution of the heat kernel with an initial data function g.

Equations
Instances For
    noncomputable def Heat.HKt (α x t : ) :

    Partial derivative of the heat kernel with respect to time $t$.

    Equations
    Instances For
      noncomputable def Heat.HKx (α x t : ) :

      Partial derivative of the heat kernel with respect to space $x$.

      Equations
      Instances For
        noncomputable def Heat.HKxx (α x t : ) :

        Second partial derivative of the heat kernel with respect to space $x$.

        Equations
        Instances For
          @[simp]
          theorem Heat.sq_sub_comm (x y : ) :
          (y - x) ^ 2 = (x - y) ^ 2

          2. Explicit Derivative Formulas #

          We use the explicit calculations of the derivatives of the Heat Kernel from the previous chapter and make them consistent with the notation HKt, HKx, HKxx

          theorem Heat.HKt_eq_derivative {α : } ( : 0 < α) {t x : } (ht : 0 < t) :
          HKt α x t = -(1 / (2 * t)) * (1 / (4 * Real.pi * α * t)) * Real.exp (-x ^ 2 / (4 * α * t)) + 1 / (4 * Real.pi * α * t) * (1 / (4 * α) * (1 / t ^ 2) * x ^ 2) * Real.exp (-x ^ 2 / (4 * α * t))
          theorem Heat.HKx_eq_derivative {α t x : } (ht : 0 < t) ( : 0 < α) :
          HKx α x t = 1 / (4 * Real.pi * α * t) * (-(1 / (4 * α * t)) * (2 * x)) * Real.exp (-x ^ 2 / (4 * α * t))
          theorem Heat.HKxx_eq_derivative {α t x : } (ht : 0 < t) ( : 0 < α) :
          HKxx α x t = 1 / (4 * Real.pi * α * t) * (-(1 / (4 * α * t)) * 2 * Real.exp (-x ^ 2 / (4 * α * t)) + -(1 / (4 * α * t)) * (2 * x) * (-(1 / (4 * α * t)) * (2 * x)) * Real.exp (-x ^ 2 / (4 * α * t)))

          3. Regularity: Continuity and Measurability #

          Here we establish that the heat kernel and its derivatives are continuous and strongly measurable functions. These properties are mainly used here as a prerequisite to showing that the solution formula indeed solves the heat equation, which requires us to differentiate under the integral.

          theorem Heat.cont_HKt {α x t : } ( : 0 < α) (ht : 0 < t) :
          Continuous fun (y : ) => HKt α (x - y) t
          theorem Heat.meas_HKt {α x t : } ( : 0 < α) (ht : 0 < t) :
          theorem Heat.cont_HKx {α x t : } ( : 0 < α) (ht : 0 < t) :
          Continuous fun (y : ) => HKx α (x - y) t
          theorem Heat.meas_HKx {α x t : } ( : 0 < α) (ht : 0 < t) :
          theorem Heat.cont_HKxx {α x t : } ( : 0 < α) (ht : 0 < t) :
          Continuous fun (y : ) => HKxx α (x - y) t
          theorem Heat.meas_HKxx {α x t : } ( : 0 < α) (ht : 0 < t) :
          theorem Heat.cont_heatKernel {α x t : } :
          Continuous fun (y : ) => heatKernel α (x - y) t

          4. Pointwise Bounds and L-infinity Estimates #

          We define bounding constants K, Kx, Kxx and for the heat kernel's derivatives. This implies they belong to $L^\infty$.

          noncomputable def Heat.Kx (α t : ) :
          Equations
          Instances For
            noncomputable def Heat.Kxx (α t : ) :
            Equations
            Instances For
              theorem Heat.heatKernel_bound_pointwise {α x t : } ( : 0 < α) (ht : 0 < t) (y : ) :
              heatKernel α (x - y) t 0 heatKernel α (x - y) t 1 / (4 * Real.pi * α * t)
              theorem Heat.Linfty_heatKernel {α x t : } ( : 0 < α) (ht : 0 < t) :
              theorem Heat.sq_mul_exp_neg_mul_sq_le {b : } (hb : 0 < b) (x : ) :
              x ^ 2 * Real.exp (-(b * x ^ 2)) Real.exp (-1) / b
              theorem Heat.pointwise_bound_HKt {α x t : } (ht : 0 < t) ( : 0 < α) :
              |HKt α x t| 3 / (2 * t) * c α t
              theorem Heat.HKt_Linfinity_bound {α x t : } (ht : 0 < t) ( : 0 < α) :
              theorem Heat.pointwise_bound_HKx {α x t : } (ht : 0 < t) ( : 0 < α) :
              |HKx α x t| Kx α t
              theorem Heat.HKx_Linfinity_bound {α x t : } (ht : 0 < t) ( : 0 < α) :
              theorem Heat.HKxx_uniform_bound {α t : } ( : 0 < α) (ht : 0 < t) (x : ) :
              |HKxx α x t| Kxx α t
              theorem Heat.pointwise_bound_HKxx {α x t : } (ht : 0 < t) ( : 0 < α) :
              |HKxx α x t| Kxx α t
              theorem Heat.HKxx_Linfinity_bound {α x t : } (ht : 0 < t) ( : 0 < α) :
              theorem Heat.mono_Coeff {α t τ : } (ht : 0 < t) ( : 0 < τ) ( : 0 < α) (hsize : τ t) :
              c α t c α τ

              5. Integrability of the Kernels #

              We demonstrate that the heat kernel and its derivatives are integrable when multiplied by an integrable function $g$

              theorem Heat.integrable_heatKernel {α t : } ( : 0 < α) (ht : 0 < t) :
              theorem Heat.integrable_heatKernel_slice {α t : } ( : 0 < α) (ht : 0 < t) (x : ) :
              theorem Heat.integrable_heatKernel_mul_of_Linfty {B α : } (g : ) {x t : } ( : 0 < α) (ht : 0 < t) (hg_meas : MeasureTheory.AEStronglyMeasurable g MeasureTheory.volume) (hBound : ∀ (y : ), |g y| B) :
              theorem Heat.integrable_heatKernel_mul_of_L1 {α : } (g : ) {x t : } ( : 0 < α) (ht : 0 < t) (hg : MeasureTheory.Integrable g MeasureTheory.volume) :
              theorem Heat.aestronglyMeasurable_HKt_mul {α x t : } (g : ) (hg : MeasureTheory.Integrable g MeasureTheory.volume) ( : 0 < α) (ht : 0 < t) :
              theorem Heat.integ_HKt_mul_of_L1 {α : } (g : ) {x t : } ( : 0 < α) (ht : 0 < t) (hg : MeasureTheory.Integrable g MeasureTheory.volume) :
              MeasureTheory.Integrable (fun (y : ) => HKt α (x - y) t * g y) MeasureTheory.volume
              theorem Heat.aestronglyMeasurable_HKx_mul {α x t : } (g : ) (hg : MeasureTheory.Integrable g MeasureTheory.volume) ( : 0 < α) (ht : 0 < t) :
              theorem Heat.integ_HKx_mul_of_L1 {α : } (g : ) {x t : } ( : 0 < α) (ht : 0 < t) (hg : MeasureTheory.Integrable g MeasureTheory.volume) :
              MeasureTheory.Integrable (fun (y : ) => HKx α (x - y) t * g y) MeasureTheory.volume
              theorem Heat.aestronglyMeasurable_HKxx_mul {α x t : } (g : ) (hg : MeasureTheory.Integrable g MeasureTheory.volume) (ht : 0 < t) ( : 0 < α) :
              theorem Heat.integ_HKxx_mul_of_L1 {α : } (g : ) {x t : } ( : 0 < α) (ht : 0 < t) (hg : MeasureTheory.Integrable g MeasureTheory.volume) :

              6. Differentiation under the Integral Sign #

              We establish the validity of swapping the integral and derivative operators. This requires checking the Dominated Convergence Theorem conditions using the bounds established in Section 4.

              theorem Heat.diff_HKt_mul {α x t : } (g : ) (ht : 0 < t) ( : 0 < α) :
              ∀ᵐ (y : ), τMetric.ball t (t / 2), HasDerivAt (fun (τ' : ) => heatKernel α (x - y) τ' * g y) (HKt α (x - y) τ * g y) τ
              theorem Heat.diff_HKx_mul {α x t : } (g : ) (ht : 0 < t) ( : 0 < α) :
              ∀ᵐ (y : ), x'Metric.ball x 1, HasDerivAt (fun (x'' : ) => heatKernel α (x'' - y) t * g y) (HKx α (x' - y) t * g y) x'
              theorem Heat.diff_HKxx_mul {α x t : } (g : ) (ht : 0 < t) ( : 0 < α) :
              ∀ᵐ (y : ), x'Metric.ball x 1, HasDerivAt (fun (x'' : ) => HKx α (x'' - y) t * g y) (HKxx α (x' - y) t * g y) x'
              theorem Heat.swap_t_heatKernel {α x t : } (g : ) (ht : 0 < t) ( : 0 < α) (hg : MeasureTheory.Integrable g MeasureTheory.volume) :
              HasDerivAt (fun (τ : ) => (y : ), heatKernel α (x - y) τ * g y) ( (y : ), HKt α (x - y) t * g y) t

              Swap the time derivative $\partial_t$ with the integral $\int$.

              theorem Heat.swap_x_heatKernel {α x t : } (g : ) (ht : 0 < t) ( : 0 < α) (hg : MeasureTheory.Integrable g MeasureTheory.volume) :
              HasDerivAt (fun (x' : ) => (y : ), heatKernel α (x' - y) t * g y) ( (y : ), HKx α (x - y) t * g y) x

              Swap the spatial derivative $\partial_x$ with the integral $\int$.

              theorem Heat.swap_xx_heatKernel {α x t : } (g : ) (ht : 0 < t) ( : 0 < α) (hg : MeasureTheory.Integrable g MeasureTheory.volume) :
              HasDerivAt (fun (x' : ) => (y : ), HKx α (x' - y) t * g y) ( (y : ), HKxx α (x - y) t * g y) x

              Swap the second spatial derivative $\partial_{xx}$ with the integral $\int$.

              7. Main Result: The Heat Equation #

              Finally, we combine the pointwise heat equation property of the kernel with the differentiation-under-integral results to show that the convolution $u(x,t) = (K * g)(x)$ solves the heat equation $u_t = \alpha u_{xx}$.

              theorem Heat.heat_from_convolution_heatKernel {t α : } (g : ) ( : 0 < α) (ht : 0 < t) (hg : MeasureTheory.Integrable g MeasureTheory.volume) (x : ) :
              deriv (fun (τ : ) => heatConvolutionHK α g x τ) t = α * deriv (fun (x' : ) => deriv (fun (x'' : ) => heatConvolutionHK α g x'' t) x') x