awhecmu/canonical-drafter-extract-mathlib huggingface dataset:
-- Lean 4 proof step from Mathlib.RingTheory.PolynomialLaw.Basic (hypothesis)
Goal:
R : Type u
inst : CommSemiring R
M : Type u_1
inst_1 : AddCommMonoid M
inst_2 : Module R M
N : Type u_2
inst_3 : AddCommMonoid N
inst_4 : Module R N
S : Type v
inst_5 : CommSemiring S
inst_6 : Algebra R S
f : M →ₚₗ[R] N
s : Finset S
p : MvPolynomial (Fin s.card) R ⊗[R] M
s' : Finset S
p' : MvPolynomial (Fin s'.card) R ⊗[R] M
h :
  Eq (α := S ⊗[R] M) (π R M S (Sigma.mk (β := fun (s : Finset S) ↦ MvPolynomial (Fin s.card) R ⊗[R] M) s p))
    (π R M S (Sigma.mk (β := fun (s : Finset S) ↦ MvPolynomial (Fin s.card) R ⊗[R] M) s' p'))
u : TensorProduct.{u, v, u_1} R (↥(AlgHom.range (φ R s))) M :=
  (rTensor M (toLinearMap (AlgHom.rangeRestrict (φ R s))) :
      (a : MvPolynomial (Fin s.card) R ⊗[R] M) → ↥(φ R s).range ⊗[R] M)
    p
hu :
  u =
    (rTensor M (toLinearMap (AlgHom.rangeRestrict (φ R s))) :
        (a : MvPolynomial (Fin s.card) R ⊗[R] M) → ↥(φ R s).range ⊗[R] M)
      p
uFG : Subalgebra.FG (AlgHom.range (φ R s))
u' : TensorProduct.{u, v, u_1} R (↥(AlgHom.range (φ R s'))) M :=
  (rTensor M (toLinearMap (AlgHom.rangeRestrict (φ R s'))) :
      (a : MvPolynomial (Fin s'.card) R ⊗[R] M) → ↥(φ R s').range ⊗[R] M)
    p'
hu' :
  u' =
    (rTensor M (toLinearMap (AlgHom.rangeRestrict (φ R s'))) :
        (a : MvPolynomial (Fin s'.card) R ⊗[R] M) → ↥(φ R s').range ⊗[R] M)
      p'
u'FG : Subalgebra.FG (AlgHom.range (φ R s'))
⊢ Eq (α := S ⊗[R] N)
    ((rTensor N (toLinearMap (φ R s)) : (a : MvPolynomial (Fin s.card) R ⊗[R] N) → S ⊗[R] N)
        (f.toFun' (MvPolynomial (Fin s.card) R) p) :
      S ⊗[R] N)
    ((rTensor N (toLinearMap (φ R s')) : (a : MvPolynomial (Fin s'.card) R ⊗[R] N) → S ⊗[R] N)
        (f.toFun' (MvPolynomial (Fin s'.card) R) p') :
      S ⊗[R] N)
have huu' : Eq (α := S ⊗[R] M)
  ((rTensor M (toLinearMap (Subalgebra.val (AlgHom.range (φ R s)))) : (a : ↥(φ R s).range ⊗[R] M) → S ⊗[R] M) u :
    S ⊗[R] M)
  ((rTensor M (toLinearMap (Subalgebra.val (AlgHom.range (φ R s')))) : (a : ↥(φ R s').range ⊗[R] M) → S ⊗[R] M) u' :
    S ⊗[R] M)
Tactic: have huu' : rTensor M (Subalgebra.val _).toLinearMap u =
    rTensor M (Subalgebra.val _).toLinearMap u' := by
    simp only [π] at h
    simp only [hu, hu', ← LinearMap.comp_apply, ← rTensor_comp, ← comp_toLinearMap,
      val_comp_rangeRestrict, h]
-- Lean 4 proof step from Mathlib.RingTheory.PolynomialLaw.Basic (goal)
Goal:
R : Type u
inst : CommSemiring R
M : Type u_1
inst_1 : AddCommMonoid M
inst_2 : Module R M
N : Type u_2
inst_3 : AddCommMonoid N
inst_4 : Module R N
S : Type v
inst_5 : CommSemiring S
inst_6 : Algebra R S
f : M →ₚₗ[R] N
s : Finset S
p : MvPolynomial (Fin s.card) R ⊗[R] M
s' : Finset S
p' : MvPolynomial (Fin s'.card) R ⊗[R] M
h :
  Eq (α := S ⊗[R] M) (π R M S (Sigma.mk (β := fun (s : Finset S) ↦ MvPolynomial (Fin s.card) R ⊗[R] M) s p))
    (π R M S (Sigma.mk (β := fun (s : Finset S) ↦ MvPolynomial (Fin s.card) R ⊗[R] M) s' p'))
u : TensorProduct.{u, v, u_1} R (↥(AlgHom.range (φ R s))) M :=
  (rTensor M (toLinearMap (AlgHom.rangeRestrict (φ R s))) :
      (a : MvPolynomial (Fin s.card) R ⊗[R] M) → ↥(φ R s).range ⊗[R] M)
    p
hu :
  u =
    (rTensor M (toLinearMap (AlgHom.rangeRestrict (φ R s))) :
        (a : MvPolynomial (Fin s.card) R ⊗[R] M) → ↥(φ R s).range ⊗[R] M)
      p
uFG : Subalgebra.FG (AlgHom.range (φ R s))
u' : TensorProduct.{u, v, u_1} R (↥(AlgHom.range (φ R s'))) M :=
  (rTensor M (toLinearMap (AlgHom.rangeRestrict (φ R s'))) :
      (a : MvPolynomial (Fin s'.card) R ⊗[R] M) → ↥(φ R s').range ⊗[R] M)
    p'
hu' :
  u' =
    (rTensor M (toLinearMap (AlgHom.rangeRestrict (φ R s'))) :
        (a : MvPolynomial (Fin s'.card) R ⊗[R] M) → ↥(φ R s').range ⊗[R] M)
      p'
u'FG : Subalgebra.FG (AlgHom.range (φ R s'))
huu' :
  Eq (α := S ⊗[R] M)
    ((rTensor M (toLinearMap (Subalgebra.val (AlgHom.range (φ R s)))) : (a : ↥(φ R s).range ⊗[R] M) → S ⊗[R] M) u :
      S ⊗[R] M)
    ((rTensor M (toLinearMap (Subalgebra.val (AlgHom.range (φ R s')))) : (a : ↥(φ R s').range ⊗[R] M) → S ⊗[R] M) u' :
      S ⊗[R] M)
⊢ Eq (α := S ⊗[R] N)
    ((rTensor N (toLinearMap (φ R s)) : (a : MvPolynomial (Fin s.card) R ⊗[R] N) → S ⊗[R] N)
        (f.toFun' (MvPolynomial (Fin s.card) R) p) :
      S ⊗[R] N)
    ((rTensor N (toLinearMap (φ R s')) : (a : MvPolynomial (Fin s'.card) R ⊗[R] N) → S ⊗[R] N)
        (f.toFun' (MvPolynomial (Fin s'.card) R) p') :
      S ⊗[R] N)
have obtain : ∀ (B : Subalgebra R S) (hAB : AlgHom.range (φ R s) ≤ B) (hA'B : AlgHom.range (φ R s') ≤ B)
  (h :
    Eq (α := TensorProduct.{u, v, u_1} R (↥B) M)
      ((rTensor M (Subalgebra.inclusion hAB).toLinearMap : (a : ↥(φ R s).range ⊗[R] M) → ↥B ⊗[R] M) u :
        TensorProduct.{u, v, u_1} R (↥B) M)
      ((rTensor M (Subalgebra.inclusion hA'B).toLinearMap : (a : ↥(φ R s').range ⊗[R] M) → ↥B ⊗[R] M) u' :
        TensorProduct.{u, v, u_1} R (↥B) M))
  (t : Finset S) (hB : Algebra.adjoin R (↑t : Set S) = B),
  Eq (α := S ⊗[R] N)
    ((rTensor N (toLinearMap (φ R s)) : (a : MvPolynomial (Fin s.card) R ⊗[R] N) → S ⊗[R] N)
        (f.toFun' (MvPolynomial (Fin s.card) R) p) :
      S ⊗[R] N)
    ((rTensor N (toLinearMap (φ R s')) : (a : MvPolynomial (Fin s'.card) R ⊗[R] N) → S ⊗[R] N)
        (f.toFun' (MvPolynomial (Fin s'.card) R) p') :
      S ⊗[R] N)
Tactic: obtain ⟨B, hAB, hA'B, ⟨t, hB⟩, h⟩ :=
    TensorProduct.Algebra.eq_of_fg_of_subtype_eq' (R := R) uFG u'FG huu'
-- Lean 4 proof step from Mathlib.RingTheory.PolynomialLaw.Basic (hypothesis)
Goal:
R : Type u
inst : CommSemiring R
M : Type u_1
inst_1 : AddCommMonoid M
inst_2 : Module R M
N : Type u_2
inst_3 : AddCommMonoid N
inst_4 : Module R N
S : Type v
inst_5 : CommSemiring S
inst_6 : Algebra R S
f : M →ₚₗ[R] N
s : Finset S
p : MvPolynomial (Fin s.card) R ⊗[R] M
s' : Finset S
p' : MvPolynomial (Fin s'.card) R ⊗[R] M
h_1 :
  Eq (α := S ⊗[R] M) (π R M S (Sigma.mk (β := fun (s : Finset S) ↦ MvPolynomial (Fin s.card) R ⊗[R] M) s p))
    (π R M S (Sigma.mk (β := fun (s : Finset S) ↦ MvPolynomial (Fin s.card) R ⊗[R] M) s' p'))
u : TensorProduct.{u, v, u_1} R (↥(AlgHom.range (φ R s))) M :=
  (rTensor M (toLinearMap (AlgHom.rangeRestrict (φ R s))) :
      (a : MvPolynomial (Fin s.card) R ⊗[R] M) → ↥(φ R s).range ⊗[R] M)
    p
hu :
  u =
    (rTensor M (toLinearMap (AlgHom.rangeRestrict (φ R s))) :
        (a : MvPolynomial (Fin s.card) R ⊗[R] M) → ↥(φ R s).range ⊗[R] M)
      p
uFG : Subalgebra.FG (AlgHom.range (φ R s))
u' : TensorProduct.{u, v, u_1} R (↥(AlgHom.range (φ R s'))) M :=
  (rTensor M (toLinearMap (AlgHom.rangeRestrict (φ R s'))) :
      (a : MvPolynomial (Fin s'.card) R ⊗[R] M) → ↥(φ R s').range ⊗[R] M)
    p'
hu' :
  u' =
    (rTensor M (toLinearMap (AlgHom.rangeRestrict (φ R s'))) :
        (a : MvPolynomial (Fin s'.card) R ⊗[R] M) → ↥(φ R s').range ⊗[R] M)
      p'
u'FG : Subalgebra.FG (AlgHom.range (φ R s'))
huu' :
  Eq (α := S ⊗[R] M)
    ((rTensor M (toLinearMap (Subalgebra.val (AlgHom.range (φ R s)))) : (a : ↥(φ R s).range ⊗[R] M) → S ⊗[R] M) u :
      S ⊗[R] M)
    ((rTensor M (toLinearMap (Subalgebra.val (AlgHom.range (φ R s')))) : (a : ↥(φ R s').range ⊗[R] M) → S ⊗[R] M) u' :
      S ⊗[R] M)
B : Subalgebra R S
hAB : AlgHom.range (φ R s) ≤ B
hA'B : AlgHom.range (φ R s') ≤ B
h :
  Eq (α := TensorProduct.{u, v, u_1} R (↥B) M)
    ((rTensor M (Subalgebra.inclusion hAB).toLinearMap : (a : ↥(φ R s).range ⊗[R] M) → ↥B ⊗[R] M) u :
      TensorProduct.{u, v, u_1} R (↥B) M)
    ((rTensor M (Subalgebra.inclusion hA'B).toLinearMap : (a : ↥(φ R s').range ⊗[R] M) → ↥B ⊗[R] M) u' :
      TensorProduct.{u, v, u_1} R (↥B) M)
t : Finset S
hB : Algebra.adjoin R (↑t : Set S) = B
⊢ Eq (α := S ⊗[R] N)
    ((rTensor N (toLinearMap (φ R s)) : (a : MvPolynomial (Fin s.card) R ⊗[R] N) → S ⊗[R] N)
        (f.toFun' (MvPolynomial (Fin s.card) R) p) :
      S ⊗[R] N)
    ((rTensor N (toLinearMap (φ R s')) : (a : MvPolynomial (Fin s'.card) R ⊗[R] N) → S ⊗[R] N)
        (f.toFun' (MvPolynomial (Fin s'.card) R) p') :
      S ⊗[R] N)
have hB₁ : B = AlgHom.range (φ R t)
Tactic: rw [← range_φ R t, eq_comm] at hB
Cleared hypotheses: hB
-- Lean 4 proof step from Mathlib.RingTheory.PolynomialLaw.Basic (hypothesis)
Goal:
R : Type u
inst : CommSemiring R
M : Type u_1
inst_1 : AddCommMonoid M
inst_2 : Module R M
N : Type u_2
inst_3 : AddCommMonoid N
inst_4 : Module R N
S : Type v
inst_5 : CommSemiring S
inst_6 : Algebra R S
f : M →ₚₗ[R] N
s : Finset S
p : MvPolynomial (Fin s.card) R ⊗[R] M
s' : Finset S
p' : MvPolynomial (Fin s'.card) R ⊗[R] M
h_1 :
  Eq (α := S ⊗[R] M) (π R M S (Sigma.mk (β := fun (s : Finset S) ↦ MvPolynomial (Fin s.card) R ⊗[R] M) s p))
    (π R M S (Sigma.mk (β := fun (s : Finset S) ↦ MvPolynomial (Fin s.card) R ⊗[R] M) s' p'))
u : TensorProduct.{u, v, u_1} R (↥(AlgHom.range (φ R s))) M :=
  (rTensor M (toLinearMap (AlgHom.rangeRestrict (φ R s))) :
      (a : MvPolynomial (Fin s.card) R ⊗[R] M) → ↥(φ R s).range ⊗[R] M)
    p
hu :
  u =
    (rTensor M (toLinearMap (AlgHom.rangeRestrict (φ R s))) :
        (a : MvPolynomial (Fin s.card) R ⊗[R] M) → ↥(φ R s).range ⊗[R] M)
      p
uFG : Subalgebra.FG (AlgHom.range (φ R s))
u' : TensorProduct.{u, v, u_1} R (↥(AlgHom.range (φ R s'))) M :=
  (rTensor M (toLinearMap (AlgHom.rangeRestrict (φ R s'))) :
      (a : MvPolynomial (Fin s'.card) R ⊗[R] M) → ↥(φ R s').range ⊗[R] M)
    p'
hu' :
  u' =
    (rTensor M (toLinearMap (AlgHom.rangeRestrict (φ R s'))) :
        (a : MvPolynomial (Fin s'.card) R ⊗[R] M) → ↥(φ R s').range ⊗[R] M)
      p'
u'FG : Subalgebra.FG (AlgHom.range (φ R s'))
huu' :
  Eq (α := S ⊗[R] M)
    ((rTensor M (toLinearMap (Subalgebra.val (AlgHom.range (φ R s)))) : (a : ↥(φ R s).range ⊗[R] M) → S ⊗[R] M) u :
      S ⊗[R] M)
    ((rTensor M (toLinearMap (Subalgebra.val (AlgHom.range (φ R s')))) : (a : ↥(φ R s').range ⊗[R] M) → S ⊗[R] M) u' :
      S ⊗[R] M)
B : Subalgebra R S
hAB : AlgHom.range (φ R s) ≤ B
hA'B : AlgHom.range (φ R s') ≤ B
h :
  Eq (α := TensorProduct.{u, v, u_1} R (↥B) M)
    ((rTensor M (Subalgebra.inclusion hAB).toLinearMap : (a : ↥(φ R s).range ⊗[R] M) → ↥B ⊗[R] M) u :
      TensorProduct.{u, v, u_1} R (↥B) M)
    ((rTensor M (Subalgebra.inclusion hA'B).toLinearMap : (a : ↥(φ R s').range ⊗[R] M) → ↥B ⊗[R] M) u' :
      TensorProduct.{u, v, u_1} R (↥B) M)
t : Finset S
hB : B = AlgHom.range (φ R t)
⊢ Eq (α := S ⊗[R] N)
    ((rTensor N (toLinearMap (φ R s)) : (a : MvPolynomial (Fin s.card) R ⊗[R] N) → S ⊗[R] N)
        (f.toFun' (MvPolynomial (Fin s.card) R) p) :
      S ⊗[R] N)
    ((rTensor N (toLinearMap (φ R s')) : (a : MvPolynomial (Fin s'.card) R ⊗[R] N) → S ⊗[R] N)
        (f.toFun' (MvPolynomial (Fin s'.card) R) p') :
      S ⊗[R] N)
have hAB' : LE.le (α := Subalgebra R S) (AlgHom.range (φ R s)) (AlgHom.range (φ R t))
Tactic: have hAB' : (φ R s).range ≤ (φ R t).range := le_trans hAB (le_of_eq hB)
-- Lean 4 proof step from Mathlib.RingTheory.PolynomialLaw.Basic (hypothesis)
Goal:
R : Type u
inst : CommSemiring R
M : Type u_1
inst_1 : AddCommMonoid M
inst_2 : Module R M
N : Type u_2
inst_3 : AddCommMonoid N
inst_4 : Module R N
S : Type v
inst_5 : CommSemiring S
inst_6 : Algebra R S
f : M →ₚₗ[R] N
s : Finset S
p : MvPolynomial (Fin s.card) R ⊗[R] M
s' : Finset S
p' : MvPolynomial (Fin s'.card) R ⊗[R] M
h_1 :
  Eq (α := S ⊗[R] M) (π R M S (Sigma.mk (β := fun (s : Finset S) ↦ MvPolynomial (Fin s.card) R ⊗[R] M) s p))
    (π R M S (Sigma.mk (β := fun (s : Finset S) ↦ MvPolynomial (Fin s.card) R ⊗[R] M) s' p'))
u : TensorProduct.{u, v, u_1} R (↥(AlgHom.range (φ R s))) M :=
  (rTensor M (toLinearMap (AlgHom.rangeRestrict (φ R s))) :
      (a : MvPolynomial (Fin s.card) R ⊗[R] M) → ↥(φ R s).range ⊗[R] M)
    p
hu :
  u =
    (rTensor M (toLinearMap (AlgHom.rangeRestrict (φ R s))) :
        (a : MvPolynomial (Fin s.card) R ⊗[R] M) → ↥(φ R s).range ⊗[R] M)
      p
uFG : Subalgebra.FG (AlgHom.range (φ R s))
u' : TensorProduct.{u, v, u_1} R (↥(AlgHom.range (φ R s'))) M :=
  (rTensor M (toLinearMap (AlgHom.rangeRestrict (φ R s'))) :
      (a : MvPolynomial (Fin s'.card) R ⊗[R] M) → ↥(φ R s').range ⊗[R] M)
    p'
hu' :
  u' =
    (rTensor M (toLinearMap (AlgHom.rangeRestrict (φ R s'))) :
        (a : MvPolynomial (Fin s'.card) R ⊗[R] M) → ↥(φ R s').range ⊗[R] M)
      p'
u'FG : Subalgebra.FG (AlgHom.range (φ R s'))
huu' :
  Eq (α := S ⊗[R] M)
    ((rTensor M (toLinearMap (Subalgebra.val (AlgHom.range (φ R s)))) : (a : ↥(φ R s).range ⊗[R] M) → S ⊗[R] M) u :
      S ⊗[R] M)
    ((rTensor M (toLinearMap (Subalgebra.val (AlgHom.range (φ R s')))) : (a : ↥(φ R s').range ⊗[R] M) → S ⊗[R] M) u' :
      S ⊗[R] M)
B : Subalgebra R S
hAB : AlgHom.range (φ R s) ≤ B
hA'B : AlgHom.range (φ R s') ≤ B
h :
  Eq (α := TensorProduct.{u, v, u_1} R (↥B) M)
    ((rTensor M (Subalgebra.inclusion hAB).toLinearMap : (a : ↥(φ R s).range ⊗[R] M) → ↥B ⊗[R] M) u :
      TensorProduct.{u, v, u_1} R (↥B) M)
    ((rTensor M (Subalgebra.inclusion hA'B).toLinearMap : (a : ↥(φ R s').range ⊗[R] M) → ↥B ⊗[R] M) u' :
      TensorProduct.{u, v, u_1} R (↥B) M)
t : Finset S
hB : B = AlgHom.range (φ R t)
hAB' : LE.le (α := Subalgebra R S) (AlgHom.range (φ R s)) (AlgHom.range (φ R t))
⊢ Eq (α := S ⊗[R] N)
    ((rTensor N (toLinearMap (φ R s)) : (a : MvPolynomial (Fin s.card) R ⊗[R] N) → S ⊗[R] N)
        (f.toFun' (MvPolynomial (Fin s.card) R) p) :
      S ⊗[R] N)
    ((rTensor N (toLinearMap (φ R s')) : (a : MvPolynomial (Fin s'.card) R ⊗[R] N) → S ⊗[R] N)
        (f.toFun' (MvPolynomial (Fin s'.card) R) p') :
      S ⊗[R] N)
have hA'B' : LE.le (α := Subalgebra R S) (AlgHom.range (φ R s')) (AlgHom.range (φ R t))
Tactic: have hA'B' : (φ R s').range ≤ (φ R t).range := le_trans hA'B (le_of_eq hB)
-- Lean 4 proof step from Mathlib.RingTheory.PolynomialLaw.Basic (goal)
Goal:
R : Type u
inst : CommSemiring R
M : Type u_1
inst_1 : AddCommMonoid M
inst_2 : Module R M
N : Type u_2
inst_3 : AddCommMonoid N
inst_4 : Module R N
S : Type v
inst_5 : CommSemiring S
inst_6 : Algebra R S
f : M →ₚₗ[R] N
t : S ⊗[R] M
s : Finset S
p : MvPolynomial (Fin s.card) R ⊗[R] M
ha : π R M S (Sigma.mk (β := fun (s : Finset S) ↦ MvPolynomial (Fin s.card) R ⊗[R] M) s p) = t
⊢ toFun S f t =
    (rTensor N (toLinearMap (φ R s)) : (a : MvPolynomial (Fin s.card) R ⊗[R] N) → S ⊗[R] N)
      (f.toFun' (MvPolynomial (Fin s.card) R) p)
have rw : Eq (α := S ⊗[R] N) (Function.extend (π R M S) (toFunLifted S f) (fun (x : S ⊗[R] M) ↦ 0) t)
  ((rTensor N (toLinearMap (φ R s)) : (a : MvPolynomial (Fin s.card) R ⊗[R] N) → S ⊗[R] N)
    (f.toFun' (MvPolynomial (Fin s.card) R) p))
Tactic: rw [PolynomialLaw.toFun, ← ha, (factorsThrough_toFunLifted_π f).extend_apply, toFunLifted]
-- Lean 4 proof step from Mathlib.RingTheory.PolynomialLaw.Basic (goal)
Goal:
R : Type u
inst : CommSemiring R
M : Type u_1
inst_1 : AddCommMonoid M
inst_2 : Module R M
N : Type u_2
inst_3 : AddCommMonoid N
inst_4 : Module R N
S : Type v
inst_5 : CommSemiring S
inst_6 : Algebra R S
f : M →ₚₗ[R] N
t : S ⊗[R] M
s : Finset S
p : MvPolynomial (Fin s.card) R ⊗[R] M
ha : π R M S (Sigma.mk (β := fun (s : Finset S) ↦ MvPolynomial (Fin s.card) R ⊗[R] M) s p) = t
rw :
  Eq (α := S ⊗[R] N) (Function.extend (π R M S) (toFunLifted S f) (fun (x : S ⊗[R] M) ↦ 0) t)
    ((rTensor N (toLinearMap (φ R s)) : (a : MvPolynomial (Fin s.card) R ⊗[R] N) → S ⊗[R] N)
      (f.toFun' (MvPolynomial (Fin s.card) R) p))
⊢ toFun S f t =
    (rTensor N (toLinearMap (φ R s)) : (a : MvPolynomial (Fin s.card) R ⊗[R] N) → S ⊗[R] N)
      (f.toFun' (MvPolynomial (Fin s.card) R) p)
have rw₁ : Eq (α := S ⊗[R] N)
  (Function.extend (π R M S) (toFunLifted S f) (fun (x : S ⊗[R] M) ↦ 0)
    (π R M S (Sigma.mk (β := fun (s : Finset S) ↦ MvPolynomial (Fin s.card) R ⊗[R] M) s p)))
  ((rTensor N (toLinearMap (φ R s)) : (a : MvPolynomial (Fin s.card) R ⊗[R] N) → S ⊗[R] N)
    (f.toFun' (MvPolynomial (Fin s.card) R) p))
Tactic: rw [PolynomialLaw.toFun, ← ha, (factorsThrough_toFunLifted_π f).extend_apply, toFunLifted]
-- Lean 4 proof step from Mathlib.RingTheory.PolynomialLaw.Basic (goal)
Goal:
R : Type u
inst : CommSemiring R
M : Type u_1
inst_1 : AddCommMonoid M
inst_2 : Module R M
N : Type u_2
inst_3 : AddCommMonoid N
inst_4 : Module R N
S : Type v
inst_5 : CommSemiring S
inst_6 : Algebra R S
f : M →ₚₗ[R] N
t : S ⊗[R] M
s : Finset S
p : MvPolynomial (Fin s.card) R ⊗[R] M
ha : π R M S (Sigma.mk (β := fun (s : Finset S) ↦ MvPolynomial (Fin s.card) R ⊗[R] M) s p) = t
rw :
  Eq (α := S ⊗[R] N) (Function.extend (π R M S) (toFunLifted S f) (fun (x : S ⊗[R] M) ↦ 0) t)
    ((rTensor N (toLinearMap (φ R s)) : (a : MvPolynomial (Fin s.card) R ⊗[R] N) → S ⊗[R] N)
      (f.toFun' (MvPolynomial (Fin s.card) R) p))
rw₁ :
  Eq (α := S ⊗[R] N)
    (Function.extend (π R M S) (toFunLifted S f) (fun (x : S ⊗[R] M) ↦ 0)
      (π R M S (Sigma.mk (β := fun (s : Finset S) ↦ MvPolynomial (Fin s.card) R ⊗[R] M) s p)))
    ((rTensor N (toLinearMap (φ R s)) : (a : MvPolynomial (Fin s.card) R ⊗[R] N) → S ⊗[R] N)
      (f.toFun' (MvPolynomial (Fin s.card) R) p))
⊢ toFun S f t =
    (rTensor N (toLinearMap (φ R s)) : (a : MvPolynomial (Fin s.card) R ⊗[R] N) → S ⊗[R] N)
      (f.toFun' (MvPolynomial (Fin s.card) R) p)
have rw₂ : Eq (α := S ⊗[R] N) (toFunLifted S f (Sigma.mk (β := fun (s : Finset S) ↦ MvPolynomial (Fin s.card) R ⊗[R] M) s p))
  ((rTensor N (toLinearMap (φ R s)) : (a : MvPolynomial (Fin s.card) R ⊗[R] N) → S ⊗[R] N)
    (f.toFun' (MvPolynomial (Fin s.card) R) p))
Tactic: rw [PolynomialLaw.toFun, ← ha, (factorsThrough_toFunLifted_π f).extend_apply, toFunLifted]
-- Lean 4 proof step from Mathlib.RingTheory.PolynomialLaw.Basic (goal)
Goal:
R : Type u
inst : CommSemiring R
M : Type u_1
inst_1 : AddCommMonoid M
inst_2 : Module R M
N : Type u_2
inst_3 : AddCommMonoid N
inst_4 : Module R N
S : Type v
inst_5 : CommSemiring S
inst_6 : Algebra R S
f : M →ₚₗ[R] N
t : S ⊗[R] M
s : Finset S
p : MvPolynomial (Fin s.card) R ⊗[R] M
ha : π R M S (Sigma.mk (β := fun (s : Finset S) ↦ MvPolynomial (Fin s.card) R ⊗[R] M) s p) = t
rw :
  Eq (α := S ⊗[R] N) (Function.extend (π R M S) (toFunLifted S f) (fun (x : S ⊗[R] M) ↦ 0) t)
    ((rTensor N (toLinearMap (φ R s)) : (a : MvPolynomial (Fin s.card) R ⊗[R] N) → S ⊗[R] N)
      (f.toFun' (MvPolynomial (Fin s.card) R) p))
rw₁ :
  Eq (α := S ⊗[R] N)
    (Function.extend (π R M S) (toFunLifted S f) (fun (x : S ⊗[R] M) ↦ 0)
      (π R M S (Sigma.mk (β := fun (s : Finset S) ↦ MvPolynomial (Fin s.card) R ⊗[R] M) s p)))
    ((rTensor N (toLinearMap (φ R s)) : (a : MvPolynomial (Fin s.card) R ⊗[R] N) → S ⊗[R] N)
      (f.toFun' (MvPolynomial (Fin s.card) R) p))
rw₂ :
  Eq (α := S ⊗[R] N) (toFunLifted S f (Sigma.mk (β := fun (s : Finset S) ↦ MvPolynomial (Fin s.card) R ⊗[R] M) s p))
    ((rTensor N (toLinearMap (φ R s)) : (a : MvPolynomial (Fin s.card) R ⊗[R] N) → S ⊗[R] N)
      (f.toFun' (MvPolynomial (Fin s.card) R) p))
⊢ toFun S f t =
    (rTensor N (toLinearMap (φ R s)) : (a : MvPolynomial (Fin s.card) R ⊗[R] N) → S ⊗[R] N)
      (f.toFun' (MvPolynomial (Fin s.card) R) p)
have rw₃ : Eq (α := S ⊗[R] N)
  ((rTensor N (toLinearMap (φ R s)) : (a : MvPolynomial (Fin s.card) R ⊗[R] N) → S ⊗[R] N)
      (f.toFun' (MvPolynomial (Fin s.card) R) p) :
    S ⊗[R] N)
  ((rTensor N (toLinearMap (φ R s)) : (a : MvPolynomial (Fin s.card) R ⊗[R] N) → S ⊗[R] N)
      (f.toFun' (MvPolynomial (Fin s.card) R) p) :
    S ⊗[R] N)
Tactic: rw [PolynomialLaw.toFun, ← ha, (factorsThrough_toFunLifted_π f).extend_apply, toFunLifted]
-- Lean 4 proof step from Mathlib.RingTheory.PolynomialLaw.Basic (goal)
Goal:
R : Type u
inst : CommSemiring R
M : Type u_1
inst_1 : AddCommMonoid M
inst_2 : Module R M
S : Type v
inst_3 : CommSemiring S
inst_4 : Algebra R S
T : Type u_3
inst_5 : CommSemiring T
inst_6 : Algebra R T
A : Subalgebra R T
φ : S →ₐ[R] T
hφ : A ≤ φ.range
t : T ⊗[R] M
ht : Membership.mem (γ := Submodule R (T ⊗[R] M)) (range (rTensor M A.val.toLinearMap)) t
⊢ ∃ (s : S ⊗[R] M), (rTensor M φ.toLinearMap : (a : S ⊗[R] M) → T ⊗[R] M) s = t
have obtain : ∀ (u : TensorProduct.{u, u_3, u_1} R (↥A) M) (hu : (rTensor M A.val.toLinearMap : (a : ↥A ⊗[R] M) → T ⊗[R] M) u = t),
  ∃ (s : S ⊗[R] M), (rTensor M φ.toLinearMap : (a : S ⊗[R] M) → T ⊗[R] M) s = t
Tactic: obtain ⟨u, hu⟩ := ht
Cleared hypotheses: ht
-- Lean 4 proof step from Mathlib.RingTheory.PolynomialLaw.Basic (goal)
Goal:
R : Type u
inst : CommSemiring R
M : Type u_1
inst_1 : AddCommMonoid M
inst_2 : Module R M
S : Type v
inst_3 : CommSemiring S
inst_4 : Algebra R S
T : Type u_3
inst_5 : CommSemiring T
inst_6 : Algebra R T
A : Subalgebra R T
φ : S →ₐ[R] T
hφ : A ≤ φ.range
t : T ⊗[R] M
u : TensorProduct.{u, u_3, u_1} R (↥A) M
hu : (rTensor M A.val.toLinearMap : (a : ↥A ⊗[R] M) → T ⊗[R] M) u = t
h_surj :
  Function.Surjective (α := S ⊗[R] M) (β := TensorProduct.{u, u_3, u_1} R (↥φ.range) M)
    (⇑(rTensor M φ.rangeRestrict.toLinearMap) : (a : S ⊗[R] M) → ↥φ.range ⊗[R] M)
⊢ ∃ (s : S ⊗[R] M), (rTensor M φ.toLinearMap : (a : S ⊗[R] M) → T ⊗[R] M) s = t
have obtain : ∀ (p : S ⊗[R] M)
  (hp :
    Eq (α := TensorProduct.{u, u_3, u_1} R (↥φ.range) M)
      ((rTensor M φ.rangeRestrict.toLinearMap : (a : S ⊗[R] M) → ↥φ.range ⊗[R] M) p :
        TensorProduct.{u, u_3, u_1} R (↥φ.range) M)
      ((rTensor M (Subalgebra.inclusion hφ).toLinearMap : (a : ↥A ⊗[R] M) → ↥φ.range ⊗[R] M) u :
        TensorProduct.{u, u_3, u_1} R (↥φ.range) M)),
  ∃ (s : S ⊗[R] M), (rTensor M φ.toLinearMap : (a : S ⊗[R] M) → T ⊗[R] M) s = t
Tactic: obtain ⟨p, hp⟩ := h_surj ((Subalgebra.inclusion hφ).toLinearMap.rTensor M u)
-- Lean 4 proof step from Mathlib.RingTheory.PolynomialLaw.Basic (goal)
Goal:
R : Type u
inst : CommSemiring R
M : Type u_1
inst_1 : AddCommMonoid M
inst_2 : Module R M
S : Type v
inst_3 : CommSemiring S
inst_4 : Algebra R S
T : Type u_3
inst_5 : CommSemiring T
inst_6 : Algebra R T
A : Subalgebra R T
φ : S →ₐ[R] T
hφ : A ≤ φ.range
t : T ⊗[R] M
u : TensorProduct.{u, u_3, u_1} R (↥A) M
hu : (rTensor M A.val.toLinearMap : (a : ↥A ⊗[R] M) → T ⊗[R] M) u = t
h_surj :
  Function.Surjective (α := S ⊗[R] M) (β := TensorProduct.{u, u_3, u_1} R (↥φ.range) M)
    (⇑(rTensor M φ.rangeRestrict.toLinearMap) : (a : S ⊗[R] M) → ↥φ.range ⊗[R] M)
p : S ⊗[R] M
hp :
  Eq (α := TensorProduct.{u, u_3, u_1} R (↥φ.range) M)
    ((rTensor M φ.rangeRestrict.toLinearMap : (a : S ⊗[R] M) → ↥φ.range ⊗[R] M) p :
      TensorProduct.{u, u_3, u_1} R (↥φ.range) M)
    ((rTensor M (Subalgebra.inclusion hφ).toLinearMap : (a : ↥A ⊗[R] M) → ↥φ.range ⊗[R] M) u :
      TensorProduct.{u, u_3, u_1} R (↥φ.range) M)
⊢ ∃ (s : S ⊗[R] M), (rTensor M φ.toLinearMap : (a : S ⊗[R] M) → T ⊗[R] M) s = t
have h : (rTensor M φ.toLinearMap : (a : S ⊗[R] M) → T ⊗[R] M) p = t
Tactic: use p
-- Lean 4 proof step from Mathlib.RingTheory.PolynomialLaw.Basic (goal)
Goal:
R : Type u
inst : CommSemiring R
M : Type u_1
inst_1 : AddCommMonoid M
inst_2 : Module R M
S : Type v
inst_3 : CommSemiring S
inst_4 : Algebra R S
T : Type u_3
inst_5 : CommSemiring T
inst_6 : Algebra R T
A : Subalgebra R T
φ : S →ₐ[R] T
hφ : A ≤ φ.range
t : T ⊗[R] M
u : TensorProduct.{u, u_3, u_1} R (↥A) M
hu : (rTensor M A.val.toLinearMap : (a : ↥A ⊗[R] M) → T ⊗[R] M) u = t
h_surj :
  Function.Surjective (α := S ⊗[R] M) (β := TensorProduct.{u, u_3, u_1} R (↥φ.range) M)
    (⇑(rTensor M φ.rangeRestrict.toLinearMap) : (a : S ⊗[R] M) → ↥φ.range ⊗[R] M)
p : S ⊗[R] M
hp :
  Eq (α := TensorProduct.{u, u_3, u_1} R (↥φ.range) M)
    ((rTensor M φ.rangeRestrict.toLinearMap : (a : S ⊗[R] M) → ↥φ.range ⊗[R] M) p :
      TensorProduct.{u, u_3, u_1} R (↥φ.range) M)
    ((rTensor M (Subalgebra.inclusion hφ).toLinearMap : (a : ↥A ⊗[R] M) → ↥φ.range ⊗[R] M) u :
      TensorProduct.{u, u_3, u_1} R (↥φ.range) M)
⊢ (rTensor M φ.toLinearMap : (a : S ⊗[R] M) → T ⊗[R] M) p = t
have h : Eq (α := T ⊗[R] M) ((rTensor M φ.toLinearMap : (a : S ⊗[R] M) → T ⊗[R] M) p : T ⊗[R] M)
  ((rTensor M (φ.range.val.comp φ.rangeRestrict).toLinearMap : (a : S ⊗[R] M) → T ⊗[R] M) p : T ⊗[R] M)
Tactic: rw [← hu, ← Subalgebra.val_comp_inclusion hφ, comp_toLinearMap, rTensor_comp,
      LinearMap.comp_apply, ← hp, ← LinearMap.comp_apply, ← rTensor_comp, ← comp_toLinearMap]