Documentation

CsdLean4.Mathlib.Analysis.Semigroup.FresnelKernel

Feynman's kernel for the free propagator #

Category: 1-Mathlib (CSD-free; staged for upstream).

Analysis/Semigroup/SchrodingerSchwartz.lean builds the free propagator U₀(t) = e^{−itH₀}, H₀ = −½ d²/dx², as a Fourier multiplier: U₀(t) = 𝓕⁻¹ e^{−2π²itξ²} 𝓕. This module (BACKLOG #44, FC-5′) writes the kernel of that operator — the one the path integral is built from — by analytic continuation of the heat kernel in the time variable:

Honest scope #

⚠️ One dimension, Schwartz data. The scoping note's ψ ∈ L¹ ∩ L² is not claimed: Fourier inversion at this pin is the Schwartz theorem, and for ψ ∈ L² \ L¹ the Feynman integral is genuinely improper — it needs oscillatory-integral technology the pin does not have (MATHLIB-ABSENT(fresnelIntegral)). Nothing here evaluates an oscillatory integral as a limit of truncations ∫_{−R}^{R}; the ε ↓ 0 regularisation is the whole method.

⚠️ The n-slice identity is exact for every n, so no limit over paths is taken and none is claimed: there is no measure on path space here, and no statement that S_n converges to the classical action. The imaginary-time counterpart, where the path measure does exist, is the corpus's Feynman–Kac chain.

⚠️ fresnelS is defined by a dite on Re w > 0, following Mathlib's own SchwartzMap.smulLeftCLM: off the half-plane the kernel is not Schwartz, and every lemma carries the hypothesis.

References: M. Reed, B. Simon, Methods of Modern Mathematical Physics II §IX.7; R. P. Feynman, A. R. Hibbs, Quantum Mechanics and Path Integrals (1965) §2-2, §3-1; Analysis/Semigroup/SchrodingerSchwartz.lean (FC-5″), GaussianPacket.lean (FC-5‴); specs/feynman-continuum-scoping.md §5 and §8 D4; specs/BACKLOG.md #44; specs/future-work.md FP-1.

The kernel at complex time #

noncomputable def SchrodingerGroup.fresnelAmp (w : ℂ) :

The amplitude (4πw)^{−1/2} of the heat kernel at complex time w.

Equations
Instances For
    noncomputable def SchrodingerGroup.fresnelKernel (w : ℂ) (x : ℝ) :

    The heat kernel at complex time w: (4πw)^{−1/2} e^{−x²/(4w)}. At w = it/2 this is Feynman's kernel (2πit)^{−1/2} e^{ix²/(2t)} (fresnelKernel_I_mul).

    Equations
    Instances For
      noncomputable def SchrodingerGroup.fresnelSymbol (w : ℂ) (ξ : ℝ) :

      The Fourier multiplier of the complex-time kernel: e^{−4π²wξ²}. At w = it/2 this is the free Schrödinger phase e^{−2π²itξ²} (fresnelSymbol_I_mul).

      Equations
      Instances For
        theorem SchrodingerGroup.four_pi_mul_ne_zero {w : ℂ} (hw : w ≠ 0) :
        4 * ↑Real.pi * w ≠ 0
        theorem SchrodingerGroup.ne_zero_of_re_pos {w : ℂ} (hw : 0 < w.re) :
        w ≠ 0
        theorem SchrodingerGroup.re_fresnelParam_pos {w : ℂ} (hw : 0 < w.re) :
        0 < (4 * ↑Real.pi * w)⁻¹.re

        The Gaussian parameter of the kernel, a = (4πw)⁻¹, has positive real part.

        The modulus of the multiplier: |e^{−4π²wξ²}| = e^{−4π²(Re w)ξ²}, which is ≤ 1 for Re w ≥ 0 — the bound that drives every dominated convergence below.

        theorem SchrodingerGroup.norm_exp_fresnel_le_one {w : ℂ} (hw : 0 ≤ w.re) (hw0 : w ≠ 0) (x : ℝ) :
        ‖Complex.exp (-↑x ^ 2 / (4 * w))‖ ≤ 1

        The modulus of the Gaussian factor of the kernel is ≤ 1 when Re w ≥ 0: the exponent's real part is −x²(Re w)/(4|w|²).

        The kernel at complex time w, Re w > 0, as a Schwartz function: the Gaussian e^{−πax²} of parameter a = (4πw)⁻¹, scaled by (4πw)^{−1/2}. The dite follows Mathlib's own SchwartzMap.smulLeftCLM: outside the half-plane the Gaussian is not Schwartz, and every lemma below carries 0 < w.re.

        Equations
        Instances For
          theorem SchrodingerGroup.coe_fresnelS {w : ℂ} (hw : 0 < w.re) :

          The Schwartz function is the kernel.

          ★ The Fourier transform of the complex-time kernel is the multiplier e^{−4π²wξ²}: the amplitude (4πw)^{−1/2} is exactly what cancels the a^{−1/2} of the Gaussian transform.

          The operator #

          Convolution with the complex-time kernel, on Schwartz functions: e^{−wH₀} for H₀ = −½ d²/dx², read through Re w > 0 (heat) and continued to w = it/2 (Schrödinger).

          Equations
          Instances For
            theorem SchrodingerGroup.fresnelOp_apply {w : ℂ} (hw : 0 < w.re) (ψ : SchwartzMap ℝ ℂ) (x : ℝ) :
            ((fresnelOp w) ψ) x = ∫ (y : ℝ), fresnelKernel w (x - y) * ψ y

            ★ The kernel form of the operator: (fresnelOp w ψ) x = ∫ K_w(x − y) ψ(y) dy, an absolutely convergent integral (Mathlib's Schwartz convolution).

            ★ The multiplier form: the Fourier transform of the operator is multiplication by e^{−4π²wξ²}.

            Fourier inversion, pointwise: a Schwartz function is the inverse transform of its transform.

            theorem SchrodingerGroup.fresnelSymbol_add (w₁ w₂ : ℂ) (ξ : ℝ) :
            fresnelSymbol (w₁ + w₂) ξ = fresnelSymbol w₁ ξ * fresnelSymbol w₂ ξ

            The multiplier is a one-parameter semigroup in the complex time.

            theorem SchrodingerGroup.fresnelOp_fresnelOp {w₁ w₂ : ℂ} (h₁ : 0 < w₁.re) (h₂ : 0 < w₂.re) (ψ : SchwartzMap ℝ ℂ) :
            (fresnelOp w₁) ((fresnelOp w₂) ψ) = (fresnelOp (w₁ + w₂)) ψ

            ★★ The complex-time semigroup: two slices compose into one, fresnelOp w₁ ∘ fresnelOp w₂ = fresnelOp (w₁ + w₂). On the Fourier side it is e^{−4π²w₁ξ²} e^{−4π²w₂ξ²} = e^{−4π²(w₁+w₂)ξ²}; on the kernel side it is the Gaussian convolution identity, continued in the time.

            theorem SchrodingerGroup.re_natCast_add_one_mul (n : ℕ) (w : ℂ) :
            ((↑n + 1) * w).re = (↑n + 1) * w.re
            theorem SchrodingerGroup.fresnelOp_iterate {w : ℂ} (hw : 0 < w.re) (n : ℕ) (ψ : SchwartzMap ℝ ℂ) :
            (⇑(fresnelOp w))^[n + 1] ψ = (fresnelOp ((↑n + 1) * w)) ψ

            ★ n equal slices compose: iterating the complex-time operator n+1 times is the operator at (n+1)w.

            theorem SchrodingerGroup.re_div_natCast_add_one (w : ℂ) (n : ℕ) :
            (w / (↑n + 1)).re = w.re / (↑n + 1)
            theorem SchrodingerGroup.fresnelOp_iterate_div {w : ℂ} (hw : 0 < w.re) (n : ℕ) (ψ : SchwartzMap ℝ ℂ) :
            (⇑(fresnelOp (w / (↑n + 1))))^[n + 1] ψ = (fresnelOp w) ψ

            ★★ Every time-slicing is exact: n+1 slices of complex time w/(n+1) compose to the single slice w.

            theorem SchrodingerGroup.fresnelOp_iterate_succ_apply {w : ℂ} (hw : 0 < w.re) (n : ℕ) (ψ : SchwartzMap ℝ ℂ) (x : ℝ) :
            ((⇑(fresnelOp w))^[n + 1] ψ) x = ∫ (y : ℝ), fresnelKernel w (x - y) * ((⇑(fresnelOp w))^[n] ψ) y

            ★ The time-slicing recursion: each slice is one kernel integral, so the n+1-slice operator is an n+1-fold iterated kernel integral.

            The free propagator is the ε ↓ 0 limit #

            theorem SchrodingerGroup.re_ofReal_add_I_mul (ε t : ℝ) :
            (↑ε + Complex.I * ↑t / 2).re = ε

            The real part of the regularised time ε + it/2 is the regulariser (simp knows this; the name is here because the positivity hypothesis is rewritten with it everywhere below).

            theorem SchrodingerGroup.ofReal_add_I_mul_ne_zero {ε : ℝ} (hε : 0 < ε) (t : ℝ) :
            ↑ε + Complex.I * ↑t / 2 ≠ 0

            At purely imaginary time the multiplier is the free Schrödinger phase e^{−2π²itξ²}.

            The Fourier transform of the free propagator applied to a Schwartz function.

            theorem SchrodingerGroup.tendsto_ofReal_add_I_mul (t : ℝ) :
            Filter.Tendsto (fun (ε : ℝ) => ↑ε + Complex.I * ↑t / 2) (nhdsWithin 0 (Set.Ioi 0)) (nhds (Complex.I * ↑t / 2))
            theorem SchrodingerGroup.tendsto_fresnelOp (t : ℝ) (ψ : SchwartzMap ℝ ℂ) (x : ℝ) :
            Filter.Tendsto (fun (ε : ℝ) => ((fresnelOp (↑ε + Complex.I * ↑t / 2)) ψ) x) (nhdsWithin 0 (Set.Ioi 0)) (nhds (((freeSchrodingerS t) ψ) x))

            ★★★ The Gaussian-regularised Fresnel integral is the free propagator: for Schwartz data, (U₀(t)ψ)(x) = lim_{ε ↓ 0} (e^{−(ε + it/2)H₀} ψ)(x), every term on the left an absolutely convergent kernel integral. The proof is dominated convergence on the Fourier side: the multiplier e^{−4π²(ε + it/2)ξ²} has modulus ≤ 1 and tends pointwise to the free phase, and 𝓕ψ is integrable.

            theorem SchrodingerGroup.tendsto_integral_fresnelKernel_freeSchrodingerS (t : ℝ) (ψ : SchwartzMap ℝ ℂ) (x : ℝ) :
            Filter.Tendsto (fun (ε : ℝ) => ∫ (y : ℝ), fresnelKernel (↑ε + Complex.I * ↑t / 2) (x - y) * ψ y) (nhdsWithin 0 (Set.Ioi 0)) (nhds (((freeSchrodingerS t) ψ) x))

            ★★★ The same limit as the kernel integral the physics writes: (U₀(t)ψ)(x) = lim_{ε ↓ 0} ∫ (4π(ε + it/2))^{−1/2} e^{−(x−y)²/(4(ε + it/2))} ψ(y) dy.

            theorem SchrodingerGroup.tendsto_fresnelOp_iterate (t : ℝ) (n : ℕ) (ψ : SchwartzMap ℝ ℂ) (x : ℝ) :
            Filter.Tendsto (fun (ε : ℝ) => ((⇑(fresnelOp ((↑ε + Complex.I * ↑t / 2) / (↑n + 1))))^[n + 1] ψ) x) (nhdsWithin 0 (Set.Ioi 0)) (nhds (((freeSchrodingerS t) ψ) x))

            ★★ Feynman's time-slicing, regularised: for every number of slices the n+1-fold iterated kernel integral has the same ε ↓ 0 limit, the propagator.

            Feynman's kernel #

            theorem SchrodingerGroup.fresnelKernel_I_mul {t : ℝ} (ht : t ≠ 0) (x : ℝ) :
            fresnelKernel (Complex.I * ↑t / 2) x = (2 * ↑Real.pi * Complex.I * ↑t) ^ (-1 / 2) * Complex.exp (Complex.I * ↑x ^ 2 / (2 * ↑t))

            ★ Feynman's kernel: at purely imaginary time w = it/2 the complex-time kernel is (2πit)^{−1/2} e^{ix²/(2t)}, the kernel of the path integral.

            The Feynman kernel has constant modulus: it does not decay, which is why the Fresnel integral is improper for general L² data — and why it is nevertheless absolutely convergent against the L¹ Schwartz functions used here.

            ★ The Feynman integral converges absolutely for Schwartz data: the kernel is bounded and ψ is integrable.

            theorem SchrodingerGroup.tendsto_integral_fresnelKernel {t : ℝ} (ht : t ≠ 0) (ψ : SchwartzMap ℝ ℂ) (x : ℝ) :
            Filter.Tendsto (fun (ε : ℝ) => ∫ (y : ℝ), fresnelKernel (↑ε + Complex.I * ↑t / 2) (x - y) * ψ y) (nhdsWithin 0 (Set.Ioi 0)) (nhds (∫ (y : ℝ), fresnelKernel (Complex.I * ↑t / 2) (x - y) * ψ y))

            The ε ↓ 0 limit of the regularised kernel integrals is the Feynman integral: the amplitude converges by continuity of the principal square root off the cut, and the Gaussian factor by dominated convergence (its modulus is ≤ 1 for Re w ≥ 0).

            theorem SchrodingerGroup.freeSchrodingerS_eq_integral_fresnel {t : ℝ} (ht : t ≠ 0) (ψ : SchwartzMap ℝ ℂ) (x : ℝ) :
            ((freeSchrodingerS t) ψ) x = (2 * ↑Real.pi * Complex.I * ↑t) ^ (-1 / 2) * ∫ (y : ℝ), Complex.exp (Complex.I * ↑(x - y) ^ 2 / (2 * ↑t)) * ψ y

            ★★★ Feynman's kernel formula, exactly: for Schwartz data and t ≠ 0, (U₀(t)ψ)(x) = (2πit)^{−1/2} ∫ e^{i(x−y)²/(2t)} ψ(y) dy, an absolutely convergent integral — no regularisation is left in the statement. The Gaussian regularisation proves it: the regularised integrals converge to the propagator (tendsto_fresnelOp) and to this integral (tendsto_integral_fresnelKernel), and limits in ℂ are unique.

            theorem SchrodingerGroup.freeSchrodingerS_add (t₁ t₂ : ℝ) (ψ : SchwartzMap ℝ ℂ) :
            (freeSchrodingerS t₁) ((freeSchrodingerS t₂) ψ) = (freeSchrodingerS (t₁ + t₂)) ψ

            The free propagator is a one-parameter group on Schwartz functions.

            theorem SchrodingerGroup.freeSchrodingerS_iterate (t : ℝ) (n : ℕ) (ψ : SchwartzMap ℝ ℂ) :
            (⇑(freeSchrodingerS (t / (↑n + 1))))^[n + 1] ψ = (freeSchrodingerS t) ψ

            ★★ The propagator is its own n-slice product: U₀(t) = (U₀(t/(n+1)))^{n+1}, so the n-slice iterated Feynman integral is exact for every n, not only in a limit.

            The discrete action #

            noncomputable def SchrodingerGroup.discreteAction (t : ℝ) (n : ℕ) (q : ℕ → ℝ) :

            The discrete action of a path q : ℕ → ℝ sampled at n steps of duration t/n: S_n = ∑_{k<n} (q_{k+1} − q_k)²/(2Δt), the Riemann sum of ∫ ½ q̇² ds for the free Lagrangian.

            Equations
            Instances For
              theorem SchrodingerGroup.prod_fresnelKernel_eq_exp_discreteAction {t : ℝ} (ht : t ≠ 0) (n : ℕ) (hn : n ≠ 0) (q : ℕ → ℝ) :
              ∏ k ∈ Finset.range n, fresnelKernel (Complex.I * (↑t / ↑n) / 2) (q (k + 1) - q k) = fresnelAmp (Complex.I * (↑t / ↑n) / 2) ^ n * Complex.exp (Complex.I * ↑(discreteAction t n q))

              ★★★ e^{iS_n} is the integrand: the product of the n Feynman kernels that make up the n-slice iterated integral is ((2πit/n)^{−1/2})^n e^{iS_n}, with S_n the discrete action of the sampled path. The phase of the path integral is a theorem, not a notation.