Imports
/- Copyright (c) 2025 Joseph Tooby-Smith. All rights reserved. Released under Apache 2.0 license as described in the file LICENSE. Authors: Zhi Kai Pong, Joseph Tooby-Smith, Rob Sneiderman -/ module public import Physlib.SpaceAndTime.Space.Derivatives.Curl

Functions and distributions on Time and Space d

i. Overview

In this module we define TimeAndSpace d as the product of Time and Space d, and prove basic lemmas about derivatives of functions and distributions on both coordinates.

The derivative and distribution results are in the namespace Space by convention.

ii. Key results

    TimeAndSpace d : Euclidean spacetime as the product of time and space.

    TimeAndSpace.time : The projection from TimeAndSpace d to Time.

    TimeAndSpace.space : The projection from TimeAndSpace d to Space d.

    distTimeDeriv : The derivative of a distribution on Time × Space d along the temporal coordinate.

    distSpaceDeriv : The derivative of a distribution on Time × Space d along the spatial i coordinate.

    distSpaceGrad : The spatial gradient of a distribution on Time × Space d.

    distSpaceDiv : The spatial divergence of a distribution on Time × Space d.

    distSpaceCurl : The spatial curl of a distribution on Time × Space 3.

iii. Table of contents

    A. The coordinate product and derivatives involving time and space

      A.1. The TimeAndSpace coordinate product

      A.2. Space and time derivatives in terms of curried functions

      A.3. Commuting time and space derivatives

      A.4. Differentiablity conditions

      A.5. Time derivative commute with curl

      A.6. Constant of time deriative and space derivatives zero

      A.7. Equal up to a constant of time and space derivatives equal

    B. Derivatives of distributions on Time × Space d

      B.1. Time derivatives

        B.1.1. Composition with a CLM

      B.2. Space derivatives

        B.2.1. Space derivatives commute

        B.2.2. Composition with a CLM

      B.3. Time and space derivatives commute

      B.4. The spatial gradient

      B.5. The spatial divergence

      B.6. The spatial curl

iv. References

@[expose] public section

A. The coordinate product and derivatives involving time and space

A.1. The TimeAndSpace coordinate product

Euclidean spacetime as the product of time and d-dimensional space.

abbrev TimeAndSpace (d : := 3) := Time × Space d
@[simp] lemma time_apply (tx : TimeAndSpace d) : time tx = tx.1 := rfl@[simp] lemma space_apply (tx : TimeAndSpace d) : space tx = tx.2 := rfl

The time projection is nonexpanding for the product metric.

d:tx:TimeAndSpace dty:TimeAndSpace ddist (time tx) (time ty) max (dist tx.1 ty.1) (dist tx.2 ty.2) All goals completed! 🐙

The spatial projection is nonexpanding for the product metric.

d:tx:TimeAndSpace dty:TimeAndSpace ddist (space tx) (space ty) max (dist tx.1 ty.1) (dist tx.2 ty.2) All goals completed! 🐙

A.2. Space and time derivatives in terms of curried functions

d:M:Type u_1inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mf:Time Space d Mt:Timex:Space ddx:Space dhf:Differentiable f(fderiv f (t, x) ∘SL (fderiv (fun x' => t) x).prod (fderiv (fun x' => x') x)) dx = (fderiv f (t, x)) (0, dx)d:M:Type u_1inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mf:Time Space d Mt:Timex:Space ddx:Space dhf:Differentiable fDifferentiableAt (fun x' => t) xd:M:Type u_1inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mf:Time Space d Mt:Timex:Space ddx:Space dhf:Differentiable fDifferentiableAt (fun x' => x') xd:M:Type u_1inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mf:Time Space d Mt:Timex:Space ddx:Space dhf:Differentiable fDifferentiableAt f (t, x)d:M:Type u_1inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mf:Time Space d Mt:Timex:Space ddx:Space dhf:Differentiable fDifferentiableAt (fun x' => (t, x')) x d:M:Type u_1inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mf:Time Space d Mt:Timex:Space ddx:Space dhf:Differentiable fDifferentiableAt (fun x' => t) xd:M:Type u_1inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mf:Time Space d Mt:Timex:Space ddx:Space dhf:Differentiable fDifferentiableAt (fun x' => x') xd:M:Type u_1inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mf:Time Space d Mt:Timex:Space ddx:Space dhf:Differentiable fDifferentiableAt f (t, x)d:M:Type u_1inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mf:Time Space d Mt:Timex:Space ddx:Space dhf:Differentiable fDifferentiableAt (fun x' => (t, x')) x repeat' All goals completed! 🐙d:M:Type u_1inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mf:Time Space d Mt:Timedt:Timex:Space dhf:Differentiable f(fderiv f (t, x) ∘SL (fderiv (fun t' => t') t).prod (fderiv (fun t' => x) t)) dt = (fderiv f (t, x)) (dt, 0)d:M:Type u_1inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mf:Time Space d Mt:Timedt:Timex:Space dhf:Differentiable fDifferentiableAt (fun t' => t') td:M:Type u_1inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mf:Time Space d Mt:Timedt:Timex:Space dhf:Differentiable fDifferentiableAt (fun t' => x) td:M:Type u_1inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mf:Time Space d Mt:Timedt:Timex:Space dhf:Differentiable fDifferentiableAt f (t, x)d:M:Type u_1inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mf:Time Space d Mt:Timedt:Timex:Space dhf:Differentiable fDifferentiableAt (fun t' => (t', x)) t d:M:Type u_1inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mf:Time Space d Mt:Timedt:Timex:Space dhf:Differentiable fDifferentiableAt (fun t' => t') td:M:Type u_1inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mf:Time Space d Mt:Timedt:Timex:Space dhf:Differentiable fDifferentiableAt (fun t' => x) td:M:Type u_1inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mf:Time Space d Mt:Timedt:Timex:Space dhf:Differentiable fDifferentiableAt f (t, x)d:M:Type u_1inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mf:Time Space d Mt:Timedt:Timex:Space dhf:Differentiable fDifferentiableAt (fun t' => (t', x)) t repeat' All goals completed! 🐙

A.3. Commuting time and space derivatives

Derivatives along space coordinates and time commute.

d:M:Type u_1inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mf:Time Space d Mt:Timedt:Timex:Space ddx:Space dhf:ContDiff 2 f(fderiv f (t, x) ∘SL fderiv (fun t => (dt, 0)) (t, x) + (fderiv (fderiv f) (t, x)).flip (dt, 0)) (0, dx) = (fderiv f (t, x) ∘SL fderiv (fun x => (0, dx)) (t, x) + (fderiv (fderiv f) (t, x)).flip (0, dx)) (dt, 0)d:M:Type u_1inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mf:Time Space d Mt:Timedt:Timex:Space ddx:Space dhf:ContDiff 2 fDifferentiableAt (fderiv f) (t, x)d:M:Type u_1inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mf:Time Space d Mt:Timedt:Timex:Space ddx:Space dhf:ContDiff 2 fDifferentiableAt (fun x => (0, dx)) (t, x)d:M:Type u_1inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mf:Time Space d Mt:Timedt:Timex:Space ddx:Space dhf:ContDiff 2 fDifferentiableAt (fderiv f) (t, x)d:M:Type u_1inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mf:Time Space d Mt:Timedt:Timex:Space ddx:Space dhf:ContDiff 2 fDifferentiableAt (fun t => (dt, 0)) (t, x) d:M:Type u_1inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mf:Time Space d Mt:Timedt:Timex:Space ddx:Space dhf:ContDiff 2 f(fderiv f (t, x) ∘SL fderiv (fun t => (dt, 0)) (t, x) + (fderiv (fderiv f) (t, x)).flip (dt, 0)) (0, dx) = (fderiv f (t, x) ∘SL fderiv (fun x => (0, dx)) (t, x) + (fderiv (fderiv f) (t, x)).flip (0, dx)) (dt, 0) d:M:Type u_1inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mf:Time Space d Mt:Timedt:Timex:Space ddx:Space dhf:ContDiff 2 f((fderiv (fderiv f) (t, x)) (0, dx)) (dt, 0) = ((fderiv (fderiv f) (t, x)) (dt, 0)) (0, dx) exact (hf.contDiffAt.isSymmSndFDerivAt (d:M:Type u_1inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mf:Time Space d Mt:Timedt:Timex:Space ddx:Space dhf:ContDiff 2 fminSmoothness 2 2 All goals completed! 🐙)).eq (0, dx) (dt, 0) all_goals All goals completed! 🐙
lemma time_deriv_comm_space_deriv {d i} {M} [NormedAddCommGroup M] [NormedSpace M] {f : Time Space d M} (hf : ContDiff 2 f) (t : Time) (x : Space d) : Time.deriv (fun t' => Space.deriv i (f t') x) t = Space.deriv i (fun x' => Time.deriv (fun t' => f t' x') t) x := d:i:Fin dM:Typeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mf:Time Space d Mhf:ContDiff 2 ft:Timex:Space dTime.deriv (fun t' => deriv i (f t') x) t = deriv i (fun x' => Time.deriv (fun t' => f t' x') t) x d:i:Fin dM:Typeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mf:Time Space d Mhf:ContDiff 2 ft:Timex:Space d(fderiv (fun t' => (fderiv (f t') x) (basis i)) t) 1 = (fderiv (fun x' => (fderiv (fun t' => f t' x') t) 1) x) (basis i) All goals completed! 🐙

A.4. Differentiablity conditions

d:i:Fin dM:Type u_1inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mf:Time Space d Mhf:ContDiff 2 fx:Space dhdd:Differentiable fh1: (t : Time), fderiv (fun x => f t x) x = fderiv f (t, x) ∘SL ContinuousLinearMap.inr Time (Space d)Differentiable fun y => fderiv (f y) x d:i:Fin dM:Type u_1inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mf:Time Space d Mhf:ContDiff 2 fx:Space dhdd:Differentiable fh1: (t : Time), fderiv (fun x => f t x) x = fderiv f (t, x) ∘SL ContinuousLinearMap.inr Time (Space d)| Differentiable fun y => fderiv (f y) x d:i:Fin dM:Type u_1inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mf:Time Space d Mhf:ContDiff 2 fx:Space dhdd:Differentiable fh1: (t : Time), fderiv (fun x => f t x) x = fderiv f (t, x) ∘SL ContinuousLinearMap.inr Time (Space d)y:Time| fderiv (f y) x d:i:Fin dM:Type u_1inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mf:Time Space d Mhf:ContDiff 2 fx:Space dhdd:Differentiable fh1: (t : Time), fderiv (fun x => f t x) x = fderiv f (t, x) ∘SL ContinuousLinearMap.inr Time (Space d)y:Time| fderiv (fun x => f y x) x d:i:Fin dM:Type u_1inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mf:Time Space d Mhf:ContDiff 2 fx:Space dhdd:Differentiable fh1: (t : Time), fderiv (fun x => f t x) x = fderiv f (t, x) ∘SL ContinuousLinearMap.inr Time (Space d)y:Time| fderiv f (y, x) ∘SL ContinuousLinearMap.inr Time (Space d) All goals completed! 🐙 d:i:Fin dM:Type u_1inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mf:Time Space d Mhf:ContDiff 2 fx:Space dDifferentiable fun y => basis i All goals completed! 🐙d:M:Typeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mf:Time Space d Mhf:ContDiff 2 ft:Timehdd:Differentiable fh1: (x : Space d), fderiv (fun t => f t x) t = fderiv f (t, x) ∘SL ContinuousLinearMap.inl Time (Space d)Differentiable fun y => fderiv (fun x => f x y) t d:M:Typeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mf:Time Space d Mhf:ContDiff 2 ft:Timehdd:Differentiable fh1: (x : Space d), fderiv (fun t => f t x) t = fderiv f (t, x) ∘SL ContinuousLinearMap.inl Time (Space d)| Differentiable fun y => fderiv (fun x => f x y) t d:M:Typeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mf:Time Space d Mhf:ContDiff 2 ft:Timehdd:Differentiable fh1: (x : Space d), fderiv (fun t => f t x) t = fderiv f (t, x) ∘SL ContinuousLinearMap.inl Time (Space d)t':Space d| fderiv (fun x => f x t') t d:M:Typeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mf:Time Space d Mhf:ContDiff 2 ft:Timehdd:Differentiable fh1: (x : Space d), fderiv (fun t => f t x) t = fderiv f (t, x) ∘SL ContinuousLinearMap.inl Time (Space d)t':Space d| fderiv (fun x => f x t') t d:M:Typeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mf:Time Space d Mhf:ContDiff 2 ft:Timehdd:Differentiable fh1: (x : Space d), fderiv (fun t => f t x) t = fderiv f (t, x) ∘SL ContinuousLinearMap.inl Time (Space d)t':Space d| fderiv f (t, t') ∘SL ContinuousLinearMap.inl Time (Space d) All goals completed! 🐙 d:M:Typeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mf:Time Space d Mhf:ContDiff 2 ft:TimeDifferentiable fun y => 1 All goals completed! 🐙fₜ:Time Space EuclideanSpace (Fin 3)hf:ContDiff 2 fₜx:Space (i : Fin 3), Differentiable fun x_1 => (curl (fₜ x_1) x).ofLp i fₜ:Time Space EuclideanSpace (Fin 3)hf:ContDiff 2 fₜx:Spacei:Fin 3Differentiable fun x_1 => (curl (fₜ x_1) x).ofLp i fₜ:Time Space EuclideanSpace (Fin 3)hf:ContDiff 2 fₜx:SpaceDifferentiable fun x_1 => (curl (fₜ x_1) x).ofLp ((fun i => i) 0, )fₜ:Time Space EuclideanSpace (Fin 3)hf:ContDiff 2 fₜx:SpaceDifferentiable fun x_1 => (curl (fₜ x_1) x).ofLp ((fun i => i) 1, )fₜ:Time Space EuclideanSpace (Fin 3)hf:ContDiff 2 fₜx:SpaceDifferentiable fun x_1 => (curl (fₜ x_1) x).ofLp ((fun i => i) 2, ) fₜ:Time Space EuclideanSpace (Fin 3)hf:ContDiff 2 fₜx:SpaceDifferentiable fun x_1 => (curl (fₜ x_1) x).ofLp ((fun i => i) 0, )fₜ:Time Space EuclideanSpace (Fin 3)hf:ContDiff 2 fₜx:SpaceDifferentiable fun x_1 => (curl (fₜ x_1) x).ofLp ((fun i => i) 1, )fₜ:Time Space EuclideanSpace (Fin 3)hf:ContDiff 2 fₜx:SpaceDifferentiable fun x_1 => (curl (fₜ x_1) x).ofLp ((fun i => i) 2, ) fₜ:Time Space EuclideanSpace (Fin 3)hf:ContDiff 2 fₜx:SpaceDifferentiable fun x_1 => deriv (2, + 1) (fun x => (fₜ x_1 x).ofLp (2, + 2)) x - deriv (2, + 2) (fun x => (fₜ x_1 x).ofLp (2, + 1)) x fₜ:Time Space EuclideanSpace (Fin 3)hf:ContDiff 2 fₜx:SpaceDifferentiable fun x_1 => deriv (0 + 1) (fun x => (fₜ x_1 x).ofLp (0 + 2)) x - deriv (0 + 2) (fun x => (fₜ x_1 x).ofLp (0 + 1)) xfₜ:Time Space EuclideanSpace (Fin 3)hf:ContDiff 2 fₜx:SpaceDifferentiable fun x_1 => deriv (1, + 1) (fun x => (fₜ x_1 x).ofLp (1, + 2)) x - deriv (1, + 2) (fun x => (fₜ x_1 x).ofLp (1, + 1)) xfₜ:Time Space EuclideanSpace (Fin 3)hf:ContDiff 2 fₜx:SpaceDifferentiable fun x_1 => deriv (2, + 1) (fun x => (fₜ x_1 x).ofLp (2, + 2)) x - deriv (2, + 2) (fun x => (fₜ x_1 x).ofLp (2, + 1)) x All goals completed! 🐙

A.5. Time derivative commute with curl

Curl and time derivative commute.

fₜ:Time Space EuclideanSpace (Fin 3)t:Timex:Spacehf:ContDiff 2 fₜx':Spaceh1:Differentiable fₜDifferentiable fun t' => fₜ t' x' All goals completed! 🐙) repeat' fₜ:Time Space EuclideanSpace (Fin 3)t:Timex:Spacehf:ContDiff 2 fₜDifferentiableAt (fun t => deriv 1 (fun x => (fₜ t x).ofLp 0) x) t all_goals fₜ:Time Space EuclideanSpace (Fin 3)t:Timex:Spacehf:ContDiff 2 fₜDifferentiable fun t => deriv 1 (fun x => (fₜ t x).ofLp 0) x All goals completed! 🐙 fₜ:Time Space EuclideanSpace (Fin 3)t:Timex:Spacehf:ContDiff 2 fₜi:Fin 3Differentiable fun t => curl (fₜ t) x All goals completed! 🐙

A.6. Constant of time deriative and space derivatives zero

All goals completed! 🐙All goals completed! 🐙All goals completed! 🐙

A.7. Equal up to a constant of time and space derivatives equal

d:M:Typeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mf:Time Space d Mg:Time Space d Mhf:Differentiable fhg:Differentiable gh₁: (t : Time) (x : Space d), ∂ₜ (fun x_1 => f x_1 x) t = ∂ₜ (fun x_1 => g x_1 x) th₂: (t : Time) (x : Space d) (i : Fin d), deriv i (f t) x = deriv i (g t) xt:Timex:Space di:Fin d(fderiv (f t) x - fderiv (g t) x) (basis i) = 0d:M:Typeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mf:Time Space d Mg:Time Space d Mhf:Differentiable fhg:Differentiable gh₁: (t : Time) (x : Space d), ∂ₜ (fun x_1 => f x_1 x) t = ∂ₜ (fun x_1 => g x_1 x) th₂: (t : Time) (x : Space d) (i : Fin d), deriv i (f t) x = deriv i (g t) xt:Timex:Space di:Fin dDifferentiableAt (f t) xd:M:Typeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mf:Time Space d Mg:Time Space d Mhf:Differentiable fhg:Differentiable gh₁: (t : Time) (x : Space d), ∂ₜ (fun x_1 => f x_1 x) t = ∂ₜ (fun x_1 => g x_1 x) th₂: (t : Time) (x : Space d) (i : Fin d), deriv i (f t) x = deriv i (g t) xt:Timex:Space di:Fin dDifferentiableAt (g t) x d:M:Typeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mf:Time Space d Mg:Time Space d Mhf:Differentiable fhg:Differentiable gh₁: (t : Time) (x : Space d), ∂ₜ (fun x_1 => f x_1 x) t = ∂ₜ (fun x_1 => g x_1 x) th₂: (t : Time) (x : Space d) (i : Fin d), deriv i (f t) x = deriv i (g t) xt:Timex:Space di:Fin dDifferentiableAt (f t) xd:M:Typeinst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mf:Time Space d Mg:Time Space d Mhf:Differentiable fhg:Differentiable gh₁: (t : Time) (x : Space d), ∂ₜ (fun x_1 => f x_1 x) t = ∂ₜ (fun x_1 => g x_1 x) th₂: (t : Time) (x : Space d) (i : Fin d), deriv i (f t) x = deriv i (g t) xt:Timex:Space di:Fin dDifferentiableAt (g t) x all_goals All goals completed! 🐙

B. Derivatives of distributions on Time × Space d

B.1. Time derivatives

lemma distTimeDeriv_apply {M d} [NormedAddCommGroup M] [NormedSpace M] (f : (Time × Space d) →d[] M) (ε : 𝓢(Time × Space d, )) : (distTimeDeriv f) ε = fderivD f ε (1, 0) := M:Typed:inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mf:(Time × Space d)→d[] Mε:𝓢(Time × Space d, )(distTimeDeriv f) ε = (((fderivD ) f) ε) (1, 0) All goals completed! 🐙All goals completed! 🐙lemma apply_fderiv_eq_distTimeDeriv {M d} [NormedAddCommGroup M] [NormedSpace M] (f : (Time × Space d) →d[] M) (ε : 𝓢(Time × Space d, )) : f (SchwartzMap.evalCLM (Time × Space d) (1, 0) ((fderivCLM (Time × Space d) ) ε)) = - (distTimeDeriv f) ε := M:Typed:inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mf:(Time × Space d)→d[] Mε:𝓢(Time × Space d, )f ((SchwartzMap.evalCLM (Time × Space d) (1, 0)) ((fderivCLM (Time × Space d) ) ε)) = -(distTimeDeriv f) ε All goals completed! 🐙
B.1.1. Composition with a CLM
lemma distTimeDeriv_apply_CLM {M M2 d} [NormedAddCommGroup M] [NormedSpace M] [NormedAddCommGroup M2] [NormedSpace M2] (f : (Time × Space d) →d[] M) (c : M →L[] M2) : distTimeDeriv (c ∘L f) = c ∘L (distTimeDeriv f) := M:TypeM2:Typed:inst✝³:NormedAddCommGroup Minst✝²:NormedSpace Minst✝¹:NormedAddCommGroup M2inst✝:NormedSpace M2f:(Time × Space d)→d[] Mc:M →L[] M2distTimeDeriv (c ∘SL f) = c ∘SL distTimeDeriv f M:TypeM2:Typed:inst✝³:NormedAddCommGroup Minst✝²:NormedSpace Minst✝¹:NormedAddCommGroup M2inst✝:NormedSpace M2f:(Time × Space d)→d[] Mc:M →L[] M2ε:𝓢(Time × Space d, )(distTimeDeriv (c ∘SL f)) ε = (c ∘SL distTimeDeriv f) ε All goals completed! 🐙

B.2. Space derivatives

lemma distSpaceDeriv_apply {M d} [NormedAddCommGroup M] [NormedSpace M] (i : Fin d) (f : (Time × Space d) →d[] M) (ε : 𝓢(Time × Space d, )) : (distSpaceDeriv i f) ε = fderivD f ε (0, basis i) := M:Typed:inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mi:Fin df:(Time × Space d)→d[] Mε:𝓢(Time × Space d, )((distSpaceDeriv i) f) ε = (((fderivD ) f) ε) (0, basis i) All goals completed! 🐙All goals completed! 🐙lemma apply_fderiv_eq_distSpaceDeriv {M d} [NormedAddCommGroup M] [NormedSpace M] (i : Fin d) (f : (Time × Space d) →d[] M) (ε : 𝓢(Time × Space d, )) : f ((SchwartzMap.evalCLM (Time × Space d) (0, basis i)) ((fderivCLM (Time × Space d) ) ε)) = - (distSpaceDeriv i f) ε := M:Typed:inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mi:Fin df:(Time × Space d)→d[] Mε:𝓢(Time × Space d, )f ((SchwartzMap.evalCLM (Time × Space d) (0, basis i)) ((fderivCLM (Time × Space d) ) ε)) = -((distSpaceDeriv i) f) ε All goals completed! 🐙
B.2.1. Space derivatives commute
M:Typed:inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mi:Fin dj:Fin df:(Time × Space d)→d[] Mκ:𝓢(Time × Space d, )x:Time × Space dh1:ContDiff 2 κ(fderiv (⇑κ) x ∘SL fderiv (fun x => (0, basis i)) x + (fderiv (fderiv κ) x).flip (0, basis i)) (0, basis j) = (fderiv (⇑κ) x ∘SL fderiv (fun x => (0, basis j)) x + (fderiv (fderiv κ) x).flip (0, basis j)) (0, basis i)M:Typed:inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mi:Fin dj:Fin df:(Time × Space d)→d[] Mκ:𝓢(Time × Space d, )x:Time × Space dh1:ContDiff 2 κDifferentiableAt (fderiv κ) xM:Typed:inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mi:Fin dj:Fin df:(Time × Space d)→d[] Mκ:𝓢(Time × Space d, )x:Time × Space dh1:ContDiff 2 κDifferentiableAt (fun x => (0, basis j)) xM:Typed:inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mi:Fin dj:Fin df:(Time × Space d)→d[] Mκ:𝓢(Time × Space d, )x:Time × Space dh1:ContDiff 2 κDifferentiableAt (fderiv κ) xM:Typed:inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mi:Fin dj:Fin df:(Time × Space d)→d[] Mκ:𝓢(Time × Space d, )x:Time × Space dh1:ContDiff 2 κDifferentiableAt (fun x => (0, basis i)) x M:Typed:inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mi:Fin dj:Fin df:(Time × Space d)→d[] Mκ:𝓢(Time × Space d, )x:Time × Space dh1:ContDiff 2 κ(fderiv (⇑κ) x ∘SL fderiv (fun x => (0, basis i)) x + (fderiv (fderiv κ) x).flip (0, basis i)) (0, basis j) = (fderiv (⇑κ) x ∘SL fderiv (fun x => (0, basis j)) x + (fderiv (fderiv κ) x).flip (0, basis j)) (0, basis i) M:Typed:inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mi:Fin dj:Fin df:(Time × Space d)→d[] Mκ:𝓢(Time × Space d, )x:Time × Space dh1:ContDiff 2 κ((fderiv (fderiv κ) x) (0, basis j)) (0, basis i) = ((fderiv (fderiv κ) x) (0, basis i)) (0, basis j) exact (h1.contDiffAt.isSymmSndFDerivAt (M:Typed:inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mi:Fin dj:Fin df:(Time × Space d)→d[] Mκ:𝓢(Time × Space d, )x:Time × Space dh1:ContDiff 2 κminSmoothness 2 2 All goals completed! 🐙)).eq (0, basis j) (0, basis i) all_goals All goals completed! 🐙
B.2.2. Composition with a CLM
lemma distSpaceDeriv_apply_CLM {M M2 d} [NormedAddCommGroup M] [NormedSpace M] [NormedAddCommGroup M2] [NormedSpace M2] (i : Fin d) (f : (Time × Space d) →d[] M) (c : M →L[] M2) : distSpaceDeriv i (c ∘L f) = c ∘L (distSpaceDeriv i f) := M:TypeM2:Typed:inst✝³:NormedAddCommGroup Minst✝²:NormedSpace Minst✝¹:NormedAddCommGroup M2inst✝:NormedSpace M2i:Fin df:(Time × Space d)→d[] Mc:M →L[] M2(distSpaceDeriv i) (c ∘SL f) = c ∘SL (distSpaceDeriv i) f M:TypeM2:Typed:inst✝³:NormedAddCommGroup Minst✝²:NormedSpace Minst✝¹:NormedAddCommGroup M2inst✝:NormedSpace M2i:Fin df:(Time × Space d)→d[] Mc:M →L[] M2ε:𝓢(Time × Space d, )((distSpaceDeriv i) (c ∘SL f)) ε = (c ∘SL (distSpaceDeriv i) f) ε All goals completed! 🐙

B.3. Time and space derivatives commute

M:Typed:inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mi:Fin df:(Time × Space d)→d[] Mκ:𝓢(Time × Space d, )x:Time × Space dh1:ContDiff 2 κ(fderiv (⇑κ) x ∘SL fderiv (fun x => (1, 0)) x + (fderiv (fderiv κ) x).flip (1, 0)) (0, basis i) = (fderiv (⇑κ) x ∘SL fderiv (fun x => (0, basis i)) x + (fderiv (fderiv κ) x).flip (0, basis i)) (1, 0)M:Typed:inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mi:Fin df:(Time × Space d)→d[] Mκ:𝓢(Time × Space d, )x:Time × Space dh1:ContDiff 2 κDifferentiableAt (fderiv κ) xM:Typed:inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mi:Fin df:(Time × Space d)→d[] Mκ:𝓢(Time × Space d, )x:Time × Space dh1:ContDiff 2 κDifferentiableAt (fun x => (0, basis i)) xM:Typed:inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mi:Fin df:(Time × Space d)→d[] Mκ:𝓢(Time × Space d, )x:Time × Space dh1:ContDiff 2 κDifferentiableAt (fderiv κ) xM:Typed:inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mi:Fin df:(Time × Space d)→d[] Mκ:𝓢(Time × Space d, )x:Time × Space dh1:ContDiff 2 κDifferentiableAt (fun x => (1, 0)) x M:Typed:inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mi:Fin df:(Time × Space d)→d[] Mκ:𝓢(Time × Space d, )x:Time × Space dh1:ContDiff 2 κ(fderiv (⇑κ) x ∘SL fderiv (fun x => (1, 0)) x + (fderiv (fderiv κ) x).flip (1, 0)) (0, basis i) = (fderiv (⇑κ) x ∘SL fderiv (fun x => (0, basis i)) x + (fderiv (fderiv κ) x).flip (0, basis i)) (1, 0) M:Typed:inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mi:Fin df:(Time × Space d)→d[] Mκ:𝓢(Time × Space d, )x:Time × Space dh1:ContDiff 2 κ((fderiv (fderiv κ) x) (0, basis i)) (1, 0) = ((fderiv (fderiv κ) x) (1, 0)) (0, basis i) exact (h1.contDiffAt.isSymmSndFDerivAt (M:Typed:inst✝¹:NormedAddCommGroup Minst✝:NormedSpace Mi:Fin df:(Time × Space d)→d[] Mκ:𝓢(Time × Space d, )x:Time × Space dh1:ContDiff 2 κminSmoothness 2 2 All goals completed! 🐙)).eq (0, basis i) (1, 0) all_goals All goals completed! 🐙

B.4. The spatial gradient

lemma distSpaceGrad_apply {d} (f : (Time × Space d) →d[] ) (ε : 𝓢(Time × Space d, )) : distSpaceGrad f ε = fun i => distSpaceDeriv i f ε := d:f:(Time × Space d)→d[] ε:𝓢(Time × Space d, )((distSpaceGrad f) ε).ofLp = fun i => ((distSpaceDeriv i) f) ε All goals completed! 🐙

B.5. The spatial divergence

lemma distSpaceDiv_apply_eq_sum_distSpaceDeriv {d} (f : (Time × Space d) →d[] EuclideanSpace (Fin d)) (η : 𝓢(Time ×Space d, )) : distSpaceDiv f η = i, distSpaceDeriv i f η i := d:f:(Time × Space d)→d[] EuclideanSpace (Fin d)η:𝓢(Time × Space d, )(distSpaceDiv f) η = i, (((distSpaceDeriv i) f) η).ofLp i All goals completed! 🐙

B.6. The spatial curl