Skip to content

Instantly share code, notes, and snippets.

@Soccolo
Created October 12, 2020 14:17
Show Gist options
  • Save Soccolo/9038cb8f8f85587959ff56791229ef4c to your computer and use it in GitHub Desktop.
Save Soccolo/9038cb8f8f85587959ff56791229ef4c to your computer and use it in GitHub Desktop.
import algebra
import analysis.normed_space.inner_product
import data.complex.basic
import tactic
import data.complex.is_R_or_C
import analysis.normed_space.basic
import data.real.basic
variables (F: Type) (π•œ : Type) [is_R_or_C π•œ] [add_comm_group F] [vector_space π•œ F] [c : inner_product_space.core π•œ F]
include c
variables {ψ : F}
--ψ is the state of the variable, most likely a particle. In Quantum Mechanics, ψ is a wave function, and the
--operators are mostly differentials. We shall not define the operator structure, we shall just consider them
--functions with specific properties. The proof shall be taken directly from Sadri Hassani's 'Mathematical Physics'.
--We shall prove that, for any two operators A and B, |βŸͺψ | [A,B] | ψ⟫| ≀ 2 * Ξ”_A * Ξ”_B. In Quantum Mechanics, the
--operators A and B are the position operator X and momentul operator P, and [X,P]=iℏI, where I is the identity operator.
noncomputable theory
local notation `βŸͺ`x`, `y`⟫` := @inner π•œ F _ x y
local notation `π“š` := @is_R_or_C.of_real π•œ _
local notation `norm_sqK` := @is_R_or_C.norm_sq π•œ _
local notation `reK` := @is_R_or_C.re π•œ _
local notation `ext_iff` := @is_R_or_C.ext_iff π•œ _
local postfix `†`:90 := @is_R_or_C.conj π•œ _
def to_has_inner : has_inner π•œ F := { inner := c.inner }
local attribute [instance] to_has_inner
def norm_sq (x : F) := reK βŸͺx, x⟫
local notation `norm_sqF` := @norm_sq π•œ F _ _ _ _
def to_has_norm : has_norm F :=
{ norm := Ξ» x, real.sqrt (is_R_or_C.re βŸͺx, x⟫) }
local attribute [instance] to_has_norm
--First, some useful general lemmas.
lemma abs_min_add: βˆ€ z w : π•œ, is_R_or_C.abs(z - w) ≀ is_R_or_C.abs z + is_R_or_C.abs w:=
begin
intros z w, have fact: z - w = z + (- w), {ring,}, rw fact, rw ← is_R_or_C.abs_neg w, exact is_R_or_C.abs_add z (-w),
end
lemma sub_sub_sub: βˆ€ a b c d : F, a - b - (c - d) = a - b - c + d:=
begin
intros a b c d, rw sub_sub_assoc_swap, have obs: a - b + d - c = a - b + d + (-1 : π•œ) β€’ c, {rw neg_one_smul π•œ c, ring,},
rw obs, rw add_assoc, have obs2: a - b + (d + (-1 : π•œ) β€’ c) = a - b + ((-1 : π•œ) β€’ c + d), {rw ← add_comm ((-1:π•œ) β€’ c) d,},
rw obs2, rw ← add_assoc, rw neg_one_smul π•œ, ring,
end
lemma sub_sub_add_add: βˆ€ a b c d : F, a - b - c + d + b = a - c + d:=
begin
intros a b c d,
rw sub_add_eq_add_sub, rw add_comm, rw ← add_sub_assoc, rw ← add_assoc, rw add_comm b (a-b), rw sub_add_cancel a b, rw sub_add_eq_add_sub,
end
lemma op_mul (A : F β†’ F) (ha: βˆ€ x y : F, βˆ€ a b : π•œ, A (a β€’ x + b β€’ y) = a β€’ A x + b β€’ A y): βˆ€ x : F, βˆ€ a : π•œ, A (a β€’ x) = a β€’ A x :=
begin
intros x a, have fact: a β€’ x = a β€’ x + (0 : F), {ring}, have fact': (0 : π•œ) β€’ (0 : F) = (0 : F), {exact zero_smul π•œ 0,}, rw ← (fact') at fact,
rw fact, rw ha x 0 a 0, rw zero_smul π•œ (A 0), ring,
end
lemma op_same (A : F β†’ F) (B : F β†’ F) (a : π•œ) (b : π•œ) (ha1: βˆ€ x y : F, βˆ€ a b : π•œ, A (a β€’ x + b β€’ y) = a β€’ A x + b β€’ A y)
(ha2: βˆ€ x y : F, βŸͺx, A y ⟫ = βŸͺA x, y⟫) (hb1: βˆ€ x y : F, βˆ€ a b : π•œ, B (a β€’ x + b β€’ y) = a β€’ B x + b β€’ B y)
(hb2: βˆ€ x y : F, βŸͺx, B y⟫ = βŸͺB x, y⟫) (C : F β†’ F) (hc: βˆ€ x : F, C x = A x - a β€’ x)
(D : F β†’ F) (hd: βˆ€ x : F, D x = B x - b β€’ x) : C (D ψ) - D (C ψ) = A (B ψ) - B (A ψ) :=
begin
rw hc (D ψ), rw hd (C ψ), rw hd ψ, have fact: βˆ€ z w : F, z - w = z + (-w), {intros z w, ring,}, rw fact (B ψ) (b β€’ ψ),
rw hc ψ, have obs: (-1:π•œ) β€’ (b β€’ ψ) = - (b β€’ ψ), {exact neg_one_smul π•œ (b β€’ ψ),}, rw ← obs, have obs': (1:π•œ) β€’ B ψ = B ψ, {exact one_smul π•œ (B ψ)},
rw ← obs', rw ha1 (B ψ) (b β€’ ψ) 1 (-1), clear obs obs', rw fact (A ψ) (a β€’ ψ),
have obs: (-1 : π•œ) β€’ (a β€’ ψ) = - (a β€’ ψ), {exact neg_one_smul π•œ (a β€’ ψ),}, rw ← obs, have obs': (1 : π•œ) β€’ A ψ = A ψ, {exact one_smul π•œ (A ψ),},
rw ← obs', rw hb1 (A ψ) (a β€’ ψ) 1 (-1), rw one_smul π•œ (A (B ψ)), rw op_mul F π•œ A ha1, rw op_mul F π•œ B hb1,
rw one_smul π•œ (B ψ), rw one_smul π•œ (A ψ), rw neg_one_smul π•œ (b β€’ A ψ), rw neg_one_smul π•œ (b β€’ ψ), rw one_smul π•œ, rw neg_one_smul π•œ,
rw neg_one_smul π•œ (a β€’ ψ), ring, rw (smul_sub a (B ψ) (b β€’ ψ)), rw smul_sub b (A ψ) (a β€’ ψ), rw smul_smul a b ψ, rw smul_smul b a ψ,
rw mul_comm b a, rw sub_sub_assoc_swap, rw sub_sub_sub F π•œ (A(B ψ)) (b β€’ A ψ) (a β€’ B ψ) ((a * b) β€’ ψ), rw add_sub,
rw sub_sub_sub F π•œ, ring, rw sub_sub_add_add F π•œ, rw add_sub_cancel, have rk1: A(B ψ) - a β€’ B ψ - B(A ψ) + a β€’ B ψ = A (B ψ) - a β€’ B ψ - B (A ψ) + 0 + a β€’ B ψ, {ring,},
rw rk1, have rk2: A (B ψ) - B (A ψ) = A (B ψ) - B (A ψ) + 0, {ring,}, rw rk2, rw sub_sub_add_add F π•œ,
end
lemma op_linear (A : F β†’ F) (t : π•œ) (ha1: βˆ€ x y : F, βˆ€ a b : π•œ, A (a β€’ x + b β€’ y) = a β€’ A x + b β€’ A y)
(C : F β†’ F) (hc: βˆ€ x : F, C x = A x - t β€’ x) : βˆ€ x y : F, βˆ€ a b : π•œ, C (a β€’ x + b β€’ y) = a β€’ C x + b β€’ C y :=
begin
intros x y a b, rw hc (a β€’ x + b β€’ y), rw hc x, rw hc y, rw smul_add, rw ha1 x y a b, rw smul_sub, rw smul_sub,
rw add_sub, rw ← sub_sub, rw smul_comm t a, rw smul_comm t b, rw ← sub_add_eq_add_sub,
end
lemma op_hermitian (A : F β†’ F) (t : π•œ) (ht: is_R_or_C.conj t = t) (ha1: βˆ€ x y : F, βˆ€ a b : π•œ, A (a β€’ x + b β€’ y) = a β€’ A x + b β€’ A y)
(ha2: βˆ€ x y : F, βŸͺx, A y ⟫ = βŸͺA x, y⟫) (C : F β†’ F) (hc: βˆ€ x : F, C x = A x - t β€’ x) : βˆ€ x y : F, βŸͺx, C y⟫ = βŸͺC x, y⟫:=
begin
intros x y,rw hc y, rw hc x, rw inner_product_space.of_core.inner_sub_left, rw inner_product_space.of_core.inner_smul_left,
rw inner_product_space.of_core.inner_sub_right, rw inner_product_space.of_core.inner_smul_right, rw ht, rw ha2,
end
lemma average_real (A : F β†’ F) (ha2: βˆ€ x y : F, βŸͺx, A y⟫ = βŸͺA x, y⟫) : is_R_or_C.conj βŸͺψ, A ψ⟫ = βŸͺψ, A ψ⟫ :=
begin
rw inner_product_space.of_core.inner_conj_sym (A ψ) ψ, rw ha2,
end
--In this section, we shall prove the uncertainty principle without operators. Instead, we shall mention operator
--properties as the hypothesis.
section Heisenberg_without_operators
theorem Heisenberg_a' (A : F β†’ F) (B : F β†’ F) (ha1: βˆ€ x y : F, βˆ€ a b : π•œ, A (a β€’ x + b β€’ y) = a β€’ A x + b β€’ A y)
(ha2: βˆ€ x y : F, βŸͺx, A y ⟫ = βŸͺA x, y⟫) (hb1: βˆ€ x y : F, βˆ€ a b : π•œ, B (a β€’ x + b β€’ y) = a β€’ B x + b β€’ B y)
(hb2: βˆ€ x y : F, βŸͺx, B y⟫ = βŸͺB x, y⟫):
is_R_or_C.abs(βŸͺψ, A (B ψ)⟫)^2 ≀ is_R_or_C.re βŸͺψ, A(A ψ)⟫ * is_R_or_C.re βŸͺψ, B(B ψ)⟫:=
begin
rw ha2 ψ (B ψ), rw ha2 ψ (A ψ), rw hb2 ψ (B ψ),
have fact: is_R_or_C.absβŸͺA ψ, B ψ⟫^2 = is_R_or_C.abs βŸͺA ψ, B ψ⟫ * is_R_or_C.abs βŸͺB ψ, A ψ⟫,
{rw inner_product_space.of_core.inner_abs_conj_sym, ring,}, rw fact,
exact inner_product_space.of_core.inner_mul_inner_self_le (A ψ) (B ψ),
end
theorem Heisenberg_b' (A : F β†’ F) (B : F β†’ F) (ha1: βˆ€ x y : F, βˆ€ a b : π•œ, A (a β€’ x + b β€’ y) = a β€’ A x + b β€’ A y)
(ha2: βˆ€ x y : F, βŸͺx, A y ⟫ = βŸͺA x, y⟫) (hb1: βˆ€ x y : F, βˆ€ a b : π•œ, B (a β€’ x + b β€’ y) = a β€’ B x + b β€’ B y)
(hb2: βˆ€ x y : F, βŸͺx, B y⟫ = βŸͺB x, y⟫):
is_R_or_C.abs(βŸͺψ, A (B ψ) - B (A ψ)⟫)^2 ≀ 4 * is_R_or_C.re βŸͺψ, A (A ψ)⟫ * is_R_or_C.re βŸͺψ, B (B ψ)⟫:=
begin
rw inner_product_space.of_core.inner_sub_right,
have fact: is_R_or_C.abs(βŸͺA ψ, B ψ⟫ - βŸͺB ψ, A ψ⟫) ≀ 2 * is_R_or_C.abs βŸͺψ, A (B ψ)⟫,
{
calc is_R_or_C.abs(βŸͺA ψ, B ψ⟫ - βŸͺB ψ, A ψ⟫) ≀ is_R_or_C.abs βŸͺA ψ, B ψ⟫ + is_R_or_C.abs βŸͺB ψ, A ψ⟫: by exact abs_min_add F π•œ (βŸͺA ψ, B ψ⟫) (βŸͺB ψ, A ψ⟫)
... = is_R_or_C.abs βŸͺA ψ, B ψ⟫ + is_R_or_C.abs βŸͺA ψ, B ψ⟫: congr_arg (has_add.add (is_R_or_C.abs (inner (A ψ) (B ψ)))) (eq.symm (inner_product_space.of_core.inner_abs_conj_sym))
... = 2 * is_R_or_C.abs βŸͺA ψ, B ψ⟫: by ring
... = 2 * is_R_or_C.abs βŸͺψ , A (B ψ)⟫: congr_arg (has_mul.mul 2) (congr_arg is_R_or_C.abs (eq.symm (ha2 ψ (B ψ)))),
},
have fact': is_R_or_C.abs(βŸͺA ψ, B ψ⟫ - βŸͺB ψ, A ψ⟫) ^2 ≀ (2 * is_R_or_C.abs βŸͺψ, A (B ψ)⟫)^2,
{
have obs1: 0 ≀ is_R_or_C.abs (βŸͺA ψ, B ψ⟫ - βŸͺB ψ, A ψ⟫), {exact is_R_or_C.abs_nonneg (inner (A ψ) (B ψ) - inner (B ψ) (A ψ)),},
have obs2: 0 ≀ 2 * is_R_or_C.abs(βŸͺψ , A (B ψ)⟫), {linarith [has_le.le.trans_eq (is_R_or_C.abs_nonneg (inner (A ψ) (B ψ))) (congr_arg is_R_or_C.abs (eq.symm (ha2 ψ (B ψ))))],},
exact pow_le_pow_of_le_left obs1 fact 2,
},
ring at fact', have fact1: βŸͺψ, A (B ψ)⟫ - βŸͺψ, B (A ψ)⟫ = βŸͺA ψ , B ψ⟫ - βŸͺB ψ, A ψ ⟫, {rw ha2 ψ (B ψ), rw hb2 ψ (A ψ),},
rw fact1,
have fact'': is_R_or_C.abs(βŸͺψ, A (B ψ)⟫)^2 ≀ is_R_or_C.re βŸͺψ, A (A ψ)⟫ * is_R_or_C.re βŸͺψ, B (B ψ)⟫, {exact Heisenberg_a' F π•œ A B ha1 ha2 hb1 hb2,},
linarith,
end
theorem Heisenberg_c' (A : F β†’ F) (B : F β†’ F) (ha1: βˆ€ x y : F, βˆ€ a b : π•œ, A (a β€’ x + b β€’ y) = a β€’ A x + b β€’ A y)
(ha2: βˆ€ x y : F, βŸͺx, A y ⟫ = βŸͺA x, y⟫) (hb1: βˆ€ x y : F, βˆ€ a b : π•œ, B (a β€’ x + b β€’ y) = a β€’ B x + b β€’ B y)
(hb2: βˆ€ x y : F, βŸͺx, B y⟫ = βŸͺB x, y⟫) (k l : π•œ) (hk: k = βŸͺψ, A ψ⟫) (hl: l = βŸͺψ, B ψ⟫) (Ξ”_A : F β†’ F) (Ξ”_B : F β†’ F)
(ha: βˆ€ x : F, Ξ”_A x = A x - k β€’ x) (hb: βˆ€ x : F, Ξ”_B x = B x - l β€’ x):
is_R_or_C.abs(βŸͺψ, A (B ψ) - B (A ψ)⟫) ≀2 * βˆ₯Ξ”_A ψβˆ₯ * βˆ₯Ξ”_B ψβˆ₯:=
begin
have hkr: is_R_or_C.conj βŸͺψ, A ψ⟫ = βŸͺψ, A ψ⟫, {exact average_real F π•œ A ha2,},
have hlr: is_R_or_C.conj βŸͺψ, B ψ⟫ = βŸͺψ, B ψ⟫, {exact average_real F π•œ B hb2,}, rw ← hk at hkr, rw ← hl at hlr,
have ha1': βˆ€ x y : F, βˆ€ a b : π•œ , Ξ”_A (a β€’ x + b β€’ y) = a β€’ Ξ”_A x + b β€’ Ξ”_A y, {exact op_linear F π•œ A k ha1 Ξ”_A ha,},
have ha2': βˆ€ x y : F, βŸͺx, Ξ”_A y ⟫ = βŸͺΞ”_A x, y⟫, {exact op_hermitian F π•œ A k hkr ha1 ha2 Ξ”_A ha,},
have hb1': βˆ€ x y : F, βˆ€ a b : π•œ, Ξ”_B (a β€’ x + b β€’ y) = a β€’ Ξ”_B x + b β€’ Ξ”_B y, {exact op_linear F π•œ B l hb1 Ξ”_B hb,},
have hb2': βˆ€ x y : F, βŸͺx, Ξ”_B y ⟫ = βŸͺΞ”_B x , y⟫, {exact op_hermitian F π•œ B l hlr hb1 hb2 Ξ”_B hb,},
have fact: βŸͺψ, A (B ψ) - B (A ψ)⟫ = βŸͺψ, Ξ”_A (Ξ”_B ψ) - Ξ”_B (Ξ”_A ψ)⟫, {rw ← op_same F π•œ A B k l ha1 ha2 hb1 hb2 Ξ”_A ha Ξ”_B hb,},
rw fact, have inequality: is_R_or_C.abs(βŸͺψ, Ξ”_A (Ξ”_B ψ ) - Ξ”_B (Ξ”_A ψ)⟫)^2 ≀ 4* is_R_or_C.re βŸͺψ, Ξ”_A(Ξ”_A ψ)⟫ * is_R_or_C.re βŸͺψ, Ξ”_B(Ξ”_B ψ)⟫,
{exact Heisenberg_b' F π•œ Ξ”_A Ξ”_B ha1' ha2' hb1' hb2',},
rw ha2' ψ (Ξ”_A ψ) at inequality, rw hb2' ψ (Ξ”_B ψ) at inequality,
have sqr_a: is_R_or_C.re βŸͺΞ”_A ψ, Ξ”_A ψ⟫ = βˆ₯Ξ”_A ψβˆ₯ * βˆ₯Ξ”_A ψβˆ₯, {exact inner_product_space.of_core.inner_self_eq_norm_square (Ξ”_A ψ),}, ring at sqr_a,
have sqr_b: is_R_or_C.re βŸͺΞ”_B ψ, Ξ”_B ψ⟫ = βˆ₯Ξ”_B ψβˆ₯ * βˆ₯Ξ”_B ψβˆ₯, {exact inner_product_space.of_core.inner_self_eq_norm_square (Ξ”_B ψ),}, ring at sqr_b,
rw [sqr_a, sqr_b] at inequality,
have facta: 0 ≀ is_R_or_C.abs βŸͺψ, Ξ”_A (Ξ”_B ψ) - Ξ”_B (Ξ”_A ψ)⟫, {exact is_R_or_C.abs_nonneg _,},
have rk1 : βˆ₯Ξ”_A ψβˆ₯ = real.sqrt (is_R_or_C.re βŸͺΞ”_A ψ, Ξ”_A ψ⟫), {refl,}, have rk2: 0 ≀ βˆ₯Ξ”_A ψβˆ₯, {rw rk1, exact real.sqrt_nonneg _,},
have rk3 : βˆ₯Ξ”_B ψβˆ₯ = real.sqrt (is_R_or_C.re βŸͺΞ”_B ψ, Ξ”_B ψ⟫), {refl,}, have rk4: 0 ≀ βˆ₯Ξ”_B ψβˆ₯, {rw rk3, exact real.sqrt_nonneg _,},
have rk5: 0 ≀ βˆ₯Ξ”_A ψβˆ₯ * βˆ₯Ξ”_B ψβˆ₯, {exact mul_nonneg rk2 rk4,}, have rk6 : 0 ≀ (2:ℝ) * βˆ₯Ξ”_A ψβˆ₯ * βˆ₯Ξ”_B ψβˆ₯, {linarith,},
have rk7: ((2:ℝ) * βˆ₯Ξ”_A ψβˆ₯ * βˆ₯Ξ”_B ψβˆ₯)^2 = 4 * βˆ₯Ξ”_A ψβˆ₯^2 * βˆ₯Ξ”_B ψβˆ₯^2 , {ring,},
have rk9: 0 ≀ is_R_or_C.abs βŸͺψ, Ξ”_A (Ξ”_B ψ) - Ξ”_B (Ξ”_A ψ)⟫ ^2, {exact pow_nonneg facta 2,},
have rk10: 0 ≀ 4 * βˆ₯Ξ”_A ψβˆ₯^2 * βˆ₯Ξ”_B ψβˆ₯^2, {linarith,},
have factb: real.sqrt (4 * βˆ₯Ξ”_A ψβˆ₯^2 * βˆ₯Ξ”_B ψβˆ₯^2) = 2 * βˆ₯Ξ”_A ψβˆ₯ * βˆ₯Ξ”_B ψβˆ₯, {exact (real.sqrt_eq_iff_sqr_eq rk10 rk6).mpr rk7,}, rw ← factb,
have rk11: (is_R_or_C.abs βŸͺψ, Ξ”_A (Ξ”_B ψ) - Ξ”_B (Ξ”_A ψ)⟫)^2 = is_R_or_C.abs βŸͺψ, Ξ”_A (Ξ”_B ψ) - Ξ”_B (Ξ”_A ψ)⟫^2, {refl,},
have factc: real.sqrt (is_R_or_C.abs βŸͺψ, Ξ”_A (Ξ”_B ψ) - Ξ”_B (Ξ”_A ψ)⟫^2) = is_R_or_C.abs βŸͺψ, Ξ”_A (Ξ”_B ψ) - Ξ”_B (Ξ”_A ψ)⟫, {exact (real.sqrt_eq_iff_sqr_eq rk9 facta).mpr rk11,}, rw ← factc,
exact (real.sqrt_le rk9 rk10).mpr inequality,
end
end Heisenberg_without_operators
structure operator :=
{operator : F β†’ F}
{op_lin: βˆ€ x y : F, βˆ€ a b : π•œ, operator (a β€’ x + b β€’ y) = a β€’ operator x + b β€’ operator y}
{op_her: βˆ€ x y : F, βŸͺx, operator y⟫ = βŸͺoperator x, y⟫}
instance : has_coe_to_fun (operator F π•œ) :=
⟨_, λ A, A.operator⟩
variables {A : operator F π•œ} {B : operator F π•œ}
@[simp] theorem coe_to_inner_A: βˆ€ x : F, A x = A.operator x:=
begin
intro x, refl,
end
@[simp] theorem coe_to_inner_B: βˆ€ x : F, B x = B.operator x :=
begin
intro x, refl,
end
lemma op_lin_A: βˆ€ x y : F, βˆ€ a b : π•œ, A (a β€’ x + b β€’ y) = a β€’ A x + b β€’ A y:=
begin
intros x y a b, rw coe_to_inner_A _, rw coe_to_inner_A _, rw coe_to_inner_A _, exact A.op_lin x y a b,
end
lemma op_her_A: βˆ€ x y : F, βŸͺx, A y⟫ = βŸͺA x, y⟫:=
begin
intros x y, rw coe_to_inner_A _, rw coe_to_inner_A _, exact A.op_her x y,
end
lemma op_lin_B : βˆ€ x y : F, βˆ€ a b : π•œ, B (a β€’ x + b β€’ y) = a β€’ B x + b β€’ B y :=
begin
intros x y a b, rw coe_to_inner_B _, rw coe_to_inner_B _, rw coe_to_inner_B _, exact B.op_lin x y a b,
end
lemma op_her_B: βˆ€ x y : F, βŸͺx, B y⟫ = βŸͺB x, y⟫:=
begin
intros x y, rw coe_to_inner_B _, rw coe_to_inner_B _, exact B.op_her x y,
end
structure is_operator (X : F β†’ F) : Prop :=
(is_op_lin: βˆ€ x y : F, βˆ€ a b : π•œ, X (a β€’ x + b β€’ y) = a β€’ X (x) + b β€’ X (y))
(is_op_her: βˆ€ x y : F, βŸͺx, X y⟫ = βŸͺX x, y⟫)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment