Imports
/-
Copyright (c) 2025 Tomas Skrivan. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Tomas Skrivan, Joseph Tooby-Smith
-/
module
public import Physlib.Mathematics.VariationalCalculus.HasVarAdjDerivVariational gradient
Definition of variational gradient that allows for formal treatment of variational calculus as used in physics textbooks.
@[expose] public section
Function grad is variational gradient of functional S at point u.
This formalizes the notion of variational gradient δS/δu of a functional S at a point u.
However, it is not defined for a functional S : (X → U) → ℝ but rather for the function
S' : (X → U) → (X → ℝ) which is related to the usual functional as S u = ∫ x, S' (u x) x ∂μ.
For example for action integral, S u = ∫ t, L (u t) (deriv u t) we have
S' u t = L (u t) (deriv u t). Working with S' rather than with S allows us to ignore certain
technicalities with integrability.
Examples:
Euler-Lagrange equations:
δ/δx ∫ L(x,ẋ) dt = ∂L/∂ x - d/dt (∂L/∂ẋ)
can be expressed as
HasVarGradientAt
(fun u t => L (u t) (deriv u t))
(fun t =>
deriv (L · (deriv u t)) ((u t))
-
deriv (fun t' => deriv (L (u t') ·) (deriv u t')) t)
u
Laplace equation is variational gradient of Dirichlet energy:
δ/δu ∫ 1/2*‖∇u‖² = - Δu
can be expressed as
HasVarGradientAt
(fun u t => 1/2 * deriv u t^2)
(fun t => - deriv (deriv u) t)
u
inductive HasVarGradientAt (F : (X → U) → (X → ℝ)) (grad : X → U) (u : X → U) : Prop
| intro (F') (hF' : HasVarAdjDerivAt F F' u) (hgrad : grad = F' (fun _ => 1))All goals completed! 🐙
lemma HasVarGradientAt.sum {ι : Type} [Fintype ι] (F : ι → (X → U) → (X → ℝ))
{grad : ι → X → U} {u : X → U} (hu : ContDiff ℝ ∞ u) [OpensMeasurableSpace X]
[IsFiniteMeasureOnCompacts (@volume X _)]
(h : ∀ i, HasVarGradientAt (F i) (grad i) u) :
HasVarGradientAt (fun v x => ∑ i, F i v x) (∑ i, grad i) u := by X:Type u_1inst✝⁸:NormedAddCommGroup Xinst✝⁷:NormedSpace ℝ Xinst✝⁶:MeasureSpace XU:Type u_2inst✝⁵:NormedAddCommGroup Uinst✝⁴:NormedSpace ℝ Uinst✝³:InnerProductSpace' ℝ Uι:Typeinst✝²:Fintype ιF:ι → (X → U) → X → ℝgrad:ι → X → Uu:X → Uhu:ContDiff ℝ ∞ uinst✝¹:OpensMeasurableSpace Xinst✝:IsFiniteMeasureOnCompacts volumeh:∀ (i : ι), HasVarGradientAt (F i) (grad i) u⊢ HasVarGradientAt (fun v x => ∑ i, F i v x) (∑ i, grad i) u
let P (ι : Type) [Fintype ι] : Prop :=
∀ (F : ι → (X → U) → (X → ℝ)), ∀ (F' : ι → X → U), ∀ u, ∀ (hu : ContDiff ℝ ∞ u),
∀ (hF : ∀ i, HasVarGradientAt (F i) (F' i) u),
HasVarGradientAt (fun φ x => ∑ i, F i φ x) (∑ i, F' i) u X:Type u_1inst✝⁸:NormedAddCommGroup Xinst✝⁷:NormedSpace ℝ Xinst✝⁶:MeasureSpace XU:Type u_2inst✝⁵:NormedAddCommGroup Uinst✝⁴:NormedSpace ℝ Uinst✝³:InnerProductSpace' ℝ Uι:Typeinst✝²:Fintype ιF:ι → (X → U) → X → ℝgrad:ι → X → Uu:X → Uhu:ContDiff ℝ ∞ uinst✝¹:OpensMeasurableSpace Xinst✝:IsFiniteMeasureOnCompacts volumeh:∀ (i : ι), HasVarGradientAt (F i) (grad i) uP:(ι : Type) → [Fintype ι] → Prop :=
fun ι [Fintype ι] =>
∀ (F : ι → (X → U) → X → ℝ) (F' : ι → X → U) (u : X → U),
ContDiff ℝ ∞ u →
(∀ (i : ι), HasVarGradientAt (F i) (F' i) u) → HasVarGradientAt (fun φ x => ∑ i, F i φ x) (∑ i, F' i) u⊢ HasVarGradientAt (fun v x => ∑ i, F i v x) (∑ i, grad i) u
have hp : P ι := by
apply Fintype.induction_empty_option of_equiv X:Type u_1inst✝⁸:NormedAddCommGroup Xinst✝⁷:NormedSpace ℝ Xinst✝⁶:MeasureSpace XU:Type u_2inst✝⁵:NormedAddCommGroup Uinst✝⁴:NormedSpace ℝ Uinst✝³:InnerProductSpace' ℝ Uι:Typeinst✝²:Fintype ιF:ι → (X → U) → X → ℝgrad:ι → X → Uu:X → Uhu:ContDiff ℝ ∞ uinst✝¹:OpensMeasurableSpace Xinst✝:IsFiniteMeasureOnCompacts volumeh:∀ (i : ι), HasVarGradientAt (F i) (grad i) uP:(ι : Type) → [Fintype ι] → Prop :=
fun ι [Fintype ι] =>
∀ (F : ι → (X → U) → X → ℝ) (F' : ι → X → U) (u : X → U),
ContDiff ℝ ∞ u →
(∀ (i : ι), HasVarGradientAt (F i) (F' i) u) → HasVarGradientAt (fun φ x => ∑ i, F i φ x) (∑ i, F' i) u⊢ ∀ (α β : Type) [inst : Fintype β] (e : α ≃ β), P α → P βh_empty X:Type u_1inst✝⁸:NormedAddCommGroup Xinst✝⁷:NormedSpace ℝ Xinst✝⁶:MeasureSpace XU:Type u_2inst✝⁵:NormedAddCommGroup Uinst✝⁴:NormedSpace ℝ Uinst✝³:InnerProductSpace' ℝ Uι:Typeinst✝²:Fintype ιF:ι → (X → U) → X → ℝgrad:ι → X → Uu:X → Uhu:ContDiff ℝ ∞ uinst✝¹:OpensMeasurableSpace Xinst✝:IsFiniteMeasureOnCompacts volumeh:∀ (i : ι), HasVarGradientAt (F i) (grad i) uP:(ι : Type) → [Fintype ι] → Prop :=
fun ι [Fintype ι] =>
∀ (F : ι → (X → U) → X → ℝ) (F' : ι → X → U) (u : X → U),
ContDiff ℝ ∞ u →
(∀ (i : ι), HasVarGradientAt (F i) (F' i) u) → HasVarGradientAt (fun φ x => ∑ i, F i φ x) (∑ i, F' i) u⊢ P PEmpty.{1}h_option X:Type u_1inst✝⁸:NormedAddCommGroup Xinst✝⁷:NormedSpace ℝ Xinst✝⁶:MeasureSpace XU:Type u_2inst✝⁵:NormedAddCommGroup Uinst✝⁴:NormedSpace ℝ Uinst✝³:InnerProductSpace' ℝ Uι:Typeinst✝²:Fintype ιF:ι → (X → U) → X → ℝgrad:ι → X → Uu:X → Uhu:ContDiff ℝ ∞ uinst✝¹:OpensMeasurableSpace Xinst✝:IsFiniteMeasureOnCompacts volumeh:∀ (i : ι), HasVarGradientAt (F i) (grad i) uP:(ι : Type) → [Fintype ι] → Prop :=
fun ι [Fintype ι] =>
∀ (F : ι → (X → U) → X → ℝ) (F' : ι → X → U) (u : X → U),
ContDiff ℝ ∞ u →
(∀ (i : ι), HasVarGradientAt (F i) (F' i) u) → HasVarGradientAt (fun φ x => ∑ i, F i φ x) (∑ i, F' i) u⊢ ∀ (α : Type) [inst : Fintype α], P α → P (Option α) X:Type u_1inst✝⁸:NormedAddCommGroup Xinst✝⁷:NormedSpace ℝ Xinst✝⁶:MeasureSpace XU:Type u_2inst✝⁵:NormedAddCommGroup Uinst✝⁴:NormedSpace ℝ Uinst✝³:InnerProductSpace' ℝ Uι:Typeinst✝²:Fintype ιF:ι → (X → U) → X → ℝgrad:ι → X → Uu:X → Uhu:ContDiff ℝ ∞ uinst✝¹:OpensMeasurableSpace Xinst✝:IsFiniteMeasureOnCompacts volumeh:∀ (i : ι), HasVarGradientAt (F i) (grad i) uP:(ι : Type) → [Fintype ι] → Prop :=
fun ι [Fintype ι] =>
∀ (F : ι → (X → U) → X → ℝ) (F' : ι → X → U) (u : X → U),
ContDiff ℝ ∞ u →
(∀ (i : ι), HasVarGradientAt (F i) (F' i) u) → HasVarGradientAt (fun φ x => ∑ i, F i φ x) (∑ i, F' i) uhp:P ι⊢ HasVarGradientAt (fun v x => ∑ i, F i v x) (∑ i, grad i) u
· of_equiv X:Type u_1inst✝⁸:NormedAddCommGroup Xinst✝⁷:NormedSpace ℝ Xinst✝⁶:MeasureSpace XU:Type u_2inst✝⁵:NormedAddCommGroup Uinst✝⁴:NormedSpace ℝ Uinst✝³:InnerProductSpace' ℝ Uι:Typeinst✝²:Fintype ιF:ι → (X → U) → X → ℝgrad:ι → X → Uu:X → Uhu:ContDiff ℝ ∞ uinst✝¹:OpensMeasurableSpace Xinst✝:IsFiniteMeasureOnCompacts volumeh:∀ (i : ι), HasVarGradientAt (F i) (grad i) uP:(ι : Type) → [Fintype ι] → Prop :=
fun ι [Fintype ι] =>
∀ (F : ι → (X → U) → X → ℝ) (F' : ι → X → U) (u : X → U),
ContDiff ℝ ∞ u →
(∀ (i : ι), HasVarGradientAt (F i) (F' i) u) → HasVarGradientAt (fun φ x => ∑ i, F i φ x) (∑ i, F' i) u⊢ ∀ (α β : Type) [inst : Fintype β] (e : α ≃ β), P α → P β X:Type u_1inst✝⁸:NormedAddCommGroup Xinst✝⁷:NormedSpace ℝ Xinst✝⁶:MeasureSpace XU:Type u_2inst✝⁵:NormedAddCommGroup Uinst✝⁴:NormedSpace ℝ Uinst✝³:InnerProductSpace' ℝ Uι:Typeinst✝²:Fintype ιF:ι → (X → U) → X → ℝgrad:ι → X → Uu:X → Uhu:ContDiff ℝ ∞ uinst✝¹:OpensMeasurableSpace Xinst✝:IsFiniteMeasureOnCompacts volumeh:∀ (i : ι), HasVarGradientAt (F i) (grad i) uP:(ι : Type) → [Fintype ι] → Prop :=
fun ι [Fintype ι] =>
∀ (F : ι → (X → U) → X → ℝ) (F' : ι → X → U) (u : X → U),
ContDiff ℝ ∞ u →
(∀ (i : ι), HasVarGradientAt (F i) (F' i) u) → HasVarGradientAt (fun φ x => ∑ i, F i φ x) (∑ i, F' i) uhp:P ι⊢ HasVarGradientAt (fun v x => ∑ i, F i v x) (∑ i, grad i) u intro ι ι' inst e hp F F' u hu ih of_equiv X:Type u_1inst✝⁸:NormedAddCommGroup Xinst✝⁷:NormedSpace ℝ Xinst✝⁶:MeasureSpace XU:Type u_2inst✝⁵:NormedAddCommGroup Uinst✝⁴:NormedSpace ℝ Uinst✝³:InnerProductSpace' ℝ Uι✝:Typeinst✝²:Fintype ιF✝:ι → (X → U) → X → ℝgrad:ι → X → Uu✝:X → Uhu✝:ContDiff ℝ ∞ uinst✝¹:OpensMeasurableSpace Xinst✝:IsFiniteMeasureOnCompacts volumeh:∀ (i : ι), HasVarGradientAt (F i) (grad i) uP:(ι : Type) → [Fintype ι] → Prop :=
fun ι [Fintype ι] =>
∀ (F : ι → (X → U) → X → ℝ) (F' : ι → X → U) (u : X → U),
ContDiff ℝ ∞ u →
(∀ (i : ι), HasVarGradientAt (F i) (F' i) u) → HasVarGradientAt (fun φ x => ∑ i, F i φ x) (∑ i, F' i) uι:Typeι':Typeinst:Fintype ι'e:ι ≃ ι'hp:P ιF:ι' → (X → U) → X → ℝF':ι' → X → Uu:X → Uhu:ContDiff ℝ ∞ uih:∀ (i : ι'), HasVarGradientAt (F i) (F' i) u⊢ HasVarGradientAt (fun φ x => ∑ i, F i φ x) (∑ i, F' i) u X:Type u_1inst✝⁸:NormedAddCommGroup Xinst✝⁷:NormedSpace ℝ Xinst✝⁶:MeasureSpace XU:Type u_2inst✝⁵:NormedAddCommGroup Uinst✝⁴:NormedSpace ℝ Uinst✝³:InnerProductSpace' ℝ Uι:Typeinst✝²:Fintype ιF:ι → (X → U) → X → ℝgrad:ι → X → Uu:X → Uhu:ContDiff ℝ ∞ uinst✝¹:OpensMeasurableSpace Xinst✝:IsFiniteMeasureOnCompacts volumeh:∀ (i : ι), HasVarGradientAt (F i) (grad i) uP:(ι : Type) → [Fintype ι] → Prop :=
fun ι [Fintype ι] =>
∀ (F : ι → (X → U) → X → ℝ) (F' : ι → X → U) (u : X → U),
ContDiff ℝ ∞ u →
(∀ (i : ι), HasVarGradientAt (F i) (F' i) u) → HasVarGradientAt (fun φ x => ∑ i, F i φ x) (∑ i, F' i) uhp:P ι⊢ HasVarGradientAt (fun v x => ∑ i, F i v x) (∑ i, grad i) u
convert hp (fun i => F (e i)) (fun i => F' (e i)) u hu (by X:Type u_1inst✝⁸:NormedAddCommGroup Xinst✝⁷:NormedSpace ℝ Xinst✝⁶:MeasureSpace XU:Type u_2inst✝⁵:NormedAddCommGroup Uinst✝⁴:NormedSpace ℝ Uinst✝³:InnerProductSpace' ℝ Uι✝:Typeinst✝²:Fintype ιF✝:ι → (X → U) → X → ℝgrad:ι → X → Uu✝:X → Uhu✝:ContDiff ℝ ∞ uinst✝¹:OpensMeasurableSpace Xinst✝:IsFiniteMeasureOnCompacts volumeh:∀ (i : ι), HasVarGradientAt (F i) (grad i) uP:(ι : Type) → [Fintype ι] → Prop :=
fun ι [Fintype ι] =>
∀ (F : ι → (X → U) → X → ℝ) (F' : ι → X → U) (u : X → U),
ContDiff ℝ ∞ u →
(∀ (i : ι), HasVarGradientAt (F i) (F' i) u) → HasVarGradientAt (fun φ x => ∑ i, F i φ x) (∑ i, F' i) uι:Typeι':Typeinst:Fintype ι'e:ι ≃ ι'hp:P ιF:ι' → (X → U) → X → ℝF':ι' → X → Uu:X → Uhu:ContDiff ℝ ∞ uih:∀ (i : ι'), HasVarGradientAt (F i) (F' i) u⊢ ∀ (i : ι), HasVarGradientAt (F (e i)) (F' (e i)) u X:Type u_1inst✝⁸:NormedAddCommGroup Xinst✝⁷:NormedSpace ℝ Xinst✝⁶:MeasureSpace XU:Type u_2inst✝⁵:NormedAddCommGroup Uinst✝⁴:NormedSpace ℝ Uinst✝³:InnerProductSpace' ℝ Uι:Typeinst✝²:Fintype ιF:ι → (X → U) → X → ℝgrad:ι → X → Uu:X → Uhu:ContDiff ℝ ∞ uinst✝¹:OpensMeasurableSpace Xinst✝:IsFiniteMeasureOnCompacts volumeh:∀ (i : ι), HasVarGradientAt (F i) (grad i) uP:(ι : Type) → [Fintype ι] → Prop :=
fun ι [Fintype ι] =>
∀ (F : ι → (X → U) → X → ℝ) (F' : ι → X → U) (u : X → U),
ContDiff ℝ ∞ u →
(∀ (i : ι), HasVarGradientAt (F i) (F' i) u) → HasVarGradientAt (fun φ x => ∑ i, F i φ x) (∑ i, F' i) uhp:P ι⊢ HasVarGradientAt (fun v x => ∑ i, F i v x) (∑ i, grad i) u
intro i X:Type u_1inst✝⁸:NormedAddCommGroup Xinst✝⁷:NormedSpace ℝ Xinst✝⁶:MeasureSpace XU:Type u_2inst✝⁵:NormedAddCommGroup Uinst✝⁴:NormedSpace ℝ Uinst✝³:InnerProductSpace' ℝ Uι✝:Typeinst✝²:Fintype ιF✝:ι → (X → U) → X → ℝgrad:ι → X → Uu✝:X → Uhu✝:ContDiff ℝ ∞ uinst✝¹:OpensMeasurableSpace Xinst✝:IsFiniteMeasureOnCompacts volumeh:∀ (i : ι), HasVarGradientAt (F i) (grad i) uP:(ι : Type) → [Fintype ι] → Prop :=
fun ι [Fintype ι] =>
∀ (F : ι → (X → U) → X → ℝ) (F' : ι → X → U) (u : X → U),
ContDiff ℝ ∞ u →
(∀ (i : ι), HasVarGradientAt (F i) (F' i) u) → HasVarGradientAt (fun φ x => ∑ i, F i φ x) (∑ i, F' i) uι:Typeι':Typeinst:Fintype ι'e:ι ≃ ι'hp:P ιF:ι' → (X → U) → X → ℝF':ι' → X → Uu:X → Uhu:ContDiff ℝ ∞ uih:∀ (i : ι'), HasVarGradientAt (F i) (F' i) ui:ι⊢ HasVarGradientAt (F (e i)) (F' (e i)) u X:Type u_1inst✝⁸:NormedAddCommGroup Xinst✝⁷:NormedSpace ℝ Xinst✝⁶:MeasureSpace XU:Type u_2inst✝⁵:NormedAddCommGroup Uinst✝⁴:NormedSpace ℝ Uinst✝³:InnerProductSpace' ℝ Uι:Typeinst✝²:Fintype ιF:ι → (X → U) → X → ℝgrad:ι → X → Uu:X → Uhu:ContDiff ℝ ∞ uinst✝¹:OpensMeasurableSpace Xinst✝:IsFiniteMeasureOnCompacts volumeh:∀ (i : ι), HasVarGradientAt (F i) (grad i) uP:(ι : Type) → [Fintype ι] → Prop :=
fun ι [Fintype ι] =>
∀ (F : ι → (X → U) → X → ℝ) (F' : ι → X → U) (u : X → U),
ContDiff ℝ ∞ u →
(∀ (i : ι), HasVarGradientAt (F i) (F' i) u) → HasVarGradientAt (fun φ x => ∑ i, F i φ x) (∑ i, F' i) uhp:P ι⊢ HasVarGradientAt (fun v x => ∑ i, F i v x) (∑ i, grad i) u
simpa using ih (e i) All goals completed! 🐙 X:Type u_1inst✝⁸:NormedAddCommGroup Xinst✝⁷:NormedSpace ℝ Xinst✝⁶:MeasureSpace XU:Type u_2inst✝⁵:NormedAddCommGroup Uinst✝⁴:NormedSpace ℝ Uinst✝³:InnerProductSpace' ℝ Uι:Typeinst✝²:Fintype ιF:ι → (X → U) → X → ℝgrad:ι → X → Uu:X → Uhu:ContDiff ℝ ∞ uinst✝¹:OpensMeasurableSpace Xinst✝:IsFiniteMeasureOnCompacts volumeh:∀ (i : ι), HasVarGradientAt (F i) (grad i) uP:(ι : Type) → [Fintype ι] → Prop :=
fun ι [Fintype ι] =>
∀ (F : ι → (X → U) → X → ℝ) (F' : ι → X → U) (u : X → U),
ContDiff ℝ ∞ u →
(∀ (i : ι), HasVarGradientAt (F i) (F' i) u) → HasVarGradientAt (fun φ x => ∑ i, F i φ x) (∑ i, F' i) uhp:P ι⊢ HasVarGradientAt (fun v x => ∑ i, F i v x) (∑ i, grad i) u)
rw [← @e.sum_comp e'_9 X:Type u_1inst✝⁸:NormedAddCommGroup Xinst✝⁷:NormedSpace ℝ Xinst✝⁶:MeasureSpace XU:Type u_2inst✝⁵:NormedAddCommGroup Uinst✝⁴:NormedSpace ℝ Uinst✝³:InnerProductSpace' ℝ Uι✝:Typeinst✝²:Fintype ιF✝:ι → (X → U) → X → ℝgrad:ι → X → Uu✝:X → Uhu✝:ContDiff ℝ ∞ uinst✝¹:OpensMeasurableSpace Xinst✝:IsFiniteMeasureOnCompacts volumeh:∀ (i : ι), HasVarGradientAt (F i) (grad i) uP:(ι : Type) → [Fintype ι] → Prop :=
fun ι [Fintype ι] =>
∀ (F : ι → (X → U) → X → ℝ) (F' : ι → X → U) (u : X → U),
ContDiff ℝ ∞ u →
(∀ (i : ι), HasVarGradientAt (F i) (F' i) u) → HasVarGradientAt (fun φ x => ∑ i, F i φ x) (∑ i, F' i) uι:Typeι':Typeinst:Fintype ι'e:ι ≃ ι'hp:P ιF:ι' → (X → U) → X → ℝF':ι' → X → Uu:X → Uhu:ContDiff ℝ ∞ uih:∀ (i : ι'), HasVarGradientAt (F i) (F' i) ux✝¹:X → Ux✝:X⊢ ∑ i, F (e i) x✝¹ x✝ = ∑ i, F (e i) x✝¹ x✝e'_9.inst X:Type u_1inst✝⁸:NormedAddCommGroup Xinst✝⁷:NormedSpace ℝ Xinst✝⁶:MeasureSpace XU:Type u_2inst✝⁵:NormedAddCommGroup Uinst✝⁴:NormedSpace ℝ Uinst✝³:InnerProductSpace' ℝ Uι✝:Typeinst✝²:Fintype ιF✝:ι → (X → U) → X → ℝgrad:ι → X → Uu✝:X → Uhu✝:ContDiff ℝ ∞ uinst✝¹:OpensMeasurableSpace Xinst✝:IsFiniteMeasureOnCompacts volumeh:∀ (i : ι), HasVarGradientAt (F i) (grad i) uP:(ι : Type) → [Fintype ι] → Prop :=
fun ι [Fintype ι] =>
∀ (F : ι → (X → U) → X → ℝ) (F' : ι → X → U) (u : X → U),
ContDiff ℝ ∞ u →
(∀ (i : ι), HasVarGradientAt (F i) (F' i) u) → HasVarGradientAt (fun φ x => ∑ i, F i φ x) (∑ i, F' i) uι:Typeι':Typeinst:Fintype ι'e:ι ≃ ι'hp:P ιF:ι' → (X → U) → X → ℝF':ι' → X → Uu:X → Uhu:ContDiff ℝ ∞ uih:∀ (i : ι'), HasVarGradientAt (F i) (F' i) ux✝¹:X → Ux✝:X⊢ Fintype ιe'_10 X:Type u_1inst✝⁸:NormedAddCommGroup Xinst✝⁷:NormedSpace ℝ Xinst✝⁶:MeasureSpace XU:Type u_2inst✝⁵:NormedAddCommGroup Uinst✝⁴:NormedSpace ℝ Uinst✝³:InnerProductSpace' ℝ Uι✝:Typeinst✝²:Fintype ιF✝:ι → (X → U) → X → ℝgrad:ι → X → Uu✝:X → Uhu✝:ContDiff ℝ ∞ uinst✝¹:OpensMeasurableSpace Xinst✝:IsFiniteMeasureOnCompacts volumeh:∀ (i : ι), HasVarGradientAt (F i) (grad i) uP:(ι : Type) → [Fintype ι] → Prop :=
fun ι [Fintype ι] =>
∀ (F : ι → (X → U) → X → ℝ) (F' : ι → X → U) (u : X → U),
ContDiff ℝ ∞ u →
(∀ (i : ι), HasVarGradientAt (F i) (F' i) u) → HasVarGradientAt (fun φ x => ∑ i, F i φ x) (∑ i, F' i) uι:Typeι':Typeinst:Fintype ι'e:ι ≃ ι'hp:P ιF:ι' → (X → U) → X → ℝF':ι' → X → Uu:X → Uhu:ContDiff ℝ ∞ uih:∀ (i : ι'), HasVarGradientAt (F i) (F' i) u⊢ ∑ i, F' i = ∑ i, F' (e i) e'_10 X:Type u_1inst✝⁸:NormedAddCommGroup Xinst✝⁷:NormedSpace ℝ Xinst✝⁶:MeasureSpace XU:Type u_2inst✝⁵:NormedAddCommGroup Uinst✝⁴:NormedSpace ℝ Uinst✝³:InnerProductSpace' ℝ Uι✝:Typeinst✝²:Fintype ιF✝:ι → (X → U) → X → ℝgrad:ι → X → Uu✝:X → Uhu✝:ContDiff ℝ ∞ uinst✝¹:OpensMeasurableSpace Xinst✝:IsFiniteMeasureOnCompacts volumeh:∀ (i : ι), HasVarGradientAt (F i) (grad i) uP:(ι : Type) → [Fintype ι] → Prop :=
fun ι [Fintype ι] =>
∀ (F : ι → (X → U) → X → ℝ) (F' : ι → X → U) (u : X → U),
ContDiff ℝ ∞ u →
(∀ (i : ι), HasVarGradientAt (F i) (F' i) u) → HasVarGradientAt (fun φ x => ∑ i, F i φ x) (∑ i, F' i) uι:Typeι':Typeinst:Fintype ι'e:ι ≃ ι'hp:P ιF:ι' → (X → U) → X → ℝF':ι' → X → Uu:X → Uhu:ContDiff ℝ ∞ uih:∀ (i : ι'), HasVarGradientAt (F i) (F' i) u⊢ ∑ i, F' i = ∑ i, F' (e i) X:Type u_1inst✝⁸:NormedAddCommGroup Xinst✝⁷:NormedSpace ℝ Xinst✝⁶:MeasureSpace XU:Type u_2inst✝⁵:NormedAddCommGroup Uinst✝⁴:NormedSpace ℝ Uinst✝³:InnerProductSpace' ℝ Uι:Typeinst✝²:Fintype ιF:ι → (X → U) → X → ℝgrad:ι → X → Uu:X → Uhu:ContDiff ℝ ∞ uinst✝¹:OpensMeasurableSpace Xinst✝:IsFiniteMeasureOnCompacts volumeh:∀ (i : ι), HasVarGradientAt (F i) (grad i) uP:(ι : Type) → [Fintype ι] → Prop :=
fun ι [Fintype ι] =>
∀ (F : ι → (X → U) → X → ℝ) (F' : ι → X → U) (u : X → U),
ContDiff ℝ ∞ u →
(∀ (i : ι), HasVarGradientAt (F i) (F' i) u) → HasVarGradientAt (fun φ x => ∑ i, F i φ x) (∑ i, F' i) uhp:P ι⊢ HasVarGradientAt (fun v x => ∑ i, F i v x) (∑ i, grad i) u]e'_10 X:Type u_1inst✝⁸:NormedAddCommGroup Xinst✝⁷:NormedSpace ℝ Xinst✝⁶:MeasureSpace XU:Type u_2inst✝⁵:NormedAddCommGroup Uinst✝⁴:NormedSpace ℝ Uinst✝³:InnerProductSpace' ℝ Uι✝:Typeinst✝²:Fintype ιF✝:ι → (X → U) → X → ℝgrad:ι → X → Uu✝:X → Uhu✝:ContDiff ℝ ∞ uinst✝¹:OpensMeasurableSpace Xinst✝:IsFiniteMeasureOnCompacts volumeh:∀ (i : ι), HasVarGradientAt (F i) (grad i) uP:(ι : Type) → [Fintype ι] → Prop :=
fun ι [Fintype ι] =>
∀ (F : ι → (X → U) → X → ℝ) (F' : ι → X → U) (u : X → U),
ContDiff ℝ ∞ u →
(∀ (i : ι), HasVarGradientAt (F i) (F' i) u) → HasVarGradientAt (fun φ x => ∑ i, F i φ x) (∑ i, F' i) uι:Typeι':Typeinst:Fintype ι'e:ι ≃ ι'hp:P ιF:ι' → (X → U) → X → ℝF':ι' → X → Uu:X → Uhu:ContDiff ℝ ∞ uih:∀ (i : ι'), HasVarGradientAt (F i) (F' i) u⊢ ∑ i, F' i = ∑ i, F' (e i) X:Type u_1inst✝⁸:NormedAddCommGroup Xinst✝⁷:NormedSpace ℝ Xinst✝⁶:MeasureSpace XU:Type u_2inst✝⁵:NormedAddCommGroup Uinst✝⁴:NormedSpace ℝ Uinst✝³:InnerProductSpace' ℝ Uι:Typeinst✝²:Fintype ιF:ι → (X → U) → X → ℝgrad:ι → X → Uu:X → Uhu:ContDiff ℝ ∞ uinst✝¹:OpensMeasurableSpace Xinst✝:IsFiniteMeasureOnCompacts volumeh:∀ (i : ι), HasVarGradientAt (F i) (grad i) uP:(ι : Type) → [Fintype ι] → Prop :=
fun ι [Fintype ι] =>
∀ (F : ι → (X → U) → X → ℝ) (F' : ι → X → U) (u : X → U),
ContDiff ℝ ∞ u →
(∀ (i : ι), HasVarGradientAt (F i) (F' i) u) → HasVarGradientAt (fun φ x => ∑ i, F i φ x) (∑ i, F' i) uhp:P ι⊢ HasVarGradientAt (fun v x => ∑ i, F i v x) (∑ i, grad i) u
rw [← @e.sum_comp e'_10 X:Type u_1inst✝⁸:NormedAddCommGroup Xinst✝⁷:NormedSpace ℝ Xinst✝⁶:MeasureSpace XU:Type u_2inst✝⁵:NormedAddCommGroup Uinst✝⁴:NormedSpace ℝ Uinst✝³:InnerProductSpace' ℝ Uι✝:Typeinst✝²:Fintype ιF✝:ι → (X → U) → X → ℝgrad:ι → X → Uu✝:X → Uhu✝:ContDiff ℝ ∞ uinst✝¹:OpensMeasurableSpace Xinst✝:IsFiniteMeasureOnCompacts volumeh:∀ (i : ι), HasVarGradientAt (F i) (grad i) uP:(ι : Type) → [Fintype ι] → Prop :=
fun ι [Fintype ι] =>
∀ (F : ι → (X → U) → X → ℝ) (F' : ι → X → U) (u : X → U),
ContDiff ℝ ∞ u →
(∀ (i : ι), HasVarGradientAt (F i) (F' i) u) → HasVarGradientAt (fun φ x => ∑ i, F i φ x) (∑ i, F' i) uι:Typeι':Typeinst:Fintype ι'e:ι ≃ ι'hp:P ιF:ι' → (X → U) → X → ℝF':ι' → X → Uu:X → Uhu:ContDiff ℝ ∞ uih:∀ (i : ι'), HasVarGradientAt (F i) (F' i) u⊢ ∑ i, F' (e i) = ∑ i, F' (e i)e'_10.inst X:Type u_1inst✝⁸:NormedAddCommGroup Xinst✝⁷:NormedSpace ℝ Xinst✝⁶:MeasureSpace XU:Type u_2inst✝⁵:NormedAddCommGroup Uinst✝⁴:NormedSpace ℝ Uinst✝³:InnerProductSpace' ℝ Uι✝:Typeinst✝²:Fintype ιF✝:ι → (X → U) → X → ℝgrad:ι → X → Uu✝:X → Uhu✝:ContDiff ℝ ∞ uinst✝¹:OpensMeasurableSpace Xinst✝:IsFiniteMeasureOnCompacts volumeh:∀ (i : ι), HasVarGradientAt (F i) (grad i) uP:(ι : Type) → [Fintype ι] → Prop :=
fun ι [Fintype ι] =>
∀ (F : ι → (X → U) → X → ℝ) (F' : ι → X → U) (u : X → U),
ContDiff ℝ ∞ u →
(∀ (i : ι), HasVarGradientAt (F i) (F' i) u) → HasVarGradientAt (fun φ x => ∑ i, F i φ x) (∑ i, F' i) uι:Typeι':Typeinst:Fintype ι'e:ι ≃ ι'hp:P ιF:ι' → (X → U) → X → ℝF':ι' → X → Uu:X → Uhu:ContDiff ℝ ∞ uih:∀ (i : ι'), HasVarGradientAt (F i) (F' i) u⊢ Fintype ι All goals completed! 🐙 X:Type u_1inst✝⁸:NormedAddCommGroup Xinst✝⁷:NormedSpace ℝ Xinst✝⁶:MeasureSpace XU:Type u_2inst✝⁵:NormedAddCommGroup Uinst✝⁴:NormedSpace ℝ Uinst✝³:InnerProductSpace' ℝ Uι:Typeinst✝²:Fintype ιF:ι → (X → U) → X → ℝgrad:ι → X → Uu:X → Uhu:ContDiff ℝ ∞ uinst✝¹:OpensMeasurableSpace Xinst✝:IsFiniteMeasureOnCompacts volumeh:∀ (i : ι), HasVarGradientAt (F i) (grad i) uP:(ι : Type) → [Fintype ι] → Prop :=
fun ι [Fintype ι] =>
∀ (F : ι → (X → U) → X → ℝ) (F' : ι → X → U) (u : X → U),
ContDiff ℝ ∞ u →
(∀ (i : ι), HasVarGradientAt (F i) (F' i) u) → HasVarGradientAt (fun φ x => ∑ i, F i φ x) (∑ i, F' i) uhp:P ι⊢ HasVarGradientAt (fun v x => ∑ i, F i v x) (∑ i, grad i) u] All goals completed! 🐙 X:Type u_1inst✝⁸:NormedAddCommGroup Xinst✝⁷:NormedSpace ℝ Xinst✝⁶:MeasureSpace XU:Type u_2inst✝⁵:NormedAddCommGroup Uinst✝⁴:NormedSpace ℝ Uinst✝³:InnerProductSpace' ℝ Uι:Typeinst✝²:Fintype ιF:ι → (X → U) → X → ℝgrad:ι → X → Uu:X → Uhu:ContDiff ℝ ∞ uinst✝¹:OpensMeasurableSpace Xinst✝:IsFiniteMeasureOnCompacts volumeh:∀ (i : ι), HasVarGradientAt (F i) (grad i) uP:(ι : Type) → [Fintype ι] → Prop :=
fun ι [Fintype ι] =>
∀ (F : ι → (X → U) → X → ℝ) (F' : ι → X → U) (u : X → U),
ContDiff ℝ ∞ u →
(∀ (i : ι), HasVarGradientAt (F i) (F' i) u) → HasVarGradientAt (fun φ x => ∑ i, F i φ x) (∑ i, F' i) uhp:P ι⊢ HasVarGradientAt (fun v x => ∑ i, F i v x) (∑ i, grad i) u
· h_empty X:Type u_1inst✝⁸:NormedAddCommGroup Xinst✝⁷:NormedSpace ℝ Xinst✝⁶:MeasureSpace XU:Type u_2inst✝⁵:NormedAddCommGroup Uinst✝⁴:NormedSpace ℝ Uinst✝³:InnerProductSpace' ℝ Uι:Typeinst✝²:Fintype ιF:ι → (X → U) → X → ℝgrad:ι → X → Uu:X → Uhu:ContDiff ℝ ∞ uinst✝¹:OpensMeasurableSpace Xinst✝:IsFiniteMeasureOnCompacts volumeh:∀ (i : ι), HasVarGradientAt (F i) (grad i) uP:(ι : Type) → [Fintype ι] → Prop :=
fun ι [Fintype ι] =>
∀ (F : ι → (X → U) → X → ℝ) (F' : ι → X → U) (u : X → U),
ContDiff ℝ ∞ u →
(∀ (i : ι), HasVarGradientAt (F i) (F' i) u) → HasVarGradientAt (fun φ x => ∑ i, F i φ x) (∑ i, F' i) u⊢ P PEmpty.{1} X:Type u_1inst✝⁸:NormedAddCommGroup Xinst✝⁷:NormedSpace ℝ Xinst✝⁶:MeasureSpace XU:Type u_2inst✝⁵:NormedAddCommGroup Uinst✝⁴:NormedSpace ℝ Uinst✝³:InnerProductSpace' ℝ Uι:Typeinst✝²:Fintype ιF:ι → (X → U) → X → ℝgrad:ι → X → Uu:X → Uhu:ContDiff ℝ ∞ uinst✝¹:OpensMeasurableSpace Xinst✝:IsFiniteMeasureOnCompacts volumeh:∀ (i : ι), HasVarGradientAt (F i) (grad i) uP:(ι : Type) → [Fintype ι] → Prop :=
fun ι [Fintype ι] =>
∀ (F : ι → (X → U) → X → ℝ) (F' : ι → X → U) (u : X → U),
ContDiff ℝ ∞ u →
(∀ (i : ι), HasVarGradientAt (F i) (F' i) u) → HasVarGradientAt (fun φ x => ∑ i, F i φ x) (∑ i, F' i) uhp:P ι⊢ HasVarGradientAt (fun v x => ∑ i, F i v x) (∑ i, grad i) u intro i ι' u hu ih h_empty X:Type u_1inst✝⁸:NormedAddCommGroup Xinst✝⁷:NormedSpace ℝ Xinst✝⁶:MeasureSpace XU:Type u_2inst✝⁵:NormedAddCommGroup Uinst✝⁴:NormedSpace ℝ Uinst✝³:InnerProductSpace' ℝ Uι:Typeinst✝²:Fintype ιF:ι → (X → U) → X → ℝgrad:ι → X → Uu✝:X → Uhu✝:ContDiff ℝ ∞ uinst✝¹:OpensMeasurableSpace Xinst✝:IsFiniteMeasureOnCompacts volumeh:∀ (i : ι), HasVarGradientAt (F i) (grad i) uP:(ι : Type) → [Fintype ι] → Prop :=
fun ι [Fintype ι] =>
∀ (F : ι → (X → U) → X → ℝ) (F' : ι → X → U) (u : X → U),
ContDiff ℝ ∞ u →
(∀ (i : ι), HasVarGradientAt (F i) (F' i) u) → HasVarGradientAt (fun φ x => ∑ i, F i φ x) (∑ i, F' i) ui:PEmpty.{1} → (X → U) → X → ℝι':PEmpty.{1} → X → Uu:X → Uhu:ContDiff ℝ ∞ uih:∀ (i_1 : PEmpty.{1}), HasVarGradientAt (i i_1) (ι' i_1) u⊢ HasVarGradientAt (fun φ x => ∑ i_1, i i_1 φ x) (∑ i, ι' i) u X:Type u_1inst✝⁸:NormedAddCommGroup Xinst✝⁷:NormedSpace ℝ Xinst✝⁶:MeasureSpace XU:Type u_2inst✝⁵:NormedAddCommGroup Uinst✝⁴:NormedSpace ℝ Uinst✝³:InnerProductSpace' ℝ Uι:Typeinst✝²:Fintype ιF:ι → (X → U) → X → ℝgrad:ι → X → Uu:X → Uhu:ContDiff ℝ ∞ uinst✝¹:OpensMeasurableSpace Xinst✝:IsFiniteMeasureOnCompacts volumeh:∀ (i : ι), HasVarGradientAt (F i) (grad i) uP:(ι : Type) → [Fintype ι] → Prop :=
fun ι [Fintype ι] =>
∀ (F : ι → (X → U) → X → ℝ) (F' : ι → X → U) (u : X → U),
ContDiff ℝ ∞ u →
(∀ (i : ι), HasVarGradientAt (F i) (F' i) u) → HasVarGradientAt (fun φ x => ∑ i, F i φ x) (∑ i, F' i) uhp:P ι⊢ HasVarGradientAt (fun v x => ∑ i, F i v x) (∑ i, grad i) u
simp only [Finset.univ_eq_empty, Finset.sum_empty] h_empty X:Type u_1inst✝⁸:NormedAddCommGroup Xinst✝⁷:NormedSpace ℝ Xinst✝⁶:MeasureSpace XU:Type u_2inst✝⁵:NormedAddCommGroup Uinst✝⁴:NormedSpace ℝ Uinst✝³:InnerProductSpace' ℝ Uι:Typeinst✝²:Fintype ιF:ι → (X → U) → X → ℝgrad:ι → X → Uu✝:X → Uhu✝:ContDiff ℝ ∞ uinst✝¹:OpensMeasurableSpace Xinst✝:IsFiniteMeasureOnCompacts volumeh:∀ (i : ι), HasVarGradientAt (F i) (grad i) uP:(ι : Type) → [Fintype ι] → Prop :=
fun ι [Fintype ι] =>
∀ (F : ι → (X → U) → X → ℝ) (F' : ι → X → U) (u : X → U),
ContDiff ℝ ∞ u →
(∀ (i : ι), HasVarGradientAt (F i) (F' i) u) → HasVarGradientAt (fun φ x => ∑ i, F i φ x) (∑ i, F' i) ui:PEmpty.{1} → (X → U) → X → ℝι':PEmpty.{1} → X → Uu:X → Uhu:ContDiff ℝ ∞ uih:∀ (i_1 : PEmpty.{1}), HasVarGradientAt (i i_1) (ι' i_1) u⊢ HasVarGradientAt (fun φ x => 0) 0 u X:Type u_1inst✝⁸:NormedAddCommGroup Xinst✝⁷:NormedSpace ℝ Xinst✝⁶:MeasureSpace XU:Type u_2inst✝⁵:NormedAddCommGroup Uinst✝⁴:NormedSpace ℝ Uinst✝³:InnerProductSpace' ℝ Uι:Typeinst✝²:Fintype ιF:ι → (X → U) → X → ℝgrad:ι → X → Uu:X → Uhu:ContDiff ℝ ∞ uinst✝¹:OpensMeasurableSpace Xinst✝:IsFiniteMeasureOnCompacts volumeh:∀ (i : ι), HasVarGradientAt (F i) (grad i) uP:(ι : Type) → [Fintype ι] → Prop :=
fun ι [Fintype ι] =>
∀ (F : ι → (X → U) → X → ℝ) (F' : ι → X → U) (u : X → U),
ContDiff ℝ ∞ u →
(∀ (i : ι), HasVarGradientAt (F i) (F' i) u) → HasVarGradientAt (fun φ x => ∑ i, F i φ x) (∑ i, F' i) uhp:P ι⊢ HasVarGradientAt (fun v x => ∑ i, F i v x) (∑ i, grad i) u
refine intro (fun _ _ => 0) ?_ ?_ h_empty.refine_1 X:Type u_1inst✝⁸:NormedAddCommGroup Xinst✝⁷:NormedSpace ℝ Xinst✝⁶:MeasureSpace XU:Type u_2inst✝⁵:NormedAddCommGroup Uinst✝⁴:NormedSpace ℝ Uinst✝³:InnerProductSpace' ℝ Uι:Typeinst✝²:Fintype ιF:ι → (X → U) → X → ℝgrad:ι → X → Uu✝:X → Uhu✝:ContDiff ℝ ∞ uinst✝¹:OpensMeasurableSpace Xinst✝:IsFiniteMeasureOnCompacts volumeh:∀ (i : ι), HasVarGradientAt (F i) (grad i) uP:(ι : Type) → [Fintype ι] → Prop :=
fun ι [Fintype ι] =>
∀ (F : ι → (X → U) → X → ℝ) (F' : ι → X → U) (u : X → U),
ContDiff ℝ ∞ u →
(∀ (i : ι), HasVarGradientAt (F i) (F' i) u) → HasVarGradientAt (fun φ x => ∑ i, F i φ x) (∑ i, F' i) ui:PEmpty.{1} → (X → U) → X → ℝι':PEmpty.{1} → X → Uu:X → Uhu:ContDiff ℝ ∞ uih:∀ (i_1 : PEmpty.{1}), HasVarGradientAt (i i_1) (ι' i_1) u⊢ HasVarAdjDerivAt (fun φ x => 0) (fun x x_1 => 0) uh_empty.refine_2 X:Type u_1inst✝⁸:NormedAddCommGroup Xinst✝⁷:NormedSpace ℝ Xinst✝⁶:MeasureSpace XU:Type u_2inst✝⁵:NormedAddCommGroup Uinst✝⁴:NormedSpace ℝ Uinst✝³:InnerProductSpace' ℝ Uι:Typeinst✝²:Fintype ιF:ι → (X → U) → X → ℝgrad:ι → X → Uu✝:X → Uhu✝:ContDiff ℝ ∞ uinst✝¹:OpensMeasurableSpace Xinst✝:IsFiniteMeasureOnCompacts volumeh:∀ (i : ι), HasVarGradientAt (F i) (grad i) uP:(ι : Type) → [Fintype ι] → Prop :=
fun ι [Fintype ι] =>
∀ (F : ι → (X → U) → X → ℝ) (F' : ι → X → U) (u : X → U),
ContDiff ℝ ∞ u →
(∀ (i : ι), HasVarGradientAt (F i) (F' i) u) → HasVarGradientAt (fun φ x => ∑ i, F i φ x) (∑ i, F' i) ui:PEmpty.{1} → (X → U) → X → ℝι':PEmpty.{1} → X → Uu:X → Uhu:ContDiff ℝ ∞ uih:∀ (i_1 : PEmpty.{1}), HasVarGradientAt (i i_1) (ι' i_1) u⊢ 0 = fun x => 0 X:Type u_1inst✝⁸:NormedAddCommGroup Xinst✝⁷:NormedSpace ℝ Xinst✝⁶:MeasureSpace XU:Type u_2inst✝⁵:NormedAddCommGroup Uinst✝⁴:NormedSpace ℝ Uinst✝³:InnerProductSpace' ℝ Uι:Typeinst✝²:Fintype ιF:ι → (X → U) → X → ℝgrad:ι → X → Uu:X → Uhu:ContDiff ℝ ∞ uinst✝¹:OpensMeasurableSpace Xinst✝:IsFiniteMeasureOnCompacts volumeh:∀ (i : ι), HasVarGradientAt (F i) (grad i) uP:(ι : Type) → [Fintype ι] → Prop :=
fun ι [Fintype ι] =>
∀ (F : ι → (X → U) → X → ℝ) (F' : ι → X → U) (u : X → U),
ContDiff ℝ ∞ u →
(∀ (i : ι), HasVarGradientAt (F i) (F' i) u) → HasVarGradientAt (fun φ x => ∑ i, F i φ x) (∑ i, F' i) uhp:P ι⊢ HasVarGradientAt (fun v x => ∑ i, F i v x) (∑ i, grad i) u
apply HasVarAdjDerivAt.const h_empty.refine_1.hu X:Type u_1inst✝⁸:NormedAddCommGroup Xinst✝⁷:NormedSpace ℝ Xinst✝⁶:MeasureSpace XU:Type u_2inst✝⁵:NormedAddCommGroup Uinst✝⁴:NormedSpace ℝ Uinst✝³:InnerProductSpace' ℝ Uι:Typeinst✝²:Fintype ιF:ι → (X → U) → X → ℝgrad:ι → X → Uu✝:X → Uhu✝:ContDiff ℝ ∞ uinst✝¹:OpensMeasurableSpace Xinst✝:IsFiniteMeasureOnCompacts volumeh:∀ (i : ι), HasVarGradientAt (F i) (grad i) uP:(ι : Type) → [Fintype ι] → Prop :=
fun ι [Fintype ι] =>
∀ (F : ι → (X → U) → X → ℝ) (F' : ι → X → U) (u : X → U),
ContDiff ℝ ∞ u →
(∀ (i : ι), HasVarGradientAt (F i) (F' i) u) → HasVarGradientAt (fun φ x => ∑ i, F i φ x) (∑ i, F' i) ui:PEmpty.{1} → (X → U) → X → ℝι':PEmpty.{1} → X → Uu:X → Uhu:ContDiff ℝ ∞ uih:∀ (i_1 : PEmpty.{1}), HasVarGradientAt (i i_1) (ι' i_1) u⊢ ContDiff ℝ ∞ uhv X:Type u_1inst✝⁸:NormedAddCommGroup Xinst✝⁷:NormedSpace ℝ Xinst✝⁶:MeasureSpace XU:Type u_2inst✝⁵:NormedAddCommGroup Uinst✝⁴:NormedSpace ℝ Uinst✝³:InnerProductSpace' ℝ Uι:Typeinst✝²:Fintype ιF:ι → (X → U) → X → ℝgrad:ι → X → Uu✝:X → Uhu✝:ContDiff ℝ ∞ uinst✝¹:OpensMeasurableSpace Xinst✝:IsFiniteMeasureOnCompacts volumeh:∀ (i : ι), HasVarGradientAt (F i) (grad i) uP:(ι : Type) → [Fintype ι] → Prop :=
fun ι [Fintype ι] =>
∀ (F : ι → (X → U) → X → ℝ) (F' : ι → X → U) (u : X → U),
ContDiff ℝ ∞ u →
(∀ (i : ι), HasVarGradientAt (F i) (F' i) u) → HasVarGradientAt (fun φ x => ∑ i, F i φ x) (∑ i, F' i) ui:PEmpty.{1} → (X → U) → X → ℝι':PEmpty.{1} → X → Uu:X → Uhu:ContDiff ℝ ∞ uih:∀ (i_1 : PEmpty.{1}), HasVarGradientAt (i i_1) (ι' i_1) u⊢ ContDiff ℝ ∞ fun x => 0h_empty.refine_2 X:Type u_1inst✝⁸:NormedAddCommGroup Xinst✝⁷:NormedSpace ℝ Xinst✝⁶:MeasureSpace XU:Type u_2inst✝⁵:NormedAddCommGroup Uinst✝⁴:NormedSpace ℝ Uinst✝³:InnerProductSpace' ℝ Uι:Typeinst✝²:Fintype ιF:ι → (X → U) → X → ℝgrad:ι → X → Uu✝:X → Uhu✝:ContDiff ℝ ∞ uinst✝¹:OpensMeasurableSpace Xinst✝:IsFiniteMeasureOnCompacts volumeh:∀ (i : ι), HasVarGradientAt (F i) (grad i) uP:(ι : Type) → [Fintype ι] → Prop :=
fun ι [Fintype ι] =>
∀ (F : ι → (X → U) → X → ℝ) (F' : ι → X → U) (u : X → U),
ContDiff ℝ ∞ u →
(∀ (i : ι), HasVarGradientAt (F i) (F' i) u) → HasVarGradientAt (fun φ x => ∑ i, F i φ x) (∑ i, F' i) ui:PEmpty.{1} → (X → U) → X → ℝι':PEmpty.{1} → X → Uu:X → Uhu:ContDiff ℝ ∞ uih:∀ (i_1 : PEmpty.{1}), HasVarGradientAt (i i_1) (ι' i_1) u⊢ 0 = fun x => 0 X:Type u_1inst✝⁸:NormedAddCommGroup Xinst✝⁷:NormedSpace ℝ Xinst✝⁶:MeasureSpace XU:Type u_2inst✝⁵:NormedAddCommGroup Uinst✝⁴:NormedSpace ℝ Uinst✝³:InnerProductSpace' ℝ Uι:Typeinst✝²:Fintype ιF:ι → (X → U) → X → ℝgrad:ι → X → Uu:X → Uhu:ContDiff ℝ ∞ uinst✝¹:OpensMeasurableSpace Xinst✝:IsFiniteMeasureOnCompacts volumeh:∀ (i : ι), HasVarGradientAt (F i) (grad i) uP:(ι : Type) → [Fintype ι] → Prop :=
fun ι [Fintype ι] =>
∀ (F : ι → (X → U) → X → ℝ) (F' : ι → X → U) (u : X → U),
ContDiff ℝ ∞ u →
(∀ (i : ι), HasVarGradientAt (F i) (F' i) u) → HasVarGradientAt (fun φ x => ∑ i, F i φ x) (∑ i, F' i) uhp:P ι⊢ HasVarGradientAt (fun v x => ∑ i, F i v x) (∑ i, grad i) u
fun_prop hv X:Type u_1inst✝⁸:NormedAddCommGroup Xinst✝⁷:NormedSpace ℝ Xinst✝⁶:MeasureSpace XU:Type u_2inst✝⁵:NormedAddCommGroup Uinst✝⁴:NormedSpace ℝ Uinst✝³:InnerProductSpace' ℝ Uι:Typeinst✝²:Fintype ιF:ι → (X → U) → X → ℝgrad:ι → X → Uu✝:X → Uhu✝:ContDiff ℝ ∞ uinst✝¹:OpensMeasurableSpace Xinst✝:IsFiniteMeasureOnCompacts volumeh:∀ (i : ι), HasVarGradientAt (F i) (grad i) uP:(ι : Type) → [Fintype ι] → Prop :=
fun ι [Fintype ι] =>
∀ (F : ι → (X → U) → X → ℝ) (F' : ι → X → U) (u : X → U),
ContDiff ℝ ∞ u →
(∀ (i : ι), HasVarGradientAt (F i) (F' i) u) → HasVarGradientAt (fun φ x => ∑ i, F i φ x) (∑ i, F' i) ui:PEmpty.{1} → (X → U) → X → ℝι':PEmpty.{1} → X → Uu:X → Uhu:ContDiff ℝ ∞ uih:∀ (i_1 : PEmpty.{1}), HasVarGradientAt (i i_1) (ι' i_1) u⊢ ContDiff ℝ ∞ fun x => 0h_empty.refine_2 X:Type u_1inst✝⁸:NormedAddCommGroup Xinst✝⁷:NormedSpace ℝ Xinst✝⁶:MeasureSpace XU:Type u_2inst✝⁵:NormedAddCommGroup Uinst✝⁴:NormedSpace ℝ Uinst✝³:InnerProductSpace' ℝ Uι:Typeinst✝²:Fintype ιF:ι → (X → U) → X → ℝgrad:ι → X → Uu✝:X → Uhu✝:ContDiff ℝ ∞ uinst✝¹:OpensMeasurableSpace Xinst✝:IsFiniteMeasureOnCompacts volumeh:∀ (i : ι), HasVarGradientAt (F i) (grad i) uP:(ι : Type) → [Fintype ι] → Prop :=
fun ι [Fintype ι] =>
∀ (F : ι → (X → U) → X → ℝ) (F' : ι → X → U) (u : X → U),
ContDiff ℝ ∞ u →
(∀ (i : ι), HasVarGradientAt (F i) (F' i) u) → HasVarGradientAt (fun φ x => ∑ i, F i φ x) (∑ i, F' i) ui:PEmpty.{1} → (X → U) → X → ℝι':PEmpty.{1} → X → Uu:X → Uhu:ContDiff ℝ ∞ uih:∀ (i_1 : PEmpty.{1}), HasVarGradientAt (i i_1) (ι' i_1) u⊢ 0 = fun x => 0 X:Type u_1inst✝⁸:NormedAddCommGroup Xinst✝⁷:NormedSpace ℝ Xinst✝⁶:MeasureSpace XU:Type u_2inst✝⁵:NormedAddCommGroup Uinst✝⁴:NormedSpace ℝ Uinst✝³:InnerProductSpace' ℝ Uι:Typeinst✝²:Fintype ιF:ι → (X → U) → X → ℝgrad:ι → X → Uu:X → Uhu:ContDiff ℝ ∞ uinst✝¹:OpensMeasurableSpace Xinst✝:IsFiniteMeasureOnCompacts volumeh:∀ (i : ι), HasVarGradientAt (F i) (grad i) uP:(ι : Type) → [Fintype ι] → Prop :=
fun ι [Fintype ι] =>
∀ (F : ι → (X → U) → X → ℝ) (F' : ι → X → U) (u : X → U),
ContDiff ℝ ∞ u →
(∀ (i : ι), HasVarGradientAt (F i) (F' i) u) → HasVarGradientAt (fun φ x => ∑ i, F i φ x) (∑ i, F' i) uhp:P ι⊢ HasVarGradientAt (fun v x => ∑ i, F i v x) (∑ i, grad i) u
fun_prop h_empty.refine_2 X:Type u_1inst✝⁸:NormedAddCommGroup Xinst✝⁷:NormedSpace ℝ Xinst✝⁶:MeasureSpace XU:Type u_2inst✝⁵:NormedAddCommGroup Uinst✝⁴:NormedSpace ℝ Uinst✝³:InnerProductSpace' ℝ Uι:Typeinst✝²:Fintype ιF:ι → (X → U) → X → ℝgrad:ι → X → Uu✝:X → Uhu✝:ContDiff ℝ ∞ uinst✝¹:OpensMeasurableSpace Xinst✝:IsFiniteMeasureOnCompacts volumeh:∀ (i : ι), HasVarGradientAt (F i) (grad i) uP:(ι : Type) → [Fintype ι] → Prop :=
fun ι [Fintype ι] =>
∀ (F : ι → (X → U) → X → ℝ) (F' : ι → X → U) (u : X → U),
ContDiff ℝ ∞ u →
(∀ (i : ι), HasVarGradientAt (F i) (F' i) u) → HasVarGradientAt (fun φ x => ∑ i, F i φ x) (∑ i, F' i) ui:PEmpty.{1} → (X → U) → X → ℝι':PEmpty.{1} → X → Uu:X → Uhu:ContDiff ℝ ∞ uih:∀ (i_1 : PEmpty.{1}), HasVarGradientAt (i i_1) (ι' i_1) u⊢ 0 = fun x => 0 X:Type u_1inst✝⁸:NormedAddCommGroup Xinst✝⁷:NormedSpace ℝ Xinst✝⁶:MeasureSpace XU:Type u_2inst✝⁵:NormedAddCommGroup Uinst✝⁴:NormedSpace ℝ Uinst✝³:InnerProductSpace' ℝ Uι:Typeinst✝²:Fintype ιF:ι → (X → U) → X → ℝgrad:ι → X → Uu:X → Uhu:ContDiff ℝ ∞ uinst✝¹:OpensMeasurableSpace Xinst✝:IsFiniteMeasureOnCompacts volumeh:∀ (i : ι), HasVarGradientAt (F i) (grad i) uP:(ι : Type) → [Fintype ι] → Prop :=
fun ι [Fintype ι] =>
∀ (F : ι → (X → U) → X → ℝ) (F' : ι → X → U) (u : X → U),
ContDiff ℝ ∞ u →
(∀ (i : ι), HasVarGradientAt (F i) (F' i) u) → HasVarGradientAt (fun φ x => ∑ i, F i φ x) (∑ i, F' i) uhp:P ι⊢ HasVarGradientAt (fun v x => ∑ i, F i v x) (∑ i, grad i) u
rfl All goals completed! 🐙 X:Type u_1inst✝⁸:NormedAddCommGroup Xinst✝⁷:NormedSpace ℝ Xinst✝⁶:MeasureSpace XU:Type u_2inst✝⁵:NormedAddCommGroup Uinst✝⁴:NormedSpace ℝ Uinst✝³:InnerProductSpace' ℝ Uι:Typeinst✝²:Fintype ιF:ι → (X → U) → X → ℝgrad:ι → X → Uu:X → Uhu:ContDiff ℝ ∞ uinst✝¹:OpensMeasurableSpace Xinst✝:IsFiniteMeasureOnCompacts volumeh:∀ (i : ι), HasVarGradientAt (F i) (grad i) uP:(ι : Type) → [Fintype ι] → Prop :=
fun ι [Fintype ι] =>
∀ (F : ι → (X → U) → X → ℝ) (F' : ι → X → U) (u : X → U),
ContDiff ℝ ∞ u →
(∀ (i : ι), HasVarGradientAt (F i) (F' i) u) → HasVarGradientAt (fun φ x => ∑ i, F i φ x) (∑ i, F' i) uhp:P ι⊢ HasVarGradientAt (fun v x => ∑ i, F i v x) (∑ i, grad i) u
· h_option X:Type u_1inst✝⁸:NormedAddCommGroup Xinst✝⁷:NormedSpace ℝ Xinst✝⁶:MeasureSpace XU:Type u_2inst✝⁵:NormedAddCommGroup Uinst✝⁴:NormedSpace ℝ Uinst✝³:InnerProductSpace' ℝ Uι:Typeinst✝²:Fintype ιF:ι → (X → U) → X → ℝgrad:ι → X → Uu:X → Uhu:ContDiff ℝ ∞ uinst✝¹:OpensMeasurableSpace Xinst✝:IsFiniteMeasureOnCompacts volumeh:∀ (i : ι), HasVarGradientAt (F i) (grad i) uP:(ι : Type) → [Fintype ι] → Prop :=
fun ι [Fintype ι] =>
∀ (F : ι → (X → U) → X → ℝ) (F' : ι → X → U) (u : X → U),
ContDiff ℝ ∞ u →
(∀ (i : ι), HasVarGradientAt (F i) (F' i) u) → HasVarGradientAt (fun φ x => ∑ i, F i φ x) (∑ i, F' i) u⊢ ∀ (α : Type) [inst : Fintype α], P α → P (Option α) X:Type u_1inst✝⁸:NormedAddCommGroup Xinst✝⁷:NormedSpace ℝ Xinst✝⁶:MeasureSpace XU:Type u_2inst✝⁵:NormedAddCommGroup Uinst✝⁴:NormedSpace ℝ Uinst✝³:InnerProductSpace' ℝ Uι:Typeinst✝²:Fintype ιF:ι → (X → U) → X → ℝgrad:ι → X → Uu:X → Uhu:ContDiff ℝ ∞ uinst✝¹:OpensMeasurableSpace Xinst✝:IsFiniteMeasureOnCompacts volumeh:∀ (i : ι), HasVarGradientAt (F i) (grad i) uP:(ι : Type) → [Fintype ι] → Prop :=
fun ι [Fintype ι] =>
∀ (F : ι → (X → U) → X → ℝ) (F' : ι → X → U) (u : X → U),
ContDiff ℝ ∞ u →
(∀ (i : ι), HasVarGradientAt (F i) (F' i) u) → HasVarGradientAt (fun φ x => ∑ i, F i φ x) (∑ i, F' i) uhp:P ι⊢ HasVarGradientAt (fun v x => ∑ i, F i v x) (∑ i, grad i) u intro i ι' hp F F' u hu ih h_option X:Type u_1inst✝⁸:NormedAddCommGroup Xinst✝⁷:NormedSpace ℝ Xinst✝⁶:MeasureSpace XU:Type u_2inst✝⁵:NormedAddCommGroup Uinst✝⁴:NormedSpace ℝ Uinst✝³:InnerProductSpace' ℝ Uι:Typeinst✝²:Fintype ιF✝:ι → (X → U) → X → ℝgrad:ι → X → Uu✝:X → Uhu✝:ContDiff ℝ ∞ uinst✝¹:OpensMeasurableSpace Xinst✝:IsFiniteMeasureOnCompacts volumeh:∀ (i : ι), HasVarGradientAt (F i) (grad i) uP:(ι : Type) → [Fintype ι] → Prop :=
fun ι [Fintype ι] =>
∀ (F : ι → (X → U) → X → ℝ) (F' : ι → X → U) (u : X → U),
ContDiff ℝ ∞ u →
(∀ (i : ι), HasVarGradientAt (F i) (F' i) u) → HasVarGradientAt (fun φ x => ∑ i, F i φ x) (∑ i, F' i) ui:Typeι':Fintype ihp:P iF:Option i → (X → U) → X → ℝF':Option i → X → Uu:X → Uhu:ContDiff ℝ ∞ uih:∀ (i : Option i), HasVarGradientAt (F i) (F' i) u⊢ HasVarGradientAt (fun φ x => ∑ i, F i φ x) (∑ i, F' i) u X:Type u_1inst✝⁸:NormedAddCommGroup Xinst✝⁷:NormedSpace ℝ Xinst✝⁶:MeasureSpace XU:Type u_2inst✝⁵:NormedAddCommGroup Uinst✝⁴:NormedSpace ℝ Uinst✝³:InnerProductSpace' ℝ Uι:Typeinst✝²:Fintype ιF:ι → (X → U) → X → ℝgrad:ι → X → Uu:X → Uhu:ContDiff ℝ ∞ uinst✝¹:OpensMeasurableSpace Xinst✝:IsFiniteMeasureOnCompacts volumeh:∀ (i : ι), HasVarGradientAt (F i) (grad i) uP:(ι : Type) → [Fintype ι] → Prop :=
fun ι [Fintype ι] =>
∀ (F : ι → (X → U) → X → ℝ) (F' : ι → X → U) (u : X → U),
ContDiff ℝ ∞ u →
(∀ (i : ι), HasVarGradientAt (F i) (F' i) u) → HasVarGradientAt (fun φ x => ∑ i, F i φ x) (∑ i, F' i) uhp:P ι⊢ HasVarGradientAt (fun v x => ∑ i, F i v x) (∑ i, grad i) u
simp only [Fintype.sum_option] h_option X:Type u_1inst✝⁸:NormedAddCommGroup Xinst✝⁷:NormedSpace ℝ Xinst✝⁶:MeasureSpace XU:Type u_2inst✝⁵:NormedAddCommGroup Uinst✝⁴:NormedSpace ℝ Uinst✝³:InnerProductSpace' ℝ Uι:Typeinst✝²:Fintype ιF✝:ι → (X → U) → X → ℝgrad:ι → X → Uu✝:X → Uhu✝:ContDiff ℝ ∞ uinst✝¹:OpensMeasurableSpace Xinst✝:IsFiniteMeasureOnCompacts volumeh:∀ (i : ι), HasVarGradientAt (F i) (grad i) uP:(ι : Type) → [Fintype ι] → Prop :=
fun ι [Fintype ι] =>
∀ (F : ι → (X → U) → X → ℝ) (F' : ι → X → U) (u : X → U),
ContDiff ℝ ∞ u →
(∀ (i : ι), HasVarGradientAt (F i) (F' i) u) → HasVarGradientAt (fun φ x => ∑ i, F i φ x) (∑ i, F' i) ui:Typeι':Fintype ihp:P iF:Option i → (X → U) → X → ℝF':Option i → X → Uu:X → Uhu:ContDiff ℝ ∞ uih:∀ (i : Option i), HasVarGradientAt (F i) (F' i) u⊢ HasVarGradientAt (fun φ x => F none φ x + ∑ i_1, F (some i_1) φ x) (F' none + ∑ i_1, F' (some i_1)) u X:Type u_1inst✝⁸:NormedAddCommGroup Xinst✝⁷:NormedSpace ℝ Xinst✝⁶:MeasureSpace XU:Type u_2inst✝⁵:NormedAddCommGroup Uinst✝⁴:NormedSpace ℝ Uinst✝³:InnerProductSpace' ℝ Uι:Typeinst✝²:Fintype ιF:ι → (X → U) → X → ℝgrad:ι → X → Uu:X → Uhu:ContDiff ℝ ∞ uinst✝¹:OpensMeasurableSpace Xinst✝:IsFiniteMeasureOnCompacts volumeh:∀ (i : ι), HasVarGradientAt (F i) (grad i) uP:(ι : Type) → [Fintype ι] → Prop :=
fun ι [Fintype ι] =>
∀ (F : ι → (X → U) → X → ℝ) (F' : ι → X → U) (u : X → U),
ContDiff ℝ ∞ u →
(∀ (i : ι), HasVarGradientAt (F i) (F' i) u) → HasVarGradientAt (fun φ x => ∑ i, F i φ x) (∑ i, F' i) uhp:P ι⊢ HasVarGradientAt (fun v x => ∑ i, F i v x) (∑ i, grad i) u
apply HasVarGradientAt.add h_option.h X:Type u_1inst✝⁸:NormedAddCommGroup Xinst✝⁷:NormedSpace ℝ Xinst✝⁶:MeasureSpace XU:Type u_2inst✝⁵:NormedAddCommGroup Uinst✝⁴:NormedSpace ℝ Uinst✝³:InnerProductSpace' ℝ Uι:Typeinst✝²:Fintype ιF✝:ι → (X → U) → X → ℝgrad:ι → X → Uu✝:X → Uhu✝:ContDiff ℝ ∞ uinst✝¹:OpensMeasurableSpace Xinst✝:IsFiniteMeasureOnCompacts volumeh:∀ (i : ι), HasVarGradientAt (F i) (grad i) uP:(ι : Type) → [Fintype ι] → Prop :=
fun ι [Fintype ι] =>
∀ (F : ι → (X → U) → X → ℝ) (F' : ι → X → U) (u : X → U),
ContDiff ℝ ∞ u →
(∀ (i : ι), HasVarGradientAt (F i) (F' i) u) → HasVarGradientAt (fun φ x => ∑ i, F i φ x) (∑ i, F' i) ui:Typeι':Fintype ihp:P iF:Option i → (X → U) → X → ℝF':Option i → X → Uu:X → Uhu:ContDiff ℝ ∞ uih:∀ (i : Option i), HasVarGradientAt (F i) (F' i) u⊢ HasVarGradientAt (F none) (F' none) uh' X:Type u_1inst✝⁸:NormedAddCommGroup Xinst✝⁷:NormedSpace ℝ Xinst✝⁶:MeasureSpace XU:Type u_2inst✝⁵:NormedAddCommGroup Uinst✝⁴:NormedSpace ℝ Uinst✝³:InnerProductSpace' ℝ Uι:Typeinst✝²:Fintype ιF✝:ι → (X → U) → X → ℝgrad:ι → X → Uu✝:X → Uhu✝:ContDiff ℝ ∞ uinst✝¹:OpensMeasurableSpace Xinst✝:IsFiniteMeasureOnCompacts volumeh:∀ (i : ι), HasVarGradientAt (F i) (grad i) uP:(ι : Type) → [Fintype ι] → Prop :=
fun ι [Fintype ι] =>
∀ (F : ι → (X → U) → X → ℝ) (F' : ι → X → U) (u : X → U),
ContDiff ℝ ∞ u →
(∀ (i : ι), HasVarGradientAt (F i) (F' i) u) → HasVarGradientAt (fun φ x => ∑ i, F i φ x) (∑ i, F' i) ui:Typeι':Fintype ihp:P iF:Option i → (X → U) → X → ℝF':Option i → X → Uu:X → Uhu:ContDiff ℝ ∞ uih:∀ (i : Option i), HasVarGradientAt (F i) (F' i) u⊢ HasVarGradientAt (fun φ x => ∑ i_1, F (some i_1) φ x) (∑ i_1, F' (some i_1)) u X:Type u_1inst✝⁸:NormedAddCommGroup Xinst✝⁷:NormedSpace ℝ Xinst✝⁶:MeasureSpace XU:Type u_2inst✝⁵:NormedAddCommGroup Uinst✝⁴:NormedSpace ℝ Uinst✝³:InnerProductSpace' ℝ Uι:Typeinst✝²:Fintype ιF:ι → (X → U) → X → ℝgrad:ι → X → Uu:X → Uhu:ContDiff ℝ ∞ uinst✝¹:OpensMeasurableSpace Xinst✝:IsFiniteMeasureOnCompacts volumeh:∀ (i : ι), HasVarGradientAt (F i) (grad i) uP:(ι : Type) → [Fintype ι] → Prop :=
fun ι [Fintype ι] =>
∀ (F : ι → (X → U) → X → ℝ) (F' : ι → X → U) (u : X → U),
ContDiff ℝ ∞ u →
(∀ (i : ι), HasVarGradientAt (F i) (F' i) u) → HasVarGradientAt (fun φ x => ∑ i, F i φ x) (∑ i, F' i) uhp:P ι⊢ HasVarGradientAt (fun v x => ∑ i, F i v x) (∑ i, grad i) u
exact ih none h' X:Type u_1inst✝⁸:NormedAddCommGroup Xinst✝⁷:NormedSpace ℝ Xinst✝⁶:MeasureSpace XU:Type u_2inst✝⁵:NormedAddCommGroup Uinst✝⁴:NormedSpace ℝ Uinst✝³:InnerProductSpace' ℝ Uι:Typeinst✝²:Fintype ιF✝:ι → (X → U) → X → ℝgrad:ι → X → Uu✝:X → Uhu✝:ContDiff ℝ ∞ uinst✝¹:OpensMeasurableSpace Xinst✝:IsFiniteMeasureOnCompacts volumeh:∀ (i : ι), HasVarGradientAt (F i) (grad i) uP:(ι : Type) → [Fintype ι] → Prop :=
fun ι [Fintype ι] =>
∀ (F : ι → (X → U) → X → ℝ) (F' : ι → X → U) (u : X → U),
ContDiff ℝ ∞ u →
(∀ (i : ι), HasVarGradientAt (F i) (F' i) u) → HasVarGradientAt (fun φ x => ∑ i, F i φ x) (∑ i, F' i) ui:Typeι':Fintype ihp:P iF:Option i → (X → U) → X → ℝF':Option i → X → Uu:X → Uhu:ContDiff ℝ ∞ uih:∀ (i : Option i), HasVarGradientAt (F i) (F' i) u⊢ HasVarGradientAt (fun φ x => ∑ i_1, F (some i_1) φ x) (∑ i_1, F' (some i_1)) u X:Type u_1inst✝⁸:NormedAddCommGroup Xinst✝⁷:NormedSpace ℝ Xinst✝⁶:MeasureSpace XU:Type u_2inst✝⁵:NormedAddCommGroup Uinst✝⁴:NormedSpace ℝ Uinst✝³:InnerProductSpace' ℝ Uι:Typeinst✝²:Fintype ιF:ι → (X → U) → X → ℝgrad:ι → X → Uu:X → Uhu:ContDiff ℝ ∞ uinst✝¹:OpensMeasurableSpace Xinst✝:IsFiniteMeasureOnCompacts volumeh:∀ (i : ι), HasVarGradientAt (F i) (grad i) uP:(ι : Type) → [Fintype ι] → Prop :=
fun ι [Fintype ι] =>
∀ (F : ι → (X → U) → X → ℝ) (F' : ι → X → U) (u : X → U),
ContDiff ℝ ∞ u →
(∀ (i : ι), HasVarGradientAt (F i) (F' i) u) → HasVarGradientAt (fun φ x => ∑ i, F i φ x) (∑ i, F' i) uhp:P ι⊢ HasVarGradientAt (fun v x => ∑ i, F i v x) (∑ i, grad i) u
exact hp (fun i_1 => F (some i_1)) (fun i_1 => F' (some i_1)) u hu fun i_1 => ih (some i_1) X:Type u_1inst✝⁸:NormedAddCommGroup Xinst✝⁷:NormedSpace ℝ Xinst✝⁶:MeasureSpace XU:Type u_2inst✝⁵:NormedAddCommGroup Uinst✝⁴:NormedSpace ℝ Uinst✝³:InnerProductSpace' ℝ Uι:Typeinst✝²:Fintype ιF:ι → (X → U) → X → ℝgrad:ι → X → Uu:X → Uhu:ContDiff ℝ ∞ uinst✝¹:OpensMeasurableSpace Xinst✝:IsFiniteMeasureOnCompacts volumeh:∀ (i : ι), HasVarGradientAt (F i) (grad i) uP:(ι : Type) → [Fintype ι] → Prop :=
fun ι [Fintype ι] =>
∀ (F : ι → (X → U) → X → ℝ) (F' : ι → X → U) (u : X → U),
ContDiff ℝ ∞ u →
(∀ (i : ι), HasVarGradientAt (F i) (F' i) u) → HasVarGradientAt (fun φ x => ∑ i, F i φ x) (∑ i, F' i) uhp:P ι⊢ HasVarGradientAt (fun v x => ∑ i, F i v x) (∑ i, grad i) u X:Type u_1inst✝⁸:NormedAddCommGroup Xinst✝⁷:NormedSpace ℝ Xinst✝⁶:MeasureSpace XU:Type u_2inst✝⁵:NormedAddCommGroup Uinst✝⁴:NormedSpace ℝ Uinst✝³:InnerProductSpace' ℝ Uι:Typeinst✝²:Fintype ιF:ι → (X → U) → X → ℝgrad:ι → X → Uu:X → Uhu:ContDiff ℝ ∞ uinst✝¹:OpensMeasurableSpace Xinst✝:IsFiniteMeasureOnCompacts volumeh:∀ (i : ι), HasVarGradientAt (F i) (grad i) uP:(ι : Type) → [Fintype ι] → Prop :=
fun ι [Fintype ι] =>
∀ (F : ι → (X → U) → X → ℝ) (F' : ι → X → U) (u : X → U),
ContDiff ℝ ∞ u →
(∀ (i : ι), HasVarGradientAt (F i) (F' i) u) → HasVarGradientAt (fun φ x => ∑ i, F i φ x) (∑ i, F' i) uhp:P ι⊢ HasVarGradientAt (fun v x => ∑ i, F i v x) (∑ i, grad i) u
exact hp F grad u hu h All goals completed! 🐙
lemma HasVarGradientAt.neg {F : (X → U) → (X → ℝ)}
{grad : X → U} {u : X → U}
(h : HasVarGradientAt F grad u) :
HasVarGradientAt (-F) (-grad) u := by X:Type u_1inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:MeasureSpace XU:Type u_2inst✝²:NormedAddCommGroup Uinst✝¹:NormedSpace ℝ Uinst✝:InnerProductSpace' ℝ UF:(X → U) → X → ℝgrad:X → Uu:X → Uh:HasVarGradientAt F grad u⊢ HasVarGradientAt (-F) (-grad) u
obtain ⟨F',hF',eq⟩ := h X:Type u_1inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:MeasureSpace XU:Type u_2inst✝²:NormedAddCommGroup Uinst✝¹:NormedSpace ℝ Uinst✝:InnerProductSpace' ℝ UF:(X → U) → X → ℝgrad:X → Uu:X → UF':(X → ℝ) → X → UhF':HasVarAdjDerivAt F F' ueq:grad = F' fun x => 1⊢ HasVarGradientAt (-F) (-grad) u
apply HasVarGradientAt.intro (-F') hF' X:Type u_1inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:MeasureSpace XU:Type u_2inst✝²:NormedAddCommGroup Uinst✝¹:NormedSpace ℝ Uinst✝:InnerProductSpace' ℝ UF:(X → U) → X → ℝgrad:X → Uu:X → UF':(X → ℝ) → X → UhF':HasVarAdjDerivAt F F' ueq:grad = F' fun x => 1⊢ HasVarAdjDerivAt (-F) (-F') uhgrad X:Type u_1inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:MeasureSpace XU:Type u_2inst✝²:NormedAddCommGroup Uinst✝¹:NormedSpace ℝ Uinst✝:InnerProductSpace' ℝ UF:(X → U) → X → ℝgrad:X → Uu:X → UF':(X → ℝ) → X → UhF':HasVarAdjDerivAt F F' ueq:grad = F' fun x => 1⊢ -grad = (-F') fun x => 1
· hF' X:Type u_1inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:MeasureSpace XU:Type u_2inst✝²:NormedAddCommGroup Uinst✝¹:NormedSpace ℝ Uinst✝:InnerProductSpace' ℝ UF:(X → U) → X → ℝgrad:X → Uu:X → UF':(X → ℝ) → X → UhF':HasVarAdjDerivAt F F' ueq:grad = F' fun x => 1⊢ HasVarAdjDerivAt (-F) (-F') u apply hF'.neg (V := ℝ) All goals completed! 🐙
· hgrad X:Type u_1inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:MeasureSpace XU:Type u_2inst✝²:NormedAddCommGroup Uinst✝¹:NormedSpace ℝ Uinst✝:InnerProductSpace' ℝ UF:(X → U) → X → ℝgrad:X → Uu:X → UF':(X → ℝ) → X → UhF':HasVarAdjDerivAt F F' ueq:grad = F' fun x => 1⊢ -grad = (-F') fun x => 1 simp hgrad X:Type u_1inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:MeasureSpace XU:Type u_2inst✝²:NormedAddCommGroup Uinst✝¹:NormedSpace ℝ Uinst✝:InnerProductSpace' ℝ UF:(X → U) → X → ℝgrad:X → Uu:X → UF':(X → ℝ) → X → UhF':HasVarAdjDerivAt F F' ueq:grad = F' fun x => 1⊢ grad = F' fun x => 1
rw [eq hgrad X:Type u_1inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace ℝ Xinst✝³:MeasureSpace XU:Type u_2inst✝²:NormedAddCommGroup Uinst✝¹:NormedSpace ℝ Uinst✝:InnerProductSpace' ℝ UF:(X → U) → X → ℝgrad:X → Uu:X → UF':(X → ℝ) → X → UhF':HasVarAdjDerivAt F F' ueq:grad = F' fun x => 1⊢ (F' fun x => 1) = F' fun x => 1 All goals completed! 🐙] All goals completed! 🐙@[inherit_doc varGradient]
macro "δ" u:term ", " "∫ " x:term ", " b:term : term =>
`(varGradient (fun $u $x => $b))@[inherit_doc varGradient]
macro "δ" "(" u:term " := " u':term ")" ", " "∫ " x:term ", " b:term : term =>
`(varGradient (fun $u $x => $b) $u')
lemma unique
{S' : (X → U) → (X → ℝ)} {grad grad' : X → U} {u : X → U}
(h : HasVarGradientAt S' grad u) (h' : HasVarGradientAt S' grad' u) :
grad = grad' := by U:Type u_2inst✝⁹:NormedAddCommGroup Uinst✝⁸:NormedSpace ℝ Uinst✝⁷:InnerProductSpace' ℝ UX:Type u_1inst✝⁶:NormedAddCommGroup Xinst✝⁵:InnerProductSpace ℝ Xinst✝⁴:FiniteDimensional ℝ Xinst✝³:MeasureSpace Xinst✝²:OpensMeasurableSpace Xinst✝¹:IsFiniteMeasureOnCompacts volumeinst✝:volume.IsOpenPosMeasureS':(X → U) → X → ℝgrad:X → Ugrad':X → Uu:X → Uh:HasVarGradientAt S' grad uh':HasVarGradientAt S' grad' u⊢ grad = grad'
obtain ⟨F,hF,eq⟩ := h U:Type u_2inst✝⁹:NormedAddCommGroup Uinst✝⁸:NormedSpace ℝ Uinst✝⁷:InnerProductSpace' ℝ UX:Type u_1inst✝⁶:NormedAddCommGroup Xinst✝⁵:InnerProductSpace ℝ Xinst✝⁴:FiniteDimensional ℝ Xinst✝³:MeasureSpace Xinst✝²:OpensMeasurableSpace Xinst✝¹:IsFiniteMeasureOnCompacts volumeinst✝:volume.IsOpenPosMeasureS':(X → U) → X → ℝgrad:X → Ugrad':X → Uu:X → Uh':HasVarGradientAt S' grad' uF:(X → ℝ) → X → UhF:HasVarAdjDerivAt S' F ueq:grad = F fun x => 1⊢ grad = grad'
obtain ⟨G,hG,eq'⟩ := h' U:Type u_2inst✝⁹:NormedAddCommGroup Uinst✝⁸:NormedSpace ℝ Uinst✝⁷:InnerProductSpace' ℝ UX:Type u_1inst✝⁶:NormedAddCommGroup Xinst✝⁵:InnerProductSpace ℝ Xinst✝⁴:FiniteDimensional ℝ Xinst✝³:MeasureSpace Xinst✝²:OpensMeasurableSpace Xinst✝¹:IsFiniteMeasureOnCompacts volumeinst✝:volume.IsOpenPosMeasureS':(X → U) → X → ℝgrad:X → Ugrad':X → Uu:X → UF:(X → ℝ) → X → UhF:HasVarAdjDerivAt S' F ueq:grad = F fun x => 1G:(X → ℝ) → X → UhG:HasVarAdjDerivAt S' G ueq':grad' = G fun x => 1⊢ grad = grad'
rw[eq, U:Type u_2inst✝⁹:NormedAddCommGroup Uinst✝⁸:NormedSpace ℝ Uinst✝⁷:InnerProductSpace' ℝ UX:Type u_1inst✝⁶:NormedAddCommGroup Xinst✝⁵:InnerProductSpace ℝ Xinst✝⁴:FiniteDimensional ℝ Xinst✝³:MeasureSpace Xinst✝²:OpensMeasurableSpace Xinst✝¹:IsFiniteMeasureOnCompacts volumeinst✝:volume.IsOpenPosMeasureS':(X → U) → X → ℝgrad:X → Ugrad':X → Uu:X → UF:(X → ℝ) → X → UhF:HasVarAdjDerivAt S' F ueq:grad = F fun x => 1G:(X → ℝ) → X → UhG:HasVarAdjDerivAt S' G ueq':grad' = G fun x => 1⊢ (F fun x => 1) = grad' All goals completed! 🐙eq', U:Type u_2inst✝⁹:NormedAddCommGroup Uinst✝⁸:NormedSpace ℝ Uinst✝⁷:InnerProductSpace' ℝ UX:Type u_1inst✝⁶:NormedAddCommGroup Xinst✝⁵:InnerProductSpace ℝ Xinst✝⁴:FiniteDimensional ℝ Xinst✝³:MeasureSpace Xinst✝²:OpensMeasurableSpace Xinst✝¹:IsFiniteMeasureOnCompacts volumeinst✝:volume.IsOpenPosMeasureS':(X → U) → X → ℝgrad:X → Ugrad':X → Uu:X → UF:(X → ℝ) → X → UhF:HasVarAdjDerivAt S' F ueq:grad = F fun x => 1G:(X → ℝ) → X → UhG:HasVarAdjDerivAt S' G ueq':grad' = G fun x => 1⊢ (F fun x => 1) = G fun x => 1 All goals completed! 🐙hF.unique hG (fun _ => 1) (by U:Type u_2inst✝⁹:NormedAddCommGroup Uinst✝⁸:NormedSpace ℝ Uinst✝⁷:InnerProductSpace' ℝ UX:Type u_1inst✝⁶:NormedAddCommGroup Xinst✝⁵:InnerProductSpace ℝ Xinst✝⁴:FiniteDimensional ℝ Xinst✝³:MeasureSpace Xinst✝²:OpensMeasurableSpace Xinst✝¹:IsFiniteMeasureOnCompacts volumeinst✝:volume.IsOpenPosMeasureS':(X → U) → X → ℝgrad:X → Ugrad':X → Uu:X → UF:(X → ℝ) → X → UhF:HasVarAdjDerivAt S' F ueq:grad = F fun x => 1G:(X → ℝ) → X → UhG:HasVarAdjDerivAt S' G ueq':grad' = G fun x => 1⊢ ContDiff ℝ ∞ fun x => 1 All goals completed! 🐙 fun_prop All goals completed! 🐙 All goals completed! 🐙)] All goals completed! 🐙