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

The cross product on Euclidean vectors in three dimensions

i. Overview

In this module we define the cross product on EuclideanSpace ℝ (Fin 3), and prove various properties about it related to time derivatives and inner products.

ii. Key results

    ⨯ₑ₃ : The cross product on EuclideanSpace ℝ (Fin 3).

    time_deriv_cross_commute : Time derivatives move out of cross products.

    inner_cross_self : Inner product of a vector with the cross product of another vector and itself is zero.

    inner_self_cross : Inner product of a vector with the cross product of itself and another vector is zero.

iii. Table of contents

    A. The notation for the cross product

    B. Time derivatives move out of cross products

    C. Inner product of vectors with cross products involving themselves

iv. References

@[expose] public section

A. The notation for the cross product

Cross product in EuclideanSpace ℝ (Fin 3). Uses which is typed using \X or \vectorproduct or \crossproduct.

set_option quotPrecheck false ininfixl:70 " ⨯ₑ₃ " => fun a b => (WithLp.equiv 2 (Fin 3 )).symm (WithLp.equiv 2 (Fin 3 ) a ⨯₃ WithLp.equiv 2 (Fin 3 ) b)

B. Time derivatives move out of cross products

Cross product and fderiv commute.

t:Times:EuclideanSpace (Fin 3)f:Time EuclideanSpace (Fin 3)hf:Differentiable fh: (i j : Fin 3), s.ofLp i * ((fderiv (fun u => f u) t) 1).ofLp j - s.ofLp j * ((fderiv (fun u => f u) t) 1).ofLp i = (fderiv (fun t => s.ofLp i * (f t).ofLp j - s.ofLp j * (f t).ofLp i) t) 1(fderiv (fun t => s.ofLp 0 * (f t).ofLp 1 - s.ofLp 1 * (f t).ofLp 0) t) 1 = (fderiv (fun t => ![s.ofLp 1 * (f t).ofLp 2 - s.ofLp 2 * (f t).ofLp 1, s.ofLp 2 * (f t).ofLp 0 - s.ofLp 0 * (f t).ofLp 2, s.ofLp 0 * (f t).ofLp 1 - s.ofLp 1 * (f t).ofLp 0].ofLp 2) t) 1t:Times:EuclideanSpace (Fin 3)f:Time EuclideanSpace (Fin 3)hf:Differentiable fh: (i j : Fin 3), s.ofLp i * ((fderiv (fun u => f u) t) 1).ofLp j - s.ofLp j * ((fderiv (fun u => f u) t) 1).ofLp i = (fderiv (fun t => s.ofLp i * (f t).ofLp j - s.ofLp j * (f t).ofLp i) t) 1Differentiable fun t' => ![s.ofLp 1 * (f t').ofLp 2 - s.ofLp 2 * (f t').ofLp 1, s.ofLp 2 * (f t').ofLp 0 - s.ofLp 0 * (f t').ofLp 2, s.ofLp 0 * (f t').ofLp 1 - s.ofLp 1 * (f t').ofLp 0] t:Times:EuclideanSpace (Fin 3)f:Time EuclideanSpace (Fin 3)hf:Differentiable fh: (i j : Fin 3), s.ofLp i * ((fderiv (fun u => f u) t) 1).ofLp j - s.ofLp j * ((fderiv (fun u => f u) t) 1).ofLp i = (fderiv (fun t => s.ofLp i * (f t).ofLp j - s.ofLp j * (f t).ofLp i) t) 1Differentiable fun t' => ![s.ofLp 1 * (f t').ofLp 2 - s.ofLp 2 * (f t').ofLp 1, s.ofLp 2 * (f t').ofLp 0 - s.ofLp 0 * (f t').ofLp 2, s.ofLp 0 * (f t').ofLp 1 - s.ofLp 1 * (f t').ofLp 0] t:Times:EuclideanSpace (Fin 3)f:Time EuclideanSpace (Fin 3)hf:Differentiable fh: (i j : Fin 3), s.ofLp i * ((fderiv (fun u => f u) t) 1).ofLp j - s.ofLp j * ((fderiv (fun u => f u) t) 1).ofLp i = (fderiv (fun t => s.ofLp i * (f t).ofLp j - s.ofLp j * (f t).ofLp i) t) 1 (i : Fin 3), Differentiable fun t => ![s.ofLp 1 * (f t).ofLp 2 - s.ofLp 2 * (f t).ofLp 1, s.ofLp 2 * (f t).ofLp 0 - s.ofLp 0 * (f t).ofLp 2, s.ofLp 0 * (f t).ofLp 1 - s.ofLp 1 * (f t).ofLp 0].ofLp i t:Times:EuclideanSpace (Fin 3)f:Time EuclideanSpace (Fin 3)hf:Differentiable fh: (i j : Fin 3), s.ofLp i * ((fderiv (fun u => f u) t) 1).ofLp j - s.ofLp j * ((fderiv (fun u => f u) t) 1).ofLp i = (fderiv (fun t => s.ofLp i * (f t).ofLp j - s.ofLp j * (f t).ofLp i) t) 1i:Fin 3Differentiable fun t => ![s.ofLp 1 * (f t).ofLp 2 - s.ofLp 2 * (f t).ofLp 1, s.ofLp 2 * (f t).ofLp 0 - s.ofLp 0 * (f t).ofLp 2, s.ofLp 0 * (f t).ofLp 1 - s.ofLp 1 * (f t).ofLp 0].ofLp i t:Times:EuclideanSpace (Fin 3)f:Time EuclideanSpace (Fin 3)hf:Differentiable fh: (i j : Fin 3), s.ofLp i * ((fderiv (fun u => f u) t) 1).ofLp j - s.ofLp j * ((fderiv (fun u => f u) t) 1).ofLp i = (fderiv (fun t => s.ofLp i * (f t).ofLp j - s.ofLp j * (f t).ofLp i) t) 1Differentiable fun t => ![s.ofLp 1 * (f t).ofLp 2 - s.ofLp 2 * (f t).ofLp 1, s.ofLp 2 * (f t).ofLp 0 - s.ofLp 0 * (f t).ofLp 2, s.ofLp 0 * (f t).ofLp 1 - s.ofLp 1 * (f t).ofLp 0].ofLp ((fun i => i) 0, )t:Times:EuclideanSpace (Fin 3)f:Time EuclideanSpace (Fin 3)hf:Differentiable fh: (i j : Fin 3), s.ofLp i * ((fderiv (fun u => f u) t) 1).ofLp j - s.ofLp j * ((fderiv (fun u => f u) t) 1).ofLp i = (fderiv (fun t => s.ofLp i * (f t).ofLp j - s.ofLp j * (f t).ofLp i) t) 1Differentiable fun t => ![s.ofLp 1 * (f t).ofLp 2 - s.ofLp 2 * (f t).ofLp 1, s.ofLp 2 * (f t).ofLp 0 - s.ofLp 0 * (f t).ofLp 2, s.ofLp 0 * (f t).ofLp 1 - s.ofLp 1 * (f t).ofLp 0].ofLp ((fun i => i) 1, )t:Times:EuclideanSpace (Fin 3)f:Time EuclideanSpace (Fin 3)hf:Differentiable fh: (i j : Fin 3), s.ofLp i * ((fderiv (fun u => f u) t) 1).ofLp j - s.ofLp j * ((fderiv (fun u => f u) t) 1).ofLp i = (fderiv (fun t => s.ofLp i * (f t).ofLp j - s.ofLp j * (f t).ofLp i) t) 1Differentiable fun t => ![s.ofLp 1 * (f t).ofLp 2 - s.ofLp 2 * (f t).ofLp 1, s.ofLp 2 * (f t).ofLp 0 - s.ofLp 0 * (f t).ofLp 2, s.ofLp 0 * (f t).ofLp 1 - s.ofLp 1 * (f t).ofLp 0].ofLp ((fun i => i) 2, ) t:Times:EuclideanSpace (Fin 3)f:Time EuclideanSpace (Fin 3)hf:Differentiable fh: (i j : Fin 3), s.ofLp i * ((fderiv (fun u => f u) t) 1).ofLp j - s.ofLp j * ((fderiv (fun u => f u) t) 1).ofLp i = (fderiv (fun t => s.ofLp i * (f t).ofLp j - s.ofLp j * (f t).ofLp i) t) 1Differentiable fun t => ![s.ofLp 1 * (f t).ofLp 2 - s.ofLp 2 * (f t).ofLp 1, s.ofLp 2 * (f t).ofLp 0 - s.ofLp 0 * (f t).ofLp 2, s.ofLp 0 * (f t).ofLp 1 - s.ofLp 1 * (f t).ofLp 0].ofLp ((fun i => i) 0, ) t:Times:EuclideanSpace (Fin 3)f:Time EuclideanSpace (Fin 3)hf:Differentiable fh: (i j : Fin 3), s.ofLp i * ((fderiv (fun u => f u) t) 1).ofLp j - s.ofLp j * ((fderiv (fun u => f u) t) 1).ofLp i = (fderiv (fun t => s.ofLp i * (f t).ofLp j - s.ofLp j * (f t).ofLp i) t) 1Differentiable fun t => s.ofLp 1 * (f t).ofLp 2 - s.ofLp 2 * (f t).ofLp 1 All goals completed! 🐙 t:Times:EuclideanSpace (Fin 3)f:Time EuclideanSpace (Fin 3)hf:Differentiable fh: (i j : Fin 3), s.ofLp i * ((fderiv (fun u => f u) t) 1).ofLp j - s.ofLp j * ((fderiv (fun u => f u) t) 1).ofLp i = (fderiv (fun t => s.ofLp i * (f t).ofLp j - s.ofLp j * (f t).ofLp i) t) 1Differentiable fun t => ![s.ofLp 1 * (f t).ofLp 2 - s.ofLp 2 * (f t).ofLp 1, s.ofLp 2 * (f t).ofLp 0 - s.ofLp 0 * (f t).ofLp 2, s.ofLp 0 * (f t).ofLp 1 - s.ofLp 1 * (f t).ofLp 0].ofLp ((fun i => i) 1, ) t:Times:EuclideanSpace (Fin 3)f:Time EuclideanSpace (Fin 3)hf:Differentiable fh: (i j : Fin 3), s.ofLp i * ((fderiv (fun u => f u) t) 1).ofLp j - s.ofLp j * ((fderiv (fun u => f u) t) 1).ofLp i = (fderiv (fun t => s.ofLp i * (f t).ofLp j - s.ofLp j * (f t).ofLp i) t) 1Differentiable fun t => s.ofLp 2 * (f t).ofLp 0 - s.ofLp 0 * (f t).ofLp 2 All goals completed! 🐙 t:Times:EuclideanSpace (Fin 3)f:Time EuclideanSpace (Fin 3)hf:Differentiable fh: (i j : Fin 3), s.ofLp i * ((fderiv (fun u => f u) t) 1).ofLp j - s.ofLp j * ((fderiv (fun u => f u) t) 1).ofLp i = (fderiv (fun t => s.ofLp i * (f t).ofLp j - s.ofLp j * (f t).ofLp i) t) 1Differentiable fun t => ![s.ofLp 1 * (f t).ofLp 2 - s.ofLp 2 * (f t).ofLp 1, s.ofLp 2 * (f t).ofLp 0 - s.ofLp 0 * (f t).ofLp 2, s.ofLp 0 * (f t).ofLp 1 - s.ofLp 1 * (f t).ofLp 0].ofLp ((fun i => i) 2, ) t:Times:EuclideanSpace (Fin 3)f:Time EuclideanSpace (Fin 3)hf:Differentiable fh: (i j : Fin 3), s.ofLp i * ((fderiv (fun u => f u) t) 1).ofLp j - s.ofLp j * ((fderiv (fun u => f u) t) 1).ofLp i = (fderiv (fun t => s.ofLp i * (f t).ofLp j - s.ofLp j * (f t).ofLp i) t) 1Differentiable fun t => s.ofLp 0 * (f t).ofLp 1 - s.ofLp 1 * (f t).ofLp 0 All goals completed! 🐙

Cross product and time derivative commute.

t:Times:EuclideanSpace (Fin 3)f:Time EuclideanSpace (Fin 3)hf:Differentiable fDifferentiable f All goals completed! 🐙

C. Inner product of vectors with cross products involving themselves

All goals completed! 🐙All goals completed! 🐙