feat(PhyslibAlpha): the mass cocycle of the Galilean group (Souriau) - #1687
KevorkianPhilippe wants to merge 9 commits into
Conversation
… of the Galilean Lie algebra
Souriau's chapter 12 (SDS, Dunod 1970, pp. 132-153) at the level of the Lie algebra, for N free
material points in Fin 3 -> R. Adds GalileanAlgebra (omega, beta, gamma, epsilon) with Souriau's
bracket, GalileanTorsor {l, g, p, E} with the pairing (12.122), the 2-form f0 (12.130), and
EvolutionSpace N with the vector fields (12.119), the Lagrange form (12.40) without forces and
the moment (12.135).
Results: the Jacobi identity; (12.129); M f0 is a coboundary of the algebra iff M = 0; (12.124)
as a derivative along lines; (12.121) along the free motions; (12.134) with m = sum of the m_j;
(12.136) at the level of the algebra; (12.141) g = m R - p t and the uniform motion of the centre
of gravity of free points.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…an group The group level of GalileanMass.lean (Souriau, SDS, Dunod 1970, chapter 12), built on Physlib's GalileanGroup 3. Adds the action of the Galilean group on the evolution space of N free material points (12.76) with its differential, the adjoint action on GalileanAlgebra (6.24) in components, a real vector space structure on GalileanTorsor and the coadjoint action (11.15), and Souriau's cocycle theta0 (12.127) as massCocycle. Results: the action is Physlib's action on Time x Space on each point; invariance of the Lagrange form (12.76); (6.25) and the injectivity of Z -> Z_V; (12.126)-(12.127) moment equivariance up to the total mass times theta0; theta0 is a groupCohomology.IsCocycle1 (12.128) and M theta0 is a coboundary iff M = 0 (p. 151, (12.136) at the group level); (12.130) the derivative of theta0 at the identity along curves is the algebra cocycle f0. GalileanGroup has rotations in O(3): the axial vector omega carries a factor det R, equal to 1 on SO(3). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… on Souriau's group SO(3) An independent read-back of GalileanMassCocycle.lean against the printed pages found that the non-coboundary statements were only stated on Physlib's GalileanGroup 3, whose rotations range over O(3). A non-coboundary statement on the larger group does not imply the one on Souriau's group (12.73), where the rotation is in SO(3). Adds properGalileanGroup (det R = 1), isCocycle₁_massCocycle_proper, isCoboundary₁_smul_massCocycle_proper_iff, not_isCoboundary₁_massCocycle_proper and EvolutionSpace.not_isCoboundary₁_moment_smul_sub_proper, with the shared witness eq_zero_of_smul_massCocycle_boost; adds coadjoint_smul_real (the coadjoint action is linear). Docstrings: the O(3) paragraph, the adjoint action as (6.28), the printed formula (12.119), the differentiability of (11.19), (12.132) for N points, references. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…a read-back against the book An independent read-back of GalileanMass.lean against the printed pages found no error in the statements and corrects the docstrings: the bracket of vector fields in (6.12 b) is (2.45), the usual Lie bracket of vector fields; only on the matrices (12.74) is Souriau's bracket the opposite of the usual commutator. Physlib's GalileanGroup has rotations in O(3) while Souriau's group (12.73) has them in SO(3). F_j = 0 alone does not give B_j = 0, which is the choice (12.49). Also: p. 151 works at the level of the group, the algebra coboundary is (11.24) with (11.16), (6.13 b), the presymplectic evolution space is (12.114), two more items in what is not formalised, and fuller references. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…into MomentMap/ As agreed in the review of this PR: MomentMap.lean becomes MomentMap/Basic.lean, MomentMapCohomology.lean becomes MomentMap/Cohomology.lean, and GalileanMass.lean moves to MomentMap/GalileanMass.lean. Only the imports and two docstring references to the module name change. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
galilee-1 now has current master merged in and moves GalileanMass.lean to MomentMap/; the import of GalileanMassCocycle.lean follows it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ean into MomentMap/ Next to GalileanMass.lean, as agreed in the review of leanprover-community#1684. Only the import line in PhyslibAlpha.lean and two docstring references to module names change. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Thank you for this pull-request (PR). If this is your first PR, welcome to the community! Below is what will happen next. Please read carefully if you are not familiar with the process. You may open other PRs while this one is being reviewed, and can stack PRs on top of each other, so don't let these steps slow you down.
Tip: The easiest way to get have a fast review is to submit a PR that is small and self-contained, and has clear documentation explaining why things are the way they are in your chages. If you have any problems or questions, please reach out to the community on the Zulip. |
AI disclosure
This file was generated with Claude (Claude Code, Opus 5.5) under my supervision, following
AI-POLICY.mdandAGENTS.md. I have read every definition and lemma statement and I vouch thatthey state what the docstrings say. The main statements (sections B, C, E, F) adapt a separate
development where they were frozen before any proof was written and proved by local models
(BFS-Prover-V2, Qwen3.8-27B) and by Claude, on a Galilean group of its own with rotations in
SO(3). This file restates them on Physlib's
GalileanGroup 3, which has rotations in O(3), and inMathlib's cohomology vocabulary, and adds declarations with no counterpart there (the O(3) lemmas
of section A,
smul_time_position,vectorField_injective, the vector space structure and theclosed-form coadjoint action on torsors). Claude wrote or adapted all the proofs of this file; the
extension to O(3) was checked numerically before it was proved, and a second, independent Claude
session then checked every statement and docstring against the printed pages; its main finding
(the non-coboundary statements must also be stated on SO(3)) is in the second commit of this
PR. The
bibliographic references (Souriau 1970, pp. 52-53, 108, 109, 111, 112, 113, 139-140, 151-153, and
the equation numbers cited in the docstrings) were checked by me on the printed pages, not by the
AI.
Summary
Depends on #1684 (
MomentMap/GalileanMass.lean, the Lie algebra level), whose commits this branchcontains. This PR is the three commits on
GalileanMassCocycle.lean: the last one moves it intoMomentMap/, next toGalileanMass.lean, as agreed in #1684; the merge commits bring in #1684and master (the last one also updates the import of
GalileanMass.lean, which #1684 moved).Adds
PhyslibAlpha/ClassicalMechanics/MomentMap/GalileanMassCocycle.lean, the group level ofSouriau's chapter 12, built on Physlib's
GalileanGroup 3rather than on a new group. It definesthe action of the Galilean group on the evolution space of
Nfree material points (12.76), theadjoint action on
GalileanAlgebra(6.24), a real vector space structure onGalileanTorsorandthe coadjoint action (11.15), and Souriau's cocycle
θ₀(a) = {c × b, c - b e, b, ½ ‖b‖²}(12.127).It proves that the moment of the free points satisfies
μ(a • y) - a • μ(y) = (Σ m_j) θ₀(a)(12.126), that
θ₀is a 1-cocycle whose multiplesM θ₀are coboundaries only forM = 0(12.128), (12.136), and that its derivative at the identity is the algebra cocycle
f₀of #1684(12.130). The cohomology vocabulary is Mathlib's (
groupCohomology.IsCocycle₁,IsCoboundary₁), asin #1681.
GalileanGrouptakes its rotation part in O(3), Souriau in SO(3). The identities hold on O(3) oncethe rotation vector
ω(an axial vector) is transformed with a factordet R, and restrict toSouriau's group. A non-coboundary statement does not restrict to a subgroup, so the statements of
p. 151 and (12.136) are also proved on
properGalileanGroup(det R = 1), which is Souriau'sgroup (12.73). The module docstring lists what is not formalised.
Declarations added (namespace
ClassicalMechanics)Section A (orthogonal matrices,
Fin 3 → ℝ):ofLp_orthogonal_smul,ofLp_real_smul: the actions onEuclideanSpace ℝ (Fin 3)incoordinates.
orthogonal_transpose_mul_self,orthogonal_mul_transpose_self,orthogonal_inv_val,orthogonal_det_mul_self,orthogonal_det_inv,orthogonal_adjugate.orthogonal_mulVec_dotProduct,dotProduct_transpose_mulVec.orthogonal_mulVec_cross:R (u × v) = det R • (R u × R v);orthogonal_transpose_mulVec_cross;cross_dotProduct_det_smul_transpose_mulVec.Section B (sub-namespace
EvolutionSpace):SMulandMulAction (GalileanGroup 3) (EvolutionSpace N): (12.76), (12.77);smul_t,smul_r,smul_v.smul_time_position: on each point, the action isGalileanGroup's action onTime × Space 3.tangentSMul,smul_line: the differential of the (affine) action.lagrangeForm_smul: (12.76), invariance of the Lagrange form.Section C:
SMulandMulAction (GalileanGroup 3) GalileanAlgebra: the adjoint action (6.24);GalileanAlgebra.smul_ω,smul_β,smul_γ,smul_ε,GalileanAlgebra.inv_smul_eq.EvolutionSpace.vectorField_smul: (6.25);EvolutionSpace.vectorField_injective.Section D (sub-namespace
GalileanTorsor):equivProd;AddCommGroupandModule ℝinstances;pair_add,pair_sub,pair_zero,pair_smul,ext_pair.SMul,MulActionandDistribMulActionofGalileanGroup 3: the coadjoint action;coadjoint_pair: (11.15);coadjoint_smul_real: it is linear.Section E:
massCocycle:θ₀(12.127);massCocycle_one.isCocycle₁_massCocycle: (12.128).eq_zero_of_smul_massCocycle_boost: the witness of p. 151, a pure boost.isCoboundary₁_smul_massCocycle_iff,not_isCoboundary₁_massCocycle: p. 151 on the wholegroup.
properGalileanGroup: the subgroupdet R = 1, Souriau's group (12.73);isCocycle₁_massCocycle_proper,isCoboundary₁_smul_massCocycle_proper_iff,not_isCoboundary₁_massCocycle_proper: (12.128) and p. 151 on it.EvolutionSpace.moment_smul_sub: (12.126)-(12.127) withm = Σ_j m_j, (12.132).EvolutionSpace.not_isCoboundary₁_moment_smul_sub,..._proper: (12.136) for the system, onthe whole group and on Souriau's group.
Section F:
hasDerivAt_massCocycle: (12.130), along curves through the identity;hasDerivAt_massCocycle_line: the same alongs ↦ (1, s b', s c', s e').Also: one line in
PhyslibAlpha.lean. Two private helper lemmas (hasDerivAt_dotProduct,hasDerivAt_cross) and one (mulVec_cross_mulVec) serve sections F and A.Reviewer map
EvolutionSpace(section B),GalileanAlgebra(section C, withvectorField_smul),GalileanTorsor(section D, withcoadjoint_pair).massCocycle,moment_smul_sub,isCocycle₁_massCocycle, then the coboundarystatements and
properGalileanGroup.hasDerivAt_massCocycle(section F).Checks run
lake build -KCIandlake build -KCI PhyslibAlphaon the branch, with current master mergedin (toolchain v4.34.1): success, no warning in this file.
lake exe runPhyslibAlphaLinters,alphaFileImports.py,noAlphaImports.py,./scripts/PhyslibAlpha/alphaPythonLinters.sh,./scripts/lint-style.sh,scripts/api_map_linter.py, codespell: pass.#print axiomson every public lemma:[propext, Classical.choice, Quot.sound].🤖 Generated with Claude Code