feat(ClassicalMechanics): add rigid-body angular momentum and prove L = Iω#1366
Conversation
… = Iω For a body rotating with angular velocity ω about its reference point, each point at r moves with velocity ω × r, so the angular momentum is L = ∫ r × (ω × r) dm. Expanding the double cross product (r × (ω × r) = |r|² ω − (r·ω) r) shows L = I ω: - RigidBody.angularMomentum ω, defined as the componentwise ρ of r × (ω × r) - Matrix.cross_cross_self_apply (Mathematics/CrossProductMatrix.lean): the general bac−cab expansion v ⨯₃ (w ⨯₃ v) = |v|² w − (v·w) v, kept in the general cross-product file rather than the classical-mechanics one - angularMomentum_eq_inertiaTensor_mulVec: L = inertiaTensor *ᵥ ω Toward leanprover-community#893. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
Thank you for this PR, which will now be reviewed. If submitting to ./Physlib or ./QuantumInfo, please see our review guidelines if you are not familiar with the process. You should expect a back and forth with a reviewer before your PR is merged. See also that link for how to add appropriate labels to your PR. The PR will also go through a number of automated checks. You can learn more about these here, including how to run them locally. If you are submitting to ./PhyslibAlpha there will be a lighter review process, though your PR must still pass the automated checks. If you want to bring attention to this PR, please write a message on this thread of the Lean Zulip. Important: If a reviewer adds an |
| /-- The component form of the triple cross product `v ⨯₃ (w ⨯₃ v)`: by the `bac−cab` identity its | ||
| `i`-th entry is `|v|² wᵢ − (v · w) vᵢ`, written with the explicit component sums `∑ k, (v k)²` and | ||
| `∑ j, v j * w j`. -/ | ||
| lemma cross_cross_self_apply (v w : Fin 3 → ℝ) (i : Fin 3) : |
There was a problem hiding this comment.
I think either we:
- Move this lemma to a
CrossProductfile, - or, rename this file to
CrossProduct.
…uct file Address review: keep CrossProductMatrix.lean focused on the hat map, and put the general triple-cross-product identity in its own file Physlib/Mathematics/CrossProduct.lean. AngularMomentum.lean now imports Physlib.Mathematics.CrossProduct. Co-authored-by: Claude Opus 4.8 <no-reply+claude-opus-4-8@anthropic.com>
|
Thanks! Went with option 1 — moved cross_cross_self_apply into a new Physlib/Mathematics/CrossProduct.lean, keeping CrossProductMatrix.lean for the hat map, and pointed AngularMomentum.lean at the new file. |
|
-awaiting-author |
This PR adds the angular momentum of a rigid body and proves the fundamental identity
L = I ω, the first step of the Landau–Lifshitz §32 rigid-body dynamics arc (#893).For a body rotating with angular velocity
ωabout its reference point, each point atrmoves with velocityω × r, so the angular momentum isL = ∫ r × (ω × r) dm. Expanding the double cross product,r × (ω × r) = |r|² ω − (r · ω) r, shows thatLis linear inωwith matrix the (already-formalized) inertia tensor.Physlib/ClassicalMechanics/RigidBody/AngularMomentum.lean(new)RigidBody.angularMomentum ω— the angular momentum, defined asρapplied componentwise to the physical integrandr × (ω × r)(mathlib's⨯₃on theSpace 3coordinates);angularMomentum_eq_inertiaTensor_mulVec—L = inertiaTensor *ᵥ ω.Physlib/Mathematics/CrossProductMatrix.leanMatrix.cross_cross_self_apply— the generalbac−cabexpansion[v ⨯₃ (w ⨯₃ v)]ᵢ = |v|² wᵢ − (v · w) vᵢforv w : Fin 3 → ℝ, a thin componentwise corollary of mathlib'scross_cross_eq_smul_sub_smul'. It is the algebraic core ofL = Iωand, being a general cross-product identity with no physics content, lives in the general cross-product file rather than the classical-mechanics one.Builds only on merged master (
RigidBody.inertiaTensorand theρmass-distribution API inBasic.lean, plus the cross-product file from #1324/#1363). All declarations reduce to[propext, Classical.choice, Quot.sound].This is the shared algebraic kernel of the next steps: König's kinetic-energy decomposition
T = ½M|V|² + ½ ω · Iωis the same expansion dotted withω, and Euler's equations consumeL = Iω.Toward #893.