Module: Mathlib.RingTheory.Polynomial.UniversalFactorizationRing

Goal state before:
pp: case fst
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing T
inst✝¹ : Algebra R S
inst✝ : Algebra R T
n m k : ℕ
hn : n = m + k
p : MonicDegreeEq R n
q : { q // ↑q.1 * ↑q.2 = map (algebraMap R S) ↑p }
this✝ : Algebra (MvPolynomial (Fin n) R) (MvPolynomial (Fin m) R ⊗[R] MvPolynomial (Fin k) R) :=
  (MvPolynomial.universalFactorizationMap R n m k hn).toAlgebra
this : Algebra (MvPolynomial (Fin n) R) R := ((MvPolynomial.mapEquivMonic R R n).symm p).toAlgebra
n✝ : ℕ
⊢ (↑(↑⟨(((MonicDegreeEq.freeMonic R m).map
                        ↑((AlgHom.restrictScalars R Algebra.TensorProduct.includeRight).comp
                            Algebra.TensorProduct.includeLeft)).map
                    ↑(Algebra.TensorProduct.lift (Algebra.ofId R S)
                        {
                          toRingHom :=
                            ↑(Algebra.TensorProduct.lift (MvPolynomial.aeval fun x ↦ (↑(↑q).1).coeff ↑x)
                                (MvPolynomial.aeval fun x ↦ (↑(↑q).2).coeff ↑x) ⋯),
                          commutes' := ⋯ }
                        ⋯),
                  ((MonicDegreeEq.freeMonic R k).map
                        ↑((AlgHom.restrictScalars R Algebra.TensorProduct.includeRight).comp
                            Algebra.TensorProduct.includeRight)).map
                    ↑(Algebra.TensorProduct.lift (Algebra.ofId R S)
                        {
                          toRingHom :=
                            ↑(Algebra.TensorProduct.lift (MvPolynomial.aeval fun x ↦ (↑(↑q).1).coeff ↑x)
                                (MvPolynomial.aeval fun x ↦ (↑(↑q).2).coeff ↑x) ⋯),
                          commutes' := ⋯ }
                        ⋯)),
                ⋯⟩).1).coeff
      n✝ =
    (↑(↑q).1).coeff n✝

pp: case snd
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing T
inst✝¹ : Algebra R S
inst✝ : Algebra R T
n m k : ℕ
hn : n = m + k
p : MonicDegreeEq R n
q : { q // ↑q.1 * ↑q.2 = map (algebraMap R S) ↑p }
this✝ : Algebra (MvPolynomial (Fin n) R) (MvPolynomial (Fin m) R ⊗[R] MvPolynomial (Fin k) R) :=
  (MvPolynomial.universalFactorizationMap R n m k hn).toAlgebra
this : Algebra (MvPolynomial (Fin n) R) R := ((MvPolynomial.mapEquivMonic R R n).symm p).toAlgebra
n✝ : ℕ
⊢ (↑(↑⟨(((MonicDegreeEq.freeMonic R m).map
                        ↑((AlgHom.restrictScalars R Algebra.TensorProduct.includeRight).comp
                            Algebra.TensorProduct.includeLeft)).map
                    ↑(Algebra.TensorProduct.lift (Algebra.ofId R S)
                        {
                          toRingHom :=
                            ↑(Algebra.TensorProduct.lift (MvPolynomial.aeval fun x ↦ (↑(↑q).1).coeff ↑x)
                                (MvPolynomial.aeval fun x ↦ (↑(↑q).2).coeff ↑x) ⋯),
                          commutes' := ⋯ }
                        ⋯),
                  ((MonicDegreeEq.freeMonic R k).map
                        ↑((AlgHom.restrictScalars R Algebra.TensorProduct.includeRight).comp
                            Algebra.TensorProduct.includeRight)).map
                    ↑(Algebra.TensorProduct.lift (Algebra.ofId R S)
                        {
                          toRingHom :=
                            ↑(Algebra.TensorProduct.lift (MvPolynomial.aeval fun x ↦ (↑(↑q).1).coeff ↑x)
                                (MvPolynomial.aeval fun x ↦ (↑(↑q).2).coeff ↑x) ⋯),
                          commutes' := ⋯ }
                        ⋯)),
                ⋯⟩).2).coeff
      n✝ =
    (↑(↑q).2).coeff n✝

Tactic:
<;>

Goal state after:
case fst
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing T
inst✝¹ : Algebra R S
inst✝ : Algebra R T
n m k : ℕ
hn : n = m + k
p : MonicDegreeEq R n
q : { q // ↑q.1 * ↑q.2 = map (algebraMap R S) ↑p }
this✝ : Algebra (MvPolynomial (Fin n) R) (MvPolynomial (Fin m) R ⊗[R] MvPolynomial (Fin k) R) :=
  (MvPolynomial.universalFactorizationMap R n m k hn).toAlgebra
this : Algebra (MvPolynomial (Fin n) R) R := ((MvPolynomial.mapEquivMonic R R n).symm p).toAlgebra
n✝ : ℕ
⊢ (↑(↑⟨(((MonicDegreeEq.freeMonic R m).map
                        ↑((AlgHom.restrictScalars R Algebra.TensorProduct.includeRight).comp
                            Algebra.TensorProduct.includeLeft)).map
                    ↑(Algebra.TensorProduct.lift (Algebra.ofId R S)
                        {
                          toRingHom :=
                            ↑(Algebra.TensorProduct.lift (MvPolynomial.aeval fun x ↦ (↑(↑q).1).coeff ↑x)
                                (MvPolynomial.aeval fun x ↦ (↑(↑q).2).coeff ↑x) ⋯),
                          commutes' := ⋯ }
                        ⋯),
                  ((MonicDegreeEq.freeMonic R k).map
                        ↑((AlgHom.restrictScalars R Algebra.TensorProduct.includeRight).comp
                            Algebra.TensorProduct.includeRight)).map
                    ↑(Algebra.TensorProduct.lift (Algebra.ofId R S)
                        {
                          toRingHom :=
                            ↑(Algebra.TensorProduct.lift (MvPolynomial.aeval fun x ↦ (↑(↑q).1).coeff ↑x)
                                (MvPolynomial.aeval fun x ↦ (↑(↑q).2).coeff ↑x) ⋯),
                          commutes' := ⋯ }
                        ⋯)),
                ⋯⟩).1).coeff
      n✝ =
    (↑(↑q).1).coeff n✝

case snd
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing T
inst✝¹ : Algebra R S
inst✝ : Algebra R T
n m k : ℕ
hn : n = m + k
p : MonicDegreeEq R n
q : { q // ↑q.1 * ↑q.2 = map (algebraMap R S) ↑p }
this✝ : Algebra (MvPolynomial (Fin n) R) (MvPolynomial (Fin m) R ⊗[R] MvPolynomial (Fin k) R) :=
  (MvPolynomial.universalFactorizationMap R n m k hn).toAlgebra
this : Algebra (MvPolynomial (Fin n) R) R := ((MvPolynomial.mapEquivMonic R R n).symm p).toAlgebra
n✝ : ℕ
⊢ (↑(↑⟨(((MonicDegreeEq.freeMonic R m).map
                        ↑((AlgHom.restrictScalars R Algebra.TensorProduct.includeRight).comp
                            Algebra.TensorProduct.includeLeft)).map
                    ↑(Algebra.TensorProduct.lift (Algebra.ofId R S)
                        {
                          toRingHom :=
                            ↑(Algebra.TensorProduct.lift (MvPolynomial.aeval fun x ↦ (↑(↑q).1).coeff ↑x)
                                (MvPolynomial.aeval fun x ↦ (↑(↑q).2).coeff ↑x) ⋯),
                          commutes' := ⋯ }
                        ⋯),
                  ((MonicDegreeEq.freeMonic R k).map
                        ↑((AlgHom.restrictScalars R Algebra.TensorProduct.includeRight).comp
                            Algebra.TensorProduct.includeRight)).map
                    ↑(Algebra.TensorProduct.lift (Algebra.ofId R S)
                        {
                          toRingHom :=
                            ↑(Algebra.TensorProduct.lift (MvPolynomial.aeval fun x ↦ (↑(↑q).1).coeff ↑x)
                                (MvPolynomial.aeval fun x ↦ (↑(↑q).2).coeff ↑x) ⋯),
                          commutes' := ⋯ }
                        ⋯)),
                ⋯⟩).2).coeff
      n✝ =
    (↑(↑q).2).coeff n✝