Skip to content

fix(Tensors): rank the tensor action above the Tensorial action - #1611

Merged
jstoobysmith merged 2 commits into
masterfrom
tensor_action_priority
Sep 3, 2026
Merged

fix(Tensors): rank the tensor action above the Tensorial action#1611
jstoobysmith merged 2 commits into
masterfrom
tensor_action_priority

Conversation

@zhikaip

@zhikaip zhikaip commented Sep 2, 2026

Copy link
Copy Markdown
Collaborator

Changes

Tensors/Basic.lean: instSMul, actionT and the DistribMulAction on S.Tensor c get priority := high + 1.

SMulCommClass k G (S.Tensor c) and SMulCommClass G k (S.Tensor c) added (the second via SMulCommClass.symm, as in Mathlib); the G k order also added for Tensorial types.

as a result, multiple set_option backward.isDefEq.respectTransparency false removed and a maxHeartbeats 600000.

Why: an instance diamond on g • t

Two SMul G (S.Tensor c) instances exist:

  1. Tensor.instSMul in Tensors/Basic.lean, the direct action. All *_equivariant lemmas are
    stated with it.
  2. Tensorial.smulAction in Tensorial.lean, defined for any [Tensorial S c M] as
    g • m = toTensor.symm (g • toTensor m). Since S.Tensor c is Tensorial via self
    (toTensor = LinearEquiv.refl), it also applies to bare tensors, and with priority := high
    it won.

So in a goal, g • t carried instance 2; the lemma's left-hand side carries instance 1. They are
defeq (unfold refl) but not syntactically equal, hence rw/simp failed while exact and
the respectTransparency false option (unfolding fallback, paid for in heartbeats) worked.

Fix: rank instance 1 at high + 1. Bare tensors now use the direct action. Instance 2 keeps
high and still governs Tensorial types and M ⊗ M₂, where it must beat Mathlib's left-only
TensorProduct action (Tensorial.smul_prod); lowering it instead breaks that lemma.
The SMulCommClass instances are stated for instance 1 so smul_comm fires on it.

fix found by claude and confirmed/edited by myself

zhikaip and others added 2 commits September 2, 2026 16:44
`Tensorial.smulAction` has `priority := high` so that the diagonal action
on tensor products beats Mathlib's left-only `TensorProduct` action. But
`S.Tensor c` is itself `Tensorial` (via `self`), so a bare `g • t` also
resolved through it, while the `*_equivariant` lemmas are stated with
`Tensor.instSMul`. The two agree only after unfolding `LinearEquiv.refl`,
so `rw`/`simp` could never match those lemmas.

Give `instSMul`, `actionT` and the `DistribMulAction` on `S.Tensor c`
`priority := high + 1`, and register `SMulCommClass` for the tensor action
in both argument orders (as well as the missing symmetric order for
`Tensorial` types). Fifteen `respectTransparency` options become
unnecessary and are removed: twelve in the tensor library and three in
Electromagnetism.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@github-actions github-actions Bot added the small label Sep 2, 2026
@github-actions

github-actions Bot commented Sep 2, 2026

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.

@jstoobysmith jstoobysmith left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me. Approved.

@jstoobysmith jstoobysmith added the ready-to-merge This PR is approved and will be merged shortly label Sep 3, 2026
@jstoobysmith
jstoobysmith merged commit bbb33d2 into master Sep 3, 2026
9 checks passed
@jstoobysmith
jstoobysmith deleted the tensor_action_priority branch September 3, 2026 14:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ready-to-merge This PR is approved and will be merged shortly small

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants