feat(ClassicalMechanics): add rotational kinetic energy and prove T = ½ω·Iω#1377
Conversation
|
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 |
| simp only [dotProduct, angularMomentum] | ||
| rw [Finset.sum_congr rfl (fun i (_ : i ∈ Finset.univ) => | ||
| (smul_eq_mul (ω i) _).symm.trans (map_smul R.ρ (ω i) _).symm), ← map_sum] |
There was a problem hiding this comment.
| simp only [dotProduct, angularMomentum] | |
| rw [Finset.sum_congr rfl (fun i (_ : i ∈ Finset.univ) => | |
| (smul_eq_mul (ω i) _).symm.trans (map_smul R.ρ (ω i) _).symm), ← map_sum] | |
| simp_rw [dotProduct, angularMomentum, ← smul_eq_mul, ← map_smul, ← map_sum] |
| A rigid body rotating with angular velocity `ω` about its reference point carries the point at | ||
| position `r` with velocity `ω × r`, so its kinetic energy is `T = ½ ∫ |ω × r|² dm`. Since |
There was a problem hiding this comment.
| A rigid body rotating with angular velocity `ω` about its reference point carries the point at | |
| position `r` with velocity `ω × r`, so its kinetic energy is `T = ½ ∫ |ω × r|² dm`. Since | |
| For a rigid body rotating with angular velocity `ω` about its reference point the point at | |
| position `r` has velocity `ω × r`, so its kinetic energy is `T = ½ ∫ |ω × r|² dm`. Since |
| ContDiff.contMDiff <| by | ||
| simp only [dotProduct, Fin.sum_univ_three, cross_apply, Matrix.cons_val_zero, | ||
| Matrix.cons_val_one, Matrix.head_cons, Matrix.cons_val_two, Matrix.tail_cons] | ||
| fun_prop⟩ := by |
There was a problem hiding this comment.
I would recommend extracting out this ContDiff statement about the cross/dot product into a separate lemma.
… ½ω·Iω The rotational kinetic energy of a rigid body spinning with angular velocity ω about its reference point is T = ½ ∫ |ω × r|² dm. Since |ω × r|² = ω·(r×(ω×r)) and the angular momentum is L = ∫ r×(ω×r) dm = I ω, this is the quadratic form T = ½ ω·L = ½ ω·(I ω). This is the rotational half of König's theorem (§32). - RigidBody.rotationalKineticEnergy ω := ½ (ω ⬝ᵥ inertiaTensor *ᵥ ω) - rotationalKineticEnergy_eq_angularMomentum: T = ½ ω·L - rotationalKineticEnergy_eq_integral: T = ½ ∫ |ω × r|² dm (physical form) - Matrix.dotProduct_cross_cross_self (CrossProductMatrix.lean): the scalar triple-product identity w·(v×(w×v)) = |w×v|² Toward leanprover-community#893. Co-authored-by: Claude Opus 4.8 <no-reply+claude-opus-4-8@anthropic.com>
…ess lemma Per @gloges review of the rotational kinetic energy: - reword the module docstring - extract the integrand smoothness into `contDiff_rotationalSpeedSq` - golf the ω pull-through to a single `simp_rw` in rotationalKineticEnergy_eq_integral Co-authored-by: Claude Opus 4.8 <no-reply+claude-opus-4-8@anthropic.com>
ed5a7fa to
3adcc35
Compare
|
Thanks! Applied all three — reworded the docstring, extracted the integrand smoothness into contDiff_rotationalSpeedSq, and golfed the ω pull-through to your simp_rw one-liner. On Fin 3 → ℝ vs EuclideanSpace ℝ (Fin 3): the whole rigid-body cross-product API is on Fin 3 → ℝ — mathlib's ⨯₃, RigidBody.inertiaTensor : Matrix (Fin 3) (Fin 3) ℝ acting via *ᵥ, and angularMomentum ω : Fin 3 → ℝ are all there. Switching to EuclideanSpace ℝ (Fin 3) (= PiLp 2) would add WithLp/coercion friction at every ⨯₃ / *ᵥ / ⬝ᵥ site. The sup-norm caveat only affects how |·|² is written, and the explicit self-⬝ᵥ sidesteps it without changing the API — so Fin 3 → ℝ keeps consistency with the existing inertia-tensor / angular-momentum layer. |
|
|
||
| /-- The local rotational speed squared `|ω × r|² = (ω × r) · (ω × r)` is a smooth function of the | ||
| position `r`. -/ | ||
| lemma contDiff_rotationalSpeedSq (ω : Fin 3 → ℝ) : |
There was a problem hiding this comment.
Would now move to the CrossProduct file
|
awaiting-author |
…ssProduct Per review: generalize contDiff_rotationalSpeedSq from Space 3 to Fin 3 → ℝ (as Matrix.contDiff_cross_dotProduct_cross) and move it to the CrossProduct file; the kinetic-energy integrand's smoothness is now obtained by composing with the coordinate coercion of Space 3. Co-authored-by: Claude Opus 4.8 <no-reply+claude-opus-4-8@anthropic.com>
|
Done — generalized it to Fin 3 → ℝ as Matrix.contDiff_cross_dotProduct_cross and moved it to the CrossProduct file (adding the ContDiff import there); the kinetic-energy integrand now composes it with the coordinate coercion of Space 3. |
|
-awaiting-author |
This PR adds the rotational kinetic energy of a rigid body and proves
T = ½ ω · I ω = ½ ∫ |ω × r|² dm. It is the rotational half of König's theorem (Landau–Lifshitz §32) and the natural sequel to the mergedL = I ω(#1366).A rigid body spinning with angular velocity
ωabout its reference point carries the point atrwith velocityω × r, so its kinetic energy isT = ½ ∫ |ω × r|² dm. Since|ω × r|² = ω · (r × (ω × r))and the angular momentum isL = ∫ r × (ω × r) dm = I ω, this is the quadratic formT = ½ ω · L = ½ ω · (I ω).Physlib/ClassicalMechanics/RigidBody/KineticEnergy.lean(new)RigidBody.rotationalKineticEnergy ω—½ (ω ⬝ᵥ inertiaTensor *ᵥ ω), the rotational kinetic energy about the reference point;rotationalKineticEnergy_eq_angularMomentum—T = ½ ω · L(contraction ofωwith the angular momentum);rotationalKineticEnergy_eq_integral—T = ½ ∫ |ω × r|² dm, the physical form justifying the quadratic form as the rotational kinetic energy.Physlib/Mathematics/CrossProduct.leanMatrix.dotProduct_cross_cross_self— the scalar triple-product identityw · (v × (w × v)) = (w × v) · (w × v)(overℝ,|w × v|²) forv w : Fin 3 → Rover anyCommRing R, the algebraic core relating theω·Lcontraction to the local speed|ω × r|². Sits alongside the existingcross_cross_self_applyin the general cross-product file.Notes:
|ω × r|²is written as the self-dot-product(ω ⨯₃ x) ⬝ᵥ (ω ⨯₃ x): onFin 3 → ℝthe mathlib norm‖·‖is the sup norm, so‖ω ⨯₃ x‖²would be the wrong quantity.rotationalKineticEnergyis the kinetic energy of rotation about that fixed reference point — nocentre of mass = originassumption is made. König's full decompositionT = ½M|V|² + ½ω·Iω(which specialises the reference point to the centre of mass) is the next step.[propext, Classical.choice, Quot.sound].Toward #893.