Cancellation of a base change followed by a scalar equivalence remains linear over the intermediate scalar ring. The action on the target tensor product is the literal action through its left factor.
Source context 8 commands
Surrounding namespaces, section variables, and local commands at this declaration.
noncomputable section
open scoped TensorProduct
namespace EtaleFundamentalGroups.Kummer
open Polynomial
open ValuationTheory.DiscreteValuationField
open ValuationTheory.DiscreteValuationField.ValuedExtension
universe uK uV uF uL uW
universe uR uS uE uCdef cancelBaseChangeCongrAlgEquiv
{R : Type uR} {S : Type uS} {F : Type uF}
{E : Type uE} {C : Type uC}
[CommRing R] [CommRing S] [CommRing F] [CommRing E] [CommRing C]
[Algebra R S] [Algebra R C]
[Algebra S F] [Algebra R F] [IsScalarTower R S F]
[Algebra S E] [Algebra R E] [IsScalarTower R S E]
(e : F ≃ₐ[S] E) :
let T := S ⊗[R] C
let : Algebra S T := Algebra.TensorProduct.leftAlgebra
let G := F ⊗[S] T
let H := E ⊗[R] C
let : Algebra S H :=
((Algebra.TensorProduct.includeLeftRingHom
(R := R) (A := E) (B := C)).comp (algebraMap S E)).toAlgebra
G ≃ₐ[S] H := by
intro T algST G H algSH
let M := F ⊗[R] C
let : Algebra S M :=
((Algebra.TensorProduct.includeLeftRingHom
(R := R) (A := F) (B := C)).comp (algebraMap S F)).toAlgebra
let eCancel : G ≃ₐ[F] M :=
Algebra.TensorProduct.cancelBaseChange R S F F C
let eCancelS : G ≃ₐ[S] M :=
{ toRingEquiv := eCancel.toRingEquiv
commutes' := by
intro x
change eCancel (algebraMap F G (algebraMap S F x)) =
algebraMap F M (algebraMap S F x)
exact eCancel.commutes (algebraMap S F x) }
let eTensor : M ≃ₐ[R] H :=
Algebra.TensorProduct.congr
(e.restrictScalars R) (AlgEquiv.refl : C ≃ₐ[R] C)
let eTensorS : M ≃ₐ[S] H :=
{ toRingEquiv := eTensor.toRingEquiv
commutes' := by
intro x
change eTensor
((Algebra.TensorProduct.includeLeft : F →ₐ[R] M)
(algebraMap S F x)) =
(Algebra.TensorProduct.includeLeft : E →ₐ[R] H)
(algebraMap S E x)
change eTensor ((algebraMap S F x) ⊗ₜ[R] (1 : C)) =
(algebraMap S E x) ⊗ₜ[R] (1 : C)
change (Algebra.TensorProduct.congr
(e.restrictScalars R) (AlgEquiv.refl : C ≃ₐ[R] C))
((algebraMap S F x) ⊗ₜ[R] (1 : C)) =
(algebraMap S E x) ⊗ₜ[R] (1 : C)
calc
_ = (e.restrictScalars R) (algebraMap S F x) ⊗ₜ[R]
(AlgEquiv.refl : C ≃ₐ[R] C) 1 :=
Algebra.TensorProduct.map_tmul
(e.restrictScalars R : F →ₐ[R] E)
(AlgHom.id R C) (algebraMap S F x) 1
_ = (algebraMap S E x) ⊗ₜ[R] (1 : C) := by
change e (algebraMap S F x) ⊗ₜ[R] (1 : C) =
(algebraMap S E x) ⊗ₜ[R] (1 : C)
rw [e.commutes] }
exact
{ toRingEquiv := eCancel.toRingEquiv.trans eTensor.toRingEquiv
commutes' := fun x ↦
(congrArg eTensor (eCancelS.commutes x)).trans (eTensorS.commutes x) }