nevanlinna/Nevanlinna/laplace2.lean

286 lines
6.9 KiB
Plaintext
Raw Permalink Normal View History

2024-06-23 21:13:01 +02:00
import Mathlib.Analysis.InnerProductSpace.Basic
2024-06-27 14:02:00 +02:00
import Mathlib.Analysis.InnerProductSpace.Dual
2024-06-23 21:13:01 +02:00
import Mathlib.Analysis.InnerProductSpace.PiL2
2024-06-28 07:53:20 +02:00
--import Mathlib.Algebra.BigOperators.Basic
2024-06-23 21:13:01 +02:00
import Mathlib.Analysis.Calculus.ContDiff.Bounds
import Mathlib.Analysis.Calculus.FDeriv.Symmetric
2024-08-23 09:26:58 +02:00
--import Mathlib.LinearAlgebra.Basis
--import Mathlib.LinearAlgebra.Contraction
2024-06-23 21:13:01 +02:00
open BigOperators
open Finset
2024-06-27 06:35:02 +02:00
2024-06-29 17:17:19 +02:00
variable {E : Type*} [NormedAddCommGroup E] [InnerProductSpace E] [FiniteDimensional E]
2024-06-27 14:02:00 +02:00
noncomputable def realInnerAsElementOfDualTensorprod
{E : Type*} [NormedAddCommGroup E] [InnerProductSpace E]
: TensorProduct E E →ₗ[] := TensorProduct.lift bilinFormOfRealInner
2024-06-27 06:35:02 +02:00
2024-06-29 17:17:19 +02:00
2024-07-25 15:52:16 +02:00
instance
2024-06-29 17:17:19 +02:00
{E : Type*} [NormedAddCommGroup E] [InnerProductSpace E] [CompleteSpace E] [FiniteDimensional E]
2024-07-25 15:52:16 +02:00
: NormedAddCommGroup (TensorProduct E E) where
norm := by
2024-06-29 17:17:19 +02:00
sorry
2024-07-25 15:52:16 +02:00
dist_self := by
2024-06-29 17:17:19 +02:00
sorry
sorry
/-
2024-07-25 15:52:16 +02:00
instance
2024-06-29 17:17:19 +02:00
{E : Type*} [NormedAddCommGroup E] [InnerProductSpace E] [CompleteSpace E] [FiniteDimensional E]
: InnerProductSpace (TensorProduct E E) where
smul := _
one_smul := _
mul_smul := _
smul_zero := _
smul_add := _
add_smul := _
zero_smul := _
norm_smul_le := _
inner := _
norm_sq_eq_inner := _
conj_symm := _
add_left := _
smul_left := _
-/
2024-06-27 14:02:00 +02:00
noncomputable def dual'
{E : Type*} [NormedAddCommGroup E] [InnerProductSpace E] [CompleteSpace E] [FiniteDimensional E]
: (TensorProduct E E →ₗ[] ) ≃ₗ[] TensorProduct E E := by
2024-06-27 06:35:02 +02:00
2024-06-27 14:02:00 +02:00
let d := InnerProductSpace.toDual E
2024-06-29 17:17:19 +02:00
2024-06-27 14:02:00 +02:00
let e := d.toLinearEquiv
let a := TensorProduct.congr e e
let b := homTensorHomEquiv E E
2024-06-27 06:35:02 +02:00
2024-06-27 14:02:00 +02:00
sorry
2024-06-27 06:35:02 +02:00
2024-06-27 14:02:00 +02:00
variable {E : Type*} [NormedAddCommGroup E] [InnerProductSpace E] [FiniteDimensional E]
variable {F : Type*} [NormedAddCommGroup F] [NormedSpace F]
theorem InvariantTensor
2024-06-23 21:13:01 +02:00
[Fintype ι]
2024-06-27 14:02:00 +02:00
(v : Basis ι E)
(c : ι)
(L : ContinuousMultilinearMap (fun (_ : Fin 2) ↦ E) F) :
L (fun _ => ∑ j : ι, c j • v j) = ∑ x : Fin 2 → ι, (c (x 0) * c (x 1)) • L ((fun i => v (x i))) := by
rw [L.map_sum]
simp_rw [L.map_smul_univ]
sorry
2024-06-23 21:13:01 +02:00
2024-06-24 07:58:04 +02:00
2024-06-24 17:30:30 +02:00
theorem BilinearCalc
[Fintype ι]
(v : Basis ι E)
(c : ι)
(L : ContinuousMultilinearMap (fun (_ : Fin 2) ↦ E) F) :
L (fun _ => ∑ j : ι, c j • v j) = ∑ x : Fin 2 → ι, (c (x 0) * c (x 1)) • L ((fun i => v (x i))) := by
2024-06-27 06:35:02 +02:00
2024-06-24 17:30:30 +02:00
rw [L.map_sum]
2024-06-27 14:02:00 +02:00
simp_rw [L.map_smul_univ]
sorry
2024-06-24 17:30:30 +02:00
2024-06-27 14:02:00 +02:00
/-
2024-06-24 17:30:30 +02:00
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]
2024-06-27 14:02:00 +02:00
-/
2024-06-24 17:30:30 +02:00
lemma fin_sum
2024-06-23 21:13:01 +02:00
[Fintype ι]
2024-06-24 17:30:30 +02:00
(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
2024-06-27 06:35:02 +02:00
dsimp
2024-06-24 17:30:30 +02:00
theorem LaplaceIndep
[Fintype ι] [DecidableEq ι]
2024-06-27 14:02:00 +02:00
(v₁ : OrthonormalBasis ι E)
(v₂ : OrthonormalBasis ι E)
2024-06-24 17:30:30 +02:00
(L : ContinuousMultilinearMap (fun (_ : Fin 2) ↦ E) F) :
∑ i, L (fun _ ↦ v₁ i) = ∑ i, L (fun _ => v₂ i) := by
2024-06-23 21:13:01 +02:00
2024-06-24 17:30:30 +02:00
have vector_vs_function
2024-06-27 06:35:02 +02:00
{y : Fin 2 → ι}
2024-06-24 17:30:30 +02:00
{v : ι → E}
2024-06-27 06:35:02 +02:00
: (fun i => v (y i)) = ![v (y 0), v (y 1)] := by
2024-06-24 17:30:30 +02:00
funext i
by_cases h : i = 0
· rw [h]
simp
· rw [Fin.eq_one_of_neq_zero i h]
simp
2024-06-23 21:13:01 +02:00
conv =>
right
arg 2
intro i
2024-06-27 14:02:00 +02:00
rw [v₁.sum_repr' (v₂ i)]
2024-06-24 17:30:30 +02:00
rw [BilinearCalc]
rw [Finset.sum_comm]
2024-06-23 21:13:01 +02:00
conv =>
right
arg 2
2024-06-24 17:30:30 +02:00
intro y
rw [← Finset.sum_smul]
rw [← c2 v₂ hv₂ (v₁ (y 0)) (v₁ (y 1))]
rw [vector_vs_function]
simp
2024-06-24 12:14:18 +02:00
2024-06-24 17:30:30 +02:00
rw [fin_sum (fun i₀ ↦ (fun i₁ ↦ ⟪v₁ i₀, v₁ i₁⟫_ • L ![v₁ i₀, v₁ i₁]))]
2024-06-27 06:35:02 +02:00
2024-06-24 17:30:30 +02:00
have xx {r₀ : ι} : ∀ r₁ : ι, r₁ ≠ r₀ → ⟪v₁ r₀, v₁ r₁⟫_ • L ![v₁ r₀, v₁ r₁] = 0 := by
intro r₁ hr₁
rw [orthonormal_iff_ite.1 hv₁]
simp
tauto
2024-06-27 06:35:02 +02:00
2024-06-24 17:30:30 +02:00
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
2024-06-24 12:14:18 +02:00
2024-06-24 17:30:30 +02:00
noncomputable def Laplace_wrt_basis
2024-06-24 12:14:18 +02:00
[Fintype ι]
(v : Basis ι E)
2024-06-24 17:30:30 +02:00
(_ : Orthonormal v)
2024-06-24 12:14:18 +02:00
(f : E → F) :
E → F :=
fun z ↦ ∑ i, iteratedFDeriv 2 f z ![v i, v i]
2024-06-24 17:30:30 +02:00
theorem LaplaceIndep'
[Fintype ι] [DecidableEq ι]
2024-06-27 14:02:00 +02:00
(v₁ : OrthonormalBasis ι E)
(v₂ : OrthonormalBasis ι E)
2024-06-27 06:35:02 +02:00
(f : E → F)
2024-06-24 17:30:30 +02:00
: (Laplace_wrt_basis v₁ hv₁ f) = (Laplace_wrt_basis v₂ hv₂ f) := by
funext z
unfold Laplace_wrt_basis
let XX := LaplaceIndep v₁ hv₁ v₂ hv₂ (iteratedFDeriv 2 f z)
have vector_vs_function
{v : E}
2024-06-27 06:35:02 +02:00
: ![v, v] = (fun _ => v) := by
2024-06-24 17:30:30 +02:00
funext i
by_cases h : i = 0
· rw [h]
simp
· rw [Fin.eq_one_of_neq_zero i h]
simp
conv =>
left
arg 2
intro i
rw [vector_vs_function]
conv =>
right
arg 2
intro i
rw [vector_vs_function]
assumption
theorem LaplaceIndep''
[Fintype ι₁] [DecidableEq ι₁]
(v₁ : Basis ι₁ E)
(hv₁ : Orthonormal v₁)
[Fintype ι₂] [DecidableEq ι₂]
(v₂ : Basis ι₂ E)
(hv₂ : Orthonormal v₂)
2024-06-27 06:35:02 +02:00
(f : E → F)
2024-06-24 17:30:30 +02:00
: (Laplace_wrt_basis v₁ hv₁ f) = (Laplace_wrt_basis v₂ hv₂ f) := by
have b : ι₁ ≃ ι₂ := by
apply Fintype.equivOfCardEq
rw [← FiniteDimensional.finrank_eq_card_basis v₁]
rw [← FiniteDimensional.finrank_eq_card_basis v₂]
let v'₁ := Basis.reindex v₁ b
2024-06-27 06:35:02 +02:00
have hv'₁ : Orthonormal v'₁ := by
2024-06-24 17:30:30 +02:00
let A := Basis.reindex_apply v₁ b
2024-06-27 06:35:02 +02:00
have : ⇑v'₁ = v₁ ∘ b.symm := by
2024-06-24 17:30:30 +02:00
funext i
exact A i
rw [this]
let B := Orthonormal.comp hv₁ b.symm
apply B
exact Equiv.injective b.symm
rw [← LaplaceIndep' v'₁ hv'₁ v₂ hv₂ f]
unfold Laplace_wrt_basis
simp
funext z
rw [← Equiv.sum_comp b.symm]
apply Fintype.sum_congr
intro i₂
congr
rw [Basis.reindex_apply v₁ b i₂]
noncomputable def Laplace
2024-06-27 06:35:02 +02:00
(f : E → F)
2024-06-24 17:30:30 +02:00
: E → F := by
exact Laplace_wrt_basis (stdOrthonormalBasis E).toBasis (stdOrthonormalBasis E).orthonormal f
theorem LaplaceIndep'''
[Fintype ι] [DecidableEq ι]
(v : Basis ι E)
(hv : Orthonormal v)
2024-06-27 06:35:02 +02:00
(f : E → F)
2024-06-24 17:30:30 +02:00
: (Laplace f) = (Laplace_wrt_basis v hv f) := by
unfold Laplace
2024-06-27 06:35:02 +02:00
apply LaplaceIndep'' (stdOrthonormalBasis E).toBasis (stdOrthonormalBasis E).orthonormal v hv f
2024-06-24 17:30:30 +02:00
theorem Complex.Laplace'
(f : → F)
: (Laplace f) = fun z ↦ (iteratedFDeriv 2 f z) ![1, 1] + (iteratedFDeriv 2 f z) ![Complex.I, Complex.I] := by
rw [LaplaceIndep''' Complex.orthonormalBasisOneI.toBasis Complex.orthonormalBasisOneI.orthonormal f]
unfold Laplace_wrt_basis
simp