Imports
/-
Copyright (c) 2026 Bjørn Kjos-Hanssen. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Bjørn Kjos-Hanssen
-/
module
public import Mathlib.Data.Matrix.PEquiv
public import Mathlib.Probability.Distributions.Poisson.Basic
public import Mathlib.Analysis.Normed.Lp.lpSpaceQuantum harmonic oscillator
Annihilation operator.
def a (x : ℕ → ℂ) : ℕ → ℂ := fun n => √(n + 1) * x (n + 1)def aLin : (ℕ → ℂ) →ₗ[ℂ] (ℕ → ℂ) := {
toFun := a
map_add' := ⊢ ∀ (x y : ℕ → ℂ), a (x + y) = a x + a y
⊢ ∀ (x y : ℕ → ℂ),
(fun n => ↑√(↑n + 1) * (x + y) (n + 1)) = (fun n => ↑√(↑n + 1) * x (n + 1)) + fun n => ↑√(↑n + 1) * y (n + 1)
x:ℕ → ℂy:ℕ → ℂ⊢ (fun n => ↑√(↑n + 1) * (x + y) (n + 1)) = (fun n => ↑√(↑n + 1) * x (n + 1)) + fun n => ↑√(↑n + 1) * y (n + 1)
x:ℕ → ℂy:ℕ → ℂn:ℕ⊢ ↑√(↑n + 1) * (x + y) (n + 1) = ((fun n => ↑√(↑n + 1) * x (n + 1)) + fun n => ↑√(↑n + 1) * y (n + 1)) n
x:ℕ → ℂy:ℕ → ℂn:ℕ⊢ ↑√(↑n + 1) * (x (n + 1) + y (n + 1)) = ↑√(↑n + 1) * x (n + 1) + ↑√(↑n + 1) * y (n + 1)
All goals completed! 🐙
map_smul' := ⊢ ∀ (m : ℂ) (x : ℕ → ℂ), a (m • x) = (RingHom.id ℂ) m • a x
m:ℂx:ℕ → ℂ⊢ a (m • x) = (RingHom.id ℂ) m • a x
m:ℂx:ℕ → ℂ⊢ (fun n => ↑√(↑n + 1) * (m • x) (n + 1)) = (RingHom.id ℂ) m • fun n => ↑√(↑n + 1) * x (n + 1)
m:ℂx:ℕ → ℂn:ℕ⊢ ↑√(↑n + 1) * (m • x) (n + 1) = ((RingHom.id ℂ) m • fun n => ↑√(↑n + 1) * x (n + 1)) n
m:ℂx:ℕ → ℂn:ℕ⊢ ↑√(↑n + 1) * (m * x (n + 1)) = m * (↑√(↑n + 1) * x (n + 1))
All goals completed! 🐙
}Creation operator.
def a_dag (x : ℕ → ℂ) : ℕ → ℂ := fun n => ite (n = 0) 0 (√n * x (n - 1))def a_dagLin : (ℕ → ℂ) →ₗ[ℂ] (ℕ → ℂ) := {
toFun := a_dag
map_add' := ⊢ ∀ (x y : ℕ → ℂ), a_dag (x + y) = a_dag x + a_dag y
⊢ ∀ (x y : ℕ → ℂ),
(fun n => if n = 0 then 0 else ↑√↑n * (x + y) (n - 1)) =
(fun n => if n = 0 then 0 else ↑√↑n * x (n - 1)) + fun n => if n = 0 then 0 else ↑√↑n * y (n - 1)
x:ℕ → ℂy:ℕ → ℂ⊢ (fun n => if n = 0 then 0 else ↑√↑n * (x + y) (n - 1)) =
(fun n => if n = 0 then 0 else ↑√↑n * x (n - 1)) + fun n => if n = 0 then 0 else ↑√↑n * y (n - 1)
x:ℕ → ℂy:ℕ → ℂn:ℕ⊢ (if n = 0 then 0 else ↑√↑n * (x + y) (n - 1)) =
((fun n => if n = 0 then 0 else ↑√↑n * x (n - 1)) + fun n => if n = 0 then 0 else ↑√↑n * y (n - 1)) n
x:ℕ → ℂy:ℕ → ℂn:ℕ⊢ (if n = 0 then 0 else ↑√↑n * (x (n - 1) + y (n - 1))) =
(if n = 0 then 0 else ↑√↑n * x (n - 1)) + if n = 0 then 0 else ↑√↑n * y (n - 1)
x:ℕ → ℂy:ℕ → ℂn:ℕ⊢ (if n = 0 then 0 else ↑√↑n * x (n - 1) + ↑√↑n * y (n - 1)) =
(if n = 0 then 0 else ↑√↑n * x (n - 1)) + if n = 0 then 0 else ↑√↑n * y (n - 1)
x:ℕ → ℂy:ℕ → ℂn:ℕh✝:n = 0⊢ 0 = 0 + 0x:ℕ → ℂy:ℕ → ℂn:ℕh✝:¬n = 0⊢ ↑√↑n * x (n - 1) + ↑√↑n * y (n - 1) = ↑√↑n * x (n - 1) + ↑√↑n * y (n - 1) x:ℕ → ℂy:ℕ → ℂn:ℕh✝:n = 0⊢ 0 = 0 + 0x:ℕ → ℂy:ℕ → ℂn:ℕh✝:¬n = 0⊢ ↑√↑n * x (n - 1) + ↑√↑n * y (n - 1) = ↑√↑n * x (n - 1) + ↑√↑n * y (n - 1) All goals completed! 🐙
map_smul' := ⊢ ∀ (m : ℂ) (x : ℕ → ℂ), a_dag (m • x) = (RingHom.id ℂ) m • a_dag x
m:ℂx:ℕ → ℂ⊢ a_dag (m • x) = (RingHom.id ℂ) m • a_dag x
m:ℂx:ℕ → ℂ⊢ (fun n => if n = 0 then 0 else ↑√↑n * (m • x) (n - 1)) =
(RingHom.id ℂ) m • fun n => if n = 0 then 0 else ↑√↑n * x (n - 1)
m:ℂx:ℕ → ℂn:ℕ⊢ (if n = 0 then 0 else ↑√↑n * (m • x) (n - 1)) = ((RingHom.id ℂ) m • fun n => if n = 0 then 0 else ↑√↑n * x (n - 1)) n
m:ℂx:ℕ → ℂn:ℕ⊢ (if n = 0 then 0 else ↑√↑n * (m * x (n - 1))) = if n = 0 then 0 else m * (↑√↑n * x (n - 1))
All goals completed! 🐙
}def ε (n : ℕ) (c : ℂ) : ℕ → ℂ := fun i => ite (i = n) c 0Verify that a_dag really is the transpose of a.
pos i:ℕj:ℕ_✝:¬j = 0_:j - 1 = ig₃:i + 1 = j⊢ ↑√↑(i + 1) = (starRingEnd ℂ) ↑√(↑i + 1);simp All goals completed! 🐙Verify that a |n + 1⟩ = √(n + 1) |n ⟩
lemma verify_a (n : ℕ) :
a (ε (n + 1) 1) =
ε n (√(n + 1)) := by n:ℕ⊢ a (ε (n + 1) 1) = ε n ↑√(↑n + 1)
unfold a ε n:ℕ⊢ (fun n_1 => ↑√(↑n_1 + 1) * if n_1 + 1 = n + 1 then 1 else 0) = fun i => if i = n then ↑√(↑n + 1) else 0
ext i n:ℕi:ℕ⊢ (↑√(↑i + 1) * if i + 1 = n + 1 then 1 else 0) = if i = n then ↑√(↑n + 1) else 0
simp only [Nat.add_right_cancel_iff, mul_ite, mul_one, mul_zero] n:ℕi:ℕ⊢ (if i = n then ↑√(↑i + 1) else 0) = if i = n then ↑√(↑n + 1) else 0
split_ifs with g₀ pos n:ℕi:ℕg₀:i = n⊢ ↑√(↑i + 1) = ↑√(↑n + 1)neg n:ℕi:ℕg₀:¬i = n⊢ 0 = 0
· pos n:ℕi:ℕg₀:i = n⊢ ↑√(↑i + 1) = ↑√(↑n + 1) rw [g₀ pos n:ℕi:ℕg₀:i = n⊢ ↑√(↑n + 1) = ↑√(↑n + 1) All goals completed! 🐙] All goals completed! 🐙
· neg n:ℕi:ℕg₀:¬i = n⊢ 0 = 0 rfl All goals completed! 🐙Verify that a† ∣n⟩ = √(n+1) ∣n+1⟩.
lemma verify_a_dag (n : ℕ) :
a_dag (ε n 1) = ε (n + 1) (√(n + 1)) := by n:ℕ⊢ a_dag (ε n 1) = ε (n + 1) ↑√(↑n + 1)
unfold a_dag ε n:ℕ⊢ (fun n_1 => if n_1 = 0 then 0 else ↑√↑n_1 * if n_1 - 1 = n then 1 else 0) = fun i => if i = n + 1 then ↑√(↑n + 1) else 0
ext i n:ℕi:ℕ⊢ (if i = 0 then 0 else ↑√↑i * if i - 1 = n then 1 else 0) = if i = n + 1 then ↑√(↑n + 1) else 0
split_ifs with _ _ _ h pos n:ℕi:ℕ_✝:i = 0_:i = n + 1⊢ 0 = ↑√(↑n + 1)neg n:ℕi:ℕ_✝:i = 0_:¬i = n + 1⊢ 0 = 0pos n:ℕi:ℕ_✝:¬i = 0_:i - 1 = nh:i = n + 1⊢ ↑√↑i * 1 = ↑√(↑n + 1)neg n:ℕi:ℕ_✝:¬i = 0_:i - 1 = nh:¬i = n + 1⊢ ↑√↑i * 1 = 0pos n:ℕi:ℕ_✝:¬i = 0_:¬i - 1 = nh✝:i = n + 1⊢ ↑√↑i * 0 = ↑√(↑n + 1)neg n:ℕi:ℕ_✝:¬i = 0_:¬i - 1 = nh✝:¬i = n + 1⊢ ↑√↑i * 0 = 0
all_goals try omega All goals completed! 🐙
· neg n:ℕi:ℕ_✝:i = 0_:¬i = n + 1⊢ 0 = 0 rfl All goals completed! 🐙
· pos n:ℕi:ℕ_✝:¬i = 0_:i - 1 = nh:i = n + 1⊢ ↑√↑i * 1 = ↑√(↑n + 1) rw [h pos n:ℕi:ℕ_✝:¬i = 0_:i - 1 = nh:i = n + 1⊢ ↑√↑(n + 1) * 1 = ↑√(↑n + 1) pos n:ℕi:ℕ_✝:¬i = 0_:i - 1 = nh:i = n + 1⊢ ↑√↑(n + 1) * 1 = ↑√(↑n + 1)] pos n:ℕi:ℕ_✝:¬i = 0_:i - 1 = nh:i = n + 1⊢ ↑√↑(n + 1) * 1 = ↑√(↑n + 1); simp All goals completed! 🐙
· neg n:ℕi:ℕ_✝:¬i = 0_:¬i - 1 = nh✝:¬i = n + 1⊢ ↑√↑i * 0 = 0 simp All goals completed! 🐙
lemma verify_a_dag_a (n : ℕ) (x : ℕ → ℂ) :
a_dag (a x) n = n * x n := by n:ℕx:ℕ → ℂ⊢ a_dag (a x) n = ↑n * x n
unfold a_dag a n:ℕx:ℕ → ℂ⊢ (if n = 0 then 0 else ↑√↑n * (↑√(↑(n - 1) + 1) * x (n - 1 + 1))) = ↑n * x n
split_ifs with g pos n:ℕx:ℕ → ℂg:n = 0⊢ 0 = ↑n * x nneg n:ℕx:ℕ → ℂg:¬n = 0⊢ ↑√↑n * (↑√(↑(n - 1) + 1) * x (n - 1 + 1)) = ↑n * x n
· pos n:ℕx:ℕ → ℂg:n = 0⊢ 0 = ↑n * x n rw [g pos n:ℕx:ℕ → ℂg:n = 0⊢ 0 = ↑0 * x 0 pos n:ℕx:ℕ → ℂg:n = 0⊢ 0 = ↑0 * x 0] pos n:ℕx:ℕ → ℂg:n = 0⊢ 0 = ↑0 * x 0;simp All goals completed! 🐙
· neg n:ℕx:ℕ → ℂg:¬n = 0⊢ ↑√↑n * (↑√(↑(n - 1) + 1) * x (n - 1 + 1)) = ↑n * x n have h : n - 1 + 1 = n := by n:ℕx:ℕ → ℂ⊢ a_dag (a x) n = ↑n * x n neg n:ℕx:ℕ → ℂg:¬n = 0h:n - 1 + 1 = n⊢ ↑√↑n * (↑√(↑(n - 1) + 1) * x (n - 1 + 1)) = ↑n * x n omeganeg n:ℕx:ℕ → ℂg:¬n = 0h:n - 1 + 1 = n⊢ ↑√↑n * (↑√(↑(n - 1) + 1) * x (n - 1 + 1)) = ↑n * x nneg n:ℕx:ℕ → ℂg:¬n = 0h:n - 1 + 1 = n⊢ ↑√↑n * (↑√(↑(n - 1) + 1) * x (n - 1 + 1)) = ↑n * x n
repeat rw [h neg n:ℕx:ℕ → ℂg:¬n = 0h:n - 1 + 1 = n⊢ ↑√↑n * (↑√(↑(n - 1) + 1) * x n) = ↑n * x n neg n:ℕx:ℕ → ℂg:¬n = 0h:n - 1 + 1 = n⊢ ↑√↑n * (↑√(↑(n - 1) + 1) * x n) = ↑n * x n]neg n:ℕx:ℕ → ℂg:¬n = 0h:n - 1 + 1 = n⊢ ↑√↑n * (↑√(↑(n - 1) + 1) * x n) = ↑n * x n
norm_cast neg n:ℕx:ℕ → ℂg:¬n = 0h:n - 1 + 1 = n⊢ ↑√↑n * (↑√↑(n - 1 + 1) * x n) = ↑n * x n
rw [h neg n:ℕx:ℕ → ℂg:¬n = 0h:n - 1 + 1 = n⊢ ↑√↑n * (↑√↑n * x n) = ↑n * x n neg n:ℕx:ℕ → ℂg:¬n = 0h:n - 1 + 1 = n⊢ ↑√↑n * (↑√↑n * x n) = ↑n * x n]neg n:ℕx:ℕ → ℂg:¬n = 0h:n - 1 + 1 = n⊢ ↑√↑n * (↑√↑n * x n) = ↑n * x n
rw [← mul_assoc neg n:ℕx:ℕ → ℂg:¬n = 0h:n - 1 + 1 = n⊢ ↑√↑n * ↑√↑n * x n = ↑n * x n neg n:ℕx:ℕ → ℂg:¬n = 0h:n - 1 + 1 = n⊢ ↑√↑n * ↑√↑n * x n = ↑n * x n]neg n:ℕx:ℕ → ℂg:¬n = 0h:n - 1 + 1 = n⊢ ↑√↑n * ↑√↑n * x n = ↑n * x n
congr neg.e_a n:ℕx:ℕ → ℂg:¬n = 0h:n - 1 + 1 = n⊢ ↑√↑n * ↑√↑n = ↑n
norm_cast neg.e_a n:ℕx:ℕ → ℂg:¬n = 0h:n - 1 + 1 = n⊢ √↑n * √↑n = ↑n
refine Real.mul_self_sqrt ?_ neg.e_a n:ℕx:ℕ → ℂg:¬n = 0h:n - 1 + 1 = n⊢ 0 ≤ ↑n
simp All goals completed! 🐙
lemma verify_a_a_dag (n : ℕ) (x : ℕ → ℂ) :
a (a_dag x) n = (n + 1) * x n := by n:ℕx:ℕ → ℂ⊢ a (a_dag x) n = (↑n + 1) * x n
unfold a_dag a n:ℕx:ℕ → ℂ⊢ ↑√(↑n + 1) * (fun n => if n = 0 then 0 else ↑√↑n * x (n - 1)) (n + 1) = (↑n + 1) * x n
simp only [Nat.add_eq_zero_iff, one_ne_zero, and_false, ↓reduceIte, Nat.cast_add, Nat.cast_one,
add_tsub_cancel_right] n:ℕx:ℕ → ℂ⊢ ↑√(↑n + 1) * (↑√(↑n + 1) * x n) = (↑n + 1) * x n
rw [← mul_assoc n:ℕx:ℕ → ℂ⊢ ↑√(↑n + 1) * ↑√(↑n + 1) * x n = (↑n + 1) * x n n:ℕx:ℕ → ℂ⊢ ↑√(↑n + 1) * ↑√(↑n + 1) * x n = (↑n + 1) * x n] n:ℕx:ℕ → ℂ⊢ ↑√(↑n + 1) * ↑√(↑n + 1) * x n = (↑n + 1) * x n
congr e_a n:ℕx:ℕ → ℂ⊢ ↑√(↑n + 1) * ↑√(↑n + 1) = ↑n + 1
norm_cast e_a n:ℕx:ℕ → ℂ⊢ √↑(n + 1) * √↑(n + 1) = ↑(n + 1)
refine Real.mul_self_sqrt ?_ e_a n:ℕx:ℕ → ℂ⊢ 0 ≤ ↑(n + 1)
norm_cast e_a n:ℕx:ℕ → ℂ⊢ 0 ≤ n + 1
omega All goals completed! 🐙
lemma commutation_relation :
a ∘ a_dag - a_dag ∘ a = id := by ⊢ a ∘ a_dag - a_dag ∘ a = id
unfold a a_dag ⊢ (((fun x n => ↑√(↑n + 1) * x (n + 1)) ∘ fun x n => if n = 0 then 0 else ↑√↑n * x (n - 1)) -
(fun x n => if n = 0 then 0 else ↑√↑n * x (n - 1)) ∘ fun x n => ↑√(↑n + 1) * x (n + 1)) =
id
ext x i x:ℕ → ℂi:ℕ⊢ (((fun x n => ↑√(↑n + 1) * x (n + 1)) ∘ fun x n => if n = 0 then 0 else ↑√↑n * x (n - 1)) -
(fun x n => if n = 0 then 0 else ↑√↑n * x (n - 1)) ∘ fun x n => ↑√(↑n + 1) * x (n + 1))
x i =
id x i
simp only [Pi.sub_apply, Function.comp_apply, Nat.add_eq_zero_iff, one_ne_zero, and_false,
↓reduceIte, Nat.cast_add, Nat.cast_one, add_tsub_cancel_right, id_eq] x:ℕ → ℂi:ℕ⊢ (↑√(↑i + 1) * (↑√(↑i + 1) * x i) - if i = 0 then 0 else ↑√↑i * (↑√(↑(i - 1) + 1) * x (i - 1 + 1))) = x i
split_ifs with g₀ pos x:ℕ → ℂi:ℕg₀:i = 0⊢ ↑√(↑i + 1) * (↑√(↑i + 1) * x i) - 0 = x ineg x:ℕ → ℂi:ℕg₀:¬i = 0⊢ ↑√(↑i + 1) * (↑√(↑i + 1) * x i) - ↑√↑i * (↑√(↑(i - 1) + 1) * x (i - 1 + 1)) = x i
· pos x:ℕ → ℂi:ℕg₀:i = 0⊢ ↑√(↑i + 1) * (↑√(↑i + 1) * x i) - 0 = x i rw [g₀ pos x:ℕ → ℂi:ℕg₀:i = 0⊢ ↑√(↑0 + 1) * (↑√(↑0 + 1) * x 0) - 0 = x 0 pos x:ℕ → ℂi:ℕg₀:i = 0⊢ ↑√(↑0 + 1) * (↑√(↑0 + 1) * x 0) - 0 = x 0] pos x:ℕ → ℂi:ℕg₀:i = 0⊢ ↑√(↑0 + 1) * (↑√(↑0 + 1) * x 0) - 0 = x 0;simp All goals completed! 🐙
· neg x:ℕ → ℂi:ℕg₀:¬i = 0⊢ ↑√(↑i + 1) * (↑√(↑i + 1) * x i) - ↑√↑i * (↑√(↑(i - 1) + 1) * x (i - 1 + 1)) = x i norm_cast neg x:ℕ → ℂi:ℕg₀:¬i = 0⊢ ↑√↑(i + 1) * (↑√↑(i + 1) * x i) - ↑√↑i * (↑√↑(i - 1 + 1) * x (i - 1 + 1)) = x i
have : i - 1 + 1 = i := by ⊢ a ∘ a_dag - a_dag ∘ a = id neg x:ℕ → ℂi:ℕg₀:¬i = 0this:i - 1 + 1 = i⊢ ↑√↑(i + 1) * (↑√↑(i + 1) * x i) - ↑√↑i * (↑√↑(i - 1 + 1) * x (i - 1 + 1)) = x i omeganeg x:ℕ → ℂi:ℕg₀:¬i = 0this:i - 1 + 1 = i⊢ ↑√↑(i + 1) * (↑√↑(i + 1) * x i) - ↑√↑i * (↑√↑(i - 1 + 1) * x (i - 1 + 1)) = x ineg x:ℕ → ℂi:ℕg₀:¬i = 0this:i - 1 + 1 = i⊢ ↑√↑(i + 1) * (↑√↑(i + 1) * x i) - ↑√↑i * (↑√↑(i - 1 + 1) * x (i - 1 + 1)) = x i
rw [this neg x:ℕ → ℂi:ℕg₀:¬i = 0this:i - 1 + 1 = i⊢ ↑√↑(i + 1) * (↑√↑(i + 1) * x i) - ↑√↑i * (↑√↑i * x i) = x i neg x:ℕ → ℂi:ℕg₀:¬i = 0this:i - 1 + 1 = i⊢ ↑√↑(i + 1) * (↑√↑(i + 1) * x i) - ↑√↑i * (↑√↑i * x i) = x i]neg x:ℕ → ℂi:ℕg₀:¬i = 0this:i - 1 + 1 = i⊢ ↑√↑(i + 1) * (↑√↑(i + 1) * x i) - ↑√↑i * (↑√↑i * x i) = x i
repeat rw [← mul_assoc neg x:ℕ → ℂi:ℕg₀:¬i = 0this:i - 1 + 1 = i⊢ ↑√↑(i + 1) * ↑√↑(i + 1) * x i - ↑√↑i * (↑√↑i * x i) = x i neg x:ℕ → ℂi:ℕg₀:¬i = 0this:i - 1 + 1 = i⊢ ↑√↑(i + 1) * ↑√↑(i + 1) * x i - ↑√↑i * ↑√↑i * x i = x i] neg x:ℕ → ℂi:ℕg₀:¬i = 0this:i - 1 + 1 = i⊢ ↑√↑(i + 1) * ↑√↑(i + 1) * x i - ↑√↑i * (↑√↑i * x i) = x ineg x:ℕ → ℂi:ℕg₀:¬i = 0this:i - 1 + 1 = i⊢ ↑√↑(i + 1) * ↑√↑(i + 1) * x i - ↑√↑i * ↑√↑i * x i = x ineg x:ℕ → ℂi:ℕg₀:¬i = 0this:i - 1 + 1 = i⊢ ↑√↑(i + 1) * ↑√↑(i + 1) * x i - ↑√↑i * ↑√↑i * x i = x i
have : (i + 1) * x i - i * x i = x i := by ⊢ a ∘ a_dag - a_dag ∘ a = id neg x:ℕ → ℂi:ℕg₀:¬i = 0this✝:i - 1 + 1 = ithis:(↑i + 1) * x i - ↑i * x i = x i⊢ ↑√↑(i + 1) * ↑√↑(i + 1) * x i - ↑√↑i * ↑√↑i * x i = x i
ring_nfneg x:ℕ → ℂi:ℕg₀:¬i = 0this✝:i - 1 + 1 = ithis:(↑i + 1) * x i - ↑i * x i = x i⊢ ↑√↑(i + 1) * ↑√↑(i + 1) * x i - ↑√↑i * ↑√↑i * x i = x ineg x:ℕ → ℂi:ℕg₀:¬i = 0this✝:i - 1 + 1 = ithis:(↑i + 1) * x i - ↑i * x i = x i⊢ ↑√↑(i + 1) * ↑√↑(i + 1) * x i - ↑√↑i * ↑√↑i * x i = x i
rw [← this neg x:ℕ → ℂi:ℕg₀:¬i = 0this✝:i - 1 + 1 = ithis:(↑i + 1) * x i - ↑i * x i = x i⊢ ↑√↑(i + 1) * ↑√↑(i + 1) * ((↑i + 1) * x i - ↑i * x i) - ↑√↑i * ↑√↑i * ((↑i + 1) * x i - ↑i * x i) =
(↑i + 1) * x i - ↑i * x i neg x:ℕ → ℂi:ℕg₀:¬i = 0this✝:i - 1 + 1 = ithis:(↑i + 1) * x i - ↑i * x i = x i⊢ ↑√↑(i + 1) * ↑√↑(i + 1) * ((↑i + 1) * x i - ↑i * x i) - ↑√↑i * ↑√↑i * ((↑i + 1) * x i - ↑i * x i) =
(↑i + 1) * x i - ↑i * x i]neg x:ℕ → ℂi:ℕg₀:¬i = 0this✝:i - 1 + 1 = ithis:(↑i + 1) * x i - ↑i * x i = x i⊢ ↑√↑(i + 1) * ↑√↑(i + 1) * ((↑i + 1) * x i - ↑i * x i) - ↑√↑i * ↑√↑i * ((↑i + 1) * x i - ↑i * x i) =
(↑i + 1) * x i - ↑i * x i
congr neg.e_a.e_a x:ℕ → ℂi:ℕg₀:¬i = 0this✝:i - 1 + 1 = ithis:(↑i + 1) * x i - ↑i * x i = x i⊢ ↑√↑(i + 1) * ↑√↑(i + 1) = ↑i + 1neg.e_a.e_a x:ℕ → ℂi:ℕg₀:¬i = 0this✝:i - 1 + 1 = ithis:(↑i + 1) * x i - ↑i * x i = x i⊢ ↑√↑i * ↑√↑i = ↑i
· neg.e_a.e_a x:ℕ → ℂi:ℕg₀:¬i = 0this✝:i - 1 + 1 = ithis:(↑i + 1) * x i - ↑i * x i = x i⊢ ↑√↑(i + 1) * ↑√↑(i + 1) = ↑i + 1 norm_cast neg.e_a.e_a x:ℕ → ℂi:ℕg₀:¬i = 0this✝:i - 1 + 1 = ithis:(↑i + 1) * x i - ↑i * x i = x i⊢ √↑(i + 1) * √↑(i + 1) = ↑(i + 1)
refine Real.mul_self_sqrt ?_ neg.e_a.e_a x:ℕ → ℂi:ℕg₀:¬i = 0this✝:i - 1 + 1 = ithis:(↑i + 1) * x i - ↑i * x i = x i⊢ 0 ≤ ↑(i + 1)
linarith All goals completed! 🐙
· neg.e_a.e_a x:ℕ → ℂi:ℕg₀:¬i = 0this✝:i - 1 + 1 = ithis:(↑i + 1) * x i - ↑i * x i = x i⊢ ↑√↑i * ↑√↑i = ↑i norm_cast neg.e_a.e_a x:ℕ → ℂi:ℕg₀:¬i = 0this✝:i - 1 + 1 = ithis:(↑i + 1) * x i - ↑i * x i = x i⊢ √↑i * √↑i = ↑i
refine Real.mul_self_sqrt ?_ neg.e_a.e_a x:ℕ → ℂi:ℕg₀:¬i = 0this✝:i - 1 + 1 = ithis:(↑i + 1) * x i - ↑i * x i = x i⊢ 0 ≤ ↑i
simp All goals completed! 🐙def coherentState (α : ℂ) : ℕ → ℂ :=
fun n : ℕ => Real.exp (-‖α‖^2 / 2) * α ^ n / √(n.factorial)def probabilityOf (n : ℕ) (α : ℂ) : NNReal :=
⟨‖coherentState α n‖^2, by n:ℕα:ℂ⊢ 0 ≤ ‖coherentState α n‖ ^ 2 simp All goals completed! 🐙⟩Coherent state has a Poisson distribution.
lemma probabilityOf_eq_poisson_C (n : ℕ) (α : ℂ) :
let Λ := ⟨‖α‖ ^ 2, sq_nonneg ‖α‖⟩
probabilityOf n α =
ProbabilityTheory.poissonMeasure Λ {n} := by n:ℕα:ℂ⊢ let Λ := ⟨‖α‖ ^ 2, ⋯⟩;
↑(probabilityOf n α) = (ProbabilityTheory.poissonMeasure Λ) {n}
unfold probabilityOf ProbabilityTheory.poissonMeasure coherentState n:ℕα:ℂ⊢ let Λ := ⟨‖α‖ ^ 2, ⋯⟩;
↑⟨‖↑(Real.exp (-‖α‖ ^ 2 / 2)) * α ^ n / ↑√↑n.factorial‖ ^ 2, ⋯⟩ =
(MeasureTheory.Measure.sum fun n =>
ENNReal.ofReal (Real.exp (-↑Λ) * ↑Λ ^ n / ↑n.factorial) • MeasureTheory.Measure.dirac n)
{n}
simp only [Complex.ofReal_exp, Complex.ofReal_div, Complex.ofReal_neg, Complex.ofReal_pow,
Complex.ofReal_ofNat, Complex.norm_div, Complex.norm_mul, norm_pow, Complex.norm_real,
Real.norm_eq_abs, MeasurableSpace.measurableSet_top, MeasureTheory.Measure.sum_apply,
MeasureTheory.Measure.smul_apply, MeasureTheory.Measure.dirac_apply', Set.indicator_singleton,
Pi.one_apply, smul_eq_mul] n:ℕα:ℂ⊢ ↑⟨(‖Complex.exp (-↑‖α‖ ^ 2 / 2)‖ * ‖α‖ ^ n / |√↑n.factorial|) ^ 2, ⋯⟩ =
∑' (i : ℕ), ENNReal.ofReal (Real.exp (-↑⟨‖α‖ ^ 2, ⋯⟩) * ↑⟨‖α‖ ^ 2, ⋯⟩ ^ i / ↑i.factorial) * Pi.single n 1 i
have : |√(n.factorial : ℝ)| = √(n.factorial : ℝ) := by n:ℕα:ℂ⊢ let Λ := ⟨‖α‖ ^ 2, ⋯⟩;
↑(probabilityOf n α) = (ProbabilityTheory.poissonMeasure Λ) {n} n:ℕα:ℂthis:|√↑n.factorial| = √↑n.factorial⊢ ↑⟨(‖Complex.exp (-↑‖α‖ ^ 2 / 2)‖ * ‖α‖ ^ n / |√↑n.factorial|) ^ 2, ⋯⟩ =
∑' (i : ℕ), ENNReal.ofReal (Real.exp (-↑⟨‖α‖ ^ 2, ⋯⟩) * ↑⟨‖α‖ ^ 2, ⋯⟩ ^ i / ↑i.factorial) * Pi.single n 1 i simp n:ℕα:ℂthis:|√↑n.factorial| = √↑n.factorial⊢ ↑⟨(‖Complex.exp (-↑‖α‖ ^ 2 / 2)‖ * ‖α‖ ^ n / |√↑n.factorial|) ^ 2, ⋯⟩ =
∑' (i : ℕ), ENNReal.ofReal (Real.exp (-↑⟨‖α‖ ^ 2, ⋯⟩) * ↑⟨‖α‖ ^ 2, ⋯⟩ ^ i / ↑i.factorial) * Pi.single n 1 i n:ℕα:ℂthis:|√↑n.factorial| = √↑n.factorial⊢ ↑⟨(‖Complex.exp (-↑‖α‖ ^ 2 / 2)‖ * ‖α‖ ^ n / |√↑n.factorial|) ^ 2, ⋯⟩ =
∑' (i : ℕ), ENNReal.ofReal (Real.exp (-↑⟨‖α‖ ^ 2, ⋯⟩) * ↑⟨‖α‖ ^ 2, ⋯⟩ ^ i / ↑i.factorial) * Pi.single n 1 i
simp_rw [ n:ℕα:ℂthis:|√↑n.factorial| = √↑n.factorial⊢ ↑⟨(‖Complex.exp (-↑‖α‖ ^ 2 / 2)‖ * ‖α‖ ^ n / |√↑n.factorial|) ^ 2, ⋯⟩ =
∑' (i : ℕ), ENNReal.ofReal (Real.exp (-↑⟨‖α‖ ^ 2, ⋯⟩) * ↑⟨‖α‖ ^ 2, ⋯⟩ ^ i / ↑i.factorial) * Pi.single n 1 ithis n:ℕα:ℂthis:|√↑n.factorial| = √↑n.factorial⊢ ↑⟨(‖Complex.exp (-↑‖α‖ ^ 2 / 2)‖ * ‖α‖ ^ n / √↑n.factorial) ^ 2, ⋯⟩ =
∑' (i : ℕ), ENNReal.ofReal (Real.exp (-↑⟨‖α‖ ^ 2, ⋯⟩) * ↑⟨‖α‖ ^ 2, ⋯⟩ ^ i / ↑i.factorial) * Pi.single n 1 i]
simp only [Pi.single, Function.update, eq_rec_constant, Pi.zero_apply, dite_eq_ite, mul_ite,
mul_one, mul_zero, tsum_ite_eq] n:ℕα:ℂthis:|√↑n.factorial| = √↑n.factorial⊢ ↑⟨(‖Complex.exp (-↑‖α‖ ^ 2 / 2)‖ * ‖α‖ ^ n / √↑n.factorial) ^ 2, ⋯⟩ =
ENNReal.ofReal (Real.exp (-↑⟨‖α‖ ^ 2, ⋯⟩) * ↑⟨‖α‖ ^ 2, ⋯⟩ ^ n / ↑n.factorial)
simp_rw [ n:ℕα:ℂthis:|√↑n.factorial| = √↑n.factorial⊢ ↑⟨(‖Complex.exp (-↑‖α‖ ^ 2 / 2)‖ * ‖α‖ ^ n / √↑n.factorial) ^ 2, ⋯⟩ =
ENNReal.ofReal (Real.exp (-↑⟨‖α‖ ^ 2, ⋯⟩) * ↑⟨‖α‖ ^ 2, ⋯⟩ ^ n / ↑n.factorial)← mul_div n:ℕα:ℂthis:|√↑n.factorial| = √↑n.factorial⊢ ↑⟨(‖Complex.exp (-↑‖α‖ ^ 2 / 2)‖ * (‖α‖ ^ n / √↑n.factorial)) ^ 2, ⋯⟩ =
ENNReal.ofReal (Real.exp (-↑⟨‖α‖ ^ 2, ⋯⟩) * (↑⟨‖α‖ ^ 2, ⋯⟩ ^ n / ↑n.factorial))]
field_simp n:ℕα:ℂthis:|√↑n.factorial| = √↑n.factorial⊢ ↑⟨‖Complex.exp (-(↑‖α‖ ^ 2 / 2))‖ ^ 2 * (‖α‖ ^ n) ^ 2 / √↑n.factorial ^ 2, ⋯⟩ =
ENNReal.ofReal (Real.exp (-↑⟨‖α‖ ^ 2, ⋯⟩) * ↑⟨‖α‖ ^ 2, ⋯⟩ ^ n / ↑n.factorial)
have : √↑n.factorial ^ 2 = (n.factorial : ℝ) := by n:ℕα:ℂ⊢ let Λ := ⟨‖α‖ ^ 2, ⋯⟩;
↑(probabilityOf n α) = (ProbabilityTheory.poissonMeasure Λ) {n} n:ℕα:ℂthis✝:|√↑n.factorial| = √↑n.factorialthis:√↑n.factorial ^ 2 = ↑n.factorial⊢ ↑⟨‖Complex.exp (-(↑‖α‖ ^ 2 / 2))‖ ^ 2 * (‖α‖ ^ n) ^ 2 / √↑n.factorial ^ 2, ⋯⟩ =
ENNReal.ofReal (Real.exp (-↑⟨‖α‖ ^ 2, ⋯⟩) * ↑⟨‖α‖ ^ 2, ⋯⟩ ^ n / ↑n.factorial)
refine Real.sq_sqrt ?_ n:ℕα:ℂthis:|√↑n.factorial| = √↑n.factorial⊢ 0 ≤ ↑n.factorial n:ℕα:ℂthis✝:|√↑n.factorial| = √↑n.factorialthis:√↑n.factorial ^ 2 = ↑n.factorial⊢ ↑⟨‖Complex.exp (-(↑‖α‖ ^ 2 / 2))‖ ^ 2 * (‖α‖ ^ n) ^ 2 / √↑n.factorial ^ 2, ⋯⟩ =
ENNReal.ofReal (Real.exp (-↑⟨‖α‖ ^ 2, ⋯⟩) * ↑⟨‖α‖ ^ 2, ⋯⟩ ^ n / ↑n.factorial)
simp n:ℕα:ℂthis✝:|√↑n.factorial| = √↑n.factorialthis:√↑n.factorial ^ 2 = ↑n.factorial⊢ ↑⟨‖Complex.exp (-(↑‖α‖ ^ 2 / 2))‖ ^ 2 * (‖α‖ ^ n) ^ 2 / √↑n.factorial ^ 2, ⋯⟩ =
ENNReal.ofReal (Real.exp (-↑⟨‖α‖ ^ 2, ⋯⟩) * ↑⟨‖α‖ ^ 2, ⋯⟩ ^ n / ↑n.factorial) n:ℕα:ℂthis✝:|√↑n.factorial| = √↑n.factorialthis:√↑n.factorial ^ 2 = ↑n.factorial⊢ ↑⟨‖Complex.exp (-(↑‖α‖ ^ 2 / 2))‖ ^ 2 * (‖α‖ ^ n) ^ 2 / √↑n.factorial ^ 2, ⋯⟩ =
ENNReal.ofReal (Real.exp (-↑⟨‖α‖ ^ 2, ⋯⟩) * ↑⟨‖α‖ ^ 2, ⋯⟩ ^ n / ↑n.factorial)
simp_rw [ n:ℕα:ℂthis✝:|√↑n.factorial| = √↑n.factorialthis:√↑n.factorial ^ 2 = ↑n.factorial⊢ ↑⟨‖Complex.exp (-(↑‖α‖ ^ 2 / 2))‖ ^ 2 * (‖α‖ ^ n) ^ 2 / √↑n.factorial ^ 2, ⋯⟩ =
ENNReal.ofReal (Real.exp (-↑⟨‖α‖ ^ 2, ⋯⟩) * ↑⟨‖α‖ ^ 2, ⋯⟩ ^ n / ↑n.factorial)this n:ℕα:ℂthis✝:|√↑n.factorial| = √↑n.factorialthis:√↑n.factorial ^ 2 = ↑n.factorial⊢ ↑⟨‖Complex.exp (-(↑‖α‖ ^ 2 / 2))‖ ^ 2 * (‖α‖ ^ n) ^ 2 / ↑n.factorial, ⋯⟩ =
ENNReal.ofReal (Real.exp (-↑⟨‖α‖ ^ 2, ⋯⟩) * ↑⟨‖α‖ ^ 2, ⋯⟩ ^ n / ↑n.factorial)]
congr n:ℕα:ℂthis✝:|√↑n.factorial| = √↑n.factorialthis:√↑n.factorial ^ 2 = ↑n.factorial⊢ ‖Complex.exp (-(↑‖α‖ ^ 2 / 2))‖ ^ 2 * (‖α‖ ^ n) ^ 2 / ↑n.factorial =
max (Real.exp (-↑⟨‖α‖ ^ 2, ⋯⟩) * ↑⟨‖α‖ ^ 2, ⋯⟩ ^ n / ↑n.factorial) 0
rw [max_eq_left n:ℕα:ℂthis✝:|√↑n.factorial| = √↑n.factorialthis:√↑n.factorial ^ 2 = ↑n.factorial⊢ ‖Complex.exp (-(↑‖α‖ ^ 2 / 2))‖ ^ 2 * (‖α‖ ^ n) ^ 2 / ↑n.factorial =
Real.exp (-↑⟨‖α‖ ^ 2, ⋯⟩) * ↑⟨‖α‖ ^ 2, ⋯⟩ ^ n / ↑n.factorialn:ℕα:ℂthis✝:|√↑n.factorial| = √↑n.factorialthis:√↑n.factorial ^ 2 = ↑n.factorial⊢ 0 ≤ Real.exp (-↑⟨‖α‖ ^ 2, ⋯⟩) * ↑⟨‖α‖ ^ 2, ⋯⟩ ^ n / ↑n.factorial n:ℕα:ℂthis✝:|√↑n.factorial| = √↑n.factorialthis:√↑n.factorial ^ 2 = ↑n.factorial⊢ ‖Complex.exp (-(↑‖α‖ ^ 2 / 2))‖ ^ 2 * (‖α‖ ^ n) ^ 2 / ↑n.factorial =
Real.exp (-↑⟨‖α‖ ^ 2, ⋯⟩) * ↑⟨‖α‖ ^ 2, ⋯⟩ ^ n / ↑n.factorialn:ℕα:ℂthis✝:|√↑n.factorial| = √↑n.factorialthis:√↑n.factorial ^ 2 = ↑n.factorial⊢ 0 ≤ Real.exp (-↑⟨‖α‖ ^ 2, ⋯⟩) * ↑⟨‖α‖ ^ 2, ⋯⟩ ^ n / ↑n.factorial] n:ℕα:ℂthis✝:|√↑n.factorial| = √↑n.factorialthis:√↑n.factorial ^ 2 = ↑n.factorial⊢ ‖Complex.exp (-(↑‖α‖ ^ 2 / 2))‖ ^ 2 * (‖α‖ ^ n) ^ 2 / ↑n.factorial =
Real.exp (-↑⟨‖α‖ ^ 2, ⋯⟩) * ↑⟨‖α‖ ^ 2, ⋯⟩ ^ n / ↑n.factorialn:ℕα:ℂthis✝:|√↑n.factorial| = √↑n.factorialthis:√↑n.factorial ^ 2 = ↑n.factorial⊢ 0 ≤ Real.exp (-↑⟨‖α‖ ^ 2, ⋯⟩) * ↑⟨‖α‖ ^ 2, ⋯⟩ ^ n / ↑n.factorial
· n:ℕα:ℂthis✝:|√↑n.factorial| = √↑n.factorialthis:√↑n.factorial ^ 2 = ↑n.factorial⊢ ‖Complex.exp (-(↑‖α‖ ^ 2 / 2))‖ ^ 2 * (‖α‖ ^ n) ^ 2 / ↑n.factorial =
Real.exp (-↑⟨‖α‖ ^ 2, ⋯⟩) * ↑⟨‖α‖ ^ 2, ⋯⟩ ^ n / ↑n.factorial have (a b : ℝ) (h : a = b) : a / n.factorial = b / n.factorial := by n:ℕα:ℂ⊢ let Λ := ⟨‖α‖ ^ 2, ⋯⟩;
↑(probabilityOf n α) = (ProbabilityTheory.poissonMeasure Λ) {n} n:ℕα:ℂthis✝¹:|√↑n.factorial| = √↑n.factorialthis✝:√↑n.factorial ^ 2 = ↑n.factorialthis:∀ (a b : ℝ), a = b → a / ↑n.factorial = b / ↑n.factorial⊢ ‖Complex.exp (-(↑‖α‖ ^ 2 / 2))‖ ^ 2 * (‖α‖ ^ n) ^ 2 / ↑n.factorial =
Real.exp (-↑⟨‖α‖ ^ 2, ⋯⟩) * ↑⟨‖α‖ ^ 2, ⋯⟩ ^ n / ↑n.factorial
rw [h n:ℕα:ℂthis✝:|√↑n.factorial| = √↑n.factorialthis:√↑n.factorial ^ 2 = ↑n.factoriala:ℝb:ℝh:a = b⊢ b / ↑n.factorial = b / ↑n.factorial n:ℕα:ℂthis✝¹:|√↑n.factorial| = √↑n.factorialthis✝:√↑n.factorial ^ 2 = ↑n.factorialthis:∀ (a b : ℝ), a = b → a / ↑n.factorial = b / ↑n.factorial⊢ ‖Complex.exp (-(↑‖α‖ ^ 2 / 2))‖ ^ 2 * (‖α‖ ^ n) ^ 2 / ↑n.factorial =
Real.exp (-↑⟨‖α‖ ^ 2, ⋯⟩) * ↑⟨‖α‖ ^ 2, ⋯⟩ ^ n / ↑n.factorial] n:ℕα:ℂthis✝¹:|√↑n.factorial| = √↑n.factorialthis✝:√↑n.factorial ^ 2 = ↑n.factorialthis:∀ (a b : ℝ), a = b → a / ↑n.factorial = b / ↑n.factorial⊢ ‖Complex.exp (-(↑‖α‖ ^ 2 / 2))‖ ^ 2 * (‖α‖ ^ n) ^ 2 / ↑n.factorial =
Real.exp (-↑⟨‖α‖ ^ 2, ⋯⟩) * ↑⟨‖α‖ ^ 2, ⋯⟩ ^ n / ↑n.factorial n:ℕα:ℂthis✝¹:|√↑n.factorial| = √↑n.factorialthis✝:√↑n.factorial ^ 2 = ↑n.factorialthis:∀ (a b : ℝ), a = b → a / ↑n.factorial = b / ↑n.factorial⊢ ‖Complex.exp (-(↑‖α‖ ^ 2 / 2))‖ ^ 2 * (‖α‖ ^ n) ^ 2 / ↑n.factorial =
Real.exp (-↑⟨‖α‖ ^ 2, ⋯⟩) * ↑⟨‖α‖ ^ 2, ⋯⟩ ^ n / ↑n.factorial
apply this n:ℕα:ℂthis✝¹:|√↑n.factorial| = √↑n.factorialthis✝:√↑n.factorial ^ 2 = ↑n.factorialthis:∀ (a b : ℝ), a = b → a / ↑n.factorial = b / ↑n.factorial⊢ ‖Complex.exp (-(↑‖α‖ ^ 2 / 2))‖ ^ 2 * (‖α‖ ^ n) ^ 2 = Real.exp (-↑⟨‖α‖ ^ 2, ⋯⟩) * ↑⟨‖α‖ ^ 2, ⋯⟩ ^ n
norm_cast n:ℕα:ℂthis✝¹:|√↑n.factorial| = √↑n.factorialthis✝:√↑n.factorial ^ 2 = ↑n.factorialthis:∀ (a b : ℝ), a = b → a / ↑n.factorial = b / ↑n.factorial⊢ ‖Complex.exp (-(↑(‖α‖ ^ 2) / 2))‖ ^ 2 * (‖α‖ ^ n) ^ 2 = Real.exp (-↑⟨‖α‖ ^ 2, ⋯⟩) * ↑(⟨‖α‖ ^ 2, ⋯⟩ ^ n)
have (a b c d : ℝ) (hab : a = b) (hcd : c = d) :
a * c = b * d := by n:ℕα:ℂ⊢ let Λ := ⟨‖α‖ ^ 2, ⋯⟩;
↑(probabilityOf n α) = (ProbabilityTheory.poissonMeasure Λ) {n} n:ℕα:ℂthis✝²:|√↑n.factorial| = √↑n.factorialthis✝¹:√↑n.factorial ^ 2 = ↑n.factorialthis✝:∀ (a b : ℝ), a = b → a / ↑n.factorial = b / ↑n.factorialthis:∀ (a b c d : ℝ), a = b → c = d → a * c = b * d⊢ ‖Complex.exp (-(↑(‖α‖ ^ 2) / 2))‖ ^ 2 * (‖α‖ ^ n) ^ 2 = Real.exp (-↑⟨‖α‖ ^ 2, ⋯⟩) * ↑(⟨‖α‖ ^ 2, ⋯⟩ ^ n) rw [hab, n:ℕα:ℂthis✝¹:|√↑n.factorial| = √↑n.factorialthis✝:√↑n.factorial ^ 2 = ↑n.factorialthis:∀ (a b : ℝ), a = b → a / ↑n.factorial = b / ↑n.factoriala:ℝb:ℝc:ℝd:ℝhab:a = bhcd:c = d⊢ b * c = b * d n:ℕα:ℂthis✝²:|√↑n.factorial| = √↑n.factorialthis✝¹:√↑n.factorial ^ 2 = ↑n.factorialthis✝:∀ (a b : ℝ), a = b → a / ↑n.factorial = b / ↑n.factorialthis:∀ (a b c d : ℝ), a = b → c = d → a * c = b * d⊢ ‖Complex.exp (-(↑(‖α‖ ^ 2) / 2))‖ ^ 2 * (‖α‖ ^ n) ^ 2 = Real.exp (-↑⟨‖α‖ ^ 2, ⋯⟩) * ↑(⟨‖α‖ ^ 2, ⋯⟩ ^ n)hcd n:ℕα:ℂthis✝¹:|√↑n.factorial| = √↑n.factorialthis✝:√↑n.factorial ^ 2 = ↑n.factorialthis:∀ (a b : ℝ), a = b → a / ↑n.factorial = b / ↑n.factoriala:ℝb:ℝc:ℝd:ℝhab:a = bhcd:c = d⊢ b * d = b * d n:ℕα:ℂthis✝²:|√↑n.factorial| = √↑n.factorialthis✝¹:√↑n.factorial ^ 2 = ↑n.factorialthis✝:∀ (a b : ℝ), a = b → a / ↑n.factorial = b / ↑n.factorialthis:∀ (a b c d : ℝ), a = b → c = d → a * c = b * d⊢ ‖Complex.exp (-(↑(‖α‖ ^ 2) / 2))‖ ^ 2 * (‖α‖ ^ n) ^ 2 = Real.exp (-↑⟨‖α‖ ^ 2, ⋯⟩) * ↑(⟨‖α‖ ^ 2, ⋯⟩ ^ n)] n:ℕα:ℂthis✝²:|√↑n.factorial| = √↑n.factorialthis✝¹:√↑n.factorial ^ 2 = ↑n.factorialthis✝:∀ (a b : ℝ), a = b → a / ↑n.factorial = b / ↑n.factorialthis:∀ (a b c d : ℝ), a = b → c = d → a * c = b * d⊢ ‖Complex.exp (-(↑(‖α‖ ^ 2) / 2))‖ ^ 2 * (‖α‖ ^ n) ^ 2 = Real.exp (-↑⟨‖α‖ ^ 2, ⋯⟩) * ↑(⟨‖α‖ ^ 2, ⋯⟩ ^ n) n:ℕα:ℂthis✝²:|√↑n.factorial| = √↑n.factorialthis✝¹:√↑n.factorial ^ 2 = ↑n.factorialthis✝:∀ (a b : ℝ), a = b → a / ↑n.factorial = b / ↑n.factorialthis:∀ (a b c d : ℝ), a = b → c = d → a * c = b * d⊢ ‖Complex.exp (-(↑(‖α‖ ^ 2) / 2))‖ ^ 2 * (‖α‖ ^ n) ^ 2 = Real.exp (-↑⟨‖α‖ ^ 2, ⋯⟩) * ↑(⟨‖α‖ ^ 2, ⋯⟩ ^ n)
apply this hab n:ℕα:ℂthis✝²:|√↑n.factorial| = √↑n.factorialthis✝¹:√↑n.factorial ^ 2 = ↑n.factorialthis✝:∀ (a b : ℝ), a = b → a / ↑n.factorial = b / ↑n.factorialthis:∀ (a b c d : ℝ), a = b → c = d → a * c = b * d⊢ ‖Complex.exp (-(↑(‖α‖ ^ 2) / 2))‖ ^ 2 = Real.exp (-↑⟨‖α‖ ^ 2, ⋯⟩)hcd n:ℕα:ℂthis✝²:|√↑n.factorial| = √↑n.factorialthis✝¹:√↑n.factorial ^ 2 = ↑n.factorialthis✝:∀ (a b : ℝ), a = b → a / ↑n.factorial = b / ↑n.factorialthis:∀ (a b c d : ℝ), a = b → c = d → a * c = b * d⊢ (‖α‖ ^ n) ^ 2 = ↑(⟨‖α‖ ^ 2, ⋯⟩ ^ n)
· hab n:ℕα:ℂthis✝²:|√↑n.factorial| = √↑n.factorialthis✝¹:√↑n.factorial ^ 2 = ↑n.factorialthis✝:∀ (a b : ℝ), a = b → a / ↑n.factorial = b / ↑n.factorialthis:∀ (a b c d : ℝ), a = b → c = d → a * c = b * d⊢ ‖Complex.exp (-(↑(‖α‖ ^ 2) / 2))‖ ^ 2 = Real.exp (-↑⟨‖α‖ ^ 2, ⋯⟩) norm_cast hab n:ℕα:ℂthis✝²:|√↑n.factorial| = √↑n.factorialthis✝¹:√↑n.factorial ^ 2 = ↑n.factorialthis✝:∀ (a b : ℝ), a = b → a / ↑n.factorial = b / ↑n.factorialthis:∀ (a b c d : ℝ), a = b → c = d → a * c = b * d⊢ ‖Complex.exp (-(↑(‖α‖ ^ 2) / 2))‖ ^ 2 = Real.exp (-↑⟨‖α‖ ^ 2, ⋯⟩)
have : ‖α‖^2 ≥ 0 := by n:ℕα:ℂ⊢ let Λ := ⟨‖α‖ ^ 2, ⋯⟩;
↑(probabilityOf n α) = (ProbabilityTheory.poissonMeasure Λ) {n} hab n:ℕα:ℂthis✝³:|√↑n.factorial| = √↑n.factorialthis✝²:√↑n.factorial ^ 2 = ↑n.factorialthis✝¹:∀ (a b : ℝ), a = b → a / ↑n.factorial = b / ↑n.factorialthis✝:∀ (a b c d : ℝ), a = b → c = d → a * c = b * dthis:‖α‖ ^ 2 ≥ 0⊢ ‖Complex.exp (-(↑(‖α‖ ^ 2) / 2))‖ ^ 2 = Real.exp (-↑⟨‖α‖ ^ 2, ⋯⟩) simphab n:ℕα:ℂthis✝³:|√↑n.factorial| = √↑n.factorialthis✝²:√↑n.factorial ^ 2 = ↑n.factorialthis✝¹:∀ (a b : ℝ), a = b → a / ↑n.factorial = b / ↑n.factorialthis✝:∀ (a b c d : ℝ), a = b → c = d → a * c = b * dthis:‖α‖ ^ 2 ≥ 0⊢ ‖Complex.exp (-(↑(‖α‖ ^ 2) / 2))‖ ^ 2 = Real.exp (-↑⟨‖α‖ ^ 2, ⋯⟩)hab n:ℕα:ℂthis✝³:|√↑n.factorial| = √↑n.factorialthis✝²:√↑n.factorial ^ 2 = ↑n.factorialthis✝¹:∀ (a b : ℝ), a = b → a / ↑n.factorial = b / ↑n.factorialthis✝:∀ (a b c d : ℝ), a = b → c = d → a * c = b * dthis:‖α‖ ^ 2 ≥ 0⊢ ‖Complex.exp (-(↑(‖α‖ ^ 2) / 2))‖ ^ 2 = Real.exp (-↑⟨‖α‖ ^ 2, ⋯⟩)
have (r : ℝ) :
Complex.exp (-(r/2)) = Real.exp (-(r/2)) := by n:ℕα:ℂ⊢ let Λ := ⟨‖α‖ ^ 2, ⋯⟩;
↑(probabilityOf n α) = (ProbabilityTheory.poissonMeasure Λ) {n} hab n:ℕα:ℂthis✝⁴:|√↑n.factorial| = √↑n.factorialthis✝³:√↑n.factorial ^ 2 = ↑n.factorialthis✝²:∀ (a b : ℝ), a = b → a / ↑n.factorial = b / ↑n.factorialthis✝¹:∀ (a b c d : ℝ), a = b → c = d → a * c = b * dthis✝:‖α‖ ^ 2 ≥ 0this:∀ (r : ℝ), Complex.exp (-(↑r / 2)) = ↑(Real.exp (-(r / 2)))⊢ ‖Complex.exp (-(↑(‖α‖ ^ 2) / 2))‖ ^ 2 = Real.exp (-↑⟨‖α‖ ^ 2, ⋯⟩) simphab n:ℕα:ℂthis✝⁴:|√↑n.factorial| = √↑n.factorialthis✝³:√↑n.factorial ^ 2 = ↑n.factorialthis✝²:∀ (a b : ℝ), a = b → a / ↑n.factorial = b / ↑n.factorialthis✝¹:∀ (a b c d : ℝ), a = b → c = d → a * c = b * dthis✝:‖α‖ ^ 2 ≥ 0this:∀ (r : ℝ), Complex.exp (-(↑r / 2)) = ↑(Real.exp (-(r / 2)))⊢ ‖Complex.exp (-(↑(‖α‖ ^ 2) / 2))‖ ^ 2 = Real.exp (-↑⟨‖α‖ ^ 2, ⋯⟩)hab n:ℕα:ℂthis✝⁴:|√↑n.factorial| = √↑n.factorialthis✝³:√↑n.factorial ^ 2 = ↑n.factorialthis✝²:∀ (a b : ℝ), a = b → a / ↑n.factorial = b / ↑n.factorialthis✝¹:∀ (a b c d : ℝ), a = b → c = d → a * c = b * dthis✝:‖α‖ ^ 2 ≥ 0this:∀ (r : ℝ), Complex.exp (-(↑r / 2)) = ↑(Real.exp (-(r / 2)))⊢ ‖Complex.exp (-(↑(‖α‖ ^ 2) / 2))‖ ^ 2 = Real.exp (-↑⟨‖α‖ ^ 2, ⋯⟩)
rw [this hab n:ℕα:ℂthis✝⁴:|√↑n.factorial| = √↑n.factorialthis✝³:√↑n.factorial ^ 2 = ↑n.factorialthis✝²:∀ (a b : ℝ), a = b → a / ↑n.factorial = b / ↑n.factorialthis✝¹:∀ (a b c d : ℝ), a = b → c = d → a * c = b * dthis✝:‖α‖ ^ 2 ≥ 0this:∀ (r : ℝ), Complex.exp (-(↑r / 2)) = ↑(Real.exp (-(r / 2)))⊢ ‖↑(Real.exp (-(‖α‖ ^ 2 / 2)))‖ ^ 2 = Real.exp (-↑⟨‖α‖ ^ 2, ⋯⟩) hab n:ℕα:ℂthis✝⁴:|√↑n.factorial| = √↑n.factorialthis✝³:√↑n.factorial ^ 2 = ↑n.factorialthis✝²:∀ (a b : ℝ), a = b → a / ↑n.factorial = b / ↑n.factorialthis✝¹:∀ (a b c d : ℝ), a = b → c = d → a * c = b * dthis✝:‖α‖ ^ 2 ≥ 0this:∀ (r : ℝ), Complex.exp (-(↑r / 2)) = ↑(Real.exp (-(r / 2)))⊢ ‖↑(Real.exp (-(‖α‖ ^ 2 / 2)))‖ ^ 2 = Real.exp (-↑⟨‖α‖ ^ 2, ⋯⟩)]hab n:ℕα:ℂthis✝⁴:|√↑n.factorial| = √↑n.factorialthis✝³:√↑n.factorial ^ 2 = ↑n.factorialthis✝²:∀ (a b : ℝ), a = b → a / ↑n.factorial = b / ↑n.factorialthis✝¹:∀ (a b c d : ℝ), a = b → c = d → a * c = b * dthis✝:‖α‖ ^ 2 ≥ 0this:∀ (r : ℝ), Complex.exp (-(↑r / 2)) = ↑(Real.exp (-(r / 2)))⊢ ‖↑(Real.exp (-(‖α‖ ^ 2 / 2)))‖ ^ 2 = Real.exp (-↑⟨‖α‖ ^ 2, ⋯⟩)
have (r : ℝ) : ‖Complex.ofReal (Real.exp r)‖ = Real.exp r := by n:ℕα:ℂ⊢ let Λ := ⟨‖α‖ ^ 2, ⋯⟩;
↑(probabilityOf n α) = (ProbabilityTheory.poissonMeasure Λ) {n} hab n:ℕα:ℂthis✝⁵:|√↑n.factorial| = √↑n.factorialthis✝⁴:√↑n.factorial ^ 2 = ↑n.factorialthis✝³:∀ (a b : ℝ), a = b → a / ↑n.factorial = b / ↑n.factorialthis✝²:∀ (a b c d : ℝ), a = b → c = d → a * c = b * dthis✝¹:‖α‖ ^ 2 ≥ 0this✝:∀ (r : ℝ), Complex.exp (-(↑r / 2)) = ↑(Real.exp (-(r / 2)))this:∀ (r : ℝ), ‖↑(Real.exp r)‖ = Real.exp r⊢ ‖↑(Real.exp (-(‖α‖ ^ 2 / 2)))‖ ^ 2 = Real.exp (-↑⟨‖α‖ ^ 2, ⋯⟩) simphab n:ℕα:ℂthis✝⁵:|√↑n.factorial| = √↑n.factorialthis✝⁴:√↑n.factorial ^ 2 = ↑n.factorialthis✝³:∀ (a b : ℝ), a = b → a / ↑n.factorial = b / ↑n.factorialthis✝²:∀ (a b c d : ℝ), a = b → c = d → a * c = b * dthis✝¹:‖α‖ ^ 2 ≥ 0this✝:∀ (r : ℝ), Complex.exp (-(↑r / 2)) = ↑(Real.exp (-(r / 2)))this:∀ (r : ℝ), ‖↑(Real.exp r)‖ = Real.exp r⊢ ‖↑(Real.exp (-(‖α‖ ^ 2 / 2)))‖ ^ 2 = Real.exp (-↑⟨‖α‖ ^ 2, ⋯⟩)hab n:ℕα:ℂthis✝⁵:|√↑n.factorial| = √↑n.factorialthis✝⁴:√↑n.factorial ^ 2 = ↑n.factorialthis✝³:∀ (a b : ℝ), a = b → a / ↑n.factorial = b / ↑n.factorialthis✝²:∀ (a b c d : ℝ), a = b → c = d → a * c = b * dthis✝¹:‖α‖ ^ 2 ≥ 0this✝:∀ (r : ℝ), Complex.exp (-(↑r / 2)) = ↑(Real.exp (-(r / 2)))this:∀ (r : ℝ), ‖↑(Real.exp r)‖ = Real.exp r⊢ ‖↑(Real.exp (-(‖α‖ ^ 2 / 2)))‖ ^ 2 = Real.exp (-↑⟨‖α‖ ^ 2, ⋯⟩)
rw [this hab n:ℕα:ℂthis✝⁵:|√↑n.factorial| = √↑n.factorialthis✝⁴:√↑n.factorial ^ 2 = ↑n.factorialthis✝³:∀ (a b : ℝ), a = b → a / ↑n.factorial = b / ↑n.factorialthis✝²:∀ (a b c d : ℝ), a = b → c = d → a * c = b * dthis✝¹:‖α‖ ^ 2 ≥ 0this✝:∀ (r : ℝ), Complex.exp (-(↑r / 2)) = ↑(Real.exp (-(r / 2)))this:∀ (r : ℝ), ‖↑(Real.exp r)‖ = Real.exp r⊢ Real.exp (-(‖α‖ ^ 2 / 2)) ^ 2 = Real.exp (-↑⟨‖α‖ ^ 2, ⋯⟩) hab n:ℕα:ℂthis✝⁵:|√↑n.factorial| = √↑n.factorialthis✝⁴:√↑n.factorial ^ 2 = ↑n.factorialthis✝³:∀ (a b : ℝ), a = b → a / ↑n.factorial = b / ↑n.factorialthis✝²:∀ (a b c d : ℝ), a = b → c = d → a * c = b * dthis✝¹:‖α‖ ^ 2 ≥ 0this✝:∀ (r : ℝ), Complex.exp (-(↑r / 2)) = ↑(Real.exp (-(r / 2)))this:∀ (r : ℝ), ‖↑(Real.exp r)‖ = Real.exp r⊢ Real.exp (-(‖α‖ ^ 2 / 2)) ^ 2 = Real.exp (-↑⟨‖α‖ ^ 2, ⋯⟩)]hab n:ℕα:ℂthis✝⁵:|√↑n.factorial| = √↑n.factorialthis✝⁴:√↑n.factorial ^ 2 = ↑n.factorialthis✝³:∀ (a b : ℝ), a = b → a / ↑n.factorial = b / ↑n.factorialthis✝²:∀ (a b c d : ℝ), a = b → c = d → a * c = b * dthis✝¹:‖α‖ ^ 2 ≥ 0this✝:∀ (r : ℝ), Complex.exp (-(↑r / 2)) = ↑(Real.exp (-(r / 2)))this:∀ (r : ℝ), ‖↑(Real.exp r)‖ = Real.exp r⊢ Real.exp (-(‖α‖ ^ 2 / 2)) ^ 2 = Real.exp (-↑⟨‖α‖ ^ 2, ⋯⟩)
have h₀ (r : ℝ) : (Real.exp r) ^ (2:ℝ) = Real.exp (r * 2) :=
Eq.symm (Real.exp_mul r 2) hab n:ℕα:ℂthis✝⁵:|√↑n.factorial| = √↑n.factorialthis✝⁴:√↑n.factorial ^ 2 = ↑n.factorialthis✝³:∀ (a b : ℝ), a = b → a / ↑n.factorial = b / ↑n.factorialthis✝²:∀ (a b c d : ℝ), a = b → c = d → a * c = b * dthis✝¹:‖α‖ ^ 2 ≥ 0this✝:∀ (r : ℝ), Complex.exp (-(↑r / 2)) = ↑(Real.exp (-(r / 2)))this:∀ (r : ℝ), ‖↑(Real.exp r)‖ = Real.exp rh₀:∀ (r : ℝ), Real.exp r ^ 2 = Real.exp (r * 2)⊢ Real.exp (-(‖α‖ ^ 2 / 2)) ^ 2 = Real.exp (-↑⟨‖α‖ ^ 2, ⋯⟩)
have h₁ (r : ℝ) : (Real.exp r) ^ (2:ℝ) = Real.exp r ^ 2 :=
Real.rpow_two (Real.exp r) hab n:ℕα:ℂthis✝⁵:|√↑n.factorial| = √↑n.factorialthis✝⁴:√↑n.factorial ^ 2 = ↑n.factorialthis✝³:∀ (a b : ℝ), a = b → a / ↑n.factorial = b / ↑n.factorialthis✝²:∀ (a b c d : ℝ), a = b → c = d → a * c = b * dthis✝¹:‖α‖ ^ 2 ≥ 0this✝:∀ (r : ℝ), Complex.exp (-(↑r / 2)) = ↑(Real.exp (-(r / 2)))this:∀ (r : ℝ), ‖↑(Real.exp r)‖ = Real.exp rh₀:∀ (r : ℝ), Real.exp r ^ 2 = Real.exp (r * 2)h₁:∀ (r : ℝ), Real.exp r ^ 2 = Real.exp r ^ 2⊢ Real.exp (-(‖α‖ ^ 2 / 2)) ^ 2 = Real.exp (-↑⟨‖α‖ ^ 2, ⋯⟩)
simp_rw [ hab n:ℕα:ℂthis✝⁵:|√↑n.factorial| = √↑n.factorialthis✝⁴:√↑n.factorial ^ 2 = ↑n.factorialthis✝³:∀ (a b : ℝ), a = b → a / ↑n.factorial = b / ↑n.factorialthis✝²:∀ (a b c d : ℝ), a = b → c = d → a * c = b * dthis✝¹:‖α‖ ^ 2 ≥ 0this✝:∀ (r : ℝ), Complex.exp (-(↑r / 2)) = ↑(Real.exp (-(r / 2)))this:∀ (r : ℝ), ‖↑(Real.exp r)‖ = Real.exp rh₀:∀ (r : ℝ), Real.exp r ^ 2 = Real.exp (r * 2)h₁:∀ (r : ℝ), Real.exp r ^ 2 = Real.exp r ^ 2⊢ Real.exp (-(‖α‖ ^ 2 / 2)) ^ 2 = Real.exp (-↑⟨‖α‖ ^ 2, ⋯⟩)h₁ hab n:ℕα:ℂthis✝⁵:|√↑n.factorial| = √↑n.factorialthis✝⁴:√↑n.factorial ^ 2 = ↑n.factorialthis✝³:∀ (a b : ℝ), a = b → a / ↑n.factorial = b / ↑n.factorialthis✝²:∀ (a b c d : ℝ), a = b → c = d → a * c = b * dthis✝¹:‖α‖ ^ 2 ≥ 0this✝:∀ (r : ℝ), Complex.exp (-(↑r / 2)) = ↑(Real.exp (-(r / 2)))this:∀ (r : ℝ), ‖↑(Real.exp r)‖ = Real.exp rh₁:∀ (r : ℝ), Real.exp r ^ 2 = Real.exp r ^ 2h₀:∀ (r : ℝ), Real.exp r ^ 2 = Real.exp (r * 2)⊢ Real.exp (-(‖α‖ ^ 2 / 2)) ^ 2 = Real.exp (-↑⟨‖α‖ ^ 2, ⋯⟩)] at h₀
rw [h₀ hab n:ℕα:ℂthis✝⁵:|√↑n.factorial| = √↑n.factorialthis✝⁴:√↑n.factorial ^ 2 = ↑n.factorialthis✝³:∀ (a b : ℝ), a = b → a / ↑n.factorial = b / ↑n.factorialthis✝²:∀ (a b c d : ℝ), a = b → c = d → a * c = b * dthis✝¹:‖α‖ ^ 2 ≥ 0this✝:∀ (r : ℝ), Complex.exp (-(↑r / 2)) = ↑(Real.exp (-(r / 2)))this:∀ (r : ℝ), ‖↑(Real.exp r)‖ = Real.exp rh₁:∀ (r : ℝ), Real.exp r ^ 2 = Real.exp r ^ 2h₀:∀ (r : ℝ), Real.exp r ^ 2 = Real.exp (r * 2)⊢ Real.exp (-(‖α‖ ^ 2 / 2) * 2) = Real.exp (-↑⟨‖α‖ ^ 2, ⋯⟩) hab n:ℕα:ℂthis✝⁵:|√↑n.factorial| = √↑n.factorialthis✝⁴:√↑n.factorial ^ 2 = ↑n.factorialthis✝³:∀ (a b : ℝ), a = b → a / ↑n.factorial = b / ↑n.factorialthis✝²:∀ (a b c d : ℝ), a = b → c = d → a * c = b * dthis✝¹:‖α‖ ^ 2 ≥ 0this✝:∀ (r : ℝ), Complex.exp (-(↑r / 2)) = ↑(Real.exp (-(r / 2)))this:∀ (r : ℝ), ‖↑(Real.exp r)‖ = Real.exp rh₁:∀ (r : ℝ), Real.exp r ^ 2 = Real.exp r ^ 2h₀:∀ (r : ℝ), Real.exp r ^ 2 = Real.exp (r * 2)⊢ Real.exp (-(‖α‖ ^ 2 / 2) * 2) = Real.exp (-↑⟨‖α‖ ^ 2, ⋯⟩)]hab n:ℕα:ℂthis✝⁵:|√↑n.factorial| = √↑n.factorialthis✝⁴:√↑n.factorial ^ 2 = ↑n.factorialthis✝³:∀ (a b : ℝ), a = b → a / ↑n.factorial = b / ↑n.factorialthis✝²:∀ (a b c d : ℝ), a = b → c = d → a * c = b * dthis✝¹:‖α‖ ^ 2 ≥ 0this✝:∀ (r : ℝ), Complex.exp (-(↑r / 2)) = ↑(Real.exp (-(r / 2)))this:∀ (r : ℝ), ‖↑(Real.exp r)‖ = Real.exp rh₁:∀ (r : ℝ), Real.exp r ^ 2 = Real.exp r ^ 2h₀:∀ (r : ℝ), Real.exp r ^ 2 = Real.exp (r * 2)⊢ Real.exp (-(‖α‖ ^ 2 / 2) * 2) = Real.exp (-↑⟨‖α‖ ^ 2, ⋯⟩)
congr hab n:ℕα:ℂthis✝⁵:|√↑n.factorial| = √↑n.factorialthis✝⁴:√↑n.factorial ^ 2 = ↑n.factorialthis✝³:∀ (a b : ℝ), a = b → a / ↑n.factorial = b / ↑n.factorialthis✝²:∀ (a b c d : ℝ), a = b → c = d → a * c = b * dthis✝¹:‖α‖ ^ 2 ≥ 0this✝:∀ (r : ℝ), Complex.exp (-(↑r / 2)) = ↑(Real.exp (-(r / 2)))this:∀ (r : ℝ), ‖↑(Real.exp r)‖ = Real.exp rh₁:∀ (r : ℝ), Real.exp r ^ 2 = Real.exp r ^ 2h₀:∀ (r : ℝ), Real.exp r ^ 2 = Real.exp (r * 2)⊢ -(‖α‖ ^ 2 / 2) * 2 = -↑⟨‖α‖ ^ 2, ⋯⟩
simp only [neg_mul, isUnit_iff_ne_zero, ne_eq, OfNat.ofNat_ne_zero, not_false_eq_true,
IsUnit.div_mul_cancel, neg_inj] hab n:ℕα:ℂthis✝⁵:|√↑n.factorial| = √↑n.factorialthis✝⁴:√↑n.factorial ^ 2 = ↑n.factorialthis✝³:∀ (a b : ℝ), a = b → a / ↑n.factorial = b / ↑n.factorialthis✝²:∀ (a b c d : ℝ), a = b → c = d → a * c = b * dthis✝¹:‖α‖ ^ 2 ≥ 0this✝:∀ (r : ℝ), Complex.exp (-(↑r / 2)) = ↑(Real.exp (-(r / 2)))this:∀ (r : ℝ), ‖↑(Real.exp r)‖ = Real.exp rh₁:∀ (r : ℝ), Real.exp r ^ 2 = Real.exp r ^ 2h₀:∀ (r : ℝ), Real.exp r ^ 2 = Real.exp (r * 2)⊢ ‖α‖ ^ 2 = ↑⟨‖α‖ ^ 2, ⋯⟩
norm_cast All goals completed! 🐙
· hcd n:ℕα:ℂthis✝²:|√↑n.factorial| = √↑n.factorialthis✝¹:√↑n.factorial ^ 2 = ↑n.factorialthis✝:∀ (a b : ℝ), a = b → a / ↑n.factorial = b / ↑n.factorialthis:∀ (a b c d : ℝ), a = b → c = d → a * c = b * d⊢ (‖α‖ ^ n) ^ 2 = ↑(⟨‖α‖ ^ 2, ⋯⟩ ^ n) rw [pow_right_comm hcd n:ℕα:ℂthis✝²:|√↑n.factorial| = √↑n.factorialthis✝¹:√↑n.factorial ^ 2 = ↑n.factorialthis✝:∀ (a b : ℝ), a = b → a / ↑n.factorial = b / ↑n.factorialthis:∀ (a b c d : ℝ), a = b → c = d → a * c = b * d⊢ (‖α‖ ^ 2) ^ n = ↑(⟨‖α‖ ^ 2, ⋯⟩ ^ n) hcd n:ℕα:ℂthis✝²:|√↑n.factorial| = √↑n.factorialthis✝¹:√↑n.factorial ^ 2 = ↑n.factorialthis✝:∀ (a b : ℝ), a = b → a / ↑n.factorial = b / ↑n.factorialthis:∀ (a b c d : ℝ), a = b → c = d → a * c = b * d⊢ (‖α‖ ^ 2) ^ n = ↑(⟨‖α‖ ^ 2, ⋯⟩ ^ n)]hcd n:ℕα:ℂthis✝²:|√↑n.factorial| = √↑n.factorialthis✝¹:√↑n.factorial ^ 2 = ↑n.factorialthis✝:∀ (a b : ℝ), a = b → a / ↑n.factorial = b / ↑n.factorialthis:∀ (a b c d : ℝ), a = b → c = d → a * c = b * d⊢ (‖α‖ ^ 2) ^ n = ↑(⟨‖α‖ ^ 2, ⋯⟩ ^ n)
congr All goals completed! 🐙
· n:ℕα:ℂthis✝:|√↑n.factorial| = √↑n.factorialthis:√↑n.factorial ^ 2 = ↑n.factorial⊢ 0 ≤ Real.exp (-↑⟨‖α‖ ^ 2, ⋯⟩) * ↑⟨‖α‖ ^ 2, ⋯⟩ ^ n / ↑n.factorial apply div_nonneg ha n:ℕα:ℂthis✝:|√↑n.factorial| = √↑n.factorialthis:√↑n.factorial ^ 2 = ↑n.factorial⊢ 0 ≤ Real.exp (-↑⟨‖α‖ ^ 2, ⋯⟩) * ↑⟨‖α‖ ^ 2, ⋯⟩ ^ nhb n:ℕα:ℂthis✝:|√↑n.factorial| = √↑n.factorialthis:√↑n.factorial ^ 2 = ↑n.factorial⊢ 0 ≤ ↑n.factorial
· ha n:ℕα:ℂthis✝:|√↑n.factorial| = √↑n.factorialthis:√↑n.factorial ^ 2 = ↑n.factorial⊢ 0 ≤ Real.exp (-↑⟨‖α‖ ^ 2, ⋯⟩) * ↑⟨‖α‖ ^ 2, ⋯⟩ ^ n apply mul_nonneg ha.ha n:ℕα:ℂthis✝:|√↑n.factorial| = √↑n.factorialthis:√↑n.factorial ^ 2 = ↑n.factorial⊢ 0 ≤ Real.exp (-↑⟨‖α‖ ^ 2, ⋯⟩)hb n:ℕα:ℂthis✝:|√↑n.factorial| = √↑n.factorialthis:√↑n.factorial ^ 2 = ↑n.factorial⊢ 0 ≤ ↑⟨‖α‖ ^ 2, ⋯⟩ ^ n
· ha.ha n:ℕα:ℂthis✝:|√↑n.factorial| = √↑n.factorialthis:√↑n.factorial ^ 2 = ↑n.factorial⊢ 0 ≤ Real.exp (-↑⟨‖α‖ ^ 2, ⋯⟩) apply Real.exp_nonneg All goals completed! 🐙
· hb n:ℕα:ℂthis✝:|√↑n.factorial| = √↑n.factorialthis:√↑n.factorial ^ 2 = ↑n.factorial⊢ 0 ≤ ↑⟨‖α‖ ^ 2, ⋯⟩ ^ n simp All goals completed! 🐙
· hb n:ℕα:ℂthis✝:|√↑n.factorial| = √↑n.factorialthis:√↑n.factorial ^ 2 = ↑n.factorial⊢ 0 ≤ ↑n.factorial simp All goals completed! 🐙
The only eigenvectors of a are the coherent states.
lemma coherentState_only_eigenvector (α : ℂ) (v : ℕ → ℂ) :
a v = α • v ↔
v = (Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α := by α:ℂv:ℕ → ℂ⊢ a v = α • v ↔ v = (Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α
constructor mp α:ℂv:ℕ → ℂ⊢ a v = α • v → v = (Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState αmpr α:ℂv:ℕ → ℂ⊢ v = (Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α → _root_.a v = α • v
intro hv mp α:ℂv:ℕ → ℂhv:a v = α • v⊢ v = (Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState αmpr α:ℂv:ℕ → ℂ⊢ v = (Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α → _root_.a v = α • v
ext n mp α:ℂv:ℕ → ℂhv:a v = α • vn:ℕ⊢ v n = ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) nmpr α:ℂv:ℕ → ℂ⊢ v = (Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α → _root_.a v = α • v
induction n with
| zero => mp.zero α:ℂv:ℕ → ℂhv:a v = α • v⊢ v 0 = ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) 0
unfold coherentState mp.zero α:ℂv:ℕ → ℂhv:a v = α • v⊢ v 0 = ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • fun n => ↑(Real.exp (-‖α‖ ^ 2 / 2)) * α ^ n / ↑√↑n.factorial) 0
simp only [Complex.ofReal_exp, Complex.ofReal_div, Complex.ofReal_neg, Complex.ofReal_pow,
Complex.ofReal_ofNat, Pi.smul_apply, pow_zero, mul_one, Nat.factorial_zero, Nat.cast_one,
Real.sqrt_one, Complex.ofReal_one, div_one, smul_eq_mul] mp.zero α:ℂv:ℕ → ℂhv:a v = α • v⊢ v 0 = Complex.exp (↑‖α‖ ^ 2 / 2) * v 0 * Complex.exp (-↑‖α‖ ^ 2 / 2)
field_simp mp.zero α:ℂv:ℕ → ℂhv:a v = α • v⊢ v 0 = v 0 * Complex.exp (↑‖α‖ ^ 2 / 2) * Complex.exp (-(↑‖α‖ ^ 2 / 2))
rw [mul_assoc mp.zero α:ℂv:ℕ → ℂhv:a v = α • v⊢ v 0 = v 0 * (Complex.exp (↑‖α‖ ^ 2 / 2) * Complex.exp (-(↑‖α‖ ^ 2 / 2))) mp.zero α:ℂv:ℕ → ℂhv:a v = α • v⊢ v 0 = v 0 * (Complex.exp (↑‖α‖ ^ 2 / 2) * Complex.exp (-(↑‖α‖ ^ 2 / 2)))] mp.zero α:ℂv:ℕ → ℂhv:a v = α • v⊢ v 0 = v 0 * (Complex.exp (↑‖α‖ ^ 2 / 2) * Complex.exp (-(↑‖α‖ ^ 2 / 2)))
rw [← Complex.exp_add mp.zero α:ℂv:ℕ → ℂhv:a v = α • v⊢ v 0 = v 0 * Complex.exp (↑‖α‖ ^ 2 / 2 + -(↑‖α‖ ^ 2 / 2)) mp.zero α:ℂv:ℕ → ℂhv:a v = α • v⊢ v 0 = v 0 * Complex.exp (↑‖α‖ ^ 2 / 2 + -(↑‖α‖ ^ 2 / 2))]mp.zero α:ℂv:ℕ → ℂhv:a v = α • v⊢ v 0 = v 0 * Complex.exp (↑‖α‖ ^ 2 / 2 + -(↑‖α‖ ^ 2 / 2))
field_simp mp.zero α:ℂv:ℕ → ℂhv:a v = α • v⊢ v 0 = v 0 * Complex.exp (↑‖α‖ ^ 2 * (1 + -1) / 2)
ring_nf mp.zero α:ℂv:ℕ → ℂhv:a v = α • v⊢ v 0 = v 0 * Complex.exp 0
simp All goals completed! 🐙
| succ n hn => mp.succ α:ℂv:ℕ → ℂhv:a v = α • vn:ℕhn:v n = ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) n⊢ v (n + 1) = ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) (n + 1)
unfold a at hv mp.succ α:ℂv:ℕ → ℂhv:(fun n => ↑√(↑n + 1) * v (n + 1)) = α • vn:ℕhn:v n = ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) n⊢ v (n + 1) = ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) (n + 1)
have h₀ := congrFun hv n mp.succ α:ℂv:ℕ → ℂhv:(fun n => ↑√(↑n + 1) * v (n + 1)) = α • vn:ℕhn:v n = ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) nh₀:↑√(↑n + 1) * v (n + 1) = (α • v) n⊢ v (n + 1) = ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) (n + 1)
simp only [Pi.smul_apply, smul_eq_mul] at h₀ mp.succ α:ℂv:ℕ → ℂhv:(fun n => ↑√(↑n + 1) * v (n + 1)) = α • vn:ℕhn:v n = ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) nh₀:↑√(↑n + 1) * v (n + 1) = α * v n⊢ v (n + 1) = ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) (n + 1)
have : v (n + 1) = α * v n / √(n + 1) := by α:ℂv:ℕ → ℂ⊢ a v = α • v ↔ v = (Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α mp.succ α:ℂv:ℕ → ℂhv:(fun n => ↑√(↑n + 1) * v (n + 1)) = α • vn:ℕhn:v n = ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) nh₀:↑√(↑n + 1) * v (n + 1) = α * v nthis:v (n + 1) = α * v n / ↑√(↑n + 1)⊢ v (n + 1) = ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) (n + 1)
field_simp α:ℂv:ℕ → ℂhv:(fun n => ↑√(↑n + 1) * v (n + 1)) = α • vn:ℕhn:v n = ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) nh₀:↑√(↑n + 1) * v (n + 1) = α * v n⊢ v (n + 1) * ↑√(↑n + 1) = α * v nmp.succ α:ℂv:ℕ → ℂhv:(fun n => ↑√(↑n + 1) * v (n + 1)) = α • vn:ℕhn:v n = ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) nh₀:↑√(↑n + 1) * v (n + 1) = α * v nthis:v (n + 1) = α * v n / ↑√(↑n + 1)⊢ v (n + 1) = ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) (n + 1)
rw [← h₀, α:ℂv:ℕ → ℂhv:(fun n => ↑√(↑n + 1) * v (n + 1)) = α • vn:ℕhn:v n = ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) nh₀:↑√(↑n + 1) * v (n + 1) = α * v n⊢ v (n + 1) * ↑√(↑n + 1) = ↑√(↑n + 1) * v (n + 1)mp.succ α:ℂv:ℕ → ℂhv:(fun n => ↑√(↑n + 1) * v (n + 1)) = α • vn:ℕhn:v n = ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) nh₀:↑√(↑n + 1) * v (n + 1) = α * v nthis:v (n + 1) = α * v n / ↑√(↑n + 1)⊢ v (n + 1) = ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) (n + 1) mul_comm α:ℂv:ℕ → ℂhv:(fun n => ↑√(↑n + 1) * v (n + 1)) = α • vn:ℕhn:v n = ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) nh₀:↑√(↑n + 1) * v (n + 1) = α * v n⊢ ↑√(↑n + 1) * v (n + 1) = ↑√(↑n + 1) * v (n + 1)mp.succ α:ℂv:ℕ → ℂhv:(fun n => ↑√(↑n + 1) * v (n + 1)) = α • vn:ℕhn:v n = ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) nh₀:↑√(↑n + 1) * v (n + 1) = α * v nthis:v (n + 1) = α * v n / ↑√(↑n + 1)⊢ v (n + 1) = ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) (n + 1)]mp.succ α:ℂv:ℕ → ℂhv:(fun n => ↑√(↑n + 1) * v (n + 1)) = α • vn:ℕhn:v n = ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) nh₀:↑√(↑n + 1) * v (n + 1) = α * v nthis:v (n + 1) = α * v n / ↑√(↑n + 1)⊢ v (n + 1) = ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) (n + 1)mp.succ α:ℂv:ℕ → ℂhv:(fun n => ↑√(↑n + 1) * v (n + 1)) = α • vn:ℕhn:v n = ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) nh₀:↑√(↑n + 1) * v (n + 1) = α * v nthis:v (n + 1) = α * v n / ↑√(↑n + 1)⊢ v (n + 1) = ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) (n + 1)
rw [this, mp.succ α:ℂv:ℕ → ℂhv:(fun n => ↑√(↑n + 1) * v (n + 1)) = α • vn:ℕhn:v n = ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) nh₀:↑√(↑n + 1) * v (n + 1) = α * v nthis:v (n + 1) = α * v n / ↑√(↑n + 1)⊢ α * v n / ↑√(↑n + 1) = ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) (n + 1) mp.succ α:ℂv:ℕ → ℂhv:(fun n => ↑√(↑n + 1) * v (n + 1)) = α • vn:ℕhn:v n = ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) nh₀:↑√(↑n + 1) * v (n + 1) = α * v nthis:v (n + 1) = α * v n / ↑√(↑n + 1)⊢ α * ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) n / ↑√(↑n + 1) =
((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) (n + 1) hn mp.succ α:ℂv:ℕ → ℂhv:(fun n => ↑√(↑n + 1) * v (n + 1)) = α • vn:ℕhn:v n = ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) nh₀:↑√(↑n + 1) * v (n + 1) = α * v nthis:v (n + 1) = α * v n / ↑√(↑n + 1)⊢ α * ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) n / ↑√(↑n + 1) =
((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) (n + 1)mp.succ α:ℂv:ℕ → ℂhv:(fun n => ↑√(↑n + 1) * v (n + 1)) = α • vn:ℕhn:v n = ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) nh₀:↑√(↑n + 1) * v (n + 1) = α * v nthis:v (n + 1) = α * v n / ↑√(↑n + 1)⊢ α * ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) n / ↑√(↑n + 1) =
((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) (n + 1)]mp.succ α:ℂv:ℕ → ℂhv:(fun n => ↑√(↑n + 1) * v (n + 1)) = α • vn:ℕhn:v n = ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) nh₀:↑√(↑n + 1) * v (n + 1) = α * v nthis:v (n + 1) = α * v n / ↑√(↑n + 1)⊢ α * ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) n / ↑√(↑n + 1) =
((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) (n + 1)
unfold coherentState mp.succ α:ℂv:ℕ → ℂhv:(fun n => ↑√(↑n + 1) * v (n + 1)) = α • vn:ℕhn:v n = ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) nh₀:↑√(↑n + 1) * v (n + 1) = α * v nthis:v (n + 1) = α * v n / ↑√(↑n + 1)⊢ α * ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • fun n => ↑(Real.exp (-‖α‖ ^ 2 / 2)) * α ^ n / ↑√↑n.factorial) n / ↑√(↑n + 1) =
((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • fun n => ↑(Real.exp (-‖α‖ ^ 2 / 2)) * α ^ n / ↑√↑n.factorial) (n + 1)
field_simp mp.succ α:ℂv:ℕ → ℂhv:(fun n => ↑√(↑n + 1) * v (n + 1)) = α • vn:ℕhn:v n = ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) nh₀:↑√(↑n + 1) * v (n + 1) = α * v nthis:v (n + 1) = α * v n / ↑√(↑n + 1)⊢ α * ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • fun n => ↑(Real.exp (-(‖α‖ ^ 2 / 2))) * α ^ n / ↑√↑n.factorial) n =
↑√(↑n + 1) *
((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • fun n => ↑(Real.exp (-(‖α‖ ^ 2 / 2))) * α ^ n / ↑√↑n.factorial) (n + 1)
ring_nf mp.succ α:ℂv:ℕ → ℂhv:(fun n => ↑√(↑n + 1) * v (n + 1)) = α • vn:ℕhn:v n = ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) nh₀:↑√(↑n + 1) * v (n + 1) = α * v nthis:v (n + 1) = α * v n / ↑√(↑n + 1)⊢ α *
((Complex.exp (↑‖α‖ ^ 2 * (1 / 2)) * v 0) • fun n => α ^ n * ↑(Real.exp (‖α‖ ^ 2 * (-1 / 2))) * (↑√↑n.factorial)⁻¹)
n =
↑√(1 + ↑n) *
((Complex.exp (↑‖α‖ ^ 2 * (1 / 2)) * v 0) • fun n => α ^ n * ↑(Real.exp (‖α‖ ^ 2 * (-1 / 2))) * (↑√↑n.factorial)⁻¹)
(1 + n)
simp only [one_div, Complex.ofReal_exp, Complex.ofReal_mul, Complex.ofReal_pow,
Complex.ofReal_div, Complex.ofReal_neg, Complex.ofReal_one, Complex.ofReal_ofNat,
Pi.smul_apply, smul_eq_mul] mp.succ α:ℂv:ℕ → ℂhv:(fun n => ↑√(↑n + 1) * v (n + 1)) = α • vn:ℕhn:v n = ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) nh₀:↑√(↑n + 1) * v (n + 1) = α * v nthis:v (n + 1) = α * v n / ↑√(↑n + 1)⊢ α * (Complex.exp (↑‖α‖ ^ 2 * 2⁻¹) * v 0 * (α ^ n * Complex.exp (↑‖α‖ ^ 2 * (-1 / 2)) * (↑√↑n.factorial)⁻¹)) =
↑√(1 + ↑n) *
(Complex.exp (↑‖α‖ ^ 2 * 2⁻¹) * v 0 * (α ^ (1 + n) * Complex.exp (↑‖α‖ ^ 2 * (-1 / 2)) * (↑√↑(1 + n).factorial)⁻¹))
rw [pow_add mp.succ α:ℂv:ℕ → ℂhv:(fun n => ↑√(↑n + 1) * v (n + 1)) = α • vn:ℕhn:v n = ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) nh₀:↑√(↑n + 1) * v (n + 1) = α * v nthis:v (n + 1) = α * v n / ↑√(↑n + 1)⊢ α * (Complex.exp (↑‖α‖ ^ 2 * 2⁻¹) * v 0 * (α ^ n * Complex.exp (↑‖α‖ ^ 2 * (-1 / 2)) * (↑√↑n.factorial)⁻¹)) =
↑√(1 + ↑n) *
(Complex.exp (↑‖α‖ ^ 2 * 2⁻¹) * v 0 *
(α ^ 1 * α ^ n * Complex.exp (↑‖α‖ ^ 2 * (-1 / 2)) * (↑√↑(1 + n).factorial)⁻¹)) mp.succ α:ℂv:ℕ → ℂhv:(fun n => ↑√(↑n + 1) * v (n + 1)) = α • vn:ℕhn:v n = ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) nh₀:↑√(↑n + 1) * v (n + 1) = α * v nthis:v (n + 1) = α * v n / ↑√(↑n + 1)⊢ α * (Complex.exp (↑‖α‖ ^ 2 * 2⁻¹) * v 0 * (α ^ n * Complex.exp (↑‖α‖ ^ 2 * (-1 / 2)) * (↑√↑n.factorial)⁻¹)) =
↑√(1 + ↑n) *
(Complex.exp (↑‖α‖ ^ 2 * 2⁻¹) * v 0 *
(α ^ 1 * α ^ n * Complex.exp (↑‖α‖ ^ 2 * (-1 / 2)) * (↑√↑(1 + n).factorial)⁻¹))]mp.succ α:ℂv:ℕ → ℂhv:(fun n => ↑√(↑n + 1) * v (n + 1)) = α • vn:ℕhn:v n = ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) nh₀:↑√(↑n + 1) * v (n + 1) = α * v nthis:v (n + 1) = α * v n / ↑√(↑n + 1)⊢ α * (Complex.exp (↑‖α‖ ^ 2 * 2⁻¹) * v 0 * (α ^ n * Complex.exp (↑‖α‖ ^ 2 * (-1 / 2)) * (↑√↑n.factorial)⁻¹)) =
↑√(1 + ↑n) *
(Complex.exp (↑‖α‖ ^ 2 * 2⁻¹) * v 0 *
(α ^ 1 * α ^ n * Complex.exp (↑‖α‖ ^ 2 * (-1 / 2)) * (↑√↑(1 + n).factorial)⁻¹))
field_simp mp.succ α:ℂv:ℕ → ℂhv:(fun n => ↑√(↑n + 1) * v (n + 1)) = α • vn:ℕhn:v n = ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) nh₀:↑√(↑n + 1) * v (n + 1) = α * v nthis:v (n + 1) = α * v n / ↑√(↑n + 1)⊢ α * v 0 * α ^ n / ↑√↑n.factorial = α * v 0 * α ^ n * ↑√(1 + ↑n) / ↑√↑(1 + n).factorial
ring_nf mp.succ α:ℂv:ℕ → ℂhv:(fun n => ↑√(↑n + 1) * v (n + 1)) = α • vn:ℕhn:v n = ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) nh₀:↑√(↑n + 1) * v (n + 1) = α * v nthis:v (n + 1) = α * v n / ↑√(↑n + 1)⊢ α * α ^ n * v 0 * (↑√↑n.factorial)⁻¹ = α * α ^ n * v 0 * ↑√(1 + ↑n) * (↑√↑(1 + n).factorial)⁻¹
repeat rw [mul_assoc mp.succ α:ℂv:ℕ → ℂhv:(fun n => ↑√(↑n + 1) * v (n + 1)) = α • vn:ℕhn:v n = ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) nh₀:↑√(↑n + 1) * v (n + 1) = α * v nthis:v (n + 1) = α * v n / ↑√(↑n + 1)⊢ α * α ^ n * (v 0 * (↑√↑n.factorial)⁻¹) = α * α ^ n * v 0 * ↑√(1 + ↑n) * (↑√↑(1 + n).factorial)⁻¹ mp.succ α:ℂv:ℕ → ℂhv:(fun n => ↑√(↑n + 1) * v (n + 1)) = α • vn:ℕhn:v n = ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) nh₀:↑√(↑n + 1) * v (n + 1) = α * v nthis:v (n + 1) = α * v n / ↑√(↑n + 1)⊢ α * (α ^ n * (v 0 * (↑√↑n.factorial)⁻¹)) = α * (α ^ n * (v 0 * (↑√(1 + ↑n) * (↑√↑(1 + n).factorial)⁻¹)))] mp.succ α:ℂv:ℕ → ℂhv:(fun n => ↑√(↑n + 1) * v (n + 1)) = α • vn:ℕhn:v n = ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) nh₀:↑√(↑n + 1) * v (n + 1) = α * v nthis:v (n + 1) = α * v n / ↑√(↑n + 1)⊢ α * (α ^ n * (v 0 * (↑√↑n.factorial)⁻¹)) = α * α ^ n * (v 0 * (↑√(1 + ↑n) * (↑√↑(1 + n).factorial)⁻¹))mp.succ α:ℂv:ℕ → ℂhv:(fun n => ↑√(↑n + 1) * v (n + 1)) = α • vn:ℕhn:v n = ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) nh₀:↑√(↑n + 1) * v (n + 1) = α * v nthis:v (n + 1) = α * v n / ↑√(↑n + 1)⊢ α * (α ^ n * (v 0 * (↑√↑n.factorial)⁻¹)) = α * (α ^ n * (v 0 * (↑√(1 + ↑n) * (↑√↑(1 + n).factorial)⁻¹)))mp.succ α:ℂv:ℕ → ℂhv:(fun n => ↑√(↑n + 1) * v (n + 1)) = α • vn:ℕhn:v n = ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) nh₀:↑√(↑n + 1) * v (n + 1) = α * v nthis:v (n + 1) = α * v n / ↑√(↑n + 1)⊢ α * (α ^ n * (v 0 * (↑√↑n.factorial)⁻¹)) = α * (α ^ n * (v 0 * (↑√(1 + ↑n) * (↑√↑(1 + n).factorial)⁻¹)))
congr mp.succ.e_a.e_a.e_a α:ℂv:ℕ → ℂhv:(fun n => ↑√(↑n + 1) * v (n + 1)) = α • vn:ℕhn:v n = ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) nh₀:↑√(↑n + 1) * v (n + 1) = α * v nthis:v (n + 1) = α * v n / ↑√(↑n + 1)⊢ (↑√↑n.factorial)⁻¹ = ↑√(1 + ↑n) * (↑√↑(1 + n).factorial)⁻¹
field_simp mp.succ.e_a.e_a.e_a α:ℂv:ℕ → ℂhv:(fun n => ↑√(↑n + 1) * v (n + 1)) = α • vn:ℕhn:v n = ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) nh₀:↑√(↑n + 1) * v (n + 1) = α * v nthis:v (n + 1) = α * v n / ↑√(↑n + 1)⊢ 1 / ↑√↑n.factorial = ↑√(1 + ↑n) / ↑√↑(1 + n).factorial
ring_nf mp.succ.e_a.e_a.e_a α:ℂv:ℕ → ℂhv:(fun n => ↑√(↑n + 1) * v (n + 1)) = α • vn:ℕhn:v n = ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) nh₀:↑√(↑n + 1) * v (n + 1) = α * v nthis:v (n + 1) = α * v n / ↑√(↑n + 1)⊢ (↑√↑n.factorial)⁻¹ = ↑√(1 + ↑n) * (↑√↑(1 + n).factorial)⁻¹
rw [add_comm mp.succ.e_a.e_a.e_a α:ℂv:ℕ → ℂhv:(fun n => ↑√(↑n + 1) * v (n + 1)) = α • vn:ℕhn:v n = ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) nh₀:↑√(↑n + 1) * v (n + 1) = α * v nthis:v (n + 1) = α * v n / ↑√(↑n + 1)⊢ (↑√↑n.factorial)⁻¹ = ↑√(↑n + 1) * (↑√↑(1 + n).factorial)⁻¹ mp.succ.e_a.e_a.e_a α:ℂv:ℕ → ℂhv:(fun n => ↑√(↑n + 1) * v (n + 1)) = α • vn:ℕhn:v n = ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) nh₀:↑√(↑n + 1) * v (n + 1) = α * v nthis:v (n + 1) = α * v n / ↑√(↑n + 1)⊢ (↑√↑n.factorial)⁻¹ = ↑√(↑n + 1) * (↑√↑(1 + n).factorial)⁻¹]mp.succ.e_a.e_a.e_a α:ℂv:ℕ → ℂhv:(fun n => ↑√(↑n + 1) * v (n + 1)) = α • vn:ℕhn:v n = ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) nh₀:↑√(↑n + 1) * v (n + 1) = α * v nthis:v (n + 1) = α * v n / ↑√(↑n + 1)⊢ (↑√↑n.factorial)⁻¹ = ↑√(↑n + 1) * (↑√↑(1 + n).factorial)⁻¹
nth_rw 2 [add_comm mp.succ.e_a.e_a.e_a α:ℂv:ℕ → ℂhv:(fun n => ↑√(↑n + 1) * v (n + 1)) = α • vn:ℕhn:v n = ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) nh₀:↑√(↑n + 1) * v (n + 1) = α * v nthis:v (n + 1) = α * v n / ↑√(↑n + 1)⊢ (↑√↑n.factorial)⁻¹ = ↑√(↑n + 1) * (↑√↑(n + 1).factorial)⁻¹] mp.succ.e_a.e_a.e_a α:ℂv:ℕ → ℂhv:(fun n => ↑√(↑n + 1) * v (n + 1)) = α • vn:ℕhn:v n = ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) nh₀:↑√(↑n + 1) * v (n + 1) = α * v nthis:v (n + 1) = α * v n / ↑√(↑n + 1)⊢ (↑√↑n.factorial)⁻¹ = ↑√(↑n + 1) * (↑√↑(n + 1).factorial)⁻¹
have : (n+1).factorial = (n+1) * n.factorial := rfl mp.succ.e_a.e_a.e_a α:ℂv:ℕ → ℂhv:(fun n => ↑√(↑n + 1) * v (n + 1)) = α • vn:ℕhn:v n = ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) nh₀:↑√(↑n + 1) * v (n + 1) = α * v nthis✝:v (n + 1) = α * v n / ↑√(↑n + 1)this:(n + 1).factorial = (n + 1) * n.factorial⊢ (↑√↑n.factorial)⁻¹ = ↑√(↑n + 1) * (↑√↑(n + 1).factorial)⁻¹
rw [this mp.succ.e_a.e_a.e_a α:ℂv:ℕ → ℂhv:(fun n => ↑√(↑n + 1) * v (n + 1)) = α • vn:ℕhn:v n = ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) nh₀:↑√(↑n + 1) * v (n + 1) = α * v nthis✝:v (n + 1) = α * v n / ↑√(↑n + 1)this:(n + 1).factorial = (n + 1) * n.factorial⊢ (↑√↑n.factorial)⁻¹ = ↑√(↑n + 1) * (↑√↑((n + 1) * n.factorial))⁻¹ mp.succ.e_a.e_a.e_a α:ℂv:ℕ → ℂhv:(fun n => ↑√(↑n + 1) * v (n + 1)) = α • vn:ℕhn:v n = ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) nh₀:↑√(↑n + 1) * v (n + 1) = α * v nthis✝:v (n + 1) = α * v n / ↑√(↑n + 1)this:(n + 1).factorial = (n + 1) * n.factorial⊢ (↑√↑n.factorial)⁻¹ = ↑√(↑n + 1) * (↑√↑((n + 1) * n.factorial))⁻¹]mp.succ.e_a.e_a.e_a α:ℂv:ℕ → ℂhv:(fun n => ↑√(↑n + 1) * v (n + 1)) = α • vn:ℕhn:v n = ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) nh₀:↑√(↑n + 1) * v (n + 1) = α * v nthis✝:v (n + 1) = α * v n / ↑√(↑n + 1)this:(n + 1).factorial = (n + 1) * n.factorial⊢ (↑√↑n.factorial)⁻¹ = ↑√(↑n + 1) * (↑√↑((n + 1) * n.factorial))⁻¹
norm_num mp.succ.e_a.e_a.e_a α:ℂv:ℕ → ℂhv:(fun n => ↑√(↑n + 1) * v (n + 1)) = α • vn:ℕhn:v n = ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) nh₀:↑√(↑n + 1) * v (n + 1) = α * v nthis✝:v (n + 1) = α * v n / ↑√(↑n + 1)this:(n + 1).factorial = (n + 1) * n.factorial⊢ (↑√↑n.factorial)⁻¹ = ↑√(↑n + 1) * ((↑√↑n.factorial)⁻¹ * (↑√(↑n + 1))⁻¹)
field_simp All goals completed! 🐙
intro h mpr α:ℂv:ℕ → ℂh:v = (Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α⊢ a v = α • v
rw [h mpr α:ℂv:ℕ → ℂh:v = (Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α⊢ a ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) = α • (Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α mpr α:ℂv:ℕ → ℂh:v = (Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α⊢ a ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) = α • (Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α]mpr α:ℂv:ℕ → ℂh:v = (Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α⊢ a ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) = α • (Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α
unfold a mpr α:ℂv:ℕ → ℂh:v = (Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α⊢ (fun n => ↑√(↑n + 1) * ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) (n + 1)) =
α • (Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α
ext n mpr α:ℂv:ℕ → ℂh:v = (Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState αn:ℕ⊢ ↑√(↑n + 1) * ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) (n + 1) =
(α • (Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) n
have : (Complex.exp (↑‖α‖ ^ 2 / 2)) ≠ 0 := by α:ℂv:ℕ → ℂ⊢ a v = α • v ↔ v = (Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α mpr α:ℂv:ℕ → ℂh:v = (Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState αn:ℕthis:Complex.exp (↑‖α‖ ^ 2 / 2) ≠ 0⊢ ↑√(↑n + 1) * ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) (n + 1) =
(α • (Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) n simpmpr α:ℂv:ℕ → ℂh:v = (Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState αn:ℕthis:Complex.exp (↑‖α‖ ^ 2 / 2) ≠ 0⊢ ↑√(↑n + 1) * ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) (n + 1) =
(α • (Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) nmpr α:ℂv:ℕ → ℂh:v = (Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState αn:ℕthis:Complex.exp (↑‖α‖ ^ 2 / 2) ≠ 0⊢ ↑√(↑n + 1) * ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) (n + 1) =
(α • (Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) n
field_simp mpr α:ℂv:ℕ → ℂh:v = (Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState αn:ℕthis:Complex.exp (↑‖α‖ ^ 2 / 2) ≠ 0⊢ ↑√(↑n + 1) * ((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) (n + 1) =
(α • (Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState α) n
unfold coherentState mpr α:ℂv:ℕ → ℂh:v = (Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState αn:ℕthis:Complex.exp (↑‖α‖ ^ 2 / 2) ≠ 0⊢ ↑√(↑n + 1) *
((Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • fun n => ↑(Real.exp (-‖α‖ ^ 2 / 2)) * α ^ n / ↑√↑n.factorial) (n + 1) =
(α • (Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • fun n => ↑(Real.exp (-‖α‖ ^ 2 / 2)) * α ^ n / ↑√↑n.factorial) n
simp only [Complex.ofReal_exp, Complex.ofReal_div, Complex.ofReal_neg, Complex.ofReal_pow,
Complex.ofReal_ofNat, Pi.smul_apply, smul_eq_mul] mpr α:ℂv:ℕ → ℂh:v = (Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState αn:ℕthis:Complex.exp (↑‖α‖ ^ 2 / 2) ≠ 0⊢ ↑√(↑n + 1) * (Complex.exp (↑‖α‖ ^ 2 / 2) * v 0 * (Complex.exp (-↑‖α‖ ^ 2 / 2) * α ^ (n + 1) / ↑√↑(n + 1).factorial)) =
α * (Complex.exp (↑‖α‖ ^ 2 / 2) * v 0 * (Complex.exp (-↑‖α‖ ^ 2 / 2) * α ^ n / ↑√↑n.factorial))
field_simp mpr α:ℂv:ℕ → ℂh:v = (Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState αn:ℕthis:Complex.exp (↑‖α‖ ^ 2 / 2) ≠ 0⊢ ↑√(↑n + 1) * v 0 * α ^ (n + 1) / ↑√↑(n + 1).factorial = v 0 * α * α ^ n / ↑√↑n.factorial
ring_nf mpr α:ℂv:ℕ → ℂh:v = (Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState αn:ℕthis:Complex.exp (↑‖α‖ ^ 2 / 2) ≠ 0⊢ ↑√(1 + ↑n) * v 0 * α * α ^ n * (↑√↑(1 + n).factorial)⁻¹ = v 0 * α * α ^ n * (↑√↑n.factorial)⁻¹
field_simp mpr α:ℂv:ℕ → ℂh:v = (Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState αn:ℕthis:Complex.exp (↑‖α‖ ^ 2 / 2) ≠ 0⊢ ↑√(1 + ↑n) * v 0 * α * α ^ n / ↑√↑(1 + n).factorial = v 0 * α * α ^ n / ↑√↑n.factorial
rw [mul_assoc, mpr α:ℂv:ℕ → ℂh:v = (Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState αn:ℕthis:Complex.exp (↑‖α‖ ^ 2 / 2) ≠ 0⊢ ↑√(1 + ↑n) * v 0 * (α * α ^ n) / ↑√↑(1 + n).factorial = v 0 * α * α ^ n / ↑√↑n.factorial mpr α:ℂv:ℕ → ℂh:v = (Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState αn:ℕthis:Complex.exp (↑‖α‖ ^ 2 / 2) ≠ 0⊢ ↑√(↑n + 1) * v 0 * (α * α ^ n) / ↑√↑(n + 1).factorial = v 0 * α * α ^ n / ↑√↑n.factorial add_comm 1 n, mpr α:ℂv:ℕ → ℂh:v = (Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState αn:ℕthis:Complex.exp (↑‖α‖ ^ 2 / 2) ≠ 0⊢ ↑√(1 + ↑n) * v 0 * (α * α ^ n) / ↑√↑(n + 1).factorial = v 0 * α * α ^ n / ↑√↑n.factorialmpr α:ℂv:ℕ → ℂh:v = (Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState αn:ℕthis:Complex.exp (↑‖α‖ ^ 2 / 2) ≠ 0⊢ ↑√(↑n + 1) * v 0 * (α * α ^ n) / ↑√↑(n + 1).factorial = v 0 * α * α ^ n / ↑√↑n.factorial add_comm 1 (n:ℝ) mpr α:ℂv:ℕ → ℂh:v = (Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState αn:ℕthis:Complex.exp (↑‖α‖ ^ 2 / 2) ≠ 0⊢ ↑√(↑n + 1) * v 0 * (α * α ^ n) / ↑√↑(n + 1).factorial = v 0 * α * α ^ n / ↑√↑n.factorialmpr α:ℂv:ℕ → ℂh:v = (Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState αn:ℕthis:Complex.exp (↑‖α‖ ^ 2 / 2) ≠ 0⊢ ↑√(↑n + 1) * v 0 * (α * α ^ n) / ↑√↑(n + 1).factorial = v 0 * α * α ^ n / ↑√↑n.factorial]mpr α:ℂv:ℕ → ℂh:v = (Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState αn:ℕthis:Complex.exp (↑‖α‖ ^ 2 / 2) ≠ 0⊢ ↑√(↑n + 1) * v 0 * (α * α ^ n) / ↑√↑(n + 1).factorial = v 0 * α * α ^ n / ↑√↑n.factorial
have : (n+1).factorial = (n+1) * n.factorial := rfl mpr α:ℂv:ℕ → ℂh:v = (Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState αn:ℕthis✝:Complex.exp (↑‖α‖ ^ 2 / 2) ≠ 0this:(n + 1).factorial = (n + 1) * n.factorial⊢ ↑√(↑n + 1) * v 0 * (α * α ^ n) / ↑√↑(n + 1).factorial = v 0 * α * α ^ n / ↑√↑n.factorial
rw [this mpr α:ℂv:ℕ → ℂh:v = (Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState αn:ℕthis✝:Complex.exp (↑‖α‖ ^ 2 / 2) ≠ 0this:(n + 1).factorial = (n + 1) * n.factorial⊢ ↑√(↑n + 1) * v 0 * (α * α ^ n) / ↑√↑((n + 1) * n.factorial) = v 0 * α * α ^ n / ↑√↑n.factorial mpr α:ℂv:ℕ → ℂh:v = (Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState αn:ℕthis✝:Complex.exp (↑‖α‖ ^ 2 / 2) ≠ 0this:(n + 1).factorial = (n + 1) * n.factorial⊢ ↑√(↑n + 1) * v 0 * (α * α ^ n) / ↑√↑((n + 1) * n.factorial) = v 0 * α * α ^ n / ↑√↑n.factorial]mpr α:ℂv:ℕ → ℂh:v = (Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState αn:ℕthis✝:Complex.exp (↑‖α‖ ^ 2 / 2) ≠ 0this:(n + 1).factorial = (n + 1) * n.factorial⊢ ↑√(↑n + 1) * v 0 * (α * α ^ n) / ↑√↑((n + 1) * n.factorial) = v 0 * α * α ^ n / ↑√↑n.factorial
norm_num mpr α:ℂv:ℕ → ℂh:v = (Complex.exp (↑‖α‖ ^ 2 / 2) * v 0) • coherentState αn:ℕthis✝:Complex.exp (↑‖α‖ ^ 2 / 2) ≠ 0this:(n + 1).factorial = (n + 1) * n.factorial⊢ ↑√(↑n + 1) * v 0 * (α * α ^ n) / (↑√(↑n + 1) * ↑√↑n.factorial) = v 0 * α * α ^ n / ↑√↑n.factorial
field_simp All goals completed! 🐙
lemma eigenvector_coherentState (α : ℂ) :
a (coherentState α) = α • coherentState α := by α:ℂ⊢ a (coherentState α) = α • coherentState α
rw [coherentState_only_eigenvector α (coherentState α) α:ℂ⊢ coherentState α = (Complex.exp (↑‖α‖ ^ 2 / 2) * coherentState α 0) • coherentState α α:ℂ⊢ coherentState α = (Complex.exp (↑‖α‖ ^ 2 / 2) * coherentState α 0) • coherentState α] α:ℂ⊢ coherentState α = (Complex.exp (↑‖α‖ ^ 2 / 2) * coherentState α 0) • coherentState α
have : Complex.exp (↑‖α‖ ^ 2 / 2) * coherentState α 0 = 1 := by α:ℂ⊢ a (coherentState α) = α • coherentState α α:ℂthis:Complex.exp (↑‖α‖ ^ 2 / 2) * coherentState α 0 = 1⊢ coherentState α = (Complex.exp (↑‖α‖ ^ 2 / 2) * coherentState α 0) • coherentState α
unfold coherentState α:ℂ⊢ Complex.exp (↑‖α‖ ^ 2 / 2) * (↑(Real.exp (-‖α‖ ^ 2 / 2)) * α ^ 0 / ↑√↑(Nat.factorial 0)) = 1 α:ℂthis:Complex.exp (↑‖α‖ ^ 2 / 2) * coherentState α 0 = 1⊢ coherentState α = (Complex.exp (↑‖α‖ ^ 2 / 2) * coherentState α 0) • coherentState α
simp only [Complex.ofReal_exp, Complex.ofReal_div, Complex.ofReal_neg, Complex.ofReal_pow,
Complex.ofReal_ofNat, pow_zero, mul_one, Nat.factorial_zero, Nat.cast_one, Real.sqrt_one,
Complex.ofReal_one, div_one] α:ℂ⊢ Complex.exp (↑‖α‖ ^ 2 / 2) * Complex.exp (-↑‖α‖ ^ 2 / 2) = 1 α:ℂthis:Complex.exp (↑‖α‖ ^ 2 / 2) * coherentState α 0 = 1⊢ coherentState α = (Complex.exp (↑‖α‖ ^ 2 / 2) * coherentState α 0) • coherentState α
rw [← Complex.exp_add α:ℂ⊢ Complex.exp (↑‖α‖ ^ 2 / 2 + -↑‖α‖ ^ 2 / 2) = 1 α:ℂ⊢ Complex.exp (↑‖α‖ ^ 2 / 2 + -↑‖α‖ ^ 2 / 2) = 1 α:ℂthis:Complex.exp (↑‖α‖ ^ 2 / 2) * coherentState α 0 = 1⊢ coherentState α = (Complex.exp (↑‖α‖ ^ 2 / 2) * coherentState α 0) • coherentState α] α:ℂ⊢ Complex.exp (↑‖α‖ ^ 2 / 2 + -↑‖α‖ ^ 2 / 2) = 1 α:ℂthis:Complex.exp (↑‖α‖ ^ 2 / 2) * coherentState α 0 = 1⊢ coherentState α = (Complex.exp (↑‖α‖ ^ 2 / 2) * coherentState α 0) • coherentState α
field_simp α:ℂ⊢ Complex.exp (↑‖α‖ ^ 2 * (1 + -1) / 2) = 1 α:ℂthis:Complex.exp (↑‖α‖ ^ 2 / 2) * coherentState α 0 = 1⊢ coherentState α = (Complex.exp (↑‖α‖ ^ 2 / 2) * coherentState α 0) • coherentState α
ring_nf α:ℂ⊢ Complex.exp 0 = 1 α:ℂthis:Complex.exp (↑‖α‖ ^ 2 / 2) * coherentState α 0 = 1⊢ coherentState α = (Complex.exp (↑‖α‖ ^ 2 / 2) * coherentState α 0) • coherentState α
simp α:ℂthis:Complex.exp (↑‖α‖ ^ 2 / 2) * coherentState α 0 = 1⊢ coherentState α = (Complex.exp (↑‖α‖ ^ 2 / 2) * coherentState α 0) • coherentState α α:ℂthis:Complex.exp (↑‖α‖ ^ 2 / 2) * coherentState α 0 = 1⊢ coherentState α = (Complex.exp (↑‖α‖ ^ 2 / 2) * coherentState α 0) • coherentState α
rw [this α:ℂthis:Complex.exp (↑‖α‖ ^ 2 / 2) * coherentState α 0 = 1⊢ coherentState α = 1 • coherentState α α:ℂthis:Complex.exp (↑‖α‖ ^ 2 / 2) * coherentState α 0 = 1⊢ coherentState α = 1 • coherentState α] α:ℂthis:Complex.exp (↑‖α‖ ^ 2 / 2) * coherentState α 0 = 1⊢ coherentState α = 1 • coherentState α
simp All goals completed! 🐙
None of the coherentState eigenvectors are proportional.
lemma distinct_eigenvectors_a (α β c : ℂ)
(hc : coherentState α = c • coherentState β) : α = β := by α:ℂβ:ℂc:ℂhc:coherentState α = c • coherentState β⊢ α = β
have h₀ := congrFun hc 0 α:ℂβ:ℂc:ℂhc:coherentState α = c • coherentState βh₀:coherentState α 0 = (c • coherentState β) 0⊢ α = β
have h₁ := congrFun hc 1 α:ℂβ:ℂc:ℂhc:coherentState α = c • coherentState βh₀:coherentState α 0 = (c • coherentState β) 0h₁:coherentState α 1 = (c • coherentState β) 1⊢ α = β
simp [coherentState] at h₀ h₁ α:ℂβ:ℂc:ℂhc:coherentState α = c • coherentState βh₀:Complex.exp (-↑‖α‖ ^ 2 / 2) = c * Complex.exp (-↑‖β‖ ^ 2 / 2)h₁:Complex.exp (-↑‖α‖ ^ 2 / 2) * α = c * (Complex.exp (-↑‖β‖ ^ 2 / 2) * β)⊢ α = β
by_cases hc₀ : c = 0 pos α:ℂβ:ℂc:ℂhc:coherentState α = c • coherentState βh₀:Complex.exp (-↑‖α‖ ^ 2 / 2) = c * Complex.exp (-↑‖β‖ ^ 2 / 2)h₁:Complex.exp (-↑‖α‖ ^ 2 / 2) * α = c * (Complex.exp (-↑‖β‖ ^ 2 / 2) * β)hc₀:c = 0⊢ α = βneg α:ℂβ:ℂc:ℂhc:coherentState α = c • coherentState βh₀:Complex.exp (-↑‖α‖ ^ 2 / 2) = c * Complex.exp (-↑‖β‖ ^ 2 / 2)h₁:Complex.exp (-↑‖α‖ ^ 2 / 2) * α = c * (Complex.exp (-↑‖β‖ ^ 2 / 2) * β)hc₀:¬c = 0⊢ α = β
· pos α:ℂβ:ℂc:ℂhc:coherentState α = c • coherentState βh₀:Complex.exp (-↑‖α‖ ^ 2 / 2) = c * Complex.exp (-↑‖β‖ ^ 2 / 2)h₁:Complex.exp (-↑‖α‖ ^ 2 / 2) * α = c * (Complex.exp (-↑‖β‖ ^ 2 / 2) * β)hc₀:c = 0⊢ α = β subst c pos α:ℂβ:ℂhc:coherentState α = 0 • coherentState βh₀:Complex.exp (-↑‖α‖ ^ 2 / 2) = 0 * Complex.exp (-↑‖β‖ ^ 2 / 2)h₁:Complex.exp (-↑‖α‖ ^ 2 / 2) * α = 0 * (Complex.exp (-↑‖β‖ ^ 2 / 2) * β)⊢ α = β
simp at h₀ All goals completed! 🐙
generalize Complex.exp (-↑‖α‖ ^ 2 / 2) = A at * neg α:ℂβ:ℂc:ℂhc:coherentState α = c • coherentState βhc₀:¬c = 0A:ℂh₀:A = c * Complex.exp (-↑‖β‖ ^ 2 / 2)h₁:A * α = c * (Complex.exp (-↑‖β‖ ^ 2 / 2) * β)⊢ α = β
subst A neg α:ℂβ:ℂc:ℂhc:coherentState α = c • coherentState βhc₀:¬c = 0h₁:c * Complex.exp (-↑‖β‖ ^ 2 / 2) * α = c * (Complex.exp (-↑‖β‖ ^ 2 / 2) * β)⊢ α = β
field_simp at h₁ neg α:ℂβ:ℂc:ℂhc:coherentState α = c • coherentState βhc₀:¬c = 0h₁:α = β⊢ α = β
exact h₁ All goals completed! 🐙
Formal eigenvectors for a_dag (not in ℓ²(ℂ))
(fails at n=0) .
lemma a_dagalmost_eigenvector {α : ℂ} (hα : α ≠ 0) {n : ℕ} (hn : n ≠ 0) :
a_dag (fun n => √(n.factorial) / α^n) n =
α • (fun n => √(n.factorial) / α^n) n := by α:ℂhα:α ≠ 0n:ℕhn:n ≠ 0⊢ a_dag (fun n => ↑√↑n.factorial / α ^ n) n = α • (fun n => ↑√↑n.factorial / α ^ n) n
unfold a_dag α:ℂhα:α ≠ 0n:ℕhn:n ≠ 0⊢ (if n = 0 then 0 else ↑√↑n * (fun n => ↑√↑n.factorial / α ^ n) (n - 1)) = α • (fun n => ↑√↑n.factorial / α ^ n) n
split_ifs with g₀ pos α:ℂhα:α ≠ 0n:ℕhn:n ≠ 0g₀:n = 0⊢ 0 = α • (fun n => ↑√↑n.factorial / α ^ n) nneg α:ℂhα:α ≠ 0n:ℕhn:n ≠ 0g₀:¬n = 0⊢ ↑√↑n * (fun n => ↑√↑n.factorial / α ^ n) (n - 1) = α • (fun n => ↑√↑n.factorial / α ^ n) n
· pos α:ℂhα:α ≠ 0n:ℕhn:n ≠ 0g₀:n = 0⊢ 0 = α • (fun n => ↑√↑n.factorial / α ^ n) n tauto All goals completed! 🐙
· neg α:ℂhα:α ≠ 0n:ℕhn:n ≠ 0g₀:¬n = 0⊢ ↑√↑n * (fun n => ↑√↑n.factorial / α ^ n) (n - 1) = α • (fun n => ↑√↑n.factorial / α ^ n) n simp only [smul_eq_mul] neg α:ℂhα:α ≠ 0n:ℕhn:n ≠ 0g₀:¬n = 0⊢ ↑√↑n * (↑√↑(n - 1).factorial / α ^ (n - 1)) = α * (↑√↑n.factorial / α ^ n)
rw [← Nat.mul_factorial_pred hn neg α:ℂhα:α ≠ 0n:ℕhn:n ≠ 0g₀:¬n = 0⊢ ↑√↑n * (↑√↑(n - 1).factorial / α ^ (n - 1)) = α * (↑√↑(n * (n - 1).factorial) / α ^ n) neg α:ℂhα:α ≠ 0n:ℕhn:n ≠ 0g₀:¬n = 0⊢ ↑√↑n * (↑√↑(n - 1).factorial / α ^ (n - 1)) = α * (↑√↑(n * (n - 1).factorial) / α ^ n)] neg α:ℂhα:α ≠ 0n:ℕhn:n ≠ 0g₀:¬n = 0⊢ ↑√↑n * (↑√↑(n - 1).factorial / α ^ (n - 1)) = α * (↑√↑(n * (n - 1).factorial) / α ^ n)
norm_num neg α:ℂhα:α ≠ 0n:ℕhn:n ≠ 0g₀:¬n = 0⊢ ↑√↑n * (↑√↑(n - 1).factorial / α ^ (n - 1)) = α * (↑√↑n * ↑√↑(n - 1).factorial / α ^ n)
have : Complex.ofReal √( (n-1).factorial) ≠ 0 := by α:ℂhα:α ≠ 0n:ℕhn:n ≠ 0⊢ a_dag (fun n => ↑√↑n.factorial / α ^ n) n = α • (fun n => ↑√↑n.factorial / α ^ n) n neg α:ℂhα:α ≠ 0n:ℕhn:n ≠ 0g₀:¬n = 0this:↑√↑(n - 1).factorial ≠ 0⊢ ↑√↑n * (↑√↑(n - 1).factorial / α ^ (n - 1)) = α * (↑√↑n * ↑√↑(n - 1).factorial / α ^ n)
simp only [ne_eq, Complex.ofReal_eq_zero, Nat.cast_nonneg, Real.sqrt_eq_zero,
Nat.cast_eq_zero] α:ℂhα:α ≠ 0n:ℕhn:n ≠ 0g₀:¬n = 0⊢ ¬(n - 1).factorial = 0neg α:ℂhα:α ≠ 0n:ℕhn:n ≠ 0g₀:¬n = 0this:↑√↑(n - 1).factorial ≠ 0⊢ ↑√↑n * (↑√↑(n - 1).factorial / α ^ (n - 1)) = α * (↑√↑n * ↑√↑(n - 1).factorial / α ^ n)
exact Nat.factorial_ne_zero (n - 1)neg α:ℂhα:α ≠ 0n:ℕhn:n ≠ 0g₀:¬n = 0this:↑√↑(n - 1).factorial ≠ 0⊢ ↑√↑n * (↑√↑(n - 1).factorial / α ^ (n - 1)) = α * (↑√↑n * ↑√↑(n - 1).factorial / α ^ n)neg α:ℂhα:α ≠ 0n:ℕhn:n ≠ 0g₀:¬n = 0this:↑√↑(n - 1).factorial ≠ 0⊢ ↑√↑n * (↑√↑(n - 1).factorial / α ^ (n - 1)) = α * (↑√↑n * ↑√↑(n - 1).factorial / α ^ n)
field_simp neg α:ℂhα:α ≠ 0n:ℕhn:n ≠ 0g₀:¬n = 0this:↑√↑(n - 1).factorial ≠ 0⊢ ↑√↑n * α ^ n = ↑√↑n * α ^ (n - 1) * α
have : α ^ n = α * α ^ (n - 1) := by α:ℂhα:α ≠ 0n:ℕhn:n ≠ 0⊢ a_dag (fun n => ↑√↑n.factorial / α ^ n) n = α • (fun n => ↑√↑n.factorial / α ^ n) n neg α:ℂhα:α ≠ 0n:ℕhn:n ≠ 0g₀:¬n = 0this✝:↑√↑(n - 1).factorial ≠ 0this:α ^ n = α * α ^ (n - 1)⊢ ↑√↑n * α ^ n = ↑√↑n * α ^ (n - 1) * α
exact Eq.symm (mul_pow_sub_one hn α)neg α:ℂhα:α ≠ 0n:ℕhn:n ≠ 0g₀:¬n = 0this✝:↑√↑(n - 1).factorial ≠ 0this:α ^ n = α * α ^ (n - 1)⊢ ↑√↑n * α ^ n = ↑√↑n * α ^ (n - 1) * αneg α:ℂhα:α ≠ 0n:ℕhn:n ≠ 0g₀:¬n = 0this✝:↑√↑(n - 1).factorial ≠ 0this:α ^ n = α * α ^ (n - 1)⊢ ↑√↑n * α ^ n = ↑√↑n * α ^ (n - 1) * α
rw [this neg α:ℂhα:α ≠ 0n:ℕhn:n ≠ 0g₀:¬n = 0this✝:↑√↑(n - 1).factorial ≠ 0this:α ^ n = α * α ^ (n - 1)⊢ ↑√↑n * (α * α ^ (n - 1)) = ↑√↑n * α ^ (n - 1) * α neg α:ℂhα:α ≠ 0n:ℕhn:n ≠ 0g₀:¬n = 0this✝:↑√↑(n - 1).factorial ≠ 0this:α ^ n = α * α ^ (n - 1)⊢ ↑√↑n * (α * α ^ (n - 1)) = ↑√↑n * α ^ (n - 1) * α]neg α:ℂhα:α ≠ 0n:ℕhn:n ≠ 0g₀:¬n = 0this✝:↑√↑(n - 1).factorial ≠ 0this:α ^ n = α * α ^ (n - 1)⊢ ↑√↑n * (α * α ^ (n - 1)) = ↑√↑n * α ^ (n - 1) * α
ring_nf All goals completed! 🐙lemma a_dag_nullspace
{v : ℕ → ℂ} (hv : a_dag v = 0) : v = 0 := by v:ℕ → ℂhv:a_dag v = 0⊢ v = 0
unfold a_dag at hv v:ℕ → ℂhv:(fun n => if n = 0 then 0 else ↑√↑n * v (n - 1)) = 0⊢ v = 0
ext n v:ℕ → ℂhv:(fun n => if n = 0 then 0 else ↑√↑n * v (n - 1)) = 0n:ℕ⊢ v n = 0 n
induction n with
| zero => zero v:ℕ → ℂhv:(fun n => if n = 0 then 0 else ↑√↑n * v (n - 1)) = 0⊢ v 0 = 0 0
have := congrFun hv 1 zero v:ℕ → ℂhv:(fun n => if n = 0 then 0 else ↑√↑n * v (n - 1)) = 0this:(if 1 = 0 then 0 else ↑√↑1 * v (1 - 1)) = 0 1⊢ v 0 = 0 0
simp at this ⊢ zero v:ℕ → ℂhv:(fun n => if n = 0 then 0 else ↑√↑n * v (n - 1)) = 0this:v 0 = 0⊢ v 0 = 0
tauto All goals completed! 🐙
| succ n hn => succ v:ℕ → ℂhv:(fun n => if n = 0 then 0 else ↑√↑n * v (n - 1)) = 0n:ℕhn:v n = 0 n⊢ v (n + 1) = 0 (n + 1)
have := congrFun hv (n + 2) succ v:ℕ → ℂhv:(fun n => if n = 0 then 0 else ↑√↑n * v (n - 1)) = 0n:ℕhn:v n = 0 nthis:(if n + 2 = 0 then 0 else ↑√↑(n + 2) * v (n + 2 - 1)) = 0 (n + 2)⊢ v (n + 1) = 0 (n + 1)
simp only [Nat.add_eq_zero_iff, OfNat.ofNat_ne_zero, and_false, ↓reduceIte, Nat.cast_add,
Nat.cast_ofNat, Nat.add_one_sub_one, Pi.zero_apply, mul_eq_zero,
Complex.ofReal_eq_zero] at this hn hv ⊢ succ v:ℕ → ℂhv:(fun n => if n = 0 then 0 else ↑√↑n * v (n - 1)) = 0n:ℕhn:v n = 0this:√(↑n + 2) = 0 ∨ v (n + 1) = 0⊢ v (n + 1) = 0
cases this with
| inl h => succ.inl v:ℕ → ℂhv:(fun n => if n = 0 then 0 else ↑√↑n * v (n - 1)) = 0n:ℕhn:v n = 0h:√(↑n + 2) = 0⊢ v (n + 1) = 0
exfalso succ.inl v:ℕ → ℂhv:(fun n => if n = 0 then 0 else ↑√↑n * v (n - 1)) = 0n:ℕhn:v n = 0h:√(↑n + 2) = 0⊢ False
revert h succ.inl v:ℕ → ℂhv:(fun n => if n = 0 then 0 else ↑√↑n * v (n - 1)) = 0n:ℕhn:v n = 0⊢ √(↑n + 2) = 0 → False
refine Real.sqrt_ne_zero'.mpr ?_ succ.inl v:ℕ → ℂhv:(fun n => if n = 0 then 0 else ↑√↑n * v (n - 1)) = 0n:ℕhn:v n = 0⊢ 0 < ↑n + 2
linarith All goals completed! 🐙
| inr h => succ.inr v:ℕ → ℂhv:(fun n => if n = 0 then 0 else ↑√↑n * v (n - 1)) = 0n:ℕhn:v n = 0h:v (n + 1) = 0⊢ v (n + 1) = 0
tauto All goals completed! 🐙
lemma no_a_dag_eigenvector (α : ℂ) (v : ℕ → ℂ) :
a_dag v = α • v ↔ v = 0 := by α:ℂv:ℕ → ℂ⊢ a_dag v = α • v ↔ v = 0
constructor mp α:ℂv:ℕ → ℂ⊢ a_dag v = α • v → v = 0mpr α:ℂv:ℕ → ℂ⊢ v = 0 → a_dag v = α • v
· mp α:ℂv:ℕ → ℂ⊢ a_dag v = α • v → v = 0 intro hv mp α:ℂv:ℕ → ℂhv:a_dag v = α • v⊢ v = 0
by_cases hα : α = 0 pos α:ℂv:ℕ → ℂhv:a_dag v = α • vhα:α = 0⊢ v = 0neg α:ℂv:ℕ → ℂhv:a_dag v = α • vhα:¬α = 0⊢ v = 0
· pos α:ℂv:ℕ → ℂhv:a_dag v = α • vhα:α = 0⊢ v = 0 subst α pos v:ℕ → ℂhv:a_dag v = 0 • v⊢ v = 0; apply a_dag_nullspace pos v:ℕ → ℂhv:a_dag v = 0 • v⊢ a_dag v = 0; rw [hv pos v:ℕ → ℂhv:a_dag v = 0 • v⊢ 0 • v = 0 pos v:ℕ → ℂhv:a_dag v = 0 • v⊢ 0 • v = 0] pos v:ℕ → ℂhv:a_dag v = 0 • v⊢ 0 • v = 0; simp All goals completed! 🐙
have := congrFun hv 0 neg α:ℂv:ℕ → ℂhv:a_dag v = α • vhα:¬α = 0this:a_dag v 0 = (α • v) 0⊢ v = 0
unfold a_dag at this neg α:ℂv:ℕ → ℂhv:a_dag v = α • vhα:¬α = 0this:(if 0 = 0 then 0 else ↑√↑0 * v (0 - 1)) = (α • v) 0⊢ v = 0
ext n neg α:ℂv:ℕ → ℂhv:a_dag v = α • vhα:¬α = 0this:(if 0 = 0 then 0 else ↑√↑0 * v (0 - 1)) = (α • v) 0n:ℕ⊢ v n = 0 n
induction n with
| zero => neg.zero α:ℂv:ℕ → ℂhv:a_dag v = α • vhα:¬α = 0this:(if 0 = 0 then 0 else ↑√↑0 * v (0 - 1)) = (α • v) 0⊢ v 0 = 0 0 simp at this ⊢ neg.zero α:ℂv:ℕ → ℂhv:a_dag v = α • vhα:¬α = 0this:α = 0 ∨ v 0 = 0⊢ v 0 = 0;tauto All goals completed! 🐙
| succ n hn => neg.succ α:ℂv:ℕ → ℂhv:a_dag v = α • vhα:¬α = 0this:(if 0 = 0 then 0 else ↑√↑0 * v (0 - 1)) = (α • v) 0n:ℕhn:v n = 0 n⊢ v (n + 1) = 0 (n + 1)
unfold a_dag at hv neg.succ α:ℂv:ℕ → ℂhv:(fun n => if n = 0 then 0 else ↑√↑n * v (n - 1)) = α • vhα:¬α = 0this:(if 0 = 0 then 0 else ↑√↑0 * v (0 - 1)) = (α • v) 0n:ℕhn:v n = 0 n⊢ v (n + 1) = 0 (n + 1)
have := congrFun hv (n+1) neg.succ α:ℂv:ℕ → ℂhv:(fun n => if n = 0 then 0 else ↑√↑n * v (n - 1)) = α • vhα:¬α = 0this✝:(if 0 = 0 then 0 else ↑√↑0 * v (0 - 1)) = (α • v) 0n:ℕhn:v n = 0 nthis:(if n + 1 = 0 then 0 else ↑√↑(n + 1) * v (n + 1 - 1)) = (α • v) (n + 1)⊢ v (n + 1) = 0 (n + 1)
simp_all All goals completed! 🐙
intro mpr α:ℂv:ℕ → ℂa✝:v = 0⊢ a_dag v = α • v
subst v mpr α:ℂ⊢ a_dag 0 = α • 0
unfold a_dag mpr α:ℂ⊢ (fun n => if n = 0 then 0 else ↑√↑n * 0 (n - 1)) = α • 0
simp mpr α:ℂ⊢ (fun n => 0) = 0
rfl All goals completed! 🐙
lemma commutationRelation : ⁅aLin, a_dagLin⁆ = 1 := by ⊢ ⁅aLin, a_dagLin⁆ = 1
simp only [Bracket.bracket] ⊢ aLin * a_dagLin - a_dagLin * aLin = 1
unfold aLin a_dagLin ⊢ { toFun := a, map_add' := aLin._proof_1, map_smul' := aLin._proof_2 } *
{ toFun := a_dag, map_add' := a_dagLin._proof_1, map_smul' := a_dagLin._proof_2 } -
{ toFun := a_dag, map_add' := a_dagLin._proof_1, map_smul' := a_dagLin._proof_2 } *
{ toFun := a, map_add' := aLin._proof_1, map_smul' := aLin._proof_2 } =
1
ext x i x:ℕ → ℂi:ℕ⊢ ({ toFun := a, map_add' := aLin._proof_1, map_smul' := aLin._proof_2 } *
{ toFun := a_dag, map_add' := a_dagLin._proof_1, map_smul' := a_dagLin._proof_2 } -
{ toFun := a_dag, map_add' := a_dagLin._proof_1, map_smul' := a_dagLin._proof_2 } *
{ toFun := a, map_add' := aLin._proof_1, map_smul' := aLin._proof_2 })
x i =
1 x i
change _ = id x i x:ℕ → ℂi:ℕ⊢ ({ toFun := a, map_add' := aLin._proof_1, map_smul' := aLin._proof_2 } *
{ toFun := a_dag, map_add' := a_dagLin._proof_1, map_smul' := a_dagLin._proof_2 } -
{ toFun := a_dag, map_add' := a_dagLin._proof_1, map_smul' := a_dagLin._proof_2 } *
{ toFun := a, map_add' := aLin._proof_1, map_smul' := aLin._proof_2 })
x i =
id x i
rw [← commutation_relation x:ℕ → ℂi:ℕ⊢ ({ toFun := a, map_add' := aLin._proof_1, map_smul' := aLin._proof_2 } *
{ toFun := a_dag, map_add' := a_dagLin._proof_1, map_smul' := a_dagLin._proof_2 } -
{ toFun := a_dag, map_add' := a_dagLin._proof_1, map_smul' := a_dagLin._proof_2 } *
{ toFun := a, map_add' := aLin._proof_1, map_smul' := aLin._proof_2 })
x i =
(a ∘ a_dag - a_dag ∘ a) x i x:ℕ → ℂi:ℕ⊢ ({ toFun := a, map_add' := aLin._proof_1, map_smul' := aLin._proof_2 } *
{ toFun := a_dag, map_add' := a_dagLin._proof_1, map_smul' := a_dagLin._proof_2 } -
{ toFun := a_dag, map_add' := a_dagLin._proof_1, map_smul' := a_dagLin._proof_2 } *
{ toFun := a, map_add' := aLin._proof_1, map_smul' := aLin._proof_2 })
x i =
(a ∘ a_dag - a_dag ∘ a) x i] x:ℕ → ℂi:ℕ⊢ ({ toFun := a, map_add' := aLin._proof_1, map_smul' := aLin._proof_2 } *
{ toFun := a_dag, map_add' := a_dagLin._proof_1, map_smul' := a_dagLin._proof_2 } -
{ toFun := a_dag, map_add' := a_dagLin._proof_1, map_smul' := a_dagLin._proof_2 } *
{ toFun := a, map_add' := aLin._proof_1, map_smul' := aLin._proof_2 })
x i =
(a ∘ a_dag - a_dag ∘ a) x i
simp All goals completed! 🐙
/-- The `coherentState` with parameter `0` is just the first basis vector. -/
example : coherentState 0 = fun n => ite (n = 0) 1 0 := by ⊢ coherentState 0 = fun n => if n = 0 then 1 else 0
unfold coherentState ⊢ (fun n => ↑(Real.exp (-‖0‖ ^ 2 / 2)) * 0 ^ n / ↑√↑n.factorial) = fun n => if n = 0 then 1 else 0
ext n n:ℕ⊢ ↑(Real.exp (-‖0‖ ^ 2 / 2)) * 0 ^ n / ↑√↑n.factorial = if n = 0 then 1 else 0
split_ifs with g₀ pos n:ℕg₀:n = 0⊢ ↑(Real.exp (-‖0‖ ^ 2 / 2)) * 0 ^ n / ↑√↑n.factorial = 1neg n:ℕg₀:¬n = 0⊢ ↑(Real.exp (-‖0‖ ^ 2 / 2)) * 0 ^ n / ↑√↑n.factorial = 0
· pos n:ℕg₀:n = 0⊢ ↑(Real.exp (-‖0‖ ^ 2 / 2)) * 0 ^ n / ↑√↑n.factorial = 1 subst n pos ⊢ ↑(Real.exp (-‖0‖ ^ 2 / 2)) * 0 ^ 0 / ↑√↑(Nat.factorial 0) = 1;simp All goals completed! 🐙
· neg n:ℕg₀:¬n = 0⊢ ↑(Real.exp (-‖0‖ ^ 2 / 2)) * 0 ^ n / ↑√↑n.factorial = 0 rw [zero_pow g₀ neg n:ℕg₀:¬n = 0⊢ ↑(Real.exp (-‖0‖ ^ 2 / 2)) * 0 / ↑√↑n.factorial = 0 neg n:ℕg₀:¬n = 0⊢ ↑(Real.exp (-‖0‖ ^ 2 / 2)) * 0 / ↑√↑n.factorial = 0] neg n:ℕg₀:¬n = 0⊢ ↑(Real.exp (-‖0‖ ^ 2 / 2)) * 0 / ↑√↑n.factorial = 0
simp All goals completed! 🐙
The coherent state belongs to ℓ²(ℂ).
def coherentState_ℓ2 (α : ℂ) : lp (fun _ : ℕ => ℂ) 2 := {
val := coherentState α
property := by α:ℂ⊢ coherentState α ∈ lp (fun x => ℂ) 2
simp only [lp, Memℓp, OfNat.ofNat_ne_zero, ↓reduceIte, ENNReal.ofNat_ne_top, Summable,
ENNReal.toReal_ofNat, Real.rpow_ofNat, AddSubgroup.mem_mk, AddSubmonoid.mem_mk,
AddSubsemigroup.mem_mk, Set.mem_setOf_eq, coherentState, Complex.ofReal_exp,
Complex.ofReal_div, Complex.ofReal_neg, Complex.ofReal_pow, Complex.ofReal_ofNat,
Complex.norm_div, Complex.norm_mul, norm_pow, Complex.norm_real, Real.norm_eq_abs] α:ℂ⊢ ∃ a, HasSum (fun i => (‖Complex.exp (-↑‖α‖ ^ 2 / 2)‖ * ‖α‖ ^ i / |√↑i.factorial|) ^ 2) a
use (‖Complex.exp (-↑‖α‖ ^ 2 / 2)^2 * Complex.exp (‖α‖^2)‖) h α:ℂ⊢ HasSum (fun i => (‖Complex.exp (-↑‖α‖ ^ 2 / 2)‖ * ‖α‖ ^ i / |√↑i.factorial|) ^ 2)
‖Complex.exp (-↑‖α‖ ^ 2 / 2) ^ 2 * Complex.exp (↑‖α‖ ^ 2)‖
suffices HasSum (fun i : ℕ ↦ ( ‖α‖ ^ i
/ |√↑i.factorial|) ^ 2)
‖Complex.exp (↑‖α‖ ^ 2)‖ by α:ℂthis:HasSum (fun i => (‖α‖ ^ i / |√↑i.factorial|) ^ 2) ‖Complex.exp (↑‖α‖ ^ 2)‖⊢ HasSum (fun i => (‖Complex.exp (-↑‖α‖ ^ 2 / 2)‖ * ‖α‖ ^ i / |√↑i.factorial|) ^ 2)
‖Complex.exp (-↑‖α‖ ^ 2 / 2) ^ 2 * Complex.exp (↑‖α‖ ^ 2)‖ h α:ℂ⊢ HasSum (fun i => (‖α‖ ^ i / |√↑i.factorial|) ^ 2) ‖Complex.exp (↑‖α‖ ^ 2)‖
simp_rw [ α:ℂthis:HasSum (fun i => (‖α‖ ^ i / |√↑i.factorial|) ^ 2) ‖Complex.exp (↑‖α‖ ^ 2)‖⊢ HasSum (fun i => (‖Complex.exp (-↑‖α‖ ^ 2 / 2)‖ * ‖α‖ ^ i / |√↑i.factorial|) ^ 2)
‖Complex.exp (-↑‖α‖ ^ 2 / 2) ^ 2 * Complex.exp (↑‖α‖ ^ 2)‖ h α:ℂ⊢ HasSum (fun i => (‖α‖ ^ i / |√↑i.factorial|) ^ 2) ‖Complex.exp (↑‖α‖ ^ 2)‖div_pow α:ℂthis:HasSum (fun i => (‖α‖ ^ i) ^ 2 / |√↑i.factorial| ^ 2) ‖Complex.exp (↑‖α‖ ^ 2)‖⊢ HasSum (fun i => (‖Complex.exp (-↑‖α‖ ^ 2 / 2)‖ * ‖α‖ ^ i) ^ 2 / |√↑i.factorial| ^ 2)
‖Complex.exp (-↑‖α‖ ^ 2 / 2) ^ 2 * Complex.exp (↑‖α‖ ^ 2)‖h α:ℂ⊢ HasSum (fun i => (‖α‖ ^ i / |√↑i.factorial|) ^ 2) ‖Complex.exp (↑‖α‖ ^ 2)‖] at *
simp_rw [ α:ℂthis:HasSum (fun i => (‖α‖ ^ i) ^ 2 / |√↑i.factorial| ^ 2) ‖Complex.exp (↑‖α‖ ^ 2)‖⊢ HasSum (fun i => (‖Complex.exp (-↑‖α‖ ^ 2 / 2)‖ * ‖α‖ ^ i) ^ 2 / |√↑i.factorial| ^ 2)
‖Complex.exp (-↑‖α‖ ^ 2 / 2) ^ 2 * Complex.exp (↑‖α‖ ^ 2)‖h α:ℂ⊢ HasSum (fun i => (‖α‖ ^ i / |√↑i.factorial|) ^ 2) ‖Complex.exp (↑‖α‖ ^ 2)‖mul_pow, α:ℂthis:HasSum (fun i => (‖α‖ ^ i) ^ 2 / |√↑i.factorial| ^ 2) ‖Complex.exp (↑‖α‖ ^ 2)‖⊢ HasSum (fun i => ‖Complex.exp (-↑‖α‖ ^ 2 / 2)‖ ^ 2 * (‖α‖ ^ i) ^ 2 / |√↑i.factorial| ^ 2)
‖Complex.exp (-↑‖α‖ ^ 2 / 2) ^ 2 * Complex.exp (↑‖α‖ ^ 2)‖h α:ℂ⊢ HasSum (fun i => (‖α‖ ^ i / |√↑i.factorial|) ^ 2) ‖Complex.exp (↑‖α‖ ^ 2)‖ ← mul_div α:ℂthis:HasSum (fun i => (‖α‖ ^ i) ^ 2 / |√↑i.factorial| ^ 2) ‖Complex.exp (↑‖α‖ ^ 2)‖⊢ HasSum (fun i => ‖Complex.exp (-↑‖α‖ ^ 2 / 2)‖ ^ 2 * ((‖α‖ ^ i) ^ 2 / |√↑i.factorial| ^ 2))
‖Complex.exp (-↑‖α‖ ^ 2 / 2) ^ 2 * Complex.exp (↑‖α‖ ^ 2)‖h α:ℂ⊢ HasSum (fun i => (‖α‖ ^ i / |√↑i.factorial|) ^ 2) ‖Complex.exp (↑‖α‖ ^ 2)‖]
simp only [sq_abs, Nat.cast_nonneg, Real.sq_sqrt, Complex.norm_mul, norm_pow] at * α:ℂthis:HasSum (fun i => (‖α‖ ^ i) ^ 2 / ↑i.factorial) ‖Complex.exp (↑‖α‖ ^ 2)‖⊢ HasSum (fun i => ‖Complex.exp (-↑‖α‖ ^ 2 / 2)‖ ^ 2 * ((‖α‖ ^ i) ^ 2 / ↑i.factorial))
(‖Complex.exp (-↑‖α‖ ^ 2 / 2)‖ ^ 2 * ‖Complex.exp (↑‖α‖ ^ 2)‖)h α:ℂ⊢ HasSum (fun i => (‖α‖ ^ i / |√↑i.factorial|) ^ 2) ‖Complex.exp (↑‖α‖ ^ 2)‖
exact HasSum.const_smul (γ := ℝ) _ thish α:ℂ⊢ HasSum (fun i => (‖α‖ ^ i / |√↑i.factorial|) ^ 2) ‖Complex.exp (↑‖α‖ ^ 2)‖h α:ℂ⊢ HasSum (fun i => (‖α‖ ^ i / |√↑i.factorial|) ^ 2) ‖Complex.exp (↑‖α‖ ^ 2)‖
have (r : ℝ) : |√r| = √r := by α:ℂ⊢ coherentState α ∈ lp (fun x => ℂ) 2 h α:ℂthis:∀ (r : ℝ), |√r| = √r⊢ HasSum (fun i => (‖α‖ ^ i / |√↑i.factorial|) ^ 2) ‖Complex.exp (↑‖α‖ ^ 2)‖
rw [abs_eq_self α:ℂr:ℝ⊢ 0 ≤ √r α:ℂr:ℝ⊢ 0 ≤ √rh α:ℂthis:∀ (r : ℝ), |√r| = √r⊢ HasSum (fun i => (‖α‖ ^ i / |√↑i.factorial|) ^ 2) ‖Complex.exp (↑‖α‖ ^ 2)‖] α:ℂr:ℝ⊢ 0 ≤ √rh α:ℂthis:∀ (r : ℝ), |√r| = √r⊢ HasSum (fun i => (‖α‖ ^ i / |√↑i.factorial|) ^ 2) ‖Complex.exp (↑‖α‖ ^ 2)‖
simph α:ℂthis:∀ (r : ℝ), |√r| = √r⊢ HasSum (fun i => (‖α‖ ^ i / |√↑i.factorial|) ^ 2) ‖Complex.exp (↑‖α‖ ^ 2)‖h α:ℂthis:∀ (r : ℝ), |√r| = √r⊢ HasSum (fun i => (‖α‖ ^ i / |√↑i.factorial|) ^ 2) ‖Complex.exp (↑‖α‖ ^ 2)‖
simp_rw [ h α:ℂthis:∀ (r : ℝ), |√r| = √r⊢ HasSum (fun i => (‖α‖ ^ i / |√↑i.factorial|) ^ 2) ‖Complex.exp (↑‖α‖ ^ 2)‖this, h α:ℂthis:∀ (r : ℝ), |√r| = √r⊢ HasSum (fun i => (‖α‖ ^ i / √↑i.factorial) ^ 2) ‖Complex.exp (↑‖α‖ ^ 2)‖ div_pow h α:ℂthis:∀ (r : ℝ), |√r| = √r⊢ HasSum (fun i => (‖α‖ ^ i) ^ 2 / √↑i.factorial ^ 2) ‖Complex.exp (↑‖α‖ ^ 2)‖]
have (i : ℕ) : (‖α‖ ^ i) ^ 2 = (‖α‖ ^ 2) ^ i := pow_right_comm ‖α‖ i 2 h α:ℂthis✝:∀ (r : ℝ), |√r| = √rthis:∀ (i : ℕ), (‖α‖ ^ i) ^ 2 = (‖α‖ ^ 2) ^ i⊢ HasSum (fun i => (‖α‖ ^ i) ^ 2 / √↑i.factorial ^ 2) ‖Complex.exp (↑‖α‖ ^ 2)‖
simp_rw [ h α:ℂthis✝:∀ (r : ℝ), |√r| = √rthis:∀ (i : ℕ), (‖α‖ ^ i) ^ 2 = (‖α‖ ^ 2) ^ i⊢ HasSum (fun i => (‖α‖ ^ i) ^ 2 / √↑i.factorial ^ 2) ‖Complex.exp (↑‖α‖ ^ 2)‖this h α:ℂthis✝:∀ (r : ℝ), |√r| = √rthis:∀ (i : ℕ), (‖α‖ ^ i) ^ 2 = (‖α‖ ^ 2) ^ i⊢ HasSum (fun i => (‖α‖ ^ 2) ^ i / √↑i.factorial ^ 2) ‖Complex.exp (↑‖α‖ ^ 2)‖]
rw [← Complex.ofReal_pow h α:ℂthis✝:∀ (r : ℝ), |√r| = √rthis:∀ (i : ℕ), (‖α‖ ^ i) ^ 2 = (‖α‖ ^ 2) ^ i⊢ HasSum (fun i => (‖α‖ ^ 2) ^ i / √↑i.factorial ^ 2) ‖Complex.exp ↑(‖α‖ ^ 2)‖ h α:ℂthis✝:∀ (r : ℝ), |√r| = √rthis:∀ (i : ℕ), (‖α‖ ^ i) ^ 2 = (‖α‖ ^ 2) ^ i⊢ HasSum (fun i => (‖α‖ ^ 2) ^ i / √↑i.factorial ^ 2) ‖Complex.exp ↑(‖α‖ ^ 2)‖]h α:ℂthis✝:∀ (r : ℝ), |√r| = √rthis:∀ (i : ℕ), (‖α‖ ^ i) ^ 2 = (‖α‖ ^ 2) ^ i⊢ HasSum (fun i => (‖α‖ ^ 2) ^ i / √↑i.factorial ^ 2) ‖Complex.exp ↑(‖α‖ ^ 2)‖
generalize ‖α‖^2 = A h α:ℂthis✝:∀ (r : ℝ), |√r| = √rthis:∀ (i : ℕ), (‖α‖ ^ i) ^ 2 = (‖α‖ ^ 2) ^ iA:ℝ⊢ HasSum (fun i => A ^ i / √↑i.factorial ^ 2) ‖Complex.exp ↑A‖
simp only [Nat.cast_nonneg, Real.sq_sqrt, Complex.norm_exp_ofReal] h α:ℂthis✝:∀ (r : ℝ), |√r| = √rthis:∀ (i : ℕ), (‖α‖ ^ i) ^ 2 = (‖α‖ ^ 2) ^ iA:ℝ⊢ HasSum (fun i => A ^ i / ↑i.factorial) (Real.exp A)
convert! NormedSpace.expSeries_hasSum_exp (𝕂 := ℝ) A e'_5 α:ℂthis✝:∀ (r : ℝ), |√r| = √rthis:∀ (i : ℕ), (‖α‖ ^ i) ^ 2 = (‖α‖ ^ 2) ^ iA:ℝx✝:ℕ⊢ A ^ x✝ / ↑x✝.factorial = (NormedSpace.expSeries ℝ ℝ x✝) fun x => Ae'_6 α:ℂthis✝:∀ (r : ℝ), |√r| = √rthis:∀ (i : ℕ), (‖α‖ ^ i) ^ 2 = (‖α‖ ^ 2) ^ iA:ℝ⊢ Real.exp = NormedSpace.exp
· e'_5 α:ℂthis✝:∀ (r : ℝ), |√r| = √rthis:∀ (i : ℕ), (‖α‖ ^ i) ^ 2 = (‖α‖ ^ 2) ^ iA:ℝx✝:ℕ⊢ A ^ x✝ / ↑x✝.factorial = (NormedSpace.expSeries ℝ ℝ x✝) fun x => A simp [NormedSpace.expSeries] e'_5 α:ℂthis✝:∀ (r : ℝ), |√r| = √rthis:∀ (i : ℕ), (‖α‖ ^ i) ^ 2 = (‖α‖ ^ 2) ^ iA:ℝx✝:ℕ⊢ A ^ x✝ / ↑x✝.factorial = (↑x✝.factorial)⁻¹ * A ^ x✝
field_simp All goals completed! 🐙
· e'_6 α:ℂthis✝:∀ (r : ℝ), |√r| = √rthis:∀ (i : ℕ), (‖α‖ ^ i) ^ 2 = (‖α‖ ^ 2) ^ iA:ℝ⊢ Real.exp = NormedSpace.exp exact Real.exp_eq_exp_ℝ All goals completed! 🐙
}