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.CrossProduct

Angular 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 ω.

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 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) 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)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)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) 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)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)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) 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) 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))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))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) All goals completed! 🐙