Imports
/-
Copyright (c) 2025 Tomas Skrivan. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Tomas Skrivan
-/
module
public import Mathlib.LinearAlgebra.Trace
public import Physlib.Mathematics.Calculus.AdjFDeriv
public import Physlib.SpaceAndTime.Space.Derivatives.DivDivergence
In this module we define and create an API around the divergence of a map f : E β E
where E is a normed space over a field π.
@[expose] public section@[simp]
lemma divergence_zero : divergence π (fun _ : E => 0) = fun _ => 0 := π:Type u_1instβΒ²:RCLike πE:Type u_2instβΒΉ:NormedAddCommGroup Einstβ:NormedSpace π Eβ’ (divergence π fun x => 0) = fun x => 0
π:Type u_1instβΒ²:RCLike πE:Type u_2instβΒΉ:NormedAddCommGroup Einstβ:NormedSpace π Eβ’ (fun x => (LinearMap.trace π E) β(fderiv π (fun x => 0) x)) = fun x => 0
All goals completed! ππ:Type u_1instβΒ²:RCLike πE:Type u_2instβΒΉ:NormedAddCommGroup Einstβ:NormedSpace π Es:Finset Eb:Basis (β₯s) π Ef:E β Ex:Eβ’ ((LinearMap.toMatrix b b) β(fderiv π f x)).trace = β i, (b.repr ((fderiv π f x) (b i))) i
simp only [Matrix.trace, Matrix.diag, LinearMap.toMatrix_apply] π:Type u_1instβΒ²:RCLike πE:Type u_2instβΒΉ:NormedAddCommGroup Einstβ:NormedSpace π Es:Finset Eb:Basis (β₯s) π Ef:E β Ex:Eβ’ β x_1, (b.repr (β(fderiv π f x) (b x_1))) x_1 = β i, (b.repr ((fderiv π f x) (b i))) i
rfl All goals completed! π
lemma divergence_eq_sum_fderiv' {ΞΉ} [Fintype ΞΉ] (b : Basis ΞΉ π E) {f : E β E} :
divergence π f = fun x => β i, b.repr (fderiv π f x (b i)) i := by π:Type u_1instβΒ³:RCLike πE:Type u_2instβΒ²:NormedAddCommGroup EinstβΒΉ:NormedSpace π EΞΉ:Type u_4instβ:Fintype ΞΉb:Basis ΞΉ π Ef:E β Eβ’ divergence π f = fun x => β i, (b.repr ((fderiv π f x) (b i))) i
let s : Finset E := Finset.univ.map β¨b, Basis.injective bβ© π:Type u_1instβΒ³:RCLike πE:Type u_2instβΒ²:NormedAddCommGroup EinstβΒΉ:NormedSpace π EΞΉ:Type u_4instβ:Fintype ΞΉb:Basis ΞΉ π Ef:E β Es:Finset E := Finset.map { toFun := βb, inj' := β― } Finset.univβ’ divergence π f = fun x => β i, (b.repr ((fderiv π f x) (b i))) i
let f' : ΞΉ β s := fun i => β¨b i, by π:Type u_1instβΒ³:RCLike πE:Type u_2instβΒ²:NormedAddCommGroup EinstβΒΉ:NormedSpace π EΞΉ:Type u_4instβ:Fintype ΞΉb:Basis ΞΉ π Ef:E β Es:Finset E := Finset.map { toFun := βb, inj' := β― } Finset.univi:ΞΉβ’ b i β s π:Type u_1instβΒ³:RCLike πE:Type u_2instβΒ²:NormedAddCommGroup EinstβΒΉ:NormedSpace π EΞΉ:Type u_4instβ:Fintype ΞΉb:Basis ΞΉ π Ef:E β Es:Finset E := Finset.map { toFun := βb, inj' := β― } Finset.univf':ΞΉ β β₯s := fun i => β¨b i, β―β©β’ divergence π f = fun x => β i, (b.repr ((fderiv π f x) (b i))) i simp [s] All goals completed! π π:Type u_1instβΒ³:RCLike πE:Type u_2instβΒ²:NormedAddCommGroup EinstβΒΉ:NormedSpace π EΞΉ:Type u_4instβ:Fintype ΞΉb:Basis ΞΉ π Ef:E β Es:Finset E := Finset.map { toFun := βb, inj' := β― } Finset.univf':ΞΉ β β₯s := fun i => β¨b i, β―β©β’ divergence π f = fun x => β i, (b.repr ((fderiv π f x) (b i))) iβ© π:Type u_1instβΒ³:RCLike πE:Type u_2instβΒ²:NormedAddCommGroup EinstβΒΉ:NormedSpace π EΞΉ:Type u_4instβ:Fintype ΞΉb:Basis ΞΉ π Ef:E β Es:Finset E := Finset.map { toFun := βb, inj' := β― } Finset.univf':ΞΉ β β₯s := fun i => β¨b i, β―β©β’ divergence π f = fun x => β i, (b.repr ((fderiv π f x) (b i))) i
have h : Function.Injective f' := by
intro i j h π:Type u_1instβΒ³:RCLike πE:Type u_2instβΒ²:NormedAddCommGroup EinstβΒΉ:NormedSpace π EΞΉ:Type u_4instβ:Fintype ΞΉb:Basis ΞΉ π Ef:E β Es:Finset E := Finset.map { toFun := βb, inj' := β― } Finset.univf':ΞΉ β β₯s := fun i => β¨b i, β―β©i:ΞΉj:ΞΉh:f' i = f' jβ’ i = j π:Type u_1instβΒ³:RCLike πE:Type u_2instβΒ²:NormedAddCommGroup EinstβΒΉ:NormedSpace π EΞΉ:Type u_4instβ:Fintype ΞΉb:Basis ΞΉ π Ef:E β Es:Finset E := Finset.map { toFun := βb, inj' := β― } Finset.univf':ΞΉ β β₯s := fun i => β¨b i, β―β©h:Function.Injective f'β’ divergence π f = fun x => β i, (b.repr ((fderiv π f x) (b i))) i
simp [f'] at h π:Type u_1instβΒ³:RCLike πE:Type u_2instβΒ²:NormedAddCommGroup EinstβΒΉ:NormedSpace π EΞΉ:Type u_4instβ:Fintype ΞΉb:Basis ΞΉ π Ef:E β Es:Finset E := Finset.map { toFun := βb, inj' := β― } Finset.univf':ΞΉ β β₯s := fun i => β¨b i, β―β©i:ΞΉj:ΞΉh:b i = b jβ’ i = j π:Type u_1instβΒ³:RCLike πE:Type u_2instβΒ²:NormedAddCommGroup EinstβΒΉ:NormedSpace π EΞΉ:Type u_4instβ:Fintype ΞΉb:Basis ΞΉ π Ef:E β Es:Finset E := Finset.map { toFun := βb, inj' := β― } Finset.univf':ΞΉ β β₯s := fun i => β¨b i, β―β©h:Function.Injective f'β’ divergence π f = fun x => β i, (b.repr ((fderiv π f x) (b i))) i
exact Basis.injective b h π:Type u_1instβΒ³:RCLike πE:Type u_2instβΒ²:NormedAddCommGroup EinstβΒΉ:NormedSpace π EΞΉ:Type u_4instβ:Fintype ΞΉb:Basis ΞΉ π Ef:E β Es:Finset E := Finset.map { toFun := βb, inj' := β― } Finset.univf':ΞΉ β β₯s := fun i => β¨b i, β―β©h:Function.Injective f'β’ divergence π f = fun x => β i, (b.repr ((fderiv π f x) (b i))) i π:Type u_1instβΒ³:RCLike πE:Type u_2instβΒ²:NormedAddCommGroup EinstβΒΉ:NormedSpace π EΞΉ:Type u_4instβ:Fintype ΞΉb:Basis ΞΉ π Ef:E β Es:Finset E := Finset.map { toFun := βb, inj' := β― } Finset.univf':ΞΉ β β₯s := fun i => β¨b i, β―β©h:Function.Injective f'β’ divergence π f = fun x => β i, (b.repr ((fderiv π f x) (b i))) i
have h' : Function.Surjective f' := by
intro β¨x, hxβ© π:Type u_1instβΒ³:RCLike πE:Type u_2instβΒ²:NormedAddCommGroup EinstβΒΉ:NormedSpace π EΞΉ:Type u_4instβ:Fintype ΞΉb:Basis ΞΉ π Ef:E β Es:Finset E := Finset.map { toFun := βb, inj' := β― } Finset.univf':ΞΉ β β₯s := fun i => β¨b i, β―β©h:Function.Injective f'x:Ehx:x β sβ’ β a, f' a = β¨x, hxβ© π:Type u_1instβΒ³:RCLike πE:Type u_2instβΒ²:NormedAddCommGroup EinstβΒΉ:NormedSpace π EΞΉ:Type u_4instβ:Fintype ΞΉb:Basis ΞΉ π Ef:E β Es:Finset E := Finset.map { toFun := βb, inj' := β― } Finset.univf':ΞΉ β β₯s := fun i => β¨b i, β―β©h:Function.Injective f'h':Function.Surjective f'β’ divergence π f = fun x => β i, (b.repr ((fderiv π f x) (b i))) i
simp [s] at hx π:Type u_1instβΒ³:RCLike πE:Type u_2instβΒ²:NormedAddCommGroup EinstβΒΉ:NormedSpace π EΞΉ:Type u_4instβ:Fintype ΞΉb:Basis ΞΉ π Ef:E β Es:Finset E := Finset.map { toFun := βb, inj' := β― } Finset.univf':ΞΉ β β₯s := fun i => β¨b i, β―β©h:Function.Injective f'x:Ehxβ:x β shx:β a, b a = xβ’ β a, f' a = β¨x, hxβ© π:Type u_1instβΒ³:RCLike πE:Type u_2instβΒ²:NormedAddCommGroup EinstβΒΉ:NormedSpace π EΞΉ:Type u_4instβ:Fintype ΞΉb:Basis ΞΉ π Ef:E β Es:Finset E := Finset.map { toFun := βb, inj' := β― } Finset.univf':ΞΉ β β₯s := fun i => β¨b i, β―β©h:Function.Injective f'h':Function.Surjective f'β’ divergence π f = fun x => β i, (b.repr ((fderiv π f x) (b i))) i
obtain β¨i, rflβ© := hx π:Type u_1instβΒ³:RCLike πE:Type u_2instβΒ²:NormedAddCommGroup EinstβΒΉ:NormedSpace π EΞΉ:Type u_4instβ:Fintype ΞΉb:Basis ΞΉ π Ef:E β Es:Finset E := Finset.map { toFun := βb, inj' := β― } Finset.univf':ΞΉ β β₯s := fun i => β¨b i, β―β©h:Function.Injective f'i:ΞΉhx:b i β sβ’ β a, f' a = β¨b i, hxβ© π:Type u_1instβΒ³:RCLike πE:Type u_2instβΒ²:NormedAddCommGroup EinstβΒΉ:NormedSpace π EΞΉ:Type u_4instβ:Fintype ΞΉb:Basis ΞΉ π Ef:E β Es:Finset E := Finset.map { toFun := βb, inj' := β― } Finset.univf':ΞΉ β β₯s := fun i => β¨b i, β―β©h:Function.Injective f'h':Function.Surjective f'β’ divergence π f = fun x => β i, (b.repr ((fderiv π f x) (b i))) i
simp [f'] π:Type u_1instβΒ³:RCLike πE:Type u_2instβΒ²:NormedAddCommGroup EinstβΒΉ:NormedSpace π EΞΉ:Type u_4instβ:Fintype ΞΉb:Basis ΞΉ π Ef:E β Es:Finset E := Finset.map { toFun := βb, inj' := β― } Finset.univf':ΞΉ β β₯s := fun i => β¨b i, β―β©h:Function.Injective f'h':Function.Surjective f'β’ divergence π f = fun x => β i, (b.repr ((fderiv π f x) (b i))) i π:Type u_1instβΒ³:RCLike πE:Type u_2instβΒ²:NormedAddCommGroup EinstβΒΉ:NormedSpace π EΞΉ:Type u_4instβ:Fintype ΞΉb:Basis ΞΉ π Ef:E β Es:Finset E := Finset.map { toFun := βb, inj' := β― } Finset.univf':ΞΉ β β₯s := fun i => β¨b i, β―β©h:Function.Injective f'h':Function.Surjective f'β’ divergence π f = fun x => β i, (b.repr ((fderiv π f x) (b i))) i
let e : ΞΉ β s := Equiv.ofBijective f' β¨h, h'β© π:Type u_1instβΒ³:RCLike πE:Type u_2instβΒ²:NormedAddCommGroup EinstβΒΉ:NormedSpace π EΞΉ:Type u_4instβ:Fintype ΞΉb:Basis ΞΉ π Ef:E β Es:Finset E := Finset.map { toFun := βb, inj' := β― } Finset.univf':ΞΉ β β₯s := fun i => β¨b i, β―β©h:Function.Injective f'h':Function.Surjective f'e:ΞΉ β β₯s := Equiv.ofBijective f' β―β’ divergence π f = fun x => β i, (b.repr ((fderiv π f x) (b i))) i
let b' : Basis s π E := b.reindex e π:Type u_1instβΒ³:RCLike πE:Type u_2instβΒ²:NormedAddCommGroup EinstβΒΉ:NormedSpace π EΞΉ:Type u_4instβ:Fintype ΞΉb:Basis ΞΉ π Ef:E β Es:Finset E := Finset.map { toFun := βb, inj' := β― } Finset.univf':ΞΉ β β₯s := fun i => β¨b i, β―β©h:Function.Injective f'h':Function.Surjective f'e:ΞΉ β β₯s := Equiv.ofBijective f' β―b':Basis (β₯s) π E := b.reindex eβ’ divergence π f = fun x => β i, (b.repr ((fderiv π f x) (b i))) i
rw [divergence_eq_sum_fderiv b' π:Type u_1instβΒ³:RCLike πE:Type u_2instβΒ²:NormedAddCommGroup EinstβΒΉ:NormedSpace π EΞΉ:Type u_4instβ:Fintype ΞΉb:Basis ΞΉ π Ef:E β Es:Finset E := Finset.map { toFun := βb, inj' := β― } Finset.univf':ΞΉ β β₯s := fun i => β¨b i, β―β©h:Function.Injective f'h':Function.Surjective f'e:ΞΉ β β₯s := Equiv.ofBijective f' β―b':Basis (β₯s) π E := b.reindex eβ’ (fun x => β i, (b'.repr ((fderiv π f x) (b' i))) i) = fun x => β i, (b.repr ((fderiv π f x) (b i))) i π:Type u_1instβΒ³:RCLike πE:Type u_2instβΒ²:NormedAddCommGroup EinstβΒΉ:NormedSpace π EΞΉ:Type u_4instβ:Fintype ΞΉb:Basis ΞΉ π Ef:E β Es:Finset E := Finset.map { toFun := βb, inj' := β― } Finset.univf':ΞΉ β β₯s := fun i => β¨b i, β―β©h:Function.Injective f'h':Function.Surjective f'e:ΞΉ β β₯s := Equiv.ofBijective f' β―b':Basis (β₯s) π E := b.reindex eβ’ (fun x => β i, (b'.repr ((fderiv π f x) (b' i))) i) = fun x => β i, (b.repr ((fderiv π f x) (b i))) i] π:Type u_1instβΒ³:RCLike πE:Type u_2instβΒ²:NormedAddCommGroup EinstβΒΉ:NormedSpace π EΞΉ:Type u_4instβ:Fintype ΞΉb:Basis ΞΉ π Ef:E β Es:Finset E := Finset.map { toFun := βb, inj' := β― } Finset.univf':ΞΉ β β₯s := fun i => β¨b i, β―β©h:Function.Injective f'h':Function.Surjective f'e:ΞΉ β β₯s := Equiv.ofBijective f' β―b':Basis (β₯s) π E := b.reindex eβ’ (fun x => β i, (b'.repr ((fderiv π f x) (b' i))) i) = fun x => β i, (b.repr ((fderiv π f x) (b i))) i
ext x π:Type u_1instβΒ³:RCLike πE:Type u_2instβΒ²:NormedAddCommGroup EinstβΒΉ:NormedSpace π EΞΉ:Type u_4instβ:Fintype ΞΉb:Basis ΞΉ π Ef:E β Es:Finset E := Finset.map { toFun := βb, inj' := β― } Finset.univf':ΞΉ β β₯s := fun i => β¨b i, β―β©h:Function.Injective f'h':Function.Surjective f'e:ΞΉ β β₯s := Equiv.ofBijective f' β―b':Basis (β₯s) π E := b.reindex ex:Eβ’ β i, (b'.repr ((fderiv π f x) (b' i))) i = β i, (b.repr ((fderiv π f x) (b i))) i
rw [β e.symm.sum_comp π:Type u_1instβΒ³:RCLike πE:Type u_2instβΒ²:NormedAddCommGroup EinstβΒΉ:NormedSpace π EΞΉ:Type u_4instβ:Fintype ΞΉb:Basis ΞΉ π Ef:E β Es:Finset E := Finset.map { toFun := βb, inj' := β― } Finset.univf':ΞΉ β β₯s := fun i => β¨b i, β―β©h:Function.Injective f'h':Function.Surjective f'e:ΞΉ β β₯s := Equiv.ofBijective f' β―b':Basis (β₯s) π E := b.reindex ex:Eβ’ β i, (b'.repr ((fderiv π f x) (b' i))) i = β i, (b.repr ((fderiv π f x) (b (e.symm i)))) (e.symm i) π:Type u_1instβΒ³:RCLike πE:Type u_2instβΒ²:NormedAddCommGroup EinstβΒΉ:NormedSpace π EΞΉ:Type u_4instβ:Fintype ΞΉb:Basis ΞΉ π Ef:E β Es:Finset E := Finset.map { toFun := βb, inj' := β― } Finset.univf':ΞΉ β β₯s := fun i => β¨b i, β―β©h:Function.Injective f'h':Function.Surjective f'e:ΞΉ β β₯s := Equiv.ofBijective f' β―b':Basis (β₯s) π E := b.reindex ex:Eβ’ β i, (b'.repr ((fderiv π f x) (b' i))) i = β i, (b.repr ((fderiv π f x) (b (e.symm i)))) (e.symm i)] π:Type u_1instβΒ³:RCLike πE:Type u_2instβΒ²:NormedAddCommGroup EinstβΒΉ:NormedSpace π EΞΉ:Type u_4instβ:Fintype ΞΉb:Basis ΞΉ π Ef:E β Es:Finset E := Finset.map { toFun := βb, inj' := β― } Finset.univf':ΞΉ β β₯s := fun i => β¨b i, β―β©h:Function.Injective f'h':Function.Surjective f'e:ΞΉ β β₯s := Equiv.ofBijective f' β―b':Basis (β₯s) π E := b.reindex ex:Eβ’ β i, (b'.repr ((fderiv π f x) (b' i))) i = β i, (b.repr ((fderiv π f x) (b (e.symm i)))) (e.symm i)
simp [b'] All goals completed! π
lemma divergence_eq_space_div {d} (f : Space d β Space d)
(h : Differentiable β f) : divergence β f = Space.div (Space.basis.repr β f) := by d:βf:Space d β Space dh:Differentiable β fβ’ divergence β f = Space.div (βSpace.basis.repr β f)
let b := (Space.basis (d:=d)).toBasis d:βf:Space d β Space dh:Differentiable β fb:Basis (Fin d) β (Space d) := Space.basis.toBasisβ’ divergence β f = Space.div (βSpace.basis.repr β f)
rw[divergence_eq_sum_fderiv' b d:βf:Space d β Space dh:Differentiable β fb:Basis (Fin d) β (Space d) := Space.basis.toBasisβ’ (fun x => β i, (b.repr ((fderiv β f x) (b i))) i) = Space.div (βSpace.basis.repr β f) d:βf:Space d β Space dh:Differentiable β fb:Basis (Fin d) β (Space d) := Space.basis.toBasisβ’ (fun x => β i, (b.repr ((fderiv β f x) (b i))) i) = Space.div (βSpace.basis.repr β f)] d:βf:Space d β Space dh:Differentiable β fb:Basis (Fin d) β (Space d) := Space.basis.toBasisβ’ (fun x => β i, (b.repr ((fderiv β f x) (b i))) i) = Space.div (βSpace.basis.repr β f)
funext x d:βf:Space d β Space dh:Differentiable β fb:Basis (Fin d) β (Space d) := Space.basis.toBasisx:Space dβ’ β i, (b.repr ((fderiv β f x) (b i))) i = Space.div (βSpace.basis.repr β f) x
simp +zetaDelta only [OrthonormalBasis.coe_toBasis, OrthonormalBasis.coe_toBasis_repr_apply,
Space.basis_repr_apply, Space.div, Space.deriv, Function.comp_apply] d:βf:Space d β Space dh:Differentiable β fb:Basis (Fin d) β (Space d) := Space.basis.toBasisx:Space dβ’ β x_1, ((fderiv β f x) (Space.basis x_1)).val x_1 = β x_1, (fderiv β (fun x => (f x).val x_1) x) (Space.basis x_1)
congr e_f d:βf:Space d β Space dh:Differentiable β fb:Basis (Fin d) β (Space d) := Space.basis.toBasisx:Space dβ’ (fun x_1 => ((fderiv β f x) (Space.basis x_1)).val x_1) = fun x_1 =>
(fderiv β (fun x => (f x).val x_1) x) (Space.basis x_1)
funext i e_f d:βf:Space d β Space dh:Differentiable β fb:Basis (Fin d) β (Space d) := Space.basis.toBasisx:Space di:Fin dβ’ ((fderiv β f x) (Space.basis i)).val i = (fderiv β (fun x => (f x).val i) x) (Space.basis i)
have h1 : (fderiv β (fun x => f x i) x)
= fderiv β (Space.coordCLM i β f) x := by d:βf:Space d β Space dh:Differentiable β fβ’ divergence β f = Space.div (βSpace.basis.repr β f) e_f d:βf:Space d β Space dh:Differentiable β fb:Basis (Fin d) β (Space d) := Space.basis.toBasisx:Space di:Fin dh1:fderiv β (fun x => (f x).val i) x = fderiv β (β(Space.coordCLM i) β f) xβ’ ((fderiv β f x) (Space.basis i)).val i = (fderiv β (fun x => (f x).val i) x) (Space.basis i)
congr e_f d:βf:Space d β Space dh:Differentiable β fb:Basis (Fin d) β (Space d) := Space.basis.toBasisx:Space di:Fin dβ’ (fun x => (f x).val i) = β(Space.coordCLM i) β fe_f d:βf:Space d β Space dh:Differentiable β fb:Basis (Fin d) β (Space d) := Space.basis.toBasisx:Space di:Fin dh1:fderiv β (fun x => (f x).val i) x = fderiv β (β(Space.coordCLM i) β f) xβ’ ((fderiv β f x) (Space.basis i)).val i = (fderiv β (fun x => (f x).val i) x) (Space.basis i)
ext j e_f d:βf:Space d β Space dh:Differentiable β fb:Basis (Fin d) β (Space d) := Space.basis.toBasisx:Space di:Fin dj:Space dβ’ (f j).val i = (β(Space.coordCLM i) β f) je_f d:βf:Space d β Space dh:Differentiable β fb:Basis (Fin d) β (Space d) := Space.basis.toBasisx:Space di:Fin dh1:fderiv β (fun x => (f x).val i) x = fderiv β (β(Space.coordCLM i) β f) xβ’ ((fderiv β f x) (Space.basis i)).val i = (fderiv β (fun x => (f x).val i) x) (Space.basis i)
simp only [Function.comp_apply] e_f d:βf:Space d β Space dh:Differentiable β fb:Basis (Fin d) β (Space d) := Space.basis.toBasisx:Space di:Fin dj:Space dβ’ (f j).val i = (Space.coordCLM i) (f j)e_f d:βf:Space d β Space dh:Differentiable β fb:Basis (Fin d) β (Space d) := Space.basis.toBasisx:Space di:Fin dh1:fderiv β (fun x => (f x).val i) x = fderiv β (β(Space.coordCLM i) β f) xβ’ ((fderiv β f x) (Space.basis i)).val i = (fderiv β (fun x => (f x).val i) x) (Space.basis i)
rw [Space.coordCLM_apply, e_f d:βf:Space d β Space dh:Differentiable β fb:Basis (Fin d) β (Space d) := Space.basis.toBasisx:Space di:Fin dj:Space dβ’ (f j).val i = Space.coord i (f j)e_f d:βf:Space d β Space dh:Differentiable β fb:Basis (Fin d) β (Space d) := Space.basis.toBasisx:Space di:Fin dh1:fderiv β (fun x => (f x).val i) x = fderiv β (β(Space.coordCLM i) β f) xβ’ ((fderiv β f x) (Space.basis i)).val i = (fderiv β (fun x => (f x).val i) x) (Space.basis i) Space.coord_apply e_f d:βf:Space d β Space dh:Differentiable β fb:Basis (Fin d) β (Space d) := Space.basis.toBasisx:Space di:Fin dj:Space dβ’ (f j).val i = (f j).val ie_f d:βf:Space d β Space dh:Differentiable β fb:Basis (Fin d) β (Space d) := Space.basis.toBasisx:Space di:Fin dh1:fderiv β (fun x => (f x).val i) x = fderiv β (β(Space.coordCLM i) β f) xβ’ ((fderiv β f x) (Space.basis i)).val i = (fderiv β (fun x => (f x).val i) x) (Space.basis i)]e_f d:βf:Space d β Space dh:Differentiable β fb:Basis (Fin d) β (Space d) := Space.basis.toBasisx:Space di:Fin dh1:fderiv β (fun x => (f x).val i) x = fderiv β (β(Space.coordCLM i) β f) xβ’ ((fderiv β f x) (Space.basis i)).val i = (fderiv β (fun x => (f x).val i) x) (Space.basis i)e_f d:βf:Space d β Space dh:Differentiable β fb:Basis (Fin d) β (Space d) := Space.basis.toBasisx:Space di:Fin dh1:fderiv β (fun x => (f x).val i) x = fderiv β (β(Space.coordCLM i) β f) xβ’ ((fderiv β f x) (Space.basis i)).val i = (fderiv β (fun x => (f x).val i) x) (Space.basis i)
rw [h1 e_f d:βf:Space d β Space dh:Differentiable β fb:Basis (Fin d) β (Space d) := Space.basis.toBasisx:Space di:Fin dh1:fderiv β (fun x => (f x).val i) x = fderiv β (β(Space.coordCLM i) β f) xβ’ ((fderiv β f x) (Space.basis i)).val i = (fderiv β (β(Space.coordCLM i) β f) x) (Space.basis i) e_f d:βf:Space d β Space dh:Differentiable β fb:Basis (Fin d) β (Space d) := Space.basis.toBasisx:Space di:Fin dh1:fderiv β (fun x => (f x).val i) x = fderiv β (β(Space.coordCLM i) β f) xβ’ ((fderiv β f x) (Space.basis i)).val i = (fderiv β (β(Space.coordCLM i) β f) x) (Space.basis i)]e_f d:βf:Space d β Space dh:Differentiable β fb:Basis (Fin d) β (Space d) := Space.basis.toBasisx:Space di:Fin dh1:fderiv β (fun x => (f x).val i) x = fderiv β (β(Space.coordCLM i) β f) xβ’ ((fderiv β f x) (Space.basis i)).val i = (fderiv β (β(Space.coordCLM i) β f) x) (Space.basis i)
rw [fderiv_comp e_f d:βf:Space d β Space dh:Differentiable β fb:Basis (Fin d) β (Space d) := Space.basis.toBasisx:Space di:Fin dh1:fderiv β (fun x => (f x).val i) x = fderiv β (β(Space.coordCLM i) β f) xβ’ ((fderiv β f x) (Space.basis i)).val i = (fderiv β (β(Space.coordCLM i)) (f x) βSL fderiv β f x) (Space.basis i)e_f.hg d:βf:Space d β Space dh:Differentiable β fb:Basis (Fin d) β (Space d) := Space.basis.toBasisx:Space di:Fin dh1:fderiv β (fun x => (f x).val i) x = fderiv β (β(Space.coordCLM i) β f) xβ’ DifferentiableAt β (β(Space.coordCLM i)) (f x)e_f.hf d:βf:Space d β Space dh:Differentiable β fb:Basis (Fin d) β (Space d) := Space.basis.toBasisx:Space di:Fin dh1:fderiv β (fun x => (f x).val i) x = fderiv β (β(Space.coordCLM i) β f) xβ’ DifferentiableAt β f x e_f d:βf:Space d β Space dh:Differentiable β fb:Basis (Fin d) β (Space d) := Space.basis.toBasisx:Space di:Fin dh1:fderiv β (fun x => (f x).val i) x = fderiv β (β(Space.coordCLM i) β f) xβ’ ((fderiv β f x) (Space.basis i)).val i = (fderiv β (β(Space.coordCLM i)) (f x) βSL fderiv β f x) (Space.basis i)e_f.hg d:βf:Space d β Space dh:Differentiable β fb:Basis (Fin d) β (Space d) := Space.basis.toBasisx:Space di:Fin dh1:fderiv β (fun x => (f x).val i) x = fderiv β (β(Space.coordCLM i) β f) xβ’ DifferentiableAt β (β(Space.coordCLM i)) (f x)e_f.hf d:βf:Space d β Space dh:Differentiable β fb:Basis (Fin d) β (Space d) := Space.basis.toBasisx:Space di:Fin dh1:fderiv β (fun x => (f x).val i) x = fderiv β (β(Space.coordCLM i) β f) xβ’ DifferentiableAt β f x]e_f d:βf:Space d β Space dh:Differentiable β fb:Basis (Fin d) β (Space d) := Space.basis.toBasisx:Space di:Fin dh1:fderiv β (fun x => (f x).val i) x = fderiv β (β(Space.coordCLM i) β f) xβ’ ((fderiv β f x) (Space.basis i)).val i = (fderiv β (β(Space.coordCLM i)) (f x) βSL fderiv β f x) (Space.basis i)e_f.hg d:βf:Space d β Space dh:Differentiable β fb:Basis (Fin d) β (Space d) := Space.basis.toBasisx:Space di:Fin dh1:fderiv β (fun x => (f x).val i) x = fderiv β (β(Space.coordCLM i) β f) xβ’ DifferentiableAt β (β(Space.coordCLM i)) (f x)e_f.hf d:βf:Space d β Space dh:Differentiable β fb:Basis (Fin d) β (Space d) := Space.basis.toBasisx:Space di:Fin dh1:fderiv β (fun x => (f x).val i) x = fderiv β (β(Space.coordCLM i) β f) xβ’ DifferentiableAt β f x
simp [Space.coordCLM_apply, Space.coord_apply] e_f.hg d:βf:Space d β Space dh:Differentiable β fb:Basis (Fin d) β (Space d) := Space.basis.toBasisx:Space di:Fin dh1:fderiv β (fun x => (f x).val i) x = fderiv β (β(Space.coordCLM i) β f) xβ’ DifferentiableAt β (β(Space.coordCLM i)) (f x)e_f.hf d:βf:Space d β Space dh:Differentiable β fb:Basis (Fin d) β (Space d) := Space.basis.toBasisx:Space di:Fin dh1:fderiv β (fun x => (f x).val i) x = fderiv β (β(Space.coordCLM i) β f) xβ’ DifferentiableAt β f x
Β· e_f.hg d:βf:Space d β Space dh:Differentiable β fb:Basis (Fin d) β (Space d) := Space.basis.toBasisx:Space di:Fin dh1:fderiv β (fun x => (f x).val i) x = fderiv β (β(Space.coordCLM i) β f) xβ’ DifferentiableAt β (β(Space.coordCLM i)) (f x) fun_prop All goals completed! π
Β· e_f.hf d:βf:Space d β Space dh:Differentiable β fb:Basis (Fin d) β (Space d) := Space.basis.toBasisx:Space di:Fin dh1:fderiv β (fun x => (f x).val i) x = fderiv β (β(Space.coordCLM i) β f) xβ’ DifferentiableAt β f x exact h x All goals completed! π
lemma divergence_prodMk [FiniteDimensional π E] [FiniteDimensional π F]
{f : EΓF β E} {g : EΓF β F} {xy : EΓF}
(hf : DifferentiableAt π f xy) (hg : DifferentiableAt π g xy) :
divergence π (fun xy : EΓF => (f xy, g xy)) xy
=
divergence π (fun x' => f (x',xy.2)) xy.1
+
divergence π (fun y' => g (xy.1,y')) xy.2 := by π:Type u_1instββΆ:RCLike πE:Type u_2instββ΅:NormedAddCommGroup Einstββ΄:NormedSpace π EF:Type u_3instβΒ³:NormedAddCommGroup FinstβΒ²:NormedSpace π FinstβΒΉ:FiniteDimensional π Einstβ:FiniteDimensional π Ff:E Γ F β Eg:E Γ F β Fxy:E Γ Fhf:DifferentiableAt π f xyhg:DifferentiableAt π g xyβ’ divergence π (fun xy => (f xy, g xy)) xy =
divergence π (fun x' => f (x', xy.2)) xy.1 + divergence π (fun y' => g (xy.1, y')) xy.2
obtain β¨s, β¨bXβ©β© := Basis.exists_basis π E π:Type u_1instββΆ:RCLike πE:Type u_2instββ΅:NormedAddCommGroup Einstββ΄:NormedSpace π EF:Type u_3instβΒ³:NormedAddCommGroup FinstβΒ²:NormedSpace π FinstβΒΉ:FiniteDimensional π Einstβ:FiniteDimensional π Ff:E Γ F β Eg:E Γ F β Fxy:E Γ Fhf:DifferentiableAt π f xyhg:DifferentiableAt π g xys:Set EbX:Basis (βs) π Eβ’ divergence π (fun xy => (f xy, g xy)) xy =
divergence π (fun x' => f (x', xy.2)) xy.1 + divergence π (fun y' => g (xy.1, y')) xy.2
haveI : Fintype s := FiniteDimensional.fintypeBasisIndex bX π:Type u_1instββΆ:RCLike πE:Type u_2instββ΅:NormedAddCommGroup Einstββ΄:NormedSpace π EF:Type u_3instβΒ³:NormedAddCommGroup FinstβΒ²:NormedSpace π FinstβΒΉ:FiniteDimensional π Einstβ:FiniteDimensional π Ff:E Γ F β Eg:E Γ F β Fxy:E Γ Fhf:DifferentiableAt π f xyhg:DifferentiableAt π g xys:Set EbX:Basis (βs) π Ethis:Fintype βsβ’ divergence π (fun xy => (f xy, g xy)) xy =
divergence π (fun x' => f (x', xy.2)) xy.1 + divergence π (fun y' => g (xy.1, y')) xy.2
obtain β¨sY, β¨bYβ©β© := Basis.exists_basis π F π:Type u_1instββΆ:RCLike πE:Type u_2instββ΅:NormedAddCommGroup Einstββ΄:NormedSpace π EF:Type u_3instβΒ³:NormedAddCommGroup FinstβΒ²:NormedSpace π FinstβΒΉ:FiniteDimensional π Einstβ:FiniteDimensional π Ff:E Γ F β Eg:E Γ F β Fxy:E Γ Fhf:DifferentiableAt π f xyhg:DifferentiableAt π g xys:Set EbX:Basis (βs) π Ethis:Fintype βssY:Set FbY:Basis (βsY) π Fβ’ divergence π (fun xy => (f xy, g xy)) xy =
divergence π (fun x' => f (x', xy.2)) xy.1 + divergence π (fun y' => g (xy.1, y')) xy.2
haveI : Fintype sY := FiniteDimensional.fintypeBasisIndex bY π:Type u_1instββΆ:RCLike πE:Type u_2instββ΅:NormedAddCommGroup Einstββ΄:NormedSpace π EF:Type u_3instβΒ³:NormedAddCommGroup FinstβΒ²:NormedSpace π FinstβΒΉ:FiniteDimensional π Einstβ:FiniteDimensional π Ff:E Γ F β Eg:E Γ F β Fxy:E Γ Fhf:DifferentiableAt π f xyhg:DifferentiableAt π g xys:Set EbX:Basis (βs) π Ethisβ:Fintype βssY:Set FbY:Basis (βsY) π Fthis:Fintype βsYβ’ divergence π (fun xy => (f xy, g xy)) xy =
divergence π (fun x' => f (x', xy.2)) xy.1 + divergence π (fun y' => g (xy.1, y')) xy.2
let bXY := bX.prod bY π:Type u_1instββΆ:RCLike πE:Type u_2instββ΅:NormedAddCommGroup Einstββ΄:NormedSpace π EF:Type u_3instβΒ³:NormedAddCommGroup FinstβΒ²:NormedSpace π FinstβΒΉ:FiniteDimensional π Einstβ:FiniteDimensional π Ff:E Γ F β Eg:E Γ F β Fxy:E Γ Fhf:DifferentiableAt π f xyhg:DifferentiableAt π g xys:Set EbX:Basis (βs) π Ethisβ:Fintype βssY:Set FbY:Basis (βsY) π Fthis:Fintype βsYbXY:Basis (βs β βsY) π (E Γ F) := bX.prod bYβ’ divergence π (fun xy => (f xy, g xy)) xy =
divergence π (fun x' => f (x', xy.2)) xy.1 + divergence π (fun y' => g (xy.1, y')) xy.2
rw[divergence_eq_sum_fderiv' bX π:Type u_1instββΆ:RCLike πE:Type u_2instββ΅:NormedAddCommGroup Einstββ΄:NormedSpace π EF:Type u_3instβΒ³:NormedAddCommGroup FinstβΒ²:NormedSpace π FinstβΒΉ:FiniteDimensional π Einstβ:FiniteDimensional π Ff:E Γ F β Eg:E Γ F β Fxy:E Γ Fhf:DifferentiableAt π f xyhg:DifferentiableAt π g xys:Set EbX:Basis (βs) π Ethisβ:Fintype βssY:Set FbY:Basis (βsY) π Fthis:Fintype βsYbXY:Basis (βs β βsY) π (E Γ F) := bX.prod bYβ’ divergence π (fun xy => (f xy, g xy)) xy =
(fun x => β i, (bX.repr ((fderiv π (fun x' => f (x', xy.2)) x) (bX i))) i) xy.1 +
divergence π (fun y' => g (xy.1, y')) xy.2 π:Type u_1instββΆ:RCLike πE:Type u_2instββ΅:NormedAddCommGroup Einstββ΄:NormedSpace π EF:Type u_3instβΒ³:NormedAddCommGroup FinstβΒ²:NormedSpace π FinstβΒΉ:FiniteDimensional π Einstβ:FiniteDimensional π Ff:E Γ F β Eg:E Γ F β Fxy:E Γ Fhf:DifferentiableAt π f xyhg:DifferentiableAt π g xys:Set EbX:Basis (βs) π Ethisβ:Fintype βssY:Set FbY:Basis (βsY) π Fthis:Fintype βsYbXY:Basis (βs β βsY) π (E Γ F) := bX.prod bYβ’ divergence π (fun xy => (f xy, g xy)) xy =
(fun x => β i, (bX.repr ((fderiv π (fun x' => f (x', xy.2)) x) (bX i))) i) xy.1 +
divergence π (fun y' => g (xy.1, y')) xy.2] π:Type u_1instββΆ:RCLike πE:Type u_2instββ΅:NormedAddCommGroup Einstββ΄:NormedSpace π EF:Type u_3instβΒ³:NormedAddCommGroup FinstβΒ²:NormedSpace π FinstβΒΉ:FiniteDimensional π Einstβ:FiniteDimensional π Ff:E Γ F β Eg:E Γ F β Fxy:E Γ Fhf:DifferentiableAt π f xyhg:DifferentiableAt π g xys:Set EbX:Basis (βs) π Ethisβ:Fintype βssY:Set FbY:Basis (βsY) π Fthis:Fintype βsYbXY:Basis (βs β βsY) π (E Γ F) := bX.prod bYβ’ divergence π (fun xy => (f xy, g xy)) xy =
(fun x => β i, (bX.repr ((fderiv π (fun x' => f (x', xy.2)) x) (bX i))) i) xy.1 +
divergence π (fun y' => g (xy.1, y')) xy.2
rw[divergence_eq_sum_fderiv' bY π:Type u_1instββΆ:RCLike πE:Type u_2instββ΅:NormedAddCommGroup Einstββ΄:NormedSpace π EF:Type u_3instβΒ³:NormedAddCommGroup FinstβΒ²:NormedSpace π FinstβΒΉ:FiniteDimensional π Einstβ:FiniteDimensional π Ff:E Γ F β Eg:E Γ F β Fxy:E Γ Fhf:DifferentiableAt π f xyhg:DifferentiableAt π g xys:Set EbX:Basis (βs) π Ethisβ:Fintype βssY:Set FbY:Basis (βsY) π Fthis:Fintype βsYbXY:Basis (βs β βsY) π (E Γ F) := bX.prod bYβ’ divergence π (fun xy => (f xy, g xy)) xy =
(fun x => β i, (bX.repr ((fderiv π (fun x' => f (x', xy.2)) x) (bX i))) i) xy.1 +
(fun x => β i, (bY.repr ((fderiv π (fun y' => g (xy.1, y')) x) (bY i))) i) xy.2 π:Type u_1instββΆ:RCLike πE:Type u_2instββ΅:NormedAddCommGroup Einstββ΄:NormedSpace π EF:Type u_3instβΒ³:NormedAddCommGroup FinstβΒ²:NormedSpace π FinstβΒΉ:FiniteDimensional π Einstβ:FiniteDimensional π Ff:E Γ F β Eg:E Γ F β Fxy:E Γ Fhf:DifferentiableAt π f xyhg:DifferentiableAt π g xys:Set EbX:Basis (βs) π Ethisβ:Fintype βssY:Set FbY:Basis (βsY) π Fthis:Fintype βsYbXY:Basis (βs β βsY) π (E Γ F) := bX.prod bYβ’ divergence π (fun xy => (f xy, g xy)) xy =
(fun x => β i, (bX.repr ((fderiv π (fun x' => f (x', xy.2)) x) (bX i))) i) xy.1 +
(fun x => β i, (bY.repr ((fderiv π (fun y' => g (xy.1, y')) x) (bY i))) i) xy.2] π:Type u_1instββΆ:RCLike πE:Type u_2instββ΅:NormedAddCommGroup Einstββ΄:NormedSpace π EF:Type u_3instβΒ³:NormedAddCommGroup FinstβΒ²:NormedSpace π FinstβΒΉ:FiniteDimensional π Einstβ:FiniteDimensional π Ff:E Γ F β Eg:E Γ F β Fxy:E Γ Fhf:DifferentiableAt π f xyhg:DifferentiableAt π g xys:Set EbX:Basis (βs) π Ethisβ:Fintype βssY:Set FbY:Basis (βsY) π Fthis:Fintype βsYbXY:Basis (βs β βsY) π (E Γ F) := bX.prod bYβ’ divergence π (fun xy => (f xy, g xy)) xy =
(fun x => β i, (bX.repr ((fderiv π (fun x' => f (x', xy.2)) x) (bX i))) i) xy.1 +
(fun x => β i, (bY.repr ((fderiv π (fun y' => g (xy.1, y')) x) (bY i))) i) xy.2
rw[divergence_eq_sum_fderiv' bXY π:Type u_1instββΆ:RCLike πE:Type u_2instββ΅:NormedAddCommGroup Einstββ΄:NormedSpace π EF:Type u_3instβΒ³:NormedAddCommGroup FinstβΒ²:NormedSpace π FinstβΒΉ:FiniteDimensional π Einstβ:FiniteDimensional π Ff:E Γ F β Eg:E Γ F β Fxy:E Γ Fhf:DifferentiableAt π f xyhg:DifferentiableAt π g xys:Set EbX:Basis (βs) π Ethisβ:Fintype βssY:Set FbY:Basis (βsY) π Fthis:Fintype βsYbXY:Basis (βs β βsY) π (E Γ F) := bX.prod bYβ’ (fun x => β i, (bXY.repr ((fderiv π (fun xy => (f xy, g xy)) x) (bXY i))) i) xy =
(fun x => β i, (bX.repr ((fderiv π (fun x' => f (x', xy.2)) x) (bX i))) i) xy.1 +
(fun x => β i, (bY.repr ((fderiv π (fun y' => g (xy.1, y')) x) (bY i))) i) xy.2 π:Type u_1instββΆ:RCLike πE:Type u_2instββ΅:NormedAddCommGroup Einstββ΄:NormedSpace π EF:Type u_3instβΒ³:NormedAddCommGroup FinstβΒ²:NormedSpace π FinstβΒΉ:FiniteDimensional π Einstβ:FiniteDimensional π Ff:E Γ F β Eg:E Γ F β Fxy:E Γ Fhf:DifferentiableAt π f xyhg:DifferentiableAt π g xys:Set EbX:Basis (βs) π Ethisβ:Fintype βssY:Set FbY:Basis (βsY) π Fthis:Fintype βsYbXY:Basis (βs β βsY) π (E Γ F) := bX.prod bYβ’ (fun x => β i, (bXY.repr ((fderiv π (fun xy => (f xy, g xy)) x) (bXY i))) i) xy =
(fun x => β i, (bX.repr ((fderiv π (fun x' => f (x', xy.2)) x) (bX i))) i) xy.1 +
(fun x => β i, (bY.repr ((fderiv π (fun y' => g (xy.1, y')) x) (bY i))) i) xy.2] π:Type u_1instββΆ:RCLike πE:Type u_2instββ΅:NormedAddCommGroup Einstββ΄:NormedSpace π EF:Type u_3instβΒ³:NormedAddCommGroup FinstβΒ²:NormedSpace π FinstβΒΉ:FiniteDimensional π Einstβ:FiniteDimensional π Ff:E Γ F β Eg:E Γ F β Fxy:E Γ Fhf:DifferentiableAt π f xyhg:DifferentiableAt π g xys:Set EbX:Basis (βs) π Ethisβ:Fintype βssY:Set FbY:Basis (βsY) π Fthis:Fintype βsYbXY:Basis (βs β βsY) π (E Γ F) := bX.prod bYβ’ (fun x => β i, (bXY.repr ((fderiv π (fun xy => (f xy, g xy)) x) (bXY i))) i) xy =
(fun x => β i, (bX.repr ((fderiv π (fun x' => f (x', xy.2)) x) (bX i))) i) xy.1 +
(fun x => β i, (bY.repr ((fderiv π (fun y' => g (xy.1, y')) x) (bY i))) i) xy.2
simp[hf.fderiv_prodMk hg,bXY,fderiv_wrt_prod hf,fderiv_wrt_prod hg] All goals completed! πlemma divergence_add {f g : E β E} {x : E}
(hf : DifferentiableAt π f x) (hg : DifferentiableAt π g x) :
divergence π (fun x => f x + g x) x
=
divergence π f x + divergence π g x := by π:Type u_1instβΒ²:RCLike πE:Type u_2instβΒΉ:NormedAddCommGroup Einstβ:NormedSpace π Ef:E β Eg:E β Ex:Ehf:DifferentiableAt π f xhg:DifferentiableAt π g xβ’ divergence π (fun x => f x + g x) x = divergence π f x + divergence π g x
unfold divergence π:Type u_1instβΒ²:RCLike πE:Type u_2instβΒΉ:NormedAddCommGroup Einstβ:NormedSpace π Ef:E β Eg:E β Ex:Ehf:DifferentiableAt π f xhg:DifferentiableAt π g xβ’ (LinearMap.trace π E) β(fderiv π (fun x => f x + g x) x) =
(LinearMap.trace π E) β(fderiv π f x) + (LinearMap.trace π E) β(fderiv π g x)
simp [fderiv_fun_add hf hg] All goals completed! πlemma divergence_neg {f : E β E} {x : E} :
divergence π (fun x => -f x) x = -divergence π f x := by π:Type u_1instβΒ²:RCLike πE:Type u_2instβΒΉ:NormedAddCommGroup Einstβ:NormedSpace π Ef:E β Ex:Eβ’ divergence π (fun x => -f x) x = -divergence π f x
unfold divergence π:Type u_1instβΒ²:RCLike πE:Type u_2instβΒΉ:NormedAddCommGroup Einstβ:NormedSpace π Ef:E β Ex:Eβ’ (LinearMap.trace π E) β(fderiv π (fun x => -f x) x) = -(LinearMap.trace π E) β(fderiv π f x)
simp All goals completed! πlemma divergence_sub {f g : E β E} {x : E}
(hf : DifferentiableAt π f x) (hg : DifferentiableAt π g x) :
divergence π (fun x => f x - g x) x
=
divergence π f x - divergence π g x := by π:Type u_1instβΒ²:RCLike πE:Type u_2instβΒΉ:NormedAddCommGroup Einstβ:NormedSpace π Ef:E β Eg:E β Ex:Ehf:DifferentiableAt π f xhg:DifferentiableAt π g xβ’ divergence π (fun x => f x - g x) x = divergence π f x - divergence π g x
unfold divergence π:Type u_1instβΒ²:RCLike πE:Type u_2instβΒΉ:NormedAddCommGroup Einstβ:NormedSpace π Ef:E β Eg:E β Ex:Ehf:DifferentiableAt π f xhg:DifferentiableAt π g xβ’ (LinearMap.trace π E) β(fderiv π (fun x => f x - g x) x) =
(LinearMap.trace π E) β(fderiv π f x) - (LinearMap.trace π E) β(fderiv π g x)
simp [fderiv_fun_sub hf hg] All goals completed! πlemma divergence_const_smul {f : E β E} {x : E} {c : π}
(hf : DifferentiableAt π f x) :
divergence π (fun x => c β’ f x) x
=
c * divergence π f x := by π:Type u_1instβΒ²:RCLike πE:Type u_2instβΒΉ:NormedAddCommGroup Einstβ:NormedSpace π Ef:E β Ex:Ec:πhf:DifferentiableAt π f xβ’ divergence π (fun x => c β’ f x) x = c * divergence π f x
unfold divergence π:Type u_1instβΒ²:RCLike πE:Type u_2instβΒΉ:NormedAddCommGroup Einstβ:NormedSpace π Ef:E β Ex:Ec:πhf:DifferentiableAt π f xβ’ (LinearMap.trace π E) β(fderiv π (fun x => c β’ f x) x) = c * (LinearMap.trace π E) β(fderiv π f x)
simp [fderiv_fun_const_smul hf] All goals completed! π