Imports
/-
Copyright (c) 2025 Joseph Tooby-Smith. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Joseph Tooby-Smith
-/
module
public import Physlib.QuantumMechanics.HarmonicOscillator.OneDimension.Basic
public import Physlib.Mathematics.SpecialFunctions.PhysHermiteEigenfunction of the Harmonic Oscillator
@[expose] public sectionlemma eigenfunction_eq (n : ℕ) :
Q.eigenfunction n = fun (x : ℝ) => (1/√(2 ^ n * n !) * (1/ √(√Real.pi * Q.ξ))) *
Complex.ofReal (physHermite n (x / Q.ξ) * Real.exp (- x^2 / (2 * Q.ξ^2))) := Q:HarmonicOscillatorn:ℕ⊢ Q.eigenfunction n = fun x =>
1 / ↑√(2 ^ n * ↑n !) * (1 / ↑√(√Real.pi * Q.ξ)) *
↑((fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) * Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2)))
Q:HarmonicOscillatorn:ℕx:ℝ⊢ Q.eigenfunction n x =
1 / ↑√(2 ^ n * ↑n !) * (1 / ↑√(√Real.pi * Q.ξ)) *
↑((fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) * Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2)))
Q:HarmonicOscillatorn:ℕx:ℝ⊢ (↑√↑n !)⁻¹ * (↑√(2 ^ n))⁻¹ * (↑√(√Real.pi * Q.ξ))⁻¹ * ↑((Polynomial.aeval (x / Q.ξ)) (physHermite n)) *
Complex.exp (-↑x ^ 2 / (2 * ↑Q.ξ ^ 2)) =
(↑√↑n !)⁻¹ * (↑√(2 ^ n))⁻¹ * (↑√(√Real.pi * Q.ξ))⁻¹ *
(↑((Polynomial.aeval (x / Q.ξ)) (physHermite n)) * Complex.exp (-↑x ^ 2 / (2 * ↑Q.ξ ^ 2)))
All goals completed! 🐙lemma eigenfunction_zero : Q.eigenfunction 0 = fun (x : ℝ) =>
(1/ √(√Real.pi * Q.ξ)) * Complex.exp (- x^2 / (2 * Q.ξ^2)) := Q:HarmonicOscillator⊢ Q.eigenfunction 0 = fun x => 1 / ↑√(√Real.pi * Q.ξ) * Complex.exp (-↑x ^ 2 / (2 * ↑Q.ξ ^ 2))
Q:HarmonicOscillatorx:ℝ⊢ Q.eigenfunction 0 x = 1 / ↑√(√Real.pi * Q.ξ) * Complex.exp (-↑x ^ 2 / (2 * ↑Q.ξ ^ 2))
All goals completed! 🐙lemma eigenfunction_eq_mul_eigenfunction_zero (n : ℕ) :
Q.eigenfunction n = fun x => Complex.ofReal (1/√(2 ^ n * n !))
* Complex.ofReal (physHermite n (x / Q.ξ)) * Q.eigenfunction 0 x := Q:HarmonicOscillatorn:ℕ⊢ Q.eigenfunction n = fun x =>
↑(1 / √(2 ^ n * ↑n !)) * ↑((fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ)) * Q.eigenfunction 0 x
match n with
Q:HarmonicOscillatorn:ℕ⊢ Q.eigenfunction 0 = fun x =>
↑(1 / √(2 ^ 0 * ↑0!)) * ↑((fun x => (Polynomial.aeval x) (physHermite 0)) (x / Q.ξ)) * Q.eigenfunction 0 x
All goals completed! 🐙
Q:HarmonicOscillatorn✝:ℕn:ℕ⊢ Q.eigenfunction (n + 1) = fun x =>
↑(1 / √(2 ^ (n + 1) * ↑(n + 1)!)) * ↑((fun x => (Polynomial.aeval x) (physHermite (n + 1))) (x / Q.ξ)) *
Q.eigenfunction 0 x
Q:HarmonicOscillatorn✝:ℕn:ℕx:ℝ⊢ Q.eigenfunction (n + 1) x =
↑(1 / √(2 ^ (n + 1) * ↑(n + 1)!)) * ↑((fun x => (Polynomial.aeval x) (physHermite (n + 1))) (x / Q.ξ)) *
Q.eigenfunction 0 x
Q:HarmonicOscillatorn✝:ℕn:ℕx:ℝ⊢ (↑√(2 ^ (n + 1) * ↑(n + 1)!))⁻¹ * (↑√(√Real.pi * Q.ξ))⁻¹ * ↑((Polynomial.aeval (x / Q.ξ)) (physHermite (n + 1))) *
↑(Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2))) =
(↑√(2 ^ (n + 1) * ↑(n + 1)!))⁻¹ * ↑((Polynomial.aeval (x / Q.ξ)) (physHermite (n + 1))) *
((↑√(√Real.pi * Q.ξ))⁻¹ * ↑(Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2))))
All goals completed! 🐙Basic properties of the eigenfunctions
The eigenfunctions are integrable.
Q:HarmonicOscillatorn:ℕh1:(fun x => (fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) * Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2))) = fun x =>
(fun x => (Polynomial.aeval x) (physHermite n)) (1 / Q.ξ * x) * Real.exp (-(1 / (2 * Q.ξ ^ 2)) * x ^ 2)⊢ Integrable
(fun x => (fun x => (Polynomial.aeval x) (physHermite n)) (1 / Q.ξ * x) * Real.exp (-(1 / (2 * Q.ξ ^ 2)) * x ^ 2))
volume
apply guassian_integrable_polynomial_cons Q:HarmonicOscillatorn:ℕh1:(fun x => (fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) * Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2))) = fun x =>
(fun x => (Polynomial.aeval x) (physHermite n)) (1 / Q.ξ * x) * Real.exp (-(1 / (2 * Q.ξ ^ 2)) * x ^ 2)⊢ 0 < 1 / (2 * Q.ξ ^ 2)
simp All goals completed! 🐙The eigenfunctions are real.
@[simp]
lemma eigenfunction_conj (n : ℕ) (x : ℝ) :
(starRingEnd ℂ) (Q.eigenfunction n x) = Q.eigenfunction n x := by Q:HarmonicOscillatorn:ℕx:ℝ⊢ (starRingEnd ℂ) (Q.eigenfunction n x) = Q.eigenfunction n x
rw [eigenfunction_eq Q:HarmonicOscillatorn:ℕx:ℝ⊢ (starRingEnd ℂ)
((fun x =>
1 / ↑√(2 ^ n * ↑n !) * (1 / ↑√(√Real.pi * Q.ξ)) *
↑((fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) * Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2))))
x) =
(fun x =>
1 / ↑√(2 ^ n * ↑n !) * (1 / ↑√(√Real.pi * Q.ξ)) *
↑((fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) * Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2))))
x Q:HarmonicOscillatorn:ℕx:ℝ⊢ (starRingEnd ℂ)
((fun x =>
1 / ↑√(2 ^ n * ↑n !) * (1 / ↑√(√Real.pi * Q.ξ)) *
↑((fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) * Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2))))
x) =
(fun x =>
1 / ↑√(2 ^ n * ↑n !) * (1 / ↑√(√Real.pi * Q.ξ)) *
↑((fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) * Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2))))
x] Q:HarmonicOscillatorn:ℕx:ℝ⊢ (starRingEnd ℂ)
((fun x =>
1 / ↑√(2 ^ n * ↑n !) * (1 / ↑√(√Real.pi * Q.ξ)) *
↑((fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) * Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2))))
x) =
(fun x =>
1 / ↑√(2 ^ n * ↑n !) * (1 / ↑√(√Real.pi * Q.ξ)) *
↑((fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) * Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2))))
x
simp [-Complex.ofReal_exp] All goals completed! 🐙
lemma eigenfunction_point_norm (n : ℕ) (x : ℝ) :
‖Q.eigenfunction n x‖ = (1/√(2 ^ n * n !) * (1/ √(√Real.pi * Q.ξ))) *
(|physHermite n (x / Q.ξ)| * Real.exp (- x ^ 2 / (2 * Q.ξ ^ 2))) := by Q:HarmonicOscillatorn:ℕx:ℝ⊢ ‖Q.eigenfunction n x‖ =
1 / √(2 ^ n * ↑n !) * (1 / √(√Real.pi * Q.ξ)) *
(|(fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ)| * Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2)))
rw [eigenfunction_eq Q:HarmonicOscillatorn:ℕx:ℝ⊢ ‖(fun x =>
1 / ↑√(2 ^ n * ↑n !) * (1 / ↑√(√Real.pi * Q.ξ)) *
↑((fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) * Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2))))
x‖ =
1 / √(2 ^ n * ↑n !) * (1 / √(√Real.pi * Q.ξ)) *
(|(fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ)| * Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2))) Q:HarmonicOscillatorn:ℕx:ℝ⊢ ‖(fun x =>
1 / ↑√(2 ^ n * ↑n !) * (1 / ↑√(√Real.pi * Q.ξ)) *
↑((fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) * Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2))))
x‖ =
1 / √(2 ^ n * ↑n !) * (1 / √(√Real.pi * Q.ξ)) *
(|(fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ)| * Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2)))] Q:HarmonicOscillatorn:ℕx:ℝ⊢ ‖(fun x =>
1 / ↑√(2 ^ n * ↑n !) * (1 / ↑√(√Real.pi * Q.ξ)) *
↑((fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) * Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2))))
x‖ =
1 / √(2 ^ n * ↑n !) * (1 / √(√Real.pi * Q.ξ)) *
(|(fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ)| * Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2)))
simp only [Complex.ofReal_mul] Q:HarmonicOscillatorn:ℕx:ℝ⊢ ‖1 / ↑√(2 ^ n * ↑n !) * (1 / ↑√(√Real.pi * Q.ξ)) *
(↑((Polynomial.aeval (x / Q.ξ)) (physHermite n)) * ↑(Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2))))‖ =
1 / √(2 ^ n * ↑n !) * (1 / √(√Real.pi * Q.ξ)) *
(|(Polynomial.aeval (x / Q.ξ)) (physHermite n)| * Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2)))
rw [norm_mul, Q:HarmonicOscillatorn:ℕx:ℝ⊢ ‖1 / ↑√(2 ^ n * ↑n !) * (1 / ↑√(√Real.pi * Q.ξ))‖ *
‖↑((Polynomial.aeval (x / Q.ξ)) (physHermite n)) * ↑(Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2)))‖ =
1 / √(2 ^ n * ↑n !) * (1 / √(√Real.pi * Q.ξ)) *
(|(Polynomial.aeval (x / Q.ξ)) (physHermite n)| * Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2))) Q:HarmonicOscillatorn:ℕx:ℝ⊢ ‖1 / ↑√(2 ^ n * ↑n !)‖ * ‖1 / ↑√(√Real.pi * Q.ξ)‖ *
‖↑((Polynomial.aeval (x / Q.ξ)) (physHermite n)) * ↑(Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2)))‖ =
1 / √(2 ^ n * ↑n !) * (1 / √(√Real.pi * Q.ξ)) *
(|(Polynomial.aeval (x / Q.ξ)) (physHermite n)| * Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2))) norm_mul Q:HarmonicOscillatorn:ℕx:ℝ⊢ ‖1 / ↑√(2 ^ n * ↑n !)‖ * ‖1 / ↑√(√Real.pi * Q.ξ)‖ *
‖↑((Polynomial.aeval (x / Q.ξ)) (physHermite n)) * ↑(Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2)))‖ =
1 / √(2 ^ n * ↑n !) * (1 / √(√Real.pi * Q.ξ)) *
(|(Polynomial.aeval (x / Q.ξ)) (physHermite n)| * Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2))) Q:HarmonicOscillatorn:ℕx:ℝ⊢ ‖1 / ↑√(2 ^ n * ↑n !)‖ * ‖1 / ↑√(√Real.pi * Q.ξ)‖ *
‖↑((Polynomial.aeval (x / Q.ξ)) (physHermite n)) * ↑(Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2)))‖ =
1 / √(2 ^ n * ↑n !) * (1 / √(√Real.pi * Q.ξ)) *
(|(Polynomial.aeval (x / Q.ξ)) (physHermite n)| * Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2)))] Q:HarmonicOscillatorn:ℕx:ℝ⊢ ‖1 / ↑√(2 ^ n * ↑n !)‖ * ‖1 / ↑√(√Real.pi * Q.ξ)‖ *
‖↑((Polynomial.aeval (x / Q.ξ)) (physHermite n)) * ↑(Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2)))‖ =
1 / √(2 ^ n * ↑n !) * (1 / √(√Real.pi * Q.ξ)) *
(|(Polynomial.aeval (x / Q.ξ)) (physHermite n)| * Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2)))
congr e_a.e_a Q:HarmonicOscillatorn:ℕx:ℝ⊢ ‖1 / ↑√(2 ^ n * ↑n !)‖ = 1 / √(2 ^ n * ↑n !)e_a.e_a Q:HarmonicOscillatorn:ℕx:ℝ⊢ ‖1 / ↑√(√Real.pi * Q.ξ)‖ = 1 / √(√Real.pi * Q.ξ)e_a Q:HarmonicOscillatorn:ℕx:ℝ⊢ ‖↑((Polynomial.aeval (x / Q.ξ)) (physHermite n)) * ↑(Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2)))‖ =
|(Polynomial.aeval (x / Q.ξ)) (physHermite n)| * Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2))
· e_a.e_a Q:HarmonicOscillatorn:ℕx:ℝ⊢ ‖1 / ↑√(2 ^ n * ↑n !)‖ = 1 / √(2 ^ n * ↑n !) simp [Real.sqrt_nonneg, abs_of_nonneg] All goals completed! 🐙
· e_a.e_a Q:HarmonicOscillatorn:ℕx:ℝ⊢ ‖1 / ↑√(√Real.pi * Q.ξ)‖ = 1 / √(√Real.pi * Q.ξ) simp [Real.sqrt_nonneg, abs_of_nonneg] All goals completed! 🐙
· e_a Q:HarmonicOscillatorn:ℕx:ℝ⊢ ‖↑((Polynomial.aeval (x / Q.ξ)) (physHermite n)) * ↑(Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2)))‖ =
|(Polynomial.aeval (x / Q.ξ)) (physHermite n)| * Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2)) rw [norm_mul e_a Q:HarmonicOscillatorn:ℕx:ℝ⊢ ‖↑((Polynomial.aeval (x / Q.ξ)) (physHermite n))‖ * ‖↑(Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2)))‖ =
|(Polynomial.aeval (x / Q.ξ)) (physHermite n)| * Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2)) e_a Q:HarmonicOscillatorn:ℕx:ℝ⊢ ‖↑((Polynomial.aeval (x / Q.ξ)) (physHermite n))‖ * ‖↑(Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2)))‖ =
|(Polynomial.aeval (x / Q.ξ)) (physHermite n)| * Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2))]e_a Q:HarmonicOscillatorn:ℕx:ℝ⊢ ‖↑((Polynomial.aeval (x / Q.ξ)) (physHermite n))‖ * ‖↑(Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2)))‖ =
|(Polynomial.aeval (x / Q.ξ)) (physHermite n)| * Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2))
congr 1 e_a.e_a Q:HarmonicOscillatorn:ℕx:ℝ⊢ ‖↑((Polynomial.aeval (x / Q.ξ)) (physHermite n))‖ = |(Polynomial.aeval (x / Q.ξ)) (physHermite n)|e_a.e_a Q:HarmonicOscillatorn:ℕx:ℝ⊢ ‖↑(Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2)))‖ = Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2))
· e_a.e_a Q:HarmonicOscillatorn:ℕx:ℝ⊢ ‖↑((Polynomial.aeval (x / Q.ξ)) (physHermite n))‖ = |(Polynomial.aeval (x / Q.ξ)) (physHermite n)| simp All goals completed! 🐙
· e_a.e_a Q:HarmonicOscillatorn:ℕx:ℝ⊢ ‖↑(Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2)))‖ = Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2)) rw [Complex.norm_real e_a.e_a Q:HarmonicOscillatorn:ℕx:ℝ⊢ ‖Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2))‖ = Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2)) e_a.e_a Q:HarmonicOscillatorn:ℕx:ℝ⊢ ‖Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2))‖ = Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2))]e_a.e_a Q:HarmonicOscillatorn:ℕx:ℝ⊢ ‖Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2))‖ = Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2))
simp All goals completed! 🐙
lemma eigenfunction_point_norm_sq (n : ℕ) (x : ℝ) :
‖Q.eigenfunction n x‖ ^ 2 = (1/√(2 ^ n * n !) * (1/ √(√Real.pi * Q.ξ))) ^ 2 *
((physHermite n (x / Q.ξ)) ^ 2 * Real.exp (- x^2 / Q.ξ ^ 2)) := by Q:HarmonicOscillatorn:ℕx:ℝ⊢ ‖Q.eigenfunction n x‖ ^ 2 =
(1 / √(2 ^ n * ↑n !) * (1 / √(√Real.pi * Q.ξ))) ^ 2 *
((fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) ^ 2 * Real.exp (-x ^ 2 / Q.ξ ^ 2))
trans (1/√(2 ^ n * n !) * (1/ √(√Real.pi * Q.ξ))) ^ 2 *
(|physHermite n (x/Q.ξ)| ^ 2 * Real.exp (- x^2 / (2 * Q.ξ ^2)) ^ (2 : ℝ)) Q:HarmonicOscillatorn:ℕx:ℝ⊢ ‖Q.eigenfunction n x‖ ^ 2 =
(1 / √(2 ^ n * ↑n !) * (1 / √(√Real.pi * Q.ξ))) ^ 2 *
(|(fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ)| ^ 2 * Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2)) ^ 2)Q:HarmonicOscillatorn:ℕx:ℝ⊢ (1 / √(2 ^ n * ↑n !) * (1 / √(√Real.pi * Q.ξ))) ^ 2 *
(|(fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ)| ^ 2 * Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2)) ^ 2) =
(1 / √(2 ^ n * ↑n !) * (1 / √(√Real.pi * Q.ξ))) ^ 2 *
((fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) ^ 2 * Real.exp (-x ^ 2 / Q.ξ ^ 2))
· Q:HarmonicOscillatorn:ℕx:ℝ⊢ ‖Q.eigenfunction n x‖ ^ 2 =
(1 / √(2 ^ n * ↑n !) * (1 / √(√Real.pi * Q.ξ))) ^ 2 *
(|(fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ)| ^ 2 * Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2)) ^ 2) simp only [Real.rpow_two] Q:HarmonicOscillatorn:ℕx:ℝ⊢ ‖Q.eigenfunction n x‖ ^ 2 =
(1 / √(2 ^ n * ↑n !) * (1 / √(√Real.pi * Q.ξ))) ^ 2 *
(|(Polynomial.aeval (x / Q.ξ)) (physHermite n)| ^ 2 * Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2)) ^ 2)
rw [eigenfunction_point_norm Q:HarmonicOscillatorn:ℕx:ℝ⊢ (1 / √(2 ^ n * ↑n !) * (1 / √(√Real.pi * Q.ξ)) *
(|(fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ)| * Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2)))) ^
2 =
(1 / √(2 ^ n * ↑n !) * (1 / √(√Real.pi * Q.ξ))) ^ 2 *
(|(Polynomial.aeval (x / Q.ξ)) (physHermite n)| ^ 2 * Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2)) ^ 2) Q:HarmonicOscillatorn:ℕx:ℝ⊢ (1 / √(2 ^ n * ↑n !) * (1 / √(√Real.pi * Q.ξ)) *
(|(fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ)| * Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2)))) ^
2 =
(1 / √(2 ^ n * ↑n !) * (1 / √(√Real.pi * Q.ξ))) ^ 2 *
(|(Polynomial.aeval (x / Q.ξ)) (physHermite n)| ^ 2 * Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2)) ^ 2)] Q:HarmonicOscillatorn:ℕx:ℝ⊢ (1 / √(2 ^ n * ↑n !) * (1 / √(√Real.pi * Q.ξ)) *
(|(fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ)| * Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2)))) ^
2 =
(1 / √(2 ^ n * ↑n !) * (1 / √(√Real.pi * Q.ξ))) ^ 2 *
(|(Polynomial.aeval (x / Q.ξ)) (physHermite n)| ^ 2 * Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2)) ^ 2)
ring All goals completed! 🐙
· Q:HarmonicOscillatorn:ℕx:ℝ⊢ (1 / √(2 ^ n * ↑n !) * (1 / √(√Real.pi * Q.ξ))) ^ 2 *
(|(fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ)| ^ 2 * Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2)) ^ 2) =
(1 / √(2 ^ n * ↑n !) * (1 / √(√Real.pi * Q.ξ))) ^ 2 *
((fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) ^ 2 * Real.exp (-x ^ 2 / Q.ξ ^ 2)) congr 2 e_a.e_a Q:HarmonicOscillatorn:ℕx:ℝ⊢ |(fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ)| ^ 2 =
(fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) ^ 2e_a.e_a Q:HarmonicOscillatorn:ℕx:ℝ⊢ Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2)) ^ 2 = Real.exp (-x ^ 2 / Q.ξ ^ 2)
· e_a.e_a Q:HarmonicOscillatorn:ℕx:ℝ⊢ |(fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ)| ^ 2 =
(fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) ^ 2 exact sq_abs (physHermite n _) All goals completed! 🐙
· e_a.e_a Q:HarmonicOscillatorn:ℕx:ℝ⊢ Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2)) ^ 2 = Real.exp (-x ^ 2 / Q.ξ ^ 2) rw [← Real.exp_mul e_a.e_a Q:HarmonicOscillatorn:ℕx:ℝ⊢ Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2) * 2) = Real.exp (-x ^ 2 / Q.ξ ^ 2) e_a.e_a Q:HarmonicOscillatorn:ℕx:ℝ⊢ Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2) * 2) = Real.exp (-x ^ 2 / Q.ξ ^ 2)]e_a.e_a Q:HarmonicOscillatorn:ℕx:ℝ⊢ Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2) * 2) = Real.exp (-x ^ 2 / Q.ξ ^ 2)
congr 1 e_a.e_a Q:HarmonicOscillatorn:ℕx:ℝ⊢ -x ^ 2 / (2 * Q.ξ ^ 2) * 2 = -x ^ 2 / Q.ξ ^ 2
ring All goals completed! 🐙The eigenfunctions are square integrable.
@[fun_prop]
lemma eigenfunction_square_integrable (n : ℕ) :
MeasureTheory.Integrable (fun x => ‖Q.eigenfunction n x‖ ^ 2) := by Q:HarmonicOscillatorn:ℕ⊢ Integrable (fun x => ‖Q.eigenfunction n x‖ ^ 2) volume
have h0 (x : ℝ) : Real.exp (- x ^ 2 / Q.ξ^2) =
Real.exp (- (1 /Q.ξ^2) * x ^ 2) := by
simp only [neg_mul, Real.exp_eq_exp] Q:HarmonicOscillatorn:ℕx:ℝ⊢ -x ^ 2 / Q.ξ ^ 2 = -(1 / Q.ξ ^ 2 * x ^ 2) Q:HarmonicOscillatorn:ℕh0:∀ (x : ℝ), Real.exp (-x ^ 2 / Q.ξ ^ 2) = Real.exp (-(1 / Q.ξ ^ 2) * x ^ 2)⊢ Integrable (fun x => ‖Q.eigenfunction n x‖ ^ 2) volume
ring Q:HarmonicOscillatorn:ℕh0:∀ (x : ℝ), Real.exp (-x ^ 2 / Q.ξ ^ 2) = Real.exp (-(1 / Q.ξ ^ 2) * x ^ 2)⊢ Integrable (fun x => ‖Q.eigenfunction n x‖ ^ 2) volume Q:HarmonicOscillatorn:ℕh0:∀ (x : ℝ), Real.exp (-x ^ 2 / Q.ξ ^ 2) = Real.exp (-(1 / Q.ξ ^ 2) * x ^ 2)⊢ Integrable (fun x => ‖Q.eigenfunction n x‖ ^ 2) volume
conv => Q:HarmonicOscillatorn:ℕh0:∀ (x : ℝ), Real.exp (-x ^ 2 / Q.ξ ^ 2) = Real.exp (-(1 / Q.ξ ^ 2) * x ^ 2)| Integrable (fun x => ‖Q.eigenfunction n x‖ ^ 2) volume
enter [1, x] Q:HarmonicOscillatorn:ℕh0:∀ (x : ℝ), Real.exp (-x ^ 2 / Q.ξ ^ 2) = Real.exp (-(1 / Q.ξ ^ 2) * x ^ 2)x:ℝ| ‖Q.eigenfunction n x‖ ^ 2
rw [eigenfunction_point_norm_sq] Q:HarmonicOscillatorn:ℕh0:∀ (x : ℝ), Real.exp (-x ^ 2 / Q.ξ ^ 2) = Real.exp (-(1 / Q.ξ ^ 2) * x ^ 2)x:ℝ| (1 / √(2 ^ n * ↑n !) * (1 / √(√Real.pi * Q.ξ))) ^ 2 *
((fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) ^ 2 * Real.exp (-x ^ 2 / Q.ξ ^ 2))
rw [physHermite_pow, h0] Q:HarmonicOscillatorn:ℕh0:∀ (x : ℝ), Real.exp (-x ^ 2 / Q.ξ ^ 2) = Real.exp (-(1 / Q.ξ ^ 2) * x ^ 2)x:ℝ| (1 / √(2 ^ n * ↑n !) * (1 / √(√Real.pi * Q.ξ))) ^ 2 *
((Polynomial.aeval (x / Q.ξ)) (physHermite n ^ 2) * Real.exp (-(1 / Q.ξ ^ 2) * x ^ 2))
enter [2, 1, 1, 1] Q:HarmonicOscillatorn:ℕh0:∀ (x : ℝ), Real.exp (-x ^ 2 / Q.ξ ^ 2) = Real.exp (-(1 / Q.ξ ^ 2) * x ^ 2)x:ℝ| x / Q.ξ
rw [← one_div_mul_eq_div] Q:HarmonicOscillatorn:ℕh0:∀ (x : ℝ), Real.exp (-x ^ 2 / Q.ξ ^ 2) = Real.exp (-(1 / Q.ξ ^ 2) * x ^ 2)x:ℝ| 1 / Q.ξ * x
apply MeasureTheory.Integrable.const_mul Q:HarmonicOscillatorn:ℕh0:∀ (x : ℝ), Real.exp (-x ^ 2 / Q.ξ ^ 2) = Real.exp (-(1 / Q.ξ ^ 2) * x ^ 2)⊢ Integrable (fun x => (Polynomial.aeval (1 / Q.ξ * x)) (physHermite n ^ 2) * Real.exp (-(1 / Q.ξ ^ 2) * x ^ 2)) volume
apply guassian_integrable_polynomial_cons Q:HarmonicOscillatorn:ℕh0:∀ (x : ℝ), Real.exp (-x ^ 2 / Q.ξ ^ 2) = Real.exp (-(1 / Q.ξ ^ 2) * x ^ 2)⊢ 0 < 1 / Q.ξ ^ 2
simp All goals completed! 🐙The eigenfunctions are almost everywhere strongly measurable.
@[fun_prop]
lemma eigenfunction_aeStronglyMeasurable (n : ℕ) :
MeasureTheory.AEStronglyMeasurable (Q.eigenfunction n) :=
(Q.eigenfunction_integrable n).aestronglyMeasurableThe eigenfunctions are members of the Hilbert space.
lemma eigenfunction_memHS (n : ℕ) : MemHS (Q.eigenfunction n) := by Q:HarmonicOscillatorn:ℕ⊢ MemHS (Q.eigenfunction n)
rw [memHS_iff Q:HarmonicOscillatorn:ℕ⊢ AEStronglyMeasurable (Q.eigenfunction n) volume ∧ Integrable (fun x => ‖Q.eigenfunction n x‖ ^ 2) volume Q:HarmonicOscillatorn:ℕ⊢ AEStronglyMeasurable (Q.eigenfunction n) volume ∧ Integrable (fun x => ‖Q.eigenfunction n x‖ ^ 2) volume] Q:HarmonicOscillatorn:ℕ⊢ AEStronglyMeasurable (Q.eigenfunction n) volume ∧ Integrable (fun x => ‖Q.eigenfunction n x‖ ^ 2) volume
apply And.intro left Q:HarmonicOscillatorn:ℕ⊢ AEStronglyMeasurable (Q.eigenfunction n) volumeright Q:HarmonicOscillatorn:ℕ⊢ Integrable (fun x => ‖Q.eigenfunction n x‖ ^ 2) volume <;> left Q:HarmonicOscillatorn:ℕ⊢ AEStronglyMeasurable (Q.eigenfunction n) volumeright Q:HarmonicOscillatorn:ℕ⊢ Integrable (fun x => ‖Q.eigenfunction n x‖ ^ 2) volume fun_prop All goals completed! 🐙The eigenfunctions are differentiable.
@[fun_prop]
lemma eigenfunction_differentiableAt (x : ℝ) (n : ℕ) :
DifferentiableAt ℝ (Q.eigenfunction n) x := by Q:HarmonicOscillatorx:ℝn:ℕ⊢ DifferentiableAt ℝ (Q.eigenfunction n) x
rw [eigenfunction_eq Q:HarmonicOscillatorx:ℝn:ℕ⊢ DifferentiableAt ℝ
(fun x =>
1 / ↑√(2 ^ n * ↑n !) * (1 / ↑√(√Real.pi * Q.ξ)) *
↑((fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) * Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2))))
x Q:HarmonicOscillatorx:ℝn:ℕ⊢ DifferentiableAt ℝ
(fun x =>
1 / ↑√(2 ^ n * ↑n !) * (1 / ↑√(√Real.pi * Q.ξ)) *
↑((fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) * Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2))))
x] Q:HarmonicOscillatorx:ℝn:ℕ⊢ DifferentiableAt ℝ
(fun x =>
1 / ↑√(2 ^ n * ↑n !) * (1 / ↑√(√Real.pi * Q.ξ)) *
↑((fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) * Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2))))
x
fun_prop All goals completed! 🐙The eigenfunctions are continuous.
@[fun_prop]
lemma eigenfunction_continuous (n : ℕ) : Continuous (Q.eigenfunction n) := by Q:HarmonicOscillatorn:ℕ⊢ Continuous (Q.eigenfunction n)
rw [eigenfunction_eq Q:HarmonicOscillatorn:ℕ⊢ Continuous fun x =>
1 / ↑√(2 ^ n * ↑n !) * (1 / ↑√(√Real.pi * Q.ξ)) *
↑((fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) * Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2))) Q:HarmonicOscillatorn:ℕ⊢ Continuous fun x =>
1 / ↑√(2 ^ n * ↑n !) * (1 / ↑√(√Real.pi * Q.ξ)) *
↑((fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) * Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2)))] Q:HarmonicOscillatorn:ℕ⊢ Continuous fun x =>
1 / ↑√(2 ^ n * ↑n !) * (1 / ↑√(√Real.pi * Q.ξ)) *
↑((fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) * Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2)))
fun_prop All goals completed! 🐙
The nth eigenfunction is an eigenfunction of the parity operator with
the eigenvalue (-1) ^ n.
lemma eigenfunction_parity (n : ℕ) :
parityOperator (Q.eigenfunction n) = (-1) ^ n * Q.eigenfunction n := by Q:HarmonicOscillatorn:ℕ⊢ parityOperator (Q.eigenfunction n) = (-1) ^ n * Q.eigenfunction n
funext x Q:HarmonicOscillatorn:ℕx:ℝ⊢ parityOperator (Q.eigenfunction n) x = ((-1) ^ n * Q.eigenfunction n) x
rw [eigenfunction_eq Q:HarmonicOscillatorn:ℕx:ℝ⊢ parityOperator
(fun x =>
1 / ↑√(2 ^ n * ↑n !) * (1 / ↑√(√Real.pi * Q.ξ)) *
↑((fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) * Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2))))
x =
((-1) ^ n * fun x =>
1 / ↑√(2 ^ n * ↑n !) * (1 / ↑√(√Real.pi * Q.ξ)) *
↑((fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) * Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2))))
x Q:HarmonicOscillatorn:ℕx:ℝ⊢ parityOperator
(fun x =>
1 / ↑√(2 ^ n * ↑n !) * (1 / ↑√(√Real.pi * Q.ξ)) *
↑((fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) * Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2))))
x =
((-1) ^ n * fun x =>
1 / ↑√(2 ^ n * ↑n !) * (1 / ↑√(√Real.pi * Q.ξ)) *
↑((fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) * Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2))))
x] Q:HarmonicOscillatorn:ℕx:ℝ⊢ parityOperator
(fun x =>
1 / ↑√(2 ^ n * ↑n !) * (1 / ↑√(√Real.pi * Q.ξ)) *
↑((fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) * Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2))))
x =
((-1) ^ n * fun x =>
1 / ↑√(2 ^ n * ↑n !) * (1 / ↑√(√Real.pi * Q.ξ)) *
↑((fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) * Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2))))
x
simp only [parityOperator, LinearMap.coe_mk, AddHom.coe_mk, Pi.mul_apply, Pi.pow_apply,
Pi.neg_apply, Pi.one_apply] Q:HarmonicOscillatorn:ℕx:ℝ⊢ 1 / ↑√(2 ^ n * ↑n !) * (1 / ↑√(√Real.pi * Q.ξ)) *
↑((Polynomial.aeval (-x / Q.ξ)) (physHermite n) * Real.exp (-(-x) ^ 2 / (2 * Q.ξ ^ 2))) =
(-1) ^ n *
(1 / ↑√(2 ^ n * ↑n !) * (1 / ↑√(√Real.pi * Q.ξ)) *
↑((Polynomial.aeval (x / Q.ξ)) (physHermite n) * Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2))))
rw [show -x / Q.ξ = - (x / Q.ξ) by Q:HarmonicOscillatorn:ℕ⊢ parityOperator (Q.eigenfunction n) = (-1) ^ n * Q.eigenfunction n Q:HarmonicOscillatorn:ℕx:ℝ⊢ 1 / ↑√(2 ^ n * ↑n !) * (1 / ↑√(√Real.pi * Q.ξ)) *
↑((Polynomial.aeval (-(x / Q.ξ))) (physHermite n) * Real.exp (-(-x) ^ 2 / (2 * Q.ξ ^ 2))) =
(-1) ^ n *
(1 / ↑√(2 ^ n * ↑n !) * (1 / ↑√(√Real.pi * Q.ξ)) *
↑((Polynomial.aeval (x / Q.ξ)) (physHermite n) * Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2)))) ring All goals completed! 🐙 Q:HarmonicOscillatorn:ℕx:ℝ⊢ 1 / ↑√(2 ^ n * ↑n !) * (1 / ↑√(√Real.pi * Q.ξ)) *
↑((Polynomial.aeval (-(x / Q.ξ))) (physHermite n) * Real.exp (-(-x) ^ 2 / (2 * Q.ξ ^ 2))) =
(-1) ^ n *
(1 / ↑√(2 ^ n * ↑n !) * (1 / ↑√(√Real.pi * Q.ξ)) *
↑((Polynomial.aeval (x / Q.ξ)) (physHermite n) * Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2))))] Q:HarmonicOscillatorn:ℕx:ℝ⊢ 1 / ↑√(2 ^ n * ↑n !) * (1 / ↑√(√Real.pi * Q.ξ)) *
↑((Polynomial.aeval (-(x / Q.ξ))) (physHermite n) * Real.exp (-(-x) ^ 2 / (2 * Q.ξ ^ 2))) =
(-1) ^ n *
(1 / ↑√(2 ^ n * ↑n !) * (1 / ↑√(√Real.pi * Q.ξ)) *
↑((Polynomial.aeval (x / Q.ξ)) (physHermite n) * Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2))))
rw [← physHermite_eq_aeval, Q:HarmonicOscillatorn:ℕx:ℝ⊢ 1 / ↑√(2 ^ n * ↑n !) * (1 / ↑√(√Real.pi * Q.ξ)) *
↑((fun x => (Polynomial.aeval x) (physHermite n)) (-(x / Q.ξ)) * Real.exp (-(-x) ^ 2 / (2 * Q.ξ ^ 2))) =
(-1) ^ n *
(1 / ↑√(2 ^ n * ↑n !) * (1 / ↑√(√Real.pi * Q.ξ)) *
↑((Polynomial.aeval (x / Q.ξ)) (physHermite n) * Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2)))) Q:HarmonicOscillatorn:ℕx:ℝ⊢ 1 / ↑√(2 ^ n * ↑n !) * (1 / ↑√(√Real.pi * Q.ξ)) *
↑((-1) ^ n * (fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) * Real.exp (-(-x) ^ 2 / (2 * Q.ξ ^ 2))) =
(-1) ^ n *
(1 / ↑√(2 ^ n * ↑n !) * (1 / ↑√(√Real.pi * Q.ξ)) *
↑((Polynomial.aeval (x / Q.ξ)) (physHermite n) * Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2)))) physHermite_parity Q:HarmonicOscillatorn:ℕx:ℝ⊢ 1 / ↑√(2 ^ n * ↑n !) * (1 / ↑√(√Real.pi * Q.ξ)) *
↑((-1) ^ n * (fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) * Real.exp (-(-x) ^ 2 / (2 * Q.ξ ^ 2))) =
(-1) ^ n *
(1 / ↑√(2 ^ n * ↑n !) * (1 / ↑√(√Real.pi * Q.ξ)) *
↑((Polynomial.aeval (x / Q.ξ)) (physHermite n) * Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2)))) Q:HarmonicOscillatorn:ℕx:ℝ⊢ 1 / ↑√(2 ^ n * ↑n !) * (1 / ↑√(√Real.pi * Q.ξ)) *
↑((-1) ^ n * (fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) * Real.exp (-(-x) ^ 2 / (2 * Q.ξ ^ 2))) =
(-1) ^ n *
(1 / ↑√(2 ^ n * ↑n !) * (1 / ↑√(√Real.pi * Q.ξ)) *
↑((Polynomial.aeval (x / Q.ξ)) (physHermite n) * Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2))))] Q:HarmonicOscillatorn:ℕx:ℝ⊢ 1 / ↑√(2 ^ n * ↑n !) * (1 / ↑√(√Real.pi * Q.ξ)) *
↑((-1) ^ n * (fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) * Real.exp (-(-x) ^ 2 / (2 * Q.ξ ^ 2))) =
(-1) ^ n *
(1 / ↑√(2 ^ n * ↑n !) * (1 / ↑√(√Real.pi * Q.ξ)) *
↑((Polynomial.aeval (x / Q.ξ)) (physHermite n) * Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2))))
simp only [Complex.ofReal_mul, Complex.ofReal_pow, Complex.ofReal_neg, Complex.ofReal_one] Q:HarmonicOscillatorn:ℕx:ℝ⊢ 1 / ↑√(2 ^ n * ↑n !) * (1 / ↑√(√Real.pi * Q.ξ)) *
((-1) ^ n * ↑((Polynomial.aeval (x / Q.ξ)) (physHermite n)) * ↑(Real.exp (-(-x) ^ 2 / (2 * Q.ξ ^ 2)))) =
(-1) ^ n *
(1 / ↑√(2 ^ n * ↑n !) * (1 / ↑√(√Real.pi * Q.ξ)) *
(↑((Polynomial.aeval (x / Q.ξ)) (physHermite n)) * ↑(Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2)))))
ring_nf All goals completed! 🐙Orthonormality
A simplification of the product of two eigenfunctions.
lemma eigenfunction_mul (n p : ℕ) :
(Q.eigenfunction n x) * (Q.eigenfunction p x) =
1/√(2 ^ n * n !) * 1/√(2 ^ p * p !) * (1/ (√Real.pi * Q.ξ)) * Complex.ofReal
(physHermite n (x / Q.ξ) * physHermite p (x / Q.ξ) * Real.exp (- x^2 / Q.ξ^2)) := by Q:HarmonicOscillatorx:ℝn:ℕp:ℕ⊢ Q.eigenfunction n x * Q.eigenfunction p x =
1 / ↑√(2 ^ n * ↑n !) * 1 / ↑√(2 ^ p * ↑p !) * (1 / (↑√Real.pi * ↑Q.ξ)) *
↑((fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) *
(fun x => (Polynomial.aeval x) (physHermite p)) (x / Q.ξ) *
Real.exp (-x ^ 2 / Q.ξ ^ 2))
calc Q.eigenfunction n x * Q.eigenfunction p x
_ = (1/√(2 ^ n * n !) * 1/√(2 ^ p * p !)) * ((1/ ((√(√Real.pi * Q.ξ)) * √(√Real.pi * Q.ξ)))) *
(physHermite n (x/Q.ξ) * physHermite p (x/Q.ξ)) *
(Real.exp (- x^2 / (2 * Q.ξ^2)) * Real.exp (- x^2 / (2 * Q.ξ^2))) := by Q:HarmonicOscillatorx:ℝn:ℕp:ℕ⊢ Q.eigenfunction n x * Q.eigenfunction p x =
1 / ↑√(2 ^ n * ↑n !) * 1 / ↑√(2 ^ p * ↑p !) * (1 / (↑√(√Real.pi * Q.ξ) * ↑√(√Real.pi * Q.ξ))) *
(↑((fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ)) *
↑((fun x => (Polynomial.aeval x) (physHermite p)) (x / Q.ξ))) *
(↑(Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2))) * ↑(Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2))))
simp only [eigenfunction, ofNat_nonneg, pow_nonneg, Real.sqrt_mul, Complex.ofReal_mul,
one_div, mul_inv_rev, Complex.ofReal_exp, Complex.ofReal_div, Complex.ofReal_neg,
Complex.ofReal_pow, Complex.ofReal_ofNat, mul_one] Q:HarmonicOscillatorx:ℝn:ℕp:ℕ⊢ (↑√↑n !)⁻¹ * (↑√(2 ^ n))⁻¹ * (↑√(√Real.pi * Q.ξ))⁻¹ * ↑((Polynomial.aeval (x / Q.ξ)) (physHermite n)) *
Complex.exp (-↑x ^ 2 / (2 * ↑Q.ξ ^ 2)) *
((↑√↑p !)⁻¹ * (↑√(2 ^ p))⁻¹ * (↑√(√Real.pi * Q.ξ))⁻¹ * ↑((Polynomial.aeval (x / Q.ξ)) (physHermite p)) *
Complex.exp (-↑x ^ 2 / (2 * ↑Q.ξ ^ 2))) =
(↑√↑n !)⁻¹ * (↑√(2 ^ n))⁻¹ / (↑√(2 ^ p) * ↑√↑p !) * ((↑√(√Real.pi * Q.ξ))⁻¹ * (↑√(√Real.pi * Q.ξ))⁻¹) *
(↑((Polynomial.aeval (x / Q.ξ)) (physHermite n)) * ↑((Polynomial.aeval (x / Q.ξ)) (physHermite p))) *
(Complex.exp (-↑x ^ 2 / (2 * ↑Q.ξ ^ 2)) * Complex.exp (-↑x ^ 2 / (2 * ↑Q.ξ ^ 2)))
ring All goals completed! 🐙
_ = (1/√(2 ^ n * n !) * 1/√(2 ^ p * p !)) * (1/ (√Real.pi * Q.ξ)) *
(physHermite n (x / Q.ξ) * physHermite p (x / Q.ξ)) * (Real.exp (- x^2 / Q.ξ^2)) := by Q:HarmonicOscillatorx:ℝn:ℕp:ℕ⊢ 1 / ↑√(2 ^ n * ↑n !) * 1 / ↑√(2 ^ p * ↑p !) * (1 / (↑√(√Real.pi * Q.ξ) * ↑√(√Real.pi * Q.ξ))) *
(↑((fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ)) *
↑((fun x => (Polynomial.aeval x) (physHermite p)) (x / Q.ξ))) *
(↑(Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2))) * ↑(Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2)))) =
1 / ↑√(2 ^ n * ↑n !) * 1 / ↑√(2 ^ p * ↑p !) * (1 / (↑√Real.pi * ↑Q.ξ)) *
(↑((fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ)) *
↑((fun x => (Polynomial.aeval x) (physHermite p)) (x / Q.ξ))) *
↑(Real.exp (-x ^ 2 / Q.ξ ^ 2))
congr 1 e_a Q:HarmonicOscillatorx:ℝn:ℕp:ℕ⊢ 1 / ↑√(2 ^ n * ↑n !) * 1 / ↑√(2 ^ p * ↑p !) * (1 / (↑√(√Real.pi * Q.ξ) * ↑√(√Real.pi * Q.ξ))) *
(↑((fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ)) *
↑((fun x => (Polynomial.aeval x) (physHermite p)) (x / Q.ξ))) =
1 / ↑√(2 ^ n * ↑n !) * 1 / ↑√(2 ^ p * ↑p !) * (1 / (↑√Real.pi * ↑Q.ξ)) *
(↑((fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ)) *
↑((fun x => (Polynomial.aeval x) (physHermite p)) (x / Q.ξ)))e_a Q:HarmonicOscillatorx:ℝn:ℕp:ℕ⊢ ↑(Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2))) * ↑(Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2))) = ↑(Real.exp (-x ^ 2 / Q.ξ ^ 2))
· e_a Q:HarmonicOscillatorx:ℝn:ℕp:ℕ⊢ 1 / ↑√(2 ^ n * ↑n !) * 1 / ↑√(2 ^ p * ↑p !) * (1 / (↑√(√Real.pi * Q.ξ) * ↑√(√Real.pi * Q.ξ))) *
(↑((fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ)) *
↑((fun x => (Polynomial.aeval x) (physHermite p)) (x / Q.ξ))) =
1 / ↑√(2 ^ n * ↑n !) * 1 / ↑√(2 ^ p * ↑p !) * (1 / (↑√Real.pi * ↑Q.ξ)) *
(↑((fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ)) *
↑((fun x => (Polynomial.aeval x) (physHermite p)) (x / Q.ξ))) congr 1 e_a.e_a Q:HarmonicOscillatorx:ℝn:ℕp:ℕ⊢ 1 / ↑√(2 ^ n * ↑n !) * 1 / ↑√(2 ^ p * ↑p !) * (1 / (↑√(√Real.pi * Q.ξ) * ↑√(√Real.pi * Q.ξ))) =
1 / ↑√(2 ^ n * ↑n !) * 1 / ↑√(2 ^ p * ↑p !) * (1 / (↑√Real.pi * ↑Q.ξ))
· e_a.e_a Q:HarmonicOscillatorx:ℝn:ℕp:ℕ⊢ 1 / ↑√(2 ^ n * ↑n !) * 1 / ↑√(2 ^ p * ↑p !) * (1 / (↑√(√Real.pi * Q.ξ) * ↑√(√Real.pi * Q.ξ))) =
1 / ↑√(2 ^ n * ↑n !) * 1 / ↑√(2 ^ p * ↑p !) * (1 / (↑√Real.pi * ↑Q.ξ)) congr 1 e_a.e_a.e_a Q:HarmonicOscillatorx:ℝn:ℕp:ℕ⊢ 1 / (↑√(√Real.pi * Q.ξ) * ↑√(√Real.pi * Q.ξ)) = 1 / (↑√Real.pi * ↑Q.ξ)
· e_a.e_a.e_a Q:HarmonicOscillatorx:ℝn:ℕp:ℕ⊢ 1 / (↑√(√Real.pi * Q.ξ) * ↑√(√Real.pi * Q.ξ)) = 1 / (↑√Real.pi * ↑Q.ξ) congr 1 e_a.e_a.e_a.e_a Q:HarmonicOscillatorx:ℝn:ℕp:ℕ⊢ ↑√(√Real.pi * Q.ξ) * ↑√(√Real.pi * Q.ξ) = ↑√Real.pi * ↑Q.ξ
rw [← Complex.ofReal_mul, e_a.e_a.e_a.e_a Q:HarmonicOscillatorx:ℝn:ℕp:ℕ⊢ ↑(√(√Real.pi * Q.ξ) * √(√Real.pi * Q.ξ)) = ↑√Real.pi * ↑Q.ξ e_a.e_a.e_a.e_a Q:HarmonicOscillatorx:ℝn:ℕp:ℕ⊢ ↑(√Real.pi * Q.ξ) = ↑√Real.pi * ↑Q.ξe_a.e_a.e_a.e_a Q:HarmonicOscillatorx:ℝn:ℕp:ℕ⊢ 0 ≤ √Real.pi * Q.ξ Real.mul_self_sqrt e_a.e_a.e_a.e_a Q:HarmonicOscillatorx:ℝn:ℕp:ℕ⊢ ↑(√Real.pi * Q.ξ) = ↑√Real.pi * ↑Q.ξe_a.e_a.e_a.e_a Q:HarmonicOscillatorx:ℝn:ℕp:ℕ⊢ 0 ≤ √Real.pi * Q.ξ e_a.e_a.e_a.e_a Q:HarmonicOscillatorx:ℝn:ℕp:ℕ⊢ ↑(√Real.pi * Q.ξ) = ↑√Real.pi * ↑Q.ξe_a.e_a.e_a.e_a Q:HarmonicOscillatorx:ℝn:ℕp:ℕ⊢ 0 ≤ √Real.pi * Q.ξ]e_a.e_a.e_a.e_a Q:HarmonicOscillatorx:ℝn:ℕp:ℕ⊢ ↑(√Real.pi * Q.ξ) = ↑√Real.pi * ↑Q.ξe_a.e_a.e_a.e_a Q:HarmonicOscillatorx:ℝn:ℕp:ℕ⊢ 0 ≤ √Real.pi * Q.ξ
· e_a.e_a.e_a.e_a Q:HarmonicOscillatorx:ℝn:ℕp:ℕ⊢ ↑(√Real.pi * Q.ξ) = ↑√Real.pi * ↑Q.ξ simp All goals completed! 🐙
· e_a.e_a.e_a.e_a Q:HarmonicOscillatorx:ℝn:ℕp:ℕ⊢ 0 ≤ √Real.pi * Q.ξ simp All goals completed! 🐙
· e_a Q:HarmonicOscillatorx:ℝn:ℕp:ℕ⊢ ↑(Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2))) * ↑(Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2))) = ↑(Real.exp (-x ^ 2 / Q.ξ ^ 2)) rw [← Complex.ofReal_mul e_a Q:HarmonicOscillatorx:ℝn:ℕp:ℕ⊢ ↑(Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2)) * Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2))) = ↑(Real.exp (-x ^ 2 / Q.ξ ^ 2)) e_a Q:HarmonicOscillatorx:ℝn:ℕp:ℕ⊢ ↑(Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2)) * Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2))) = ↑(Real.exp (-x ^ 2 / Q.ξ ^ 2))]e_a Q:HarmonicOscillatorx:ℝn:ℕp:ℕ⊢ ↑(Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2)) * Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2))) = ↑(Real.exp (-x ^ 2 / Q.ξ ^ 2))
congr e_a Q:HarmonicOscillatorx:ℝn:ℕp:ℕ⊢ Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2)) * Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2)) = Real.exp (-x ^ 2 / Q.ξ ^ 2)
rw [← Real.exp_add e_a Q:HarmonicOscillatorx:ℝn:ℕp:ℕ⊢ Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2) + -x ^ 2 / (2 * Q.ξ ^ 2)) = Real.exp (-x ^ 2 / Q.ξ ^ 2) e_a Q:HarmonicOscillatorx:ℝn:ℕp:ℕ⊢ Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2) + -x ^ 2 / (2 * Q.ξ ^ 2)) = Real.exp (-x ^ 2 / Q.ξ ^ 2)]e_a Q:HarmonicOscillatorx:ℝn:ℕp:ℕ⊢ Real.exp (-x ^ 2 / (2 * Q.ξ ^ 2) + -x ^ 2 / (2 * Q.ξ ^ 2)) = Real.exp (-x ^ 2 / Q.ξ ^ 2)
simp only [Real.exp_eq_exp] e_a Q:HarmonicOscillatorx:ℝn:ℕp:ℕ⊢ -x ^ 2 / (2 * Q.ξ ^ 2) + -x ^ 2 / (2 * Q.ξ ^ 2) = -x ^ 2 / Q.ξ ^ 2
field_simp e_a Q:HarmonicOscillatorx:ℝn:ℕp:ℕ⊢ x ^ 2 * (-1 + -1) = -(x ^ 2 * 2)
ring All goals completed! 🐙
simp only [ofNat_nonneg, pow_nonneg, Real.sqrt_mul, Complex.ofReal_mul, one_div, mul_inv_rev,
mul_one, Complex.ofReal_exp, Complex.ofReal_div, Complex.ofReal_neg,
Complex.ofReal_pow] calc.step Q:HarmonicOscillatorx:ℝn:ℕp:ℕ⊢ (↑√↑n !)⁻¹ * (↑√(2 ^ n))⁻¹ / (↑√(2 ^ p) * ↑√↑p !) * ((↑Q.ξ)⁻¹ * (↑√Real.pi)⁻¹) *
(↑((Polynomial.aeval (x / Q.ξ)) (physHermite n)) * ↑((Polynomial.aeval (x / Q.ξ)) (physHermite p))) *
Complex.exp (-↑x ^ 2 / ↑Q.ξ ^ 2) =
(↑√↑n !)⁻¹ * (↑√(2 ^ n))⁻¹ / (↑√(2 ^ p) * ↑√↑p !) * ((↑Q.ξ)⁻¹ * (↑√Real.pi)⁻¹) *
(↑((Polynomial.aeval (x / Q.ξ)) (physHermite n)) * ↑((Polynomial.aeval (x / Q.ξ)) (physHermite p)) *
Complex.exp (-↑x ^ 2 / ↑Q.ξ ^ 2))
ring All goals completed! 🐙
lemma eigenfunction_mul_self (n : ℕ) : (Q.eigenfunction n x) * (Q.eigenfunction n x) =
(1/ (2 ^ n * n !) * (1/ (√Real.pi * Q.ξ))) *
Complex.ofReal ((physHermite n (x / Q.ξ))^2 * Real.exp (- x^2 / Q.ξ^2)) := by Q:HarmonicOscillatorx:ℝn:ℕ⊢ Q.eigenfunction n x * Q.eigenfunction n x =
1 / (2 ^ n * ↑n !) * (1 / (↑√Real.pi * ↑Q.ξ)) *
↑((fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) ^ 2 * Real.exp (-x ^ 2 / Q.ξ ^ 2))
rw [eigenfunction_mul Q:HarmonicOscillatorx:ℝn:ℕ⊢ 1 / ↑√(2 ^ n * ↑n !) * 1 / ↑√(2 ^ n * ↑n !) * (1 / (↑√Real.pi * ↑Q.ξ)) *
↑((fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) *
(fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) *
Real.exp (-x ^ 2 / Q.ξ ^ 2)) =
1 / (2 ^ n * ↑n !) * (1 / (↑√Real.pi * ↑Q.ξ)) *
↑((fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) ^ 2 * Real.exp (-x ^ 2 / Q.ξ ^ 2)) Q:HarmonicOscillatorx:ℝn:ℕ⊢ 1 / ↑√(2 ^ n * ↑n !) * 1 / ↑√(2 ^ n * ↑n !) * (1 / (↑√Real.pi * ↑Q.ξ)) *
↑((fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) *
(fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) *
Real.exp (-x ^ 2 / Q.ξ ^ 2)) =
1 / (2 ^ n * ↑n !) * (1 / (↑√Real.pi * ↑Q.ξ)) *
↑((fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) ^ 2 * Real.exp (-x ^ 2 / Q.ξ ^ 2))] Q:HarmonicOscillatorx:ℝn:ℕ⊢ 1 / ↑√(2 ^ n * ↑n !) * 1 / ↑√(2 ^ n * ↑n !) * (1 / (↑√Real.pi * ↑Q.ξ)) *
↑((fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) *
(fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) *
Real.exp (-x ^ 2 / Q.ξ ^ 2)) =
1 / (2 ^ n * ↑n !) * (1 / (↑√Real.pi * ↑Q.ξ)) *
↑((fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) ^ 2 * Real.exp (-x ^ 2 / Q.ξ ^ 2))
congr 2 e_a.e_a Q:HarmonicOscillatorx:ℝn:ℕ⊢ 1 / ↑√(2 ^ n * ↑n !) * 1 / ↑√(2 ^ n * ↑n !) = 1 / (2 ^ n * ↑n !)e_a Q:HarmonicOscillatorx:ℝn:ℕ⊢ (fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) * (fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) *
Real.exp (-x ^ 2 / Q.ξ ^ 2) =
(fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) ^ 2 * Real.exp (-x ^ 2 / Q.ξ ^ 2)
· e_a.e_a Q:HarmonicOscillatorx:ℝn:ℕ⊢ 1 / ↑√(2 ^ n * ↑n !) * 1 / ↑√(2 ^ n * ↑n !) = 1 / (2 ^ n * ↑n !) trans 1 / ↑(√(2 ^ n * ↑n !) * ↑√(2 ^ n * ↑n !)) Q:HarmonicOscillatorx:ℝn:ℕ⊢ 1 / ↑√(2 ^ n * ↑n !) * 1 / ↑√(2 ^ n * ↑n !) = 1 / ↑(√(2 ^ n * ↑n !) * √(2 ^ n * ↑n !))Q:HarmonicOscillatorx:ℝn:ℕ⊢ 1 / ↑(√(2 ^ n * ↑n !) * √(2 ^ n * ↑n !)) = 1 / (2 ^ n * ↑n !)
· Q:HarmonicOscillatorx:ℝn:ℕ⊢ 1 / ↑√(2 ^ n * ↑n !) * 1 / ↑√(2 ^ n * ↑n !) = 1 / ↑(√(2 ^ n * ↑n !) * √(2 ^ n * ↑n !)) simp only [ofNat_nonneg, pow_nonneg, Real.sqrt_mul, Complex.ofReal_mul, one_div, mul_inv_rev,
mul_one] Q:HarmonicOscillatorx:ℝn:ℕ⊢ (↑√↑n !)⁻¹ * (↑√(2 ^ n))⁻¹ / (↑√(2 ^ n) * ↑√↑n !) = (↑√↑n !)⁻¹ * (↑√(2 ^ n))⁻¹ * ((↑√↑n !)⁻¹ * (↑√(2 ^ n))⁻¹)
field_simp All goals completed! 🐙
congr e_a Q:HarmonicOscillatorx:ℝn:ℕ⊢ ↑(√(2 ^ n * ↑n !) * √(2 ^ n * ↑n !)) = 2 ^ n * ↑n !
trans Complex.ofReal ((2 ^ n * ↑n !)) Q:HarmonicOscillatorx:ℝn:ℕ⊢ ↑(√(2 ^ n * ↑n !) * √(2 ^ n * ↑n !)) = ↑(2 ^ n * ↑n !)Q:HarmonicOscillatorx:ℝn:ℕ⊢ ↑(2 ^ n * ↑n !) = 2 ^ n * ↑n !
· Q:HarmonicOscillatorx:ℝn:ℕ⊢ ↑(√(2 ^ n * ↑n !) * √(2 ^ n * ↑n !)) = ↑(2 ^ n * ↑n !) congr 1 Q:HarmonicOscillatorx:ℝn:ℕ⊢ √(2 ^ n * ↑n !) * √(2 ^ n * ↑n !) = 2 ^ n * ↑n !
refine Real.mul_self_sqrt ?_ Q:HarmonicOscillatorx:ℝn:ℕ⊢ 0 ≤ 2 ^ n * ↑n !
refine Left.mul_nonneg ?_ (cast_nonneg' n !) Q:HarmonicOscillatorx:ℝn:ℕ⊢ 0 ≤ 2 ^ n
refine pow_nonneg ?_ n Q:HarmonicOscillatorx:ℝn:ℕ⊢ 0 ≤ 2
simp only [ofNat_nonneg] All goals completed! 🐙
· Q:HarmonicOscillatorx:ℝn:ℕ⊢ ↑(2 ^ n * ↑n !) = 2 ^ n * ↑n ! simp All goals completed! 🐙
· e_a Q:HarmonicOscillatorx:ℝn:ℕ⊢ (fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) * (fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) *
Real.exp (-x ^ 2 / Q.ξ ^ 2) =
(fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) ^ 2 * Real.exp (-x ^ 2 / Q.ξ ^ 2) congr 1 e_a.e_a Q:HarmonicOscillatorx:ℝn:ℕ⊢ (fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) * (fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) =
(fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) ^ 2
exact (pow_two ((fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ))).symm All goals completed! 🐙The eigenfunction are normalized.
lemma eigenfunction_normalized (n : ℕ) : ⟪HilbertSpace.mk (Q.eigenfunction_memHS n),
HilbertSpace.mk (Q.eigenfunction_memHS n)⟫_ℂ = 1 := by Q:HarmonicOscillatorn:ℕ⊢ ⟪HilbertSpace.mk ⋯, HilbertSpace.mk ⋯⟫_ℂ = 1
rw [inner_mk_mk Q:HarmonicOscillatorn:ℕ⊢ ∫ (x : ℝ), (starRingEnd ℂ) (Q.eigenfunction n x) * Q.eigenfunction n x = 1 Q:HarmonicOscillatorn:ℕ⊢ ∫ (x : ℝ), (starRingEnd ℂ) (Q.eigenfunction n x) * Q.eigenfunction n x = 1] Q:HarmonicOscillatorn:ℕ⊢ ∫ (x : ℝ), (starRingEnd ℂ) (Q.eigenfunction n x) * Q.eigenfunction n x = 1
conv_lhs =>
enter [2, x] Q:HarmonicOscillatorn:ℕx:ℝ| (starRingEnd ℂ) (Q.eigenfunction n x) * Q.eigenfunction n x
rw [eigenfunction_conj, Q.eigenfunction_mul_self] Q:HarmonicOscillatorn:ℕx:ℝ| 1 / (2 ^ n * ↑n !) * (1 / (↑√Real.pi * ↑Q.ξ)) *
↑((fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) ^ 2 * Real.exp (-x ^ 2 / Q.ξ ^ 2))
rw [MeasureTheory.integral_const_mul, Q:HarmonicOscillatorn:ℕ⊢ 1 / (2 ^ n * ↑n !) * (1 / (↑√Real.pi * ↑Q.ξ)) *
∫ (a : ℝ), ↑((fun x => (Polynomial.aeval x) (physHermite n)) (a / Q.ξ) ^ 2 * Real.exp (-a ^ 2 / Q.ξ ^ 2)) =
1 Q:HarmonicOscillatorn:ℕ⊢ 1 / (2 ^ n * ↑n !) * (1 / (↑√Real.pi * ↑Q.ξ)) *
↑(∫ (x : ℝ), (fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) ^ 2 * Real.exp (-x ^ 2 / Q.ξ ^ 2)) =
1 integral_complex_ofReal Q:HarmonicOscillatorn:ℕ⊢ 1 / (2 ^ n * ↑n !) * (1 / (↑√Real.pi * ↑Q.ξ)) *
↑(∫ (x : ℝ), (fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) ^ 2 * Real.exp (-x ^ 2 / Q.ξ ^ 2)) =
1 Q:HarmonicOscillatorn:ℕ⊢ 1 / (2 ^ n * ↑n !) * (1 / (↑√Real.pi * ↑Q.ξ)) *
↑(∫ (x : ℝ), (fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) ^ 2 * Real.exp (-x ^ 2 / Q.ξ ^ 2)) =
1] Q:HarmonicOscillatorn:ℕ⊢ 1 / (2 ^ n * ↑n !) * (1 / (↑√Real.pi * ↑Q.ξ)) *
↑(∫ (x : ℝ), (fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) ^ 2 * Real.exp (-x ^ 2 / Q.ξ ^ 2)) =
1
have hc : (∫ (x : ℝ), physHermite n (x /Q.ξ) ^ 2 * Real.exp (- x ^ 2 / Q.ξ^2))
= ∫ (x : ℝ), (physHermite n (1/Q.ξ * x) *
physHermite n (1/Q.ξ * x)) * Real.exp (- (1/Q.ξ)^2 * x ^ 2) := by Q:HarmonicOscillatorn:ℕ⊢ ⟪HilbertSpace.mk ⋯, HilbertSpace.mk ⋯⟫_ℂ = 1 Q:HarmonicOscillatorn:ℕhc:∫ (x : ℝ), (fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) ^ 2 * Real.exp (-x ^ 2 / Q.ξ ^ 2) =
∫ (x : ℝ),
(fun x => (Polynomial.aeval x) (physHermite n)) (1 / Q.ξ * x) *
(fun x => (Polynomial.aeval x) (physHermite n)) (1 / Q.ξ * x) *
Real.exp (-(1 / Q.ξ) ^ 2 * x ^ 2)⊢ 1 / (2 ^ n * ↑n !) * (1 / (↑√Real.pi * ↑Q.ξ)) *
↑(∫ (x : ℝ), (fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) ^ 2 * Real.exp (-x ^ 2 / Q.ξ ^ 2)) =
1
congr e_f Q:HarmonicOscillatorn:ℕ⊢ (fun x => (fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) ^ 2 * Real.exp (-x ^ 2 / Q.ξ ^ 2)) = fun x =>
(fun x => (Polynomial.aeval x) (physHermite n)) (1 / Q.ξ * x) *
(fun x => (Polynomial.aeval x) (physHermite n)) (1 / Q.ξ * x) *
Real.exp (-(1 / Q.ξ) ^ 2 * x ^ 2) Q:HarmonicOscillatorn:ℕhc:∫ (x : ℝ), (fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) ^ 2 * Real.exp (-x ^ 2 / Q.ξ ^ 2) =
∫ (x : ℝ),
(fun x => (Polynomial.aeval x) (physHermite n)) (1 / Q.ξ * x) *
(fun x => (Polynomial.aeval x) (physHermite n)) (1 / Q.ξ * x) *
Real.exp (-(1 / Q.ξ) ^ 2 * x ^ 2)⊢ 1 / (2 ^ n * ↑n !) * (1 / (↑√Real.pi * ↑Q.ξ)) *
↑(∫ (x : ℝ), (fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) ^ 2 * Real.exp (-x ^ 2 / Q.ξ ^ 2)) =
1
funext x e_f Q:HarmonicOscillatorn:ℕx:ℝ⊢ (fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) ^ 2 * Real.exp (-x ^ 2 / Q.ξ ^ 2) =
(fun x => (Polynomial.aeval x) (physHermite n)) (1 / Q.ξ * x) *
(fun x => (Polynomial.aeval x) (physHermite n)) (1 / Q.ξ * x) *
Real.exp (-(1 / Q.ξ) ^ 2 * x ^ 2) Q:HarmonicOscillatorn:ℕhc:∫ (x : ℝ), (fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) ^ 2 * Real.exp (-x ^ 2 / Q.ξ ^ 2) =
∫ (x : ℝ),
(fun x => (Polynomial.aeval x) (physHermite n)) (1 / Q.ξ * x) *
(fun x => (Polynomial.aeval x) (physHermite n)) (1 / Q.ξ * x) *
Real.exp (-(1 / Q.ξ) ^ 2 * x ^ 2)⊢ 1 / (2 ^ n * ↑n !) * (1 / (↑√Real.pi * ↑Q.ξ)) *
↑(∫ (x : ℝ), (fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) ^ 2 * Real.exp (-x ^ 2 / Q.ξ ^ 2)) =
1
ring_nf Q:HarmonicOscillatorn:ℕhc:∫ (x : ℝ), (fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) ^ 2 * Real.exp (-x ^ 2 / Q.ξ ^ 2) =
∫ (x : ℝ),
(fun x => (Polynomial.aeval x) (physHermite n)) (1 / Q.ξ * x) *
(fun x => (Polynomial.aeval x) (physHermite n)) (1 / Q.ξ * x) *
Real.exp (-(1 / Q.ξ) ^ 2 * x ^ 2)⊢ 1 / (2 ^ n * ↑n !) * (1 / (↑√Real.pi * ↑Q.ξ)) *
↑(∫ (x : ℝ), (fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) ^ 2 * Real.exp (-x ^ 2 / Q.ξ ^ 2)) =
1 Q:HarmonicOscillatorn:ℕhc:∫ (x : ℝ), (fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) ^ 2 * Real.exp (-x ^ 2 / Q.ξ ^ 2) =
∫ (x : ℝ),
(fun x => (Polynomial.aeval x) (physHermite n)) (1 / Q.ξ * x) *
(fun x => (Polynomial.aeval x) (physHermite n)) (1 / Q.ξ * x) *
Real.exp (-(1 / Q.ξ) ^ 2 * x ^ 2)⊢ 1 / (2 ^ n * ↑n !) * (1 / (↑√Real.pi * ↑Q.ξ)) *
↑(∫ (x : ℝ), (fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) ^ 2 * Real.exp (-x ^ 2 / Q.ξ ^ 2)) =
1
rw [hc, Q:HarmonicOscillatorn:ℕhc:∫ (x : ℝ), (fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) ^ 2 * Real.exp (-x ^ 2 / Q.ξ ^ 2) =
∫ (x : ℝ),
(fun x => (Polynomial.aeval x) (physHermite n)) (1 / Q.ξ * x) *
(fun x => (Polynomial.aeval x) (physHermite n)) (1 / Q.ξ * x) *
Real.exp (-(1 / Q.ξ) ^ 2 * x ^ 2)⊢ 1 / (2 ^ n * ↑n !) * (1 / (↑√Real.pi * ↑Q.ξ)) *
↑(∫ (x : ℝ),
(fun x => (Polynomial.aeval x) (physHermite n)) (1 / Q.ξ * x) *
(fun x => (Polynomial.aeval x) (physHermite n)) (1 / Q.ξ * x) *
Real.exp (-(1 / Q.ξ) ^ 2 * x ^ 2)) =
1 Q:HarmonicOscillatorn:ℕhc:∫ (x : ℝ), (fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) ^ 2 * Real.exp (-x ^ 2 / Q.ξ ^ 2) =
∫ (x : ℝ),
(fun x => (Polynomial.aeval x) (physHermite n)) (1 / Q.ξ * x) *
(fun x => (Polynomial.aeval x) (physHermite n)) (1 / Q.ξ * x) *
Real.exp (-(1 / Q.ξ) ^ 2 * x ^ 2)⊢ 1 / (2 ^ n * ↑n !) * (1 / (↑√Real.pi * ↑Q.ξ)) * ↑(|(1 / Q.ξ)⁻¹| • (↑n ! * 2 ^ n * √Real.pi)) = 1 physHermite_norm_cons Q:HarmonicOscillatorn:ℕhc:∫ (x : ℝ), (fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) ^ 2 * Real.exp (-x ^ 2 / Q.ξ ^ 2) =
∫ (x : ℝ),
(fun x => (Polynomial.aeval x) (physHermite n)) (1 / Q.ξ * x) *
(fun x => (Polynomial.aeval x) (physHermite n)) (1 / Q.ξ * x) *
Real.exp (-(1 / Q.ξ) ^ 2 * x ^ 2)⊢ 1 / (2 ^ n * ↑n !) * (1 / (↑√Real.pi * ↑Q.ξ)) * ↑(|(1 / Q.ξ)⁻¹| • (↑n ! * 2 ^ n * √Real.pi)) = 1 Q:HarmonicOscillatorn:ℕhc:∫ (x : ℝ), (fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) ^ 2 * Real.exp (-x ^ 2 / Q.ξ ^ 2) =
∫ (x : ℝ),
(fun x => (Polynomial.aeval x) (physHermite n)) (1 / Q.ξ * x) *
(fun x => (Polynomial.aeval x) (physHermite n)) (1 / Q.ξ * x) *
Real.exp (-(1 / Q.ξ) ^ 2 * x ^ 2)⊢ 1 / (2 ^ n * ↑n !) * (1 / (↑√Real.pi * ↑Q.ξ)) * ↑(|(1 / Q.ξ)⁻¹| • (↑n ! * 2 ^ n * √Real.pi)) = 1] Q:HarmonicOscillatorn:ℕhc:∫ (x : ℝ), (fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) ^ 2 * Real.exp (-x ^ 2 / Q.ξ ^ 2) =
∫ (x : ℝ),
(fun x => (Polynomial.aeval x) (physHermite n)) (1 / Q.ξ * x) *
(fun x => (Polynomial.aeval x) (physHermite n)) (1 / Q.ξ * x) *
Real.exp (-(1 / Q.ξ) ^ 2 * x ^ 2)⊢ 1 / (2 ^ n * ↑n !) * (1 / (↑√Real.pi * ↑Q.ξ)) * ↑(|(1 / Q.ξ)⁻¹| • (↑n ! * 2 ^ n * √Real.pi)) = 1
simp only [one_div, mul_inv_rev, inv_inv, ξ_abs] Q:HarmonicOscillatorn:ℕhc:∫ (x : ℝ), (fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) ^ 2 * Real.exp (-x ^ 2 / Q.ξ ^ 2) =
∫ (x : ℝ),
(fun x => (Polynomial.aeval x) (physHermite n)) (1 / Q.ξ * x) *
(fun x => (Polynomial.aeval x) (physHermite n)) (1 / Q.ξ * x) *
Real.exp (-(1 / Q.ξ) ^ 2 * x ^ 2)⊢ (↑n !)⁻¹ * (2 ^ n)⁻¹ * ((↑Q.ξ)⁻¹ * (↑√Real.pi)⁻¹) * ↑(Q.ξ • (↑n ! * 2 ^ n * √Real.pi)) = 1
have : (n ! : ℂ) ≠ 0 := Complex.ne_zero_of_re_pos <| by Q:HarmonicOscillatorn:ℕhc:∫ (x : ℝ), (fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) ^ 2 * Real.exp (-x ^ 2 / Q.ξ ^ 2) =
∫ (x : ℝ),
(fun x => (Polynomial.aeval x) (physHermite n)) (1 / Q.ξ * x) *
(fun x => (Polynomial.aeval x) (physHermite n)) (1 / Q.ξ * x) *
Real.exp (-(1 / Q.ξ) ^ 2 * x ^ 2)⊢ 0 < (↑n !).re Q:HarmonicOscillatorn:ℕhc:∫ (x : ℝ), (fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) ^ 2 * Real.exp (-x ^ 2 / Q.ξ ^ 2) =
∫ (x : ℝ),
(fun x => (Polynomial.aeval x) (physHermite n)) (1 / Q.ξ * x) *
(fun x => (Polynomial.aeval x) (physHermite n)) (1 / Q.ξ * x) *
Real.exp (-(1 / Q.ξ) ^ 2 * x ^ 2)this:↑n ! ≠ 0⊢ (↑n !)⁻¹ * (2 ^ n)⁻¹ * ((↑Q.ξ)⁻¹ * (↑√Real.pi)⁻¹) * ↑(Q.ξ • (↑n ! * 2 ^ n * √Real.pi)) = 1 simpa using factorial_pos n Q:HarmonicOscillatorn:ℕhc:∫ (x : ℝ), (fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) ^ 2 * Real.exp (-x ^ 2 / Q.ξ ^ 2) =
∫ (x : ℝ),
(fun x => (Polynomial.aeval x) (physHermite n)) (1 / Q.ξ * x) *
(fun x => (Polynomial.aeval x) (physHermite n)) (1 / Q.ξ * x) *
Real.exp (-(1 / Q.ξ) ^ 2 * x ^ 2)this:↑n ! ≠ 0⊢ (↑n !)⁻¹ * (2 ^ n)⁻¹ * ((↑Q.ξ)⁻¹ * (↑√Real.pi)⁻¹) * ↑(Q.ξ • (↑n ! * 2 ^ n * √Real.pi)) = 1 Q:HarmonicOscillatorn:ℕhc:∫ (x : ℝ), (fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) ^ 2 * Real.exp (-x ^ 2 / Q.ξ ^ 2) =
∫ (x : ℝ),
(fun x => (Polynomial.aeval x) (physHermite n)) (1 / Q.ξ * x) *
(fun x => (Polynomial.aeval x) (physHermite n)) (1 / Q.ξ * x) *
Real.exp (-(1 / Q.ξ) ^ 2 * x ^ 2)this:↑n ! ≠ 0⊢ (↑n !)⁻¹ * (2 ^ n)⁻¹ * ((↑Q.ξ)⁻¹ * (↑√Real.pi)⁻¹) * ↑(Q.ξ • (↑n ! * 2 ^ n * √Real.pi)) = 1
have := Complex.ofReal_ne_zero.mpr (ne_of_gt Q.ξ_pos) Q:HarmonicOscillatorn:ℕhc:∫ (x : ℝ), (fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) ^ 2 * Real.exp (-x ^ 2 / Q.ξ ^ 2) =
∫ (x : ℝ),
(fun x => (Polynomial.aeval x) (physHermite n)) (1 / Q.ξ * x) *
(fun x => (Polynomial.aeval x) (physHermite n)) (1 / Q.ξ * x) *
Real.exp (-(1 / Q.ξ) ^ 2 * x ^ 2)this✝:↑n ! ≠ 0this:↑Q.ξ ≠ 0⊢ (↑n !)⁻¹ * (2 ^ n)⁻¹ * ((↑Q.ξ)⁻¹ * (↑√Real.pi)⁻¹) * ↑(Q.ξ • (↑n ! * 2 ^ n * √Real.pi)) = 1
have := Complex.ofReal_ne_zero.mpr (Real.sqrt_ne_zero'.mpr Real.pi_pos) Q:HarmonicOscillatorn:ℕhc:∫ (x : ℝ), (fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) ^ 2 * Real.exp (-x ^ 2 / Q.ξ ^ 2) =
∫ (x : ℝ),
(fun x => (Polynomial.aeval x) (physHermite n)) (1 / Q.ξ * x) *
(fun x => (Polynomial.aeval x) (physHermite n)) (1 / Q.ξ * x) *
Real.exp (-(1 / Q.ξ) ^ 2 * x ^ 2)this✝¹:↑n ! ≠ 0this✝:↑Q.ξ ≠ 0this:↑√Real.pi ≠ 0⊢ (↑n !)⁻¹ * (2 ^ n)⁻¹ * ((↑Q.ξ)⁻¹ * (↑√Real.pi)⁻¹) * ↑(Q.ξ • (↑n ! * 2 ^ n * √Real.pi)) = 1
simp only [smul_eq_mul, Complex.ofReal_mul, Complex.ofReal_natCast, Complex.ofReal_pow,
Complex.ofReal_ofNat] Q:HarmonicOscillatorn:ℕhc:∫ (x : ℝ), (fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) ^ 2 * Real.exp (-x ^ 2 / Q.ξ ^ 2) =
∫ (x : ℝ),
(fun x => (Polynomial.aeval x) (physHermite n)) (1 / Q.ξ * x) *
(fun x => (Polynomial.aeval x) (physHermite n)) (1 / Q.ξ * x) *
Real.exp (-(1 / Q.ξ) ^ 2 * x ^ 2)this✝¹:↑n ! ≠ 0this✝:↑Q.ξ ≠ 0this:↑√Real.pi ≠ 0⊢ (↑n !)⁻¹ * (2 ^ n)⁻¹ * ((↑Q.ξ)⁻¹ * (↑√Real.pi)⁻¹) * (↑Q.ξ * (↑n ! * 2 ^ n * ↑√Real.pi)) = 1
field_simp All goals completed! 🐙The eigenfunctions of the quantum harmonic oscillator are orthogonal.
lemma eigenfunction_orthogonal {n p : ℕ} (hnp : n ≠ p) :
⟪HilbertSpace.mk (Q.eigenfunction_memHS n),
HilbertSpace.mk (Q.eigenfunction_memHS p)⟫_ℂ = 0 := by Q:HarmonicOscillatorn:ℕp:ℕhnp:n ≠ p⊢ ⟪HilbertSpace.mk ⋯, HilbertSpace.mk ⋯⟫_ℂ = 0
rw [inner_mk_mk Q:HarmonicOscillatorn:ℕp:ℕhnp:n ≠ p⊢ ∫ (x : ℝ), (starRingEnd ℂ) (Q.eigenfunction n x) * Q.eigenfunction p x = 0 Q:HarmonicOscillatorn:ℕp:ℕhnp:n ≠ p⊢ ∫ (x : ℝ), (starRingEnd ℂ) (Q.eigenfunction n x) * Q.eigenfunction p x = 0] Q:HarmonicOscillatorn:ℕp:ℕhnp:n ≠ p⊢ ∫ (x : ℝ), (starRingEnd ℂ) (Q.eigenfunction n x) * Q.eigenfunction p x = 0
conv_lhs =>
enter [2, x] Q:HarmonicOscillatorn:ℕp:ℕhnp:n ≠ px:ℝ| (starRingEnd ℂ) (Q.eigenfunction n x) * Q.eigenfunction p x
rw [eigenfunction_conj, Q.eigenfunction_mul n p] Q:HarmonicOscillatorn:ℕp:ℕhnp:n ≠ px:ℝ| 1 / ↑√(2 ^ n * ↑n !) * 1 / ↑√(2 ^ p * ↑p !) * (1 / (↑√Real.pi * ↑Q.ξ)) *
↑((fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) *
(fun x => (Polynomial.aeval x) (physHermite p)) (x / Q.ξ) *
Real.exp (-x ^ 2 / Q.ξ ^ 2))
rw [MeasureTheory.integral_const_mul, Q:HarmonicOscillatorn:ℕp:ℕhnp:n ≠ p⊢ 1 / ↑√(2 ^ n * ↑n !) * 1 / ↑√(2 ^ p * ↑p !) * (1 / (↑√Real.pi * ↑Q.ξ)) *
∫ (a : ℝ),
↑((fun x => (Polynomial.aeval x) (physHermite n)) (a / Q.ξ) *
(fun x => (Polynomial.aeval x) (physHermite p)) (a / Q.ξ) *
Real.exp (-a ^ 2 / Q.ξ ^ 2)) =
0 Q:HarmonicOscillatorn:ℕp:ℕhnp:n ≠ p⊢ 1 / ↑√(2 ^ n * ↑n !) * 1 / ↑√(2 ^ p * ↑p !) * (1 / (↑√Real.pi * ↑Q.ξ)) *
↑(∫ (x : ℝ),
(fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) *
(fun x => (Polynomial.aeval x) (physHermite p)) (x / Q.ξ) *
Real.exp (-x ^ 2 / Q.ξ ^ 2)) =
0 integral_complex_ofReal Q:HarmonicOscillatorn:ℕp:ℕhnp:n ≠ p⊢ 1 / ↑√(2 ^ n * ↑n !) * 1 / ↑√(2 ^ p * ↑p !) * (1 / (↑√Real.pi * ↑Q.ξ)) *
↑(∫ (x : ℝ),
(fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) *
(fun x => (Polynomial.aeval x) (physHermite p)) (x / Q.ξ) *
Real.exp (-x ^ 2 / Q.ξ ^ 2)) =
0 Q:HarmonicOscillatorn:ℕp:ℕhnp:n ≠ p⊢ 1 / ↑√(2 ^ n * ↑n !) * 1 / ↑√(2 ^ p * ↑p !) * (1 / (↑√Real.pi * ↑Q.ξ)) *
↑(∫ (x : ℝ),
(fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) *
(fun x => (Polynomial.aeval x) (physHermite p)) (x / Q.ξ) *
Real.exp (-x ^ 2 / Q.ξ ^ 2)) =
0] Q:HarmonicOscillatorn:ℕp:ℕhnp:n ≠ p⊢ 1 / ↑√(2 ^ n * ↑n !) * 1 / ↑√(2 ^ p * ↑p !) * (1 / (↑√Real.pi * ↑Q.ξ)) *
↑(∫ (x : ℝ),
(fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) *
(fun x => (Polynomial.aeval x) (physHermite p)) (x / Q.ξ) *
Real.exp (-x ^ 2 / Q.ξ ^ 2)) =
0
have hc : (∫ (x : ℝ), (physHermite n (x/Q.ξ) * physHermite p (x/Q.ξ)) * Real.exp (-x ^ 2 / Q.ξ^2))
= ∫ (x : ℝ), (physHermite n (1/Q.ξ * x) * physHermite p (1/Q.ξ * x)) *
Real.exp (- (1/Q.ξ)^2 * x ^ 2) := by Q:HarmonicOscillatorn:ℕp:ℕhnp:n ≠ p⊢ ⟪HilbertSpace.mk ⋯, HilbertSpace.mk ⋯⟫_ℂ = 0 Q:HarmonicOscillatorn:ℕp:ℕhnp:n ≠ phc:∫ (x : ℝ),
(fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) *
(fun x => (Polynomial.aeval x) (physHermite p)) (x / Q.ξ) *
Real.exp (-x ^ 2 / Q.ξ ^ 2) =
∫ (x : ℝ),
(fun x => (Polynomial.aeval x) (physHermite n)) (1 / Q.ξ * x) *
(fun x => (Polynomial.aeval x) (physHermite p)) (1 / Q.ξ * x) *
Real.exp (-(1 / Q.ξ) ^ 2 * x ^ 2)⊢ 1 / ↑√(2 ^ n * ↑n !) * 1 / ↑√(2 ^ p * ↑p !) * (1 / (↑√Real.pi * ↑Q.ξ)) *
↑(∫ (x : ℝ),
(fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) *
(fun x => (Polynomial.aeval x) (physHermite p)) (x / Q.ξ) *
Real.exp (-x ^ 2 / Q.ξ ^ 2)) =
0
congr e_f Q:HarmonicOscillatorn:ℕp:ℕhnp:n ≠ p⊢ (fun x =>
(fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) *
(fun x => (Polynomial.aeval x) (physHermite p)) (x / Q.ξ) *
Real.exp (-x ^ 2 / Q.ξ ^ 2)) =
fun x =>
(fun x => (Polynomial.aeval x) (physHermite n)) (1 / Q.ξ * x) *
(fun x => (Polynomial.aeval x) (physHermite p)) (1 / Q.ξ * x) *
Real.exp (-(1 / Q.ξ) ^ 2 * x ^ 2) Q:HarmonicOscillatorn:ℕp:ℕhnp:n ≠ phc:∫ (x : ℝ),
(fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) *
(fun x => (Polynomial.aeval x) (physHermite p)) (x / Q.ξ) *
Real.exp (-x ^ 2 / Q.ξ ^ 2) =
∫ (x : ℝ),
(fun x => (Polynomial.aeval x) (physHermite n)) (1 / Q.ξ * x) *
(fun x => (Polynomial.aeval x) (physHermite p)) (1 / Q.ξ * x) *
Real.exp (-(1 / Q.ξ) ^ 2 * x ^ 2)⊢ 1 / ↑√(2 ^ n * ↑n !) * 1 / ↑√(2 ^ p * ↑p !) * (1 / (↑√Real.pi * ↑Q.ξ)) *
↑(∫ (x : ℝ),
(fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) *
(fun x => (Polynomial.aeval x) (physHermite p)) (x / Q.ξ) *
Real.exp (-x ^ 2 / Q.ξ ^ 2)) =
0
funext x e_f Q:HarmonicOscillatorn:ℕp:ℕhnp:n ≠ px:ℝ⊢ (fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) * (fun x => (Polynomial.aeval x) (physHermite p)) (x / Q.ξ) *
Real.exp (-x ^ 2 / Q.ξ ^ 2) =
(fun x => (Polynomial.aeval x) (physHermite n)) (1 / Q.ξ * x) *
(fun x => (Polynomial.aeval x) (physHermite p)) (1 / Q.ξ * x) *
Real.exp (-(1 / Q.ξ) ^ 2 * x ^ 2) Q:HarmonicOscillatorn:ℕp:ℕhnp:n ≠ phc:∫ (x : ℝ),
(fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) *
(fun x => (Polynomial.aeval x) (physHermite p)) (x / Q.ξ) *
Real.exp (-x ^ 2 / Q.ξ ^ 2) =
∫ (x : ℝ),
(fun x => (Polynomial.aeval x) (physHermite n)) (1 / Q.ξ * x) *
(fun x => (Polynomial.aeval x) (physHermite p)) (1 / Q.ξ * x) *
Real.exp (-(1 / Q.ξ) ^ 2 * x ^ 2)⊢ 1 / ↑√(2 ^ n * ↑n !) * 1 / ↑√(2 ^ p * ↑p !) * (1 / (↑√Real.pi * ↑Q.ξ)) *
↑(∫ (x : ℝ),
(fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) *
(fun x => (Polynomial.aeval x) (physHermite p)) (x / Q.ξ) *
Real.exp (-x ^ 2 / Q.ξ ^ 2)) =
0
ring_nf Q:HarmonicOscillatorn:ℕp:ℕhnp:n ≠ phc:∫ (x : ℝ),
(fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) *
(fun x => (Polynomial.aeval x) (physHermite p)) (x / Q.ξ) *
Real.exp (-x ^ 2 / Q.ξ ^ 2) =
∫ (x : ℝ),
(fun x => (Polynomial.aeval x) (physHermite n)) (1 / Q.ξ * x) *
(fun x => (Polynomial.aeval x) (physHermite p)) (1 / Q.ξ * x) *
Real.exp (-(1 / Q.ξ) ^ 2 * x ^ 2)⊢ 1 / ↑√(2 ^ n * ↑n !) * 1 / ↑√(2 ^ p * ↑p !) * (1 / (↑√Real.pi * ↑Q.ξ)) *
↑(∫ (x : ℝ),
(fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) *
(fun x => (Polynomial.aeval x) (physHermite p)) (x / Q.ξ) *
Real.exp (-x ^ 2 / Q.ξ ^ 2)) =
0 Q:HarmonicOscillatorn:ℕp:ℕhnp:n ≠ phc:∫ (x : ℝ),
(fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) *
(fun x => (Polynomial.aeval x) (physHermite p)) (x / Q.ξ) *
Real.exp (-x ^ 2 / Q.ξ ^ 2) =
∫ (x : ℝ),
(fun x => (Polynomial.aeval x) (physHermite n)) (1 / Q.ξ * x) *
(fun x => (Polynomial.aeval x) (physHermite p)) (1 / Q.ξ * x) *
Real.exp (-(1 / Q.ξ) ^ 2 * x ^ 2)⊢ 1 / ↑√(2 ^ n * ↑n !) * 1 / ↑√(2 ^ p * ↑p !) * (1 / (↑√Real.pi * ↑Q.ξ)) *
↑(∫ (x : ℝ),
(fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) *
(fun x => (Polynomial.aeval x) (physHermite p)) (x / Q.ξ) *
Real.exp (-x ^ 2 / Q.ξ ^ 2)) =
0
rw [hc, Q:HarmonicOscillatorn:ℕp:ℕhnp:n ≠ phc:∫ (x : ℝ),
(fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) *
(fun x => (Polynomial.aeval x) (physHermite p)) (x / Q.ξ) *
Real.exp (-x ^ 2 / Q.ξ ^ 2) =
∫ (x : ℝ),
(fun x => (Polynomial.aeval x) (physHermite n)) (1 / Q.ξ * x) *
(fun x => (Polynomial.aeval x) (physHermite p)) (1 / Q.ξ * x) *
Real.exp (-(1 / Q.ξ) ^ 2 * x ^ 2)⊢ 1 / ↑√(2 ^ n * ↑n !) * 1 / ↑√(2 ^ p * ↑p !) * (1 / (↑√Real.pi * ↑Q.ξ)) *
↑(∫ (x : ℝ),
(fun x => (Polynomial.aeval x) (physHermite n)) (1 / Q.ξ * x) *
(fun x => (Polynomial.aeval x) (physHermite p)) (1 / Q.ξ * x) *
Real.exp (-(1 / Q.ξ) ^ 2 * x ^ 2)) =
0 Q:HarmonicOscillatorn:ℕp:ℕhnp:n ≠ phc:∫ (x : ℝ),
(fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) *
(fun x => (Polynomial.aeval x) (physHermite p)) (x / Q.ξ) *
Real.exp (-x ^ 2 / Q.ξ ^ 2) =
∫ (x : ℝ),
(fun x => (Polynomial.aeval x) (physHermite n)) (1 / Q.ξ * x) *
(fun x => (Polynomial.aeval x) (physHermite p)) (1 / Q.ξ * x) *
Real.exp (-(1 / Q.ξ) ^ 2 * x ^ 2)⊢ 1 / ↑√(2 ^ n * ↑n !) * 1 / ↑√(2 ^ p * ↑p !) * (1 / (↑√Real.pi * ↑Q.ξ)) * ↑0 = 0 physHermite_orthogonal_cons hnp Q:HarmonicOscillatorn:ℕp:ℕhnp:n ≠ phc:∫ (x : ℝ),
(fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) *
(fun x => (Polynomial.aeval x) (physHermite p)) (x / Q.ξ) *
Real.exp (-x ^ 2 / Q.ξ ^ 2) =
∫ (x : ℝ),
(fun x => (Polynomial.aeval x) (physHermite n)) (1 / Q.ξ * x) *
(fun x => (Polynomial.aeval x) (physHermite p)) (1 / Q.ξ * x) *
Real.exp (-(1 / Q.ξ) ^ 2 * x ^ 2)⊢ 1 / ↑√(2 ^ n * ↑n !) * 1 / ↑√(2 ^ p * ↑p !) * (1 / (↑√Real.pi * ↑Q.ξ)) * ↑0 = 0 Q:HarmonicOscillatorn:ℕp:ℕhnp:n ≠ phc:∫ (x : ℝ),
(fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) *
(fun x => (Polynomial.aeval x) (physHermite p)) (x / Q.ξ) *
Real.exp (-x ^ 2 / Q.ξ ^ 2) =
∫ (x : ℝ),
(fun x => (Polynomial.aeval x) (physHermite n)) (1 / Q.ξ * x) *
(fun x => (Polynomial.aeval x) (physHermite p)) (1 / Q.ξ * x) *
Real.exp (-(1 / Q.ξ) ^ 2 * x ^ 2)⊢ 1 / ↑√(2 ^ n * ↑n !) * 1 / ↑√(2 ^ p * ↑p !) * (1 / (↑√Real.pi * ↑Q.ξ)) * ↑0 = 0] Q:HarmonicOscillatorn:ℕp:ℕhnp:n ≠ phc:∫ (x : ℝ),
(fun x => (Polynomial.aeval x) (physHermite n)) (x / Q.ξ) *
(fun x => (Polynomial.aeval x) (physHermite p)) (x / Q.ξ) *
Real.exp (-x ^ 2 / Q.ξ ^ 2) =
∫ (x : ℝ),
(fun x => (Polynomial.aeval x) (physHermite n)) (1 / Q.ξ * x) *
(fun x => (Polynomial.aeval x) (physHermite p)) (1 / Q.ξ * x) *
Real.exp (-(1 / Q.ξ) ^ 2 * x ^ 2)⊢ 1 / ↑√(2 ^ n * ↑n !) * 1 / ↑√(2 ^ p * ↑p !) * (1 / (↑√Real.pi * ↑Q.ξ)) * ↑0 = 0
simp only [ofNat_nonneg, pow_nonneg, Real.sqrt_mul, Complex.ofReal_mul, one_div, mul_inv_rev,
mul_one, Complex.ofReal_zero, mul_zero] All goals completed! 🐙The eigenfunctions are orthonormal within the Hilbert space.
lemma eigenfunction_orthonormal :
Orthonormal ℂ (fun n => HilbertSpace.mk (Q.eigenfunction_memHS n)) := by Q:HarmonicOscillator⊢ Orthonormal ℂ fun n => HilbertSpace.mk ⋯
rw [orthonormal_iff_ite Q:HarmonicOscillator⊢ ∀ (i j : ℕ), ⟪HilbertSpace.mk ⋯, HilbertSpace.mk ⋯⟫_ℂ = if i = j then 1 else 0 Q:HarmonicOscillator⊢ ∀ (i j : ℕ), ⟪HilbertSpace.mk ⋯, HilbertSpace.mk ⋯⟫_ℂ = if i = j then 1 else 0] Q:HarmonicOscillator⊢ ∀ (i j : ℕ), ⟪HilbertSpace.mk ⋯, HilbertSpace.mk ⋯⟫_ℂ = if i = j then 1 else 0
intro n p Q:HarmonicOscillatorn:ℕp:ℕ⊢ ⟪HilbertSpace.mk ⋯, HilbertSpace.mk ⋯⟫_ℂ = if n = p then 1 else 0
by_cases hnp : n = p pos Q:HarmonicOscillatorn:ℕp:ℕhnp:n = p⊢ ⟪HilbertSpace.mk ⋯, HilbertSpace.mk ⋯⟫_ℂ = if n = p then 1 else 0neg Q:HarmonicOscillatorn:ℕp:ℕhnp:¬n = p⊢ ⟪HilbertSpace.mk ⋯, HilbertSpace.mk ⋯⟫_ℂ = if n = p then 1 else 0
· pos Q:HarmonicOscillatorn:ℕp:ℕhnp:n = p⊢ ⟪HilbertSpace.mk ⋯, HilbertSpace.mk ⋯⟫_ℂ = if n = p then 1 else 0 simp only [hnp, reduceIte] pos Q:HarmonicOscillatorn:ℕp:ℕhnp:n = p⊢ ⟪HilbertSpace.mk ⋯, HilbertSpace.mk ⋯⟫_ℂ = 1
exact Q.eigenfunction_normalized p All goals completed! 🐙
· neg Q:HarmonicOscillatorn:ℕp:ℕhnp:¬n = p⊢ ⟪HilbertSpace.mk ⋯, HilbertSpace.mk ⋯⟫_ℂ = if n = p then 1 else 0 simp only [hnp, reduceIte] neg Q:HarmonicOscillatorn:ℕp:ℕhnp:¬n = p⊢ ⟪HilbertSpace.mk ⋯, HilbertSpace.mk ⋯⟫_ℂ = 0
exact Q.eigenfunction_orthogonal hnp All goals completed! 🐙The eigenfunctions are linearly independent.
lemma eigenfunction_linearIndependent :
LinearIndependent ℂ (fun n => HilbertSpace.mk (Q.eigenfunction_memHS n)) :=
Q.eigenfunction_orthonormal.linearIndependent