-- Mathlib/RingTheory/Smooth/StandardSmooth.lean
@[simp]
lemma baseChange_jacobian : (P.baseChange T).jacobian = 1 ⊗ₜ P.jacobian

Proof state:
case intro
R : Type u
S : Type v
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : Algebra R S
T : Type u_1
inst✝¹ : CommRing T
inst✝ : Algebra R T
P : PreSubmersivePresentation R S
val✝ : Fintype P.rels
this : Fintype (baseChange T P).rels := inferInstanceAs (Fintype P.rels)
⊢ (baseChange T P).jacobian = 1 ⊗ₜ[R] P.jacobian

Tactic:
simp_rw [jacobian_eq_jacobiMatrix_det]

Result:
case intro
R : Type u
S : Type v
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : Algebra R S
T : Type u_1
inst✝¹ : CommRing T
inst✝ : Algebra R T
P : PreSubmersivePresentation R S
val✝ : Fintype P.rels
this : Fintype (baseChange T P).rels := inferInstanceAs (Fintype P.rels)
⊢ (algebraMap (baseChange T P).Ring (T ⊗[R] S)) (baseChange T P).jacobiMatrix.det =
    1 ⊗ₜ[R] (algebraMap P.Ring S) P.jacobiMatrix.det

Proof state:
case intro
R : Type u
S : Type v
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : Algebra R S
T : Type u_1
inst✝¹ : CommRing T
inst✝ : Algebra R T
P : PreSubmersivePresentation R S
val✝ : Fintype P.rels
this : Fintype (baseChange T P).rels := inferInstanceAs (Fintype P.rels)
h : (baseChange T P).jacobiMatrix = (MvPolynomial.map (algebraMap R T)).mapMatrix P.jacobiMatrix
⊢ (aeval fun x => 1 ⊗ₜ[R] P.val x) P.jacobiMatrix.det = 1 ⊗ₜ[R] (aeval P.val) P.jacobiMatrix.det

Tactic:
apply aeval_one_tmul

Result:
no goals

Proof state:
case intro
R : Type u
S : Type v
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : Algebra R S
T : Type u_1
inst✝¹ : CommRing T
inst✝ : Algebra R T
P : PreSubmersivePresentation R S
val✝ : Fintype P.rels
this : Fintype (baseChange T P).rels := inferInstanceAs (Fintype P.rels)
h : (baseChange T P).jacobiMatrix = (MvPolynomial.map (algebraMap R T)).mapMatrix P.jacobiMatrix
⊢ (algebraMap (baseChange T P).Ring (T ⊗[R] S)) (baseChange T P).jacobiMatrix.det =
    1 ⊗ₜ[R] (algebraMap P.Ring S) P.jacobiMatrix.det

Tactic:
rw [h]

Result:
case intro
R : Type u
S : Type v
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : Algebra R S
T : Type u_1
inst✝¹ : CommRing T
inst✝ : Algebra R T
P : PreSubmersivePresentation R S
val✝ : Fintype P.rels
this : Fintype (baseChange T P).rels := inferInstanceAs (Fintype P.rels)
h : (baseChange T P).jacobiMatrix = (MvPolynomial.map (algebraMap R T)).mapMatrix P.jacobiMatrix
⊢ (algebraMap (baseChange T P).Ring (T ⊗[R] S)) ((MvPolynomial.map (algebraMap R T)).mapMatrix P.jacobiMatrix).det =
    1 ⊗ₜ[R] (algebraMap P.Ring S) P.jacobiMatrix.det

Proof state:
case intro
R : Type u
S : Type v
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : Algebra R S
T : Type u_1
inst✝¹ : CommRing T
inst✝ : Algebra R T
P : PreSubmersivePresentation R S
val✝ : Fintype P.rels
this : Fintype (baseChange T P).rels := inferInstanceAs (Fintype P.rels)
⊢ (algebraMap (baseChange T P).Ring (T ⊗[R] S)) (baseChange T P).jacobiMatrix.det =
    1 ⊗ₜ[R] (algebraMap P.Ring S) P.jacobiMatrix.det

Tactic:
have h : (baseChange T P).jacobiMatrix =
    (MvPolynomial.map (algebraMap R T)).mapMatrix P.jacobiMatrix := by
  ext i j : 1
  simp only [baseChange, jacobiMatrix_apply, Presentation.baseChange_relation,
    RingHom.mapMatrix_apply, Matrix.map_apply]
  erw [MvPolynomial.pderiv_map]
  rfl

Result:
case intro
R : Type u
S : Type v
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : Algebra R S
T : Type u_1
inst✝¹ : CommRing T
inst✝ : Algebra R T
P : PreSubmersivePresentation R S
val✝ : Fintype P.rels
this : Fintype (baseChange T P).rels := inferInstanceAs (Fintype P.rels)
h : (baseChange T P).jacobiMatrix = (MvPolynomial.map (algebraMap R T)).mapMatrix P.jacobiMatrix
⊢ (algebraMap (baseChange T P).Ring (T ⊗[R] S)) (baseChange T P).jacobiMatrix.det =
    1 ⊗ₜ[R] (algebraMap P.Ring S) P.jacobiMatrix.det

Proof state:
R : Type u
S : Type v
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : Algebra R S
T : Type u_1
inst✝¹ : CommRing T
inst✝ : Algebra R T
P : PreSubmersivePresentation R S
val✝ : Fintype P.rels
this : Fintype (baseChange T P).rels := inferInstanceAs (Fintype P.rels)
⊢ (baseChange T P).jacobiMatrix = (MvPolynomial.map (algebraMap R T)).mapMatrix P.jacobiMatrix

Tactic:
ext i j : 1

Result:
case a
R : Type u
S : Type v
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : Algebra R S
T : Type u_1
inst✝¹ : CommRing T
inst✝ : Algebra R T
P : PreSubmersivePresentation R S
val✝ : Fintype P.rels
this : Fintype (baseChange T P).rels := inferInstanceAs (Fintype P.rels)
i j : (baseChange T P).rels
⊢ (baseChange T P).jacobiMatrix i j = (MvPolynomial.map (algebraMap R T)).mapMatrix P.jacobiMatrix i j

Proof state:
case intro
R : Type u
S : Type v
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : Algebra R S
T : Type u_1
inst✝¹ : CommRing T
inst✝ : Algebra R T
P : PreSubmersivePresentation R S
val✝ : Fintype P.rels
this : Fintype (baseChange T P).rels := inferInstanceAs (Fintype P.rels)
h : (baseChange T P).jacobiMatrix = (MvPolynomial.map (algebraMap R T)).mapMatrix P.jacobiMatrix
⊢ (aeval fun x => 1 ⊗ₜ[R] P.val x) P.jacobiMatrix.det = 1 ⊗ₜ[R] (algebraMap P.Ring S) P.jacobiMatrix.det

Tactic:
rw [P.algebraMap_apply]

Result:
case intro
R : Type u
S : Type v
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : Algebra R S
T : Type u_1
inst✝¹ : CommRing T
inst✝ : Algebra R T
P : PreSubmersivePresentation R S
val✝ : Fintype P.rels
this : Fintype (baseChange T P).rels := inferInstanceAs (Fintype P.rels)
h : (baseChange T P).jacobiMatrix = (MvPolynomial.map (algebraMap R T)).mapMatrix P.jacobiMatrix
⊢ (aeval fun x => 1 ⊗ₜ[R] P.val x) P.jacobiMatrix.det = 1 ⊗ₜ[R] (aeval P.val) P.jacobiMatrix.det

Proof state:
case intro
R : Type u
S : Type v
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : Algebra R S
T : Type u_1
inst✝¹ : CommRing T
inst✝ : Algebra R T
P : PreSubmersivePresentation R S
val✝ : Fintype P.rels
this : Fintype (baseChange T P).rels := inferInstanceAs (Fintype P.rels)
h : (baseChange T P).jacobiMatrix = (MvPolynomial.map (algebraMap R T)).mapMatrix P.jacobiMatrix
⊢ (algebraMap (baseChange T P).Ring (T ⊗[R] S)) ((MvPolynomial.map (algebraMap R T)).mapMatrix P.jacobiMatrix).det =
    1 ⊗ₜ[R] (algebraMap P.Ring S) P.jacobiMatrix.det

Tactic:
erw [← RingHom.map_det, aeval_map_algebraMap]

Result:
case intro
R : Type u
S : Type v
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : Algebra R S
T : Type u_1
inst✝¹ : CommRing T
inst✝ : Algebra R T
P : PreSubmersivePresentation R S
val✝ : Fintype P.rels
this : Fintype (baseChange T P).rels := inferInstanceAs (Fintype P.rels)
h : (baseChange T P).jacobiMatrix = (MvPolynomial.map (algebraMap R T)).mapMatrix P.jacobiMatrix
⊢ (aeval fun x => 1 ⊗ₜ[R] P.val x) P.jacobiMatrix.det = 1 ⊗ₜ[R] (algebraMap P.Ring S) P.jacobiMatrix.det

Proof state:
case a
R : Type u
S : Type v
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : Algebra R S
T : Type u_1
inst✝¹ : CommRing T
inst✝ : Algebra R T
P : PreSubmersivePresentation R S
val✝ : Fintype P.rels
this : Fintype (baseChange T P).rels := inferInstanceAs (Fintype P.rels)
i j : (baseChange T P).rels
⊢ (pderiv (P.map i)) ((MvPolynomial.map (algebraMap R T)) (P.relation j)) =
    (MvPolynomial.map (algebraMap R T)) ((pderiv (P.map i)) (P.relation j))

Tactic:
erw [MvPolynomial.pderiv_map]

Result:
case a
R : Type u
S : Type v
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : Algebra R S
T : Type u_1
inst✝¹ : CommRing T
inst✝ : Algebra R T
P : PreSubmersivePresentation R S
val✝ : Fintype P.rels
this : Fintype (baseChange T P).rels := inferInstanceAs (Fintype P.rels)
i j : (baseChange T P).rels
⊢ (MvPolynomial.map (algebraMap R T)) ((pderiv (P.map i)) (P.relation j)) =
    (MvPolynomial.map (algebraMap R T)) ((pderiv (P.map i)) (P.relation j))