algebra.polynomial.group_ring_action
⟷
Mathlib.Algebra.Polynomial.GroupRingAction
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -5,8 +5,8 @@ Authors: Kenny Lau
-/
import Algebra.GroupRingAction.Basic
import GroupTheory.GroupAction.Hom
-import Data.Polynomial.AlgebraMap
-import Data.Polynomial.Monic
+import Algebra.Polynomial.AlgebraMap
+import Algebra.Polynomial.Monic
import GroupTheory.GroupAction.Quotient
#align_import algebra.polynomial.group_ring_action from "leanprover-community/mathlib"@"10bf4f825ad729c5653adc039dafa3622e7f93c9"
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Kenny Lau
-/
import Algebra.GroupRingAction.Basic
-import Algebra.Hom.GroupAction
+import GroupTheory.GroupAction.Hom
import Data.Polynomial.AlgebraMap
import Data.Polynomial.Monic
import GroupTheory.GroupAction.Quotient
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -103,40 +103,40 @@ open MulAction
open scoped Classical
-#print prodXSubSmul /-
+#print prodXSubSMul /-
/-- the product of `(X - g • x)` over distinct `g • x`. -/
-noncomputable def prodXSubSmul (x : R) : R[X] :=
+noncomputable def prodXSubSMul (x : R) : R[X] :=
(Finset.univ : Finset (G ⧸ MulAction.stabilizer G x)).Prod fun g =>
Polynomial.X - Polynomial.C (ofQuotientStabilizer G x g)
-#align prod_X_sub_smul prodXSubSmul
+#align prod_X_sub_smul prodXSubSMul
-/
-#print prodXSubSmul.monic /-
-theorem prodXSubSmul.monic (x : R) : (prodXSubSmul G R x).Monic :=
+#print prodXSubSMul.monic /-
+theorem prodXSubSMul.monic (x : R) : (prodXSubSMul G R x).Monic :=
Polynomial.monic_prod_of_monic _ _ fun g _ => Polynomial.monic_X_sub_C _
-#align prod_X_sub_smul.monic prodXSubSmul.monic
+#align prod_X_sub_smul.monic prodXSubSMul.monic
-/
-#print prodXSubSmul.eval /-
-theorem prodXSubSmul.eval (x : R) : (prodXSubSmul G R x).eval x = 0 :=
+#print prodXSubSMul.eval /-
+theorem prodXSubSMul.eval (x : R) : (prodXSubSMul G R x).eval x = 0 :=
(map_prod ((Polynomial.aeval x).toRingHom.toMonoidHom : R[X] →* R) _ _).trans <|
Finset.prod_eq_zero (Finset.mem_univ <| QuotientGroup.mk 1) <| by simp
-#align prod_X_sub_smul.eval prodXSubSmul.eval
+#align prod_X_sub_smul.eval prodXSubSMul.eval
-/
-#print prodXSubSmul.smul /-
-theorem prodXSubSmul.smul (x : R) (g : G) : g • prodXSubSmul G R x = prodXSubSmul G R x :=
+#print prodXSubSMul.smul /-
+theorem prodXSubSMul.smul (x : R) (g : G) : g • prodXSubSMul G R x = prodXSubSMul G R x :=
Finset.smul_prod.trans <|
Fintype.prod_bijective _ (MulAction.bijective g) _ _ fun g' => by
rw [of_quotient_stabilizer_smul, smul_sub, Polynomial.smul_X, Polynomial.smul_C]
-#align prod_X_sub_smul.smul prodXSubSmul.smul
+#align prod_X_sub_smul.smul prodXSubSMul.smul
-/
-#print prodXSubSmul.coeff /-
-theorem prodXSubSmul.coeff (x : R) (g : G) (n : ℕ) :
- g • (prodXSubSmul G R x).coeff n = (prodXSubSmul G R x).coeff n := by
- rw [← Polynomial.coeff_smul, prodXSubSmul.smul]
-#align prod_X_sub_smul.coeff prodXSubSmul.coeff
+#print prodXSubSMul.coeff /-
+theorem prodXSubSMul.coeff (x : R) (g : G) (n : ℕ) :
+ g • (prodXSubSMul G R x).coeff n = (prodXSubSMul G R x).coeff n := by
+ rw [← Polynomial.coeff_smul, prodXSubSMul.smul]
+#align prod_X_sub_smul.coeff prodXSubSMul.coeff
-/
end CommRing
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -119,7 +119,7 @@ theorem prodXSubSmul.monic (x : R) : (prodXSubSmul G R x).Monic :=
#print prodXSubSmul.eval /-
theorem prodXSubSmul.eval (x : R) : (prodXSubSmul G R x).eval x = 0 :=
- (MonoidHom.map_prod ((Polynomial.aeval x).toRingHom.toMonoidHom : R[X] →* R) _ _).trans <|
+ (map_prod ((Polynomial.aeval x).toRingHom.toMonoidHom : R[X] →* R) _ _).trans <|
Finset.prod_eq_zero (Finset.mem_univ <| QuotientGroup.mk 1) <| by simp
#align prod_X_sub_smul.eval prodXSubSmul.eval
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,11 +3,11 @@ Copyright (c) 2020 Kenny Lau. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Kenny Lau
-/
-import Mathbin.Algebra.GroupRingAction.Basic
-import Mathbin.Algebra.Hom.GroupAction
-import Mathbin.Data.Polynomial.AlgebraMap
-import Mathbin.Data.Polynomial.Monic
-import Mathbin.GroupTheory.GroupAction.Quotient
+import Algebra.GroupRingAction.Basic
+import Algebra.Hom.GroupAction
+import Data.Polynomial.AlgebraMap
+import Data.Polynomial.Monic
+import GroupTheory.GroupAction.Quotient
#align_import algebra.polynomial.group_ring_action from "leanprover-community/mathlib"@"10bf4f825ad729c5653adc039dafa3622e7f93c9"
mathlib commit https://github.com/leanprover-community/mathlib/commit/32a7e535287f9c73f2e4d2aef306a39190f0b504
@@ -52,7 +52,7 @@ noncomputable instance [MulSemiringAction M R] : MulSemiringAction M R[X] :=
smul := (· • ·)
smul_one := fun m =>
(smul_eq_map R m).symm ▸ Polynomial.map_one (MulSemiringAction.toRingHom M R m)
- smul_mul := fun m p q =>
+ smul_hMul := fun m p q =>
(smul_eq_map R m).symm ▸ Polynomial.map_mul (MulSemiringAction.toRingHom M R m) }
variable {M R}
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,11 +2,6 @@
Copyright (c) 2020 Kenny Lau. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Kenny Lau
-
-! This file was ported from Lean 3 source module algebra.polynomial.group_ring_action
-! leanprover-community/mathlib commit 10bf4f825ad729c5653adc039dafa3622e7f93c9
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.Algebra.GroupRingAction.Basic
import Mathbin.Algebra.Hom.GroupAction
@@ -14,6 +9,8 @@ import Mathbin.Data.Polynomial.AlgebraMap
import Mathbin.Data.Polynomial.Monic
import Mathbin.GroupTheory.GroupAction.Quotient
+#align_import algebra.polynomial.group_ring_action from "leanprover-community/mathlib"@"10bf4f825ad729c5653adc039dafa3622e7f93c9"
+
/-!
# Group action on rings applied to polynomials
mathlib commit https://github.com/leanprover-community/mathlib/commit/2a0ce625dbb0ffbc7d1316597de0b25c1ec75303
@@ -42,7 +42,7 @@ theorem smul_eq_map [MulSemiringAction M R] (m : M) :
DistribMulAction.toAddMonoidHom R[X] m =
(map_ring_hom (MulSemiringAction.toRingHom M R m)).toAddMonoidHom
by ext1 r; exact AddMonoidHom.congr_fun this r
- ext (n r) : 2
+ ext n r : 2
change m • monomial n r = map (MulSemiringAction.toRingHom M R m) (monomial n r)
simpa only [Polynomial.map_monomial, Polynomial.smul_monomial]
#align polynomial.smul_eq_map Polynomial.smul_eq_map
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -34,6 +34,7 @@ variable (R : Type _) [Semiring R]
variable {M}
+#print Polynomial.smul_eq_map /-
theorem smul_eq_map [MulSemiringAction M R] (m : M) :
(· • ·) m = map (MulSemiringAction.toRingHom M R m) :=
by
@@ -45,6 +46,7 @@ theorem smul_eq_map [MulSemiringAction M R] (m : M) :
change m • monomial n r = map (MulSemiringAction.toRingHom M R m) (monomial n r)
simpa only [Polynomial.map_monomial, Polynomial.smul_monomial]
#align polynomial.smul_eq_map Polynomial.smul_eq_map
+-/
variable (M)
@@ -60,29 +62,37 @@ variable {M R}
variable [MulSemiringAction M R]
+#print Polynomial.smul_X /-
@[simp]
theorem smul_X (m : M) : (m • X : R[X]) = X :=
(smul_eq_map R m).symm ▸ map_X _
#align polynomial.smul_X Polynomial.smul_X
+-/
variable (S : Type _) [CommSemiring S] [MulSemiringAction M S]
+#print Polynomial.smul_eval_smul /-
theorem smul_eval_smul (m : M) (f : S[X]) (x : S) : (m • f).eval (m • x) = m • f.eval x :=
Polynomial.induction_on f (fun r => by rw [smul_C, eval_C, eval_C])
(fun f g ihf ihg => by rw [smul_add, eval_add, ihf, ihg, eval_add, smul_add]) fun n r ih => by
rw [smul_mul', smul_pow', smul_C, smul_X, eval_mul, eval_C, eval_pow, eval_X, eval_mul, eval_C,
eval_pow, eval_X, smul_mul', smul_pow']
#align polynomial.smul_eval_smul Polynomial.smul_eval_smul
+-/
variable (G : Type _) [Group G]
+#print Polynomial.eval_smul' /-
theorem eval_smul' [MulSemiringAction G S] (g : G) (f : S[X]) (x : S) :
f.eval (g • x) = g • (g⁻¹ • f).eval x := by rw [← smul_eval_smul, smul_inv_smul]
#align polynomial.eval_smul' Polynomial.eval_smul'
+-/
+#print Polynomial.smul_eval /-
theorem smul_eval [MulSemiringAction G S] (g : G) (f : S[X]) (x : S) :
(g • f).eval x = g • f.eval (g⁻¹ • x) := by rw [← smul_eval_smul, smul_inv_smul]
#align polynomial.smul_eval Polynomial.smul_eval
+-/
end Polynomial
@@ -110,21 +120,27 @@ theorem prodXSubSmul.monic (x : R) : (prodXSubSmul G R x).Monic :=
#align prod_X_sub_smul.monic prodXSubSmul.monic
-/
+#print prodXSubSmul.eval /-
theorem prodXSubSmul.eval (x : R) : (prodXSubSmul G R x).eval x = 0 :=
(MonoidHom.map_prod ((Polynomial.aeval x).toRingHom.toMonoidHom : R[X] →* R) _ _).trans <|
Finset.prod_eq_zero (Finset.mem_univ <| QuotientGroup.mk 1) <| by simp
#align prod_X_sub_smul.eval prodXSubSmul.eval
+-/
+#print prodXSubSmul.smul /-
theorem prodXSubSmul.smul (x : R) (g : G) : g • prodXSubSmul G R x = prodXSubSmul G R x :=
Finset.smul_prod.trans <|
Fintype.prod_bijective _ (MulAction.bijective g) _ _ fun g' => by
rw [of_quotient_stabilizer_smul, smul_sub, Polynomial.smul_X, Polynomial.smul_C]
#align prod_X_sub_smul.smul prodXSubSmul.smul
+-/
+#print prodXSubSmul.coeff /-
theorem prodXSubSmul.coeff (x : R) (g : G) (n : ℕ) :
g • (prodXSubSmul G R x).coeff n = (prodXSubSmul G R x).coeff n := by
rw [← Polynomial.coeff_smul, prodXSubSmul.smul]
#align prod_X_sub_smul.coeff prodXSubSmul.coeff
+-/
end CommRing
@@ -138,6 +154,7 @@ variable {Q : Type _} [CommSemiring Q] [MulSemiringAction M Q]
open Polynomial
+#print MulSemiringActionHom.polynomial /-
/-- An equivariant map induces an equivariant map on polynomials. -/
protected noncomputable def polynomial (g : P →+*[M] Q) : P[X] →+*[M] Q[X]
where
@@ -156,11 +173,14 @@ protected noncomputable def polynomial (g : P →+*[M] Q) : P[X] →+*[M] Q[X]
map_one' := Polynomial.map_one g
map_mul' p q := Polynomial.map_mul g
#align mul_semiring_action_hom.polynomial MulSemiringActionHom.polynomial
+-/
+#print MulSemiringActionHom.coe_polynomial /-
@[simp]
theorem coe_polynomial (g : P →+*[M] Q) : (g.Polynomial : P[X] → Q[X]) = map g :=
rfl
#align mul_semiring_action_hom.coe_polynomial MulSemiringActionHom.coe_polynomial
+-/
end MulSemiringActionHom
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -26,7 +26,7 @@ This file contains instances and definitions relating `mul_semiring_action` to `
variable (M : Type _) [Monoid M]
-open Polynomial
+open scoped Polynomial
namespace Polynomial
@@ -94,7 +94,7 @@ variable (R : Type _) [CommRing R] [MulSemiringAction G R]
open MulAction
-open Classical
+open scoped Classical
#print prodXSubSmul /-
/-- the product of `(X - g • x)` over distinct `g • x`. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -34,12 +34,6 @@ variable (R : Type _) [Semiring R]
variable {M}
-/- warning: polynomial.smul_eq_map -> Polynomial.smul_eq_map is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} [_inst_1 : Monoid.{u1} M] (R : Type.{u2}) [_inst_2 : Semiring.{u2} R] [_inst_3 : MulSemiringAction.{u1, u2} M R _inst_1 _inst_2] (m : M), Eq.{succ u2} ((Polynomial.{u2} R _inst_2) -> (Polynomial.{u2} R _inst_2)) (SMul.smul.{u1, u2} M (Polynomial.{u2} R _inst_2) (SMulZeroClass.toHasSmul.{u1, u2} M (Polynomial.{u2} R _inst_2) (Polynomial.zero.{u2} R _inst_2) (Polynomial.smulZeroClass.{u2, u1} R _inst_2 M (DistribSMul.toSmulZeroClass.{u1, u2} M R (AddMonoid.toAddZeroClass.{u2} R (AddMonoidWithOne.toAddMonoid.{u2} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} R (NonAssocSemiring.toAddCommMonoidWithOne.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_2))))) (DistribMulAction.toDistribSMul.{u1, u2} M R _inst_1 (AddMonoidWithOne.toAddMonoid.{u2} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} R (NonAssocSemiring.toAddCommMonoidWithOne.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_2)))) (MulSemiringAction.toDistribMulAction.{u1, u2} M R _inst_1 _inst_2 _inst_3))))) m) (Polynomial.map.{u2, u2} R R _inst_2 _inst_2 (MulSemiringAction.toRingHom.{u2, u1} M _inst_1 R _inst_2 _inst_3 m))
-but is expected to have type
- forall {M : Type.{u2}} [_inst_1 : Monoid.{u2} M] (R : Type.{u1}) [_inst_2 : Semiring.{u1} R] [_inst_3 : MulSemiringAction.{u2, u1} M R _inst_1 _inst_2] (m : M), Eq.{succ u1} ((Polynomial.{u1} R _inst_2) -> (Polynomial.{u1} R _inst_2)) (HSMul.hSMul.{u2, u1, u1} M (Polynomial.{u1} R _inst_2) (Polynomial.{u1} R _inst_2) (instHSMul.{u2, u1} M (Polynomial.{u1} R _inst_2) (SMulZeroClass.toSMul.{u2, u1} M (Polynomial.{u1} R _inst_2) (Polynomial.zero.{u1} R _inst_2) (Polynomial.smulZeroClass.{u1, u2} R _inst_2 M (DistribSMul.toSMulZeroClass.{u2, u1} M R (AddMonoid.toAddZeroClass.{u1} R (AddMonoidWithOne.toAddMonoid.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_2))))) (DistribMulAction.toDistribSMul.{u2, u1} M R _inst_1 (AddMonoidWithOne.toAddMonoid.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_2)))) (MulSemiringAction.toDistribMulAction.{u2, u1} M R _inst_1 _inst_2 _inst_3)))))) m) (Polynomial.map.{u1, u1} R R _inst_2 _inst_2 (MulSemiringAction.toRingHom.{u1, u2} M _inst_1 R _inst_2 _inst_3 m))
-Case conversion may be inaccurate. Consider using '#align polynomial.smul_eq_map Polynomial.smul_eq_mapₓ'. -/
theorem smul_eq_map [MulSemiringAction M R] (m : M) :
(· • ·) m = map (MulSemiringAction.toRingHom M R m) :=
by
@@ -66,12 +60,6 @@ variable {M R}
variable [MulSemiringAction M R]
-/- warning: polynomial.smul_X -> Polynomial.smul_X is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} [_inst_1 : Monoid.{u1} M] {R : Type.{u2}} [_inst_2 : Semiring.{u2} R] [_inst_3 : MulSemiringAction.{u1, u2} M R _inst_1 _inst_2] (m : M), Eq.{succ u2} (Polynomial.{u2} R _inst_2) (SMul.smul.{u1, u2} M (Polynomial.{u2} R _inst_2) (SMulZeroClass.toHasSmul.{u1, u2} M (Polynomial.{u2} R _inst_2) (Polynomial.zero.{u2} R _inst_2) (Polynomial.smulZeroClass.{u2, u1} R _inst_2 M (DistribSMul.toSmulZeroClass.{u1, u2} M R (AddMonoid.toAddZeroClass.{u2} R (AddMonoidWithOne.toAddMonoid.{u2} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} R (NonAssocSemiring.toAddCommMonoidWithOne.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_2))))) (DistribMulAction.toDistribSMul.{u1, u2} M R _inst_1 (AddMonoidWithOne.toAddMonoid.{u2} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} R (NonAssocSemiring.toAddCommMonoidWithOne.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_2)))) (MulSemiringAction.toDistribMulAction.{u1, u2} M R _inst_1 _inst_2 _inst_3))))) m (Polynomial.X.{u2} R _inst_2)) (Polynomial.X.{u2} R _inst_2)
-but is expected to have type
- forall {M : Type.{u1}} [_inst_1 : Monoid.{u1} M] {R : Type.{u2}} [_inst_2 : Semiring.{u2} R] [_inst_3 : MulSemiringAction.{u1, u2} M R _inst_1 _inst_2] (m : M), Eq.{succ u2} (Polynomial.{u2} R _inst_2) (HSMul.hSMul.{u1, u2, u2} M (Polynomial.{u2} R _inst_2) (Polynomial.{u2} R _inst_2) (instHSMul.{u1, u2} M (Polynomial.{u2} R _inst_2) (SMulZeroClass.toSMul.{u1, u2} M (Polynomial.{u2} R _inst_2) (Polynomial.zero.{u2} R _inst_2) (Polynomial.smulZeroClass.{u2, u1} R _inst_2 M (DistribSMul.toSMulZeroClass.{u1, u2} M R (AddMonoid.toAddZeroClass.{u2} R (AddMonoidWithOne.toAddMonoid.{u2} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} R (NonAssocSemiring.toAddCommMonoidWithOne.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_2))))) (DistribMulAction.toDistribSMul.{u1, u2} M R _inst_1 (AddMonoidWithOne.toAddMonoid.{u2} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} R (NonAssocSemiring.toAddCommMonoidWithOne.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_2)))) (MulSemiringAction.toDistribMulAction.{u1, u2} M R _inst_1 _inst_2 _inst_3)))))) m (Polynomial.X.{u2} R _inst_2)) (Polynomial.X.{u2} R _inst_2)
-Case conversion may be inaccurate. Consider using '#align polynomial.smul_X Polynomial.smul_Xₓ'. -/
@[simp]
theorem smul_X (m : M) : (m • X : R[X]) = X :=
(smul_eq_map R m).symm ▸ map_X _
@@ -79,12 +67,6 @@ theorem smul_X (m : M) : (m • X : R[X]) = X :=
variable (S : Type _) [CommSemiring S] [MulSemiringAction M S]
-/- warning: polynomial.smul_eval_smul -> Polynomial.smul_eval_smul is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} [_inst_1 : Monoid.{u1} M] (S : Type.{u2}) [_inst_4 : CommSemiring.{u2} S] [_inst_5 : MulSemiringAction.{u1, u2} M S _inst_1 (CommSemiring.toSemiring.{u2} S _inst_4)] (m : M) (f : Polynomial.{u2} S (CommSemiring.toSemiring.{u2} S _inst_4)) (x : S), Eq.{succ u2} S (Polynomial.eval.{u2} S (CommSemiring.toSemiring.{u2} S _inst_4) (SMul.smul.{u1, u2} M S (SMulZeroClass.toHasSmul.{u1, u2} M S (AddZeroClass.toHasZero.{u2} S (AddMonoid.toAddZeroClass.{u2} S (AddMonoidWithOne.toAddMonoid.{u2} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} S (NonAssocSemiring.toAddCommMonoidWithOne.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_4))))))) (DistribSMul.toSmulZeroClass.{u1, u2} M S (AddMonoid.toAddZeroClass.{u2} S (AddMonoidWithOne.toAddMonoid.{u2} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} S (NonAssocSemiring.toAddCommMonoidWithOne.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_4)))))) (DistribMulAction.toDistribSMul.{u1, u2} M S _inst_1 (AddMonoidWithOne.toAddMonoid.{u2} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} S (NonAssocSemiring.toAddCommMonoidWithOne.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_4))))) (MulSemiringAction.toDistribMulAction.{u1, u2} M S _inst_1 (CommSemiring.toSemiring.{u2} S _inst_4) _inst_5)))) m x) (SMul.smul.{u1, u2} M (Polynomial.{u2} S (CommSemiring.toSemiring.{u2} S _inst_4)) (SMulZeroClass.toHasSmul.{u1, u2} M (Polynomial.{u2} S (CommSemiring.toSemiring.{u2} S _inst_4)) (Polynomial.zero.{u2} S (CommSemiring.toSemiring.{u2} S _inst_4)) (Polynomial.smulZeroClass.{u2, u1} S (CommSemiring.toSemiring.{u2} S _inst_4) M (DistribSMul.toSmulZeroClass.{u1, u2} M S (AddMonoid.toAddZeroClass.{u2} S (AddMonoidWithOne.toAddMonoid.{u2} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} S (NonAssocSemiring.toAddCommMonoidWithOne.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_4)))))) (DistribMulAction.toDistribSMul.{u1, u2} M S _inst_1 (AddMonoidWithOne.toAddMonoid.{u2} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} S (NonAssocSemiring.toAddCommMonoidWithOne.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_4))))) (MulSemiringAction.toDistribMulAction.{u1, u2} M S _inst_1 (CommSemiring.toSemiring.{u2} S _inst_4) _inst_5))))) m f)) (SMul.smul.{u1, u2} M S (SMulZeroClass.toHasSmul.{u1, u2} M S (AddZeroClass.toHasZero.{u2} S (AddMonoid.toAddZeroClass.{u2} S (AddMonoidWithOne.toAddMonoid.{u2} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} S (NonAssocSemiring.toAddCommMonoidWithOne.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_4))))))) (DistribSMul.toSmulZeroClass.{u1, u2} M S (AddMonoid.toAddZeroClass.{u2} S (AddMonoidWithOne.toAddMonoid.{u2} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} S (NonAssocSemiring.toAddCommMonoidWithOne.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_4)))))) (DistribMulAction.toDistribSMul.{u1, u2} M S _inst_1 (AddMonoidWithOne.toAddMonoid.{u2} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} S (NonAssocSemiring.toAddCommMonoidWithOne.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_4))))) (MulSemiringAction.toDistribMulAction.{u1, u2} M S _inst_1 (CommSemiring.toSemiring.{u2} S _inst_4) _inst_5)))) m (Polynomial.eval.{u2} S (CommSemiring.toSemiring.{u2} S _inst_4) x f))
-but is expected to have type
- forall {M : Type.{u1}} [_inst_1 : Monoid.{u1} M] (S : Type.{u2}) [_inst_4 : CommSemiring.{u2} S] [_inst_5 : MulSemiringAction.{u1, u2} M S _inst_1 (CommSemiring.toSemiring.{u2} S _inst_4)] (m : M) (f : Polynomial.{u2} S (CommSemiring.toSemiring.{u2} S _inst_4)) (x : S), Eq.{succ u2} S (Polynomial.eval.{u2} S (CommSemiring.toSemiring.{u2} S _inst_4) (HSMul.hSMul.{u1, u2, u2} M S S (instHSMul.{u1, u2} M S (SMulZeroClass.toSMul.{u1, u2} M S (CommMonoidWithZero.toZero.{u2} S (CommSemiring.toCommMonoidWithZero.{u2} S _inst_4)) (DistribSMul.toSMulZeroClass.{u1, u2} M S (AddMonoid.toAddZeroClass.{u2} S (AddMonoidWithOne.toAddMonoid.{u2} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} S (NonAssocSemiring.toAddCommMonoidWithOne.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_4)))))) (DistribMulAction.toDistribSMul.{u1, u2} M S _inst_1 (AddMonoidWithOne.toAddMonoid.{u2} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} S (NonAssocSemiring.toAddCommMonoidWithOne.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_4))))) (MulSemiringAction.toDistribMulAction.{u1, u2} M S _inst_1 (CommSemiring.toSemiring.{u2} S _inst_4) _inst_5))))) m x) (HSMul.hSMul.{u1, u2, u2} M (Polynomial.{u2} S (CommSemiring.toSemiring.{u2} S _inst_4)) (Polynomial.{u2} S (CommSemiring.toSemiring.{u2} S _inst_4)) (instHSMul.{u1, u2} M (Polynomial.{u2} S (CommSemiring.toSemiring.{u2} S _inst_4)) (SMulZeroClass.toSMul.{u1, u2} M (Polynomial.{u2} S (CommSemiring.toSemiring.{u2} S _inst_4)) (Polynomial.zero.{u2} S (CommSemiring.toSemiring.{u2} S _inst_4)) (Polynomial.smulZeroClass.{u2, u1} S (CommSemiring.toSemiring.{u2} S _inst_4) M (DistribSMul.toSMulZeroClass.{u1, u2} M S (AddMonoid.toAddZeroClass.{u2} S (AddMonoidWithOne.toAddMonoid.{u2} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} S (NonAssocSemiring.toAddCommMonoidWithOne.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_4)))))) (DistribMulAction.toDistribSMul.{u1, u2} M S _inst_1 (AddMonoidWithOne.toAddMonoid.{u2} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} S (NonAssocSemiring.toAddCommMonoidWithOne.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_4))))) (MulSemiringAction.toDistribMulAction.{u1, u2} M S _inst_1 (CommSemiring.toSemiring.{u2} S _inst_4) _inst_5)))))) m f)) (HSMul.hSMul.{u1, u2, u2} M S S (instHSMul.{u1, u2} M S (SMulZeroClass.toSMul.{u1, u2} M S (CommMonoidWithZero.toZero.{u2} S (CommSemiring.toCommMonoidWithZero.{u2} S _inst_4)) (DistribSMul.toSMulZeroClass.{u1, u2} M S (AddMonoid.toAddZeroClass.{u2} S (AddMonoidWithOne.toAddMonoid.{u2} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} S (NonAssocSemiring.toAddCommMonoidWithOne.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_4)))))) (DistribMulAction.toDistribSMul.{u1, u2} M S _inst_1 (AddMonoidWithOne.toAddMonoid.{u2} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} S (NonAssocSemiring.toAddCommMonoidWithOne.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_4))))) (MulSemiringAction.toDistribMulAction.{u1, u2} M S _inst_1 (CommSemiring.toSemiring.{u2} S _inst_4) _inst_5))))) m (Polynomial.eval.{u2} S (CommSemiring.toSemiring.{u2} S _inst_4) x f))
-Case conversion may be inaccurate. Consider using '#align polynomial.smul_eval_smul Polynomial.smul_eval_smulₓ'. -/
theorem smul_eval_smul (m : M) (f : S[X]) (x : S) : (m • f).eval (m • x) = m • f.eval x :=
Polynomial.induction_on f (fun r => by rw [smul_C, eval_C, eval_C])
(fun f g ihf ihg => by rw [smul_add, eval_add, ihf, ihg, eval_add, smul_add]) fun n r ih => by
@@ -94,22 +76,10 @@ theorem smul_eval_smul (m : M) (f : S[X]) (x : S) : (m • f).eval (m • x) = m
variable (G : Type _) [Group G]
-/- warning: polynomial.eval_smul' -> Polynomial.eval_smul' is a dubious translation:
-lean 3 declaration is
- forall (S : Type.{u1}) [_inst_4 : CommSemiring.{u1} S] (G : Type.{u2}) [_inst_6 : Group.{u2} G] [_inst_7 : MulSemiringAction.{u2, u1} G S (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_6)) (CommSemiring.toSemiring.{u1} S _inst_4)] (g : G) (f : Polynomial.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4)) (x : S), Eq.{succ u1} S (Polynomial.eval.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4) (SMul.smul.{u2, u1} G S (SMulZeroClass.toHasSmul.{u2, u1} G S (AddZeroClass.toHasZero.{u1} S (AddMonoid.toAddZeroClass.{u1} S (AddMonoidWithOne.toAddMonoid.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4))))))) (DistribSMul.toSmulZeroClass.{u2, u1} G S (AddMonoid.toAddZeroClass.{u1} S (AddMonoidWithOne.toAddMonoid.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4)))))) (DistribMulAction.toDistribSMul.{u2, u1} G S (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_6)) (AddMonoidWithOne.toAddMonoid.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4))))) (MulSemiringAction.toDistribMulAction.{u2, u1} G S (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_6)) (CommSemiring.toSemiring.{u1} S _inst_4) _inst_7)))) g x) f) (SMul.smul.{u2, u1} G S (SMulZeroClass.toHasSmul.{u2, u1} G S (AddZeroClass.toHasZero.{u1} S (AddMonoid.toAddZeroClass.{u1} S (AddMonoidWithOne.toAddMonoid.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4))))))) (DistribSMul.toSmulZeroClass.{u2, u1} G S (AddMonoid.toAddZeroClass.{u1} S (AddMonoidWithOne.toAddMonoid.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4)))))) (DistribMulAction.toDistribSMul.{u2, u1} G S (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_6)) (AddMonoidWithOne.toAddMonoid.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4))))) (MulSemiringAction.toDistribMulAction.{u2, u1} G S (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_6)) (CommSemiring.toSemiring.{u1} S _inst_4) _inst_7)))) g (Polynomial.eval.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4) x (SMul.smul.{u2, u1} G (Polynomial.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4)) (SMulZeroClass.toHasSmul.{u2, u1} G (Polynomial.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4)) (Polynomial.zero.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4)) (Polynomial.smulZeroClass.{u1, u2} S (CommSemiring.toSemiring.{u1} S _inst_4) G (DistribSMul.toSmulZeroClass.{u2, u1} G S (AddMonoid.toAddZeroClass.{u1} S (AddMonoidWithOne.toAddMonoid.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4)))))) (DistribMulAction.toDistribSMul.{u2, u1} G S (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_6)) (AddMonoidWithOne.toAddMonoid.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4))))) (MulSemiringAction.toDistribMulAction.{u2, u1} G S (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_6)) (CommSemiring.toSemiring.{u1} S _inst_4) _inst_7))))) (Inv.inv.{u2} G (DivInvMonoid.toHasInv.{u2} G (Group.toDivInvMonoid.{u2} G _inst_6)) g) f)))
-but is expected to have type
- forall (S : Type.{u1}) [_inst_4 : CommSemiring.{u1} S] (G : Type.{u2}) [_inst_6 : Group.{u2} G] [_inst_7 : MulSemiringAction.{u2, u1} G S (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_6)) (CommSemiring.toSemiring.{u1} S _inst_4)] (g : G) (f : Polynomial.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4)) (x : S), Eq.{succ u1} S (Polynomial.eval.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4) (HSMul.hSMul.{u2, u1, u1} G S S (instHSMul.{u2, u1} G S (SMulZeroClass.toSMul.{u2, u1} G S (CommMonoidWithZero.toZero.{u1} S (CommSemiring.toCommMonoidWithZero.{u1} S _inst_4)) (DistribSMul.toSMulZeroClass.{u2, u1} G S (AddMonoid.toAddZeroClass.{u1} S (AddMonoidWithOne.toAddMonoid.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4)))))) (DistribMulAction.toDistribSMul.{u2, u1} G S (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_6)) (AddMonoidWithOne.toAddMonoid.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4))))) (MulSemiringAction.toDistribMulAction.{u2, u1} G S (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_6)) (CommSemiring.toSemiring.{u1} S _inst_4) _inst_7))))) g x) f) (HSMul.hSMul.{u2, u1, u1} G S S (instHSMul.{u2, u1} G S (SMulZeroClass.toSMul.{u2, u1} G S (CommMonoidWithZero.toZero.{u1} S (CommSemiring.toCommMonoidWithZero.{u1} S _inst_4)) (DistribSMul.toSMulZeroClass.{u2, u1} G S (AddMonoid.toAddZeroClass.{u1} S (AddMonoidWithOne.toAddMonoid.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4)))))) (DistribMulAction.toDistribSMul.{u2, u1} G S (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_6)) (AddMonoidWithOne.toAddMonoid.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4))))) (MulSemiringAction.toDistribMulAction.{u2, u1} G S (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_6)) (CommSemiring.toSemiring.{u1} S _inst_4) _inst_7))))) g (Polynomial.eval.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4) x (HSMul.hSMul.{u2, u1, u1} G (Polynomial.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4)) (Polynomial.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4)) (instHSMul.{u2, u1} G (Polynomial.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4)) (SMulZeroClass.toSMul.{u2, u1} G (Polynomial.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4)) (Polynomial.zero.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4)) (Polynomial.smulZeroClass.{u1, u2} S (CommSemiring.toSemiring.{u1} S _inst_4) G (DistribSMul.toSMulZeroClass.{u2, u1} G S (AddMonoid.toAddZeroClass.{u1} S (AddMonoidWithOne.toAddMonoid.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4)))))) (DistribMulAction.toDistribSMul.{u2, u1} G S (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_6)) (AddMonoidWithOne.toAddMonoid.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4))))) (MulSemiringAction.toDistribMulAction.{u2, u1} G S (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_6)) (CommSemiring.toSemiring.{u1} S _inst_4) _inst_7)))))) (Inv.inv.{u2} G (InvOneClass.toInv.{u2} G (DivInvOneMonoid.toInvOneClass.{u2} G (DivisionMonoid.toDivInvOneMonoid.{u2} G (Group.toDivisionMonoid.{u2} G _inst_6)))) g) f)))
-Case conversion may be inaccurate. Consider using '#align polynomial.eval_smul' Polynomial.eval_smul'ₓ'. -/
theorem eval_smul' [MulSemiringAction G S] (g : G) (f : S[X]) (x : S) :
f.eval (g • x) = g • (g⁻¹ • f).eval x := by rw [← smul_eval_smul, smul_inv_smul]
#align polynomial.eval_smul' Polynomial.eval_smul'
-/- warning: polynomial.smul_eval -> Polynomial.smul_eval is a dubious translation:
-lean 3 declaration is
- forall (S : Type.{u1}) [_inst_4 : CommSemiring.{u1} S] (G : Type.{u2}) [_inst_6 : Group.{u2} G] [_inst_7 : MulSemiringAction.{u2, u1} G S (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_6)) (CommSemiring.toSemiring.{u1} S _inst_4)] (g : G) (f : Polynomial.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4)) (x : S), Eq.{succ u1} S (Polynomial.eval.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4) x (SMul.smul.{u2, u1} G (Polynomial.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4)) (SMulZeroClass.toHasSmul.{u2, u1} G (Polynomial.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4)) (Polynomial.zero.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4)) (Polynomial.smulZeroClass.{u1, u2} S (CommSemiring.toSemiring.{u1} S _inst_4) G (DistribSMul.toSmulZeroClass.{u2, u1} G S (AddMonoid.toAddZeroClass.{u1} S (AddMonoidWithOne.toAddMonoid.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4)))))) (DistribMulAction.toDistribSMul.{u2, u1} G S (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_6)) (AddMonoidWithOne.toAddMonoid.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4))))) (MulSemiringAction.toDistribMulAction.{u2, u1} G S (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_6)) (CommSemiring.toSemiring.{u1} S _inst_4) _inst_7))))) g f)) (SMul.smul.{u2, u1} G S (SMulZeroClass.toHasSmul.{u2, u1} G S (AddZeroClass.toHasZero.{u1} S (AddMonoid.toAddZeroClass.{u1} S (AddMonoidWithOne.toAddMonoid.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4))))))) (DistribSMul.toSmulZeroClass.{u2, u1} G S (AddMonoid.toAddZeroClass.{u1} S (AddMonoidWithOne.toAddMonoid.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4)))))) (DistribMulAction.toDistribSMul.{u2, u1} G S (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_6)) (AddMonoidWithOne.toAddMonoid.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4))))) (MulSemiringAction.toDistribMulAction.{u2, u1} G S (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_6)) (CommSemiring.toSemiring.{u1} S _inst_4) _inst_7)))) g (Polynomial.eval.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4) (SMul.smul.{u2, u1} G S (SMulZeroClass.toHasSmul.{u2, u1} G S (AddZeroClass.toHasZero.{u1} S (AddMonoid.toAddZeroClass.{u1} S (AddMonoidWithOne.toAddMonoid.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4))))))) (DistribSMul.toSmulZeroClass.{u2, u1} G S (AddMonoid.toAddZeroClass.{u1} S (AddMonoidWithOne.toAddMonoid.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4)))))) (DistribMulAction.toDistribSMul.{u2, u1} G S (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_6)) (AddMonoidWithOne.toAddMonoid.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4))))) (MulSemiringAction.toDistribMulAction.{u2, u1} G S (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_6)) (CommSemiring.toSemiring.{u1} S _inst_4) _inst_7)))) (Inv.inv.{u2} G (DivInvMonoid.toHasInv.{u2} G (Group.toDivInvMonoid.{u2} G _inst_6)) g) x) f))
-but is expected to have type
- forall (S : Type.{u1}) [_inst_4 : CommSemiring.{u1} S] (G : Type.{u2}) [_inst_6 : Group.{u2} G] [_inst_7 : MulSemiringAction.{u2, u1} G S (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_6)) (CommSemiring.toSemiring.{u1} S _inst_4)] (g : G) (f : Polynomial.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4)) (x : S), Eq.{succ u1} S (Polynomial.eval.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4) x (HSMul.hSMul.{u2, u1, u1} G (Polynomial.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4)) (Polynomial.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4)) (instHSMul.{u2, u1} G (Polynomial.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4)) (SMulZeroClass.toSMul.{u2, u1} G (Polynomial.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4)) (Polynomial.zero.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4)) (Polynomial.smulZeroClass.{u1, u2} S (CommSemiring.toSemiring.{u1} S _inst_4) G (DistribSMul.toSMulZeroClass.{u2, u1} G S (AddMonoid.toAddZeroClass.{u1} S (AddMonoidWithOne.toAddMonoid.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4)))))) (DistribMulAction.toDistribSMul.{u2, u1} G S (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_6)) (AddMonoidWithOne.toAddMonoid.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4))))) (MulSemiringAction.toDistribMulAction.{u2, u1} G S (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_6)) (CommSemiring.toSemiring.{u1} S _inst_4) _inst_7)))))) g f)) (HSMul.hSMul.{u2, u1, u1} G S S (instHSMul.{u2, u1} G S (SMulZeroClass.toSMul.{u2, u1} G S (CommMonoidWithZero.toZero.{u1} S (CommSemiring.toCommMonoidWithZero.{u1} S _inst_4)) (DistribSMul.toSMulZeroClass.{u2, u1} G S (AddMonoid.toAddZeroClass.{u1} S (AddMonoidWithOne.toAddMonoid.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4)))))) (DistribMulAction.toDistribSMul.{u2, u1} G S (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_6)) (AddMonoidWithOne.toAddMonoid.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4))))) (MulSemiringAction.toDistribMulAction.{u2, u1} G S (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_6)) (CommSemiring.toSemiring.{u1} S _inst_4) _inst_7))))) g (Polynomial.eval.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4) (HSMul.hSMul.{u2, u1, u1} G S S (instHSMul.{u2, u1} G S (SMulZeroClass.toSMul.{u2, u1} G S (CommMonoidWithZero.toZero.{u1} S (CommSemiring.toCommMonoidWithZero.{u1} S _inst_4)) (DistribSMul.toSMulZeroClass.{u2, u1} G S (AddMonoid.toAddZeroClass.{u1} S (AddMonoidWithOne.toAddMonoid.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4)))))) (DistribMulAction.toDistribSMul.{u2, u1} G S (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_6)) (AddMonoidWithOne.toAddMonoid.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4))))) (MulSemiringAction.toDistribMulAction.{u2, u1} G S (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_6)) (CommSemiring.toSemiring.{u1} S _inst_4) _inst_7))))) (Inv.inv.{u2} G (InvOneClass.toInv.{u2} G (DivInvOneMonoid.toInvOneClass.{u2} G (DivisionMonoid.toDivInvOneMonoid.{u2} G (Group.toDivisionMonoid.{u2} G _inst_6)))) g) x) f))
-Case conversion may be inaccurate. Consider using '#align polynomial.smul_eval Polynomial.smul_evalₓ'. -/
theorem smul_eval [MulSemiringAction G S] (g : G) (f : S[X]) (x : S) :
(g • f).eval x = g • f.eval (g⁻¹ • x) := by rw [← smul_eval_smul, smul_inv_smul]
#align polynomial.smul_eval Polynomial.smul_eval
@@ -140,35 +110,17 @@ theorem prodXSubSmul.monic (x : R) : (prodXSubSmul G R x).Monic :=
#align prod_X_sub_smul.monic prodXSubSmul.monic
-/
-/- warning: prod_X_sub_smul.eval -> prodXSubSmul.eval is a dubious translation:
-lean 3 declaration is
- forall (G : Type.{u1}) [_inst_2 : Group.{u1} G] [_inst_3 : Fintype.{u1} G] (R : Type.{u2}) [_inst_4 : CommRing.{u2} R] [_inst_5 : MulSemiringAction.{u1, u2} G R (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_2)) (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))] (x : R), Eq.{succ u2} R (Polynomial.eval.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) x (prodXSubSmul.{u1, u2} G _inst_2 _inst_3 R _inst_4 _inst_5 x)) (OfNat.ofNat.{u2} R 0 (OfNat.mk.{u2} R 0 (Zero.zero.{u2} R (MulZeroClass.toHasZero.{u2} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))))))))
-but is expected to have type
- forall (G : Type.{u1}) [_inst_2 : Group.{u1} G] [_inst_3 : Fintype.{u1} G] (R : Type.{u2}) [_inst_4 : CommRing.{u2} R] [_inst_5 : MulSemiringAction.{u1, u2} G R (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_2)) (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))] (x : R), Eq.{succ u2} R (Polynomial.eval.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) x (prodXSubSmul.{u1, u2} G _inst_2 _inst_3 R _inst_4 _inst_5 x)) (OfNat.ofNat.{u2} R 0 (Zero.toOfNat0.{u2} R (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)))))
-Case conversion may be inaccurate. Consider using '#align prod_X_sub_smul.eval prodXSubSmul.evalₓ'. -/
theorem prodXSubSmul.eval (x : R) : (prodXSubSmul G R x).eval x = 0 :=
(MonoidHom.map_prod ((Polynomial.aeval x).toRingHom.toMonoidHom : R[X] →* R) _ _).trans <|
Finset.prod_eq_zero (Finset.mem_univ <| QuotientGroup.mk 1) <| by simp
#align prod_X_sub_smul.eval prodXSubSmul.eval
-/- warning: prod_X_sub_smul.smul -> prodXSubSmul.smul is a dubious translation:
-lean 3 declaration is
- forall (G : Type.{u1}) [_inst_2 : Group.{u1} G] [_inst_3 : Fintype.{u1} G] (R : Type.{u2}) [_inst_4 : CommRing.{u2} R] [_inst_5 : MulSemiringAction.{u1, u2} G R (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_2)) (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))] (x : R) (g : G), Eq.{succ u2} (Polynomial.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) (SMul.smul.{u1, u2} G (Polynomial.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) (SMulZeroClass.toHasSmul.{u1, u2} G (Polynomial.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) (Polynomial.zero.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) (Polynomial.smulZeroClass.{u2, u1} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) G (DistribSMul.toSmulZeroClass.{u1, u2} G R (AddMonoid.toAddZeroClass.{u2} R (AddMonoidWithOne.toAddMonoid.{u2} R (AddGroupWithOne.toAddMonoidWithOne.{u2} R (AddCommGroupWithOne.toAddGroupWithOne.{u2} R (Ring.toAddCommGroupWithOne.{u2} R (CommRing.toRing.{u2} R _inst_4)))))) (DistribMulAction.toDistribSMul.{u1, u2} G R (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_2)) (AddMonoidWithOne.toAddMonoid.{u2} R (AddGroupWithOne.toAddMonoidWithOne.{u2} R (AddCommGroupWithOne.toAddGroupWithOne.{u2} R (Ring.toAddCommGroupWithOne.{u2} R (CommRing.toRing.{u2} R _inst_4))))) (MulSemiringAction.toDistribMulAction.{u1, u2} G R (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_2)) (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) _inst_5))))) g (prodXSubSmul.{u1, u2} G _inst_2 _inst_3 R _inst_4 _inst_5 x)) (prodXSubSmul.{u1, u2} G _inst_2 _inst_3 R _inst_4 _inst_5 x)
-but is expected to have type
- forall (G : Type.{u1}) [_inst_2 : Group.{u1} G] [_inst_3 : Fintype.{u1} G] (R : Type.{u2}) [_inst_4 : CommRing.{u2} R] [_inst_5 : MulSemiringAction.{u1, u2} G R (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_2)) (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))] (x : R) (g : G), Eq.{succ u2} (Polynomial.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (HSMul.hSMul.{u1, u2, u2} G (Polynomial.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (Polynomial.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (instHSMul.{u1, u2} G (Polynomial.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (SMulZeroClass.toSMul.{u1, u2} G (Polynomial.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (Polynomial.zero.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (Polynomial.smulZeroClass.{u2, u1} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) G (DistribSMul.toSMulZeroClass.{u1, u2} G R (AddMonoid.toAddZeroClass.{u2} R (AddMonoidWithOne.toAddMonoid.{u2} R (AddGroupWithOne.toAddMonoidWithOne.{u2} R (Ring.toAddGroupWithOne.{u2} R (CommRing.toRing.{u2} R _inst_4))))) (DistribMulAction.toDistribSMul.{u1, u2} G R (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_2)) (AddMonoidWithOne.toAddMonoid.{u2} R (AddGroupWithOne.toAddMonoidWithOne.{u2} R (Ring.toAddGroupWithOne.{u2} R (CommRing.toRing.{u2} R _inst_4)))) (MulSemiringAction.toDistribMulAction.{u1, u2} G R (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_2)) (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) _inst_5)))))) g (prodXSubSmul.{u1, u2} G _inst_2 _inst_3 R _inst_4 _inst_5 x)) (prodXSubSmul.{u1, u2} G _inst_2 _inst_3 R _inst_4 _inst_5 x)
-Case conversion may be inaccurate. Consider using '#align prod_X_sub_smul.smul prodXSubSmul.smulₓ'. -/
theorem prodXSubSmul.smul (x : R) (g : G) : g • prodXSubSmul G R x = prodXSubSmul G R x :=
Finset.smul_prod.trans <|
Fintype.prod_bijective _ (MulAction.bijective g) _ _ fun g' => by
rw [of_quotient_stabilizer_smul, smul_sub, Polynomial.smul_X, Polynomial.smul_C]
#align prod_X_sub_smul.smul prodXSubSmul.smul
-/- warning: prod_X_sub_smul.coeff -> prodXSubSmul.coeff is a dubious translation:
-lean 3 declaration is
- forall (G : Type.{u1}) [_inst_2 : Group.{u1} G] [_inst_3 : Fintype.{u1} G] (R : Type.{u2}) [_inst_4 : CommRing.{u2} R] [_inst_5 : MulSemiringAction.{u1, u2} G R (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_2)) (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))] (x : R) (g : G) (n : Nat), Eq.{succ u2} R (SMul.smul.{u1, u2} G R (SMulZeroClass.toHasSmul.{u1, u2} G R (AddZeroClass.toHasZero.{u2} R (AddMonoid.toAddZeroClass.{u2} R (AddMonoidWithOne.toAddMonoid.{u2} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} R (NonAssocSemiring.toAddCommMonoidWithOne.{u2} R (Semiring.toNonAssocSemiring.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)))))))) (DistribSMul.toSmulZeroClass.{u1, u2} G R (AddMonoid.toAddZeroClass.{u2} R (AddMonoidWithOne.toAddMonoid.{u2} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} R (NonAssocSemiring.toAddCommMonoidWithOne.{u2} R (Semiring.toNonAssocSemiring.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))))))) (DistribMulAction.toDistribSMul.{u1, u2} G R (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_2)) (AddMonoidWithOne.toAddMonoid.{u2} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} R (NonAssocSemiring.toAddCommMonoidWithOne.{u2} R (Semiring.toNonAssocSemiring.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)))))) (MulSemiringAction.toDistribMulAction.{u1, u2} G R (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_2)) (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) _inst_5)))) g (Polynomial.coeff.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (prodXSubSmul.{u1, u2} G _inst_2 _inst_3 R _inst_4 _inst_5 x) n)) (Polynomial.coeff.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (prodXSubSmul.{u1, u2} G _inst_2 _inst_3 R _inst_4 _inst_5 x) n)
-but is expected to have type
- forall (G : Type.{u1}) [_inst_2 : Group.{u1} G] [_inst_3 : Fintype.{u1} G] (R : Type.{u2}) [_inst_4 : CommRing.{u2} R] [_inst_5 : MulSemiringAction.{u1, u2} G R (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_2)) (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))] (x : R) (g : G) (n : Nat), Eq.{succ u2} R (HSMul.hSMul.{u1, u2, u2} G R R (instHSMul.{u1, u2} G R (SMulZeroClass.toSMul.{u1, u2} G R (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (DistribSMul.toSMulZeroClass.{u1, u2} G R (AddMonoid.toAddZeroClass.{u2} R (AddMonoidWithOne.toAddMonoid.{u2} R (AddGroupWithOne.toAddMonoidWithOne.{u2} R (Ring.toAddGroupWithOne.{u2} R (CommRing.toRing.{u2} R _inst_4))))) (DistribMulAction.toDistribSMul.{u1, u2} G R (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_2)) (AddMonoidWithOne.toAddMonoid.{u2} R (AddGroupWithOne.toAddMonoidWithOne.{u2} R (Ring.toAddGroupWithOne.{u2} R (CommRing.toRing.{u2} R _inst_4)))) (MulSemiringAction.toDistribMulAction.{u1, u2} G R (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_2)) (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) _inst_5))))) g (Polynomial.coeff.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (prodXSubSmul.{u1, u2} G _inst_2 _inst_3 R _inst_4 _inst_5 x) n)) (Polynomial.coeff.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (prodXSubSmul.{u1, u2} G _inst_2 _inst_3 R _inst_4 _inst_5 x) n)
-Case conversion may be inaccurate. Consider using '#align prod_X_sub_smul.coeff prodXSubSmul.coeffₓ'. -/
theorem prodXSubSmul.coeff (x : R) (g : G) (n : ℕ) :
g • (prodXSubSmul G R x).coeff n = (prodXSubSmul G R x).coeff n := by
rw [← Polynomial.coeff_smul, prodXSubSmul.smul]
@@ -186,12 +138,6 @@ variable {Q : Type _} [CommSemiring Q] [MulSemiringAction M Q]
open Polynomial
-/- warning: mul_semiring_action_hom.polynomial -> MulSemiringActionHom.polynomial is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} [_inst_1 : Monoid.{u1} M] {P : Type.{u2}} [_inst_2 : CommSemiring.{u2} P] [_inst_3 : MulSemiringAction.{u1, u2} M P _inst_1 (CommSemiring.toSemiring.{u2} P _inst_2)] {Q : Type.{u3}} [_inst_4 : CommSemiring.{u3} Q] [_inst_5 : MulSemiringAction.{u1, u3} M Q _inst_1 (CommSemiring.toSemiring.{u3} Q _inst_4)], (MulSemiringActionHom.{u1, u2, u3} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3 Q (CommSemiring.toSemiring.{u3} Q _inst_4) _inst_5) -> (MulSemiringActionHom.{u1, u2, u3} M _inst_1 (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.mulSemiringAction.{u1, u2} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3) (Polynomial.{u3} Q (CommSemiring.toSemiring.{u3} Q _inst_4)) (Polynomial.semiring.{u3} Q (CommSemiring.toSemiring.{u3} Q _inst_4)) (Polynomial.mulSemiringAction.{u1, u3} M _inst_1 Q (CommSemiring.toSemiring.{u3} Q _inst_4) _inst_5))
-but is expected to have type
- forall {M : Type.{u1}} [_inst_1 : Monoid.{u1} M] {P : Type.{u2}} [_inst_2 : CommSemiring.{u2} P] [_inst_3 : MulSemiringAction.{u1, u2} M P _inst_1 (CommSemiring.toSemiring.{u2} P _inst_2)] {Q : Type.{u3}} [_inst_4 : CommSemiring.{u3} Q] [_inst_5 : MulSemiringAction.{u1, u3} M Q _inst_1 (CommSemiring.toSemiring.{u3} Q _inst_4)], (MulSemiringActionHom.{u1, u2, u3} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3 Q (CommSemiring.toSemiring.{u3} Q _inst_4) _inst_5) -> (MulSemiringActionHom.{u1, u2, u3} M _inst_1 (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u1, u2} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3) (Polynomial.{u3} Q (CommSemiring.toSemiring.{u3} Q _inst_4)) (Polynomial.semiring.{u3} Q (CommSemiring.toSemiring.{u3} Q _inst_4)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u1, u3} M _inst_1 Q (CommSemiring.toSemiring.{u3} Q _inst_4) _inst_5))
-Case conversion may be inaccurate. Consider using '#align mul_semiring_action_hom.polynomial MulSemiringActionHom.polynomialₓ'. -/
/-- An equivariant map induces an equivariant map on polynomials. -/
protected noncomputable def polynomial (g : P →+*[M] Q) : P[X] →+*[M] Q[X]
where
@@ -211,9 +157,6 @@ protected noncomputable def polynomial (g : P →+*[M] Q) : P[X] →+*[M] Q[X]
map_mul' p q := Polynomial.map_mul g
#align mul_semiring_action_hom.polynomial MulSemiringActionHom.polynomial
-/- warning: mul_semiring_action_hom.coe_polynomial -> MulSemiringActionHom.coe_polynomial is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align mul_semiring_action_hom.coe_polynomial MulSemiringActionHom.coe_polynomialₓ'. -/
@[simp]
theorem coe_polynomial (g : P →+*[M] Q) : (g.Polynomial : P[X] → Q[X]) = map g :=
rfl
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -46,9 +46,7 @@ theorem smul_eq_map [MulSemiringAction M R] (m : M) :
suffices
DistribMulAction.toAddMonoidHom R[X] m =
(map_ring_hom (MulSemiringAction.toRingHom M R m)).toAddMonoidHom
- by
- ext1 r
- exact AddMonoidHom.congr_fun this r
+ by ext1 r; exact AddMonoidHom.congr_fun this r
ext (n r) : 2
change m • monomial n r = map (MulSemiringAction.toRingHom M R m) (monomial n r)
simpa only [Polynomial.map_monomial, Polynomial.smul_monomial]
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -214,10 +214,7 @@ protected noncomputable def polynomial (g : P →+*[M] Q) : P[X] →+*[M] Q[X]
#align mul_semiring_action_hom.polynomial MulSemiringActionHom.polynomial
/- warning: mul_semiring_action_hom.coe_polynomial -> MulSemiringActionHom.coe_polynomial is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} [_inst_1 : Monoid.{u1} M] {P : Type.{u2}} [_inst_2 : CommSemiring.{u2} P] [_inst_3 : MulSemiringAction.{u1, u2} M P _inst_1 (CommSemiring.toSemiring.{u2} P _inst_2)] {Q : Type.{u3}} [_inst_4 : CommSemiring.{u3} Q] [_inst_5 : MulSemiringAction.{u1, u3} M Q _inst_1 (CommSemiring.toSemiring.{u3} Q _inst_4)] (g : MulSemiringActionHom.{u1, u2, u3} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3 Q (CommSemiring.toSemiring.{u3} Q _inst_4) _inst_5), Eq.{max (succ u2) (succ u3)} ((fun (_x : MulSemiringActionHom.{u1, u2, u3} M _inst_1 (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.mulSemiringAction.{u1, u2} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3) (Polynomial.{u3} Q (CommSemiring.toSemiring.{u3} Q _inst_4)) (Polynomial.semiring.{u3} Q (CommSemiring.toSemiring.{u3} Q _inst_4)) (Polynomial.mulSemiringAction.{u1, u3} M _inst_1 Q (CommSemiring.toSemiring.{u3} Q _inst_4) _inst_5)) => (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) -> (Polynomial.{u3} Q (CommSemiring.toSemiring.{u3} Q _inst_4))) (MulSemiringActionHom.polynomial.{u1, u2, u3} M _inst_1 P _inst_2 _inst_3 Q _inst_4 _inst_5 g)) (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (MulSemiringActionHom.{u1, u2, u3} M _inst_1 (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.mulSemiringAction.{u1, u2} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3) (Polynomial.{u3} Q (CommSemiring.toSemiring.{u3} Q _inst_4)) (Polynomial.semiring.{u3} Q (CommSemiring.toSemiring.{u3} Q _inst_4)) (Polynomial.mulSemiringAction.{u1, u3} M _inst_1 Q (CommSemiring.toSemiring.{u3} Q _inst_4) _inst_5)) (fun (_x : MulSemiringActionHom.{u1, u2, u3} M _inst_1 (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.mulSemiringAction.{u1, u2} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3) (Polynomial.{u3} Q (CommSemiring.toSemiring.{u3} Q _inst_4)) (Polynomial.semiring.{u3} Q (CommSemiring.toSemiring.{u3} Q _inst_4)) (Polynomial.mulSemiringAction.{u1, u3} M _inst_1 Q (CommSemiring.toSemiring.{u3} Q _inst_4) _inst_5)) => (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) -> (Polynomial.{u3} Q (CommSemiring.toSemiring.{u3} Q _inst_4))) ([anonymous].{u1, u2, u3} M _inst_1 (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.mulSemiringAction.{u1, u2} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3) (Polynomial.{u3} Q (CommSemiring.toSemiring.{u3} Q _inst_4)) (Polynomial.semiring.{u3} Q (CommSemiring.toSemiring.{u3} Q _inst_4)) (Polynomial.mulSemiringAction.{u1, u3} M _inst_1 Q (CommSemiring.toSemiring.{u3} Q _inst_4) _inst_5)) (MulSemiringActionHom.polynomial.{u1, u2, u3} M _inst_1 P _inst_2 _inst_3 Q _inst_4 _inst_5 g)) (Polynomial.map.{u2, u3} P Q (CommSemiring.toSemiring.{u2} P _inst_2) (CommSemiring.toSemiring.{u3} Q _inst_4) ((fun (a : Sort.{max (succ u2) (succ u3)}) (b : Sort.{max (succ u2) (succ u3)}) [self : HasLiftT.{max (succ u2) (succ u3), max (succ u2) (succ u3)} a b] => self.0) (MulSemiringActionHom.{u1, u2, u3} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3 Q (CommSemiring.toSemiring.{u3} Q _inst_4) _inst_5) (RingHom.{u2, u3} P Q (Semiring.toNonAssocSemiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Semiring.toNonAssocSemiring.{u3} Q (CommSemiring.toSemiring.{u3} Q _inst_4))) (HasLiftT.mk.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (MulSemiringActionHom.{u1, u2, u3} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3 Q (CommSemiring.toSemiring.{u3} Q _inst_4) _inst_5) (RingHom.{u2, u3} P Q (Semiring.toNonAssocSemiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Semiring.toNonAssocSemiring.{u3} Q (CommSemiring.toSemiring.{u3} Q _inst_4))) (CoeTCₓ.coe.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (MulSemiringActionHom.{u1, u2, u3} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3 Q (CommSemiring.toSemiring.{u3} Q _inst_4) _inst_5) (RingHom.{u2, u3} P Q (Semiring.toNonAssocSemiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Semiring.toNonAssocSemiring.{u3} Q (CommSemiring.toSemiring.{u3} Q _inst_4))) (RingHom.hasCoeT.{max u2 u3, u2, u3} (MulSemiringActionHom.{u1, u2, u3} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3 Q (CommSemiring.toSemiring.{u3} Q _inst_4) _inst_5) P Q (Semiring.toNonAssocSemiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Semiring.toNonAssocSemiring.{u3} Q (CommSemiring.toSemiring.{u3} Q _inst_4)) (MulSemiringActionHomClass.toRingHomClass.{max u2 u3, u1, u2, u3} (MulSemiringActionHom.{u1, u2, u3} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3 Q (CommSemiring.toSemiring.{u3} Q _inst_4) _inst_5) M P Q _inst_1 (CommSemiring.toSemiring.{u2} P _inst_2) (CommSemiring.toSemiring.{u3} Q _inst_4) (MulSemiringAction.toDistribMulAction.{u1, u2} M P _inst_1 (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3) (MulSemiringAction.toDistribMulAction.{u1, u3} M Q _inst_1 (CommSemiring.toSemiring.{u3} Q _inst_4) _inst_5) (MulSemiringActionHom.mulSemiringActionHomClass.{u1, u2, u3} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3 Q (CommSemiring.toSemiring.{u3} Q _inst_4) _inst_5))))) g))
-but is expected to have type
- forall {M : Type.{u3}} [_inst_1 : Monoid.{u3} M] {P : Type.{u2}} [_inst_2 : CommSemiring.{u2} P] [_inst_3 : MulSemiringAction.{u3, u2} M P _inst_1 (CommSemiring.toSemiring.{u2} P _inst_2)] {Q : Type.{u1}} [_inst_4 : CommSemiring.{u1} Q] [_inst_5 : MulSemiringAction.{u3, u1} M Q _inst_1 (CommSemiring.toSemiring.{u1} Q _inst_4)] (g : MulSemiringActionHom.{u3, u2, u1} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3 Q (CommSemiring.toSemiring.{u1} Q _inst_4) _inst_5), Eq.{max (succ u2) (succ u1)} (forall (a : Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)), (fun (x._@.Mathlib.Algebra.Hom.GroupAction._hyg.2187 : Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) => Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulSemiringActionHom.{u3, u2, u1} M _inst_1 (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u3, u2} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3) (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.semiring.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u3, u1} M _inst_1 Q (CommSemiring.toSemiring.{u1} Q _inst_4) _inst_5)) (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (fun (_x : Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) => (fun (x._@.Mathlib.Algebra.Hom.GroupAction._hyg.2187 : Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) => Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) _x) (SMulHomClass.toFunLike.{max u2 u1, u3, u2, u1} (MulSemiringActionHom.{u3, u2, u1} M _inst_1 (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u3, u2} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3) (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.semiring.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u3, u1} M _inst_1 Q (CommSemiring.toSemiring.{u1} Q _inst_4) _inst_5)) M (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (SMulZeroClass.toSMul.{u3, u2} M (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (AddMonoid.toZero.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (AddMonoidWithOne.toAddMonoid.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (NonAssocSemiring.toAddCommMonoidWithOne.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Semiring.toNonAssocSemiring.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2))))))) (DistribSMul.toSMulZeroClass.{u3, u2} M (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (AddMonoid.toAddZeroClass.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (AddMonoidWithOne.toAddMonoid.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (NonAssocSemiring.toAddCommMonoidWithOne.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Semiring.toNonAssocSemiring.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2))))))) (DistribMulAction.toDistribSMul.{u3, u2} M (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) _inst_1 (AddMonoidWithOne.toAddMonoid.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (NonAssocSemiring.toAddCommMonoidWithOne.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Semiring.toNonAssocSemiring.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)))))) (MulSemiringAction.toDistribMulAction.{u3, u2} M (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) _inst_1 (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u3, u2} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3))))) (SMulZeroClass.toSMul.{u3, u1} M (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (AddMonoid.toZero.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (AddMonoidWithOne.toAddMonoid.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (NonAssocSemiring.toAddCommMonoidWithOne.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Semiring.toNonAssocSemiring.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.semiring.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4))))))) (DistribSMul.toSMulZeroClass.{u3, u1} M (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (AddMonoid.toAddZeroClass.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (AddMonoidWithOne.toAddMonoid.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (NonAssocSemiring.toAddCommMonoidWithOne.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Semiring.toNonAssocSemiring.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.semiring.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4))))))) (DistribMulAction.toDistribSMul.{u3, u1} M (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) _inst_1 (AddMonoidWithOne.toAddMonoid.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (NonAssocSemiring.toAddCommMonoidWithOne.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Semiring.toNonAssocSemiring.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.semiring.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)))))) (MulSemiringAction.toDistribMulAction.{u3, u1} M (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) _inst_1 (Polynomial.semiring.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u3, u1} M _inst_1 Q (CommSemiring.toSemiring.{u1} Q _inst_4) _inst_5))))) (DistribMulActionHomClass.toSMulHomClass.{max u2 u1, u3, u2, u1} (MulSemiringActionHom.{u3, u2, u1} M _inst_1 (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u3, u2} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3) (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.semiring.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u3, u1} M _inst_1 Q (CommSemiring.toSemiring.{u1} Q _inst_4) _inst_5)) M (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) _inst_1 (AddMonoidWithOne.toAddMonoid.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (NonAssocSemiring.toAddCommMonoidWithOne.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Semiring.toNonAssocSemiring.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)))))) (AddMonoidWithOne.toAddMonoid.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (NonAssocSemiring.toAddCommMonoidWithOne.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Semiring.toNonAssocSemiring.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.semiring.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)))))) (MulSemiringAction.toDistribMulAction.{u3, u2} M (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) _inst_1 (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u3, u2} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3)) (MulSemiringAction.toDistribMulAction.{u3, u1} M (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) _inst_1 (Polynomial.semiring.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u3, u1} M _inst_1 Q (CommSemiring.toSemiring.{u1} Q _inst_4) _inst_5)) (MulSemiringActionHomClass.toDistribMulActionHomClass.{max u2 u1, u3, u2, u1} (MulSemiringActionHom.{u3, u2, u1} M _inst_1 (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u3, u2} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3) (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.semiring.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u3, u1} M _inst_1 Q (CommSemiring.toSemiring.{u1} Q _inst_4) _inst_5)) M (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) _inst_1 (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.semiring.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (MulSemiringAction.toDistribMulAction.{u3, u2} M (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) _inst_1 (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u3, u2} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3)) (MulSemiringAction.toDistribMulAction.{u3, u1} M (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) _inst_1 (Polynomial.semiring.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u3, u1} M _inst_1 Q (CommSemiring.toSemiring.{u1} Q _inst_4) _inst_5)) (MulSemiringActionHom.instMulSemiringActionHomClassMulSemiringActionHomToDistribMulActionToDistribMulAction.{u3, u2, u1} M _inst_1 (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u3, u2} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3) (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.semiring.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u3, u1} M _inst_1 Q (CommSemiring.toSemiring.{u1} Q _inst_4) _inst_5))))) (MulSemiringActionHom.polynomial.{u3, u2, u1} M _inst_1 P _inst_2 _inst_3 Q _inst_4 _inst_5 g)) (Polynomial.map.{u2, u1} P Q (CommSemiring.toSemiring.{u2} P _inst_2) (CommSemiring.toSemiring.{u1} Q _inst_4) (RingHomClass.toRingHom.{max u2 u1, u2, u1} (MulSemiringActionHom.{u3, u2, u1} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3 Q (CommSemiring.toSemiring.{u1} Q _inst_4) _inst_5) P Q (Semiring.toNonAssocSemiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Semiring.toNonAssocSemiring.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (MulSemiringActionHomClass.toRingHomClass.{max u2 u1, u3, u2, u1} (MulSemiringActionHom.{u3, u2, u1} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3 Q (CommSemiring.toSemiring.{u1} Q _inst_4) _inst_5) M P Q _inst_1 (CommSemiring.toSemiring.{u2} P _inst_2) (CommSemiring.toSemiring.{u1} Q _inst_4) (MulSemiringAction.toDistribMulAction.{u3, u2} M P _inst_1 (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3) (MulSemiringAction.toDistribMulAction.{u3, u1} M Q _inst_1 (CommSemiring.toSemiring.{u1} Q _inst_4) _inst_5) (MulSemiringActionHom.instMulSemiringActionHomClassMulSemiringActionHomToDistribMulActionToDistribMulAction.{u3, u2, u1} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3 Q (CommSemiring.toSemiring.{u1} Q _inst_4) _inst_5)) g))
+<too large>
Case conversion may be inaccurate. Consider using '#align mul_semiring_action_hom.coe_polynomial MulSemiringActionHom.coe_polynomialₓ'. -/
@[simp]
theorem coe_polynomial (g : P →+*[M] Q) : (g.Polynomial : P[X] → Q[X]) = map g :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/8d33f09cd7089ecf074b4791907588245aec5d1b
@@ -217,7 +217,7 @@ protected noncomputable def polynomial (g : P →+*[M] Q) : P[X] →+*[M] Q[X]
lean 3 declaration is
forall {M : Type.{u1}} [_inst_1 : Monoid.{u1} M] {P : Type.{u2}} [_inst_2 : CommSemiring.{u2} P] [_inst_3 : MulSemiringAction.{u1, u2} M P _inst_1 (CommSemiring.toSemiring.{u2} P _inst_2)] {Q : Type.{u3}} [_inst_4 : CommSemiring.{u3} Q] [_inst_5 : MulSemiringAction.{u1, u3} M Q _inst_1 (CommSemiring.toSemiring.{u3} Q _inst_4)] (g : MulSemiringActionHom.{u1, u2, u3} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3 Q (CommSemiring.toSemiring.{u3} Q _inst_4) _inst_5), Eq.{max (succ u2) (succ u3)} ((fun (_x : MulSemiringActionHom.{u1, u2, u3} M _inst_1 (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.mulSemiringAction.{u1, u2} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3) (Polynomial.{u3} Q (CommSemiring.toSemiring.{u3} Q _inst_4)) (Polynomial.semiring.{u3} Q (CommSemiring.toSemiring.{u3} Q _inst_4)) (Polynomial.mulSemiringAction.{u1, u3} M _inst_1 Q (CommSemiring.toSemiring.{u3} Q _inst_4) _inst_5)) => (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) -> (Polynomial.{u3} Q (CommSemiring.toSemiring.{u3} Q _inst_4))) (MulSemiringActionHom.polynomial.{u1, u2, u3} M _inst_1 P _inst_2 _inst_3 Q _inst_4 _inst_5 g)) (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (MulSemiringActionHom.{u1, u2, u3} M _inst_1 (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.mulSemiringAction.{u1, u2} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3) (Polynomial.{u3} Q (CommSemiring.toSemiring.{u3} Q _inst_4)) (Polynomial.semiring.{u3} Q (CommSemiring.toSemiring.{u3} Q _inst_4)) (Polynomial.mulSemiringAction.{u1, u3} M _inst_1 Q (CommSemiring.toSemiring.{u3} Q _inst_4) _inst_5)) (fun (_x : MulSemiringActionHom.{u1, u2, u3} M _inst_1 (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.mulSemiringAction.{u1, u2} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3) (Polynomial.{u3} Q (CommSemiring.toSemiring.{u3} Q _inst_4)) (Polynomial.semiring.{u3} Q (CommSemiring.toSemiring.{u3} Q _inst_4)) (Polynomial.mulSemiringAction.{u1, u3} M _inst_1 Q (CommSemiring.toSemiring.{u3} Q _inst_4) _inst_5)) => (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) -> (Polynomial.{u3} Q (CommSemiring.toSemiring.{u3} Q _inst_4))) ([anonymous].{u1, u2, u3} M _inst_1 (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.mulSemiringAction.{u1, u2} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3) (Polynomial.{u3} Q (CommSemiring.toSemiring.{u3} Q _inst_4)) (Polynomial.semiring.{u3} Q (CommSemiring.toSemiring.{u3} Q _inst_4)) (Polynomial.mulSemiringAction.{u1, u3} M _inst_1 Q (CommSemiring.toSemiring.{u3} Q _inst_4) _inst_5)) (MulSemiringActionHom.polynomial.{u1, u2, u3} M _inst_1 P _inst_2 _inst_3 Q _inst_4 _inst_5 g)) (Polynomial.map.{u2, u3} P Q (CommSemiring.toSemiring.{u2} P _inst_2) (CommSemiring.toSemiring.{u3} Q _inst_4) ((fun (a : Sort.{max (succ u2) (succ u3)}) (b : Sort.{max (succ u2) (succ u3)}) [self : HasLiftT.{max (succ u2) (succ u3), max (succ u2) (succ u3)} a b] => self.0) (MulSemiringActionHom.{u1, u2, u3} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3 Q (CommSemiring.toSemiring.{u3} Q _inst_4) _inst_5) (RingHom.{u2, u3} P Q (Semiring.toNonAssocSemiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Semiring.toNonAssocSemiring.{u3} Q (CommSemiring.toSemiring.{u3} Q _inst_4))) (HasLiftT.mk.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (MulSemiringActionHom.{u1, u2, u3} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3 Q (CommSemiring.toSemiring.{u3} Q _inst_4) _inst_5) (RingHom.{u2, u3} P Q (Semiring.toNonAssocSemiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Semiring.toNonAssocSemiring.{u3} Q (CommSemiring.toSemiring.{u3} Q _inst_4))) (CoeTCₓ.coe.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (MulSemiringActionHom.{u1, u2, u3} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3 Q (CommSemiring.toSemiring.{u3} Q _inst_4) _inst_5) (RingHom.{u2, u3} P Q (Semiring.toNonAssocSemiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Semiring.toNonAssocSemiring.{u3} Q (CommSemiring.toSemiring.{u3} Q _inst_4))) (RingHom.hasCoeT.{max u2 u3, u2, u3} (MulSemiringActionHom.{u1, u2, u3} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3 Q (CommSemiring.toSemiring.{u3} Q _inst_4) _inst_5) P Q (Semiring.toNonAssocSemiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Semiring.toNonAssocSemiring.{u3} Q (CommSemiring.toSemiring.{u3} Q _inst_4)) (MulSemiringActionHomClass.toRingHomClass.{max u2 u3, u1, u2, u3} (MulSemiringActionHom.{u1, u2, u3} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3 Q (CommSemiring.toSemiring.{u3} Q _inst_4) _inst_5) M P Q _inst_1 (CommSemiring.toSemiring.{u2} P _inst_2) (CommSemiring.toSemiring.{u3} Q _inst_4) (MulSemiringAction.toDistribMulAction.{u1, u2} M P _inst_1 (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3) (MulSemiringAction.toDistribMulAction.{u1, u3} M Q _inst_1 (CommSemiring.toSemiring.{u3} Q _inst_4) _inst_5) (MulSemiringActionHom.mulSemiringActionHomClass.{u1, u2, u3} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3 Q (CommSemiring.toSemiring.{u3} Q _inst_4) _inst_5))))) g))
but is expected to have type
- forall {M : Type.{u3}} [_inst_1 : Monoid.{u3} M] {P : Type.{u2}} [_inst_2 : CommSemiring.{u2} P] [_inst_3 : MulSemiringAction.{u3, u2} M P _inst_1 (CommSemiring.toSemiring.{u2} P _inst_2)] {Q : Type.{u1}} [_inst_4 : CommSemiring.{u1} Q] [_inst_5 : MulSemiringAction.{u3, u1} M Q _inst_1 (CommSemiring.toSemiring.{u1} Q _inst_4)] (g : MulSemiringActionHom.{u3, u2, u1} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3 Q (CommSemiring.toSemiring.{u1} Q _inst_4) _inst_5), Eq.{max (succ u2) (succ u1)} (forall (a : Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)), (fun (x._@.Mathlib.Algebra.Hom.GroupAction._hyg.2186 : Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) => Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulSemiringActionHom.{u3, u2, u1} M _inst_1 (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u3, u2} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3) (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.semiring.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u3, u1} M _inst_1 Q (CommSemiring.toSemiring.{u1} Q _inst_4) _inst_5)) (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (fun (_x : Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) => (fun (x._@.Mathlib.Algebra.Hom.GroupAction._hyg.2186 : Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) => Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) _x) (SMulHomClass.toFunLike.{max u2 u1, u3, u2, u1} (MulSemiringActionHom.{u3, u2, u1} M _inst_1 (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u3, u2} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3) (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.semiring.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u3, u1} M _inst_1 Q (CommSemiring.toSemiring.{u1} Q _inst_4) _inst_5)) M (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (SMulZeroClass.toSMul.{u3, u2} M (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (AddMonoid.toZero.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (AddMonoidWithOne.toAddMonoid.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (NonAssocSemiring.toAddCommMonoidWithOne.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Semiring.toNonAssocSemiring.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2))))))) (DistribSMul.toSMulZeroClass.{u3, u2} M (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (AddMonoid.toAddZeroClass.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (AddMonoidWithOne.toAddMonoid.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (NonAssocSemiring.toAddCommMonoidWithOne.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Semiring.toNonAssocSemiring.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2))))))) (DistribMulAction.toDistribSMul.{u3, u2} M (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) _inst_1 (AddMonoidWithOne.toAddMonoid.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (NonAssocSemiring.toAddCommMonoidWithOne.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Semiring.toNonAssocSemiring.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)))))) (MulSemiringAction.toDistribMulAction.{u3, u2} M (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) _inst_1 (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u3, u2} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3))))) (SMulZeroClass.toSMul.{u3, u1} M (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (AddMonoid.toZero.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (AddMonoidWithOne.toAddMonoid.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (NonAssocSemiring.toAddCommMonoidWithOne.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Semiring.toNonAssocSemiring.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.semiring.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4))))))) (DistribSMul.toSMulZeroClass.{u3, u1} M (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (AddMonoid.toAddZeroClass.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (AddMonoidWithOne.toAddMonoid.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (NonAssocSemiring.toAddCommMonoidWithOne.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Semiring.toNonAssocSemiring.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.semiring.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4))))))) (DistribMulAction.toDistribSMul.{u3, u1} M (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) _inst_1 (AddMonoidWithOne.toAddMonoid.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (NonAssocSemiring.toAddCommMonoidWithOne.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Semiring.toNonAssocSemiring.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.semiring.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)))))) (MulSemiringAction.toDistribMulAction.{u3, u1} M (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) _inst_1 (Polynomial.semiring.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u3, u1} M _inst_1 Q (CommSemiring.toSemiring.{u1} Q _inst_4) _inst_5))))) (DistribMulActionHomClass.toSMulHomClass.{max u2 u1, u3, u2, u1} (MulSemiringActionHom.{u3, u2, u1} M _inst_1 (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u3, u2} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3) (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.semiring.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u3, u1} M _inst_1 Q (CommSemiring.toSemiring.{u1} Q _inst_4) _inst_5)) M (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) _inst_1 (AddMonoidWithOne.toAddMonoid.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (NonAssocSemiring.toAddCommMonoidWithOne.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Semiring.toNonAssocSemiring.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)))))) (AddMonoidWithOne.toAddMonoid.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (NonAssocSemiring.toAddCommMonoidWithOne.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Semiring.toNonAssocSemiring.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.semiring.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)))))) (MulSemiringAction.toDistribMulAction.{u3, u2} M (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) _inst_1 (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u3, u2} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3)) (MulSemiringAction.toDistribMulAction.{u3, u1} M (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) _inst_1 (Polynomial.semiring.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u3, u1} M _inst_1 Q (CommSemiring.toSemiring.{u1} Q _inst_4) _inst_5)) (MulSemiringActionHomClass.toDistribMulActionHomClass.{max u2 u1, u3, u2, u1} (MulSemiringActionHom.{u3, u2, u1} M _inst_1 (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u3, u2} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3) (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.semiring.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u3, u1} M _inst_1 Q (CommSemiring.toSemiring.{u1} Q _inst_4) _inst_5)) M (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) _inst_1 (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.semiring.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (MulSemiringAction.toDistribMulAction.{u3, u2} M (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) _inst_1 (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u3, u2} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3)) (MulSemiringAction.toDistribMulAction.{u3, u1} M (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) _inst_1 (Polynomial.semiring.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u3, u1} M _inst_1 Q (CommSemiring.toSemiring.{u1} Q _inst_4) _inst_5)) (MulSemiringActionHom.instMulSemiringActionHomClassMulSemiringActionHomToDistribMulActionToDistribMulAction.{u3, u2, u1} M _inst_1 (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u3, u2} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3) (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.semiring.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u3, u1} M _inst_1 Q (CommSemiring.toSemiring.{u1} Q _inst_4) _inst_5))))) (MulSemiringActionHom.polynomial.{u3, u2, u1} M _inst_1 P _inst_2 _inst_3 Q _inst_4 _inst_5 g)) (Polynomial.map.{u2, u1} P Q (CommSemiring.toSemiring.{u2} P _inst_2) (CommSemiring.toSemiring.{u1} Q _inst_4) (RingHomClass.toRingHom.{max u2 u1, u2, u1} (MulSemiringActionHom.{u3, u2, u1} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3 Q (CommSemiring.toSemiring.{u1} Q _inst_4) _inst_5) P Q (Semiring.toNonAssocSemiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Semiring.toNonAssocSemiring.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (MulSemiringActionHomClass.toRingHomClass.{max u2 u1, u3, u2, u1} (MulSemiringActionHom.{u3, u2, u1} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3 Q (CommSemiring.toSemiring.{u1} Q _inst_4) _inst_5) M P Q _inst_1 (CommSemiring.toSemiring.{u2} P _inst_2) (CommSemiring.toSemiring.{u1} Q _inst_4) (MulSemiringAction.toDistribMulAction.{u3, u2} M P _inst_1 (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3) (MulSemiringAction.toDistribMulAction.{u3, u1} M Q _inst_1 (CommSemiring.toSemiring.{u1} Q _inst_4) _inst_5) (MulSemiringActionHom.instMulSemiringActionHomClassMulSemiringActionHomToDistribMulActionToDistribMulAction.{u3, u2, u1} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3 Q (CommSemiring.toSemiring.{u1} Q _inst_4) _inst_5)) g))
+ forall {M : Type.{u3}} [_inst_1 : Monoid.{u3} M] {P : Type.{u2}} [_inst_2 : CommSemiring.{u2} P] [_inst_3 : MulSemiringAction.{u3, u2} M P _inst_1 (CommSemiring.toSemiring.{u2} P _inst_2)] {Q : Type.{u1}} [_inst_4 : CommSemiring.{u1} Q] [_inst_5 : MulSemiringAction.{u3, u1} M Q _inst_1 (CommSemiring.toSemiring.{u1} Q _inst_4)] (g : MulSemiringActionHom.{u3, u2, u1} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3 Q (CommSemiring.toSemiring.{u1} Q _inst_4) _inst_5), Eq.{max (succ u2) (succ u1)} (forall (a : Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)), (fun (x._@.Mathlib.Algebra.Hom.GroupAction._hyg.2187 : Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) => Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulSemiringActionHom.{u3, u2, u1} M _inst_1 (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u3, u2} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3) (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.semiring.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u3, u1} M _inst_1 Q (CommSemiring.toSemiring.{u1} Q _inst_4) _inst_5)) (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (fun (_x : Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) => (fun (x._@.Mathlib.Algebra.Hom.GroupAction._hyg.2187 : Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) => Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) _x) (SMulHomClass.toFunLike.{max u2 u1, u3, u2, u1} (MulSemiringActionHom.{u3, u2, u1} M _inst_1 (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u3, u2} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3) (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.semiring.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u3, u1} M _inst_1 Q (CommSemiring.toSemiring.{u1} Q _inst_4) _inst_5)) M (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (SMulZeroClass.toSMul.{u3, u2} M (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (AddMonoid.toZero.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (AddMonoidWithOne.toAddMonoid.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (NonAssocSemiring.toAddCommMonoidWithOne.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Semiring.toNonAssocSemiring.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2))))))) (DistribSMul.toSMulZeroClass.{u3, u2} M (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (AddMonoid.toAddZeroClass.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (AddMonoidWithOne.toAddMonoid.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (NonAssocSemiring.toAddCommMonoidWithOne.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Semiring.toNonAssocSemiring.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2))))))) (DistribMulAction.toDistribSMul.{u3, u2} M (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) _inst_1 (AddMonoidWithOne.toAddMonoid.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (NonAssocSemiring.toAddCommMonoidWithOne.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Semiring.toNonAssocSemiring.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)))))) (MulSemiringAction.toDistribMulAction.{u3, u2} M (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) _inst_1 (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u3, u2} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3))))) (SMulZeroClass.toSMul.{u3, u1} M (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (AddMonoid.toZero.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (AddMonoidWithOne.toAddMonoid.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (NonAssocSemiring.toAddCommMonoidWithOne.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Semiring.toNonAssocSemiring.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.semiring.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4))))))) (DistribSMul.toSMulZeroClass.{u3, u1} M (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (AddMonoid.toAddZeroClass.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (AddMonoidWithOne.toAddMonoid.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (NonAssocSemiring.toAddCommMonoidWithOne.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Semiring.toNonAssocSemiring.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.semiring.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4))))))) (DistribMulAction.toDistribSMul.{u3, u1} M (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) _inst_1 (AddMonoidWithOne.toAddMonoid.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (NonAssocSemiring.toAddCommMonoidWithOne.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Semiring.toNonAssocSemiring.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.semiring.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)))))) (MulSemiringAction.toDistribMulAction.{u3, u1} M (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) _inst_1 (Polynomial.semiring.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u3, u1} M _inst_1 Q (CommSemiring.toSemiring.{u1} Q _inst_4) _inst_5))))) (DistribMulActionHomClass.toSMulHomClass.{max u2 u1, u3, u2, u1} (MulSemiringActionHom.{u3, u2, u1} M _inst_1 (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u3, u2} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3) (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.semiring.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u3, u1} M _inst_1 Q (CommSemiring.toSemiring.{u1} Q _inst_4) _inst_5)) M (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) _inst_1 (AddMonoidWithOne.toAddMonoid.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (NonAssocSemiring.toAddCommMonoidWithOne.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Semiring.toNonAssocSemiring.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)))))) (AddMonoidWithOne.toAddMonoid.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (NonAssocSemiring.toAddCommMonoidWithOne.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Semiring.toNonAssocSemiring.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.semiring.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)))))) (MulSemiringAction.toDistribMulAction.{u3, u2} M (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) _inst_1 (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u3, u2} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3)) (MulSemiringAction.toDistribMulAction.{u3, u1} M (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) _inst_1 (Polynomial.semiring.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u3, u1} M _inst_1 Q (CommSemiring.toSemiring.{u1} Q _inst_4) _inst_5)) (MulSemiringActionHomClass.toDistribMulActionHomClass.{max u2 u1, u3, u2, u1} (MulSemiringActionHom.{u3, u2, u1} M _inst_1 (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u3, u2} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3) (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.semiring.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u3, u1} M _inst_1 Q (CommSemiring.toSemiring.{u1} Q _inst_4) _inst_5)) M (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) _inst_1 (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.semiring.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (MulSemiringAction.toDistribMulAction.{u3, u2} M (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) _inst_1 (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u3, u2} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3)) (MulSemiringAction.toDistribMulAction.{u3, u1} M (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) _inst_1 (Polynomial.semiring.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u3, u1} M _inst_1 Q (CommSemiring.toSemiring.{u1} Q _inst_4) _inst_5)) (MulSemiringActionHom.instMulSemiringActionHomClassMulSemiringActionHomToDistribMulActionToDistribMulAction.{u3, u2, u1} M _inst_1 (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u3, u2} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3) (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.semiring.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u3, u1} M _inst_1 Q (CommSemiring.toSemiring.{u1} Q _inst_4) _inst_5))))) (MulSemiringActionHom.polynomial.{u3, u2, u1} M _inst_1 P _inst_2 _inst_3 Q _inst_4 _inst_5 g)) (Polynomial.map.{u2, u1} P Q (CommSemiring.toSemiring.{u2} P _inst_2) (CommSemiring.toSemiring.{u1} Q _inst_4) (RingHomClass.toRingHom.{max u2 u1, u2, u1} (MulSemiringActionHom.{u3, u2, u1} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3 Q (CommSemiring.toSemiring.{u1} Q _inst_4) _inst_5) P Q (Semiring.toNonAssocSemiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Semiring.toNonAssocSemiring.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (MulSemiringActionHomClass.toRingHomClass.{max u2 u1, u3, u2, u1} (MulSemiringActionHom.{u3, u2, u1} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3 Q (CommSemiring.toSemiring.{u1} Q _inst_4) _inst_5) M P Q _inst_1 (CommSemiring.toSemiring.{u2} P _inst_2) (CommSemiring.toSemiring.{u1} Q _inst_4) (MulSemiringAction.toDistribMulAction.{u3, u2} M P _inst_1 (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3) (MulSemiringAction.toDistribMulAction.{u3, u1} M Q _inst_1 (CommSemiring.toSemiring.{u1} Q _inst_4) _inst_5) (MulSemiringActionHom.instMulSemiringActionHomClassMulSemiringActionHomToDistribMulActionToDistribMulAction.{u3, u2, u1} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3 Q (CommSemiring.toSemiring.{u1} Q _inst_4) _inst_5)) g))
Case conversion may be inaccurate. Consider using '#align mul_semiring_action_hom.coe_polynomial MulSemiringActionHom.coe_polynomialₓ'. -/
@[simp]
theorem coe_polynomial (g : P →+*[M] Q) : (g.Polynomial : P[X] → Q[X]) = map g :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/08e1d8d4d989df3a6df86f385e9053ec8a372cc1
@@ -146,7 +146,7 @@ theorem prodXSubSmul.monic (x : R) : (prodXSubSmul G R x).Monic :=
lean 3 declaration is
forall (G : Type.{u1}) [_inst_2 : Group.{u1} G] [_inst_3 : Fintype.{u1} G] (R : Type.{u2}) [_inst_4 : CommRing.{u2} R] [_inst_5 : MulSemiringAction.{u1, u2} G R (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_2)) (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))] (x : R), Eq.{succ u2} R (Polynomial.eval.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) x (prodXSubSmul.{u1, u2} G _inst_2 _inst_3 R _inst_4 _inst_5 x)) (OfNat.ofNat.{u2} R 0 (OfNat.mk.{u2} R 0 (Zero.zero.{u2} R (MulZeroClass.toHasZero.{u2} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))))))))
but is expected to have type
- forall (G : Type.{u1}) [_inst_2 : Group.{u1} G] [_inst_3 : Fintype.{u1} G] (R : Type.{u2}) [_inst_4 : CommRing.{u2} R] [_inst_5 : MulSemiringAction.{u1, u2} G R (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_2)) (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))] (x : R), Eq.{succ u2} R (Polynomial.eval.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) x (prodXSubSmul.{u1, u2} G _inst_2 _inst_3 R _inst_4 _inst_5 x)) (OfNat.ofNat.{u2} R 0 (Zero.toOfNat0.{u2} R (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)))))
+ forall (G : Type.{u1}) [_inst_2 : Group.{u1} G] [_inst_3 : Fintype.{u1} G] (R : Type.{u2}) [_inst_4 : CommRing.{u2} R] [_inst_5 : MulSemiringAction.{u1, u2} G R (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_2)) (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))] (x : R), Eq.{succ u2} R (Polynomial.eval.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) x (prodXSubSmul.{u1, u2} G _inst_2 _inst_3 R _inst_4 _inst_5 x)) (OfNat.ofNat.{u2} R 0 (Zero.toOfNat0.{u2} R (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)))))
Case conversion may be inaccurate. Consider using '#align prod_X_sub_smul.eval prodXSubSmul.evalₓ'. -/
theorem prodXSubSmul.eval (x : R) : (prodXSubSmul G R x).eval x = 0 :=
(MonoidHom.map_prod ((Polynomial.aeval x).toRingHom.toMonoidHom : R[X] →* R) _ _).trans <|
@@ -157,7 +157,7 @@ theorem prodXSubSmul.eval (x : R) : (prodXSubSmul G R x).eval x = 0 :=
lean 3 declaration is
forall (G : Type.{u1}) [_inst_2 : Group.{u1} G] [_inst_3 : Fintype.{u1} G] (R : Type.{u2}) [_inst_4 : CommRing.{u2} R] [_inst_5 : MulSemiringAction.{u1, u2} G R (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_2)) (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))] (x : R) (g : G), Eq.{succ u2} (Polynomial.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) (SMul.smul.{u1, u2} G (Polynomial.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) (SMulZeroClass.toHasSmul.{u1, u2} G (Polynomial.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) (Polynomial.zero.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) (Polynomial.smulZeroClass.{u2, u1} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) G (DistribSMul.toSmulZeroClass.{u1, u2} G R (AddMonoid.toAddZeroClass.{u2} R (AddMonoidWithOne.toAddMonoid.{u2} R (AddGroupWithOne.toAddMonoidWithOne.{u2} R (AddCommGroupWithOne.toAddGroupWithOne.{u2} R (Ring.toAddCommGroupWithOne.{u2} R (CommRing.toRing.{u2} R _inst_4)))))) (DistribMulAction.toDistribSMul.{u1, u2} G R (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_2)) (AddMonoidWithOne.toAddMonoid.{u2} R (AddGroupWithOne.toAddMonoidWithOne.{u2} R (AddCommGroupWithOne.toAddGroupWithOne.{u2} R (Ring.toAddCommGroupWithOne.{u2} R (CommRing.toRing.{u2} R _inst_4))))) (MulSemiringAction.toDistribMulAction.{u1, u2} G R (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_2)) (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) _inst_5))))) g (prodXSubSmul.{u1, u2} G _inst_2 _inst_3 R _inst_4 _inst_5 x)) (prodXSubSmul.{u1, u2} G _inst_2 _inst_3 R _inst_4 _inst_5 x)
but is expected to have type
- forall (G : Type.{u1}) [_inst_2 : Group.{u1} G] [_inst_3 : Fintype.{u1} G] (R : Type.{u2}) [_inst_4 : CommRing.{u2} R] [_inst_5 : MulSemiringAction.{u1, u2} G R (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_2)) (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))] (x : R) (g : G), Eq.{succ u2} (Polynomial.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) (HSMul.hSMul.{u1, u2, u2} G (Polynomial.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) (Polynomial.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) (instHSMul.{u1, u2} G (Polynomial.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) (SMulZeroClass.toSMul.{u1, u2} G (Polynomial.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) (Polynomial.zero.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) (Polynomial.smulZeroClass.{u2, u1} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) G (DistribSMul.toSMulZeroClass.{u1, u2} G R (AddMonoid.toAddZeroClass.{u2} R (AddMonoidWithOne.toAddMonoid.{u2} R (AddGroupWithOne.toAddMonoidWithOne.{u2} R (Ring.toAddGroupWithOne.{u2} R (CommRing.toRing.{u2} R _inst_4))))) (DistribMulAction.toDistribSMul.{u1, u2} G R (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_2)) (AddMonoidWithOne.toAddMonoid.{u2} R (AddGroupWithOne.toAddMonoidWithOne.{u2} R (Ring.toAddGroupWithOne.{u2} R (CommRing.toRing.{u2} R _inst_4)))) (MulSemiringAction.toDistribMulAction.{u1, u2} G R (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_2)) (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) _inst_5)))))) g (prodXSubSmul.{u1, u2} G _inst_2 _inst_3 R _inst_4 _inst_5 x)) (prodXSubSmul.{u1, u2} G _inst_2 _inst_3 R _inst_4 _inst_5 x)
+ forall (G : Type.{u1}) [_inst_2 : Group.{u1} G] [_inst_3 : Fintype.{u1} G] (R : Type.{u2}) [_inst_4 : CommRing.{u2} R] [_inst_5 : MulSemiringAction.{u1, u2} G R (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_2)) (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))] (x : R) (g : G), Eq.{succ u2} (Polynomial.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (HSMul.hSMul.{u1, u2, u2} G (Polynomial.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (Polynomial.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (instHSMul.{u1, u2} G (Polynomial.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (SMulZeroClass.toSMul.{u1, u2} G (Polynomial.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (Polynomial.zero.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (Polynomial.smulZeroClass.{u2, u1} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) G (DistribSMul.toSMulZeroClass.{u1, u2} G R (AddMonoid.toAddZeroClass.{u2} R (AddMonoidWithOne.toAddMonoid.{u2} R (AddGroupWithOne.toAddMonoidWithOne.{u2} R (Ring.toAddGroupWithOne.{u2} R (CommRing.toRing.{u2} R _inst_4))))) (DistribMulAction.toDistribSMul.{u1, u2} G R (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_2)) (AddMonoidWithOne.toAddMonoid.{u2} R (AddGroupWithOne.toAddMonoidWithOne.{u2} R (Ring.toAddGroupWithOne.{u2} R (CommRing.toRing.{u2} R _inst_4)))) (MulSemiringAction.toDistribMulAction.{u1, u2} G R (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_2)) (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) _inst_5)))))) g (prodXSubSmul.{u1, u2} G _inst_2 _inst_3 R _inst_4 _inst_5 x)) (prodXSubSmul.{u1, u2} G _inst_2 _inst_3 R _inst_4 _inst_5 x)
Case conversion may be inaccurate. Consider using '#align prod_X_sub_smul.smul prodXSubSmul.smulₓ'. -/
theorem prodXSubSmul.smul (x : R) (g : G) : g • prodXSubSmul G R x = prodXSubSmul G R x :=
Finset.smul_prod.trans <|
@@ -169,7 +169,7 @@ theorem prodXSubSmul.smul (x : R) (g : G) : g • prodXSubSmul G R x = prodXSubS
lean 3 declaration is
forall (G : Type.{u1}) [_inst_2 : Group.{u1} G] [_inst_3 : Fintype.{u1} G] (R : Type.{u2}) [_inst_4 : CommRing.{u2} R] [_inst_5 : MulSemiringAction.{u1, u2} G R (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_2)) (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))] (x : R) (g : G) (n : Nat), Eq.{succ u2} R (SMul.smul.{u1, u2} G R (SMulZeroClass.toHasSmul.{u1, u2} G R (AddZeroClass.toHasZero.{u2} R (AddMonoid.toAddZeroClass.{u2} R (AddMonoidWithOne.toAddMonoid.{u2} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} R (NonAssocSemiring.toAddCommMonoidWithOne.{u2} R (Semiring.toNonAssocSemiring.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)))))))) (DistribSMul.toSmulZeroClass.{u1, u2} G R (AddMonoid.toAddZeroClass.{u2} R (AddMonoidWithOne.toAddMonoid.{u2} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} R (NonAssocSemiring.toAddCommMonoidWithOne.{u2} R (Semiring.toNonAssocSemiring.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))))))) (DistribMulAction.toDistribSMul.{u1, u2} G R (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_2)) (AddMonoidWithOne.toAddMonoid.{u2} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} R (NonAssocSemiring.toAddCommMonoidWithOne.{u2} R (Semiring.toNonAssocSemiring.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)))))) (MulSemiringAction.toDistribMulAction.{u1, u2} G R (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_2)) (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) _inst_5)))) g (Polynomial.coeff.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (prodXSubSmul.{u1, u2} G _inst_2 _inst_3 R _inst_4 _inst_5 x) n)) (Polynomial.coeff.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (prodXSubSmul.{u1, u2} G _inst_2 _inst_3 R _inst_4 _inst_5 x) n)
but is expected to have type
- forall (G : Type.{u1}) [_inst_2 : Group.{u1} G] [_inst_3 : Fintype.{u1} G] (R : Type.{u2}) [_inst_4 : CommRing.{u2} R] [_inst_5 : MulSemiringAction.{u1, u2} G R (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_2)) (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))] (x : R) (g : G) (n : Nat), Eq.{succ u2} R (HSMul.hSMul.{u1, u2, u2} G R R (instHSMul.{u1, u2} G R (SMulZeroClass.toSMul.{u1, u2} G R (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (DistribSMul.toSMulZeroClass.{u1, u2} G R (AddMonoid.toAddZeroClass.{u2} R (AddMonoidWithOne.toAddMonoid.{u2} R (AddGroupWithOne.toAddMonoidWithOne.{u2} R (Ring.toAddGroupWithOne.{u2} R (CommRing.toRing.{u2} R _inst_4))))) (DistribMulAction.toDistribSMul.{u1, u2} G R (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_2)) (AddMonoidWithOne.toAddMonoid.{u2} R (AddGroupWithOne.toAddMonoidWithOne.{u2} R (Ring.toAddGroupWithOne.{u2} R (CommRing.toRing.{u2} R _inst_4)))) (MulSemiringAction.toDistribMulAction.{u1, u2} G R (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_2)) (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) _inst_5))))) g (Polynomial.coeff.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (prodXSubSmul.{u1, u2} G _inst_2 _inst_3 R _inst_4 _inst_5 x) n)) (Polynomial.coeff.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (prodXSubSmul.{u1, u2} G _inst_2 _inst_3 R _inst_4 _inst_5 x) n)
+ forall (G : Type.{u1}) [_inst_2 : Group.{u1} G] [_inst_3 : Fintype.{u1} G] (R : Type.{u2}) [_inst_4 : CommRing.{u2} R] [_inst_5 : MulSemiringAction.{u1, u2} G R (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_2)) (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))] (x : R) (g : G) (n : Nat), Eq.{succ u2} R (HSMul.hSMul.{u1, u2, u2} G R R (instHSMul.{u1, u2} G R (SMulZeroClass.toSMul.{u1, u2} G R (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (DistribSMul.toSMulZeroClass.{u1, u2} G R (AddMonoid.toAddZeroClass.{u2} R (AddMonoidWithOne.toAddMonoid.{u2} R (AddGroupWithOne.toAddMonoidWithOne.{u2} R (Ring.toAddGroupWithOne.{u2} R (CommRing.toRing.{u2} R _inst_4))))) (DistribMulAction.toDistribSMul.{u1, u2} G R (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_2)) (AddMonoidWithOne.toAddMonoid.{u2} R (AddGroupWithOne.toAddMonoidWithOne.{u2} R (Ring.toAddGroupWithOne.{u2} R (CommRing.toRing.{u2} R _inst_4)))) (MulSemiringAction.toDistribMulAction.{u1, u2} G R (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_2)) (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) _inst_5))))) g (Polynomial.coeff.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (prodXSubSmul.{u1, u2} G _inst_2 _inst_3 R _inst_4 _inst_5 x) n)) (Polynomial.coeff.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (prodXSubSmul.{u1, u2} G _inst_2 _inst_3 R _inst_4 _inst_5 x) n)
Case conversion may be inaccurate. Consider using '#align prod_X_sub_smul.coeff prodXSubSmul.coeffₓ'. -/
theorem prodXSubSmul.coeff (x : R) (g : G) (n : ℕ) :
g • (prodXSubSmul G R x).coeff n = (prodXSubSmul G R x).coeff n := by
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce86f4e05e9a9b8da5e316b22c76ce76440c56a1
@@ -155,7 +155,7 @@ theorem prodXSubSmul.eval (x : R) : (prodXSubSmul G R x).eval x = 0 :=
/- warning: prod_X_sub_smul.smul -> prodXSubSmul.smul is a dubious translation:
lean 3 declaration is
- forall (G : Type.{u1}) [_inst_2 : Group.{u1} G] [_inst_3 : Fintype.{u1} G] (R : Type.{u2}) [_inst_4 : CommRing.{u2} R] [_inst_5 : MulSemiringAction.{u1, u2} G R (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_2)) (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))] (x : R) (g : G), Eq.{succ u2} (Polynomial.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) (SMul.smul.{u1, u2} G (Polynomial.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) (SMulZeroClass.toHasSmul.{u1, u2} G (Polynomial.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) (Polynomial.zero.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) (Polynomial.smulZeroClass.{u2, u1} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) G (DistribSMul.toSmulZeroClass.{u1, u2} G R (AddMonoid.toAddZeroClass.{u2} R (AddMonoidWithOne.toAddMonoid.{u2} R (AddGroupWithOne.toAddMonoidWithOne.{u2} R (NonAssocRing.toAddGroupWithOne.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))))) (DistribMulAction.toDistribSMul.{u1, u2} G R (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_2)) (AddMonoidWithOne.toAddMonoid.{u2} R (AddGroupWithOne.toAddMonoidWithOne.{u2} R (NonAssocRing.toAddGroupWithOne.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4))))) (MulSemiringAction.toDistribMulAction.{u1, u2} G R (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_2)) (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) _inst_5))))) g (prodXSubSmul.{u1, u2} G _inst_2 _inst_3 R _inst_4 _inst_5 x)) (prodXSubSmul.{u1, u2} G _inst_2 _inst_3 R _inst_4 _inst_5 x)
+ forall (G : Type.{u1}) [_inst_2 : Group.{u1} G] [_inst_3 : Fintype.{u1} G] (R : Type.{u2}) [_inst_4 : CommRing.{u2} R] [_inst_5 : MulSemiringAction.{u1, u2} G R (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_2)) (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))] (x : R) (g : G), Eq.{succ u2} (Polynomial.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) (SMul.smul.{u1, u2} G (Polynomial.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) (SMulZeroClass.toHasSmul.{u1, u2} G (Polynomial.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) (Polynomial.zero.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) (Polynomial.smulZeroClass.{u2, u1} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) G (DistribSMul.toSmulZeroClass.{u1, u2} G R (AddMonoid.toAddZeroClass.{u2} R (AddMonoidWithOne.toAddMonoid.{u2} R (AddGroupWithOne.toAddMonoidWithOne.{u2} R (AddCommGroupWithOne.toAddGroupWithOne.{u2} R (Ring.toAddCommGroupWithOne.{u2} R (CommRing.toRing.{u2} R _inst_4)))))) (DistribMulAction.toDistribSMul.{u1, u2} G R (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_2)) (AddMonoidWithOne.toAddMonoid.{u2} R (AddGroupWithOne.toAddMonoidWithOne.{u2} R (AddCommGroupWithOne.toAddGroupWithOne.{u2} R (Ring.toAddCommGroupWithOne.{u2} R (CommRing.toRing.{u2} R _inst_4))))) (MulSemiringAction.toDistribMulAction.{u1, u2} G R (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_2)) (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) _inst_5))))) g (prodXSubSmul.{u1, u2} G _inst_2 _inst_3 R _inst_4 _inst_5 x)) (prodXSubSmul.{u1, u2} G _inst_2 _inst_3 R _inst_4 _inst_5 x)
but is expected to have type
forall (G : Type.{u1}) [_inst_2 : Group.{u1} G] [_inst_3 : Fintype.{u1} G] (R : Type.{u2}) [_inst_4 : CommRing.{u2} R] [_inst_5 : MulSemiringAction.{u1, u2} G R (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_2)) (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))] (x : R) (g : G), Eq.{succ u2} (Polynomial.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) (HSMul.hSMul.{u1, u2, u2} G (Polynomial.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) (Polynomial.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) (instHSMul.{u1, u2} G (Polynomial.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) (SMulZeroClass.toSMul.{u1, u2} G (Polynomial.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) (Polynomial.zero.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) (Polynomial.smulZeroClass.{u2, u1} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) G (DistribSMul.toSMulZeroClass.{u1, u2} G R (AddMonoid.toAddZeroClass.{u2} R (AddMonoidWithOne.toAddMonoid.{u2} R (AddGroupWithOne.toAddMonoidWithOne.{u2} R (Ring.toAddGroupWithOne.{u2} R (CommRing.toRing.{u2} R _inst_4))))) (DistribMulAction.toDistribSMul.{u1, u2} G R (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_2)) (AddMonoidWithOne.toAddMonoid.{u2} R (AddGroupWithOne.toAddMonoidWithOne.{u2} R (Ring.toAddGroupWithOne.{u2} R (CommRing.toRing.{u2} R _inst_4)))) (MulSemiringAction.toDistribMulAction.{u1, u2} G R (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_2)) (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) _inst_5)))))) g (prodXSubSmul.{u1, u2} G _inst_2 _inst_3 R _inst_4 _inst_5 x)) (prodXSubSmul.{u1, u2} G _inst_2 _inst_3 R _inst_4 _inst_5 x)
Case conversion may be inaccurate. Consider using '#align prod_X_sub_smul.smul prodXSubSmul.smulₓ'. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce7e9d53d4bbc38065db3b595cd5bd73c323bc1d
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Kenny Lau
! This file was ported from Lean 3 source module algebra.polynomial.group_ring_action
-! leanprover-community/mathlib commit afad8e438d03f9d89da2914aa06cb4964ba87a18
+! leanprover-community/mathlib commit 10bf4f825ad729c5653adc039dafa3622e7f93c9
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -17,6 +17,9 @@ import Mathbin.GroupTheory.GroupAction.Quotient
/-!
# Group action on rings applied to polynomials
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
This file contains instances and definitions relating `mul_semiring_action` to `polynomial`.
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/2196ab363eb097c008d4497125e0dde23fb36db2
@@ -31,6 +31,12 @@ variable (R : Type _) [Semiring R]
variable {M}
+/- warning: polynomial.smul_eq_map -> Polynomial.smul_eq_map is a dubious translation:
+lean 3 declaration is
+ forall {M : Type.{u1}} [_inst_1 : Monoid.{u1} M] (R : Type.{u2}) [_inst_2 : Semiring.{u2} R] [_inst_3 : MulSemiringAction.{u1, u2} M R _inst_1 _inst_2] (m : M), Eq.{succ u2} ((Polynomial.{u2} R _inst_2) -> (Polynomial.{u2} R _inst_2)) (SMul.smul.{u1, u2} M (Polynomial.{u2} R _inst_2) (SMulZeroClass.toHasSmul.{u1, u2} M (Polynomial.{u2} R _inst_2) (Polynomial.zero.{u2} R _inst_2) (Polynomial.smulZeroClass.{u2, u1} R _inst_2 M (DistribSMul.toSmulZeroClass.{u1, u2} M R (AddMonoid.toAddZeroClass.{u2} R (AddMonoidWithOne.toAddMonoid.{u2} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} R (NonAssocSemiring.toAddCommMonoidWithOne.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_2))))) (DistribMulAction.toDistribSMul.{u1, u2} M R _inst_1 (AddMonoidWithOne.toAddMonoid.{u2} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} R (NonAssocSemiring.toAddCommMonoidWithOne.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_2)))) (MulSemiringAction.toDistribMulAction.{u1, u2} M R _inst_1 _inst_2 _inst_3))))) m) (Polynomial.map.{u2, u2} R R _inst_2 _inst_2 (MulSemiringAction.toRingHom.{u2, u1} M _inst_1 R _inst_2 _inst_3 m))
+but is expected to have type
+ forall {M : Type.{u2}} [_inst_1 : Monoid.{u2} M] (R : Type.{u1}) [_inst_2 : Semiring.{u1} R] [_inst_3 : MulSemiringAction.{u2, u1} M R _inst_1 _inst_2] (m : M), Eq.{succ u1} ((Polynomial.{u1} R _inst_2) -> (Polynomial.{u1} R _inst_2)) (HSMul.hSMul.{u2, u1, u1} M (Polynomial.{u1} R _inst_2) (Polynomial.{u1} R _inst_2) (instHSMul.{u2, u1} M (Polynomial.{u1} R _inst_2) (SMulZeroClass.toSMul.{u2, u1} M (Polynomial.{u1} R _inst_2) (Polynomial.zero.{u1} R _inst_2) (Polynomial.smulZeroClass.{u1, u2} R _inst_2 M (DistribSMul.toSMulZeroClass.{u2, u1} M R (AddMonoid.toAddZeroClass.{u1} R (AddMonoidWithOne.toAddMonoid.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_2))))) (DistribMulAction.toDistribSMul.{u2, u1} M R _inst_1 (AddMonoidWithOne.toAddMonoid.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_2)))) (MulSemiringAction.toDistribMulAction.{u2, u1} M R _inst_1 _inst_2 _inst_3)))))) m) (Polynomial.map.{u1, u1} R R _inst_2 _inst_2 (MulSemiringAction.toRingHom.{u1, u2} M _inst_1 R _inst_2 _inst_3 m))
+Case conversion may be inaccurate. Consider using '#align polynomial.smul_eq_map Polynomial.smul_eq_mapₓ'. -/
theorem smul_eq_map [MulSemiringAction M R] (m : M) :
(· • ·) m = map (MulSemiringAction.toRingHom M R m) :=
by
@@ -59,13 +65,25 @@ variable {M R}
variable [MulSemiringAction M R]
+/- warning: polynomial.smul_X -> Polynomial.smul_X is a dubious translation:
+lean 3 declaration is
+ forall {M : Type.{u1}} [_inst_1 : Monoid.{u1} M] {R : Type.{u2}} [_inst_2 : Semiring.{u2} R] [_inst_3 : MulSemiringAction.{u1, u2} M R _inst_1 _inst_2] (m : M), Eq.{succ u2} (Polynomial.{u2} R _inst_2) (SMul.smul.{u1, u2} M (Polynomial.{u2} R _inst_2) (SMulZeroClass.toHasSmul.{u1, u2} M (Polynomial.{u2} R _inst_2) (Polynomial.zero.{u2} R _inst_2) (Polynomial.smulZeroClass.{u2, u1} R _inst_2 M (DistribSMul.toSmulZeroClass.{u1, u2} M R (AddMonoid.toAddZeroClass.{u2} R (AddMonoidWithOne.toAddMonoid.{u2} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} R (NonAssocSemiring.toAddCommMonoidWithOne.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_2))))) (DistribMulAction.toDistribSMul.{u1, u2} M R _inst_1 (AddMonoidWithOne.toAddMonoid.{u2} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} R (NonAssocSemiring.toAddCommMonoidWithOne.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_2)))) (MulSemiringAction.toDistribMulAction.{u1, u2} M R _inst_1 _inst_2 _inst_3))))) m (Polynomial.X.{u2} R _inst_2)) (Polynomial.X.{u2} R _inst_2)
+but is expected to have type
+ forall {M : Type.{u1}} [_inst_1 : Monoid.{u1} M] {R : Type.{u2}} [_inst_2 : Semiring.{u2} R] [_inst_3 : MulSemiringAction.{u1, u2} M R _inst_1 _inst_2] (m : M), Eq.{succ u2} (Polynomial.{u2} R _inst_2) (HSMul.hSMul.{u1, u2, u2} M (Polynomial.{u2} R _inst_2) (Polynomial.{u2} R _inst_2) (instHSMul.{u1, u2} M (Polynomial.{u2} R _inst_2) (SMulZeroClass.toSMul.{u1, u2} M (Polynomial.{u2} R _inst_2) (Polynomial.zero.{u2} R _inst_2) (Polynomial.smulZeroClass.{u2, u1} R _inst_2 M (DistribSMul.toSMulZeroClass.{u1, u2} M R (AddMonoid.toAddZeroClass.{u2} R (AddMonoidWithOne.toAddMonoid.{u2} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} R (NonAssocSemiring.toAddCommMonoidWithOne.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_2))))) (DistribMulAction.toDistribSMul.{u1, u2} M R _inst_1 (AddMonoidWithOne.toAddMonoid.{u2} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} R (NonAssocSemiring.toAddCommMonoidWithOne.{u2} R (Semiring.toNonAssocSemiring.{u2} R _inst_2)))) (MulSemiringAction.toDistribMulAction.{u1, u2} M R _inst_1 _inst_2 _inst_3)))))) m (Polynomial.X.{u2} R _inst_2)) (Polynomial.X.{u2} R _inst_2)
+Case conversion may be inaccurate. Consider using '#align polynomial.smul_X Polynomial.smul_Xₓ'. -/
@[simp]
-theorem smul_x (m : M) : (m • X : R[X]) = X :=
+theorem smul_X (m : M) : (m • X : R[X]) = X :=
(smul_eq_map R m).symm ▸ map_X _
-#align polynomial.smul_X Polynomial.smul_x
+#align polynomial.smul_X Polynomial.smul_X
variable (S : Type _) [CommSemiring S] [MulSemiringAction M S]
+/- warning: polynomial.smul_eval_smul -> Polynomial.smul_eval_smul is a dubious translation:
+lean 3 declaration is
+ forall {M : Type.{u1}} [_inst_1 : Monoid.{u1} M] (S : Type.{u2}) [_inst_4 : CommSemiring.{u2} S] [_inst_5 : MulSemiringAction.{u1, u2} M S _inst_1 (CommSemiring.toSemiring.{u2} S _inst_4)] (m : M) (f : Polynomial.{u2} S (CommSemiring.toSemiring.{u2} S _inst_4)) (x : S), Eq.{succ u2} S (Polynomial.eval.{u2} S (CommSemiring.toSemiring.{u2} S _inst_4) (SMul.smul.{u1, u2} M S (SMulZeroClass.toHasSmul.{u1, u2} M S (AddZeroClass.toHasZero.{u2} S (AddMonoid.toAddZeroClass.{u2} S (AddMonoidWithOne.toAddMonoid.{u2} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} S (NonAssocSemiring.toAddCommMonoidWithOne.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_4))))))) (DistribSMul.toSmulZeroClass.{u1, u2} M S (AddMonoid.toAddZeroClass.{u2} S (AddMonoidWithOne.toAddMonoid.{u2} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} S (NonAssocSemiring.toAddCommMonoidWithOne.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_4)))))) (DistribMulAction.toDistribSMul.{u1, u2} M S _inst_1 (AddMonoidWithOne.toAddMonoid.{u2} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} S (NonAssocSemiring.toAddCommMonoidWithOne.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_4))))) (MulSemiringAction.toDistribMulAction.{u1, u2} M S _inst_1 (CommSemiring.toSemiring.{u2} S _inst_4) _inst_5)))) m x) (SMul.smul.{u1, u2} M (Polynomial.{u2} S (CommSemiring.toSemiring.{u2} S _inst_4)) (SMulZeroClass.toHasSmul.{u1, u2} M (Polynomial.{u2} S (CommSemiring.toSemiring.{u2} S _inst_4)) (Polynomial.zero.{u2} S (CommSemiring.toSemiring.{u2} S _inst_4)) (Polynomial.smulZeroClass.{u2, u1} S (CommSemiring.toSemiring.{u2} S _inst_4) M (DistribSMul.toSmulZeroClass.{u1, u2} M S (AddMonoid.toAddZeroClass.{u2} S (AddMonoidWithOne.toAddMonoid.{u2} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} S (NonAssocSemiring.toAddCommMonoidWithOne.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_4)))))) (DistribMulAction.toDistribSMul.{u1, u2} M S _inst_1 (AddMonoidWithOne.toAddMonoid.{u2} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} S (NonAssocSemiring.toAddCommMonoidWithOne.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_4))))) (MulSemiringAction.toDistribMulAction.{u1, u2} M S _inst_1 (CommSemiring.toSemiring.{u2} S _inst_4) _inst_5))))) m f)) (SMul.smul.{u1, u2} M S (SMulZeroClass.toHasSmul.{u1, u2} M S (AddZeroClass.toHasZero.{u2} S (AddMonoid.toAddZeroClass.{u2} S (AddMonoidWithOne.toAddMonoid.{u2} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} S (NonAssocSemiring.toAddCommMonoidWithOne.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_4))))))) (DistribSMul.toSmulZeroClass.{u1, u2} M S (AddMonoid.toAddZeroClass.{u2} S (AddMonoidWithOne.toAddMonoid.{u2} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} S (NonAssocSemiring.toAddCommMonoidWithOne.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_4)))))) (DistribMulAction.toDistribSMul.{u1, u2} M S _inst_1 (AddMonoidWithOne.toAddMonoid.{u2} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} S (NonAssocSemiring.toAddCommMonoidWithOne.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_4))))) (MulSemiringAction.toDistribMulAction.{u1, u2} M S _inst_1 (CommSemiring.toSemiring.{u2} S _inst_4) _inst_5)))) m (Polynomial.eval.{u2} S (CommSemiring.toSemiring.{u2} S _inst_4) x f))
+but is expected to have type
+ forall {M : Type.{u1}} [_inst_1 : Monoid.{u1} M] (S : Type.{u2}) [_inst_4 : CommSemiring.{u2} S] [_inst_5 : MulSemiringAction.{u1, u2} M S _inst_1 (CommSemiring.toSemiring.{u2} S _inst_4)] (m : M) (f : Polynomial.{u2} S (CommSemiring.toSemiring.{u2} S _inst_4)) (x : S), Eq.{succ u2} S (Polynomial.eval.{u2} S (CommSemiring.toSemiring.{u2} S _inst_4) (HSMul.hSMul.{u1, u2, u2} M S S (instHSMul.{u1, u2} M S (SMulZeroClass.toSMul.{u1, u2} M S (CommMonoidWithZero.toZero.{u2} S (CommSemiring.toCommMonoidWithZero.{u2} S _inst_4)) (DistribSMul.toSMulZeroClass.{u1, u2} M S (AddMonoid.toAddZeroClass.{u2} S (AddMonoidWithOne.toAddMonoid.{u2} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} S (NonAssocSemiring.toAddCommMonoidWithOne.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_4)))))) (DistribMulAction.toDistribSMul.{u1, u2} M S _inst_1 (AddMonoidWithOne.toAddMonoid.{u2} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} S (NonAssocSemiring.toAddCommMonoidWithOne.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_4))))) (MulSemiringAction.toDistribMulAction.{u1, u2} M S _inst_1 (CommSemiring.toSemiring.{u2} S _inst_4) _inst_5))))) m x) (HSMul.hSMul.{u1, u2, u2} M (Polynomial.{u2} S (CommSemiring.toSemiring.{u2} S _inst_4)) (Polynomial.{u2} S (CommSemiring.toSemiring.{u2} S _inst_4)) (instHSMul.{u1, u2} M (Polynomial.{u2} S (CommSemiring.toSemiring.{u2} S _inst_4)) (SMulZeroClass.toSMul.{u1, u2} M (Polynomial.{u2} S (CommSemiring.toSemiring.{u2} S _inst_4)) (Polynomial.zero.{u2} S (CommSemiring.toSemiring.{u2} S _inst_4)) (Polynomial.smulZeroClass.{u2, u1} S (CommSemiring.toSemiring.{u2} S _inst_4) M (DistribSMul.toSMulZeroClass.{u1, u2} M S (AddMonoid.toAddZeroClass.{u2} S (AddMonoidWithOne.toAddMonoid.{u2} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} S (NonAssocSemiring.toAddCommMonoidWithOne.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_4)))))) (DistribMulAction.toDistribSMul.{u1, u2} M S _inst_1 (AddMonoidWithOne.toAddMonoid.{u2} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} S (NonAssocSemiring.toAddCommMonoidWithOne.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_4))))) (MulSemiringAction.toDistribMulAction.{u1, u2} M S _inst_1 (CommSemiring.toSemiring.{u2} S _inst_4) _inst_5)))))) m f)) (HSMul.hSMul.{u1, u2, u2} M S S (instHSMul.{u1, u2} M S (SMulZeroClass.toSMul.{u1, u2} M S (CommMonoidWithZero.toZero.{u2} S (CommSemiring.toCommMonoidWithZero.{u2} S _inst_4)) (DistribSMul.toSMulZeroClass.{u1, u2} M S (AddMonoid.toAddZeroClass.{u2} S (AddMonoidWithOne.toAddMonoid.{u2} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} S (NonAssocSemiring.toAddCommMonoidWithOne.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_4)))))) (DistribMulAction.toDistribSMul.{u1, u2} M S _inst_1 (AddMonoidWithOne.toAddMonoid.{u2} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} S (NonAssocSemiring.toAddCommMonoidWithOne.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S _inst_4))))) (MulSemiringAction.toDistribMulAction.{u1, u2} M S _inst_1 (CommSemiring.toSemiring.{u2} S _inst_4) _inst_5))))) m (Polynomial.eval.{u2} S (CommSemiring.toSemiring.{u2} S _inst_4) x f))
+Case conversion may be inaccurate. Consider using '#align polynomial.smul_eval_smul Polynomial.smul_eval_smulₓ'. -/
theorem smul_eval_smul (m : M) (f : S[X]) (x : S) : (m • f).eval (m • x) = m • f.eval x :=
Polynomial.induction_on f (fun r => by rw [smul_C, eval_C, eval_C])
(fun f g ihf ihg => by rw [smul_add, eval_add, ihf, ihg, eval_add, smul_add]) fun n r ih => by
@@ -75,10 +93,22 @@ theorem smul_eval_smul (m : M) (f : S[X]) (x : S) : (m • f).eval (m • x) = m
variable (G : Type _) [Group G]
+/- warning: polynomial.eval_smul' -> Polynomial.eval_smul' is a dubious translation:
+lean 3 declaration is
+ forall (S : Type.{u1}) [_inst_4 : CommSemiring.{u1} S] (G : Type.{u2}) [_inst_6 : Group.{u2} G] [_inst_7 : MulSemiringAction.{u2, u1} G S (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_6)) (CommSemiring.toSemiring.{u1} S _inst_4)] (g : G) (f : Polynomial.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4)) (x : S), Eq.{succ u1} S (Polynomial.eval.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4) (SMul.smul.{u2, u1} G S (SMulZeroClass.toHasSmul.{u2, u1} G S (AddZeroClass.toHasZero.{u1} S (AddMonoid.toAddZeroClass.{u1} S (AddMonoidWithOne.toAddMonoid.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4))))))) (DistribSMul.toSmulZeroClass.{u2, u1} G S (AddMonoid.toAddZeroClass.{u1} S (AddMonoidWithOne.toAddMonoid.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4)))))) (DistribMulAction.toDistribSMul.{u2, u1} G S (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_6)) (AddMonoidWithOne.toAddMonoid.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4))))) (MulSemiringAction.toDistribMulAction.{u2, u1} G S (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_6)) (CommSemiring.toSemiring.{u1} S _inst_4) _inst_7)))) g x) f) (SMul.smul.{u2, u1} G S (SMulZeroClass.toHasSmul.{u2, u1} G S (AddZeroClass.toHasZero.{u1} S (AddMonoid.toAddZeroClass.{u1} S (AddMonoidWithOne.toAddMonoid.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4))))))) (DistribSMul.toSmulZeroClass.{u2, u1} G S (AddMonoid.toAddZeroClass.{u1} S (AddMonoidWithOne.toAddMonoid.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4)))))) (DistribMulAction.toDistribSMul.{u2, u1} G S (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_6)) (AddMonoidWithOne.toAddMonoid.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4))))) (MulSemiringAction.toDistribMulAction.{u2, u1} G S (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_6)) (CommSemiring.toSemiring.{u1} S _inst_4) _inst_7)))) g (Polynomial.eval.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4) x (SMul.smul.{u2, u1} G (Polynomial.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4)) (SMulZeroClass.toHasSmul.{u2, u1} G (Polynomial.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4)) (Polynomial.zero.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4)) (Polynomial.smulZeroClass.{u1, u2} S (CommSemiring.toSemiring.{u1} S _inst_4) G (DistribSMul.toSmulZeroClass.{u2, u1} G S (AddMonoid.toAddZeroClass.{u1} S (AddMonoidWithOne.toAddMonoid.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4)))))) (DistribMulAction.toDistribSMul.{u2, u1} G S (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_6)) (AddMonoidWithOne.toAddMonoid.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4))))) (MulSemiringAction.toDistribMulAction.{u2, u1} G S (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_6)) (CommSemiring.toSemiring.{u1} S _inst_4) _inst_7))))) (Inv.inv.{u2} G (DivInvMonoid.toHasInv.{u2} G (Group.toDivInvMonoid.{u2} G _inst_6)) g) f)))
+but is expected to have type
+ forall (S : Type.{u1}) [_inst_4 : CommSemiring.{u1} S] (G : Type.{u2}) [_inst_6 : Group.{u2} G] [_inst_7 : MulSemiringAction.{u2, u1} G S (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_6)) (CommSemiring.toSemiring.{u1} S _inst_4)] (g : G) (f : Polynomial.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4)) (x : S), Eq.{succ u1} S (Polynomial.eval.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4) (HSMul.hSMul.{u2, u1, u1} G S S (instHSMul.{u2, u1} G S (SMulZeroClass.toSMul.{u2, u1} G S (CommMonoidWithZero.toZero.{u1} S (CommSemiring.toCommMonoidWithZero.{u1} S _inst_4)) (DistribSMul.toSMulZeroClass.{u2, u1} G S (AddMonoid.toAddZeroClass.{u1} S (AddMonoidWithOne.toAddMonoid.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4)))))) (DistribMulAction.toDistribSMul.{u2, u1} G S (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_6)) (AddMonoidWithOne.toAddMonoid.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4))))) (MulSemiringAction.toDistribMulAction.{u2, u1} G S (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_6)) (CommSemiring.toSemiring.{u1} S _inst_4) _inst_7))))) g x) f) (HSMul.hSMul.{u2, u1, u1} G S S (instHSMul.{u2, u1} G S (SMulZeroClass.toSMul.{u2, u1} G S (CommMonoidWithZero.toZero.{u1} S (CommSemiring.toCommMonoidWithZero.{u1} S _inst_4)) (DistribSMul.toSMulZeroClass.{u2, u1} G S (AddMonoid.toAddZeroClass.{u1} S (AddMonoidWithOne.toAddMonoid.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4)))))) (DistribMulAction.toDistribSMul.{u2, u1} G S (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_6)) (AddMonoidWithOne.toAddMonoid.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4))))) (MulSemiringAction.toDistribMulAction.{u2, u1} G S (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_6)) (CommSemiring.toSemiring.{u1} S _inst_4) _inst_7))))) g (Polynomial.eval.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4) x (HSMul.hSMul.{u2, u1, u1} G (Polynomial.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4)) (Polynomial.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4)) (instHSMul.{u2, u1} G (Polynomial.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4)) (SMulZeroClass.toSMul.{u2, u1} G (Polynomial.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4)) (Polynomial.zero.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4)) (Polynomial.smulZeroClass.{u1, u2} S (CommSemiring.toSemiring.{u1} S _inst_4) G (DistribSMul.toSMulZeroClass.{u2, u1} G S (AddMonoid.toAddZeroClass.{u1} S (AddMonoidWithOne.toAddMonoid.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4)))))) (DistribMulAction.toDistribSMul.{u2, u1} G S (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_6)) (AddMonoidWithOne.toAddMonoid.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4))))) (MulSemiringAction.toDistribMulAction.{u2, u1} G S (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_6)) (CommSemiring.toSemiring.{u1} S _inst_4) _inst_7)))))) (Inv.inv.{u2} G (InvOneClass.toInv.{u2} G (DivInvOneMonoid.toInvOneClass.{u2} G (DivisionMonoid.toDivInvOneMonoid.{u2} G (Group.toDivisionMonoid.{u2} G _inst_6)))) g) f)))
+Case conversion may be inaccurate. Consider using '#align polynomial.eval_smul' Polynomial.eval_smul'ₓ'. -/
theorem eval_smul' [MulSemiringAction G S] (g : G) (f : S[X]) (x : S) :
f.eval (g • x) = g • (g⁻¹ • f).eval x := by rw [← smul_eval_smul, smul_inv_smul]
#align polynomial.eval_smul' Polynomial.eval_smul'
+/- warning: polynomial.smul_eval -> Polynomial.smul_eval is a dubious translation:
+lean 3 declaration is
+ forall (S : Type.{u1}) [_inst_4 : CommSemiring.{u1} S] (G : Type.{u2}) [_inst_6 : Group.{u2} G] [_inst_7 : MulSemiringAction.{u2, u1} G S (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_6)) (CommSemiring.toSemiring.{u1} S _inst_4)] (g : G) (f : Polynomial.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4)) (x : S), Eq.{succ u1} S (Polynomial.eval.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4) x (SMul.smul.{u2, u1} G (Polynomial.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4)) (SMulZeroClass.toHasSmul.{u2, u1} G (Polynomial.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4)) (Polynomial.zero.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4)) (Polynomial.smulZeroClass.{u1, u2} S (CommSemiring.toSemiring.{u1} S _inst_4) G (DistribSMul.toSmulZeroClass.{u2, u1} G S (AddMonoid.toAddZeroClass.{u1} S (AddMonoidWithOne.toAddMonoid.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4)))))) (DistribMulAction.toDistribSMul.{u2, u1} G S (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_6)) (AddMonoidWithOne.toAddMonoid.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4))))) (MulSemiringAction.toDistribMulAction.{u2, u1} G S (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_6)) (CommSemiring.toSemiring.{u1} S _inst_4) _inst_7))))) g f)) (SMul.smul.{u2, u1} G S (SMulZeroClass.toHasSmul.{u2, u1} G S (AddZeroClass.toHasZero.{u1} S (AddMonoid.toAddZeroClass.{u1} S (AddMonoidWithOne.toAddMonoid.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4))))))) (DistribSMul.toSmulZeroClass.{u2, u1} G S (AddMonoid.toAddZeroClass.{u1} S (AddMonoidWithOne.toAddMonoid.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4)))))) (DistribMulAction.toDistribSMul.{u2, u1} G S (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_6)) (AddMonoidWithOne.toAddMonoid.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4))))) (MulSemiringAction.toDistribMulAction.{u2, u1} G S (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_6)) (CommSemiring.toSemiring.{u1} S _inst_4) _inst_7)))) g (Polynomial.eval.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4) (SMul.smul.{u2, u1} G S (SMulZeroClass.toHasSmul.{u2, u1} G S (AddZeroClass.toHasZero.{u1} S (AddMonoid.toAddZeroClass.{u1} S (AddMonoidWithOne.toAddMonoid.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4))))))) (DistribSMul.toSmulZeroClass.{u2, u1} G S (AddMonoid.toAddZeroClass.{u1} S (AddMonoidWithOne.toAddMonoid.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4)))))) (DistribMulAction.toDistribSMul.{u2, u1} G S (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_6)) (AddMonoidWithOne.toAddMonoid.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4))))) (MulSemiringAction.toDistribMulAction.{u2, u1} G S (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_6)) (CommSemiring.toSemiring.{u1} S _inst_4) _inst_7)))) (Inv.inv.{u2} G (DivInvMonoid.toHasInv.{u2} G (Group.toDivInvMonoid.{u2} G _inst_6)) g) x) f))
+but is expected to have type
+ forall (S : Type.{u1}) [_inst_4 : CommSemiring.{u1} S] (G : Type.{u2}) [_inst_6 : Group.{u2} G] [_inst_7 : MulSemiringAction.{u2, u1} G S (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_6)) (CommSemiring.toSemiring.{u1} S _inst_4)] (g : G) (f : Polynomial.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4)) (x : S), Eq.{succ u1} S (Polynomial.eval.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4) x (HSMul.hSMul.{u2, u1, u1} G (Polynomial.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4)) (Polynomial.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4)) (instHSMul.{u2, u1} G (Polynomial.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4)) (SMulZeroClass.toSMul.{u2, u1} G (Polynomial.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4)) (Polynomial.zero.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4)) (Polynomial.smulZeroClass.{u1, u2} S (CommSemiring.toSemiring.{u1} S _inst_4) G (DistribSMul.toSMulZeroClass.{u2, u1} G S (AddMonoid.toAddZeroClass.{u1} S (AddMonoidWithOne.toAddMonoid.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4)))))) (DistribMulAction.toDistribSMul.{u2, u1} G S (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_6)) (AddMonoidWithOne.toAddMonoid.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4))))) (MulSemiringAction.toDistribMulAction.{u2, u1} G S (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_6)) (CommSemiring.toSemiring.{u1} S _inst_4) _inst_7)))))) g f)) (HSMul.hSMul.{u2, u1, u1} G S S (instHSMul.{u2, u1} G S (SMulZeroClass.toSMul.{u2, u1} G S (CommMonoidWithZero.toZero.{u1} S (CommSemiring.toCommMonoidWithZero.{u1} S _inst_4)) (DistribSMul.toSMulZeroClass.{u2, u1} G S (AddMonoid.toAddZeroClass.{u1} S (AddMonoidWithOne.toAddMonoid.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4)))))) (DistribMulAction.toDistribSMul.{u2, u1} G S (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_6)) (AddMonoidWithOne.toAddMonoid.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4))))) (MulSemiringAction.toDistribMulAction.{u2, u1} G S (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_6)) (CommSemiring.toSemiring.{u1} S _inst_4) _inst_7))))) g (Polynomial.eval.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4) (HSMul.hSMul.{u2, u1, u1} G S S (instHSMul.{u2, u1} G S (SMulZeroClass.toSMul.{u2, u1} G S (CommMonoidWithZero.toZero.{u1} S (CommSemiring.toCommMonoidWithZero.{u1} S _inst_4)) (DistribSMul.toSMulZeroClass.{u2, u1} G S (AddMonoid.toAddZeroClass.{u1} S (AddMonoidWithOne.toAddMonoid.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4)))))) (DistribMulAction.toDistribSMul.{u2, u1} G S (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_6)) (AddMonoidWithOne.toAddMonoid.{u1} S (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} S (NonAssocSemiring.toAddCommMonoidWithOne.{u1} S (Semiring.toNonAssocSemiring.{u1} S (CommSemiring.toSemiring.{u1} S _inst_4))))) (MulSemiringAction.toDistribMulAction.{u2, u1} G S (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_6)) (CommSemiring.toSemiring.{u1} S _inst_4) _inst_7))))) (Inv.inv.{u2} G (InvOneClass.toInv.{u2} G (DivInvOneMonoid.toInvOneClass.{u2} G (DivisionMonoid.toDivInvOneMonoid.{u2} G (Group.toDivisionMonoid.{u2} G _inst_6)))) g) x) f))
+Case conversion may be inaccurate. Consider using '#align polynomial.smul_eval Polynomial.smul_evalₓ'. -/
theorem smul_eval [MulSemiringAction G S] (g : G) (f : S[X]) (x : S) :
(g • f).eval x = g • f.eval (g⁻¹ • x) := by rw [← smul_eval_smul, smul_inv_smul]
#align polynomial.smul_eval Polynomial.smul_eval
@@ -95,27 +125,49 @@ open MulAction
open Classical
+#print prodXSubSmul /-
/-- the product of `(X - g • x)` over distinct `g • x`. -/
noncomputable def prodXSubSmul (x : R) : R[X] :=
(Finset.univ : Finset (G ⧸ MulAction.stabilizer G x)).Prod fun g =>
Polynomial.X - Polynomial.C (ofQuotientStabilizer G x g)
#align prod_X_sub_smul prodXSubSmul
+-/
+#print prodXSubSmul.monic /-
theorem prodXSubSmul.monic (x : R) : (prodXSubSmul G R x).Monic :=
Polynomial.monic_prod_of_monic _ _ fun g _ => Polynomial.monic_X_sub_C _
#align prod_X_sub_smul.monic prodXSubSmul.monic
+-/
+/- warning: prod_X_sub_smul.eval -> prodXSubSmul.eval is a dubious translation:
+lean 3 declaration is
+ forall (G : Type.{u1}) [_inst_2 : Group.{u1} G] [_inst_3 : Fintype.{u1} G] (R : Type.{u2}) [_inst_4 : CommRing.{u2} R] [_inst_5 : MulSemiringAction.{u1, u2} G R (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_2)) (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))] (x : R), Eq.{succ u2} R (Polynomial.eval.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) x (prodXSubSmul.{u1, u2} G _inst_2 _inst_3 R _inst_4 _inst_5 x)) (OfNat.ofNat.{u2} R 0 (OfNat.mk.{u2} R 0 (Zero.zero.{u2} R (MulZeroClass.toHasZero.{u2} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))))))))
+but is expected to have type
+ forall (G : Type.{u1}) [_inst_2 : Group.{u1} G] [_inst_3 : Fintype.{u1} G] (R : Type.{u2}) [_inst_4 : CommRing.{u2} R] [_inst_5 : MulSemiringAction.{u1, u2} G R (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_2)) (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))] (x : R), Eq.{succ u2} R (Polynomial.eval.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) x (prodXSubSmul.{u1, u2} G _inst_2 _inst_3 R _inst_4 _inst_5 x)) (OfNat.ofNat.{u2} R 0 (Zero.toOfNat0.{u2} R (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)))))
+Case conversion may be inaccurate. Consider using '#align prod_X_sub_smul.eval prodXSubSmul.evalₓ'. -/
theorem prodXSubSmul.eval (x : R) : (prodXSubSmul G R x).eval x = 0 :=
(MonoidHom.map_prod ((Polynomial.aeval x).toRingHom.toMonoidHom : R[X] →* R) _ _).trans <|
Finset.prod_eq_zero (Finset.mem_univ <| QuotientGroup.mk 1) <| by simp
#align prod_X_sub_smul.eval prodXSubSmul.eval
+/- warning: prod_X_sub_smul.smul -> prodXSubSmul.smul is a dubious translation:
+lean 3 declaration is
+ forall (G : Type.{u1}) [_inst_2 : Group.{u1} G] [_inst_3 : Fintype.{u1} G] (R : Type.{u2}) [_inst_4 : CommRing.{u2} R] [_inst_5 : MulSemiringAction.{u1, u2} G R (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_2)) (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))] (x : R) (g : G), Eq.{succ u2} (Polynomial.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) (SMul.smul.{u1, u2} G (Polynomial.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) (SMulZeroClass.toHasSmul.{u1, u2} G (Polynomial.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) (Polynomial.zero.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) (Polynomial.smulZeroClass.{u2, u1} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) G (DistribSMul.toSmulZeroClass.{u1, u2} G R (AddMonoid.toAddZeroClass.{u2} R (AddMonoidWithOne.toAddMonoid.{u2} R (AddGroupWithOne.toAddMonoidWithOne.{u2} R (NonAssocRing.toAddGroupWithOne.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))))) (DistribMulAction.toDistribSMul.{u1, u2} G R (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_2)) (AddMonoidWithOne.toAddMonoid.{u2} R (AddGroupWithOne.toAddMonoidWithOne.{u2} R (NonAssocRing.toAddGroupWithOne.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4))))) (MulSemiringAction.toDistribMulAction.{u1, u2} G R (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_2)) (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) _inst_5))))) g (prodXSubSmul.{u1, u2} G _inst_2 _inst_3 R _inst_4 _inst_5 x)) (prodXSubSmul.{u1, u2} G _inst_2 _inst_3 R _inst_4 _inst_5 x)
+but is expected to have type
+ forall (G : Type.{u1}) [_inst_2 : Group.{u1} G] [_inst_3 : Fintype.{u1} G] (R : Type.{u2}) [_inst_4 : CommRing.{u2} R] [_inst_5 : MulSemiringAction.{u1, u2} G R (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_2)) (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))] (x : R) (g : G), Eq.{succ u2} (Polynomial.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) (HSMul.hSMul.{u1, u2, u2} G (Polynomial.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) (Polynomial.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) (instHSMul.{u1, u2} G (Polynomial.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) (SMulZeroClass.toSMul.{u1, u2} G (Polynomial.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) (Polynomial.zero.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) (Polynomial.smulZeroClass.{u2, u1} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) G (DistribSMul.toSMulZeroClass.{u1, u2} G R (AddMonoid.toAddZeroClass.{u2} R (AddMonoidWithOne.toAddMonoid.{u2} R (AddGroupWithOne.toAddMonoidWithOne.{u2} R (Ring.toAddGroupWithOne.{u2} R (CommRing.toRing.{u2} R _inst_4))))) (DistribMulAction.toDistribSMul.{u1, u2} G R (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_2)) (AddMonoidWithOne.toAddMonoid.{u2} R (AddGroupWithOne.toAddMonoidWithOne.{u2} R (Ring.toAddGroupWithOne.{u2} R (CommRing.toRing.{u2} R _inst_4)))) (MulSemiringAction.toDistribMulAction.{u1, u2} G R (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_2)) (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) _inst_5)))))) g (prodXSubSmul.{u1, u2} G _inst_2 _inst_3 R _inst_4 _inst_5 x)) (prodXSubSmul.{u1, u2} G _inst_2 _inst_3 R _inst_4 _inst_5 x)
+Case conversion may be inaccurate. Consider using '#align prod_X_sub_smul.smul prodXSubSmul.smulₓ'. -/
theorem prodXSubSmul.smul (x : R) (g : G) : g • prodXSubSmul G R x = prodXSubSmul G R x :=
Finset.smul_prod.trans <|
Fintype.prod_bijective _ (MulAction.bijective g) _ _ fun g' => by
- rw [of_quotient_stabilizer_smul, smul_sub, Polynomial.smul_x, Polynomial.smul_C]
+ rw [of_quotient_stabilizer_smul, smul_sub, Polynomial.smul_X, Polynomial.smul_C]
#align prod_X_sub_smul.smul prodXSubSmul.smul
+/- warning: prod_X_sub_smul.coeff -> prodXSubSmul.coeff is a dubious translation:
+lean 3 declaration is
+ forall (G : Type.{u1}) [_inst_2 : Group.{u1} G] [_inst_3 : Fintype.{u1} G] (R : Type.{u2}) [_inst_4 : CommRing.{u2} R] [_inst_5 : MulSemiringAction.{u1, u2} G R (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_2)) (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))] (x : R) (g : G) (n : Nat), Eq.{succ u2} R (SMul.smul.{u1, u2} G R (SMulZeroClass.toHasSmul.{u1, u2} G R (AddZeroClass.toHasZero.{u2} R (AddMonoid.toAddZeroClass.{u2} R (AddMonoidWithOne.toAddMonoid.{u2} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} R (NonAssocSemiring.toAddCommMonoidWithOne.{u2} R (Semiring.toNonAssocSemiring.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)))))))) (DistribSMul.toSmulZeroClass.{u1, u2} G R (AddMonoid.toAddZeroClass.{u2} R (AddMonoidWithOne.toAddMonoid.{u2} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} R (NonAssocSemiring.toAddCommMonoidWithOne.{u2} R (Semiring.toNonAssocSemiring.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))))))) (DistribMulAction.toDistribSMul.{u1, u2} G R (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_2)) (AddMonoidWithOne.toAddMonoid.{u2} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} R (NonAssocSemiring.toAddCommMonoidWithOne.{u2} R (Semiring.toNonAssocSemiring.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)))))) (MulSemiringAction.toDistribMulAction.{u1, u2} G R (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_2)) (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) _inst_5)))) g (Polynomial.coeff.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (prodXSubSmul.{u1, u2} G _inst_2 _inst_3 R _inst_4 _inst_5 x) n)) (Polynomial.coeff.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (prodXSubSmul.{u1, u2} G _inst_2 _inst_3 R _inst_4 _inst_5 x) n)
+but is expected to have type
+ forall (G : Type.{u1}) [_inst_2 : Group.{u1} G] [_inst_3 : Fintype.{u1} G] (R : Type.{u2}) [_inst_4 : CommRing.{u2} R] [_inst_5 : MulSemiringAction.{u1, u2} G R (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_2)) (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))] (x : R) (g : G) (n : Nat), Eq.{succ u2} R (HSMul.hSMul.{u1, u2, u2} G R R (instHSMul.{u1, u2} G R (SMulZeroClass.toSMul.{u1, u2} G R (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (DistribSMul.toSMulZeroClass.{u1, u2} G R (AddMonoid.toAddZeroClass.{u2} R (AddMonoidWithOne.toAddMonoid.{u2} R (AddGroupWithOne.toAddMonoidWithOne.{u2} R (Ring.toAddGroupWithOne.{u2} R (CommRing.toRing.{u2} R _inst_4))))) (DistribMulAction.toDistribSMul.{u1, u2} G R (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_2)) (AddMonoidWithOne.toAddMonoid.{u2} R (AddGroupWithOne.toAddMonoidWithOne.{u2} R (Ring.toAddGroupWithOne.{u2} R (CommRing.toRing.{u2} R _inst_4)))) (MulSemiringAction.toDistribMulAction.{u1, u2} G R (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_2)) (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) _inst_5))))) g (Polynomial.coeff.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (prodXSubSmul.{u1, u2} G _inst_2 _inst_3 R _inst_4 _inst_5 x) n)) (Polynomial.coeff.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (prodXSubSmul.{u1, u2} G _inst_2 _inst_3 R _inst_4 _inst_5 x) n)
+Case conversion may be inaccurate. Consider using '#align prod_X_sub_smul.coeff prodXSubSmul.coeffₓ'. -/
theorem prodXSubSmul.coeff (x : R) (g : G) (n : ℕ) :
g • (prodXSubSmul G R x).coeff n = (prodXSubSmul G R x).coeff n := by
rw [← Polynomial.coeff_smul, prodXSubSmul.smul]
@@ -133,6 +185,12 @@ variable {Q : Type _} [CommSemiring Q] [MulSemiringAction M Q]
open Polynomial
+/- warning: mul_semiring_action_hom.polynomial -> MulSemiringActionHom.polynomial is a dubious translation:
+lean 3 declaration is
+ forall {M : Type.{u1}} [_inst_1 : Monoid.{u1} M] {P : Type.{u2}} [_inst_2 : CommSemiring.{u2} P] [_inst_3 : MulSemiringAction.{u1, u2} M P _inst_1 (CommSemiring.toSemiring.{u2} P _inst_2)] {Q : Type.{u3}} [_inst_4 : CommSemiring.{u3} Q] [_inst_5 : MulSemiringAction.{u1, u3} M Q _inst_1 (CommSemiring.toSemiring.{u3} Q _inst_4)], (MulSemiringActionHom.{u1, u2, u3} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3 Q (CommSemiring.toSemiring.{u3} Q _inst_4) _inst_5) -> (MulSemiringActionHom.{u1, u2, u3} M _inst_1 (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.mulSemiringAction.{u1, u2} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3) (Polynomial.{u3} Q (CommSemiring.toSemiring.{u3} Q _inst_4)) (Polynomial.semiring.{u3} Q (CommSemiring.toSemiring.{u3} Q _inst_4)) (Polynomial.mulSemiringAction.{u1, u3} M _inst_1 Q (CommSemiring.toSemiring.{u3} Q _inst_4) _inst_5))
+but is expected to have type
+ forall {M : Type.{u1}} [_inst_1 : Monoid.{u1} M] {P : Type.{u2}} [_inst_2 : CommSemiring.{u2} P] [_inst_3 : MulSemiringAction.{u1, u2} M P _inst_1 (CommSemiring.toSemiring.{u2} P _inst_2)] {Q : Type.{u3}} [_inst_4 : CommSemiring.{u3} Q] [_inst_5 : MulSemiringAction.{u1, u3} M Q _inst_1 (CommSemiring.toSemiring.{u3} Q _inst_4)], (MulSemiringActionHom.{u1, u2, u3} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3 Q (CommSemiring.toSemiring.{u3} Q _inst_4) _inst_5) -> (MulSemiringActionHom.{u1, u2, u3} M _inst_1 (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u1, u2} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3) (Polynomial.{u3} Q (CommSemiring.toSemiring.{u3} Q _inst_4)) (Polynomial.semiring.{u3} Q (CommSemiring.toSemiring.{u3} Q _inst_4)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u1, u3} M _inst_1 Q (CommSemiring.toSemiring.{u3} Q _inst_4) _inst_5))
+Case conversion may be inaccurate. Consider using '#align mul_semiring_action_hom.polynomial MulSemiringActionHom.polynomialₓ'. -/
/-- An equivariant map induces an equivariant map on polynomials. -/
protected noncomputable def polynomial (g : P →+*[M] Q) : P[X] →+*[M] Q[X]
where
@@ -152,6 +210,12 @@ protected noncomputable def polynomial (g : P →+*[M] Q) : P[X] →+*[M] Q[X]
map_mul' p q := Polynomial.map_mul g
#align mul_semiring_action_hom.polynomial MulSemiringActionHom.polynomial
+/- warning: mul_semiring_action_hom.coe_polynomial -> MulSemiringActionHom.coe_polynomial is a dubious translation:
+lean 3 declaration is
+ forall {M : Type.{u1}} [_inst_1 : Monoid.{u1} M] {P : Type.{u2}} [_inst_2 : CommSemiring.{u2} P] [_inst_3 : MulSemiringAction.{u1, u2} M P _inst_1 (CommSemiring.toSemiring.{u2} P _inst_2)] {Q : Type.{u3}} [_inst_4 : CommSemiring.{u3} Q] [_inst_5 : MulSemiringAction.{u1, u3} M Q _inst_1 (CommSemiring.toSemiring.{u3} Q _inst_4)] (g : MulSemiringActionHom.{u1, u2, u3} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3 Q (CommSemiring.toSemiring.{u3} Q _inst_4) _inst_5), Eq.{max (succ u2) (succ u3)} ((fun (_x : MulSemiringActionHom.{u1, u2, u3} M _inst_1 (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.mulSemiringAction.{u1, u2} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3) (Polynomial.{u3} Q (CommSemiring.toSemiring.{u3} Q _inst_4)) (Polynomial.semiring.{u3} Q (CommSemiring.toSemiring.{u3} Q _inst_4)) (Polynomial.mulSemiringAction.{u1, u3} M _inst_1 Q (CommSemiring.toSemiring.{u3} Q _inst_4) _inst_5)) => (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) -> (Polynomial.{u3} Q (CommSemiring.toSemiring.{u3} Q _inst_4))) (MulSemiringActionHom.polynomial.{u1, u2, u3} M _inst_1 P _inst_2 _inst_3 Q _inst_4 _inst_5 g)) (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (MulSemiringActionHom.{u1, u2, u3} M _inst_1 (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.mulSemiringAction.{u1, u2} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3) (Polynomial.{u3} Q (CommSemiring.toSemiring.{u3} Q _inst_4)) (Polynomial.semiring.{u3} Q (CommSemiring.toSemiring.{u3} Q _inst_4)) (Polynomial.mulSemiringAction.{u1, u3} M _inst_1 Q (CommSemiring.toSemiring.{u3} Q _inst_4) _inst_5)) (fun (_x : MulSemiringActionHom.{u1, u2, u3} M _inst_1 (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.mulSemiringAction.{u1, u2} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3) (Polynomial.{u3} Q (CommSemiring.toSemiring.{u3} Q _inst_4)) (Polynomial.semiring.{u3} Q (CommSemiring.toSemiring.{u3} Q _inst_4)) (Polynomial.mulSemiringAction.{u1, u3} M _inst_1 Q (CommSemiring.toSemiring.{u3} Q _inst_4) _inst_5)) => (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) -> (Polynomial.{u3} Q (CommSemiring.toSemiring.{u3} Q _inst_4))) ([anonymous].{u1, u2, u3} M _inst_1 (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.mulSemiringAction.{u1, u2} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3) (Polynomial.{u3} Q (CommSemiring.toSemiring.{u3} Q _inst_4)) (Polynomial.semiring.{u3} Q (CommSemiring.toSemiring.{u3} Q _inst_4)) (Polynomial.mulSemiringAction.{u1, u3} M _inst_1 Q (CommSemiring.toSemiring.{u3} Q _inst_4) _inst_5)) (MulSemiringActionHom.polynomial.{u1, u2, u3} M _inst_1 P _inst_2 _inst_3 Q _inst_4 _inst_5 g)) (Polynomial.map.{u2, u3} P Q (CommSemiring.toSemiring.{u2} P _inst_2) (CommSemiring.toSemiring.{u3} Q _inst_4) ((fun (a : Sort.{max (succ u2) (succ u3)}) (b : Sort.{max (succ u2) (succ u3)}) [self : HasLiftT.{max (succ u2) (succ u3), max (succ u2) (succ u3)} a b] => self.0) (MulSemiringActionHom.{u1, u2, u3} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3 Q (CommSemiring.toSemiring.{u3} Q _inst_4) _inst_5) (RingHom.{u2, u3} P Q (Semiring.toNonAssocSemiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Semiring.toNonAssocSemiring.{u3} Q (CommSemiring.toSemiring.{u3} Q _inst_4))) (HasLiftT.mk.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (MulSemiringActionHom.{u1, u2, u3} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3 Q (CommSemiring.toSemiring.{u3} Q _inst_4) _inst_5) (RingHom.{u2, u3} P Q (Semiring.toNonAssocSemiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Semiring.toNonAssocSemiring.{u3} Q (CommSemiring.toSemiring.{u3} Q _inst_4))) (CoeTCₓ.coe.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (MulSemiringActionHom.{u1, u2, u3} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3 Q (CommSemiring.toSemiring.{u3} Q _inst_4) _inst_5) (RingHom.{u2, u3} P Q (Semiring.toNonAssocSemiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Semiring.toNonAssocSemiring.{u3} Q (CommSemiring.toSemiring.{u3} Q _inst_4))) (RingHom.hasCoeT.{max u2 u3, u2, u3} (MulSemiringActionHom.{u1, u2, u3} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3 Q (CommSemiring.toSemiring.{u3} Q _inst_4) _inst_5) P Q (Semiring.toNonAssocSemiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Semiring.toNonAssocSemiring.{u3} Q (CommSemiring.toSemiring.{u3} Q _inst_4)) (MulSemiringActionHomClass.toRingHomClass.{max u2 u3, u1, u2, u3} (MulSemiringActionHom.{u1, u2, u3} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3 Q (CommSemiring.toSemiring.{u3} Q _inst_4) _inst_5) M P Q _inst_1 (CommSemiring.toSemiring.{u2} P _inst_2) (CommSemiring.toSemiring.{u3} Q _inst_4) (MulSemiringAction.toDistribMulAction.{u1, u2} M P _inst_1 (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3) (MulSemiringAction.toDistribMulAction.{u1, u3} M Q _inst_1 (CommSemiring.toSemiring.{u3} Q _inst_4) _inst_5) (MulSemiringActionHom.mulSemiringActionHomClass.{u1, u2, u3} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3 Q (CommSemiring.toSemiring.{u3} Q _inst_4) _inst_5))))) g))
+but is expected to have type
+ forall {M : Type.{u3}} [_inst_1 : Monoid.{u3} M] {P : Type.{u2}} [_inst_2 : CommSemiring.{u2} P] [_inst_3 : MulSemiringAction.{u3, u2} M P _inst_1 (CommSemiring.toSemiring.{u2} P _inst_2)] {Q : Type.{u1}} [_inst_4 : CommSemiring.{u1} Q] [_inst_5 : MulSemiringAction.{u3, u1} M Q _inst_1 (CommSemiring.toSemiring.{u1} Q _inst_4)] (g : MulSemiringActionHom.{u3, u2, u1} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3 Q (CommSemiring.toSemiring.{u1} Q _inst_4) _inst_5), Eq.{max (succ u2) (succ u1)} (forall (a : Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)), (fun (x._@.Mathlib.Algebra.Hom.GroupAction._hyg.2186 : Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) => Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulSemiringActionHom.{u3, u2, u1} M _inst_1 (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u3, u2} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3) (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.semiring.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u3, u1} M _inst_1 Q (CommSemiring.toSemiring.{u1} Q _inst_4) _inst_5)) (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (fun (_x : Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) => (fun (x._@.Mathlib.Algebra.Hom.GroupAction._hyg.2186 : Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) => Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) _x) (SMulHomClass.toFunLike.{max u2 u1, u3, u2, u1} (MulSemiringActionHom.{u3, u2, u1} M _inst_1 (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u3, u2} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3) (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.semiring.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u3, u1} M _inst_1 Q (CommSemiring.toSemiring.{u1} Q _inst_4) _inst_5)) M (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (SMulZeroClass.toSMul.{u3, u2} M (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (AddMonoid.toZero.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (AddMonoidWithOne.toAddMonoid.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (NonAssocSemiring.toAddCommMonoidWithOne.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Semiring.toNonAssocSemiring.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2))))))) (DistribSMul.toSMulZeroClass.{u3, u2} M (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (AddMonoid.toAddZeroClass.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (AddMonoidWithOne.toAddMonoid.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (NonAssocSemiring.toAddCommMonoidWithOne.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Semiring.toNonAssocSemiring.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2))))))) (DistribMulAction.toDistribSMul.{u3, u2} M (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) _inst_1 (AddMonoidWithOne.toAddMonoid.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (NonAssocSemiring.toAddCommMonoidWithOne.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Semiring.toNonAssocSemiring.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)))))) (MulSemiringAction.toDistribMulAction.{u3, u2} M (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) _inst_1 (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u3, u2} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3))))) (SMulZeroClass.toSMul.{u3, u1} M (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (AddMonoid.toZero.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (AddMonoidWithOne.toAddMonoid.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (NonAssocSemiring.toAddCommMonoidWithOne.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Semiring.toNonAssocSemiring.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.semiring.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4))))))) (DistribSMul.toSMulZeroClass.{u3, u1} M (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (AddMonoid.toAddZeroClass.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (AddMonoidWithOne.toAddMonoid.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (NonAssocSemiring.toAddCommMonoidWithOne.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Semiring.toNonAssocSemiring.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.semiring.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4))))))) (DistribMulAction.toDistribSMul.{u3, u1} M (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) _inst_1 (AddMonoidWithOne.toAddMonoid.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (NonAssocSemiring.toAddCommMonoidWithOne.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Semiring.toNonAssocSemiring.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.semiring.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)))))) (MulSemiringAction.toDistribMulAction.{u3, u1} M (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) _inst_1 (Polynomial.semiring.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u3, u1} M _inst_1 Q (CommSemiring.toSemiring.{u1} Q _inst_4) _inst_5))))) (DistribMulActionHomClass.toSMulHomClass.{max u2 u1, u3, u2, u1} (MulSemiringActionHom.{u3, u2, u1} M _inst_1 (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u3, u2} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3) (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.semiring.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u3, u1} M _inst_1 Q (CommSemiring.toSemiring.{u1} Q _inst_4) _inst_5)) M (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) _inst_1 (AddMonoidWithOne.toAddMonoid.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (AddCommMonoidWithOne.toAddMonoidWithOne.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (NonAssocSemiring.toAddCommMonoidWithOne.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Semiring.toNonAssocSemiring.{u2} (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)))))) (AddMonoidWithOne.toAddMonoid.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (NonAssocSemiring.toAddCommMonoidWithOne.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Semiring.toNonAssocSemiring.{u1} (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.semiring.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)))))) (MulSemiringAction.toDistribMulAction.{u3, u2} M (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) _inst_1 (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u3, u2} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3)) (MulSemiringAction.toDistribMulAction.{u3, u1} M (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) _inst_1 (Polynomial.semiring.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u3, u1} M _inst_1 Q (CommSemiring.toSemiring.{u1} Q _inst_4) _inst_5)) (MulSemiringActionHomClass.toDistribMulActionHomClass.{max u2 u1, u3, u2, u1} (MulSemiringActionHom.{u3, u2, u1} M _inst_1 (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u3, u2} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3) (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.semiring.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u3, u1} M _inst_1 Q (CommSemiring.toSemiring.{u1} Q _inst_4) _inst_5)) M (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) _inst_1 (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.semiring.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (MulSemiringAction.toDistribMulAction.{u3, u2} M (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) _inst_1 (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u3, u2} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3)) (MulSemiringAction.toDistribMulAction.{u3, u1} M (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) _inst_1 (Polynomial.semiring.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u3, u1} M _inst_1 Q (CommSemiring.toSemiring.{u1} Q _inst_4) _inst_5)) (MulSemiringActionHom.instMulSemiringActionHomClassMulSemiringActionHomToDistribMulActionToDistribMulAction.{u3, u2, u1} M _inst_1 (Polynomial.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.semiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u3, u2} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3) (Polynomial.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.semiring.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (Polynomial.instMulSemiringActionPolynomialSemiring.{u3, u1} M _inst_1 Q (CommSemiring.toSemiring.{u1} Q _inst_4) _inst_5))))) (MulSemiringActionHom.polynomial.{u3, u2, u1} M _inst_1 P _inst_2 _inst_3 Q _inst_4 _inst_5 g)) (Polynomial.map.{u2, u1} P Q (CommSemiring.toSemiring.{u2} P _inst_2) (CommSemiring.toSemiring.{u1} Q _inst_4) (RingHomClass.toRingHom.{max u2 u1, u2, u1} (MulSemiringActionHom.{u3, u2, u1} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3 Q (CommSemiring.toSemiring.{u1} Q _inst_4) _inst_5) P Q (Semiring.toNonAssocSemiring.{u2} P (CommSemiring.toSemiring.{u2} P _inst_2)) (Semiring.toNonAssocSemiring.{u1} Q (CommSemiring.toSemiring.{u1} Q _inst_4)) (MulSemiringActionHomClass.toRingHomClass.{max u2 u1, u3, u2, u1} (MulSemiringActionHom.{u3, u2, u1} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3 Q (CommSemiring.toSemiring.{u1} Q _inst_4) _inst_5) M P Q _inst_1 (CommSemiring.toSemiring.{u2} P _inst_2) (CommSemiring.toSemiring.{u1} Q _inst_4) (MulSemiringAction.toDistribMulAction.{u3, u2} M P _inst_1 (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3) (MulSemiringAction.toDistribMulAction.{u3, u1} M Q _inst_1 (CommSemiring.toSemiring.{u1} Q _inst_4) _inst_5) (MulSemiringActionHom.instMulSemiringActionHomClassMulSemiringActionHomToDistribMulActionToDistribMulAction.{u3, u2, u1} M _inst_1 P (CommSemiring.toSemiring.{u2} P _inst_2) _inst_3 Q (CommSemiring.toSemiring.{u1} Q _inst_4) _inst_5)) g))
+Case conversion may be inaccurate. Consider using '#align mul_semiring_action_hom.coe_polynomial MulSemiringActionHom.coe_polynomialₓ'. -/
@[simp]
theorem coe_polynomial (g : P →+*[M] Q) : (g.Polynomial : P[X] → Q[X]) = map g :=
rfl
mathlib commit https://github.com/leanprover-community/mathlib/commit/21e3562c5e12d846c7def5eff8cdbc520d7d4936
@@ -102,7 +102,7 @@ noncomputable def prodXSubSmul (x : R) : R[X] :=
#align prod_X_sub_smul prodXSubSmul
theorem prodXSubSmul.monic (x : R) : (prodXSubSmul G R x).Monic :=
- Polynomial.monic_prod_of_monic _ _ fun g _ => Polynomial.monic_x_sub_c _
+ Polynomial.monic_prod_of_monic _ _ fun g _ => Polynomial.monic_X_sub_C _
#align prod_X_sub_smul.monic prodXSubSmul.monic
theorem prodXSubSmul.eval (x : R) : (prodXSubSmul G R x).eval x = 0 :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/38f16f960f5006c6c0c2bac7b0aba5273188f4e5
@@ -61,7 +61,7 @@ variable [MulSemiringAction M R]
@[simp]
theorem smul_x (m : M) : (m • X : R[X]) = X :=
- (smul_eq_map R m).symm ▸ map_x _
+ (smul_eq_map R m).symm ▸ map_X _
#align polynomial.smul_X Polynomial.smul_x
variable (S : Type _) [CommSemiring S] [MulSemiringAction M S]
mathlib commit https://github.com/leanprover-community/mathlib/commit/38f16f960f5006c6c0c2bac7b0aba5273188f4e5
@@ -60,7 +60,7 @@ variable {M R}
variable [MulSemiringAction M R]
@[simp]
-theorem smul_x (m : M) : (m • x : R[X]) = x :=
+theorem smul_x (m : M) : (m • X : R[X]) = X :=
(smul_eq_map R m).symm ▸ map_x _
#align polynomial.smul_X Polynomial.smul_x
@@ -98,7 +98,7 @@ open Classical
/-- the product of `(X - g • x)` over distinct `g • x`. -/
noncomputable def prodXSubSmul (x : R) : R[X] :=
(Finset.univ : Finset (G ⧸ MulAction.stabilizer G x)).Prod fun g =>
- Polynomial.x - Polynomial.c (ofQuotientStabilizer G x g)
+ Polynomial.X - Polynomial.C (ofQuotientStabilizer G x g)
#align prod_X_sub_smul prodXSubSmul
theorem prodXSubSmul.monic (x : R) : (prodXSubSmul G R x).Monic :=
@@ -113,7 +113,7 @@ theorem prodXSubSmul.eval (x : R) : (prodXSubSmul G R x).eval x = 0 :=
theorem prodXSubSmul.smul (x : R) (g : G) : g • prodXSubSmul G R x = prodXSubSmul G R x :=
Finset.smul_prod.trans <|
Fintype.prod_bijective _ (MulAction.bijective g) _ _ fun g' => by
- rw [of_quotient_stabilizer_smul, smul_sub, Polynomial.smul_x, Polynomial.smul_c]
+ rw [of_quotient_stabilizer_smul, smul_sub, Polynomial.smul_x, Polynomial.smul_C]
#align prod_X_sub_smul.smul prodXSubSmul.smul
theorem prodXSubSmul.coeff (x : R) (g : G) (n : ℕ) :
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
Data
(#11751)
Polynomial
and MvPolynomial
are algebraic objects, hence should be under Algebra
(or at least not under Data
)
@@ -4,8 +4,8 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Kenny Lau
-/
import Mathlib.Algebra.GroupRingAction.Basic
-import Mathlib.Data.Polynomial.AlgebraMap
-import Mathlib.Data.Polynomial.Monic
+import Mathlib.Algebra.Polynomial.AlgebraMap
+import Mathlib.Algebra.Polynomial.Monic
import Mathlib.GroupTheory.GroupAction.Hom
import Mathlib.GroupTheory.GroupAction.Quotient
Generalize MulActionHom
so that it allows two different monoids acting, related by a morphism. This is inspired by the treatment of (semi)linear maps in mathlib, and allows to refactor them.
Let M
, N
, X
, Y
be types, with SMul M X
and SMul N Y
, and let φ : M → N
be a map.
MulActionHom φ X Y
, the type of equivariant functions from X
to Y
, consists of functions f : X → Y
such that f (m • x) = (φ m) • (f x)
for all m : M
and x : X
.Assume that we have Monoid M
, Monoid N
and that φ : M →* N
. For A
, B
by types with AddMonoid A
and AddMonoid B
, endowed with DistribMulAction M A
and DistribMulAction M B
:
DistribMulActionHom φ A B
is the type of equivariant additive monoid homomorphisms from A
to B
.Similarly, when R
and S
are types with Semiring R
, Semiring S
, MulSemiringAction M R
and MulSemiringAction N S
SMulSemiringHom φ R S
is the type of equivariant ring homomorphisms
from R
to S
.The above types have corresponding classes:
MulActionHomClass F φ X Y
states that F
is a type of bundled X → Y
homs which are φ
-equivariantDistribMulActionHomClass F φ A B
states that F
is a type of bundled A → B
homs preserving the additive monoid structure and φ
-equivariantSMulSemiringHomClass F φ R S
states that F
is a type of bundled R → S
homs preserving the ring structure and φ
-equivariantWe introduce the following notation to code equivariant maps
(the subscript index ₑ
is for equivariant) :
X →ₑ[φ] Y
is MulActionHom φ X Y
.A →ₑ+[φ] B
is DistribMulActionHom φ A B
.R →ₑ+*[φ] S
is MulSemiringActionHom φ R S
.When M = N
and φ = MonoidHom.id M
, we provide the backward compatible notation :
X →[M] Y
is MulActionHom ([@id](https://github.com/id) M) X Y
A →+[M] B
is DistribMulActionHom (MonoidHom.id M) A B
R →+*[M] S
is MulSemiringActionHom (MonoidHom.id M) R S
This more general definition is propagated all over mathlib, in particular to LinearMap
.
The treatment of composition of equivariant maps is inspired by that of semilinear maps. We provide classes CompTriple
and MonoidHom.CompTriple
of “composable triples`, and various instances for them.
@@ -132,11 +132,12 @@ protected noncomputable def polynomial (g : P →+*[M] Q) : P[X] →+*[M] Q[X] w
toFun := map g
map_smul' m p :=
Polynomial.induction_on p
- (fun b ↦ by rw [smul_C, map_C, coe_fn_coe, g.map_smul, map_C, coe_fn_coe, smul_C])
+ (fun b ↦ by rw [MonoidHom.id_apply, smul_C, map_C, coe_fn_coe, g.map_smul, map_C,
+ coe_fn_coe, smul_C])
(fun p q ihp ihq ↦ by
rw [smul_add, Polynomial.map_add, ihp, ihq, Polynomial.map_add, smul_add])
- fun n b _ ↦ by
- rw [smul_mul', smul_C, smul_pow', smul_X, Polynomial.map_mul, map_C, Polynomial.map_pow,
+ fun n b _ ↦ by rw [MonoidHom.id_apply, smul_mul', smul_C, smul_pow', smul_X,
+ Polynomial.map_mul, map_C, Polynomial.map_pow,
map_X, coe_fn_coe, g.map_smul, Polynomial.map_mul, map_C, Polynomial.map_pow, map_X,
smul_mul', smul_C, smul_pow', smul_X, coe_fn_coe]
-- Porting note: added `.toRingHom`
Empty lines were removed by executing the following Python script twice
import os
import re
# Loop through each file in the repository
for dir_path, dirs, files in os.walk('.'):
for filename in files:
if filename.endswith('.lean'):
file_path = os.path.join(dir_path, filename)
# Open the file and read its contents
with open(file_path, 'r') as file:
content = file.read()
# Use a regular expression to replace sequences of "variable" lines separated by empty lines
# with sequences without empty lines
modified_content = re.sub(r'(variable.*\n)\n(variable(?! .* in))', r'\1\2', content)
# Write the modified content back to the file
with open(file_path, 'w') as file:
file.write(modified_content)
@@ -25,7 +25,6 @@ open Polynomial
namespace Polynomial
variable (R : Type*) [Semiring R]
-
variable {M}
-- Porting note: changed `(· • ·) m` to `HSMul.hSMul m`
@@ -50,7 +49,6 @@ noncomputable instance [MulSemiringAction M R] : MulSemiringAction M R[X] :=
smul_eq_map R m ▸ Polynomial.map_mul (MulSemiringAction.toRingHom M R m) }
variable {M R}
-
variable [MulSemiringAction M R]
@[simp]
@@ -86,7 +84,6 @@ section CommRing
set_option linter.uppercaseLean3 false -- Porting note: `prod_X_*`
variable (G : Type*) [Group G] [Fintype G]
-
variable (R : Type*) [CommRing R] [MulSemiringAction G R]
open MulAction
@@ -125,9 +122,7 @@ end CommRing
namespace MulSemiringActionHom
variable {M}
-
variable {P : Type*} [CommSemiring P] [MulSemiringAction M P]
-
variable {Q : Type*} [CommSemiring Q] [MulSemiringAction M Q]
open Polynomial
Homogenises porting notes via capitalisation and addition of whitespace.
It makes the following changes:
@@ -28,7 +28,7 @@ variable (R : Type*) [Semiring R]
variable {M}
--- porting note: changed `(· • ·) m` to `HSMul.hSMul m`
+-- Porting note: changed `(· • ·) m` to `HSMul.hSMul m`
theorem smul_eq_map [MulSemiringAction M R] (m : M) :
HSMul.hSMul m = map (MulSemiringAction.toRingHom M R m) := by
suffices DistribMulAction.toAddMonoidHom R[X] m =
@@ -83,7 +83,7 @@ theorem smul_eval [MulSemiringAction G S] (g : G) (f : S[X]) (x : S) :
end Polynomial
section CommRing
-set_option linter.uppercaseLean3 false -- porting note: `prod_X_*`
+set_option linter.uppercaseLean3 false -- Porting note: `prod_X_*`
variable (G : Type*) [Group G] [Fintype G]
@@ -144,7 +144,7 @@ protected noncomputable def polynomial (g : P →+*[M] Q) : P[X] →+*[M] Q[X] w
rw [smul_mul', smul_C, smul_pow', smul_X, Polynomial.map_mul, map_C, Polynomial.map_pow,
map_X, coe_fn_coe, g.map_smul, Polynomial.map_mul, map_C, Polynomial.map_pow, map_X,
smul_mul', smul_C, smul_pow', smul_X, coe_fn_coe]
- -- porting note: added `.toRingHom`
+ -- Porting note: added `.toRingHom`
map_zero' := Polynomial.map_zero g.toRingHom
map_add' p q := Polynomial.map_add g.toRingHom
map_one' := Polynomial.map_one g.toRingHom
FunLike
to DFunLike
(#9785)
This prepares for the introduction of a non-dependent synonym of FunLike, which helps a lot with keeping #8386 readable.
This is entirely search-and-replace in 680197f combined with manual fixes in 4145626, e900597 and b8428f8. The commands that generated this change:
sed -i 's/\bFunLike\b/DFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\btoFunLike\b/toDFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/import Mathlib.Data.DFunLike/import Mathlib.Data.FunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\bHom_FunLike\b/Hom_DFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\binstFunLike\b/instDFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\bfunLike\b/instDFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\btoo many metavariables to apply `fun_like.has_coe_to_fun`/too many metavariables to apply `DFunLike.hasCoeToFun`/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
Co-authored-by: Anne Baanen <Vierkantor@users.noreply.github.com>
@@ -34,7 +34,7 @@ theorem smul_eq_map [MulSemiringAction M R] (m : M) :
suffices DistribMulAction.toAddMonoidHom R[X] m =
(mapRingHom (MulSemiringAction.toRingHom M R m)).toAddMonoidHom by
ext1 r
- exact FunLike.congr_fun this r
+ exact DFunLike.congr_fun this r
ext n r : 2
change m • monomial n r = map (MulSemiringAction.toRingHom M R m) (monomial n r)
rw [Polynomial.map_monomial, Polynomial.smul_monomial, MulSemiringAction.toRingHom_apply]
Nsmul
-> NSMul
, Zpow
-> ZPow
, etc (#9067)
Normalising to naming convention rule number 6.
@@ -92,33 +92,33 @@ variable (R : Type*) [CommRing R] [MulSemiringAction G R]
open MulAction
/-- the product of `(X - g • x)` over distinct `g • x`. -/
-noncomputable def prodXSubSmul (x : R) : R[X] :=
+noncomputable def prodXSubSMul (x : R) : R[X] :=
letI := Classical.decEq R
(Finset.univ : Finset (G ⧸ MulAction.stabilizer G x)).prod fun g ↦
Polynomial.X - Polynomial.C (ofQuotientStabilizer G x g)
-#align prod_X_sub_smul prodXSubSmul
+#align prod_X_sub_smul prodXSubSMul
-theorem prodXSubSmul.monic (x : R) : (prodXSubSmul G R x).Monic :=
+theorem prodXSubSMul.monic (x : R) : (prodXSubSMul G R x).Monic :=
Polynomial.monic_prod_of_monic _ _ fun _ _ ↦ Polynomial.monic_X_sub_C _
-#align prod_X_sub_smul.monic prodXSubSmul.monic
+#align prod_X_sub_smul.monic prodXSubSMul.monic
-theorem prodXSubSmul.eval (x : R) : (prodXSubSmul G R x).eval x = 0 :=
+theorem prodXSubSMul.eval (x : R) : (prodXSubSMul G R x).eval x = 0 :=
letI := Classical.decEq R
(map_prod ((Polynomial.aeval x).toRingHom.toMonoidHom : R[X] →* R) _ _).trans <|
Finset.prod_eq_zero (Finset.mem_univ <| QuotientGroup.mk 1) <| by simp
-#align prod_X_sub_smul.eval prodXSubSmul.eval
+#align prod_X_sub_smul.eval prodXSubSMul.eval
-theorem prodXSubSmul.smul (x : R) (g : G) : g • prodXSubSmul G R x = prodXSubSmul G R x :=
+theorem prodXSubSMul.smul (x : R) (g : G) : g • prodXSubSMul G R x = prodXSubSMul G R x :=
letI := Classical.decEq R
Finset.smul_prod.trans <|
Fintype.prod_bijective _ (MulAction.bijective g) _ _ fun g' ↦ by
rw [ofQuotientStabilizer_smul, smul_sub, Polynomial.smul_X, Polynomial.smul_C]
-#align prod_X_sub_smul.smul prodXSubSmul.smul
+#align prod_X_sub_smul.smul prodXSubSMul.smul
-theorem prodXSubSmul.coeff (x : R) (g : G) (n : ℕ) :
- g • (prodXSubSmul G R x).coeff n = (prodXSubSmul G R x).coeff n := by
- rw [← Polynomial.coeff_smul, prodXSubSmul.smul]
-#align prod_X_sub_smul.coeff prodXSubSmul.coeff
+theorem prodXSubSMul.coeff (x : R) (g : G) (n : ℕ) :
+ g • (prodXSubSMul G R x).coeff n = (prodXSubSMul G R x).coeff n := by
+ rw [← Polynomial.coeff_smul, prodXSubSMul.smul]
+#align prod_X_sub_smul.coeff prodXSubSMul.coeff
end CommRing
Hom
and file name (#8095)
I believe the file defining a type of morphisms belongs alongside the file defining the structure this morphism works on. So I would like to reorganize the files in the Mathlib.Algebra.Hom
folder so that e.g. Mathlib.Algebra.Hom.Ring
becomes Mathlib.Algebra.Ring.Hom
and Mathlib.Algebra.Hom.NonUnitalAlg
becomes Mathlib.Algebra.Algebra.NonUnitalHom
.
While fixing the imports I went ahead and sorted them for good luck.
The full list of changes is: renamed: Mathlib/Algebra/Hom/NonUnitalAlg.lean -> Mathlib/Algebra/Algebra/NonUnitalHom.lean renamed: Mathlib/Algebra/Hom/Aut.lean -> Mathlib/Algebra/Group/Aut.lean renamed: Mathlib/Algebra/Hom/Commute.lean -> Mathlib/Algebra/Group/Commute/Hom.lean renamed: Mathlib/Algebra/Hom/Embedding.lean -> Mathlib/Algebra/Group/Embedding.lean renamed: Mathlib/Algebra/Hom/Equiv/Basic.lean -> Mathlib/Algebra/Group/Equiv/Basic.lean renamed: Mathlib/Algebra/Hom/Equiv/TypeTags.lean -> Mathlib/Algebra/Group/Equiv/TypeTags.lean renamed: Mathlib/Algebra/Hom/Equiv/Units/Basic.lean -> Mathlib/Algebra/Group/Units/Equiv.lean renamed: Mathlib/Algebra/Hom/Equiv/Units/GroupWithZero.lean -> Mathlib/Algebra/GroupWithZero/Units/Equiv.lean renamed: Mathlib/Algebra/Hom/Freiman.lean -> Mathlib/Algebra/Group/Freiman.lean renamed: Mathlib/Algebra/Hom/Group/Basic.lean -> Mathlib/Algebra/Group/Hom/Basic.lean renamed: Mathlib/Algebra/Hom/Group/Defs.lean -> Mathlib/Algebra/Group/Hom/Defs.lean renamed: Mathlib/Algebra/Hom/GroupAction.lean -> Mathlib/GroupTheory/GroupAction/Hom.lean renamed: Mathlib/Algebra/Hom/GroupInstances.lean -> Mathlib/Algebra/Group/Hom/Instances.lean renamed: Mathlib/Algebra/Hom/Iterate.lean -> Mathlib/Algebra/GroupPower/IterateHom.lean renamed: Mathlib/Algebra/Hom/Centroid.lean -> Mathlib/Algebra/Ring/CentroidHom.lean renamed: Mathlib/Algebra/Hom/Ring/Basic.lean -> Mathlib/Algebra/Ring/Hom/Basic.lean renamed: Mathlib/Algebra/Hom/Ring/Defs.lean -> Mathlib/Algebra/Ring/Hom/Defs.lean renamed: Mathlib/Algebra/Hom/Units.lean -> Mathlib/Algebra/Group/Units/Hom.lean
Zulip thread: https://leanprover.zulipchat.com/#narrow/stream/287929-mathlib4/topic/Reorganizing.20.60Mathlib.2EAlgebra.2EHom.60
@@ -4,9 +4,9 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Kenny Lau
-/
import Mathlib.Algebra.GroupRingAction.Basic
-import Mathlib.Algebra.Hom.GroupAction
import Mathlib.Data.Polynomial.AlgebraMap
import Mathlib.Data.Polynomial.Monic
+import Mathlib.GroupTheory.GroupAction.Hom
import Mathlib.GroupTheory.GroupAction.Quotient
#align_import algebra.polynomial.group_ring_action from "leanprover-community/mathlib"@"afad8e438d03f9d89da2914aa06cb4964ba87a18"
open Classical
(#7706)
This doesn't change any polynomial operations, but:
Decidable
values computable (otherwise, they're pointless!)This is exhaustive, within the directories it touches.
Once again, the use of letI := Classical.decEq R
instead of classical
here is because of the weird style of proofs in these files, where if
is preferred to by_cases
.
@@ -91,10 +91,9 @@ variable (R : Type*) [CommRing R] [MulSemiringAction G R]
open MulAction
-open Classical
-
/-- the product of `(X - g • x)` over distinct `g • x`. -/
noncomputable def prodXSubSmul (x : R) : R[X] :=
+ letI := Classical.decEq R
(Finset.univ : Finset (G ⧸ MulAction.stabilizer G x)).prod fun g ↦
Polynomial.X - Polynomial.C (ofQuotientStabilizer G x g)
#align prod_X_sub_smul prodXSubSmul
@@ -104,11 +103,13 @@ theorem prodXSubSmul.monic (x : R) : (prodXSubSmul G R x).Monic :=
#align prod_X_sub_smul.monic prodXSubSmul.monic
theorem prodXSubSmul.eval (x : R) : (prodXSubSmul G R x).eval x = 0 :=
+ letI := Classical.decEq R
(map_prod ((Polynomial.aeval x).toRingHom.toMonoidHom : R[X] →* R) _ _).trans <|
Finset.prod_eq_zero (Finset.mem_univ <| QuotientGroup.mk 1) <| by simp
#align prod_X_sub_smul.eval prodXSubSmul.eval
theorem prodXSubSmul.smul (x : R) (g : G) : g • prodXSubSmul G R x = prodXSubSmul G R x :=
+ letI := Classical.decEq R
Finset.smul_prod.trans <|
Fintype.prod_bijective _ (MulAction.bijective g) _ _ fun g' ↦ by
rw [ofQuotientStabilizer_smul, smul_sub, Polynomial.smul_X, Polynomial.smul_C]
This removes redundant field values of the form add := add
for smaller terms and less unfolding during unification.
A list of all files containing a structure instance of the form { a1, ... with x1 := val, ... }
where some xi
is a field of some aj
was generated by modifying the structure instance elaboration algorithm to print such overlaps to stdout in a custom toolchain.
Using that toolchain, I went through each file on the list and attempted to remove algebraic fields that overlapped and were redundant, eg add := add
and not toFun
(though some other ones did creep in). If things broke (which was the case in a couple of cases), I did not push further and reverted.
It is possible that pushing harder and trying to remove all redundant overlaps will yield further improvements.
@@ -44,7 +44,6 @@ variable (M)
noncomputable instance [MulSemiringAction M R] : MulSemiringAction M R[X] :=
{ Polynomial.distribMulAction with
- smul := (· • ·)
smul_one := fun m ↦
smul_eq_map R m ▸ Polynomial.map_one (MulSemiringAction.toRingHom M R m)
smul_mul := fun m _ _ ↦
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -18,13 +18,13 @@ This file contains instances and definitions relating `MulSemiringAction` to `Po
-/
-variable (M : Type _) [Monoid M]
+variable (M : Type*) [Monoid M]
open Polynomial
namespace Polynomial
-variable (R : Type _) [Semiring R]
+variable (R : Type*) [Semiring R]
variable {M}
@@ -60,7 +60,7 @@ theorem smul_X (m : M) : (m • X : R[X]) = X :=
set_option linter.uppercaseLean3 false in
#align polynomial.smul_X Polynomial.smul_X
-variable (S : Type _) [CommSemiring S] [MulSemiringAction M S]
+variable (S : Type*) [CommSemiring S] [MulSemiringAction M S]
theorem smul_eval_smul (m : M) (f : S[X]) (x : S) : (m • f).eval (m • x) = m • f.eval x :=
Polynomial.induction_on f (fun r ↦ by rw [smul_C, eval_C, eval_C])
@@ -69,7 +69,7 @@ theorem smul_eval_smul (m : M) (f : S[X]) (x : S) : (m • f).eval (m • x) = m
eval_pow, eval_X, smul_mul', smul_pow']
#align polynomial.smul_eval_smul Polynomial.smul_eval_smul
-variable (G : Type _) [Group G]
+variable (G : Type*) [Group G]
theorem eval_smul' [MulSemiringAction G S] (g : G) (f : S[X]) (x : S) :
f.eval (g • x) = g • (g⁻¹ • f).eval x := by
@@ -86,9 +86,9 @@ end Polynomial
section CommRing
set_option linter.uppercaseLean3 false -- porting note: `prod_X_*`
-variable (G : Type _) [Group G] [Fintype G]
+variable (G : Type*) [Group G] [Fintype G]
-variable (R : Type _) [CommRing R] [MulSemiringAction G R]
+variable (R : Type*) [CommRing R] [MulSemiringAction G R]
open MulAction
@@ -126,9 +126,9 @@ namespace MulSemiringActionHom
variable {M}
-variable {P : Type _} [CommSemiring P] [MulSemiringAction M P]
+variable {P : Type*} [CommSemiring P] [MulSemiringAction M P]
-variable {Q : Type _} [CommSemiring Q] [MulSemiringAction M Q]
+variable {Q : Type*} [CommSemiring Q] [MulSemiringAction M Q]
open Polynomial
@@ -2,11 +2,6 @@
Copyright (c) 2020 Kenny Lau. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Kenny Lau
-
-! This file was ported from Lean 3 source module algebra.polynomial.group_ring_action
-! leanprover-community/mathlib commit afad8e438d03f9d89da2914aa06cb4964ba87a18
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.Algebra.GroupRingAction.Basic
import Mathlib.Algebra.Hom.GroupAction
@@ -14,6 +9,8 @@ import Mathlib.Data.Polynomial.AlgebraMap
import Mathlib.Data.Polynomial.Monic
import Mathlib.GroupTheory.GroupAction.Quotient
+#align_import algebra.polynomial.group_ring_action from "leanprover-community/mathlib"@"afad8e438d03f9d89da2914aa06cb4964ba87a18"
+
/-!
# Group action on rings applied to polynomials
ext
(#5258)
Co-authored-by: Xavier Roblot <46200072+xroblot@users.noreply.github.com> Co-authored-by: Joël Riou <joel.riou@universite-paris-saclay.fr> Co-authored-by: Riccardo Brasca <riccardo.brasca@gmail.com> Co-authored-by: Yury G. Kudryashov <urkud@urkud.name> Co-authored-by: Scott Morrison <scott.morrison@anu.edu.au> Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Jeremy Tan Jie Rui <reddeloostw@gmail.com> Co-authored-by: Pol'tta / Miyahara Kō <pol_tta@outlook.jp> Co-authored-by: Jason Yuen <jason_yuen2007@hotmail.com> Co-authored-by: Mario Carneiro <di.gama@gmail.com> Co-authored-by: Jireh Loreaux <loreaujy@gmail.com> Co-authored-by: Ruben Van de Velde <65514131+Ruben-VandeVelde@users.noreply.github.com> Co-authored-by: Kyle Miller <kmill31415@gmail.com> Co-authored-by: Heather Macbeth <25316162+hrmacbeth@users.noreply.github.com> Co-authored-by: Jujian Zhang <jujian.zhang1998@outlook.com> Co-authored-by: Yaël Dillies <yael.dillies@gmail.com>
@@ -38,7 +38,7 @@ theorem smul_eq_map [MulSemiringAction M R] (m : M) :
(mapRingHom (MulSemiringAction.toRingHom M R m)).toAddMonoidHom by
ext1 r
exact FunLike.congr_fun this r
- ext (n r) : 2
+ ext n r : 2
change m • monomial n r = map (MulSemiringAction.toRingHom M R m) (monomial n r)
rw [Polynomial.map_monomial, Polynomial.smul_monomial, MulSemiringAction.toRingHom_apply]
#align polynomial.smul_eq_map Polynomial.smul_eq_map
by
s! (#3825)
This PR puts, with one exception, every single remaining by
that lies all by itself on its own line to the previous line, thus matching the current behaviour of start-port.sh
. The exception is when the by
begins the second or later argument to a tuple or anonymous constructor; see https://github.com/leanprover-community/mathlib4/pull/3825#discussion_r1186702599.
Essentially this is s/\n *by$/ by/g
, but with manual editing to satisfy the linter's max-100-char-line requirement. The Python style linter is also modified to catch these "isolated by
s".
@@ -34,10 +34,8 @@ variable {M}
-- porting note: changed `(· • ·) m` to `HSMul.hSMul m`
theorem smul_eq_map [MulSemiringAction M R] (m : M) :
HSMul.hSMul m = map (MulSemiringAction.toRingHom M R m) := by
- suffices
- DistribMulAction.toAddMonoidHom R[X] m =
- (mapRingHom (MulSemiringAction.toRingHom M R m)).toAddMonoidHom
- by
+ suffices DistribMulAction.toAddMonoidHom R[X] m =
+ (mapRingHom (MulSemiringAction.toRingHom M R m)).toAddMonoidHom by
ext1 r
exact FunLike.congr_fun this r
ext (n r) : 2
The unported dependencies are