Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(linear_algebra/tensor_product): Generalise tensor product to non-commutative rings #10345

Open
wants to merge 56 commits into
base: master
Choose a base branch
from

Conversation

javra
Copy link
Collaborator

@javra javra commented Nov 16, 2021

Replaces linear_algebra.tensor_product by a whole folder of files, generalising it to non-commutative rings and isolating everything that depends on the left action on the tensor product. A file containing the corresponding right action can be added in future.


Still quite a lot of work to do, I haven't fixed any of the files importing linear_algebra.tensor_product and we will likely need to create or presume instances for is_symmetric_smul in some cases.

Open in Gitpod

@javra javra added the WIP Work in progress label Nov 16, 2021
@github-actions github-actions bot added the merge-conflict Please `git merge origin/master` then a bot will remove this label. label Nov 17, 2021
@github-actions github-actions bot removed the merge-conflict Please `git merge origin/master` then a bot will remove this label. label Nov 24, 2021
Comment on lines 1 to 26
/-
Copyright (c) 2021 Jakob von Raumer. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Jakob von Raumer, Eric Wieser
-/
import algebra.opposites
import group_theory.group_action.defs
import group_theory.group_action.prod
import algebra.direct_sum.basic

/-!
# Symmetric group actions

This file defines a class of group actions which are invariant unter taking the `opposite` of
the operating type/(semi)group/monoid.

The main definition is the one of the typeclass `is_symmetric_smul` which states that for a
pair of types `R` and `M`, the actions of `R` and its opposite `Rᵐᵒᵖ` on `M` coincide.

We then provide the alternate version of its constructor, `unop_smul_eq_smul` about general
instance of `Rᵐᵒᵖ` and several instances for closure properties.

## Tags

group action
-/
Copy link
Member

Choose a reason for hiding this comment

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

Note that #10543 ended up calling this is_central_scalar instead, and distributed some of the defs in this file to other places. Some of the lemmas in this file did not make it into that PR (units.is_symmetric_smul can't be stated without other instances that are new in this PR, for instance), so it's not quite as easy as deleting this file. Hopefully simply replacing is_symmetric_smul with is_central_scalar will do most of the work, and then lean will tell you which definitions are duplicates.

@github-actions github-actions bot removed the merge-conflict Please `git merge origin/master` then a bot will remove this label. label Dec 20, 2021

-- TODO there might be a more general version of this
instance smul_comm_class.of_is_central_scalar {R α} [has_scalar R α] [has_scalar Rᵐᵒᵖ α]
[is_central_scalar R α] [smul_comm_class R R α] : smul_comm_class Rᵐᵒᵖ R α :=
Copy link
Member

Choose a reason for hiding this comment

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

I would guess the generalization is

Suggested change
[is_central_scalar R α] [smul_comm_class R R α] : smul_comm_class Rᵐᵒᵖ R α :=
[is_central_scalar R α] [smul_comm_class R S α] : smul_comm_class Rᵐᵒᵖ S α :=

or similar

Copy link
Member

Choose a reason for hiding this comment

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

I've PR'd these as #10949

Comment on lines +64 to +68
instance mul_action.of_is_central_scalar {R α} [comm_monoid R] [mul_action R α] [has_scalar Rᵐᵒᵖ α]
[is_central_scalar R α] : mul_action Rᵐᵒᵖ α :=
⟨λ a, by rw [←op_one, op_smul_eq_smul (1 : R) a, one_smul],
λ r s a, by rw [mul_comm, ←op_unop (s * r), op_smul_eq_smul, unop_mul, mul_smul,
unop_smul_eq_smul, unop_smul_eq_smul]⟩
Copy link
Member

Choose a reason for hiding this comment

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

This instance looks dangerous to me, as it forms a loop.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Does keeping it as a def and letI :=ing it seem like a good option?

Copy link
Member

Choose a reason for hiding this comment

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

That would cease to be dangerous, but I suspect in review I will tell you to replace each of those letIs with something better. Feel free to add them anyway though if it unblocks you.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Looking forward to seeing how you'd solve it 😃

@github-actions github-actions bot added the merge-conflict Please `git merge origin/master` then a bot will remove this label. label Dec 23, 2021
@semorrison semorrison added the too-late This PR was ready too late for inclusion in mathlib3 label Jul 16, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
merge-conflict Please `git merge origin/master` then a bot will remove this label. too-late This PR was ready too late for inclusion in mathlib3 WIP Work in progress
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants