Imports
/-
Copyright (c) 2026 Giuseppe Sorge. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Giuseppe Sorge
-/
module
public import Physlib.ClassicalMechanics.RigidBody.Basic
public import Physlib.Mathematics.CrossProductAngular momentum of a rigid body
For a rigid body rotating with angular velocity ω about its reference point, each body point at
position r moves with velocity ω × r, so the body's angular momentum about that point is
L = ∫ r × (ω × r) dm. Expanding the double cross product,
r × (ω × r) = |r|² ω − (r · ω) r, shows that L is linear in ω with matrix the inertia tensor:
L = I ω.
References
Landau and Lifshitz, Mechanics, Section 32.
@[expose] public section
The angular momentum of a rigid body equals its inertia tensor applied to the angular velocity:
L = I ω.
e_6 R:RigidBody 3ω:Fin 3 → ℝi:Fin 3hsmul:∀ (j : Fin 3),
R.ρ ⟨fun x => (if i = j then 1 else 0) * ∑ k, x.val 3 k ^ 2 - x.val 3 i * x.val 3 j, ⋯⟩ * ω j =
R.ρ (ω j • ⟨fun x => (if i = j then 1 else 0) * ∑ k, x.val 3 k ^ 2 - x.val 3 i * x.val 3 j, ⋯⟩)x:Space⊢ (∑ k, x.val 3 k ^ 2) * ω i - (∑ j, x.val 3 j * ω j) * x.val 3 i =
∑ c,
ContMDiffMap.coeFnAddMonoidHom
(ω c • ⟨fun x => (if i = c then 1 else 0) * ∑ k, x.val 3 k ^ 2 - x.val 3 i * x.val 3 c, ⋯⟩) x
simp only [ContMDiffMap.coeFnAddMonoidHom_apply, ContMDiffMap.coe_smul, Pi.smul_apply,
ContMDiffMap.coeFn_mk, smul_eq_mul] e_6 R:RigidBody 3ω:Fin 3 → ℝi:Fin 3hsmul:∀ (j : Fin 3),
R.ρ ⟨fun x => (if i = j then 1 else 0) * ∑ k, x.val 3 k ^ 2 - x.val 3 i * x.val 3 j, ⋯⟩ * ω j =
R.ρ (ω j • ⟨fun x => (if i = j then 1 else 0) * ∑ k, x.val 3 k ^ 2 - x.val 3 i * x.val 3 j, ⋯⟩)x:Space⊢ (∑ k, x.val 3 k ^ 2) * ω i - (∑ j, x.val 3 j * ω j) * x.val 3 i =
∑ x_1, ω x_1 * ((if i = x_1 then 1 else 0) * ∑ k, x.val 3 k ^ 2 - x.val 3 i * x.val 3 x_1)
fin_cases i e_6.«0» R:RigidBody 3ω:Fin 3 → ℝx:Spacehsmul:∀ (j : Fin 3),
R.ρ
⟨fun x =>
(if (fun i => i) ⟨0, ⋯⟩ = j then 1 else 0) * ∑ k, x.val 3 k ^ 2 - x.val 3 ((fun i => i) ⟨0, ⋯⟩) * x.val 3 j,
⋯⟩ *
ω j =
R.ρ
(ω j •
⟨fun x =>
(if (fun i => i) ⟨0, ⋯⟩ = j then 1 else 0) * ∑ k, x.val 3 k ^ 2 - x.val 3 ((fun i => i) ⟨0, ⋯⟩) * x.val 3 j,
⋯⟩)⊢ (∑ k, x.val 3 k ^ 2) * ω ((fun i => i) ⟨0, ⋯⟩) - (∑ j, x.val 3 j * ω j) * x.val 3 ((fun i => i) ⟨0, ⋯⟩) =
∑ x_1,
ω x_1 *
((if (fun i => i) ⟨0, ⋯⟩ = x_1 then 1 else 0) * ∑ k, x.val 3 k ^ 2 - x.val 3 ((fun i => i) ⟨0, ⋯⟩) * x.val 3 x_1)e_6.«1» R:RigidBody 3ω:Fin 3 → ℝx:Spacehsmul:∀ (j : Fin 3),
R.ρ
⟨fun x =>
(if (fun i => i) ⟨1, ⋯⟩ = j then 1 else 0) * ∑ k, x.val 3 k ^ 2 - x.val 3 ((fun i => i) ⟨1, ⋯⟩) * x.val 3 j,
⋯⟩ *
ω j =
R.ρ
(ω j •
⟨fun x =>
(if (fun i => i) ⟨1, ⋯⟩ = j then 1 else 0) * ∑ k, x.val 3 k ^ 2 - x.val 3 ((fun i => i) ⟨1, ⋯⟩) * x.val 3 j,
⋯⟩)⊢ (∑ k, x.val 3 k ^ 2) * ω ((fun i => i) ⟨1, ⋯⟩) - (∑ j, x.val 3 j * ω j) * x.val 3 ((fun i => i) ⟨1, ⋯⟩) =
∑ x_1,
ω x_1 *
((if (fun i => i) ⟨1, ⋯⟩ = x_1 then 1 else 0) * ∑ k, x.val 3 k ^ 2 - x.val 3 ((fun i => i) ⟨1, ⋯⟩) * x.val 3 x_1)e_6.«2» R:RigidBody 3ω:Fin 3 → ℝx:Spacehsmul:∀ (j : Fin 3),
R.ρ
⟨fun x =>
(if (fun i => i) ⟨2, ⋯⟩ = j then 1 else 0) * ∑ k, x.val 3 k ^ 2 - x.val 3 ((fun i => i) ⟨2, ⋯⟩) * x.val 3 j,
⋯⟩ *
ω j =
R.ρ
(ω j •
⟨fun x =>
(if (fun i => i) ⟨2, ⋯⟩ = j then 1 else 0) * ∑ k, x.val 3 k ^ 2 - x.val 3 ((fun i => i) ⟨2, ⋯⟩) * x.val 3 j,
⋯⟩)⊢ (∑ k, x.val 3 k ^ 2) * ω ((fun i => i) ⟨2, ⋯⟩) - (∑ j, x.val 3 j * ω j) * x.val 3 ((fun i => i) ⟨2, ⋯⟩) =
∑ x_1,
ω x_1 *
((if (fun i => i) ⟨2, ⋯⟩ = x_1 then 1 else 0) * ∑ k, x.val 3 k ^ 2 - x.val 3 ((fun i => i) ⟨2, ⋯⟩) * x.val 3 x_1) <;> e_6.«0» R:RigidBody 3ω:Fin 3 → ℝx:Spacehsmul:∀ (j : Fin 3),
R.ρ
⟨fun x =>
(if (fun i => i) ⟨0, ⋯⟩ = j then 1 else 0) * ∑ k, x.val 3 k ^ 2 - x.val 3 ((fun i => i) ⟨0, ⋯⟩) * x.val 3 j,
⋯⟩ *
ω j =
R.ρ
(ω j •
⟨fun x =>
(if (fun i => i) ⟨0, ⋯⟩ = j then 1 else 0) * ∑ k, x.val 3 k ^ 2 - x.val 3 ((fun i => i) ⟨0, ⋯⟩) * x.val 3 j,
⋯⟩)⊢ (∑ k, x.val 3 k ^ 2) * ω ((fun i => i) ⟨0, ⋯⟩) - (∑ j, x.val 3 j * ω j) * x.val 3 ((fun i => i) ⟨0, ⋯⟩) =
∑ x_1,
ω x_1 *
((if (fun i => i) ⟨0, ⋯⟩ = x_1 then 1 else 0) * ∑ k, x.val 3 k ^ 2 - x.val 3 ((fun i => i) ⟨0, ⋯⟩) * x.val 3 x_1)e_6.«1» R:RigidBody 3ω:Fin 3 → ℝx:Spacehsmul:∀ (j : Fin 3),
R.ρ
⟨fun x =>
(if (fun i => i) ⟨1, ⋯⟩ = j then 1 else 0) * ∑ k, x.val 3 k ^ 2 - x.val 3 ((fun i => i) ⟨1, ⋯⟩) * x.val 3 j,
⋯⟩ *
ω j =
R.ρ
(ω j •
⟨fun x =>
(if (fun i => i) ⟨1, ⋯⟩ = j then 1 else 0) * ∑ k, x.val 3 k ^ 2 - x.val 3 ((fun i => i) ⟨1, ⋯⟩) * x.val 3 j,
⋯⟩)⊢ (∑ k, x.val 3 k ^ 2) * ω ((fun i => i) ⟨1, ⋯⟩) - (∑ j, x.val 3 j * ω j) * x.val 3 ((fun i => i) ⟨1, ⋯⟩) =
∑ x_1,
ω x_1 *
((if (fun i => i) ⟨1, ⋯⟩ = x_1 then 1 else 0) * ∑ k, x.val 3 k ^ 2 - x.val 3 ((fun i => i) ⟨1, ⋯⟩) * x.val 3 x_1)e_6.«2» R:RigidBody 3ω:Fin 3 → ℝx:Spacehsmul:∀ (j : Fin 3),
R.ρ
⟨fun x =>
(if (fun i => i) ⟨2, ⋯⟩ = j then 1 else 0) * ∑ k, x.val 3 k ^ 2 - x.val 3 ((fun i => i) ⟨2, ⋯⟩) * x.val 3 j,
⋯⟩ *
ω j =
R.ρ
(ω j •
⟨fun x =>
(if (fun i => i) ⟨2, ⋯⟩ = j then 1 else 0) * ∑ k, x.val 3 k ^ 2 - x.val 3 ((fun i => i) ⟨2, ⋯⟩) * x.val 3 j,
⋯⟩)⊢ (∑ k, x.val 3 k ^ 2) * ω ((fun i => i) ⟨2, ⋯⟩) - (∑ j, x.val 3 j * ω j) * x.val 3 ((fun i => i) ⟨2, ⋯⟩) =
∑ x_1,
ω x_1 *
((if (fun i => i) ⟨2, ⋯⟩ = x_1 then 1 else 0) * ∑ k, x.val 3 k ^ 2 - x.val 3 ((fun i => i) ⟨2, ⋯⟩) * x.val 3 x_1) simp [Fin.sum_univ_three] e_6.«2» R:RigidBody 3ω:Fin 3 → ℝx:Spacehsmul:∀ (j : Fin 3),
R.ρ
⟨fun x =>
(if (fun i => i) ⟨2, ⋯⟩ = j then 1 else 0) * ∑ k, x.val 3 k ^ 2 - x.val 3 ((fun i => i) ⟨2, ⋯⟩) * x.val 3 j,
⋯⟩ *
ω j =
R.ρ
(ω j •
⟨fun x =>
(if (fun i => i) ⟨2, ⋯⟩ = j then 1 else 0) * ∑ k, x.val 3 k ^ 2 - x.val 3 ((fun i => i) ⟨2, ⋯⟩) * x.val 3 j,
⋯⟩)⊢ (x.val 3 0 ^ 2 + x.val 3 1 ^ 2 + x.val 3 2 ^ 2) * ω 2 -
(x.val 3 0 * ω 0 + x.val 3 1 * ω 1 + x.val 3 2 * ω 2) * x.val 3 2 =
-(ω 0 * (x.val 3 2 * x.val 3 0)) + -(ω 1 * (x.val 3 2 * x.val 3 1)) +
ω 2 * (x.val 3 0 ^ 2 + x.val 3 1 ^ 2 + x.val 3 2 ^ 2 - x.val 3 2 * x.val 3 2) <;> e_6.«0» R:RigidBody 3ω:Fin 3 → ℝx:Spacehsmul:∀ (j : Fin 3),
R.ρ
⟨fun x =>
(if (fun i => i) ⟨0, ⋯⟩ = j then 1 else 0) * ∑ k, x.val 3 k ^ 2 - x.val 3 ((fun i => i) ⟨0, ⋯⟩) * x.val 3 j,
⋯⟩ *
ω j =
R.ρ
(ω j •
⟨fun x =>
(if (fun i => i) ⟨0, ⋯⟩ = j then 1 else 0) * ∑ k, x.val 3 k ^ 2 - x.val 3 ((fun i => i) ⟨0, ⋯⟩) * x.val 3 j,
⋯⟩)⊢ (x.val 3 0 ^ 2 + x.val 3 1 ^ 2 + x.val 3 2 ^ 2) * ω 0 -
(x.val 3 0 * ω 0 + x.val 3 1 * ω 1 + x.val 3 2 * ω 2) * x.val 3 0 =
ω 0 * (x.val 3 0 ^ 2 + x.val 3 1 ^ 2 + x.val 3 2 ^ 2 - x.val 3 0 * x.val 3 0) + -(ω 1 * (x.val 3 0 * x.val 3 1)) +
-(ω 2 * (x.val 3 0 * x.val 3 2))e_6.«1» R:RigidBody 3ω:Fin 3 → ℝx:Spacehsmul:∀ (j : Fin 3),
R.ρ
⟨fun x =>
(if (fun i => i) ⟨1, ⋯⟩ = j then 1 else 0) * ∑ k, x.val 3 k ^ 2 - x.val 3 ((fun i => i) ⟨1, ⋯⟩) * x.val 3 j,
⋯⟩ *
ω j =
R.ρ
(ω j •
⟨fun x =>
(if (fun i => i) ⟨1, ⋯⟩ = j then 1 else 0) * ∑ k, x.val 3 k ^ 2 - x.val 3 ((fun i => i) ⟨1, ⋯⟩) * x.val 3 j,
⋯⟩)⊢ (x.val 3 0 ^ 2 + x.val 3 1 ^ 2 + x.val 3 2 ^ 2) * ω 1 -
(x.val 3 0 * ω 0 + x.val 3 1 * ω 1 + x.val 3 2 * ω 2) * x.val 3 1 =
-(ω 0 * (x.val 3 1 * x.val 3 0)) + ω 1 * (x.val 3 0 ^ 2 + x.val 3 1 ^ 2 + x.val 3 2 ^ 2 - x.val 3 1 * x.val 3 1) +
-(ω 2 * (x.val 3 1 * x.val 3 2))e_6.«2» R:RigidBody 3ω:Fin 3 → ℝx:Spacehsmul:∀ (j : Fin 3),
R.ρ
⟨fun x =>
(if (fun i => i) ⟨2, ⋯⟩ = j then 1 else 0) * ∑ k, x.val 3 k ^ 2 - x.val 3 ((fun i => i) ⟨2, ⋯⟩) * x.val 3 j,
⋯⟩ *
ω j =
R.ρ
(ω j •
⟨fun x =>
(if (fun i => i) ⟨2, ⋯⟩ = j then 1 else 0) * ∑ k, x.val 3 k ^ 2 - x.val 3 ((fun i => i) ⟨2, ⋯⟩) * x.val 3 j,
⋯⟩)⊢ (x.val 3 0 ^ 2 + x.val 3 1 ^ 2 + x.val 3 2 ^ 2) * ω 2 -
(x.val 3 0 * ω 0 + x.val 3 1 * ω 1 + x.val 3 2 * ω 2) * x.val 3 2 =
-(ω 0 * (x.val 3 2 * x.val 3 0)) + -(ω 1 * (x.val 3 2 * x.val 3 1)) +
ω 2 * (x.val 3 0 ^ 2 + x.val 3 1 ^ 2 + x.val 3 2 ^ 2 - x.val 3 2 * x.val 3 2) ring All goals completed! 🐙