Skip to content

feat(PhyslibAlpha): the mass cocycle of the Galilean group (Souriau) - #1687

Open
KevorkianPhilippe wants to merge 9 commits into
leanprover-community:masterfrom
KevorkianPhilippe:galilee-2
Open

KevorkianPhilippe wants to merge 9 commits into
leanprover-community:masterfrom
KevorkianPhilippe:galilee-2

Conversation

@KevorkianPhilippe

Copy link
Copy Markdown
Contributor

AI disclosure

This file was generated with Claude (Claude Code, Opus 5.5) under my supervision, following
AI-POLICY.md and AGENTS.md. I have read every definition and lemma statement and I vouch that
they 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 in
Mathlib'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 the
closed-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 branch
contains. This PR is the three commits on GalileanMassCocycle.lean: the last one moves it into
MomentMap/, next to GalileanMass.lean, as agreed in #1684; the merge commits bring in #1684
and master (the last one also updates the import of GalileanMass.lean, which #1684 moved).

Adds PhyslibAlpha/ClassicalMechanics/MomentMap/GalileanMassCocycle.lean, the group level of
Souriau's chapter 12, built on Physlib's GalileanGroup 3 rather than on a new group. It defines
the action of the Galilean group on the evolution space of N free material points (12.76), the
adjoint action on GalileanAlgebra (6.24), a real vector space structure on GalileanTorsor and
the 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 multiples M θ₀ are coboundaries only for M = 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₁), as
in #1681.

GalileanGroup takes its rotation part in O(3), Souriau in SO(3). The identities hold on O(3) once
the rotation vector ω (an axial vector) is transformed with a factor det R, and restrict to
Souriau'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's
group (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 on EuclideanSpace ℝ (Fin 3) in
    coordinates.
  • 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):

  • SMul and MulAction (GalileanGroup 3) (EvolutionSpace N): (12.76), (12.77); smul_t,
    smul_r, smul_v.
  • smul_time_position: on each point, the action is GalileanGroup's action on Time × Space 3.
  • tangentSMul, smul_line: the differential of the (affine) action.
  • lagrangeForm_smul: (12.76), invariance of the Lagrange form.

Section C:

  • SMul and MulAction (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; AddCommGroup and Module ℝ instances; pair_add, pair_sub, pair_zero,
    pair_smul, ext_pair.
  • SMul, MulAction and DistribMulAction of GalileanGroup 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 whole
    group.
  • properGalileanGroup: the subgroup det 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) with m = Σ_j m_j, (12.132).
  • EvolutionSpace.not_isCoboundary₁_moment_smul_sub, ..._proper: (12.136) for the system, on
    the whole group and on Souriau's group.

Section F:

  • hasDerivAt_massCocycle: (12.130), along curves through the identity;
    hasDerivAt_massCocycle_line: the same along s ↦ (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

  1. The module docstring, in particular the O(3) paragraph.
  2. The three actions: EvolutionSpace (section B), GalileanAlgebra (section C, with
    vectorField_smul), GalileanTorsor (section D, with coadjoint_pair).
  3. Section E: massCocycle, moment_smul_sub, isCocycle₁_massCocycle, then the coboundary
    statements and properGalileanGroup.
  4. hasDerivAt_massCocycle (section F).
  5. Section A (orthogonal matrices, technical).

Checks run

  • lake build -KCI and lake build -KCI PhyslibAlpha on the branch, with current master merged
    in (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 axioms on every public lemma: [propext, Classical.choice, Quot.sound].

🤖 Generated with Claude Code

Philippe Kevorkian and others added 9 commits September 24, 2026 15:15
… 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>
@github-actions github-actions Bot added the large label Sep 25, 2026
@github-actions

Copy link
Copy Markdown
Contributor

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.

  1. Some automated checks will be run on your PR. You can see the results of these checks at the buttom of your PR page. If any of these checks fail, you will need to fix the issues before your PR can be merged. You can learn more about these here, including how to run them locally, which is sometimes quicker than relying on the GitHub Actions. If you have never had a PR merged before, you may have to wait for a reviewer to manually start these checks (this is for security).

  2. A reviewer will look at your PR and may ask you to make changes. This may happen a couple of days after you submit your PR, so you may need to be patient. But it should not be longer than that - if it is please bring it to the attention of the community on the Zulip. The level of review will depend on where your PR is submitted. If it is submitted to ./Physlib or ./QuantumInfo, the review will be more thorough than if it is submitted to ./PhyslibAlpha. You can find out more about what the review process is looking for in our review guidelines. If a reviewer adds an awaiting-author label to your PR, address the review comments, then please remove that label by adding a comment with -awaiting-author. This helps us keep track of reviews.

  3. The reviewer will either approve your PR, or request more changes (in which case we return to step 2). Once your PR is approved, it will be merged by a maintainer, this should happen shortly after approval, though you may get more comments at this stage.

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.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant