Zulip Chat Archive

Stream: Is there code for X?

Topic: Cancel in composition of base change


Christian Merten (Jan 26 2024 at 23:06):

Is there a lemma on cancelling the intermediate base change in a composition of base changes, i.e. something like this:

import Mathlib

open TensorProduct

variable (R S M N : Type*) [CommRing R] [CommRing S] [Algebra R S]
  [AddCommGroup M] [Module R M]
  [AddCommGroup N] [Module S N] [Module R N] [IsScalarTower R S N] :

instance : Module S (M [R] N) := sorry

def baseChangeCancel : (M [R] S) [S] N ≃ₗ[S] M [R] N := sorry

If M is a S-algebra, this can be deduced from docs#IsBaseChange.comp . Note that also the Module instance is not inferred, here I want to act on M ⊗[R] N by acting on N.

Adam Topaz (Jan 26 2024 at 23:49):

I'm quite sure we have this.

Adam Topaz (Jan 26 2024 at 23:51):

hmmm... maybe not.

Eric Wieser (Jan 27 2024 at 08:05):

In mathlib, the module with the larger base has to be on the left of the tensor product

Eric Wieser (Jan 27 2024 at 08:06):

So Module S (N ⊗[R] M) should be found automatically there

Eric Wieser (Jan 27 2024 at 08:09):

And the def you want would then be

def baseChangeCancel :
  N [S] (S [R] M) ≃ₗ[S] N [R] M := sorry

Eric Wieser (Jan 27 2024 at 08:10):

I think this follows from docs#TensorProduct.AlgebraTensorModule.assoc ?

Christian Merten (Jan 27 2024 at 08:53):

Eric Wieser said:

I think this follows from docs#TensorProduct.AlgebraTensorModule.assoc ?

Probably you meant docs#TensorProduct.assoc (The algebra version only applies if N is a S-Algebra), but still I am not sure how I proceed with this, since docs#TensorProduct.assoc works with three modules over the same ring.

Christian Merten (Jan 27 2024 at 08:55):

Nvmd, I think you meant docs#TensorProduct.AlgebraTensorModule.assoc and this looks more promising. I clicked on your link earlier and it gave me a 404, but I think you edited your message. Thanks!

Christian Merten (Jan 27 2024 at 09:30):

Took me some time, but your suggestion worked:

import Mathlib

open TensorProduct

variable (R S M N : Type*) [CommRing R] [CommRing S] [Algebra R S]
  [AddCommGroup M] [Module R M]
  [AddCommGroup N] [Module S N] [Module R N] [IsScalarTower R S N]

noncomputable def baseChangeCancel : N [R] M ≃ₗ[S] N [S] (S [R] M) := by
  letI g : (N [S] S) [R] M ≃ₗ[S] N [R] M :=
    AlgebraTensorModule.congr (TensorProduct.rid S N) (LinearEquiv.neg R)
  exact g.symm ≪≫ₗ (AlgebraTensorModule.assoc R S S N S M)

Christian Merten (Jan 27 2024 at 09:49):

Unfortunately in the doc string of docs#TensorProduct.AlgebraTensorModule.assoc some variable names were mixed up, I fixed it in #10051.


Last updated: May 02 2025 at 03:31 UTC