Update bilinear.lean

This commit is contained in:
Stefan Kebekus
2024-06-29 09:01:53 +02:00
parent 9a9fbf1b54
commit 8b4317759c

View File

@@ -1,172 +1,73 @@
--import Mathlib.Algebra.BigOperators.Basic
import Mathlib.LinearAlgebra.TensorProduct.Basic
import Mathlib.Analysis.InnerProductSpace.Basic
import Mathlib.Analysis.InnerProductSpace.Dual
import Mathlib.Analysis.InnerProductSpace.PiL2
open BigOperators
open Finset
open scoped TensorProduct
variable {E : Type*} [NormedAddCommGroup E] [InnerProductSpace E] [FiniteDimensional E]
variable {F : Type*} [NormedAddCommGroup F] [NormedSpace F]
open BigOperators
open Finset
lemma vectorPresentation
lemma OrthonormalBasis.sum_repr'
{𝕜 : Type*} [RCLike 𝕜]
{E : Type*} [NormedAddCommGroup E] [InnerProductSpace 𝕜 E]
[Fintype ι]
(b : Basis ι E)
(hb : Orthonormal b)
(b : OrthonormalBasis ι 𝕜 E)
(v : E) :
v = i, b i, v_ (b i) := by
nth_rw 1 [ (b.sum_repr v)]
apply Fintype.sum_congr
intro i
rw [ Orthonormal.inner_right_finsupp hb (b.repr v) i]
v = i, b i, v_𝕜 (b i) := by
nth_rw 1 [ (b.sum_repr v)]
simp_rw [b.repr_apply_apply v]
noncomputable def InnerProductSpace.canonicalTensor
(E : Type u_2) [NormedAddCommGroup E] [InnerProductSpace E] [FiniteDimensional E]
: E [] E := by
let v := stdOrthonormalBasis E
exact i, (v i) [] (v i)
theorem InnerProductSpace.InvariantTensor
(E : Type*) [NormedAddCommGroup E] [InnerProductSpace E] [FiniteDimensional E]
(v₂ : OrthonormalBasis (Fin (FiniteDimensional.finrank E)) E)
: InnerProductSpace.canonicalTensor E = i, (v₂ i) [] (v₂ i) := by
unfold InnerProductSpace.canonicalTensor
let v₁ := stdOrthonormalBasis E
simp
theorem BilinearCalc
[Fintype ι]
(v : Basis ι E)
(c : ι )
(L : E [] E [] F)
: L ( j : ι, c j v j) ( j : ι, c j v j)
= x : Fin 2 ι, (c (x 0) * c (x 1)) L (v (x 0)) (v (x 1)) := by
conv =>
right
arg 2
intro i
rw [v₁.sum_repr' (v₂ i)]
simp_rw [TensorProduct.sum_tmul, TensorProduct.tmul_sum, TensorProduct.smul_tmul_smul]
rw [map_sum]
rw [map_sum]
conv =>
left
arg 2
intro r
rw [ sum_apply]
rw [map_smul]
arg 2
arg 1
arg 2
intro x
rw [map_smul]
simp
lemma c2
[Fintype ι]
(b : Basis ι E)
(hb : Orthonormal b)
(x y : E) :
x, y_ = i : ι, x, b i_ * y, b i_ := by
rw [vectorPresentation b hb x]
rw [vectorPresentation b hb y]
rw [Orthonormal.inner_sum hb]
simp
conv =>
right
arg 2
intro i'
rw [Orthonormal.inner_left_fintype hb]
rw [Orthonormal.inner_left_fintype hb]
lemma fin_sum
[Fintype ι]
(f : ι ι F) :
r : Fin 2 ι, f (r 0) (r 1) = r₀ : ι, ( r₁ : ι, f r₀ r₁) := by
rw [ Fintype.sum_prod_type']
apply Fintype.sum_equiv (finTwoArrowEquiv ι)
intro x
dsimp
theorem TensorIndep
[Fintype ι] [DecidableEq ι]
(v₁ : Basis ι E)
(hv₁ : Orthonormal v₁)
(v₂ : Basis ι E)
(hv₂ : Orthonormal v₂) :
i, (v₁ i) [] (v₁ i) = i, (v₂ i) [] (v₂ i) := by
conv =>
right
arg 2
intro i
rw [vectorPresentation v₁ hv₁ (v₂ i)]
rw [TensorProduct.sum_tmul]
arg 2
intro j
rw [TensorProduct.tmul_sum]
arg 2
intro a
rw [TensorProduct.tmul_smul]
arg 2
rw [TensorProduct.smul_tmul]
rw [Finset.sum_comm]
conv =>
right
arg 2
intro i
rw [Finset.sum_comm]
sorry
theorem LaplaceIndep
[Fintype ι] [DecidableEq ι]
(v₁ : Basis ι E)
(hv₁ : Orthonormal v₁)
(v₂ : Basis ι E)
(hv₂ : Orthonormal v₂)
(L : E [] E [] F) :
i, L (v₁ i) (v₁ i) = i, L (v₂ i) (v₂ i) := by
have vector_vs_function
{y : Fin 2 ι}
{v : ι E}
: (fun i => v (y i)) = ![v (y 0), v (y 1)] := by
funext i
by_cases h : i = 0
· rw [h]
simp
· rw [Fin.eq_one_of_neq_zero i h]
simp
conv =>
right
arg 2
intro i
rw [vectorPresentation v₁ hv₁ (v₂ i)]
rw [BilinearCalc]
rw [Finset.sum_comm]
conv =>
right
arg 2
intro y
rw [Finset.sum_comm]
arg 2
intro x
rw [ Finset.sum_smul]
rw [ c2 v₂ hv₂ (v₁ (y 0)) (v₁ (y 1))]
rw [vector_vs_function]
simp
arg 1
arg 2
intro i
rw [ real_inner_comm (v₁ x)]
simp_rw [OrthonormalBasis.sum_inner_mul_inner v₂]
rw [fin_sum (fun i₀ (fun i₁ v₁ i, v₁ i_ L ![v₁ i₀, v₁ i]))]
have xx {r₀ : ι} : r₁ : ι, r₁ r₀ v₁ r₀, v₁ r₁_ L ![v₁ r₀, v₁ r₁] = 0 := by
have xx {r : Fin (FiniteDimensional.finrank E)} : r₁ : Fin (FiniteDimensional.finrank E), r₁ r₀ v₁ r, v₁ r_ v₁ r₀ [] v₁ r = 0 := by
intro r₁ hr₁
rw [orthonormal_iff_ite.1 hv₁]
rw [orthonormal_iff_ite.1 v₁.orthonormal]
simp
tauto
conv =>
right
arg 2
intro r₀
rw [Fintype.sum_eq_single r₀ xx]
rw [orthonormal_iff_ite.1 hv₁]
apply sum_congr
rfl
intro x _
rw [vector_vs_function]
simp_rw [Fintype.sum_eq_single _ xx]
simp_rw [orthonormal_iff_ite.1 v₁.orthonormal]
simp