group_theory.group_action.defs
⟷
Mathlib.GroupTheory.GroupAction.Defs
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)
(last sync)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -4,8 +4,8 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Chris Hughes, Yury Kudryashov
-/
import Algebra.Group.TypeTags
-import Algebra.Group.Commute
-import Algebra.Hom.Group
+import Algebra.Group.Commute.Defs
+import Algebra.Group.Hom.Defs
import Algebra.Opposites
import Logic.Embedding.Basic
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -754,19 +754,19 @@ theorem SMulCommClass.of_mul_smul_one {M N} [Monoid N] [SMul M N]
#align vadd_comm_class.of_add_vadd_zero VAddCommClass.of_add_vadd_zero
-/
-#print smulOneHom /-
+#print MonoidHom.smulOneHom /-
/-- If the multiplicative action of `M` on `N` is compatible with multiplication on `N`, then
`λ x, x • 1` is a monoid homomorphism from `M` to `N`. -/
@[to_additive
"If the additive action of `M` on `N` is compatible with addition on `N`, then\n`λ x, x +ᵥ 0` is an additive monoid homomorphism from `M` to `N`.",
simps]
-def smulOneHom {M N} [Monoid M] [Monoid N] [MulAction M N] [IsScalarTower M N N] : M →* N
+def MonoidHom.smulOneHom {M N} [Monoid M] [Monoid N] [MulAction M N] [IsScalarTower M N N] : M →* N
where
toFun x := x • 1
map_one' := one_smul _ _
map_mul' x y := by rw [smul_one_mul, smul_smul]
-#align smul_one_hom smulOneHom
-#align vadd_zero_hom vaddZeroHom
+#align smul_one_hom MonoidHom.smulOneHom
+#align vadd_zero_hom AddMonoidHom.vaddZeroHom
-/
end CompatibleScalar
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,11 +3,11 @@ Copyright (c) 2018 Chris Hughes. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Chris Hughes, Yury Kudryashov
-/
-import Mathbin.Algebra.Group.TypeTags
-import Mathbin.Algebra.Group.Commute
-import Mathbin.Algebra.Hom.Group
-import Mathbin.Algebra.Opposites
-import Mathbin.Logic.Embedding.Basic
+import Algebra.Group.TypeTags
+import Algebra.Group.Commute
+import Algebra.Hom.Group
+import Algebra.Opposites
+import Logic.Embedding.Basic
#align_import group_theory.group_action.defs from "leanprover-community/mathlib"@"448144f7ae193a8990cb7473c9e9a01990f64ac7"
mathlib commit https://github.com/leanprover-community/mathlib/commit/32a7e535287f9c73f2e4d2aef306a39190f0b504
@@ -121,7 +121,7 @@ class AddAction (G : Type _) (P : Type _) [AddMonoid G] extends VAdd G P where
@[ext, protect_proj, to_additive]
class MulAction (α : Type _) (β : Type _) [Monoid α] extends SMul α β where
one_smul : ∀ b : β, (1 : α) • b = b
- mul_smul : ∀ (x y : α) (b : β), (x * y) • b = x • y • b
+ hMul_smul : ∀ (x y : α) (b : β), (x * y) • b = x • y • b
#align mul_action MulAction
#align add_action AddAction
-/
@@ -209,7 +209,7 @@ class SMulCommClass (M N α : Type _) [SMul M α] [SMul N α] : Prop where
#align vadd_comm_class VAddCommClass
-/
-export MulAction (mul_smul)
+export MulAction (hMul_smul)
export AddAction (add_vadd)
@@ -529,7 +529,7 @@ variable [Monoid M] [MulAction M α]
#print smul_smul /-
@[to_additive]
theorem smul_smul (a₁ a₂ : M) (b : α) : a₁ • a₂ • b = (a₁ * a₂) • b :=
- (mul_smul _ _ _).symm
+ (hMul_smul _ _ _).symm
#align smul_smul smul_smul
#align vadd_vadd vadd_vadd
-/
@@ -557,7 +557,7 @@ theorem one_smul_eq_id : ((· • ·) (1 : M) : α → α) = id :=
/-- `has_smul` version of `comp_mul_left` -/
@[to_additive "`has_vadd` version of `comp_add_left`"]
theorem comp_smul_left (a₁ a₂ : M) : (· • ·) a₁ ∘ (· • ·) a₂ = ((· • ·) (a₁ * a₂) : α → α) :=
- funext fun _ => (mul_smul _ _ _).symm
+ funext fun _ => (hMul_smul _ _ _).symm
#align comp_smul_left comp_smul_left
#align comp_vadd_left comp_vadd_left
-/
@@ -573,7 +573,7 @@ protected def Function.Injective.mulAction [SMul M β] (f : β → α) (hf : Inj
where
smul := (· • ·)
one_smul x := hf <| (smul _ _).trans <| one_smul _ (f x)
- mul_smul c₁ c₂ x := hf <| by simp only [smul, mul_smul]
+ hMul_smul c₁ c₂ x := hf <| by simp only [smul, mul_smul]
#align function.injective.mul_action Function.Injective.mulAction
#align function.injective.add_action Function.Injective.addAction
-/
@@ -587,7 +587,7 @@ protected def Function.Surjective.mulAction [SMul M β] (f : α → β) (hf : Su
where
smul := (· • ·)
one_smul y := by rcases hf y with ⟨x, rfl⟩; rw [← smul, one_smul]
- mul_smul c₁ c₂ y := by rcases hf y with ⟨x, rfl⟩; simp only [← smul, mul_smul]
+ hMul_smul c₁ c₂ y := by rcases hf y with ⟨x, rfl⟩; simp only [← smul, mul_smul]
#align function.surjective.mul_action Function.Surjective.mulAction
#align function.surjective.add_action Function.Surjective.addAction
-/
@@ -605,7 +605,7 @@ def Function.Surjective.mulActionLeft {R S M : Type _} [Monoid R] [MulAction R M
MulAction S M where
smul := (· • ·)
one_smul b := by rw [← f.map_one, hsmul, one_smul]
- mul_smul := hf.Forall₂.mpr fun a b x => by simp only [← f.map_mul, hsmul, mul_smul]
+ hMul_smul := hf.Forall₂.mpr fun a b x => by simp only [← f.map_mul, hsmul, mul_smul]
#align function.surjective.mul_action_left Function.Surjective.mulActionLeft
#align function.surjective.add_action_left Function.Surjective.addActionLeft
-/
@@ -624,7 +624,7 @@ instance (priority := 910) Monoid.toMulAction : MulAction M M
where
smul := (· * ·)
one_smul := one_mul
- mul_smul := mul_assoc
+ hMul_smul := mul_assoc
#align monoid.to_mul_action Monoid.toMulAction
#align add_monoid.to_add_action AddMonoid.toAddAction
-/
@@ -637,7 +637,7 @@ add_decl_doc AddMonoid.toAddAction
#print IsScalarTower.left /-
@[to_additive]
instance IsScalarTower.left : IsScalarTower M M α :=
- ⟨fun x y z => mul_smul x y z⟩
+ ⟨fun x y z => hMul_smul x y z⟩
#align is_scalar_tower.left IsScalarTower.left
#align vadd_assoc_class.left VAddAssocClass.left
-/
@@ -695,7 +695,7 @@ def compHom [Monoid N] (g : N →* M) : MulAction N α
where
smul := SMul.comp.smul g
one_smul := by simp [g.map_one, MulAction.one_smul]
- mul_smul := by simp [g.map_mul, MulAction.mul_smul]
+ hMul_smul := by simp [g.map_mul, MulAction.hMul_smul]
#align mul_action.comp_hom MulAction.compHom
#align add_action.comp_hom AddAction.compHom
-/
@@ -1033,7 +1033,7 @@ def DistribMulAction.toAddMonoidEnd : M →* AddMonoid.End A
where
toFun := DistribMulAction.toAddMonoidHom A
map_one' := AddMonoidHom.ext <| one_smul M
- map_mul' x y := AddMonoidHom.ext <| mul_smul x y
+ map_mul' x y := AddMonoidHom.ext <| hMul_smul x y
#align distrib_mul_action.to_add_monoid_End DistribMulAction.toAddMonoidEnd
-/
@@ -1090,7 +1090,7 @@ conjugation actions. -/
@[ext]
class MulDistribMulAction (M : Type _) (A : Type _) [Monoid M] [Monoid A] extends
MulAction M A where
- smul_mul : ∀ (r : M) (x y : A), r • (x * y) = r • x * r • y
+ smul_hMul : ∀ (r : M) (x y : A), r • (x * y) = r • x * r • y
smul_one : ∀ r : M, r • (1 : A) = 1
#align mul_distrib_mul_action MulDistribMulAction
-/
@@ -1103,7 +1103,7 @@ variable [Monoid M] [Monoid A] [MulDistribMulAction M A]
#print smul_mul' /-
theorem smul_mul' (a : M) (b₁ b₂ : A) : a • (b₁ * b₂) = a • b₁ * a • b₂ :=
- MulDistribMulAction.smul_mul _ _ _
+ MulDistribMulAction.smul_hMul _ _ _
#align smul_mul' smul_mul'
-/
@@ -1116,7 +1116,7 @@ protected def Function.Injective.mulDistribMulAction [Monoid B] [SMul M B] (f :
(hf : Injective f) (smul : ∀ (c : M) (x), f (c • x) = c • f x) : MulDistribMulAction M B :=
{ hf.MulAction f smul with
smul := (· • ·)
- smul_mul := fun c x y => hf <| by simp only [smul, f.map_mul, smul_mul']
+ smul_hMul := fun c x y => hf <| by simp only [smul, f.map_mul, smul_mul']
smul_one := fun c => hf <| by simp only [smul, f.map_one, smul_one] }
#align function.injective.mul_distrib_mul_action Function.Injective.mulDistribMulAction
-/
@@ -1130,7 +1130,7 @@ protected def Function.Surjective.mulDistribMulAction [Monoid B] [SMul M B] (f :
(hf : Surjective f) (smul : ∀ (c : M) (x), f (c • x) = c • f x) : MulDistribMulAction M B :=
{ hf.MulAction f smul with
smul := (· • ·)
- smul_mul := fun c x y => by
+ smul_hMul := fun c x y => by
rcases hf x with ⟨x, rfl⟩; rcases hf y with ⟨y, rfl⟩
simp only [smul_mul', ← smul, ← f.map_mul]
smul_one := fun c => by simp only [← f.map_one, ← smul, smul_one] }
@@ -1147,7 +1147,7 @@ def MulDistribMulAction.compHom [Monoid N] (f : N →* M) : MulDistribMulAction
{ MulAction.compHom A f with
smul := SMul.comp.smul f
smul_one := fun x => smul_one (f x)
- smul_mul := fun x => smul_mul' (f x) }
+ smul_hMul := fun x => smul_mul' (f x) }
#align mul_distrib_mul_action.comp_hom MulDistribMulAction.compHom
-/
@@ -1180,7 +1180,7 @@ def MulDistribMulAction.toMonoidEnd : M →* Monoid.End A
where
toFun := MulDistribMulAction.toMonoidHom A
map_one' := MonoidHom.ext <| one_smul M
- map_mul' x y := MonoidHom.ext <| mul_smul x y
+ map_mul' x y := MonoidHom.ext <| hMul_smul x y
#align mul_distrib_mul_action.to_monoid_End MulDistribMulAction.toMonoidEnd
-/
@@ -1246,7 +1246,7 @@ instance Function.End.applyMulAction : MulAction (Function.End α) α
where
smul := (· <| ·)
one_smul _ := rfl
- mul_smul _ _ _ := rfl
+ hMul_smul _ _ _ := rfl
#align function.End.apply_mul_action Function.End.applyMulAction
-/
@@ -1274,7 +1274,7 @@ instance AddMonoid.End.applyDistribMulAction [AddMonoid α] : DistribMulAction (
smul_zero := AddMonoidHom.map_zero
smul_add := AddMonoidHom.map_add
one_smul _ := rfl
- mul_smul _ _ _ := rfl
+ hMul_smul _ _ _ := rfl
#align add_monoid.End.apply_distrib_mul_action AddMonoid.End.applyDistribMulAction
-/
@@ -1300,7 +1300,7 @@ def MulAction.toEndHom [Monoid M] [MulAction M α] : M →* Function.End α
where
toFun := (· • ·)
map_one' := funext (one_smul M)
- map_mul' x y := funext (mul_smul x y)
+ map_mul' x y := funext (hMul_smul x y)
#align mul_action.to_End_hom MulAction.toEndHom
-/
@@ -1397,7 +1397,7 @@ theorem ofAdd_smul [VAdd α β] (a : α) (b : β) : ofAdd a • b = a +ᵥ b :=
instance Additive.addAction [Monoid α] [MulAction α β] : AddAction (Additive α) β
where
zero_vadd := MulAction.one_smul
- add_vadd := MulAction.mul_smul
+ add_vadd := MulAction.hMul_smul
#align additive.add_action Additive.addAction
-/
@@ -1405,7 +1405,7 @@ instance Additive.addAction [Monoid α] [MulAction α β] : AddAction (Additive
instance Multiplicative.mulAction [AddMonoid α] [AddAction α β] : MulAction (Multiplicative α) β
where
one_smul := AddAction.zero_vadd
- mul_smul := AddAction.add_vadd
+ hMul_smul := AddAction.add_vadd
#align multiplicative.mul_action Multiplicative.mulAction
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,11 +2,6 @@
Copyright (c) 2018 Chris Hughes. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Chris Hughes, Yury Kudryashov
-
-! This file was ported from Lean 3 source module group_theory.group_action.defs
-! leanprover-community/mathlib commit 448144f7ae193a8990cb7473c9e9a01990f64ac7
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.Algebra.Group.TypeTags
import Mathbin.Algebra.Group.Commute
@@ -14,6 +9,8 @@ import Mathbin.Algebra.Hom.Group
import Mathbin.Algebra.Opposites
import Mathbin.Logic.Embedding.Basic
+#align_import group_theory.group_action.defs from "leanprover-community/mathlib"@"448144f7ae193a8990cb7473c9e9a01990f64ac7"
+
/-!
# Definitions of group actions
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -83,12 +83,14 @@ export FaithfulSMul (eq_of_smul_eq_smul)
export FaithfulVAdd (eq_of_vadd_eq_vadd)
+#print smul_left_injective' /-
@[to_additive]
theorem smul_left_injective' [SMul M α] [FaithfulSMul M α] :
Function.Injective ((· • ·) : M → α → α) := fun m₁ m₂ h =>
FaithfulSMul.eq_of_smul_eq_smul (congr_fun h)
#align smul_left_injective' smul_left_injective'
#align vadd_left_injective' vadd_left_injective'
+-/
#print Mul.toSMul /-
-- see Note [lower instance priority]
@@ -162,24 +164,30 @@ namespace MulAction
variable (M) {α} [SMul M α] [IsPretransitive M α]
+#print MulAction.exists_smul_eq /-
@[to_additive]
theorem exists_smul_eq (x y : α) : ∃ m : M, m • x = y :=
IsPretransitive.exists_smul_eq x y
#align mul_action.exists_smul_eq MulAction.exists_smul_eq
#align add_action.exists_vadd_eq AddAction.exists_vadd_eq
+-/
+#print MulAction.surjective_smul /-
@[to_additive]
theorem surjective_smul (x : α) : Surjective fun c : M => c • x :=
exists_smul_eq M x
#align mul_action.surjective_smul MulAction.surjective_smul
#align add_action.surjective_vadd AddAction.surjective_vadd
+-/
+#print MulAction.Regular.isPretransitive /-
/-- The regular action of a group on itself is transitive. -/
@[to_additive "The regular action of a group on itself is transitive."]
instance Regular.isPretransitive [Group G] : IsPretransitive G G :=
⟨fun x y => ⟨y * x⁻¹, inv_mul_cancel_right _ _⟩⟩
#align mul_action.regular.is_pretransitive MulAction.Regular.isPretransitive
#align add_action.regular.is_pretransitive AddAction.Regular.isPretransitive
+-/
end MulAction
@@ -230,6 +238,7 @@ An example of where this is used is `linear_map.prod_equiv`.
-/
+#print SMulCommClass.symm /-
/-- Commutativity of actions is a symmetric relation. This lemma can't be an instance because this
would cause a loop in the instance search graph. -/
@[to_additive]
@@ -238,6 +247,7 @@ theorem SMulCommClass.symm (M N α : Type _) [SMul M α] [SMul N α] [SMulCommCl
⟨fun a' a b => (smul_comm a a' b).symm⟩
#align smul_comm_class.symm SMulCommClass.symm
#align vadd_comm_class.symm VAddCommClass.symm
+-/
/-- Commutativity of additive actions is a symmetric relation. This lemma can't be an instance
because this would cause a loop in the instance search graph. -/
@@ -270,18 +280,22 @@ class IsScalarTower (M N α : Type _) [SMul M N] [SMul N α] [SMul M α] : Prop
#align vadd_assoc_class VAddAssocClass
-/
+#print smul_assoc /-
@[simp, to_additive]
theorem smul_assoc {M N} [SMul M N] [SMul N α] [SMul M α] [IsScalarTower M N α] (x : M) (y : N)
(z : α) : (x • y) • z = x • y • z :=
IsScalarTower.smul_assoc x y z
#align smul_assoc smul_assoc
#align vadd_assoc vadd_assoc
+-/
+#print Semigroup.isScalarTower /-
@[to_additive]
instance Semigroup.isScalarTower [Semigroup α] : IsScalarTower α α α :=
⟨mul_assoc⟩
#align semigroup.is_scalar_tower Semigroup.isScalarTower
#align add_semigroup.vadd_assoc_class AddSemigroup.isScalarTower
+-/
#print IsCentralVAdd /-
/-- A typeclass indicating that the right (aka `add_opposite`) and left actions by `M` on `α` are
@@ -303,12 +317,14 @@ class IsCentralScalar (M α : Type _) [SMul M α] [SMul Mᵐᵒᵖ α] : Prop wh
#align is_central_vadd IsCentralVAdd
-/
+#print IsCentralScalar.unop_smul_eq_smul /-
@[to_additive]
theorem IsCentralScalar.unop_smul_eq_smul {M α : Type _} [SMul M α] [SMul Mᵐᵒᵖ α]
[IsCentralScalar M α] (m : Mᵐᵒᵖ) (a : α) : MulOpposite.unop m • a = m • a :=
MulOpposite.rec' (fun m => (IsCentralScalar.op_smul_eq_smul _ _).symm) m
#align is_central_scalar.unop_smul_eq_smul IsCentralScalar.unop_smul_eq_smul
#align is_central_vadd.unop_vadd_eq_vadd IsCentralVAdd.unop_vadd_eq_vadd
+-/
export IsCentralVAdd (op_vadd_eq_vadd unop_vadd_eq_vadd)
@@ -384,6 +400,7 @@ def comp (g : N → M) : SMul N α where smul := SMul.comp.smul g
variable {α}
+#print SMul.comp.isScalarTower /-
/-- Given a tower of scalar actions `M → α → β`, if we use `has_smul.comp`
to pull back both of `M`'s actions by a map `g : N → M`, then we obtain a new
tower of scalar actions `N → α → β`.
@@ -398,7 +415,9 @@ theorem comp.isScalarTower [SMul M β] [SMul α β] [IsScalarTower M α β] (g :
{ smul_assoc := fun n => @smul_assoc _ _ _ _ _ _ _ (g n) }
#align has_smul.comp.is_scalar_tower SMul.comp.isScalarTower
#align has_vadd.comp.vadd_assoc_class VAdd.comp.isScalarTower
+-/
+#print SMul.comp.smulCommClass /-
/-- This cannot be an instance because it can cause infinite loops whenever the `has_smul` arguments
are still metavariables.
-/
@@ -410,7 +429,9 @@ theorem comp.smulCommClass [SMul β α] [SMulCommClass M β α] (g : N → M) :
{ smul_comm := fun n => @smul_comm _ _ _ _ _ _ (g n) }
#align has_smul.comp.smul_comm_class SMul.comp.smulCommClass
#align has_vadd.comp.vadd_comm_class VAdd.comp.vaddCommClass
+-/
+#print SMul.comp.smulCommClass' /-
/-- This cannot be an instance because it can cause infinite loops whenever the `has_smul` arguments
are still metavariables.
-/
@@ -422,6 +443,7 @@ theorem comp.smulCommClass' [SMul β α] [SMulCommClass β M α] (g : N → M) :
{ smul_comm := fun _ n => @smul_comm _ _ _ _ _ _ _ (g n) }
#align has_smul.comp.smul_comm_class' SMul.comp.smulCommClass'
#align has_vadd.comp.vadd_comm_class' VAdd.comp.vaddCommClass'
+-/
end SMul
@@ -449,6 +471,7 @@ theorem smul_mul_assoc [Mul β] [SMul α β] [IsScalarTower α β β] (r : α) (
#align vadd_add_assoc vadd_add_assoc
-/
+#print smul_smul_smul_comm /-
@[to_additive]
theorem smul_smul_smul_comm [SMul α β] [SMul α γ] [SMul β δ] [SMul α δ] [SMul γ δ]
[IsScalarTower α β δ] [IsScalarTower α γ δ] [SMulCommClass β γ δ] (a : α) (b : β) (c : γ)
@@ -456,6 +479,7 @@ theorem smul_smul_smul_comm [SMul α β] [SMul α γ] [SMul β δ] [SMul α δ]
infer_instance
#align smul_smul_smul_comm smul_smul_smul_comm
#align vadd_vadd_vadd_comm vadd_vadd_vadd_comm
+-/
variable [SMul M α]
@@ -505,33 +529,41 @@ section
variable [Monoid M] [MulAction M α]
+#print smul_smul /-
@[to_additive]
theorem smul_smul (a₁ a₂ : M) (b : α) : a₁ • a₂ • b = (a₁ * a₂) • b :=
(mul_smul _ _ _).symm
#align smul_smul smul_smul
#align vadd_vadd vadd_vadd
+-/
variable (M)
+#print one_smul /-
@[simp, to_additive]
theorem one_smul (b : α) : (1 : M) • b = b :=
MulAction.one_smul _
#align one_smul one_smul
#align zero_vadd zero_vadd
+-/
+#print one_smul_eq_id /-
/-- `has_smul` version of `one_mul_eq_id` -/
@[to_additive "`has_vadd` version of `zero_add_eq_id`"]
theorem one_smul_eq_id : ((· • ·) (1 : M) : α → α) = id :=
funext <| one_smul _
#align one_smul_eq_id one_smul_eq_id
#align zero_vadd_eq_id zero_vadd_eq_id
+-/
+#print comp_smul_left /-
/-- `has_smul` version of `comp_mul_left` -/
@[to_additive "`has_vadd` version of `comp_add_left`"]
theorem comp_smul_left (a₁ a₂ : M) : (· • ·) a₁ ∘ (· • ·) a₂ = ((· • ·) (a₁ * a₂) : α → α) :=
funext fun _ => (mul_smul _ _ _).symm
#align comp_smul_left comp_smul_left
#align comp_vadd_left comp_vadd_left
+-/
variable {M}
@@ -563,6 +595,7 @@ protected def Function.Surjective.mulAction [SMul M β] (f : α → β) (hf : Su
#align function.surjective.add_action Function.Surjective.addAction
-/
+#print Function.Surjective.mulActionLeft /-
/-- Push forward the action of `R` on `M` along a compatible surjective map `f : R →* S`.
See also `function.surjective.distrib_mul_action_left` and `function.surjective.module_left`.
@@ -578,6 +611,7 @@ def Function.Surjective.mulActionLeft {R S M : Type _} [Monoid R] [MulAction R M
mul_smul := hf.Forall₂.mpr fun a b x => by simp only [← f.map_mul, hsmul, mul_smul]
#align function.surjective.mul_action_left Function.Surjective.mulActionLeft
#align function.surjective.add_action_left Function.Surjective.addActionLeft
+-/
section
@@ -603,14 +637,17 @@ instance (priority := 910) Monoid.toMulAction : MulAction M M
This is promoted to an `add_torsor` by `add_group_is_add_torsor`. -/
add_decl_doc AddMonoid.toAddAction
+#print IsScalarTower.left /-
@[to_additive]
instance IsScalarTower.left : IsScalarTower M M α :=
⟨fun x y z => mul_smul x y z⟩
#align is_scalar_tower.left IsScalarTower.left
#align vadd_assoc_class.left VAddAssocClass.left
+-/
variable {M}
+#print smul_mul_smul /-
/-- Note that the `is_scalar_tower M α α` and `smul_comm_class M α α` typeclass arguments are
usually satisfied by `algebra M α`. -/
@[to_additive, nolint to_additive_doc]
@@ -619,6 +656,7 @@ theorem smul_mul_smul [Mul α] (r s : M) (x y : α) [IsScalarTower M α α] [SMu
rw [smul_mul_assoc, mul_smul_comm, ← smul_assoc, smul_eq_mul]
#align smul_mul_smul smul_mul_smul
#align vadd_add_vadd vadd_add_vadd
+-/
end
@@ -677,38 +715,49 @@ end
section CompatibleScalar
+#print smul_one_smul /-
@[simp, to_additive]
theorem smul_one_smul {M} (N) [Monoid N] [SMul M N] [MulAction N α] [SMul M α] [IsScalarTower M N α]
(x : M) (y : α) : (x • (1 : N)) • y = x • y := by rw [smul_assoc, one_smul]
#align smul_one_smul smul_one_smul
#align vadd_zero_vadd vadd_zero_vadd
+-/
+#print smul_one_mul /-
@[simp, to_additive]
theorem smul_one_mul {M N} [MulOneClass N] [SMul M N] [IsScalarTower M N N] (x : M) (y : N) :
x • 1 * y = x • y := by rw [smul_mul_assoc, one_mul]
#align smul_one_mul smul_one_mul
#align vadd_zero_add vadd_zero_add
+-/
+#print mul_smul_one /-
@[simp, to_additive]
theorem mul_smul_one {M N} [MulOneClass N] [SMul M N] [SMulCommClass M N N] (x : M) (y : N) :
y * x • 1 = x • y := by rw [← smul_eq_mul, ← smul_comm, smul_eq_mul, mul_one]
#align mul_smul_one mul_smul_one
#align add_vadd_zero add_vadd_zero
+-/
+#print IsScalarTower.of_smul_one_mul /-
@[to_additive]
theorem IsScalarTower.of_smul_one_mul {M N} [Monoid N] [SMul M N]
(h : ∀ (x : M) (y : N), x • (1 : N) * y = x • y) : IsScalarTower M N N :=
⟨fun x y z => by rw [← h, smul_eq_mul, mul_assoc, h, smul_eq_mul]⟩
#align is_scalar_tower.of_smul_one_mul IsScalarTower.of_smul_one_mul
#align vadd_assoc_class.of_vadd_zero_add VAddAssocClass.of_vadd_zero_add
+-/
+#print SMulCommClass.of_mul_smul_one /-
@[to_additive]
theorem SMulCommClass.of_mul_smul_one {M N} [Monoid N] [SMul M N]
(H : ∀ (x : M) (y : N), y * x • (1 : N) = x • y) : SMulCommClass M N N :=
⟨fun x y z => by rw [← H x z, smul_eq_mul, ← H, smul_eq_mul, mul_assoc]⟩
#align smul_comm_class.of_mul_smul_one SMulCommClass.of_mul_smul_one
#align vadd_comm_class.of_add_vadd_zero VAddCommClass.of_add_vadd_zero
+-/
+#print smulOneHom /-
/-- If the multiplicative action of `M` on `N` is compatible with multiplication on `N`, then
`λ x, x • 1` is a monoid homomorphism from `M` to `N`. -/
@[to_additive
@@ -721,6 +770,7 @@ def smulOneHom {M N} [Monoid M] [Monoid N] [MulAction M N] [IsScalarTower M N N]
map_mul' x y := by rw [smul_one_mul, smul_smul]
#align smul_one_hom smulOneHom
#align vadd_zero_hom vaddZeroHom
+-/
end CompatibleScalar
@@ -820,10 +870,13 @@ section DistribSMul
variable [AddZeroClass A] [DistribSMul M A]
+#print smul_add /-
theorem smul_add (a : M) (b₁ b₂ : A) : a • (b₁ + b₂) = a • b₁ + a • b₂ :=
DistribSMul.smul_add _ _ _
#align smul_add smul_add
+-/
+#print Function.Injective.distribSMul /-
/-- Pullback a distributive scalar multiplication along an injective additive monoid
homomorphism.
See note [reducible non-instances]. -/
@@ -834,7 +887,9 @@ protected def Function.Injective.distribSMul [AddZeroClass B] [SMul M B] (f : B
smul := (· • ·)
smul_add := fun c x y => hf <| by simp only [smul, map_add, smul_add] }
#align function.injective.distrib_smul Function.Injective.distribSMul
+-/
+#print Function.Surjective.distribSMul /-
/-- Pushforward a distributive scalar multiplication along a surjective additive monoid
homomorphism.
See note [reducible non-instances]. -/
@@ -847,7 +902,9 @@ protected def Function.Surjective.distribSMul [AddZeroClass B] [SMul M B] (f : A
rcases hf x with ⟨x, rfl⟩; rcases hf y with ⟨y, rfl⟩
simp only [smul_add, ← smul, ← map_add] }
#align function.surjective.distrib_smul Function.Surjective.distribSMul
+-/
+#print Function.Surjective.distribSMulLeft /-
/-- Push forward the multiplication of `R` on `M` along a compatible surjective map `f : R → S`.
See also `function.surjective.distrib_mul_action_left`.
@@ -860,6 +917,7 @@ def Function.Surjective.distribSMulLeft {R S M : Type _} [AddZeroClass M] [Distr
smul := (· • ·)
smul_add := hf.forall.mpr fun c x y => by simp only [hsmul, smul_add] }
#align function.surjective.distrib_smul_left Function.Surjective.distribSMulLeft
+-/
variable (A)
@@ -915,6 +973,7 @@ example :
(DistribMulAction.toMulAction.toSMul : SMul M A) = DistribMulAction.toDistribSMul.toSMul :=
rfl
+#print Function.Injective.distribMulAction /-
/-- Pullback a distributive multiplicative action along an injective additive monoid
homomorphism.
See note [reducible non-instances]. -/
@@ -923,7 +982,9 @@ protected def Function.Injective.distribMulAction [AddMonoid B] [SMul M B] (f :
(hf : Injective f) (smul : ∀ (c : M) (x), f (c • x) = c • f x) : DistribMulAction M B :=
{ hf.DistribSMul f smul, hf.MulAction f smul with smul := (· • ·) }
#align function.injective.distrib_mul_action Function.Injective.distribMulAction
+-/
+#print Function.Surjective.distribMulAction /-
/-- Pushforward a distributive multiplicative action along a surjective additive monoid
homomorphism.
See note [reducible non-instances]. -/
@@ -932,7 +993,9 @@ protected def Function.Surjective.distribMulAction [AddMonoid B] [SMul M B] (f :
(hf : Surjective f) (smul : ∀ (c : M) (x), f (c • x) = c • f x) : DistribMulAction M B :=
{ hf.DistribSMul f smul, hf.MulAction f smul with smul := (· • ·) }
#align function.surjective.distrib_mul_action Function.Surjective.distribMulAction
+-/
+#print Function.Surjective.distribMulActionLeft /-
/-- Push forward the action of `R` on `M` along a compatible surjective map `f : R →* S`.
See also `function.surjective.mul_action_left` and `function.surjective.module_left`.
@@ -943,6 +1006,7 @@ def Function.Surjective.distribMulActionLeft {R S M : Type _} [Monoid R] [AddMon
(hsmul : ∀ (c) (x : M), f c • x = c • x) : DistribMulAction S M :=
{ hf.distribSMulLeft f hsmul, hf.mulActionLeft f hsmul with smul := (· • ·) }
#align function.surjective.distrib_mul_action_left Function.Surjective.distribMulActionLeft
+-/
variable (A)
@@ -976,14 +1040,18 @@ def DistribMulAction.toAddMonoidEnd : M →* AddMonoid.End A
#align distrib_mul_action.to_add_monoid_End DistribMulAction.toAddMonoidEnd
-/
+#print AddMonoid.nat_smulCommClass /-
instance AddMonoid.nat_smulCommClass : SMulCommClass ℕ M A
where smul_comm n x y := ((DistribMulAction.toAddMonoidHom A x).map_nsmul y n).symm
#align add_monoid.nat_smul_comm_class AddMonoid.nat_smulCommClass
+-/
+#print AddMonoid.nat_smulCommClass' /-
-- `smul_comm_class.symm` is not registered as an instance, as it would cause a loop
instance AddMonoid.nat_smulCommClass' : SMulCommClass M ℕ A :=
SMulCommClass.symm _ _ _
#align add_monoid.nat_smul_comm_class' AddMonoid.nat_smulCommClass'
+-/
end
@@ -991,23 +1059,31 @@ section
variable [Monoid M] [AddGroup A] [DistribMulAction M A]
+#print AddGroup.int_smulCommClass /-
instance AddGroup.int_smulCommClass : SMulCommClass ℤ M A
where smul_comm n x y := ((DistribMulAction.toAddMonoidHom A x).map_zsmul y n).symm
#align add_group.int_smul_comm_class AddGroup.int_smulCommClass
+-/
+#print AddGroup.int_smulCommClass' /-
-- `smul_comm_class.symm` is not registered as an instance, as it would cause a loop
instance AddGroup.int_smulCommClass' : SMulCommClass M ℤ A :=
SMulCommClass.symm _ _ _
#align add_group.int_smul_comm_class' AddGroup.int_smulCommClass'
+-/
+#print smul_neg /-
@[simp]
theorem smul_neg (r : M) (x : A) : r • -x = -(r • x) :=
eq_neg_of_add_eq_zero_left <| by rw [← smul_add, neg_add_self, smul_zero]
#align smul_neg smul_neg
+-/
+#print smul_sub /-
theorem smul_sub (r : M) (x y : A) : r • (x - y) = r • x - r • y := by
rw [sub_eq_add_neg, sub_eq_add_neg, smul_add, smul_neg]
#align smul_sub smul_sub
+-/
end
@@ -1028,10 +1104,13 @@ section
variable [Monoid M] [Monoid A] [MulDistribMulAction M A]
+#print smul_mul' /-
theorem smul_mul' (a : M) (b₁ b₂ : A) : a • (b₁ * b₂) = a • b₁ * a • b₂ :=
MulDistribMulAction.smul_mul _ _ _
#align smul_mul' smul_mul'
+-/
+#print Function.Injective.mulDistribMulAction /-
/-- Pullback a multiplicative distributive multiplicative action along an injective monoid
homomorphism.
See note [reducible non-instances]. -/
@@ -1043,7 +1122,9 @@ protected def Function.Injective.mulDistribMulAction [Monoid B] [SMul M B] (f :
smul_mul := fun c x y => hf <| by simp only [smul, f.map_mul, smul_mul']
smul_one := fun c => hf <| by simp only [smul, f.map_one, smul_one] }
#align function.injective.mul_distrib_mul_action Function.Injective.mulDistribMulAction
+-/
+#print Function.Surjective.mulDistribMulAction /-
/-- Pushforward a multiplicative distributive multiplicative action along a surjective monoid
homomorphism.
See note [reducible non-instances]. -/
@@ -1057,6 +1138,7 @@ protected def Function.Surjective.mulDistribMulAction [Monoid B] [SMul M B] (f :
simp only [smul_mul', ← smul, ← f.map_mul]
smul_one := fun c => by simp only [← f.map_one, ← smul, smul_one] }
#align function.surjective.mul_distrib_mul_action Function.Surjective.mulDistribMulAction
+-/
variable (A)
@@ -1084,14 +1166,17 @@ def MulDistribMulAction.toMonoidHom (r : M) : A →* A
variable {A}
+#print MulDistribMulAction.toMonoidHom_apply /-
@[simp]
theorem MulDistribMulAction.toMonoidHom_apply (r : M) (x : A) :
MulDistribMulAction.toMonoidHom A r x = r • x :=
rfl
#align mul_distrib_mul_action.to_monoid_hom_apply MulDistribMulAction.toMonoidHom_apply
+-/
variable (M A)
+#print MulDistribMulAction.toMonoidEnd /-
/-- Each element of the monoid defines a monoid homomorphism. -/
@[simps]
def MulDistribMulAction.toMonoidEnd : M →* Monoid.End A
@@ -1100,6 +1185,7 @@ def MulDistribMulAction.toMonoidEnd : M →* Monoid.End A
map_one' := MonoidHom.ext <| one_smul M
map_mul' x y := MonoidHom.ext <| mul_smul x y
#align mul_distrib_mul_action.to_monoid_End MulDistribMulAction.toMonoidEnd
+-/
end
@@ -1107,14 +1193,18 @@ section
variable [Monoid M] [Group A] [MulDistribMulAction M A]
+#print smul_inv' /-
@[simp]
theorem smul_inv' (r : M) (x : A) : r • x⁻¹ = (r • x)⁻¹ :=
(MulDistribMulAction.toMonoidHom A r).map_inv x
#align smul_inv' smul_inv'
+-/
+#print smul_div' /-
theorem smul_div' (r : M) (x y : A) : r • (x / y) = r • x / r • y :=
map_div (MulDistribMulAction.toMonoidHom A r) x y
#align smul_div' smul_div'
+-/
end
@@ -1141,6 +1231,7 @@ instance : Inhabited (Function.End α) :=
variable {α}
+#print Function.End.applyMulAction /-
/-- The tautological action by `function.End α` on `α`.
This is generalized to bundled endomorphisms by:
@@ -1160,6 +1251,7 @@ instance Function.End.applyMulAction : MulAction (Function.End α) α
one_smul _ := rfl
mul_smul _ _ _ := rfl
#align function.End.apply_mul_action Function.End.applyMulAction
+-/
#print Function.End.smul_def /-
@[simp]
@@ -1189,16 +1281,21 @@ instance AddMonoid.End.applyDistribMulAction [AddMonoid α] : DistribMulAction (
#align add_monoid.End.apply_distrib_mul_action AddMonoid.End.applyDistribMulAction
-/
+#print AddMonoid.End.smul_def /-
@[simp]
theorem AddMonoid.End.smul_def [AddMonoid α] (f : AddMonoid.End α) (a : α) : f • a = f a :=
rfl
#align add_monoid.End.smul_def AddMonoid.End.smul_def
+-/
+#print AddMonoid.End.applyFaithfulSMul /-
/-- `add_monoid.End.apply_distrib_mul_action` is faithful. -/
instance AddMonoid.End.applyFaithfulSMul [AddMonoid α] : FaithfulSMul (AddMonoid.End α) α :=
⟨AddMonoidHom.ext⟩
#align add_monoid.End.apply_has_faithful_smul AddMonoid.End.applyFaithfulSMul
+-/
+#print MulAction.toEndHom /-
/-- The monoid hom representing a monoid action.
When `M` is a group, see `mul_action.to_perm_hom`. -/
@@ -1208,7 +1305,9 @@ def MulAction.toEndHom [Monoid M] [MulAction M α] : M →* Function.End α
map_one' := funext (one_smul M)
map_mul' x y := funext (mul_smul x y)
#align mul_action.to_End_hom MulAction.toEndHom
+-/
+#print MulAction.ofEndHom /-
/-- The monoid action induced by a monoid hom to `function.End α`
See note [reducible non-instances]. -/
@@ -1216,7 +1315,9 @@ See note [reducible non-instances]. -/
def MulAction.ofEndHom [Monoid M] (f : M →* Function.End α) : MulAction M α :=
MulAction.compHom α f
#align mul_action.of_End_hom MulAction.ofEndHom
+-/
+#print AddAction.functionEnd /-
/-- The tautological additive action by `additive (function.End α)` on `α`. -/
instance AddAction.functionEnd : AddAction (Additive (Function.End α)) α
where
@@ -1224,7 +1325,9 @@ instance AddAction.functionEnd : AddAction (Additive (Function.End α)) α
zero_vadd _ := rfl
add_vadd _ _ _ := rfl
#align add_action.function_End AddAction.functionEnd
+-/
+#print AddAction.toEndHom /-
/-- The additive monoid hom representing an additive monoid action.
When `M` is a group, see `add_action.to_perm_hom`. -/
@@ -1234,7 +1337,9 @@ def AddAction.toEndHom [AddMonoid M] [AddAction M α] : M →+ Additive (Functio
map_zero' := funext (zero_vadd M)
map_add' x y := funext (add_vadd x y)
#align add_action.to_End_hom AddAction.toEndHom
+-/
+#print AddAction.ofEndHom /-
/-- The additive action induced by a hom to `additive (function.End α)`
See note [reducible non-instances]. -/
@@ -1242,6 +1347,7 @@ See note [reducible non-instances]. -/
def AddAction.ofEndHom [AddMonoid M] (f : M →+ Additive (Function.End α)) : AddAction M α :=
AddAction.compHom α f
#align add_action.of_End_hom AddAction.ofEndHom
+-/
/-! ### `additive`, `multiplicative` -/
@@ -1262,25 +1368,33 @@ instance Multiplicative.smul [VAdd α β] : SMul (Multiplicative α) β :=
#align multiplicative.has_smul Multiplicative.smul
-/
+#print toMul_smul /-
@[simp]
theorem toMul_smul [SMul α β] (a) (b : β) : (toMul a : α) • b = a +ᵥ b :=
rfl
#align to_mul_smul toMul_smul
+-/
+#print ofMul_vadd /-
@[simp]
theorem ofMul_vadd [SMul α β] (a : α) (b : β) : ofMul a +ᵥ b = a • b :=
rfl
#align of_mul_vadd ofMul_vadd
+-/
+#print toAdd_vadd /-
@[simp]
theorem toAdd_vadd [VAdd α β] (a) (b : β) : (toAdd a : α) +ᵥ b = a • b :=
rfl
#align to_add_vadd toAdd_vadd
+-/
+#print ofAdd_smul /-
@[simp]
theorem ofAdd_smul [VAdd α β] (a : α) (b : β) : ofAdd a • b = a +ᵥ b :=
rfl
#align of_add_smul ofAdd_smul
+-/
#print Additive.addAction /-
instance Additive.addAction [Monoid α] [MulAction α β] : AddAction (Additive α) β
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -1016,7 +1016,7 @@ end
conjugation actions. -/
@[ext]
class MulDistribMulAction (M : Type _) (A : Type _) [Monoid M] [Monoid A] extends
- MulAction M A where
+ MulAction M A where
smul_mul : ∀ (r : M) (x y : A), r • (x * y) = r • x * r • y
smul_one : ∀ r : M, r • (1 : A) = 1
#align mul_distrib_mul_action MulDistribMulAction
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -83,12 +83,6 @@ export FaithfulSMul (eq_of_smul_eq_smul)
export FaithfulVAdd (eq_of_vadd_eq_vadd)
-/- warning: smul_left_injective' -> smul_left_injective' is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} {α : Type.{u2}} [_inst_1 : SMul.{u1, u2} M α] [_inst_2 : FaithfulSMul.{u1, u2} M α _inst_1], Function.Injective.{succ u1, succ u2} M (α -> α) (SMul.smul.{u1, u2} M α _inst_1)
-but is expected to have type
- forall {M : Type.{u2}} {α : Type.{u1}} [_inst_1 : SMul.{u2, u1} M α] [_inst_2 : FaithfulSMul.{u2, u1} M α _inst_1], Function.Injective.{succ u2, succ u1} M (α -> α) (fun (x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.165 : M) (x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.167 : α) => HSMul.hSMul.{u2, u1, u1} M α α (instHSMul.{u2, u1} M α _inst_1) x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.165 x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.167)
-Case conversion may be inaccurate. Consider using '#align smul_left_injective' smul_left_injective'ₓ'. -/
@[to_additive]
theorem smul_left_injective' [SMul M α] [FaithfulSMul M α] :
Function.Injective ((· • ·) : M → α → α) := fun m₁ m₂ h =>
@@ -168,36 +162,18 @@ namespace MulAction
variable (M) {α} [SMul M α] [IsPretransitive M α]
-/- warning: mul_action.exists_smul_eq -> MulAction.exists_smul_eq is a dubious translation:
-lean 3 declaration is
- forall (M : Type.{u1}) {α : Type.{u2}} [_inst_1 : SMul.{u1, u2} M α] [_inst_2 : MulAction.IsPretransitive.{u1, u2} M α _inst_1] (x : α) (y : α), Exists.{succ u1} M (fun (m : M) => Eq.{succ u2} α (SMul.smul.{u1, u2} M α _inst_1 m x) y)
-but is expected to have type
- forall (M : Type.{u2}) {α : Type.{u1}} [_inst_1 : SMul.{u2, u1} M α] [_inst_2 : MulAction.IsPretransitive.{u2, u1} M α _inst_1] (x : α) (y : α), Exists.{succ u2} M (fun (m : M) => Eq.{succ u1} α (HSMul.hSMul.{u2, u1, u1} M α α (instHSMul.{u2, u1} M α _inst_1) m x) y)
-Case conversion may be inaccurate. Consider using '#align mul_action.exists_smul_eq MulAction.exists_smul_eqₓ'. -/
@[to_additive]
theorem exists_smul_eq (x y : α) : ∃ m : M, m • x = y :=
IsPretransitive.exists_smul_eq x y
#align mul_action.exists_smul_eq MulAction.exists_smul_eq
#align add_action.exists_vadd_eq AddAction.exists_vadd_eq
-/- warning: mul_action.surjective_smul -> MulAction.surjective_smul is a dubious translation:
-lean 3 declaration is
- forall (M : Type.{u1}) {α : Type.{u2}} [_inst_1 : SMul.{u1, u2} M α] [_inst_2 : MulAction.IsPretransitive.{u1, u2} M α _inst_1] (x : α), Function.Surjective.{succ u1, succ u2} M α (fun (c : M) => SMul.smul.{u1, u2} M α _inst_1 c x)
-but is expected to have type
- forall (M : Type.{u2}) {α : Type.{u1}} [_inst_1 : SMul.{u2, u1} M α] [_inst_2 : MulAction.IsPretransitive.{u2, u1} M α _inst_1] (x : α), Function.Surjective.{succ u2, succ u1} M α (fun (c : M) => HSMul.hSMul.{u2, u1, u1} M α α (instHSMul.{u2, u1} M α _inst_1) c x)
-Case conversion may be inaccurate. Consider using '#align mul_action.surjective_smul MulAction.surjective_smulₓ'. -/
@[to_additive]
theorem surjective_smul (x : α) : Surjective fun c : M => c • x :=
exists_smul_eq M x
#align mul_action.surjective_smul MulAction.surjective_smul
#align add_action.surjective_vadd AddAction.surjective_vadd
-/- warning: mul_action.regular.is_pretransitive -> MulAction.Regular.isPretransitive is a dubious translation:
-lean 3 declaration is
- forall {G : Type.{u1}} [_inst_3 : Group.{u1} G], MulAction.IsPretransitive.{u1, u1} G G (Mul.toSMul.{u1} G (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))))
-but is expected to have type
- forall {G : Type.{u1}} [_inst_3 : Group.{u1} G], MulAction.IsPretransitive.{u1, u1} G G (Mul.toSMul.{u1} G (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))))
-Case conversion may be inaccurate. Consider using '#align mul_action.regular.is_pretransitive MulAction.Regular.isPretransitiveₓ'. -/
/-- The regular action of a group on itself is transitive. -/
@[to_additive "The regular action of a group on itself is transitive."]
instance Regular.isPretransitive [Group G] : IsPretransitive G G :=
@@ -254,12 +230,6 @@ An example of where this is used is `linear_map.prod_equiv`.
-/
-/- warning: smul_comm_class.symm -> SMulCommClass.symm is a dubious translation:
-lean 3 declaration is
- forall (M : Type.{u1}) (N : Type.{u2}) (α : Type.{u3}) [_inst_1 : SMul.{u1, u3} M α] [_inst_2 : SMul.{u2, u3} N α] [_inst_3 : SMulCommClass.{u1, u2, u3} M N α _inst_1 _inst_2], SMulCommClass.{u2, u1, u3} N M α _inst_2 _inst_1
-but is expected to have type
- forall (M : Type.{u3}) (N : Type.{u2}) (α : Type.{u1}) [_inst_1 : SMul.{u3, u1} M α] [_inst_2 : SMul.{u2, u1} N α] [_inst_3 : SMulCommClass.{u3, u2, u1} M N α _inst_1 _inst_2], SMulCommClass.{u2, u3, u1} N M α _inst_2 _inst_1
-Case conversion may be inaccurate. Consider using '#align smul_comm_class.symm SMulCommClass.symmₓ'. -/
/-- Commutativity of actions is a symmetric relation. This lemma can't be an instance because this
would cause a loop in the instance search graph. -/
@[to_additive]
@@ -300,12 +270,6 @@ class IsScalarTower (M N α : Type _) [SMul M N] [SMul N α] [SMul M α] : Prop
#align vadd_assoc_class VAddAssocClass
-/
-/- warning: smul_assoc -> smul_assoc is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : SMul.{u2, u3} M N] [_inst_2 : SMul.{u3, u1} N α] [_inst_3 : SMul.{u2, u1} M α] [_inst_4 : IsScalarTower.{u2, u3, u1} M N α _inst_1 _inst_2 _inst_3] (x : M) (y : N) (z : α), Eq.{succ u1} α (SMul.smul.{u3, u1} N α _inst_2 (SMul.smul.{u2, u3} M N _inst_1 x y) z) (SMul.smul.{u2, u1} M α _inst_3 x (SMul.smul.{u3, u1} N α _inst_2 y z))
-but is expected to have type
- forall {α : Type.{u1}} {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : SMul.{u3, u2} M N] [_inst_2 : SMul.{u2, u1} N α] [_inst_3 : SMul.{u3, u1} M α] [_inst_4 : IsScalarTower.{u3, u2, u1} M N α _inst_1 _inst_2 _inst_3] (x : M) (y : N) (z : α), Eq.{succ u1} α (HSMul.hSMul.{u2, u1, u1} N α α (instHSMul.{u2, u1} N α _inst_2) (HSMul.hSMul.{u3, u2, u2} M N N (instHSMul.{u3, u2} M N _inst_1) x y) z) (HSMul.hSMul.{u3, u1, u1} M α α (instHSMul.{u3, u1} M α _inst_3) x (HSMul.hSMul.{u2, u1, u1} N α α (instHSMul.{u2, u1} N α _inst_2) y z))
-Case conversion may be inaccurate. Consider using '#align smul_assoc smul_assocₓ'. -/
@[simp, to_additive]
theorem smul_assoc {M N} [SMul M N] [SMul N α] [SMul M α] [IsScalarTower M N α] (x : M) (y : N)
(z : α) : (x • y) • z = x • y • z :=
@@ -313,12 +277,6 @@ theorem smul_assoc {M N} [SMul M N] [SMul N α] [SMul M α] [IsScalarTower M N
#align smul_assoc smul_assoc
#align vadd_assoc vadd_assoc
-/- warning: semigroup.is_scalar_tower -> Semigroup.isScalarTower is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Semigroup.{u1} α], IsScalarTower.{u1, u1, u1} α α α (Mul.toSMul.{u1} α (Semigroup.toHasMul.{u1} α _inst_1)) (Mul.toSMul.{u1} α (Semigroup.toHasMul.{u1} α _inst_1)) (Mul.toSMul.{u1} α (Semigroup.toHasMul.{u1} α _inst_1))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Semigroup.{u1} α], IsScalarTower.{u1, u1, u1} α α α (Mul.toSMul.{u1} α (Semigroup.toMul.{u1} α _inst_1)) (Mul.toSMul.{u1} α (Semigroup.toMul.{u1} α _inst_1)) (Mul.toSMul.{u1} α (Semigroup.toMul.{u1} α _inst_1))
-Case conversion may be inaccurate. Consider using '#align semigroup.is_scalar_tower Semigroup.isScalarTowerₓ'. -/
@[to_additive]
instance Semigroup.isScalarTower [Semigroup α] : IsScalarTower α α α :=
⟨mul_assoc⟩
@@ -345,12 +303,6 @@ class IsCentralScalar (M α : Type _) [SMul M α] [SMul Mᵐᵒᵖ α] : Prop wh
#align is_central_vadd IsCentralVAdd
-/
-/- warning: is_central_scalar.unop_smul_eq_smul -> IsCentralScalar.unop_smul_eq_smul is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} {α : Type.{u2}} [_inst_1 : SMul.{u1, u2} M α] [_inst_2 : SMul.{u1, u2} (MulOpposite.{u1} M) α] [_inst_3 : IsCentralScalar.{u1, u2} M α _inst_1 _inst_2] (m : MulOpposite.{u1} M) (a : α), Eq.{succ u2} α (SMul.smul.{u1, u2} M α _inst_1 (MulOpposite.unop.{u1} M m) a) (SMul.smul.{u1, u2} (MulOpposite.{u1} M) α _inst_2 m a)
-but is expected to have type
- forall {M : Type.{u2}} {α : Type.{u1}} [_inst_1 : SMul.{u2, u1} M α] [_inst_2 : SMul.{u2, u1} (MulOpposite.{u2} M) α] [_inst_3 : IsCentralScalar.{u2, u1} M α _inst_1 _inst_2] (m : MulOpposite.{u2} M) (a : α), Eq.{succ u1} α (HSMul.hSMul.{u2, u1, u1} M α α (instHSMul.{u2, u1} M α _inst_1) (MulOpposite.unop.{u2} M m) a) (HSMul.hSMul.{u2, u1, u1} (MulOpposite.{u2} M) α α (instHSMul.{u2, u1} (MulOpposite.{u2} M) α _inst_2) m a)
-Case conversion may be inaccurate. Consider using '#align is_central_scalar.unop_smul_eq_smul IsCentralScalar.unop_smul_eq_smulₓ'. -/
@[to_additive]
theorem IsCentralScalar.unop_smul_eq_smul {M α : Type _} [SMul M α] [SMul Mᵐᵒᵖ α]
[IsCentralScalar M α] (m : Mᵐᵒᵖ) (a : α) : MulOpposite.unop m • a = m • a :=
@@ -432,12 +384,6 @@ def comp (g : N → M) : SMul N α where smul := SMul.comp.smul g
variable {α}
-/- warning: has_smul.comp.is_scalar_tower -> SMul.comp.isScalarTower is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} {N : Type.{u2}} {α : Type.{u3}} {β : Type.{u4}} [_inst_1 : SMul.{u1, u3} M α] [_inst_2 : SMul.{u1, u4} M β] [_inst_3 : SMul.{u3, u4} α β] [_inst_4 : IsScalarTower.{u1, u3, u4} M α β _inst_1 _inst_3 _inst_2] (g : N -> M), IsScalarTower.{u2, u3, u4} N α β (SMul.comp.{u1, u2, u3} M N α _inst_1 g) _inst_3 (SMul.comp.{u1, u2, u4} M N β _inst_2 g)
-but is expected to have type
- forall {M : Type.{u4}} {N : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} [_inst_1 : SMul.{u4, u2} M α] [_inst_2 : SMul.{u4, u3} M β] [_inst_3 : SMul.{u2, u3} α β] [_inst_4 : IsScalarTower.{u4, u2, u3} M α β _inst_1 _inst_3 _inst_2] (g : N -> M), IsScalarTower.{u1, u2, u3} N α β (SMul.comp.{u4, u1, u2} M N α _inst_1 g) _inst_3 (SMul.comp.{u4, u1, u3} M N β _inst_2 g)
-Case conversion may be inaccurate. Consider using '#align has_smul.comp.is_scalar_tower SMul.comp.isScalarTowerₓ'. -/
/-- Given a tower of scalar actions `M → α → β`, if we use `has_smul.comp`
to pull back both of `M`'s actions by a map `g : N → M`, then we obtain a new
tower of scalar actions `N → α → β`.
@@ -453,12 +399,6 @@ theorem comp.isScalarTower [SMul M β] [SMul α β] [IsScalarTower M α β] (g :
#align has_smul.comp.is_scalar_tower SMul.comp.isScalarTower
#align has_vadd.comp.vadd_assoc_class VAdd.comp.isScalarTower
-/- warning: has_smul.comp.smul_comm_class -> SMul.comp.smulCommClass is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} {N : Type.{u2}} {α : Type.{u3}} {β : Type.{u4}} [_inst_1 : SMul.{u1, u3} M α] [_inst_2 : SMul.{u4, u3} β α] [_inst_3 : SMulCommClass.{u1, u4, u3} M β α _inst_1 _inst_2] (g : N -> M), SMulCommClass.{u2, u4, u3} N β α (SMul.comp.{u1, u2, u3} M N α _inst_1 g) _inst_2
-but is expected to have type
- forall {M : Type.{u2}} {N : Type.{u1}} {α : Type.{u3}} {β : Type.{u4}} [_inst_1 : SMul.{u2, u3} M α] [_inst_2 : SMul.{u4, u3} β α] [_inst_3 : SMulCommClass.{u2, u4, u3} M β α _inst_1 _inst_2] (g : N -> M), SMulCommClass.{u1, u4, u3} N β α (SMul.comp.{u2, u1, u3} M N α _inst_1 g) _inst_2
-Case conversion may be inaccurate. Consider using '#align has_smul.comp.smul_comm_class SMul.comp.smulCommClassₓ'. -/
/-- This cannot be an instance because it can cause infinite loops whenever the `has_smul` arguments
are still metavariables.
-/
@@ -471,12 +411,6 @@ theorem comp.smulCommClass [SMul β α] [SMulCommClass M β α] (g : N → M) :
#align has_smul.comp.smul_comm_class SMul.comp.smulCommClass
#align has_vadd.comp.vadd_comm_class VAdd.comp.vaddCommClass
-/- warning: has_smul.comp.smul_comm_class' -> SMul.comp.smulCommClass' is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} {N : Type.{u2}} {α : Type.{u3}} {β : Type.{u4}} [_inst_1 : SMul.{u1, u3} M α] [_inst_2 : SMul.{u4, u3} β α] [_inst_3 : SMulCommClass.{u4, u1, u3} β M α _inst_2 _inst_1] (g : N -> M), SMulCommClass.{u4, u2, u3} β N α _inst_2 (SMul.comp.{u1, u2, u3} M N α _inst_1 g)
-but is expected to have type
- forall {M : Type.{u2}} {N : Type.{u1}} {α : Type.{u3}} {β : Type.{u4}} [_inst_1 : SMul.{u2, u3} M α] [_inst_2 : SMul.{u4, u3} β α] [_inst_3 : SMulCommClass.{u4, u2, u3} β M α _inst_2 _inst_1] (g : N -> M), SMulCommClass.{u4, u1, u3} β N α _inst_2 (SMul.comp.{u2, u1, u3} M N α _inst_1 g)
-Case conversion may be inaccurate. Consider using '#align has_smul.comp.smul_comm_class' SMul.comp.smulCommClass'ₓ'. -/
/-- This cannot be an instance because it can cause infinite loops whenever the `has_smul` arguments
are still metavariables.
-/
@@ -515,12 +449,6 @@ theorem smul_mul_assoc [Mul β] [SMul α β] [IsScalarTower α β β] (r : α) (
#align vadd_add_assoc vadd_add_assoc
-/
-/- warning: smul_smul_smul_comm -> smul_smul_smul_comm is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} {δ : Type.{u4}} [_inst_1 : SMul.{u1, u2} α β] [_inst_2 : SMul.{u1, u3} α γ] [_inst_3 : SMul.{u2, u4} β δ] [_inst_4 : SMul.{u1, u4} α δ] [_inst_5 : SMul.{u3, u4} γ δ] [_inst_6 : IsScalarTower.{u1, u2, u4} α β δ _inst_1 _inst_3 _inst_4] [_inst_7 : IsScalarTower.{u1, u3, u4} α γ δ _inst_2 _inst_5 _inst_4] [_inst_8 : SMulCommClass.{u2, u3, u4} β γ δ _inst_3 _inst_5] (a : α) (b : β) (c : γ) (d : δ), Eq.{succ u4} δ (SMul.smul.{u2, u4} β δ _inst_3 (SMul.smul.{u1, u2} α β _inst_1 a b) (SMul.smul.{u3, u4} γ δ _inst_5 c d)) (SMul.smul.{u3, u4} γ δ _inst_5 (SMul.smul.{u1, u3} α γ _inst_2 a c) (SMul.smul.{u2, u4} β δ _inst_3 b d))
-but is expected to have type
- forall {α : Type.{u4}} {β : Type.{u3}} {γ : Type.{u2}} {δ : Type.{u1}} [_inst_1 : SMul.{u4, u3} α β] [_inst_2 : SMul.{u4, u2} α γ] [_inst_3 : SMul.{u3, u1} β δ] [_inst_4 : SMul.{u4, u1} α δ] [_inst_5 : SMul.{u2, u1} γ δ] [_inst_6 : IsScalarTower.{u4, u3, u1} α β δ _inst_1 _inst_3 _inst_4] [_inst_7 : IsScalarTower.{u4, u2, u1} α γ δ _inst_2 _inst_5 _inst_4] [_inst_8 : SMulCommClass.{u3, u2, u1} β γ δ _inst_3 _inst_5] (a : α) (b : β) (c : γ) (d : δ), Eq.{succ u1} δ (HSMul.hSMul.{u3, u1, u1} β δ δ (instHSMul.{u3, u1} β δ _inst_3) (HSMul.hSMul.{u4, u3, u3} α β β (instHSMul.{u4, u3} α β _inst_1) a b) (HSMul.hSMul.{u2, u1, u1} γ δ δ (instHSMul.{u2, u1} γ δ _inst_5) c d)) (HSMul.hSMul.{u2, u1, u1} γ δ δ (instHSMul.{u2, u1} γ δ _inst_5) (HSMul.hSMul.{u4, u2, u2} α γ γ (instHSMul.{u4, u2} α γ _inst_2) a c) (HSMul.hSMul.{u3, u1, u1} β δ δ (instHSMul.{u3, u1} β δ _inst_3) b d))
-Case conversion may be inaccurate. Consider using '#align smul_smul_smul_comm smul_smul_smul_commₓ'. -/
@[to_additive]
theorem smul_smul_smul_comm [SMul α β] [SMul α γ] [SMul β δ] [SMul α δ] [SMul γ δ]
[IsScalarTower α β δ] [IsScalarTower α γ δ] [SMulCommClass β γ δ] (a : α) (b : β) (c : γ)
@@ -577,12 +505,6 @@ section
variable [Monoid M] [MulAction M α]
-/- warning: smul_smul -> smul_smul is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} {α : Type.{u2}} [_inst_1 : Monoid.{u1} M] [_inst_2 : MulAction.{u1, u2} M α _inst_1] (a₁ : M) (a₂ : M) (b : α), Eq.{succ u2} α (SMul.smul.{u1, u2} M α (MulAction.toHasSmul.{u1, u2} M α _inst_1 _inst_2) a₁ (SMul.smul.{u1, u2} M α (MulAction.toHasSmul.{u1, u2} M α _inst_1 _inst_2) a₂ b)) (SMul.smul.{u1, u2} M α (MulAction.toHasSmul.{u1, u2} M α _inst_1 _inst_2) (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1))) a₁ a₂) b)
-but is expected to have type
- forall {M : Type.{u1}} {α : Type.{u2}} [_inst_1 : Monoid.{u1} M] [_inst_2 : MulAction.{u1, u2} M α _inst_1] (a₁ : M) (a₂ : M) (b : α), Eq.{succ u2} α (HSMul.hSMul.{u1, u2, u2} M α α (instHSMul.{u1, u2} M α (MulAction.toSMul.{u1, u2} M α _inst_1 _inst_2)) a₁ (HSMul.hSMul.{u1, u2, u2} M α α (instHSMul.{u1, u2} M α (MulAction.toSMul.{u1, u2} M α _inst_1 _inst_2)) a₂ b)) (HSMul.hSMul.{u1, u2, u2} M α α (instHSMul.{u1, u2} M α (MulAction.toSMul.{u1, u2} M α _inst_1 _inst_2)) (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1))) a₁ a₂) b)
-Case conversion may be inaccurate. Consider using '#align smul_smul smul_smulₓ'. -/
@[to_additive]
theorem smul_smul (a₁ a₂ : M) (b : α) : a₁ • a₂ • b = (a₁ * a₂) • b :=
(mul_smul _ _ _).symm
@@ -591,24 +513,12 @@ theorem smul_smul (a₁ a₂ : M) (b : α) : a₁ • a₂ • b = (a₁ * a₂)
variable (M)
-/- warning: one_smul -> one_smul is a dubious translation:
-lean 3 declaration is
- forall (M : Type.{u1}) {α : Type.{u2}} [_inst_1 : Monoid.{u1} M] [_inst_2 : MulAction.{u1, u2} M α _inst_1] (b : α), Eq.{succ u2} α (SMul.smul.{u1, u2} M α (MulAction.toHasSmul.{u1, u2} M α _inst_1 _inst_2) (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1))))) b) b
-but is expected to have type
- forall (M : Type.{u1}) {α : Type.{u2}} [_inst_1 : Monoid.{u1} M] [_inst_2 : MulAction.{u1, u2} M α _inst_1] (b : α), Eq.{succ u2} α (HSMul.hSMul.{u1, u2, u2} M α α (instHSMul.{u1, u2} M α (MulAction.toSMul.{u1, u2} M α _inst_1 _inst_2)) (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M _inst_1))) b) b
-Case conversion may be inaccurate. Consider using '#align one_smul one_smulₓ'. -/
@[simp, to_additive]
theorem one_smul (b : α) : (1 : M) • b = b :=
MulAction.one_smul _
#align one_smul one_smul
#align zero_vadd zero_vadd
-/- warning: one_smul_eq_id -> one_smul_eq_id is a dubious translation:
-lean 3 declaration is
- forall (M : Type.{u1}) {α : Type.{u2}} [_inst_1 : Monoid.{u1} M] [_inst_2 : MulAction.{u1, u2} M α _inst_1], Eq.{succ u2} (α -> α) (SMul.smul.{u1, u2} M α (MulAction.toHasSmul.{u1, u2} M α _inst_1 _inst_2) (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1)))))) (id.{succ u2} α)
-but is expected to have type
- forall (M : Type.{u1}) {α : Type.{u2}} [_inst_1 : Monoid.{u1} M] [_inst_2 : MulAction.{u1, u2} M α _inst_1], Eq.{succ u2} (α -> α) ((fun (x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2721 : M) (x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2723 : α) => HSMul.hSMul.{u1, u2, u2} M α α (instHSMul.{u1, u2} M α (MulAction.toSMul.{u1, u2} M α _inst_1 _inst_2)) x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2721 x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2723) (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M _inst_1)))) (id.{succ u2} α)
-Case conversion may be inaccurate. Consider using '#align one_smul_eq_id one_smul_eq_idₓ'. -/
/-- `has_smul` version of `one_mul_eq_id` -/
@[to_additive "`has_vadd` version of `zero_add_eq_id`"]
theorem one_smul_eq_id : ((· • ·) (1 : M) : α → α) = id :=
@@ -616,12 +526,6 @@ theorem one_smul_eq_id : ((· • ·) (1 : M) : α → α) = id :=
#align one_smul_eq_id one_smul_eq_id
#align zero_vadd_eq_id zero_vadd_eq_id
-/- warning: comp_smul_left -> comp_smul_left is a dubious translation:
-lean 3 declaration is
- forall (M : Type.{u1}) {α : Type.{u2}} [_inst_1 : Monoid.{u1} M] [_inst_2 : MulAction.{u1, u2} M α _inst_1] (a₁ : M) (a₂ : M), Eq.{succ u2} (α -> α) (Function.comp.{succ u2, succ u2, succ u2} α α α (SMul.smul.{u1, u2} M α (MulAction.toHasSmul.{u1, u2} M α _inst_1 _inst_2) a₁) (SMul.smul.{u1, u2} M α (MulAction.toHasSmul.{u1, u2} M α _inst_1 _inst_2) a₂)) (SMul.smul.{u1, u2} M α (MulAction.toHasSmul.{u1, u2} M α _inst_1 _inst_2) (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1))) a₁ a₂))
-but is expected to have type
- forall (M : Type.{u1}) {α : Type.{u2}} [_inst_1 : Monoid.{u1} M] [_inst_2 : MulAction.{u1, u2} M α _inst_1] (a₁ : M) (a₂ : M), Eq.{succ u2} (α -> α) (Function.comp.{succ u2, succ u2, succ u2} α α α ((fun (x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2773 : M) (x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2775 : α) => HSMul.hSMul.{u1, u2, u2} M α α (instHSMul.{u1, u2} M α (MulAction.toSMul.{u1, u2} M α _inst_1 _inst_2)) x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2773 x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2775) a₁) ((fun (x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2790 : M) (x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2792 : α) => HSMul.hSMul.{u1, u2, u2} M α α (instHSMul.{u1, u2} M α (MulAction.toSMul.{u1, u2} M α _inst_1 _inst_2)) x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2790 x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2792) a₂)) ((fun (x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2813 : M) (x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2815 : α) => HSMul.hSMul.{u1, u2, u2} M α α (instHSMul.{u1, u2} M α (MulAction.toSMul.{u1, u2} M α _inst_1 _inst_2)) x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2813 x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2815) (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1))) a₁ a₂))
-Case conversion may be inaccurate. Consider using '#align comp_smul_left comp_smul_leftₓ'. -/
/-- `has_smul` version of `comp_mul_left` -/
@[to_additive "`has_vadd` version of `comp_add_left`"]
theorem comp_smul_left (a₁ a₂ : M) : (· • ·) a₁ ∘ (· • ·) a₂ = ((· • ·) (a₁ * a₂) : α → α) :=
@@ -659,12 +563,6 @@ protected def Function.Surjective.mulAction [SMul M β] (f : α → β) (hf : Su
#align function.surjective.add_action Function.Surjective.addAction
-/
-/- warning: function.surjective.mul_action_left -> Function.Surjective.mulActionLeft is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {S : Type.{u2}} {M : Type.{u3}} [_inst_3 : Monoid.{u1} R] [_inst_4 : MulAction.{u1, u3} R M _inst_3] [_inst_5 : Monoid.{u2} S] [_inst_6 : SMul.{u2, u3} S M] (f : MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)), (Function.Surjective.{succ u1, succ u2} R S (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)) (fun (_x : MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)) => R -> S) (MonoidHom.hasCoeToFun.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)) f)) -> (forall (c : R) (x : M), Eq.{succ u3} M (SMul.smul.{u2, u3} S M _inst_6 (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)) (fun (_x : MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)) => R -> S) (MonoidHom.hasCoeToFun.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)) f c) x) (SMul.smul.{u1, u3} R M (MulAction.toHasSmul.{u1, u3} R M _inst_3 _inst_4) c x)) -> (MulAction.{u2, u3} S M _inst_5)
-but is expected to have type
- forall {R : Type.{u1}} {S : Type.{u2}} {M : Type.{u3}} [_inst_3 : Monoid.{u1} R] [_inst_4 : MulAction.{u1, u3} R M _inst_3] [_inst_5 : Monoid.{u2} S] [_inst_6 : SMul.{u2, u3} S M] (f : MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)), (Function.Surjective.{succ u1, succ u2} R S (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)) R S (MulOneClass.toMul.{u1} R (Monoid.toMulOneClass.{u1} R _inst_3)) (MulOneClass.toMul.{u2} S (Monoid.toMulOneClass.{u2} S _inst_5)) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)) R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5) (MonoidHom.monoidHomClass.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)))) f)) -> (forall (c : R) (x : M), Eq.{succ u3} M (HSMul.hSMul.{u2, u3, u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) c) M M (instHSMul.{u2, u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) c) M _inst_6) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)) R S (MulOneClass.toMul.{u1} R (Monoid.toMulOneClass.{u1} R _inst_3)) (MulOneClass.toMul.{u2} S (Monoid.toMulOneClass.{u2} S _inst_5)) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)) R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5) (MonoidHom.monoidHomClass.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)))) f c) x) (HSMul.hSMul.{u1, u3, u3} R M M (instHSMul.{u1, u3} R M (MulAction.toSMul.{u1, u3} R M _inst_3 _inst_4)) c x)) -> (MulAction.{u2, u3} S M _inst_5)
-Case conversion may be inaccurate. Consider using '#align function.surjective.mul_action_left Function.Surjective.mulActionLeftₓ'. -/
/-- Push forward the action of `R` on `M` along a compatible surjective map `f : R →* S`.
See also `function.surjective.distrib_mul_action_left` and `function.surjective.module_left`.
@@ -705,12 +603,6 @@ instance (priority := 910) Monoid.toMulAction : MulAction M M
This is promoted to an `add_torsor` by `add_group_is_add_torsor`. -/
add_decl_doc AddMonoid.toAddAction
-/- warning: is_scalar_tower.left -> IsScalarTower.left is a dubious translation:
-lean 3 declaration is
- forall (M : Type.{u1}) {α : Type.{u2}} [_inst_1 : Monoid.{u1} M] [_inst_2 : MulAction.{u1, u2} M α _inst_1], IsScalarTower.{u1, u1, u2} M M α (Mul.toSMul.{u1} M (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1))) (MulAction.toHasSmul.{u1, u2} M α _inst_1 _inst_2) (MulAction.toHasSmul.{u1, u2} M α _inst_1 _inst_2)
-but is expected to have type
- forall (M : Type.{u1}) {α : Type.{u2}} [_inst_1 : Monoid.{u1} M] [_inst_2 : MulAction.{u1, u2} M α _inst_1], IsScalarTower.{u1, u1, u2} M M α (MulAction.toSMul.{u1, u1} M M _inst_1 (Monoid.toMulAction.{u1} M _inst_1)) (MulAction.toSMul.{u1, u2} M α _inst_1 _inst_2) (MulAction.toSMul.{u1, u2} M α _inst_1 _inst_2)
-Case conversion may be inaccurate. Consider using '#align is_scalar_tower.left IsScalarTower.leftₓ'. -/
@[to_additive]
instance IsScalarTower.left : IsScalarTower M M α :=
⟨fun x y z => mul_smul x y z⟩
@@ -719,12 +611,6 @@ instance IsScalarTower.left : IsScalarTower M M α :=
variable {M}
-/- warning: smul_mul_smul -> smul_mul_smul is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} {α : Type.{u2}} [_inst_1 : Monoid.{u1} M] [_inst_2 : MulAction.{u1, u2} M α _inst_1] [_inst_3 : Mul.{u2} α] (r : M) (s : M) (x : α) (y : α) [_inst_4 : IsScalarTower.{u1, u2, u2} M α α (MulAction.toHasSmul.{u1, u2} M α _inst_1 _inst_2) (Mul.toSMul.{u2} α _inst_3) (MulAction.toHasSmul.{u1, u2} M α _inst_1 _inst_2)] [_inst_5 : SMulCommClass.{u1, u2, u2} M α α (MulAction.toHasSmul.{u1, u2} M α _inst_1 _inst_2) (Mul.toSMul.{u2} α _inst_3)], Eq.{succ u2} α (HMul.hMul.{u2, u2, u2} α α α (instHMul.{u2} α _inst_3) (SMul.smul.{u1, u2} M α (MulAction.toHasSmul.{u1, u2} M α _inst_1 _inst_2) r x) (SMul.smul.{u1, u2} M α (MulAction.toHasSmul.{u1, u2} M α _inst_1 _inst_2) s y)) (SMul.smul.{u1, u2} M α (MulAction.toHasSmul.{u1, u2} M α _inst_1 _inst_2) (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1))) r s) (HMul.hMul.{u2, u2, u2} α α α (instHMul.{u2} α _inst_3) x y))
-but is expected to have type
- forall {M : Type.{u1}} {α : Type.{u2}} [_inst_1 : Monoid.{u1} M] [_inst_2 : MulAction.{u1, u2} M α _inst_1] [_inst_3 : Mul.{u2} α] (r : M) (s : M) (x : α) (y : α) [_inst_4 : IsScalarTower.{u1, u2, u2} M α α (MulAction.toSMul.{u1, u2} M α _inst_1 _inst_2) (Mul.toSMul.{u2} α _inst_3) (MulAction.toSMul.{u1, u2} M α _inst_1 _inst_2)] [_inst_5 : SMulCommClass.{u1, u2, u2} M α α (MulAction.toSMul.{u1, u2} M α _inst_1 _inst_2) (Mul.toSMul.{u2} α _inst_3)], Eq.{succ u2} α (HMul.hMul.{u2, u2, u2} α α α (instHMul.{u2} α _inst_3) (HSMul.hSMul.{u1, u2, u2} M α α (instHSMul.{u1, u2} M α (MulAction.toSMul.{u1, u2} M α _inst_1 _inst_2)) r x) (HSMul.hSMul.{u1, u2, u2} M α α (instHSMul.{u1, u2} M α (MulAction.toSMul.{u1, u2} M α _inst_1 _inst_2)) s y)) (HSMul.hSMul.{u1, u2, u2} M α α (instHSMul.{u1, u2} M α (MulAction.toSMul.{u1, u2} M α _inst_1 _inst_2)) (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1))) r s) (HMul.hMul.{u2, u2, u2} α α α (instHMul.{u2} α _inst_3) x y))
-Case conversion may be inaccurate. Consider using '#align smul_mul_smul smul_mul_smulₓ'. -/
/-- Note that the `is_scalar_tower M α α` and `smul_comm_class M α α` typeclass arguments are
usually satisfied by `algebra M α`. -/
@[to_additive, nolint to_additive_doc]
@@ -791,48 +677,24 @@ end
section CompatibleScalar
-/- warning: smul_one_smul -> smul_one_smul is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {M : Type.{u2}} (N : Type.{u3}) [_inst_1 : Monoid.{u3} N] [_inst_2 : SMul.{u2, u3} M N] [_inst_3 : MulAction.{u3, u1} N α _inst_1] [_inst_4 : SMul.{u2, u1} M α] [_inst_5 : IsScalarTower.{u2, u3, u1} M N α _inst_2 (MulAction.toHasSmul.{u3, u1} N α _inst_1 _inst_3) _inst_4] (x : M) (y : α), Eq.{succ u1} α (SMul.smul.{u3, u1} N α (MulAction.toHasSmul.{u3, u1} N α _inst_1 _inst_3) (SMul.smul.{u2, u3} M N _inst_2 x (OfNat.ofNat.{u3} N 1 (OfNat.mk.{u3} N 1 (One.one.{u3} N (MulOneClass.toHasOne.{u3} N (Monoid.toMulOneClass.{u3} N _inst_1)))))) y) (SMul.smul.{u2, u1} M α _inst_4 x y)
-but is expected to have type
- forall {α : Type.{u1}} {M : Type.{u3}} (N : Type.{u2}) [_inst_1 : Monoid.{u2} N] [_inst_2 : SMul.{u3, u2} M N] [_inst_3 : MulAction.{u2, u1} N α _inst_1] [_inst_4 : SMul.{u3, u1} M α] [_inst_5 : IsScalarTower.{u3, u2, u1} M N α _inst_2 (MulAction.toSMul.{u2, u1} N α _inst_1 _inst_3) _inst_4] (x : M) (y : α), Eq.{succ u1} α (HSMul.hSMul.{u2, u1, u1} N α α (instHSMul.{u2, u1} N α (MulAction.toSMul.{u2, u1} N α _inst_1 _inst_3)) (HSMul.hSMul.{u3, u2, u2} M N N (instHSMul.{u3, u2} M N _inst_2) x (OfNat.ofNat.{u2} N 1 (One.toOfNat1.{u2} N (Monoid.toOne.{u2} N _inst_1)))) y) (HSMul.hSMul.{u3, u1, u1} M α α (instHSMul.{u3, u1} M α _inst_4) x y)
-Case conversion may be inaccurate. Consider using '#align smul_one_smul smul_one_smulₓ'. -/
@[simp, to_additive]
theorem smul_one_smul {M} (N) [Monoid N] [SMul M N] [MulAction N α] [SMul M α] [IsScalarTower M N α]
(x : M) (y : α) : (x • (1 : N)) • y = x • y := by rw [smul_assoc, one_smul]
#align smul_one_smul smul_one_smul
#align vadd_zero_vadd vadd_zero_vadd
-/- warning: smul_one_mul -> smul_one_mul is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u2} N] [_inst_2 : SMul.{u1, u2} M N] [_inst_3 : IsScalarTower.{u1, u2, u2} M N N _inst_2 (Mul.toSMul.{u2} N (MulOneClass.toHasMul.{u2} N _inst_1)) _inst_2] (x : M) (y : N), Eq.{succ u2} N (HMul.hMul.{u2, u2, u2} N N N (instHMul.{u2} N (MulOneClass.toHasMul.{u2} N _inst_1)) (SMul.smul.{u1, u2} M N _inst_2 x (OfNat.ofNat.{u2} N 1 (OfNat.mk.{u2} N 1 (One.one.{u2} N (MulOneClass.toHasOne.{u2} N _inst_1))))) y) (SMul.smul.{u1, u2} M N _inst_2 x y)
-but is expected to have type
- forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u1} N] [_inst_2 : SMul.{u2, u1} M N] [_inst_3 : IsScalarTower.{u2, u1, u1} M N N _inst_2 (Mul.toSMul.{u1} N (MulOneClass.toMul.{u1} N _inst_1)) _inst_2] (x : M) (y : N), Eq.{succ u1} N (HMul.hMul.{u1, u1, u1} N N N (instHMul.{u1} N (MulOneClass.toMul.{u1} N _inst_1)) (HSMul.hSMul.{u2, u1, u1} M N N (instHSMul.{u2, u1} M N _inst_2) x (OfNat.ofNat.{u1} N 1 (One.toOfNat1.{u1} N (MulOneClass.toOne.{u1} N _inst_1)))) y) (HSMul.hSMul.{u2, u1, u1} M N N (instHSMul.{u2, u1} M N _inst_2) x y)
-Case conversion may be inaccurate. Consider using '#align smul_one_mul smul_one_mulₓ'. -/
@[simp, to_additive]
theorem smul_one_mul {M N} [MulOneClass N] [SMul M N] [IsScalarTower M N N] (x : M) (y : N) :
x • 1 * y = x • y := by rw [smul_mul_assoc, one_mul]
#align smul_one_mul smul_one_mul
#align vadd_zero_add vadd_zero_add
-/- warning: mul_smul_one -> mul_smul_one is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u2} N] [_inst_2 : SMul.{u1, u2} M N] [_inst_3 : SMulCommClass.{u1, u2, u2} M N N _inst_2 (Mul.toSMul.{u2} N (MulOneClass.toHasMul.{u2} N _inst_1))] (x : M) (y : N), Eq.{succ u2} N (HMul.hMul.{u2, u2, u2} N N N (instHMul.{u2} N (MulOneClass.toHasMul.{u2} N _inst_1)) y (SMul.smul.{u1, u2} M N _inst_2 x (OfNat.ofNat.{u2} N 1 (OfNat.mk.{u2} N 1 (One.one.{u2} N (MulOneClass.toHasOne.{u2} N _inst_1)))))) (SMul.smul.{u1, u2} M N _inst_2 x y)
-but is expected to have type
- forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u1} N] [_inst_2 : SMul.{u2, u1} M N] [_inst_3 : SMulCommClass.{u2, u1, u1} M N N _inst_2 (Mul.toSMul.{u1} N (MulOneClass.toMul.{u1} N _inst_1))] (x : M) (y : N), Eq.{succ u1} N (HMul.hMul.{u1, u1, u1} N N N (instHMul.{u1} N (MulOneClass.toMul.{u1} N _inst_1)) y (HSMul.hSMul.{u2, u1, u1} M N N (instHSMul.{u2, u1} M N _inst_2) x (OfNat.ofNat.{u1} N 1 (One.toOfNat1.{u1} N (MulOneClass.toOne.{u1} N _inst_1))))) (HSMul.hSMul.{u2, u1, u1} M N N (instHSMul.{u2, u1} M N _inst_2) x y)
-Case conversion may be inaccurate. Consider using '#align mul_smul_one mul_smul_oneₓ'. -/
@[simp, to_additive]
theorem mul_smul_one {M N} [MulOneClass N] [SMul M N] [SMulCommClass M N N] (x : M) (y : N) :
y * x • 1 = x • y := by rw [← smul_eq_mul, ← smul_comm, smul_eq_mul, mul_one]
#align mul_smul_one mul_smul_one
#align add_vadd_zero add_vadd_zero
-/- warning: is_scalar_tower.of_smul_one_mul -> IsScalarTower.of_smul_one_mul is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Monoid.{u2} N] [_inst_2 : SMul.{u1, u2} M N], (forall (x : M) (y : N), Eq.{succ u2} N (HMul.hMul.{u2, u2, u2} N N N (instHMul.{u2} N (MulOneClass.toHasMul.{u2} N (Monoid.toMulOneClass.{u2} N _inst_1))) (SMul.smul.{u1, u2} M N _inst_2 x (OfNat.ofNat.{u2} N 1 (OfNat.mk.{u2} N 1 (One.one.{u2} N (MulOneClass.toHasOne.{u2} N (Monoid.toMulOneClass.{u2} N _inst_1)))))) y) (SMul.smul.{u1, u2} M N _inst_2 x y)) -> (IsScalarTower.{u1, u2, u2} M N N _inst_2 (Mul.toSMul.{u2} N (MulOneClass.toHasMul.{u2} N (Monoid.toMulOneClass.{u2} N _inst_1))) _inst_2)
-but is expected to have type
- forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Monoid.{u1} N] [_inst_2 : SMul.{u2, u1} M N], (forall (x : M) (y : N), Eq.{succ u1} N (HMul.hMul.{u1, u1, u1} N N N (instHMul.{u1} N (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N _inst_1))) (HSMul.hSMul.{u2, u1, u1} M N N (instHSMul.{u2, u1} M N _inst_2) x (OfNat.ofNat.{u1} N 1 (One.toOfNat1.{u1} N (Monoid.toOne.{u1} N _inst_1)))) y) (HSMul.hSMul.{u2, u1, u1} M N N (instHSMul.{u2, u1} M N _inst_2) x y)) -> (IsScalarTower.{u2, u1, u1} M N N _inst_2 (MulAction.toSMul.{u1, u1} N N _inst_1 (Monoid.toMulAction.{u1} N _inst_1)) _inst_2)
-Case conversion may be inaccurate. Consider using '#align is_scalar_tower.of_smul_one_mul IsScalarTower.of_smul_one_mulₓ'. -/
@[to_additive]
theorem IsScalarTower.of_smul_one_mul {M N} [Monoid N] [SMul M N]
(h : ∀ (x : M) (y : N), x • (1 : N) * y = x • y) : IsScalarTower M N N :=
@@ -840,12 +702,6 @@ theorem IsScalarTower.of_smul_one_mul {M N} [Monoid N] [SMul M N]
#align is_scalar_tower.of_smul_one_mul IsScalarTower.of_smul_one_mul
#align vadd_assoc_class.of_vadd_zero_add VAddAssocClass.of_vadd_zero_add
-/- warning: smul_comm_class.of_mul_smul_one -> SMulCommClass.of_mul_smul_one is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Monoid.{u2} N] [_inst_2 : SMul.{u1, u2} M N], (forall (x : M) (y : N), Eq.{succ u2} N (HMul.hMul.{u2, u2, u2} N N N (instHMul.{u2} N (MulOneClass.toHasMul.{u2} N (Monoid.toMulOneClass.{u2} N _inst_1))) y (SMul.smul.{u1, u2} M N _inst_2 x (OfNat.ofNat.{u2} N 1 (OfNat.mk.{u2} N 1 (One.one.{u2} N (MulOneClass.toHasOne.{u2} N (Monoid.toMulOneClass.{u2} N _inst_1))))))) (SMul.smul.{u1, u2} M N _inst_2 x y)) -> (SMulCommClass.{u1, u2, u2} M N N _inst_2 (Mul.toSMul.{u2} N (MulOneClass.toHasMul.{u2} N (Monoid.toMulOneClass.{u2} N _inst_1))))
-but is expected to have type
- forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Monoid.{u1} N] [_inst_2 : SMul.{u2, u1} M N], (forall (x : M) (y : N), Eq.{succ u1} N (HMul.hMul.{u1, u1, u1} N N N (instHMul.{u1} N (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N _inst_1))) y (HSMul.hSMul.{u2, u1, u1} M N N (instHSMul.{u2, u1} M N _inst_2) x (OfNat.ofNat.{u1} N 1 (One.toOfNat1.{u1} N (Monoid.toOne.{u1} N _inst_1))))) (HSMul.hSMul.{u2, u1, u1} M N N (instHSMul.{u2, u1} M N _inst_2) x y)) -> (SMulCommClass.{u2, u1, u1} M N N _inst_2 (MulAction.toSMul.{u1, u1} N N _inst_1 (Monoid.toMulAction.{u1} N _inst_1)))
-Case conversion may be inaccurate. Consider using '#align smul_comm_class.of_mul_smul_one SMulCommClass.of_mul_smul_oneₓ'. -/
@[to_additive]
theorem SMulCommClass.of_mul_smul_one {M N} [Monoid N] [SMul M N]
(H : ∀ (x : M) (y : N), y * x • (1 : N) = x • y) : SMulCommClass M N N :=
@@ -853,12 +709,6 @@ theorem SMulCommClass.of_mul_smul_one {M N} [Monoid N] [SMul M N]
#align smul_comm_class.of_mul_smul_one SMulCommClass.of_mul_smul_one
#align vadd_comm_class.of_add_vadd_zero VAddCommClass.of_add_vadd_zero
-/- warning: smul_one_hom -> smulOneHom is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Monoid.{u1} M] [_inst_2 : Monoid.{u2} N] [_inst_3 : MulAction.{u1, u2} M N _inst_1] [_inst_4 : IsScalarTower.{u1, u2, u2} M N N (MulAction.toHasSmul.{u1, u2} M N _inst_1 _inst_3) (Mul.toSMul.{u2} N (MulOneClass.toHasMul.{u2} N (Monoid.toMulOneClass.{u2} N _inst_2))) (MulAction.toHasSmul.{u1, u2} M N _inst_1 _inst_3)], MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)
-but is expected to have type
- forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Monoid.{u1} M] [_inst_2 : Monoid.{u2} N] [_inst_3 : MulAction.{u1, u2} M N _inst_1] [_inst_4 : IsScalarTower.{u1, u2, u2} M N N (MulAction.toSMul.{u1, u2} M N _inst_1 _inst_3) (MulAction.toSMul.{u2, u2} N N _inst_2 (Monoid.toMulAction.{u2} N _inst_2)) (MulAction.toSMul.{u1, u2} M N _inst_1 _inst_3)], MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)
-Case conversion may be inaccurate. Consider using '#align smul_one_hom smulOneHomₓ'. -/
/-- If the multiplicative action of `M` on `N` is compatible with multiplication on `N`, then
`λ x, x • 1` is a monoid homomorphism from `M` to `N`. -/
@[to_additive
@@ -970,22 +820,10 @@ section DistribSMul
variable [AddZeroClass A] [DistribSMul M A]
-/- warning: smul_add -> smul_add is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} {A : Type.{u2}} [_inst_1 : AddZeroClass.{u2} A] [_inst_2 : DistribSMul.{u1, u2} M A _inst_1] (a : M) (b₁ : A) (b₂ : A), Eq.{succ u2} A (SMul.smul.{u1, u2} M A (SMulZeroClass.toHasSmul.{u1, u2} M A (AddZeroClass.toHasZero.{u2} A _inst_1) (DistribSMul.toSmulZeroClass.{u1, u2} M A _inst_1 _inst_2)) a (HAdd.hAdd.{u2, u2, u2} A A A (instHAdd.{u2} A (AddZeroClass.toHasAdd.{u2} A _inst_1)) b₁ b₂)) (HAdd.hAdd.{u2, u2, u2} A A A (instHAdd.{u2} A (AddZeroClass.toHasAdd.{u2} A _inst_1)) (SMul.smul.{u1, u2} M A (SMulZeroClass.toHasSmul.{u1, u2} M A (AddZeroClass.toHasZero.{u2} A _inst_1) (DistribSMul.toSmulZeroClass.{u1, u2} M A _inst_1 _inst_2)) a b₁) (SMul.smul.{u1, u2} M A (SMulZeroClass.toHasSmul.{u1, u2} M A (AddZeroClass.toHasZero.{u2} A _inst_1) (DistribSMul.toSmulZeroClass.{u1, u2} M A _inst_1 _inst_2)) a b₂))
-but is expected to have type
- forall {M : Type.{u1}} {A : Type.{u2}} [_inst_1 : AddZeroClass.{u2} A] [_inst_2 : DistribSMul.{u1, u2} M A _inst_1] (a : M) (b₁ : A) (b₂ : A), Eq.{succ u2} A (HSMul.hSMul.{u1, u2, u2} M A A (instHSMul.{u1, u2} M A (SMulZeroClass.toSMul.{u1, u2} M A (AddZeroClass.toZero.{u2} A _inst_1) (DistribSMul.toSMulZeroClass.{u1, u2} M A _inst_1 _inst_2))) a (HAdd.hAdd.{u2, u2, u2} A A A (instHAdd.{u2} A (AddZeroClass.toAdd.{u2} A _inst_1)) b₁ b₂)) (HAdd.hAdd.{u2, u2, u2} A A A (instHAdd.{u2} A (AddZeroClass.toAdd.{u2} A _inst_1)) (HSMul.hSMul.{u1, u2, u2} M A A (instHSMul.{u1, u2} M A (SMulZeroClass.toSMul.{u1, u2} M A (AddZeroClass.toZero.{u2} A _inst_1) (DistribSMul.toSMulZeroClass.{u1, u2} M A _inst_1 _inst_2))) a b₁) (HSMul.hSMul.{u1, u2, u2} M A A (instHSMul.{u1, u2} M A (SMulZeroClass.toSMul.{u1, u2} M A (AddZeroClass.toZero.{u2} A _inst_1) (DistribSMul.toSMulZeroClass.{u1, u2} M A _inst_1 _inst_2))) a b₂))
-Case conversion may be inaccurate. Consider using '#align smul_add smul_addₓ'. -/
theorem smul_add (a : M) (b₁ b₂ : A) : a • (b₁ + b₂) = a • b₁ + a • b₂ :=
DistribSMul.smul_add _ _ _
#align smul_add smul_add
-/- warning: function.injective.distrib_smul -> Function.Injective.distribSMul is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} {A : Type.{u2}} {B : Type.{u3}} [_inst_1 : AddZeroClass.{u2} A] [_inst_2 : DistribSMul.{u1, u2} M A _inst_1] [_inst_3 : AddZeroClass.{u3} B] [_inst_4 : SMul.{u1, u3} M B] (f : AddMonoidHom.{u3, u2} B A _inst_3 _inst_1), (Function.Injective.{succ u3, succ u2} B A (coeFn.{max (succ u2) (succ u3), max (succ u3) (succ u2)} (AddMonoidHom.{u3, u2} B A _inst_3 _inst_1) (fun (_x : AddMonoidHom.{u3, u2} B A _inst_3 _inst_1) => B -> A) (AddMonoidHom.hasCoeToFun.{u3, u2} B A _inst_3 _inst_1) f)) -> (forall (c : M) (x : B), Eq.{succ u2} A (coeFn.{max (succ u2) (succ u3), max (succ u3) (succ u2)} (AddMonoidHom.{u3, u2} B A _inst_3 _inst_1) (fun (_x : AddMonoidHom.{u3, u2} B A _inst_3 _inst_1) => B -> A) (AddMonoidHom.hasCoeToFun.{u3, u2} B A _inst_3 _inst_1) f (SMul.smul.{u1, u3} M B _inst_4 c x)) (SMul.smul.{u1, u2} M A (SMulZeroClass.toHasSmul.{u1, u2} M A (AddZeroClass.toHasZero.{u2} A _inst_1) (DistribSMul.toSmulZeroClass.{u1, u2} M A _inst_1 _inst_2)) c (coeFn.{max (succ u2) (succ u3), max (succ u3) (succ u2)} (AddMonoidHom.{u3, u2} B A _inst_3 _inst_1) (fun (_x : AddMonoidHom.{u3, u2} B A _inst_3 _inst_1) => B -> A) (AddMonoidHom.hasCoeToFun.{u3, u2} B A _inst_3 _inst_1) f x))) -> (DistribSMul.{u1, u3} M B _inst_3)
-but is expected to have type
- forall {M : Type.{u1}} {A : Type.{u2}} {B : Type.{u3}} [_inst_1 : AddZeroClass.{u2} A] [_inst_2 : DistribSMul.{u1, u2} M A _inst_1] [_inst_3 : AddZeroClass.{u3} B] [_inst_4 : SMul.{u1, u3} M B] (f : AddMonoidHom.{u3, u2} B A _inst_3 _inst_1), (Function.Injective.{succ u3, succ u2} B A (FunLike.coe.{max (succ u2) (succ u3), succ u3, succ u2} (AddMonoidHom.{u3, u2} B A _inst_3 _inst_1) B (fun (_x : B) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : B) => A) _x) (AddHomClass.toFunLike.{max u2 u3, u3, u2} (AddMonoidHom.{u3, u2} B A _inst_3 _inst_1) B A (AddZeroClass.toAdd.{u3} B _inst_3) (AddZeroClass.toAdd.{u2} A _inst_1) (AddMonoidHomClass.toAddHomClass.{max u2 u3, u3, u2} (AddMonoidHom.{u3, u2} B A _inst_3 _inst_1) B A _inst_3 _inst_1 (AddMonoidHom.addMonoidHomClass.{u3, u2} B A _inst_3 _inst_1))) f)) -> (forall (c : M) (x : B), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : B) => A) (HSMul.hSMul.{u1, u3, u3} M B B (instHSMul.{u1, u3} M B _inst_4) c x)) (FunLike.coe.{max (succ u2) (succ u3), succ u3, succ u2} (AddMonoidHom.{u3, u2} B A _inst_3 _inst_1) B (fun (_x : B) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : B) => A) _x) (AddHomClass.toFunLike.{max u2 u3, u3, u2} (AddMonoidHom.{u3, u2} B A _inst_3 _inst_1) B A (AddZeroClass.toAdd.{u3} B _inst_3) (AddZeroClass.toAdd.{u2} A _inst_1) (AddMonoidHomClass.toAddHomClass.{max u2 u3, u3, u2} (AddMonoidHom.{u3, u2} B A _inst_3 _inst_1) B A _inst_3 _inst_1 (AddMonoidHom.addMonoidHomClass.{u3, u2} B A _inst_3 _inst_1))) f (HSMul.hSMul.{u1, u3, u3} M B B (instHSMul.{u1, u3} M B _inst_4) c x)) (HSMul.hSMul.{u1, u2, u2} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : B) => A) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : B) => A) x) (instHSMul.{u1, u2} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : B) => A) x) (SMulZeroClass.toSMul.{u1, u2} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : B) => A) x) (AddZeroClass.toZero.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : B) => A) x) _inst_1) (DistribSMul.toSMulZeroClass.{u1, u2} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : B) => A) x) _inst_1 _inst_2))) c (FunLike.coe.{max (succ u2) (succ u3), succ u3, succ u2} (AddMonoidHom.{u3, u2} B A _inst_3 _inst_1) B (fun (_x : B) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : B) => A) _x) (AddHomClass.toFunLike.{max u2 u3, u3, u2} (AddMonoidHom.{u3, u2} B A _inst_3 _inst_1) B A (AddZeroClass.toAdd.{u3} B _inst_3) (AddZeroClass.toAdd.{u2} A _inst_1) (AddMonoidHomClass.toAddHomClass.{max u2 u3, u3, u2} (AddMonoidHom.{u3, u2} B A _inst_3 _inst_1) B A _inst_3 _inst_1 (AddMonoidHom.addMonoidHomClass.{u3, u2} B A _inst_3 _inst_1))) f x))) -> (DistribSMul.{u1, u3} M B _inst_3)
-Case conversion may be inaccurate. Consider using '#align function.injective.distrib_smul Function.Injective.distribSMulₓ'. -/
/-- Pullback a distributive scalar multiplication along an injective additive monoid
homomorphism.
See note [reducible non-instances]. -/
@@ -997,12 +835,6 @@ protected def Function.Injective.distribSMul [AddZeroClass B] [SMul M B] (f : B
smul_add := fun c x y => hf <| by simp only [smul, map_add, smul_add] }
#align function.injective.distrib_smul Function.Injective.distribSMul
-/- warning: function.surjective.distrib_smul -> Function.Surjective.distribSMul is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} {A : Type.{u2}} {B : Type.{u3}} [_inst_1 : AddZeroClass.{u2} A] [_inst_2 : DistribSMul.{u1, u2} M A _inst_1] [_inst_3 : AddZeroClass.{u3} B] [_inst_4 : SMul.{u1, u3} M B] (f : AddMonoidHom.{u2, u3} A B _inst_1 _inst_3), (Function.Surjective.{succ u2, succ u3} A B (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (AddMonoidHom.{u2, u3} A B _inst_1 _inst_3) (fun (_x : AddMonoidHom.{u2, u3} A B _inst_1 _inst_3) => A -> B) (AddMonoidHom.hasCoeToFun.{u2, u3} A B _inst_1 _inst_3) f)) -> (forall (c : M) (x : A), Eq.{succ u3} B (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (AddMonoidHom.{u2, u3} A B _inst_1 _inst_3) (fun (_x : AddMonoidHom.{u2, u3} A B _inst_1 _inst_3) => A -> B) (AddMonoidHom.hasCoeToFun.{u2, u3} A B _inst_1 _inst_3) f (SMul.smul.{u1, u2} M A (SMulZeroClass.toHasSmul.{u1, u2} M A (AddZeroClass.toHasZero.{u2} A _inst_1) (DistribSMul.toSmulZeroClass.{u1, u2} M A _inst_1 _inst_2)) c x)) (SMul.smul.{u1, u3} M B _inst_4 c (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (AddMonoidHom.{u2, u3} A B _inst_1 _inst_3) (fun (_x : AddMonoidHom.{u2, u3} A B _inst_1 _inst_3) => A -> B) (AddMonoidHom.hasCoeToFun.{u2, u3} A B _inst_1 _inst_3) f x))) -> (DistribSMul.{u1, u3} M B _inst_3)
-but is expected to have type
- forall {M : Type.{u1}} {A : Type.{u2}} {B : Type.{u3}} [_inst_1 : AddZeroClass.{u2} A] [_inst_2 : DistribSMul.{u1, u2} M A _inst_1] [_inst_3 : AddZeroClass.{u3} B] [_inst_4 : SMul.{u1, u3} M B] (f : AddMonoidHom.{u2, u3} A B _inst_1 _inst_3), (Function.Surjective.{succ u2, succ u3} A B (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (AddMonoidHom.{u2, u3} A B _inst_1 _inst_3) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : A) => B) _x) (AddHomClass.toFunLike.{max u2 u3, u2, u3} (AddMonoidHom.{u2, u3} A B _inst_1 _inst_3) A B (AddZeroClass.toAdd.{u2} A _inst_1) (AddZeroClass.toAdd.{u3} B _inst_3) (AddMonoidHomClass.toAddHomClass.{max u2 u3, u2, u3} (AddMonoidHom.{u2, u3} A B _inst_1 _inst_3) A B _inst_1 _inst_3 (AddMonoidHom.addMonoidHomClass.{u2, u3} A B _inst_1 _inst_3))) f)) -> (forall (c : M) (x : A), Eq.{succ u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : A) => B) (HSMul.hSMul.{u1, u2, u2} M A A (instHSMul.{u1, u2} M A (SMulZeroClass.toSMul.{u1, u2} M A (AddZeroClass.toZero.{u2} A _inst_1) (DistribSMul.toSMulZeroClass.{u1, u2} M A _inst_1 _inst_2))) c x)) (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (AddMonoidHom.{u2, u3} A B _inst_1 _inst_3) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : A) => B) _x) (AddHomClass.toFunLike.{max u2 u3, u2, u3} (AddMonoidHom.{u2, u3} A B _inst_1 _inst_3) A B (AddZeroClass.toAdd.{u2} A _inst_1) (AddZeroClass.toAdd.{u3} B _inst_3) (AddMonoidHomClass.toAddHomClass.{max u2 u3, u2, u3} (AddMonoidHom.{u2, u3} A B _inst_1 _inst_3) A B _inst_1 _inst_3 (AddMonoidHom.addMonoidHomClass.{u2, u3} A B _inst_1 _inst_3))) f (HSMul.hSMul.{u1, u2, u2} M A A (instHSMul.{u1, u2} M A (SMulZeroClass.toSMul.{u1, u2} M A (AddZeroClass.toZero.{u2} A _inst_1) (DistribSMul.toSMulZeroClass.{u1, u2} M A _inst_1 _inst_2))) c x)) (HSMul.hSMul.{u1, u3, u3} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : A) => B) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : A) => B) x) (instHSMul.{u1, u3} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : A) => B) x) _inst_4) c (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (AddMonoidHom.{u2, u3} A B _inst_1 _inst_3) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : A) => B) _x) (AddHomClass.toFunLike.{max u2 u3, u2, u3} (AddMonoidHom.{u2, u3} A B _inst_1 _inst_3) A B (AddZeroClass.toAdd.{u2} A _inst_1) (AddZeroClass.toAdd.{u3} B _inst_3) (AddMonoidHomClass.toAddHomClass.{max u2 u3, u2, u3} (AddMonoidHom.{u2, u3} A B _inst_1 _inst_3) A B _inst_1 _inst_3 (AddMonoidHom.addMonoidHomClass.{u2, u3} A B _inst_1 _inst_3))) f x))) -> (DistribSMul.{u1, u3} M B _inst_3)
-Case conversion may be inaccurate. Consider using '#align function.surjective.distrib_smul Function.Surjective.distribSMulₓ'. -/
/-- Pushforward a distributive scalar multiplication along a surjective additive monoid
homomorphism.
See note [reducible non-instances]. -/
@@ -1016,12 +848,6 @@ protected def Function.Surjective.distribSMul [AddZeroClass B] [SMul M B] (f : A
simp only [smul_add, ← smul, ← map_add] }
#align function.surjective.distrib_smul Function.Surjective.distribSMul
-/- warning: function.surjective.distrib_smul_left -> Function.Surjective.distribSMulLeft is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {S : Type.{u2}} {M : Type.{u3}} [_inst_3 : AddZeroClass.{u3} M] [_inst_4 : DistribSMul.{u1, u3} R M _inst_3] [_inst_5 : SMul.{u2, u3} S M] (f : R -> S), (Function.Surjective.{succ u1, succ u2} R S f) -> (forall (c : R) (x : M), Eq.{succ u3} M (SMul.smul.{u2, u3} S M _inst_5 (f c) x) (SMul.smul.{u1, u3} R M (SMulZeroClass.toHasSmul.{u1, u3} R M (AddZeroClass.toHasZero.{u3} M _inst_3) (DistribSMul.toSmulZeroClass.{u1, u3} R M _inst_3 _inst_4)) c x)) -> (DistribSMul.{u2, u3} S M _inst_3)
-but is expected to have type
- forall {R : Type.{u1}} {S : Type.{u2}} {M : Type.{u3}} [_inst_3 : AddZeroClass.{u3} M] [_inst_4 : DistribSMul.{u1, u3} R M _inst_3] [_inst_5 : SMul.{u2, u3} S M] (f : R -> S), (Function.Surjective.{succ u1, succ u2} R S f) -> (forall (c : R) (x : M), Eq.{succ u3} M (HSMul.hSMul.{u2, u3, u3} S M M (instHSMul.{u2, u3} S M _inst_5) (f c) x) (HSMul.hSMul.{u1, u3, u3} R M M (instHSMul.{u1, u3} R M (SMulZeroClass.toSMul.{u1, u3} R M (AddZeroClass.toZero.{u3} M _inst_3) (DistribSMul.toSMulZeroClass.{u1, u3} R M _inst_3 _inst_4))) c x)) -> (DistribSMul.{u2, u3} S M _inst_3)
-Case conversion may be inaccurate. Consider using '#align function.surjective.distrib_smul_left Function.Surjective.distribSMulLeftₓ'. -/
/-- Push forward the multiplication of `R` on `M` along a compatible surjective map `f : R → S`.
See also `function.surjective.distrib_mul_action_left`.
@@ -1089,12 +915,6 @@ example :
(DistribMulAction.toMulAction.toSMul : SMul M A) = DistribMulAction.toDistribSMul.toSMul :=
rfl
-/- warning: function.injective.distrib_mul_action -> Function.Injective.distribMulAction is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} {A : Type.{u2}} {B : Type.{u3}} [_inst_1 : Monoid.{u1} M] [_inst_2 : AddMonoid.{u2} A] [_inst_3 : DistribMulAction.{u1, u2} M A _inst_1 _inst_2] [_inst_4 : AddMonoid.{u3} B] [_inst_5 : SMul.{u1, u3} M B] (f : AddMonoidHom.{u3, u2} B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2)), (Function.Injective.{succ u3, succ u2} B A (coeFn.{max (succ u2) (succ u3), max (succ u3) (succ u2)} (AddMonoidHom.{u3, u2} B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2)) (fun (_x : AddMonoidHom.{u3, u2} B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2)) => B -> A) (AddMonoidHom.hasCoeToFun.{u3, u2} B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2)) f)) -> (forall (c : M) (x : B), Eq.{succ u2} A (coeFn.{max (succ u2) (succ u3), max (succ u3) (succ u2)} (AddMonoidHom.{u3, u2} B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2)) (fun (_x : AddMonoidHom.{u3, u2} B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2)) => B -> A) (AddMonoidHom.hasCoeToFun.{u3, u2} B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2)) f (SMul.smul.{u1, u3} M B _inst_5 c x)) (SMul.smul.{u1, u2} M A (SMulZeroClass.toHasSmul.{u1, u2} M A (AddZeroClass.toHasZero.{u2} A (AddMonoid.toAddZeroClass.{u2} A _inst_2)) (DistribSMul.toSmulZeroClass.{u1, u2} M A (AddMonoid.toAddZeroClass.{u2} A _inst_2) (DistribMulAction.toDistribSMul.{u1, u2} M A _inst_1 _inst_2 _inst_3))) c (coeFn.{max (succ u2) (succ u3), max (succ u3) (succ u2)} (AddMonoidHom.{u3, u2} B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2)) (fun (_x : AddMonoidHom.{u3, u2} B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2)) => B -> A) (AddMonoidHom.hasCoeToFun.{u3, u2} B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2)) f x))) -> (DistribMulAction.{u1, u3} M B _inst_1 _inst_4)
-but is expected to have type
- forall {M : Type.{u1}} {A : Type.{u2}} {B : Type.{u3}} [_inst_1 : Monoid.{u1} M] [_inst_2 : AddMonoid.{u2} A] [_inst_3 : DistribMulAction.{u1, u2} M A _inst_1 _inst_2] [_inst_4 : AddMonoid.{u3} B] [_inst_5 : SMul.{u1, u3} M B] (f : AddMonoidHom.{u3, u2} B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2)), (Function.Injective.{succ u3, succ u2} B A (FunLike.coe.{max (succ u2) (succ u3), succ u3, succ u2} (AddMonoidHom.{u3, u2} B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2)) B (fun (_x : B) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : B) => A) _x) (AddHomClass.toFunLike.{max u2 u3, u3, u2} (AddMonoidHom.{u3, u2} B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2)) B A (AddZeroClass.toAdd.{u3} B (AddMonoid.toAddZeroClass.{u3} B _inst_4)) (AddZeroClass.toAdd.{u2} A (AddMonoid.toAddZeroClass.{u2} A _inst_2)) (AddMonoidHomClass.toAddHomClass.{max u2 u3, u3, u2} (AddMonoidHom.{u3, u2} B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2)) B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoidHom.addMonoidHomClass.{u3, u2} B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2)))) f)) -> (forall (c : M) (x : B), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : B) => A) (HSMul.hSMul.{u1, u3, u3} M B B (instHSMul.{u1, u3} M B _inst_5) c x)) (FunLike.coe.{max (succ u2) (succ u3), succ u3, succ u2} (AddMonoidHom.{u3, u2} B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2)) B (fun (_x : B) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : B) => A) _x) (AddHomClass.toFunLike.{max u2 u3, u3, u2} (AddMonoidHom.{u3, u2} B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2)) B A (AddZeroClass.toAdd.{u3} B (AddMonoid.toAddZeroClass.{u3} B _inst_4)) (AddZeroClass.toAdd.{u2} A (AddMonoid.toAddZeroClass.{u2} A _inst_2)) (AddMonoidHomClass.toAddHomClass.{max u2 u3, u3, u2} (AddMonoidHom.{u3, u2} B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2)) B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoidHom.addMonoidHomClass.{u3, u2} B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2)))) f (HSMul.hSMul.{u1, u3, u3} M B B (instHSMul.{u1, u3} M B _inst_5) c x)) (HSMul.hSMul.{u1, u2, u2} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : B) => A) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : B) => A) x) (instHSMul.{u1, u2} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : B) => A) x) (SMulZeroClass.toSMul.{u1, u2} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : B) => A) x) (AddMonoid.toZero.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : B) => A) x) _inst_2) (DistribSMul.toSMulZeroClass.{u1, u2} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : B) => A) x) (AddMonoid.toAddZeroClass.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : B) => A) x) _inst_2) (DistribMulAction.toDistribSMul.{u1, u2} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : B) => A) x) _inst_1 _inst_2 _inst_3)))) c (FunLike.coe.{max (succ u2) (succ u3), succ u3, succ u2} (AddMonoidHom.{u3, u2} B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2)) B (fun (_x : B) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : B) => A) _x) (AddHomClass.toFunLike.{max u2 u3, u3, u2} (AddMonoidHom.{u3, u2} B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2)) B A (AddZeroClass.toAdd.{u3} B (AddMonoid.toAddZeroClass.{u3} B _inst_4)) (AddZeroClass.toAdd.{u2} A (AddMonoid.toAddZeroClass.{u2} A _inst_2)) (AddMonoidHomClass.toAddHomClass.{max u2 u3, u3, u2} (AddMonoidHom.{u3, u2} B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2)) B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoidHom.addMonoidHomClass.{u3, u2} B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2)))) f x))) -> (DistribMulAction.{u1, u3} M B _inst_1 _inst_4)
-Case conversion may be inaccurate. Consider using '#align function.injective.distrib_mul_action Function.Injective.distribMulActionₓ'. -/
/-- Pullback a distributive multiplicative action along an injective additive monoid
homomorphism.
See note [reducible non-instances]. -/
@@ -1104,12 +924,6 @@ protected def Function.Injective.distribMulAction [AddMonoid B] [SMul M B] (f :
{ hf.DistribSMul f smul, hf.MulAction f smul with smul := (· • ·) }
#align function.injective.distrib_mul_action Function.Injective.distribMulAction
-/- warning: function.surjective.distrib_mul_action -> Function.Surjective.distribMulAction is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} {A : Type.{u2}} {B : Type.{u3}} [_inst_1 : Monoid.{u1} M] [_inst_2 : AddMonoid.{u2} A] [_inst_3 : DistribMulAction.{u1, u2} M A _inst_1 _inst_2] [_inst_4 : AddMonoid.{u3} B] [_inst_5 : SMul.{u1, u3} M B] (f : AddMonoidHom.{u2, u3} A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4)), (Function.Surjective.{succ u2, succ u3} A B (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (AddMonoidHom.{u2, u3} A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4)) (fun (_x : AddMonoidHom.{u2, u3} A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4)) => A -> B) (AddMonoidHom.hasCoeToFun.{u2, u3} A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4)) f)) -> (forall (c : M) (x : A), Eq.{succ u3} B (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (AddMonoidHom.{u2, u3} A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4)) (fun (_x : AddMonoidHom.{u2, u3} A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4)) => A -> B) (AddMonoidHom.hasCoeToFun.{u2, u3} A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4)) f (SMul.smul.{u1, u2} M A (SMulZeroClass.toHasSmul.{u1, u2} M A (AddZeroClass.toHasZero.{u2} A (AddMonoid.toAddZeroClass.{u2} A _inst_2)) (DistribSMul.toSmulZeroClass.{u1, u2} M A (AddMonoid.toAddZeroClass.{u2} A _inst_2) (DistribMulAction.toDistribSMul.{u1, u2} M A _inst_1 _inst_2 _inst_3))) c x)) (SMul.smul.{u1, u3} M B _inst_5 c (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (AddMonoidHom.{u2, u3} A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4)) (fun (_x : AddMonoidHom.{u2, u3} A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4)) => A -> B) (AddMonoidHom.hasCoeToFun.{u2, u3} A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4)) f x))) -> (DistribMulAction.{u1, u3} M B _inst_1 _inst_4)
-but is expected to have type
- forall {M : Type.{u1}} {A : Type.{u2}} {B : Type.{u3}} [_inst_1 : Monoid.{u1} M] [_inst_2 : AddMonoid.{u2} A] [_inst_3 : DistribMulAction.{u1, u2} M A _inst_1 _inst_2] [_inst_4 : AddMonoid.{u3} B] [_inst_5 : SMul.{u1, u3} M B] (f : AddMonoidHom.{u2, u3} A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4)), (Function.Surjective.{succ u2, succ u3} A B (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (AddMonoidHom.{u2, u3} A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4)) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : A) => B) _x) (AddHomClass.toFunLike.{max u2 u3, u2, u3} (AddMonoidHom.{u2, u3} A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4)) A B (AddZeroClass.toAdd.{u2} A (AddMonoid.toAddZeroClass.{u2} A _inst_2)) (AddZeroClass.toAdd.{u3} B (AddMonoid.toAddZeroClass.{u3} B _inst_4)) (AddMonoidHomClass.toAddHomClass.{max u2 u3, u2, u3} (AddMonoidHom.{u2, u3} A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4)) A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoidHom.addMonoidHomClass.{u2, u3} A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4)))) f)) -> (forall (c : M) (x : A), Eq.{succ u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : A) => B) (HSMul.hSMul.{u1, u2, u2} M A A (instHSMul.{u1, u2} M A (SMulZeroClass.toSMul.{u1, u2} M A (AddMonoid.toZero.{u2} A _inst_2) (DistribSMul.toSMulZeroClass.{u1, u2} M A (AddMonoid.toAddZeroClass.{u2} A _inst_2) (DistribMulAction.toDistribSMul.{u1, u2} M A _inst_1 _inst_2 _inst_3)))) c x)) (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (AddMonoidHom.{u2, u3} A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4)) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : A) => B) _x) (AddHomClass.toFunLike.{max u2 u3, u2, u3} (AddMonoidHom.{u2, u3} A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4)) A B (AddZeroClass.toAdd.{u2} A (AddMonoid.toAddZeroClass.{u2} A _inst_2)) (AddZeroClass.toAdd.{u3} B (AddMonoid.toAddZeroClass.{u3} B _inst_4)) (AddMonoidHomClass.toAddHomClass.{max u2 u3, u2, u3} (AddMonoidHom.{u2, u3} A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4)) A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoidHom.addMonoidHomClass.{u2, u3} A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4)))) f (HSMul.hSMul.{u1, u2, u2} M A A (instHSMul.{u1, u2} M A (SMulZeroClass.toSMul.{u1, u2} M A (AddMonoid.toZero.{u2} A _inst_2) (DistribSMul.toSMulZeroClass.{u1, u2} M A (AddMonoid.toAddZeroClass.{u2} A _inst_2) (DistribMulAction.toDistribSMul.{u1, u2} M A _inst_1 _inst_2 _inst_3)))) c x)) (HSMul.hSMul.{u1, u3, u3} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : A) => B) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : A) => B) x) (instHSMul.{u1, u3} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : A) => B) x) _inst_5) c (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (AddMonoidHom.{u2, u3} A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4)) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : A) => B) _x) (AddHomClass.toFunLike.{max u2 u3, u2, u3} (AddMonoidHom.{u2, u3} A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4)) A B (AddZeroClass.toAdd.{u2} A (AddMonoid.toAddZeroClass.{u2} A _inst_2)) (AddZeroClass.toAdd.{u3} B (AddMonoid.toAddZeroClass.{u3} B _inst_4)) (AddMonoidHomClass.toAddHomClass.{max u2 u3, u2, u3} (AddMonoidHom.{u2, u3} A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4)) A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoidHom.addMonoidHomClass.{u2, u3} A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4)))) f x))) -> (DistribMulAction.{u1, u3} M B _inst_1 _inst_4)
-Case conversion may be inaccurate. Consider using '#align function.surjective.distrib_mul_action Function.Surjective.distribMulActionₓ'. -/
/-- Pushforward a distributive multiplicative action along a surjective additive monoid
homomorphism.
See note [reducible non-instances]. -/
@@ -1119,9 +933,6 @@ protected def Function.Surjective.distribMulAction [AddMonoid B] [SMul M B] (f :
{ hf.DistribSMul f smul, hf.MulAction f smul with smul := (· • ·) }
#align function.surjective.distrib_mul_action Function.Surjective.distribMulAction
-/- warning: function.surjective.distrib_mul_action_left -> Function.Surjective.distribMulActionLeft is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align function.surjective.distrib_mul_action_left Function.Surjective.distribMulActionLeftₓ'. -/
/-- Push forward the action of `R` on `M` along a compatible surjective map `f : R →* S`.
See also `function.surjective.mul_action_left` and `function.surjective.module_left`.
@@ -1165,22 +976,10 @@ def DistribMulAction.toAddMonoidEnd : M →* AddMonoid.End A
#align distrib_mul_action.to_add_monoid_End DistribMulAction.toAddMonoidEnd
-/
-/- warning: add_monoid.nat_smul_comm_class -> AddMonoid.nat_smulCommClass is a dubious translation:
-lean 3 declaration is
- forall (M : Type.{u1}) (A : Type.{u2}) [_inst_1 : Monoid.{u1} M] [_inst_2 : AddMonoid.{u2} A] [_inst_3 : DistribMulAction.{u1, u2} M A _inst_1 _inst_2], SMulCommClass.{0, u1, u2} Nat M A (AddMonoid.SMul.{u2} A _inst_2) (SMulZeroClass.toHasSmul.{u1, u2} M A (AddZeroClass.toHasZero.{u2} A (AddMonoid.toAddZeroClass.{u2} A _inst_2)) (DistribSMul.toSmulZeroClass.{u1, u2} M A (AddMonoid.toAddZeroClass.{u2} A _inst_2) (DistribMulAction.toDistribSMul.{u1, u2} M A _inst_1 _inst_2 _inst_3)))
-but is expected to have type
- forall (M : Type.{u1}) (A : Type.{u2}) [_inst_1 : Monoid.{u1} M] [_inst_2 : AddMonoid.{u2} A] [_inst_3 : DistribMulAction.{u1, u2} M A _inst_1 _inst_2], SMulCommClass.{0, u1, u2} Nat M A (AddMonoid.SMul.{u2} A _inst_2) (SMulZeroClass.toSMul.{u1, u2} M A (AddMonoid.toZero.{u2} A _inst_2) (DistribSMul.toSMulZeroClass.{u1, u2} M A (AddMonoid.toAddZeroClass.{u2} A _inst_2) (DistribMulAction.toDistribSMul.{u1, u2} M A _inst_1 _inst_2 _inst_3)))
-Case conversion may be inaccurate. Consider using '#align add_monoid.nat_smul_comm_class AddMonoid.nat_smulCommClassₓ'. -/
instance AddMonoid.nat_smulCommClass : SMulCommClass ℕ M A
where smul_comm n x y := ((DistribMulAction.toAddMonoidHom A x).map_nsmul y n).symm
#align add_monoid.nat_smul_comm_class AddMonoid.nat_smulCommClass
-/- warning: add_monoid.nat_smul_comm_class' -> AddMonoid.nat_smulCommClass' is a dubious translation:
-lean 3 declaration is
- forall (M : Type.{u1}) (A : Type.{u2}) [_inst_1 : Monoid.{u1} M] [_inst_2 : AddMonoid.{u2} A] [_inst_3 : DistribMulAction.{u1, u2} M A _inst_1 _inst_2], SMulCommClass.{u1, 0, u2} M Nat A (SMulZeroClass.toHasSmul.{u1, u2} M A (AddZeroClass.toHasZero.{u2} A (AddMonoid.toAddZeroClass.{u2} A _inst_2)) (DistribSMul.toSmulZeroClass.{u1, u2} M A (AddMonoid.toAddZeroClass.{u2} A _inst_2) (DistribMulAction.toDistribSMul.{u1, u2} M A _inst_1 _inst_2 _inst_3))) (AddMonoid.SMul.{u2} A _inst_2)
-but is expected to have type
- forall (M : Type.{u1}) (A : Type.{u2}) [_inst_1 : Monoid.{u1} M] [_inst_2 : AddMonoid.{u2} A] [_inst_3 : DistribMulAction.{u1, u2} M A _inst_1 _inst_2], SMulCommClass.{u1, 0, u2} M Nat A (SMulZeroClass.toSMul.{u1, u2} M A (AddMonoid.toZero.{u2} A _inst_2) (DistribSMul.toSMulZeroClass.{u1, u2} M A (AddMonoid.toAddZeroClass.{u2} A _inst_2) (DistribMulAction.toDistribSMul.{u1, u2} M A _inst_1 _inst_2 _inst_3))) (AddMonoid.SMul.{u2} A _inst_2)
-Case conversion may be inaccurate. Consider using '#align add_monoid.nat_smul_comm_class' AddMonoid.nat_smulCommClass'ₓ'. -/
-- `smul_comm_class.symm` is not registered as an instance, as it would cause a loop
instance AddMonoid.nat_smulCommClass' : SMulCommClass M ℕ A :=
SMulCommClass.symm _ _ _
@@ -1192,44 +991,20 @@ section
variable [Monoid M] [AddGroup A] [DistribMulAction M A]
-/- warning: add_group.int_smul_comm_class -> AddGroup.int_smulCommClass is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} {A : Type.{u2}} [_inst_1 : Monoid.{u1} M] [_inst_2 : AddGroup.{u2} A] [_inst_3 : DistribMulAction.{u1, u2} M A _inst_1 (SubNegMonoid.toAddMonoid.{u2} A (AddGroup.toSubNegMonoid.{u2} A _inst_2))], SMulCommClass.{0, u1, u2} Int M A (SubNegMonoid.SMulInt.{u2} A (AddGroup.toSubNegMonoid.{u2} A _inst_2)) (SMulZeroClass.toHasSmul.{u1, u2} M A (AddZeroClass.toHasZero.{u2} A (AddMonoid.toAddZeroClass.{u2} A (SubNegMonoid.toAddMonoid.{u2} A (AddGroup.toSubNegMonoid.{u2} A _inst_2)))) (DistribSMul.toSmulZeroClass.{u1, u2} M A (AddMonoid.toAddZeroClass.{u2} A (SubNegMonoid.toAddMonoid.{u2} A (AddGroup.toSubNegMonoid.{u2} A _inst_2))) (DistribMulAction.toDistribSMul.{u1, u2} M A _inst_1 (SubNegMonoid.toAddMonoid.{u2} A (AddGroup.toSubNegMonoid.{u2} A _inst_2)) _inst_3)))
-but is expected to have type
- forall {M : Type.{u1}} {A : Type.{u2}} [_inst_1 : Monoid.{u1} M] [_inst_2 : AddGroup.{u2} A] [_inst_3 : DistribMulAction.{u1, u2} M A _inst_1 (SubNegMonoid.toAddMonoid.{u2} A (AddGroup.toSubNegMonoid.{u2} A _inst_2))], SMulCommClass.{0, u1, u2} Int M A (SubNegMonoid.SMulInt.{u2} A (AddGroup.toSubNegMonoid.{u2} A _inst_2)) (SMulZeroClass.toSMul.{u1, u2} M A (NegZeroClass.toZero.{u2} A (SubNegZeroMonoid.toNegZeroClass.{u2} A (SubtractionMonoid.toSubNegZeroMonoid.{u2} A (AddGroup.toSubtractionMonoid.{u2} A _inst_2)))) (DistribSMul.toSMulZeroClass.{u1, u2} M A (AddMonoid.toAddZeroClass.{u2} A (SubNegMonoid.toAddMonoid.{u2} A (AddGroup.toSubNegMonoid.{u2} A _inst_2))) (DistribMulAction.toDistribSMul.{u1, u2} M A _inst_1 (SubNegMonoid.toAddMonoid.{u2} A (AddGroup.toSubNegMonoid.{u2} A _inst_2)) _inst_3)))
-Case conversion may be inaccurate. Consider using '#align add_group.int_smul_comm_class AddGroup.int_smulCommClassₓ'. -/
instance AddGroup.int_smulCommClass : SMulCommClass ℤ M A
where smul_comm n x y := ((DistribMulAction.toAddMonoidHom A x).map_zsmul y n).symm
#align add_group.int_smul_comm_class AddGroup.int_smulCommClass
-/- warning: add_group.int_smul_comm_class' -> AddGroup.int_smulCommClass' is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} {A : Type.{u2}} [_inst_1 : Monoid.{u1} M] [_inst_2 : AddGroup.{u2} A] [_inst_3 : DistribMulAction.{u1, u2} M A _inst_1 (SubNegMonoid.toAddMonoid.{u2} A (AddGroup.toSubNegMonoid.{u2} A _inst_2))], SMulCommClass.{u1, 0, u2} M Int A (SMulZeroClass.toHasSmul.{u1, u2} M A (AddZeroClass.toHasZero.{u2} A (AddMonoid.toAddZeroClass.{u2} A (SubNegMonoid.toAddMonoid.{u2} A (AddGroup.toSubNegMonoid.{u2} A _inst_2)))) (DistribSMul.toSmulZeroClass.{u1, u2} M A (AddMonoid.toAddZeroClass.{u2} A (SubNegMonoid.toAddMonoid.{u2} A (AddGroup.toSubNegMonoid.{u2} A _inst_2))) (DistribMulAction.toDistribSMul.{u1, u2} M A _inst_1 (SubNegMonoid.toAddMonoid.{u2} A (AddGroup.toSubNegMonoid.{u2} A _inst_2)) _inst_3))) (SubNegMonoid.SMulInt.{u2} A (AddGroup.toSubNegMonoid.{u2} A _inst_2))
-but is expected to have type
- forall {M : Type.{u1}} {A : Type.{u2}} [_inst_1 : Monoid.{u1} M] [_inst_2 : AddGroup.{u2} A] [_inst_3 : DistribMulAction.{u1, u2} M A _inst_1 (SubNegMonoid.toAddMonoid.{u2} A (AddGroup.toSubNegMonoid.{u2} A _inst_2))], SMulCommClass.{u1, 0, u2} M Int A (SMulZeroClass.toSMul.{u1, u2} M A (NegZeroClass.toZero.{u2} A (SubNegZeroMonoid.toNegZeroClass.{u2} A (SubtractionMonoid.toSubNegZeroMonoid.{u2} A (AddGroup.toSubtractionMonoid.{u2} A _inst_2)))) (DistribSMul.toSMulZeroClass.{u1, u2} M A (AddMonoid.toAddZeroClass.{u2} A (SubNegMonoid.toAddMonoid.{u2} A (AddGroup.toSubNegMonoid.{u2} A _inst_2))) (DistribMulAction.toDistribSMul.{u1, u2} M A _inst_1 (SubNegMonoid.toAddMonoid.{u2} A (AddGroup.toSubNegMonoid.{u2} A _inst_2)) _inst_3))) (SubNegMonoid.SMulInt.{u2} A (AddGroup.toSubNegMonoid.{u2} A _inst_2))
-Case conversion may be inaccurate. Consider using '#align add_group.int_smul_comm_class' AddGroup.int_smulCommClass'ₓ'. -/
-- `smul_comm_class.symm` is not registered as an instance, as it would cause a loop
instance AddGroup.int_smulCommClass' : SMulCommClass M ℤ A :=
SMulCommClass.symm _ _ _
#align add_group.int_smul_comm_class' AddGroup.int_smulCommClass'
-/- warning: smul_neg -> smul_neg is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} {A : Type.{u2}} [_inst_1 : Monoid.{u1} M] [_inst_2 : AddGroup.{u2} A] [_inst_3 : DistribMulAction.{u1, u2} M A _inst_1 (SubNegMonoid.toAddMonoid.{u2} A (AddGroup.toSubNegMonoid.{u2} A _inst_2))] (r : M) (x : A), Eq.{succ u2} A (SMul.smul.{u1, u2} M A (SMulZeroClass.toHasSmul.{u1, u2} M A (AddZeroClass.toHasZero.{u2} A (AddMonoid.toAddZeroClass.{u2} A (SubNegMonoid.toAddMonoid.{u2} A (AddGroup.toSubNegMonoid.{u2} A _inst_2)))) (DistribSMul.toSmulZeroClass.{u1, u2} M A (AddMonoid.toAddZeroClass.{u2} A (SubNegMonoid.toAddMonoid.{u2} A (AddGroup.toSubNegMonoid.{u2} A _inst_2))) (DistribMulAction.toDistribSMul.{u1, u2} M A _inst_1 (SubNegMonoid.toAddMonoid.{u2} A (AddGroup.toSubNegMonoid.{u2} A _inst_2)) _inst_3))) r (Neg.neg.{u2} A (SubNegMonoid.toHasNeg.{u2} A (AddGroup.toSubNegMonoid.{u2} A _inst_2)) x)) (Neg.neg.{u2} A (SubNegMonoid.toHasNeg.{u2} A (AddGroup.toSubNegMonoid.{u2} A _inst_2)) (SMul.smul.{u1, u2} M A (SMulZeroClass.toHasSmul.{u1, u2} M A (AddZeroClass.toHasZero.{u2} A (AddMonoid.toAddZeroClass.{u2} A (SubNegMonoid.toAddMonoid.{u2} A (AddGroup.toSubNegMonoid.{u2} A _inst_2)))) (DistribSMul.toSmulZeroClass.{u1, u2} M A (AddMonoid.toAddZeroClass.{u2} A (SubNegMonoid.toAddMonoid.{u2} A (AddGroup.toSubNegMonoid.{u2} A _inst_2))) (DistribMulAction.toDistribSMul.{u1, u2} M A _inst_1 (SubNegMonoid.toAddMonoid.{u2} A (AddGroup.toSubNegMonoid.{u2} A _inst_2)) _inst_3))) r x))
-but is expected to have type
- forall {M : Type.{u1}} {A : Type.{u2}} [_inst_1 : Monoid.{u1} M] [_inst_2 : AddGroup.{u2} A] [_inst_3 : DistribMulAction.{u1, u2} M A _inst_1 (SubNegMonoid.toAddMonoid.{u2} A (AddGroup.toSubNegMonoid.{u2} A _inst_2))] (r : M) (x : A), Eq.{succ u2} A (HSMul.hSMul.{u1, u2, u2} M A A (instHSMul.{u1, u2} M A (SMulZeroClass.toSMul.{u1, u2} M A (NegZeroClass.toZero.{u2} A (SubNegZeroMonoid.toNegZeroClass.{u2} A (SubtractionMonoid.toSubNegZeroMonoid.{u2} A (AddGroup.toSubtractionMonoid.{u2} A _inst_2)))) (DistribSMul.toSMulZeroClass.{u1, u2} M A (AddMonoid.toAddZeroClass.{u2} A (SubNegMonoid.toAddMonoid.{u2} A (AddGroup.toSubNegMonoid.{u2} A _inst_2))) (DistribMulAction.toDistribSMul.{u1, u2} M A _inst_1 (SubNegMonoid.toAddMonoid.{u2} A (AddGroup.toSubNegMonoid.{u2} A _inst_2)) _inst_3)))) r (Neg.neg.{u2} A (NegZeroClass.toNeg.{u2} A (SubNegZeroMonoid.toNegZeroClass.{u2} A (SubtractionMonoid.toSubNegZeroMonoid.{u2} A (AddGroup.toSubtractionMonoid.{u2} A _inst_2)))) x)) (Neg.neg.{u2} A (NegZeroClass.toNeg.{u2} A (SubNegZeroMonoid.toNegZeroClass.{u2} A (SubtractionMonoid.toSubNegZeroMonoid.{u2} A (AddGroup.toSubtractionMonoid.{u2} A _inst_2)))) (HSMul.hSMul.{u1, u2, u2} M A A (instHSMul.{u1, u2} M A (SMulZeroClass.toSMul.{u1, u2} M A (NegZeroClass.toZero.{u2} A (SubNegZeroMonoid.toNegZeroClass.{u2} A (SubtractionMonoid.toSubNegZeroMonoid.{u2} A (AddGroup.toSubtractionMonoid.{u2} A _inst_2)))) (DistribSMul.toSMulZeroClass.{u1, u2} M A (AddMonoid.toAddZeroClass.{u2} A (SubNegMonoid.toAddMonoid.{u2} A (AddGroup.toSubNegMonoid.{u2} A _inst_2))) (DistribMulAction.toDistribSMul.{u1, u2} M A _inst_1 (SubNegMonoid.toAddMonoid.{u2} A (AddGroup.toSubNegMonoid.{u2} A _inst_2)) _inst_3)))) r x))
-Case conversion may be inaccurate. Consider using '#align smul_neg smul_negₓ'. -/
@[simp]
theorem smul_neg (r : M) (x : A) : r • -x = -(r • x) :=
eq_neg_of_add_eq_zero_left <| by rw [← smul_add, neg_add_self, smul_zero]
#align smul_neg smul_neg
-/- warning: smul_sub -> smul_sub is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} {A : Type.{u2}} [_inst_1 : Monoid.{u1} M] [_inst_2 : AddGroup.{u2} A] [_inst_3 : DistribMulAction.{u1, u2} M A _inst_1 (SubNegMonoid.toAddMonoid.{u2} A (AddGroup.toSubNegMonoid.{u2} A _inst_2))] (r : M) (x : A) (y : A), Eq.{succ u2} A (SMul.smul.{u1, u2} M A (SMulZeroClass.toHasSmul.{u1, u2} M A (AddZeroClass.toHasZero.{u2} A (AddMonoid.toAddZeroClass.{u2} A (SubNegMonoid.toAddMonoid.{u2} A (AddGroup.toSubNegMonoid.{u2} A _inst_2)))) (DistribSMul.toSmulZeroClass.{u1, u2} M A (AddMonoid.toAddZeroClass.{u2} A (SubNegMonoid.toAddMonoid.{u2} A (AddGroup.toSubNegMonoid.{u2} A _inst_2))) (DistribMulAction.toDistribSMul.{u1, u2} M A _inst_1 (SubNegMonoid.toAddMonoid.{u2} A (AddGroup.toSubNegMonoid.{u2} A _inst_2)) _inst_3))) r (HSub.hSub.{u2, u2, u2} A A A (instHSub.{u2} A (SubNegMonoid.toHasSub.{u2} A (AddGroup.toSubNegMonoid.{u2} A _inst_2))) x y)) (HSub.hSub.{u2, u2, u2} A A A (instHSub.{u2} A (SubNegMonoid.toHasSub.{u2} A (AddGroup.toSubNegMonoid.{u2} A _inst_2))) (SMul.smul.{u1, u2} M A (SMulZeroClass.toHasSmul.{u1, u2} M A (AddZeroClass.toHasZero.{u2} A (AddMonoid.toAddZeroClass.{u2} A (SubNegMonoid.toAddMonoid.{u2} A (AddGroup.toSubNegMonoid.{u2} A _inst_2)))) (DistribSMul.toSmulZeroClass.{u1, u2} M A (AddMonoid.toAddZeroClass.{u2} A (SubNegMonoid.toAddMonoid.{u2} A (AddGroup.toSubNegMonoid.{u2} A _inst_2))) (DistribMulAction.toDistribSMul.{u1, u2} M A _inst_1 (SubNegMonoid.toAddMonoid.{u2} A (AddGroup.toSubNegMonoid.{u2} A _inst_2)) _inst_3))) r x) (SMul.smul.{u1, u2} M A (SMulZeroClass.toHasSmul.{u1, u2} M A (AddZeroClass.toHasZero.{u2} A (AddMonoid.toAddZeroClass.{u2} A (SubNegMonoid.toAddMonoid.{u2} A (AddGroup.toSubNegMonoid.{u2} A _inst_2)))) (DistribSMul.toSmulZeroClass.{u1, u2} M A (AddMonoid.toAddZeroClass.{u2} A (SubNegMonoid.toAddMonoid.{u2} A (AddGroup.toSubNegMonoid.{u2} A _inst_2))) (DistribMulAction.toDistribSMul.{u1, u2} M A _inst_1 (SubNegMonoid.toAddMonoid.{u2} A (AddGroup.toSubNegMonoid.{u2} A _inst_2)) _inst_3))) r y))
-but is expected to have type
- forall {M : Type.{u1}} {A : Type.{u2}} [_inst_1 : Monoid.{u1} M] [_inst_2 : AddGroup.{u2} A] [_inst_3 : DistribMulAction.{u1, u2} M A _inst_1 (SubNegMonoid.toAddMonoid.{u2} A (AddGroup.toSubNegMonoid.{u2} A _inst_2))] (r : M) (x : A) (y : A), Eq.{succ u2} A (HSMul.hSMul.{u1, u2, u2} M A A (instHSMul.{u1, u2} M A (SMulZeroClass.toSMul.{u1, u2} M A (NegZeroClass.toZero.{u2} A (SubNegZeroMonoid.toNegZeroClass.{u2} A (SubtractionMonoid.toSubNegZeroMonoid.{u2} A (AddGroup.toSubtractionMonoid.{u2} A _inst_2)))) (DistribSMul.toSMulZeroClass.{u1, u2} M A (AddMonoid.toAddZeroClass.{u2} A (SubNegMonoid.toAddMonoid.{u2} A (AddGroup.toSubNegMonoid.{u2} A _inst_2))) (DistribMulAction.toDistribSMul.{u1, u2} M A _inst_1 (SubNegMonoid.toAddMonoid.{u2} A (AddGroup.toSubNegMonoid.{u2} A _inst_2)) _inst_3)))) r (HSub.hSub.{u2, u2, u2} A A A (instHSub.{u2} A (SubNegMonoid.toSub.{u2} A (AddGroup.toSubNegMonoid.{u2} A _inst_2))) x y)) (HSub.hSub.{u2, u2, u2} A A A (instHSub.{u2} A (SubNegMonoid.toSub.{u2} A (AddGroup.toSubNegMonoid.{u2} A _inst_2))) (HSMul.hSMul.{u1, u2, u2} M A A (instHSMul.{u1, u2} M A (SMulZeroClass.toSMul.{u1, u2} M A (NegZeroClass.toZero.{u2} A (SubNegZeroMonoid.toNegZeroClass.{u2} A (SubtractionMonoid.toSubNegZeroMonoid.{u2} A (AddGroup.toSubtractionMonoid.{u2} A _inst_2)))) (DistribSMul.toSMulZeroClass.{u1, u2} M A (AddMonoid.toAddZeroClass.{u2} A (SubNegMonoid.toAddMonoid.{u2} A (AddGroup.toSubNegMonoid.{u2} A _inst_2))) (DistribMulAction.toDistribSMul.{u1, u2} M A _inst_1 (SubNegMonoid.toAddMonoid.{u2} A (AddGroup.toSubNegMonoid.{u2} A _inst_2)) _inst_3)))) r x) (HSMul.hSMul.{u1, u2, u2} M A A (instHSMul.{u1, u2} M A (SMulZeroClass.toSMul.{u1, u2} M A (NegZeroClass.toZero.{u2} A (SubNegZeroMonoid.toNegZeroClass.{u2} A (SubtractionMonoid.toSubNegZeroMonoid.{u2} A (AddGroup.toSubtractionMonoid.{u2} A _inst_2)))) (DistribSMul.toSMulZeroClass.{u1, u2} M A (AddMonoid.toAddZeroClass.{u2} A (SubNegMonoid.toAddMonoid.{u2} A (AddGroup.toSubNegMonoid.{u2} A _inst_2))) (DistribMulAction.toDistribSMul.{u1, u2} M A _inst_1 (SubNegMonoid.toAddMonoid.{u2} A (AddGroup.toSubNegMonoid.{u2} A _inst_2)) _inst_3)))) r y))
-Case conversion may be inaccurate. Consider using '#align smul_sub smul_subₓ'. -/
theorem smul_sub (r : M) (x y : A) : r • (x - y) = r • x - r • y := by
rw [sub_eq_add_neg, sub_eq_add_neg, smul_add, smul_neg]
#align smul_sub smul_sub
@@ -1253,22 +1028,10 @@ section
variable [Monoid M] [Monoid A] [MulDistribMulAction M A]
-/- warning: smul_mul' -> smul_mul' is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} {A : Type.{u2}} [_inst_1 : Monoid.{u1} M] [_inst_2 : Monoid.{u2} A] [_inst_3 : MulDistribMulAction.{u1, u2} M A _inst_1 _inst_2] (a : M) (b₁ : A) (b₂ : A), Eq.{succ u2} A (SMul.smul.{u1, u2} M A (MulAction.toHasSmul.{u1, u2} M A _inst_1 (MulDistribMulAction.toMulAction.{u1, u2} M A _inst_1 _inst_2 _inst_3)) a (HMul.hMul.{u2, u2, u2} A A A (instHMul.{u2} A (MulOneClass.toHasMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_2))) b₁ b₂)) (HMul.hMul.{u2, u2, u2} A A A (instHMul.{u2} A (MulOneClass.toHasMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_2))) (SMul.smul.{u1, u2} M A (MulAction.toHasSmul.{u1, u2} M A _inst_1 (MulDistribMulAction.toMulAction.{u1, u2} M A _inst_1 _inst_2 _inst_3)) a b₁) (SMul.smul.{u1, u2} M A (MulAction.toHasSmul.{u1, u2} M A _inst_1 (MulDistribMulAction.toMulAction.{u1, u2} M A _inst_1 _inst_2 _inst_3)) a b₂))
-but is expected to have type
- forall {M : Type.{u1}} {A : Type.{u2}} [_inst_1 : Monoid.{u1} M] [_inst_2 : Monoid.{u2} A] [_inst_3 : MulDistribMulAction.{u1, u2} M A _inst_1 _inst_2] (a : M) (b₁ : A) (b₂ : A), Eq.{succ u2} A (HSMul.hSMul.{u1, u2, u2} M A A (instHSMul.{u1, u2} M A (MulAction.toSMul.{u1, u2} M A _inst_1 (MulDistribMulAction.toMulAction.{u1, u2} M A _inst_1 _inst_2 _inst_3))) a (HMul.hMul.{u2, u2, u2} A A A (instHMul.{u2} A (MulOneClass.toMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_2))) b₁ b₂)) (HMul.hMul.{u2, u2, u2} A A A (instHMul.{u2} A (MulOneClass.toMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_2))) (HSMul.hSMul.{u1, u2, u2} M A A (instHSMul.{u1, u2} M A (MulAction.toSMul.{u1, u2} M A _inst_1 (MulDistribMulAction.toMulAction.{u1, u2} M A _inst_1 _inst_2 _inst_3))) a b₁) (HSMul.hSMul.{u1, u2, u2} M A A (instHSMul.{u1, u2} M A (MulAction.toSMul.{u1, u2} M A _inst_1 (MulDistribMulAction.toMulAction.{u1, u2} M A _inst_1 _inst_2 _inst_3))) a b₂))
-Case conversion may be inaccurate. Consider using '#align smul_mul' smul_mul'ₓ'. -/
theorem smul_mul' (a : M) (b₁ b₂ : A) : a • (b₁ * b₂) = a • b₁ * a • b₂ :=
MulDistribMulAction.smul_mul _ _ _
#align smul_mul' smul_mul'
-/- warning: function.injective.mul_distrib_mul_action -> Function.Injective.mulDistribMulAction is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} {A : Type.{u2}} {B : Type.{u3}} [_inst_1 : Monoid.{u1} M] [_inst_2 : Monoid.{u2} A] [_inst_3 : MulDistribMulAction.{u1, u2} M A _inst_1 _inst_2] [_inst_4 : Monoid.{u3} B] [_inst_5 : SMul.{u1, u3} M B] (f : MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)), (Function.Injective.{succ u3, succ u2} B A (coeFn.{max (succ u2) (succ u3), max (succ u3) (succ u2)} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) (fun (_x : MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) => B -> A) (MonoidHom.hasCoeToFun.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) f)) -> (forall (c : M) (x : B), Eq.{succ u2} A (coeFn.{max (succ u2) (succ u3), max (succ u3) (succ u2)} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) (fun (_x : MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) => B -> A) (MonoidHom.hasCoeToFun.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) f (SMul.smul.{u1, u3} M B _inst_5 c x)) (SMul.smul.{u1, u2} M A (MulAction.toHasSmul.{u1, u2} M A _inst_1 (MulDistribMulAction.toMulAction.{u1, u2} M A _inst_1 _inst_2 _inst_3)) c (coeFn.{max (succ u2) (succ u3), max (succ u3) (succ u2)} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) (fun (_x : MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) => B -> A) (MonoidHom.hasCoeToFun.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) f x))) -> (MulDistribMulAction.{u1, u3} M B _inst_1 _inst_4)
-but is expected to have type
- forall {M : Type.{u1}} {A : Type.{u2}} {B : Type.{u3}} [_inst_1 : Monoid.{u1} M] [_inst_2 : Monoid.{u2} A] [_inst_3 : MulDistribMulAction.{u1, u2} M A _inst_1 _inst_2] [_inst_4 : Monoid.{u3} B] [_inst_5 : SMul.{u1, u3} M B] (f : MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)), (Function.Injective.{succ u3, succ u2} B A (FunLike.coe.{max (succ u2) (succ u3), succ u3, succ u2} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) B (fun (_x : B) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : B) => A) _x) (MulHomClass.toFunLike.{max u2 u3, u3, u2} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) B A (MulOneClass.toMul.{u3} B (Monoid.toMulOneClass.{u3} B _inst_4)) (MulOneClass.toMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u3, u3, u2} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2) (MonoidHom.monoidHomClass.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)))) f)) -> (forall (c : M) (x : B), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : B) => A) (HSMul.hSMul.{u1, u3, u3} M B B (instHSMul.{u1, u3} M B _inst_5) c x)) (FunLike.coe.{max (succ u2) (succ u3), succ u3, succ u2} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) B (fun (_x : B) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : B) => A) _x) (MulHomClass.toFunLike.{max u2 u3, u3, u2} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) B A (MulOneClass.toMul.{u3} B (Monoid.toMulOneClass.{u3} B _inst_4)) (MulOneClass.toMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u3, u3, u2} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2) (MonoidHom.monoidHomClass.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)))) f (HSMul.hSMul.{u1, u3, u3} M B B (instHSMul.{u1, u3} M B _inst_5) c x)) (HSMul.hSMul.{u1, u2, u2} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : B) => A) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : B) => A) x) (instHSMul.{u1, u2} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : B) => A) x) (MulAction.toSMul.{u1, u2} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : B) => A) x) _inst_1 (MulDistribMulAction.toMulAction.{u1, u2} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : B) => A) x) _inst_1 _inst_2 _inst_3))) c (FunLike.coe.{max (succ u2) (succ u3), succ u3, succ u2} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) B (fun (_x : B) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : B) => A) _x) (MulHomClass.toFunLike.{max u2 u3, u3, u2} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) B A (MulOneClass.toMul.{u3} B (Monoid.toMulOneClass.{u3} B _inst_4)) (MulOneClass.toMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u3, u3, u2} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2) (MonoidHom.monoidHomClass.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)))) f x))) -> (MulDistribMulAction.{u1, u3} M B _inst_1 _inst_4)
-Case conversion may be inaccurate. Consider using '#align function.injective.mul_distrib_mul_action Function.Injective.mulDistribMulActionₓ'. -/
/-- Pullback a multiplicative distributive multiplicative action along an injective monoid
homomorphism.
See note [reducible non-instances]. -/
@@ -1281,12 +1044,6 @@ protected def Function.Injective.mulDistribMulAction [Monoid B] [SMul M B] (f :
smul_one := fun c => hf <| by simp only [smul, f.map_one, smul_one] }
#align function.injective.mul_distrib_mul_action Function.Injective.mulDistribMulAction
-/- warning: function.surjective.mul_distrib_mul_action -> Function.Surjective.mulDistribMulAction is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} {A : Type.{u2}} {B : Type.{u3}} [_inst_1 : Monoid.{u1} M] [_inst_2 : Monoid.{u2} A] [_inst_3 : MulDistribMulAction.{u1, u2} M A _inst_1 _inst_2] [_inst_4 : Monoid.{u3} B] [_inst_5 : SMul.{u1, u3} M B] (f : MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)), (Function.Surjective.{succ u2, succ u3} A B (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) (fun (_x : MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) => A -> B) (MonoidHom.hasCoeToFun.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) f)) -> (forall (c : M) (x : A), Eq.{succ u3} B (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) (fun (_x : MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) => A -> B) (MonoidHom.hasCoeToFun.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) f (SMul.smul.{u1, u2} M A (MulAction.toHasSmul.{u1, u2} M A _inst_1 (MulDistribMulAction.toMulAction.{u1, u2} M A _inst_1 _inst_2 _inst_3)) c x)) (SMul.smul.{u1, u3} M B _inst_5 c (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) (fun (_x : MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) => A -> B) (MonoidHom.hasCoeToFun.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) f x))) -> (MulDistribMulAction.{u1, u3} M B _inst_1 _inst_4)
-but is expected to have type
- forall {M : Type.{u1}} {A : Type.{u2}} {B : Type.{u3}} [_inst_1 : Monoid.{u1} M] [_inst_2 : Monoid.{u2} A] [_inst_3 : MulDistribMulAction.{u1, u2} M A _inst_1 _inst_2] [_inst_4 : Monoid.{u3} B] [_inst_5 : SMul.{u1, u3} M B] (f : MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)), (Function.Surjective.{succ u2, succ u3} A B (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : A) => B) _x) (MulHomClass.toFunLike.{max u2 u3, u2, u3} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) A B (MulOneClass.toMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_2)) (MulOneClass.toMul.{u3} B (Monoid.toMulOneClass.{u3} B _inst_4)) (MonoidHomClass.toMulHomClass.{max u2 u3, u2, u3} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4) (MonoidHom.monoidHomClass.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)))) f)) -> (forall (c : M) (x : A), Eq.{succ u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : A) => B) (HSMul.hSMul.{u1, u2, u2} M A A (instHSMul.{u1, u2} M A (MulAction.toSMul.{u1, u2} M A _inst_1 (MulDistribMulAction.toMulAction.{u1, u2} M A _inst_1 _inst_2 _inst_3))) c x)) (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : A) => B) _x) (MulHomClass.toFunLike.{max u2 u3, u2, u3} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) A B (MulOneClass.toMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_2)) (MulOneClass.toMul.{u3} B (Monoid.toMulOneClass.{u3} B _inst_4)) (MonoidHomClass.toMulHomClass.{max u2 u3, u2, u3} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4) (MonoidHom.monoidHomClass.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)))) f (HSMul.hSMul.{u1, u2, u2} M A A (instHSMul.{u1, u2} M A (MulAction.toSMul.{u1, u2} M A _inst_1 (MulDistribMulAction.toMulAction.{u1, u2} M A _inst_1 _inst_2 _inst_3))) c x)) (HSMul.hSMul.{u1, u3, u3} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : A) => B) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : A) => B) x) (instHSMul.{u1, u3} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : A) => B) x) _inst_5) c (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : A) => B) _x) (MulHomClass.toFunLike.{max u2 u3, u2, u3} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) A B (MulOneClass.toMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_2)) (MulOneClass.toMul.{u3} B (Monoid.toMulOneClass.{u3} B _inst_4)) (MonoidHomClass.toMulHomClass.{max u2 u3, u2, u3} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4) (MonoidHom.monoidHomClass.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)))) f x))) -> (MulDistribMulAction.{u1, u3} M B _inst_1 _inst_4)
-Case conversion may be inaccurate. Consider using '#align function.surjective.mul_distrib_mul_action Function.Surjective.mulDistribMulActionₓ'. -/
/-- Pushforward a multiplicative distributive multiplicative action along a surjective monoid
homomorphism.
See note [reducible non-instances]. -/
@@ -1327,12 +1084,6 @@ def MulDistribMulAction.toMonoidHom (r : M) : A →* A
variable {A}
-/- warning: mul_distrib_mul_action.to_monoid_hom_apply -> MulDistribMulAction.toMonoidHom_apply is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} {A : Type.{u2}} [_inst_1 : Monoid.{u1} M] [_inst_2 : Monoid.{u2} A] [_inst_3 : MulDistribMulAction.{u1, u2} M A _inst_1 _inst_2] (r : M) (x : A), Eq.{succ u2} A (coeFn.{succ u2, succ u2} (MonoidHom.{u2, u2} A A (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u2} A _inst_2)) (fun (_x : MonoidHom.{u2, u2} A A (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u2} A _inst_2)) => A -> A) (MonoidHom.hasCoeToFun.{u2, u2} A A (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u2} A _inst_2)) (MulDistribMulAction.toMonoidHom.{u1, u2} M A _inst_1 _inst_2 _inst_3 r) x) (SMul.smul.{u1, u2} M A (MulAction.toHasSmul.{u1, u2} M A _inst_1 (MulDistribMulAction.toMulAction.{u1, u2} M A _inst_1 _inst_2 _inst_3)) r x)
-but is expected to have type
- forall {M : Type.{u1}} {A : Type.{u2}} [_inst_1 : Monoid.{u1} M] [_inst_2 : Monoid.{u2} A] [_inst_3 : MulDistribMulAction.{u1, u2} M A _inst_1 _inst_2] (r : M) (x : A), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : A) => A) x) (FunLike.coe.{succ u2, succ u2, succ u2} (MonoidHom.{u2, u2} A A (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u2} A _inst_2)) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : A) => A) _x) (MulHomClass.toFunLike.{u2, u2, u2} (MonoidHom.{u2, u2} A A (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u2} A _inst_2)) A A (MulOneClass.toMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_2)) (MulOneClass.toMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_2)) (MonoidHomClass.toMulHomClass.{u2, u2, u2} (MonoidHom.{u2, u2} A A (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u2} A _inst_2)) A A (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u2} A _inst_2) (MonoidHom.monoidHomClass.{u2, u2} A A (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u2} A _inst_2)))) (MulDistribMulAction.toMonoidHom.{u1, u2} M A _inst_1 _inst_2 _inst_3 r) x) (HSMul.hSMul.{u1, u2, u2} M A A (instHSMul.{u1, u2} M A (MulAction.toSMul.{u1, u2} M A _inst_1 (MulDistribMulAction.toMulAction.{u1, u2} M A _inst_1 _inst_2 _inst_3))) r x)
-Case conversion may be inaccurate. Consider using '#align mul_distrib_mul_action.to_monoid_hom_apply MulDistribMulAction.toMonoidHom_applyₓ'. -/
@[simp]
theorem MulDistribMulAction.toMonoidHom_apply (r : M) (x : A) :
MulDistribMulAction.toMonoidHom A r x = r • x :=
@@ -1341,12 +1092,6 @@ theorem MulDistribMulAction.toMonoidHom_apply (r : M) (x : A) :
variable (M A)
-/- warning: mul_distrib_mul_action.to_monoid_End -> MulDistribMulAction.toMonoidEnd is a dubious translation:
-lean 3 declaration is
- forall (M : Type.{u1}) (A : Type.{u2}) [_inst_1 : Monoid.{u1} M] [_inst_2 : Monoid.{u2} A] [_inst_3 : MulDistribMulAction.{u1, u2} M A _inst_1 _inst_2], MonoidHom.{u1, u2} M (Monoid.End.{u2} A (Monoid.toMulOneClass.{u2} A _inst_2)) (Monoid.toMulOneClass.{u1} M _inst_1) (Monoid.toMulOneClass.{u2} (Monoid.End.{u2} A (Monoid.toMulOneClass.{u2} A _inst_2)) (Monoid.End.monoid.{u2} A (Monoid.toMulOneClass.{u2} A _inst_2)))
-but is expected to have type
- forall (M : Type.{u1}) (A : Type.{u2}) [_inst_1 : Monoid.{u1} M] [_inst_2 : Monoid.{u2} A] [_inst_3 : MulDistribMulAction.{u1, u2} M A _inst_1 _inst_2], MonoidHom.{u1, u2} M (Monoid.End.{u2} A (Monoid.toMulOneClass.{u2} A _inst_2)) (Monoid.toMulOneClass.{u1} M _inst_1) (Monoid.toMulOneClass.{u2} (Monoid.End.{u2} A (Monoid.toMulOneClass.{u2} A _inst_2)) (Monoid.End.instMonoidEnd.{u2} A (Monoid.toMulOneClass.{u2} A _inst_2)))
-Case conversion may be inaccurate. Consider using '#align mul_distrib_mul_action.to_monoid_End MulDistribMulAction.toMonoidEndₓ'. -/
/-- Each element of the monoid defines a monoid homomorphism. -/
@[simps]
def MulDistribMulAction.toMonoidEnd : M →* Monoid.End A
@@ -1362,23 +1107,11 @@ section
variable [Monoid M] [Group A] [MulDistribMulAction M A]
-/- warning: smul_inv' -> smul_inv' is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} {A : Type.{u2}} [_inst_1 : Monoid.{u1} M] [_inst_2 : Group.{u2} A] [_inst_3 : MulDistribMulAction.{u1, u2} M A _inst_1 (DivInvMonoid.toMonoid.{u2} A (Group.toDivInvMonoid.{u2} A _inst_2))] (r : M) (x : A), Eq.{succ u2} A (SMul.smul.{u1, u2} M A (MulAction.toHasSmul.{u1, u2} M A _inst_1 (MulDistribMulAction.toMulAction.{u1, u2} M A _inst_1 (DivInvMonoid.toMonoid.{u2} A (Group.toDivInvMonoid.{u2} A _inst_2)) _inst_3)) r (Inv.inv.{u2} A (DivInvMonoid.toHasInv.{u2} A (Group.toDivInvMonoid.{u2} A _inst_2)) x)) (Inv.inv.{u2} A (DivInvMonoid.toHasInv.{u2} A (Group.toDivInvMonoid.{u2} A _inst_2)) (SMul.smul.{u1, u2} M A (MulAction.toHasSmul.{u1, u2} M A _inst_1 (MulDistribMulAction.toMulAction.{u1, u2} M A _inst_1 (DivInvMonoid.toMonoid.{u2} A (Group.toDivInvMonoid.{u2} A _inst_2)) _inst_3)) r x))
-but is expected to have type
- forall {M : Type.{u1}} {A : Type.{u2}} [_inst_1 : Monoid.{u1} M] [_inst_2 : Group.{u2} A] [_inst_3 : MulDistribMulAction.{u1, u2} M A _inst_1 (DivInvMonoid.toMonoid.{u2} A (Group.toDivInvMonoid.{u2} A _inst_2))] (r : M) (x : A), Eq.{succ u2} A (HSMul.hSMul.{u1, u2, u2} M A A (instHSMul.{u1, u2} M A (MulAction.toSMul.{u1, u2} M A _inst_1 (MulDistribMulAction.toMulAction.{u1, u2} M A _inst_1 (DivInvMonoid.toMonoid.{u2} A (Group.toDivInvMonoid.{u2} A _inst_2)) _inst_3))) r (Inv.inv.{u2} A (InvOneClass.toInv.{u2} A (DivInvOneMonoid.toInvOneClass.{u2} A (DivisionMonoid.toDivInvOneMonoid.{u2} A (Group.toDivisionMonoid.{u2} A _inst_2)))) x)) (Inv.inv.{u2} A (InvOneClass.toInv.{u2} A (DivInvOneMonoid.toInvOneClass.{u2} A (DivisionMonoid.toDivInvOneMonoid.{u2} A (Group.toDivisionMonoid.{u2} A _inst_2)))) (HSMul.hSMul.{u1, u2, u2} M A A (instHSMul.{u1, u2} M A (MulAction.toSMul.{u1, u2} M A _inst_1 (MulDistribMulAction.toMulAction.{u1, u2} M A _inst_1 (DivInvMonoid.toMonoid.{u2} A (Group.toDivInvMonoid.{u2} A _inst_2)) _inst_3))) r x))
-Case conversion may be inaccurate. Consider using '#align smul_inv' smul_inv'ₓ'. -/
@[simp]
theorem smul_inv' (r : M) (x : A) : r • x⁻¹ = (r • x)⁻¹ :=
(MulDistribMulAction.toMonoidHom A r).map_inv x
#align smul_inv' smul_inv'
-/- warning: smul_div' -> smul_div' is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} {A : Type.{u2}} [_inst_1 : Monoid.{u1} M] [_inst_2 : Group.{u2} A] [_inst_3 : MulDistribMulAction.{u1, u2} M A _inst_1 (DivInvMonoid.toMonoid.{u2} A (Group.toDivInvMonoid.{u2} A _inst_2))] (r : M) (x : A) (y : A), Eq.{succ u2} A (SMul.smul.{u1, u2} M A (MulAction.toHasSmul.{u1, u2} M A _inst_1 (MulDistribMulAction.toMulAction.{u1, u2} M A _inst_1 (DivInvMonoid.toMonoid.{u2} A (Group.toDivInvMonoid.{u2} A _inst_2)) _inst_3)) r (HDiv.hDiv.{u2, u2, u2} A A A (instHDiv.{u2} A (DivInvMonoid.toHasDiv.{u2} A (Group.toDivInvMonoid.{u2} A _inst_2))) x y)) (HDiv.hDiv.{u2, u2, u2} A A A (instHDiv.{u2} A (DivInvMonoid.toHasDiv.{u2} A (Group.toDivInvMonoid.{u2} A _inst_2))) (SMul.smul.{u1, u2} M A (MulAction.toHasSmul.{u1, u2} M A _inst_1 (MulDistribMulAction.toMulAction.{u1, u2} M A _inst_1 (DivInvMonoid.toMonoid.{u2} A (Group.toDivInvMonoid.{u2} A _inst_2)) _inst_3)) r x) (SMul.smul.{u1, u2} M A (MulAction.toHasSmul.{u1, u2} M A _inst_1 (MulDistribMulAction.toMulAction.{u1, u2} M A _inst_1 (DivInvMonoid.toMonoid.{u2} A (Group.toDivInvMonoid.{u2} A _inst_2)) _inst_3)) r y))
-but is expected to have type
- forall {M : Type.{u1}} {A : Type.{u2}} [_inst_1 : Monoid.{u1} M] [_inst_2 : Group.{u2} A] [_inst_3 : MulDistribMulAction.{u1, u2} M A _inst_1 (DivInvMonoid.toMonoid.{u2} A (Group.toDivInvMonoid.{u2} A _inst_2))] (r : M) (x : A) (y : A), Eq.{succ u2} A (HSMul.hSMul.{u1, u2, u2} M A A (instHSMul.{u1, u2} M A (MulAction.toSMul.{u1, u2} M A _inst_1 (MulDistribMulAction.toMulAction.{u1, u2} M A _inst_1 (DivInvMonoid.toMonoid.{u2} A (Group.toDivInvMonoid.{u2} A _inst_2)) _inst_3))) r (HDiv.hDiv.{u2, u2, u2} A A A (instHDiv.{u2} A (DivInvMonoid.toDiv.{u2} A (Group.toDivInvMonoid.{u2} A _inst_2))) x y)) (HDiv.hDiv.{u2, u2, u2} A A A (instHDiv.{u2} A (DivInvMonoid.toDiv.{u2} A (Group.toDivInvMonoid.{u2} A _inst_2))) (HSMul.hSMul.{u1, u2, u2} M A A (instHSMul.{u1, u2} M A (MulAction.toSMul.{u1, u2} M A _inst_1 (MulDistribMulAction.toMulAction.{u1, u2} M A _inst_1 (DivInvMonoid.toMonoid.{u2} A (Group.toDivInvMonoid.{u2} A _inst_2)) _inst_3))) r x) (HSMul.hSMul.{u1, u2, u2} M A A (instHSMul.{u1, u2} M A (MulAction.toSMul.{u1, u2} M A _inst_1 (MulDistribMulAction.toMulAction.{u1, u2} M A _inst_1 (DivInvMonoid.toMonoid.{u2} A (Group.toDivInvMonoid.{u2} A _inst_2)) _inst_3))) r y))
-Case conversion may be inaccurate. Consider using '#align smul_div' smul_div'ₓ'. -/
theorem smul_div' (r : M) (x y : A) : r • (x / y) = r • x / r • y :=
map_div (MulDistribMulAction.toMonoidHom A r) x y
#align smul_div' smul_div'
@@ -1408,12 +1141,6 @@ instance : Inhabited (Function.End α) :=
variable {α}
-/- warning: function.End.apply_mul_action -> Function.End.applyMulAction is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}}, MulAction.{u1, u1} (Function.End.{u1} α) α (Function.End.monoid.{u1} α)
-but is expected to have type
- forall {α : Type.{u1}}, MulAction.{u1, u1} (Function.End.{u1} α) α (instMonoidEnd.{u1} α)
-Case conversion may be inaccurate. Consider using '#align function.End.apply_mul_action Function.End.applyMulActionₓ'. -/
/-- The tautological action by `function.End α` on `α`.
This is generalized to bundled endomorphisms by:
@@ -1462,34 +1189,16 @@ instance AddMonoid.End.applyDistribMulAction [AddMonoid α] : DistribMulAction (
#align add_monoid.End.apply_distrib_mul_action AddMonoid.End.applyDistribMulAction
-/
-/- warning: add_monoid.End.smul_def -> AddMonoid.End.smul_def is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : AddMonoid.{u1} α] (f : AddMonoid.End.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) (a : α), Eq.{succ u1} α (SMul.smul.{u1, u1} (AddMonoid.End.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) α (SMulZeroClass.toHasSmul.{u1, u1} (AddMonoid.End.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) α (AddZeroClass.toHasZero.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) (DistribSMul.toSmulZeroClass.{u1, u1} (AddMonoid.End.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) α (AddMonoid.toAddZeroClass.{u1} α _inst_1) (DistribMulAction.toDistribSMul.{u1, u1} (AddMonoid.End.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) α (AddMonoid.End.monoid.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) _inst_1 (AddMonoid.End.applyDistribMulAction.{u1} α _inst_1)))) f a) (coeFn.{succ u1, succ u1} (AddMonoid.End.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) (fun (_x : AddMonoid.End.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) => α -> α) (FunLike.hasCoeToFun.{succ u1, succ u1, succ u1} (AddMonoid.End.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) α (fun (_x : α) => α) (AddHomClass.toFunLike.{u1, u1, u1} (AddMonoid.End.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) α α (AddZeroClass.toHasAdd.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) (AddZeroClass.toHasAdd.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) (AddMonoidHomClass.toAddHomClass.{u1, u1, u1} (AddMonoid.End.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) α α (AddMonoid.toAddZeroClass.{u1} α _inst_1) (AddMonoid.toAddZeroClass.{u1} α _inst_1) (AddMonoid.End.addMonoidHomClass.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1))))) f a)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : AddMonoid.{u1} α] (f : AddMonoid.End.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) (a : α), Eq.{succ u1} α (HSMul.hSMul.{u1, u1, u1} (AddMonoid.End.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) α α (instHSMul.{u1, u1} (AddMonoid.End.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) α (SMulZeroClass.toSMul.{u1, u1} (AddMonoid.End.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) α (AddMonoid.toZero.{u1} α _inst_1) (DistribSMul.toSMulZeroClass.{u1, u1} (AddMonoid.End.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) α (AddMonoid.toAddZeroClass.{u1} α _inst_1) (DistribMulAction.toDistribSMul.{u1, u1} (AddMonoid.End.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) α (AddMonoid.End.monoid.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) _inst_1 (AddMonoid.End.applyDistribMulAction.{u1} α _inst_1))))) f a) (FunLike.coe.{succ u1, succ u1, succ u1} (AddMonoid.End.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : α) => α) _x) (AddHomClass.toFunLike.{u1, u1, u1} (AddMonoid.End.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) α α (AddZeroClass.toAdd.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) (AddZeroClass.toAdd.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) (AddMonoidHomClass.toAddHomClass.{u1, u1, u1} (AddMonoid.End.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) α α (AddMonoid.toAddZeroClass.{u1} α _inst_1) (AddMonoid.toAddZeroClass.{u1} α _inst_1) (AddMonoid.End.instAddMonoidHomClassEnd.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)))) f a)
-Case conversion may be inaccurate. Consider using '#align add_monoid.End.smul_def AddMonoid.End.smul_defₓ'. -/
@[simp]
theorem AddMonoid.End.smul_def [AddMonoid α] (f : AddMonoid.End α) (a : α) : f • a = f a :=
rfl
#align add_monoid.End.smul_def AddMonoid.End.smul_def
-/- warning: add_monoid.End.apply_has_faithful_smul -> AddMonoid.End.applyFaithfulSMul is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : AddMonoid.{u1} α], FaithfulSMul.{u1, u1} (AddMonoid.End.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) α (SMulZeroClass.toHasSmul.{u1, u1} (AddMonoid.End.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) α (AddZeroClass.toHasZero.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) (DistribSMul.toSmulZeroClass.{u1, u1} (AddMonoid.End.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) α (AddMonoid.toAddZeroClass.{u1} α _inst_1) (DistribMulAction.toDistribSMul.{u1, u1} (AddMonoid.End.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) α (AddMonoid.End.monoid.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) _inst_1 (AddMonoid.End.applyDistribMulAction.{u1} α _inst_1))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : AddMonoid.{u1} α], FaithfulSMul.{u1, u1} (AddMonoid.End.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) α (SMulZeroClass.toSMul.{u1, u1} (AddMonoid.End.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) α (AddMonoid.toZero.{u1} α _inst_1) (DistribSMul.toSMulZeroClass.{u1, u1} (AddMonoid.End.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) α (AddMonoid.toAddZeroClass.{u1} α _inst_1) (DistribMulAction.toDistribSMul.{u1, u1} (AddMonoid.End.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) α (AddMonoid.End.monoid.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) _inst_1 (AddMonoid.End.applyDistribMulAction.{u1} α _inst_1))))
-Case conversion may be inaccurate. Consider using '#align add_monoid.End.apply_has_faithful_smul AddMonoid.End.applyFaithfulSMulₓ'. -/
/-- `add_monoid.End.apply_distrib_mul_action` is faithful. -/
instance AddMonoid.End.applyFaithfulSMul [AddMonoid α] : FaithfulSMul (AddMonoid.End α) α :=
⟨AddMonoidHom.ext⟩
#align add_monoid.End.apply_has_faithful_smul AddMonoid.End.applyFaithfulSMul
-/- warning: mul_action.to_End_hom -> MulAction.toEndHom is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} {α : Type.{u2}} [_inst_1 : Monoid.{u1} M] [_inst_2 : MulAction.{u1, u2} M α _inst_1], MonoidHom.{u1, u2} M (Function.End.{u2} α) (Monoid.toMulOneClass.{u1} M _inst_1) (Monoid.toMulOneClass.{u2} (Function.End.{u2} α) (Function.End.monoid.{u2} α))
-but is expected to have type
- forall {M : Type.{u1}} {α : Type.{u2}} [_inst_1 : Monoid.{u1} M] [_inst_2 : MulAction.{u1, u2} M α _inst_1], MonoidHom.{u1, u2} M (Function.End.{u2} α) (Monoid.toMulOneClass.{u1} M _inst_1) (Monoid.toMulOneClass.{u2} (Function.End.{u2} α) (instMonoidEnd.{u2} α))
-Case conversion may be inaccurate. Consider using '#align mul_action.to_End_hom MulAction.toEndHomₓ'. -/
/-- The monoid hom representing a monoid action.
When `M` is a group, see `mul_action.to_perm_hom`. -/
@@ -1500,12 +1209,6 @@ def MulAction.toEndHom [Monoid M] [MulAction M α] : M →* Function.End α
map_mul' x y := funext (mul_smul x y)
#align mul_action.to_End_hom MulAction.toEndHom
-/- warning: mul_action.of_End_hom -> MulAction.ofEndHom is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} {α : Type.{u2}} [_inst_1 : Monoid.{u1} M], (MonoidHom.{u1, u2} M (Function.End.{u2} α) (Monoid.toMulOneClass.{u1} M _inst_1) (Monoid.toMulOneClass.{u2} (Function.End.{u2} α) (Function.End.monoid.{u2} α))) -> (MulAction.{u1, u2} M α _inst_1)
-but is expected to have type
- forall {M : Type.{u1}} {α : Type.{u2}} [_inst_1 : Monoid.{u1} M], (MonoidHom.{u1, u2} M (Function.End.{u2} α) (Monoid.toMulOneClass.{u1} M _inst_1) (Monoid.toMulOneClass.{u2} (Function.End.{u2} α) (instMonoidEnd.{u2} α))) -> (MulAction.{u1, u2} M α _inst_1)
-Case conversion may be inaccurate. Consider using '#align mul_action.of_End_hom MulAction.ofEndHomₓ'. -/
/-- The monoid action induced by a monoid hom to `function.End α`
See note [reducible non-instances]. -/
@@ -1514,12 +1217,6 @@ def MulAction.ofEndHom [Monoid M] (f : M →* Function.End α) : MulAction M α
MulAction.compHom α f
#align mul_action.of_End_hom MulAction.ofEndHom
-/- warning: add_action.function_End -> AddAction.functionEnd is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}}, AddAction.{u1, u1} (Additive.{u1} (Function.End.{u1} α)) α (Additive.addMonoid.{u1} (Function.End.{u1} α) (Function.End.monoid.{u1} α))
-but is expected to have type
- forall {α : Type.{u1}}, AddAction.{u1, u1} (Additive.{u1} (Function.End.{u1} α)) α (Additive.addMonoid.{u1} (Function.End.{u1} α) (instMonoidEnd.{u1} α))
-Case conversion may be inaccurate. Consider using '#align add_action.function_End AddAction.functionEndₓ'. -/
/-- The tautological additive action by `additive (function.End α)` on `α`. -/
instance AddAction.functionEnd : AddAction (Additive (Function.End α)) α
where
@@ -1528,12 +1225,6 @@ instance AddAction.functionEnd : AddAction (Additive (Function.End α)) α
add_vadd _ _ _ := rfl
#align add_action.function_End AddAction.functionEnd
-/- warning: add_action.to_End_hom -> AddAction.toEndHom is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} {α : Type.{u2}} [_inst_1 : AddMonoid.{u1} M] [_inst_2 : AddAction.{u1, u2} M α _inst_1], AddMonoidHom.{u1, u2} M (Additive.{u2} (Function.End.{u2} α)) (AddMonoid.toAddZeroClass.{u1} M _inst_1) (Additive.addZeroClass.{u2} (Function.End.{u2} α) (Monoid.toMulOneClass.{u2} (Function.End.{u2} α) (Function.End.monoid.{u2} α)))
-but is expected to have type
- forall {M : Type.{u1}} {α : Type.{u2}} [_inst_1 : AddMonoid.{u1} M] [_inst_2 : AddAction.{u1, u2} M α _inst_1], AddMonoidHom.{u1, u2} M (Additive.{u2} (Function.End.{u2} α)) (AddMonoid.toAddZeroClass.{u1} M _inst_1) (Additive.addZeroClass.{u2} (Function.End.{u2} α) (Monoid.toMulOneClass.{u2} (Function.End.{u2} α) (instMonoidEnd.{u2} α)))
-Case conversion may be inaccurate. Consider using '#align add_action.to_End_hom AddAction.toEndHomₓ'. -/
/-- The additive monoid hom representing an additive monoid action.
When `M` is a group, see `add_action.to_perm_hom`. -/
@@ -1544,12 +1235,6 @@ def AddAction.toEndHom [AddMonoid M] [AddAction M α] : M →+ Additive (Functio
map_add' x y := funext (add_vadd x y)
#align add_action.to_End_hom AddAction.toEndHom
-/- warning: add_action.of_End_hom -> AddAction.ofEndHom is a dubious translation:
-lean 3 declaration is
- forall {M : Type.{u1}} {α : Type.{u2}} [_inst_1 : AddMonoid.{u1} M], (AddMonoidHom.{u1, u2} M (Additive.{u2} (Function.End.{u2} α)) (AddMonoid.toAddZeroClass.{u1} M _inst_1) (Additive.addZeroClass.{u2} (Function.End.{u2} α) (Monoid.toMulOneClass.{u2} (Function.End.{u2} α) (Function.End.monoid.{u2} α)))) -> (AddAction.{u1, u2} M α _inst_1)
-but is expected to have type
- forall {M : Type.{u1}} {α : Type.{u2}} [_inst_1 : AddMonoid.{u1} M], (AddMonoidHom.{u1, u2} M (Additive.{u2} (Function.End.{u2} α)) (AddMonoid.toAddZeroClass.{u1} M _inst_1) (Additive.addZeroClass.{u2} (Function.End.{u2} α) (Monoid.toMulOneClass.{u2} (Function.End.{u2} α) (instMonoidEnd.{u2} α)))) -> (AddAction.{u1, u2} M α _inst_1)
-Case conversion may be inaccurate. Consider using '#align add_action.of_End_hom AddAction.ofEndHomₓ'. -/
/-- The additive action induced by a hom to `additive (function.End α)`
See note [reducible non-instances]. -/
@@ -1577,45 +1262,21 @@ instance Multiplicative.smul [VAdd α β] : SMul (Multiplicative α) β :=
#align multiplicative.has_smul Multiplicative.smul
-/
-/- warning: to_mul_smul -> toMul_smul is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SMul.{u1, u2} α β] (a : Additive.{u1} α) (b : β), Eq.{succ u2} β (SMul.smul.{u1, u2} α β _inst_1 (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (Additive.{u1} α) α) (fun (_x : Equiv.{succ u1, succ u1} (Additive.{u1} α) α) => (Additive.{u1} α) -> α) (Equiv.hasCoeToFun.{succ u1, succ u1} (Additive.{u1} α) α) (Additive.toMul.{u1} α) a) b) (VAdd.vadd.{u1, u2} (Additive.{u1} α) β (Additive.vadd.{u1, u2} α β _inst_1) a b)
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SMul.{u2, u1} α β] (a : Additive.{u2} α) (b : β), Eq.{succ u1} β (HSMul.hSMul.{u2, u1, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : Additive.{u2} α) => α) a) β β (instHSMul.{u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : Additive.{u2} α) => α) a) β _inst_1) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (Additive.{u2} α) α) (Additive.{u2} α) (fun (_x : Additive.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : Additive.{u2} α) => α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (Additive.{u2} α) α) (Additive.toMul.{u2} α) a) b) (HVAdd.hVAdd.{u2, u1, u1} (Additive.{u2} α) β β (instHVAdd.{u2, u1} (Additive.{u2} α) β (Additive.vadd.{u2, u1} α β _inst_1)) a b)
-Case conversion may be inaccurate. Consider using '#align to_mul_smul toMul_smulₓ'. -/
@[simp]
theorem toMul_smul [SMul α β] (a) (b : β) : (toMul a : α) • b = a +ᵥ b :=
rfl
#align to_mul_smul toMul_smul
-/- warning: of_mul_vadd -> ofMul_vadd is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SMul.{u1, u2} α β] (a : α) (b : β), Eq.{succ u2} β (VAdd.vadd.{u1, u2} (Additive.{u1} α) β (Additive.vadd.{u1, u2} α β _inst_1) (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} α (Additive.{u1} α)) (fun (_x : Equiv.{succ u1, succ u1} α (Additive.{u1} α)) => α -> (Additive.{u1} α)) (Equiv.hasCoeToFun.{succ u1, succ u1} α (Additive.{u1} α)) (Additive.ofMul.{u1} α) a) b) (SMul.smul.{u1, u2} α β _inst_1 a b)
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SMul.{u2, u1} α β] (a : α) (b : β), Eq.{succ u1} β (HVAdd.hVAdd.{u2, u1, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α) => Additive.{u2} α) a) β β (instHVAdd.{u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α) => Additive.{u2} α) a) β (Additive.vadd.{u2, u1} α β _inst_1)) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} α (Additive.{u2} α)) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α) => Additive.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} α (Additive.{u2} α)) (Additive.ofMul.{u2} α) a) b) (HSMul.hSMul.{u2, u1, u1} α β β (instHSMul.{u2, u1} α β _inst_1) a b)
-Case conversion may be inaccurate. Consider using '#align of_mul_vadd ofMul_vaddₓ'. -/
@[simp]
theorem ofMul_vadd [SMul α β] (a : α) (b : β) : ofMul a +ᵥ b = a • b :=
rfl
#align of_mul_vadd ofMul_vadd
-/- warning: to_add_vadd -> toAdd_vadd is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : VAdd.{u1, u2} α β] (a : Multiplicative.{u1} α) (b : β), Eq.{succ u2} β (VAdd.vadd.{u1, u2} α β _inst_1 (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (Multiplicative.{u1} α) α) (fun (_x : Equiv.{succ u1, succ u1} (Multiplicative.{u1} α) α) => (Multiplicative.{u1} α) -> α) (Equiv.hasCoeToFun.{succ u1, succ u1} (Multiplicative.{u1} α) α) (Multiplicative.toAdd.{u1} α) a) b) (SMul.smul.{u1, u2} (Multiplicative.{u1} α) β (Multiplicative.smul.{u1, u2} α β _inst_1) a b)
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : VAdd.{u2, u1} α β] (a : Multiplicative.{u2} α) (b : β), Eq.{succ u1} β (HVAdd.hVAdd.{u2, u1, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : Multiplicative.{u2} α) => α) a) β β (instHVAdd.{u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : Multiplicative.{u2} α) => α) a) β _inst_1) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (Multiplicative.{u2} α) α) (Multiplicative.{u2} α) (fun (_x : Multiplicative.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : Multiplicative.{u2} α) => α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (Multiplicative.{u2} α) α) (Multiplicative.toAdd.{u2} α) a) b) (HSMul.hSMul.{u2, u1, u1} (Multiplicative.{u2} α) β β (instHSMul.{u2, u1} (Multiplicative.{u2} α) β (Multiplicative.smul.{u2, u1} α β _inst_1)) a b)
-Case conversion may be inaccurate. Consider using '#align to_add_vadd toAdd_vaddₓ'. -/
@[simp]
theorem toAdd_vadd [VAdd α β] (a) (b : β) : (toAdd a : α) +ᵥ b = a • b :=
rfl
#align to_add_vadd toAdd_vadd
-/- warning: of_add_smul -> ofAdd_smul is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : VAdd.{u1, u2} α β] (a : α) (b : β), Eq.{succ u2} β (SMul.smul.{u1, u2} (Multiplicative.{u1} α) β (Multiplicative.smul.{u1, u2} α β _inst_1) (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} α (Multiplicative.{u1} α)) (fun (_x : Equiv.{succ u1, succ u1} α (Multiplicative.{u1} α)) => α -> (Multiplicative.{u1} α)) (Equiv.hasCoeToFun.{succ u1, succ u1} α (Multiplicative.{u1} α)) (Multiplicative.ofAdd.{u1} α) a) b) (VAdd.vadd.{u1, u2} α β _inst_1 a b)
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : VAdd.{u2, u1} α β] (a : α) (b : β), Eq.{succ u1} β (HSMul.hSMul.{u2, u1, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α) => Multiplicative.{u2} α) a) β β (instHSMul.{u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α) => Multiplicative.{u2} α) a) β (Multiplicative.smul.{u2, u1} α β _inst_1)) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} α (Multiplicative.{u2} α)) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α) => Multiplicative.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} α (Multiplicative.{u2} α)) (Multiplicative.ofAdd.{u2} α) a) b) (HVAdd.hVAdd.{u2, u1, u1} α β β (instHVAdd.{u2, u1} α β _inst_1) a b)
-Case conversion may be inaccurate. Consider using '#align of_add_smul ofAdd_smulₓ'. -/
@[simp]
theorem ofAdd_smul [VAdd α β] (a : α) (b : β) : ofAdd a • b = a +ᵥ b :=
rfl
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -524,9 +524,7 @@ Case conversion may be inaccurate. Consider using '#align smul_smul_smul_comm sm
@[to_additive]
theorem smul_smul_smul_comm [SMul α β] [SMul α γ] [SMul β δ] [SMul α δ] [SMul γ δ]
[IsScalarTower α β δ] [IsScalarTower α γ δ] [SMulCommClass β γ δ] (a : α) (b : β) (c : γ)
- (d : δ) : (a • b) • c • d = (a • c) • b • d :=
- by
- rw [smul_assoc, smul_assoc, smul_comm b]
+ (d : δ) : (a • b) • c • d = (a • c) • b • d := by rw [smul_assoc, smul_assoc, smul_comm b];
infer_instance
#align smul_smul_smul_comm smul_smul_smul_comm
#align vadd_vadd_vadd_comm vadd_vadd_vadd_comm
@@ -655,12 +653,8 @@ protected def Function.Surjective.mulAction [SMul M β] (f : α → β) (hf : Su
(smul : ∀ (c : M) (x), f (c • x) = c • f x) : MulAction M β
where
smul := (· • ·)
- one_smul y := by
- rcases hf y with ⟨x, rfl⟩
- rw [← smul, one_smul]
- mul_smul c₁ c₂ y := by
- rcases hf y with ⟨x, rfl⟩
- simp only [← smul, mul_smul]
+ one_smul y := by rcases hf y with ⟨x, rfl⟩; rw [← smul, one_smul]
+ mul_smul c₁ c₂ y := by rcases hf y with ⟨x, rfl⟩; simp only [← smul, mul_smul]
#align function.surjective.mul_action Function.Surjective.mulAction
#align function.surjective.add_action Function.Surjective.addAction
-/
@@ -1018,8 +1012,7 @@ protected def Function.Surjective.distribSMul [AddZeroClass B] [SMul M B] (f : A
{ f.toZeroHom.SMulZeroClass smul with
smul := (· • ·)
smul_add := fun c x y => by
- rcases hf x with ⟨x, rfl⟩
- rcases hf y with ⟨y, rfl⟩
+ rcases hf x with ⟨x, rfl⟩; rcases hf y with ⟨y, rfl⟩
simp only [smul_add, ← smul, ← map_add] }
#align function.surjective.distrib_smul Function.Surjective.distribSMul
@@ -1303,8 +1296,7 @@ protected def Function.Surjective.mulDistribMulAction [Monoid B] [SMul M B] (f :
{ hf.MulAction f smul with
smul := (· • ·)
smul_mul := fun c x y => by
- rcases hf x with ⟨x, rfl⟩
- rcases hf y with ⟨y, rfl⟩
+ rcases hf x with ⟨x, rfl⟩; rcases hf y with ⟨y, rfl⟩
simp only [smul_mul', ← smul, ← f.map_mul]
smul_one := fun c => by simp only [← f.map_one, ← smul, smul_one] }
#align function.surjective.mul_distrib_mul_action Function.Surjective.mulDistribMulAction
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -1127,10 +1127,7 @@ protected def Function.Surjective.distribMulAction [AddMonoid B] [SMul M B] (f :
#align function.surjective.distrib_mul_action Function.Surjective.distribMulAction
/- warning: function.surjective.distrib_mul_action_left -> Function.Surjective.distribMulActionLeft is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {S : Type.{u2}} {M : Type.{u3}} [_inst_4 : Monoid.{u1} R] [_inst_5 : AddMonoid.{u3} M] [_inst_6 : DistribMulAction.{u1, u3} R M _inst_4 _inst_5] [_inst_7 : Monoid.{u2} S] [_inst_8 : SMul.{u2, u3} S M] (f : MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)), (Function.Surjective.{succ u1, succ u2} R S (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)) (fun (_x : MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)) => R -> S) (MonoidHom.hasCoeToFun.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)) f)) -> (forall (c : R) (x : M), Eq.{succ u3} M (SMul.smul.{u2, u3} S M _inst_8 (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)) (fun (_x : MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)) => R -> S) (MonoidHom.hasCoeToFun.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)) f c) x) (SMul.smul.{u1, u3} R M (SMulZeroClass.toHasSmul.{u1, u3} R M (AddZeroClass.toHasZero.{u3} M (AddMonoid.toAddZeroClass.{u3} M _inst_5)) (DistribSMul.toSmulZeroClass.{u1, u3} R M (AddMonoid.toAddZeroClass.{u3} M _inst_5) (DistribMulAction.toDistribSMul.{u1, u3} R M _inst_4 _inst_5 _inst_6))) c x)) -> (DistribMulAction.{u2, u3} S M _inst_7 _inst_5)
-but is expected to have type
- forall {R : Type.{u1}} {S : Type.{u2}} {M : Type.{u3}} [_inst_4 : Monoid.{u1} R] [_inst_5 : AddMonoid.{u3} M] [_inst_6 : DistribMulAction.{u1, u3} R M _inst_4 _inst_5] [_inst_7 : Monoid.{u2} S] [_inst_8 : SMul.{u2, u3} S M] (f : MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)), (Function.Surjective.{succ u1, succ u2} R S (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)) R S (MulOneClass.toMul.{u1} R (Monoid.toMulOneClass.{u1} R _inst_4)) (MulOneClass.toMul.{u2} S (Monoid.toMulOneClass.{u2} S _inst_7)) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)) R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7) (MonoidHom.monoidHomClass.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)))) f)) -> (forall (c : R) (x : M), Eq.{succ u3} M (HSMul.hSMul.{u2, u3, u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) c) M M (instHSMul.{u2, u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) c) M _inst_8) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)) R S (MulOneClass.toMul.{u1} R (Monoid.toMulOneClass.{u1} R _inst_4)) (MulOneClass.toMul.{u2} S (Monoid.toMulOneClass.{u2} S _inst_7)) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)) R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7) (MonoidHom.monoidHomClass.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)))) f c) x) (HSMul.hSMul.{u1, u3, u3} R M M (instHSMul.{u1, u3} R M (SMulZeroClass.toSMul.{u1, u3} R M (AddMonoid.toZero.{u3} M _inst_5) (DistribSMul.toSMulZeroClass.{u1, u3} R M (AddMonoid.toAddZeroClass.{u3} M _inst_5) (DistribMulAction.toDistribSMul.{u1, u3} R M _inst_4 _inst_5 _inst_6)))) c x)) -> (DistribMulAction.{u2, u3} S M _inst_7 _inst_5)
+<too large>
Case conversion may be inaccurate. Consider using '#align function.surjective.distrib_mul_action_left Function.Surjective.distribMulActionLeftₓ'. -/
/-- Push forward the action of `R` on `M` along a compatible surjective map `f : R →* S`.
mathlib commit https://github.com/leanprover-community/mathlib/commit/75e7fca56381d056096ce5d05e938f63a6567828
@@ -609,7 +609,7 @@ theorem one_smul (b : α) : (1 : M) • b = b :=
lean 3 declaration is
forall (M : Type.{u1}) {α : Type.{u2}} [_inst_1 : Monoid.{u1} M] [_inst_2 : MulAction.{u1, u2} M α _inst_1], Eq.{succ u2} (α -> α) (SMul.smul.{u1, u2} M α (MulAction.toHasSmul.{u1, u2} M α _inst_1 _inst_2) (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1)))))) (id.{succ u2} α)
but is expected to have type
- forall (M : Type.{u1}) {α : Type.{u2}} [_inst_1 : Monoid.{u1} M] [_inst_2 : MulAction.{u1, u2} M α _inst_1], Eq.{succ u2} (α -> α) ((fun (x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2723 : M) (x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2725 : α) => HSMul.hSMul.{u1, u2, u2} M α α (instHSMul.{u1, u2} M α (MulAction.toSMul.{u1, u2} M α _inst_1 _inst_2)) x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2723 x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2725) (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M _inst_1)))) (id.{succ u2} α)
+ forall (M : Type.{u1}) {α : Type.{u2}} [_inst_1 : Monoid.{u1} M] [_inst_2 : MulAction.{u1, u2} M α _inst_1], Eq.{succ u2} (α -> α) ((fun (x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2721 : M) (x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2723 : α) => HSMul.hSMul.{u1, u2, u2} M α α (instHSMul.{u1, u2} M α (MulAction.toSMul.{u1, u2} M α _inst_1 _inst_2)) x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2721 x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2723) (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M _inst_1)))) (id.{succ u2} α)
Case conversion may be inaccurate. Consider using '#align one_smul_eq_id one_smul_eq_idₓ'. -/
/-- `has_smul` version of `one_mul_eq_id` -/
@[to_additive "`has_vadd` version of `zero_add_eq_id`"]
@@ -622,7 +622,7 @@ theorem one_smul_eq_id : ((· • ·) (1 : M) : α → α) = id :=
lean 3 declaration is
forall (M : Type.{u1}) {α : Type.{u2}} [_inst_1 : Monoid.{u1} M] [_inst_2 : MulAction.{u1, u2} M α _inst_1] (a₁ : M) (a₂ : M), Eq.{succ u2} (α -> α) (Function.comp.{succ u2, succ u2, succ u2} α α α (SMul.smul.{u1, u2} M α (MulAction.toHasSmul.{u1, u2} M α _inst_1 _inst_2) a₁) (SMul.smul.{u1, u2} M α (MulAction.toHasSmul.{u1, u2} M α _inst_1 _inst_2) a₂)) (SMul.smul.{u1, u2} M α (MulAction.toHasSmul.{u1, u2} M α _inst_1 _inst_2) (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1))) a₁ a₂))
but is expected to have type
- forall (M : Type.{u1}) {α : Type.{u2}} [_inst_1 : Monoid.{u1} M] [_inst_2 : MulAction.{u1, u2} M α _inst_1] (a₁ : M) (a₂ : M), Eq.{succ u2} (α -> α) (Function.comp.{succ u2, succ u2, succ u2} α α α ((fun (x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2775 : M) (x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2777 : α) => HSMul.hSMul.{u1, u2, u2} M α α (instHSMul.{u1, u2} M α (MulAction.toSMul.{u1, u2} M α _inst_1 _inst_2)) x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2775 x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2777) a₁) ((fun (x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2792 : M) (x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2794 : α) => HSMul.hSMul.{u1, u2, u2} M α α (instHSMul.{u1, u2} M α (MulAction.toSMul.{u1, u2} M α _inst_1 _inst_2)) x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2792 x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2794) a₂)) ((fun (x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2815 : M) (x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2817 : α) => HSMul.hSMul.{u1, u2, u2} M α α (instHSMul.{u1, u2} M α (MulAction.toSMul.{u1, u2} M α _inst_1 _inst_2)) x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2815 x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2817) (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1))) a₁ a₂))
+ forall (M : Type.{u1}) {α : Type.{u2}} [_inst_1 : Monoid.{u1} M] [_inst_2 : MulAction.{u1, u2} M α _inst_1] (a₁ : M) (a₂ : M), Eq.{succ u2} (α -> α) (Function.comp.{succ u2, succ u2, succ u2} α α α ((fun (x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2773 : M) (x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2775 : α) => HSMul.hSMul.{u1, u2, u2} M α α (instHSMul.{u1, u2} M α (MulAction.toSMul.{u1, u2} M α _inst_1 _inst_2)) x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2773 x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2775) a₁) ((fun (x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2790 : M) (x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2792 : α) => HSMul.hSMul.{u1, u2, u2} M α α (instHSMul.{u1, u2} M α (MulAction.toSMul.{u1, u2} M α _inst_1 _inst_2)) x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2790 x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2792) a₂)) ((fun (x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2813 : M) (x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2815 : α) => HSMul.hSMul.{u1, u2, u2} M α α (instHSMul.{u1, u2} M α (MulAction.toSMul.{u1, u2} M α _inst_1 _inst_2)) x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2813 x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2815) (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1))) a₁ a₂))
Case conversion may be inaccurate. Consider using '#align comp_smul_left comp_smul_leftₓ'. -/
/-- `has_smul` version of `comp_mul_left` -/
@[to_additive "`has_vadd` version of `comp_add_left`"]
mathlib commit https://github.com/leanprover-community/mathlib/commit/95a87616d63b3cb49d3fe678d416fbe9c4217bf4
@@ -609,7 +609,7 @@ theorem one_smul (b : α) : (1 : M) • b = b :=
lean 3 declaration is
forall (M : Type.{u1}) {α : Type.{u2}} [_inst_1 : Monoid.{u1} M] [_inst_2 : MulAction.{u1, u2} M α _inst_1], Eq.{succ u2} (α -> α) (SMul.smul.{u1, u2} M α (MulAction.toHasSmul.{u1, u2} M α _inst_1 _inst_2) (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1)))))) (id.{succ u2} α)
but is expected to have type
- forall (M : Type.{u1}) {α : Type.{u2}} [_inst_1 : Monoid.{u1} M] [_inst_2 : MulAction.{u1, u2} M α _inst_1], Eq.{succ u2} (α -> α) ((fun (x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2716 : M) (x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2718 : α) => HSMul.hSMul.{u1, u2, u2} M α α (instHSMul.{u1, u2} M α (MulAction.toSMul.{u1, u2} M α _inst_1 _inst_2)) x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2716 x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2718) (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M _inst_1)))) (id.{succ u2} α)
+ forall (M : Type.{u1}) {α : Type.{u2}} [_inst_1 : Monoid.{u1} M] [_inst_2 : MulAction.{u1, u2} M α _inst_1], Eq.{succ u2} (α -> α) ((fun (x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2723 : M) (x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2725 : α) => HSMul.hSMul.{u1, u2, u2} M α α (instHSMul.{u1, u2} M α (MulAction.toSMul.{u1, u2} M α _inst_1 _inst_2)) x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2723 x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2725) (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M _inst_1)))) (id.{succ u2} α)
Case conversion may be inaccurate. Consider using '#align one_smul_eq_id one_smul_eq_idₓ'. -/
/-- `has_smul` version of `one_mul_eq_id` -/
@[to_additive "`has_vadd` version of `zero_add_eq_id`"]
@@ -622,7 +622,7 @@ theorem one_smul_eq_id : ((· • ·) (1 : M) : α → α) = id :=
lean 3 declaration is
forall (M : Type.{u1}) {α : Type.{u2}} [_inst_1 : Monoid.{u1} M] [_inst_2 : MulAction.{u1, u2} M α _inst_1] (a₁ : M) (a₂ : M), Eq.{succ u2} (α -> α) (Function.comp.{succ u2, succ u2, succ u2} α α α (SMul.smul.{u1, u2} M α (MulAction.toHasSmul.{u1, u2} M α _inst_1 _inst_2) a₁) (SMul.smul.{u1, u2} M α (MulAction.toHasSmul.{u1, u2} M α _inst_1 _inst_2) a₂)) (SMul.smul.{u1, u2} M α (MulAction.toHasSmul.{u1, u2} M α _inst_1 _inst_2) (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1))) a₁ a₂))
but is expected to have type
- forall (M : Type.{u1}) {α : Type.{u2}} [_inst_1 : Monoid.{u1} M] [_inst_2 : MulAction.{u1, u2} M α _inst_1] (a₁ : M) (a₂ : M), Eq.{succ u2} (α -> α) (Function.comp.{succ u2, succ u2, succ u2} α α α ((fun (x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2768 : M) (x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2770 : α) => HSMul.hSMul.{u1, u2, u2} M α α (instHSMul.{u1, u2} M α (MulAction.toSMul.{u1, u2} M α _inst_1 _inst_2)) x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2768 x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2770) a₁) ((fun (x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2785 : M) (x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2787 : α) => HSMul.hSMul.{u1, u2, u2} M α α (instHSMul.{u1, u2} M α (MulAction.toSMul.{u1, u2} M α _inst_1 _inst_2)) x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2785 x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2787) a₂)) ((fun (x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2808 : M) (x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2810 : α) => HSMul.hSMul.{u1, u2, u2} M α α (instHSMul.{u1, u2} M α (MulAction.toSMul.{u1, u2} M α _inst_1 _inst_2)) x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2808 x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2810) (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1))) a₁ a₂))
+ forall (M : Type.{u1}) {α : Type.{u2}} [_inst_1 : Monoid.{u1} M] [_inst_2 : MulAction.{u1, u2} M α _inst_1] (a₁ : M) (a₂ : M), Eq.{succ u2} (α -> α) (Function.comp.{succ u2, succ u2, succ u2} α α α ((fun (x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2775 : M) (x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2777 : α) => HSMul.hSMul.{u1, u2, u2} M α α (instHSMul.{u1, u2} M α (MulAction.toSMul.{u1, u2} M α _inst_1 _inst_2)) x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2775 x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2777) a₁) ((fun (x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2792 : M) (x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2794 : α) => HSMul.hSMul.{u1, u2, u2} M α α (instHSMul.{u1, u2} M α (MulAction.toSMul.{u1, u2} M α _inst_1 _inst_2)) x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2792 x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2794) a₂)) ((fun (x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2815 : M) (x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2817 : α) => HSMul.hSMul.{u1, u2, u2} M α α (instHSMul.{u1, u2} M α (MulAction.toSMul.{u1, u2} M α _inst_1 _inst_2)) x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2815 x._@.Mathlib.GroupTheory.GroupAction.Defs._hyg.2817) (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1))) a₁ a₂))
Case conversion may be inaccurate. Consider using '#align comp_smul_left comp_smul_leftₓ'. -/
/-- `has_smul` version of `comp_mul_left` -/
@[to_additive "`has_vadd` version of `comp_add_left`"]
@@ -669,7 +669,7 @@ protected def Function.Surjective.mulAction [SMul M β] (f : α → β) (hf : Su
lean 3 declaration is
forall {R : Type.{u1}} {S : Type.{u2}} {M : Type.{u3}} [_inst_3 : Monoid.{u1} R] [_inst_4 : MulAction.{u1, u3} R M _inst_3] [_inst_5 : Monoid.{u2} S] [_inst_6 : SMul.{u2, u3} S M] (f : MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)), (Function.Surjective.{succ u1, succ u2} R S (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)) (fun (_x : MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)) => R -> S) (MonoidHom.hasCoeToFun.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)) f)) -> (forall (c : R) (x : M), Eq.{succ u3} M (SMul.smul.{u2, u3} S M _inst_6 (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)) (fun (_x : MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)) => R -> S) (MonoidHom.hasCoeToFun.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)) f c) x) (SMul.smul.{u1, u3} R M (MulAction.toHasSmul.{u1, u3} R M _inst_3 _inst_4) c x)) -> (MulAction.{u2, u3} S M _inst_5)
but is expected to have type
- forall {R : Type.{u1}} {S : Type.{u2}} {M : Type.{u3}} [_inst_3 : Monoid.{u1} R] [_inst_4 : MulAction.{u1, u3} R M _inst_3] [_inst_5 : Monoid.{u2} S] [_inst_6 : SMul.{u2, u3} S M] (f : MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)), (Function.Surjective.{succ u1, succ u2} R S (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)) R S (MulOneClass.toMul.{u1} R (Monoid.toMulOneClass.{u1} R _inst_3)) (MulOneClass.toMul.{u2} S (Monoid.toMulOneClass.{u2} S _inst_5)) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)) R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5) (MonoidHom.monoidHomClass.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)))) f)) -> (forall (c : R) (x : M), Eq.{succ u3} M (HSMul.hSMul.{u2, u3, u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => S) c) M M (instHSMul.{u2, u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => S) c) M _inst_6) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)) R S (MulOneClass.toMul.{u1} R (Monoid.toMulOneClass.{u1} R _inst_3)) (MulOneClass.toMul.{u2} S (Monoid.toMulOneClass.{u2} S _inst_5)) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)) R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5) (MonoidHom.monoidHomClass.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)))) f c) x) (HSMul.hSMul.{u1, u3, u3} R M M (instHSMul.{u1, u3} R M (MulAction.toSMul.{u1, u3} R M _inst_3 _inst_4)) c x)) -> (MulAction.{u2, u3} S M _inst_5)
+ forall {R : Type.{u1}} {S : Type.{u2}} {M : Type.{u3}} [_inst_3 : Monoid.{u1} R] [_inst_4 : MulAction.{u1, u3} R M _inst_3] [_inst_5 : Monoid.{u2} S] [_inst_6 : SMul.{u2, u3} S M] (f : MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)), (Function.Surjective.{succ u1, succ u2} R S (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)) R S (MulOneClass.toMul.{u1} R (Monoid.toMulOneClass.{u1} R _inst_3)) (MulOneClass.toMul.{u2} S (Monoid.toMulOneClass.{u2} S _inst_5)) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)) R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5) (MonoidHom.monoidHomClass.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)))) f)) -> (forall (c : R) (x : M), Eq.{succ u3} M (HSMul.hSMul.{u2, u3, u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) c) M M (instHSMul.{u2, u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) c) M _inst_6) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)) R S (MulOneClass.toMul.{u1} R (Monoid.toMulOneClass.{u1} R _inst_3)) (MulOneClass.toMul.{u2} S (Monoid.toMulOneClass.{u2} S _inst_5)) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)) R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5) (MonoidHom.monoidHomClass.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)))) f c) x) (HSMul.hSMul.{u1, u3, u3} R M M (instHSMul.{u1, u3} R M (MulAction.toSMul.{u1, u3} R M _inst_3 _inst_4)) c x)) -> (MulAction.{u2, u3} S M _inst_5)
Case conversion may be inaccurate. Consider using '#align function.surjective.mul_action_left Function.Surjective.mulActionLeftₓ'. -/
/-- Push forward the action of `R` on `M` along a compatible surjective map `f : R →* S`.
@@ -1130,7 +1130,7 @@ protected def Function.Surjective.distribMulAction [AddMonoid B] [SMul M B] (f :
lean 3 declaration is
forall {R : Type.{u1}} {S : Type.{u2}} {M : Type.{u3}} [_inst_4 : Monoid.{u1} R] [_inst_5 : AddMonoid.{u3} M] [_inst_6 : DistribMulAction.{u1, u3} R M _inst_4 _inst_5] [_inst_7 : Monoid.{u2} S] [_inst_8 : SMul.{u2, u3} S M] (f : MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)), (Function.Surjective.{succ u1, succ u2} R S (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)) (fun (_x : MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)) => R -> S) (MonoidHom.hasCoeToFun.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)) f)) -> (forall (c : R) (x : M), Eq.{succ u3} M (SMul.smul.{u2, u3} S M _inst_8 (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)) (fun (_x : MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)) => R -> S) (MonoidHom.hasCoeToFun.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)) f c) x) (SMul.smul.{u1, u3} R M (SMulZeroClass.toHasSmul.{u1, u3} R M (AddZeroClass.toHasZero.{u3} M (AddMonoid.toAddZeroClass.{u3} M _inst_5)) (DistribSMul.toSmulZeroClass.{u1, u3} R M (AddMonoid.toAddZeroClass.{u3} M _inst_5) (DistribMulAction.toDistribSMul.{u1, u3} R M _inst_4 _inst_5 _inst_6))) c x)) -> (DistribMulAction.{u2, u3} S M _inst_7 _inst_5)
but is expected to have type
- forall {R : Type.{u1}} {S : Type.{u2}} {M : Type.{u3}} [_inst_4 : Monoid.{u1} R] [_inst_5 : AddMonoid.{u3} M] [_inst_6 : DistribMulAction.{u1, u3} R M _inst_4 _inst_5] [_inst_7 : Monoid.{u2} S] [_inst_8 : SMul.{u2, u3} S M] (f : MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)), (Function.Surjective.{succ u1, succ u2} R S (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)) R S (MulOneClass.toMul.{u1} R (Monoid.toMulOneClass.{u1} R _inst_4)) (MulOneClass.toMul.{u2} S (Monoid.toMulOneClass.{u2} S _inst_7)) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)) R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7) (MonoidHom.monoidHomClass.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)))) f)) -> (forall (c : R) (x : M), Eq.{succ u3} M (HSMul.hSMul.{u2, u3, u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => S) c) M M (instHSMul.{u2, u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => S) c) M _inst_8) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)) R S (MulOneClass.toMul.{u1} R (Monoid.toMulOneClass.{u1} R _inst_4)) (MulOneClass.toMul.{u2} S (Monoid.toMulOneClass.{u2} S _inst_7)) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)) R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7) (MonoidHom.monoidHomClass.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)))) f c) x) (HSMul.hSMul.{u1, u3, u3} R M M (instHSMul.{u1, u3} R M (SMulZeroClass.toSMul.{u1, u3} R M (AddMonoid.toZero.{u3} M _inst_5) (DistribSMul.toSMulZeroClass.{u1, u3} R M (AddMonoid.toAddZeroClass.{u3} M _inst_5) (DistribMulAction.toDistribSMul.{u1, u3} R M _inst_4 _inst_5 _inst_6)))) c x)) -> (DistribMulAction.{u2, u3} S M _inst_7 _inst_5)
+ forall {R : Type.{u1}} {S : Type.{u2}} {M : Type.{u3}} [_inst_4 : Monoid.{u1} R] [_inst_5 : AddMonoid.{u3} M] [_inst_6 : DistribMulAction.{u1, u3} R M _inst_4 _inst_5] [_inst_7 : Monoid.{u2} S] [_inst_8 : SMul.{u2, u3} S M] (f : MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)), (Function.Surjective.{succ u1, succ u2} R S (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)) R S (MulOneClass.toMul.{u1} R (Monoid.toMulOneClass.{u1} R _inst_4)) (MulOneClass.toMul.{u2} S (Monoid.toMulOneClass.{u2} S _inst_7)) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)) R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7) (MonoidHom.monoidHomClass.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)))) f)) -> (forall (c : R) (x : M), Eq.{succ u3} M (HSMul.hSMul.{u2, u3, u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) c) M M (instHSMul.{u2, u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) c) M _inst_8) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)) R S (MulOneClass.toMul.{u1} R (Monoid.toMulOneClass.{u1} R _inst_4)) (MulOneClass.toMul.{u2} S (Monoid.toMulOneClass.{u2} S _inst_7)) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)) R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7) (MonoidHom.monoidHomClass.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)))) f c) x) (HSMul.hSMul.{u1, u3, u3} R M M (instHSMul.{u1, u3} R M (SMulZeroClass.toSMul.{u1, u3} R M (AddMonoid.toZero.{u3} M _inst_5) (DistribSMul.toSMulZeroClass.{u1, u3} R M (AddMonoid.toAddZeroClass.{u3} M _inst_5) (DistribMulAction.toDistribSMul.{u1, u3} R M _inst_4 _inst_5 _inst_6)))) c x)) -> (DistribMulAction.{u2, u3} S M _inst_7 _inst_5)
Case conversion may be inaccurate. Consider using '#align function.surjective.distrib_mul_action_left Function.Surjective.distribMulActionLeftₓ'. -/
/-- Push forward the action of `R` on `M` along a compatible surjective map `f : R →* S`.
@@ -1277,7 +1277,7 @@ theorem smul_mul' (a : M) (b₁ b₂ : A) : a • (b₁ * b₂) = a • b₁ * a
lean 3 declaration is
forall {M : Type.{u1}} {A : Type.{u2}} {B : Type.{u3}} [_inst_1 : Monoid.{u1} M] [_inst_2 : Monoid.{u2} A] [_inst_3 : MulDistribMulAction.{u1, u2} M A _inst_1 _inst_2] [_inst_4 : Monoid.{u3} B] [_inst_5 : SMul.{u1, u3} M B] (f : MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)), (Function.Injective.{succ u3, succ u2} B A (coeFn.{max (succ u2) (succ u3), max (succ u3) (succ u2)} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) (fun (_x : MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) => B -> A) (MonoidHom.hasCoeToFun.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) f)) -> (forall (c : M) (x : B), Eq.{succ u2} A (coeFn.{max (succ u2) (succ u3), max (succ u3) (succ u2)} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) (fun (_x : MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) => B -> A) (MonoidHom.hasCoeToFun.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) f (SMul.smul.{u1, u3} M B _inst_5 c x)) (SMul.smul.{u1, u2} M A (MulAction.toHasSmul.{u1, u2} M A _inst_1 (MulDistribMulAction.toMulAction.{u1, u2} M A _inst_1 _inst_2 _inst_3)) c (coeFn.{max (succ u2) (succ u3), max (succ u3) (succ u2)} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) (fun (_x : MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) => B -> A) (MonoidHom.hasCoeToFun.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) f x))) -> (MulDistribMulAction.{u1, u3} M B _inst_1 _inst_4)
but is expected to have type
- forall {M : Type.{u1}} {A : Type.{u2}} {B : Type.{u3}} [_inst_1 : Monoid.{u1} M] [_inst_2 : Monoid.{u2} A] [_inst_3 : MulDistribMulAction.{u1, u2} M A _inst_1 _inst_2] [_inst_4 : Monoid.{u3} B] [_inst_5 : SMul.{u1, u3} M B] (f : MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)), (Function.Injective.{succ u3, succ u2} B A (FunLike.coe.{max (succ u2) (succ u3), succ u3, succ u2} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) B (fun (_x : B) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : B) => A) _x) (MulHomClass.toFunLike.{max u2 u3, u3, u2} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) B A (MulOneClass.toMul.{u3} B (Monoid.toMulOneClass.{u3} B _inst_4)) (MulOneClass.toMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u3, u3, u2} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2) (MonoidHom.monoidHomClass.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)))) f)) -> (forall (c : M) (x : B), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : B) => A) (HSMul.hSMul.{u1, u3, u3} M B B (instHSMul.{u1, u3} M B _inst_5) c x)) (FunLike.coe.{max (succ u2) (succ u3), succ u3, succ u2} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) B (fun (_x : B) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : B) => A) _x) (MulHomClass.toFunLike.{max u2 u3, u3, u2} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) B A (MulOneClass.toMul.{u3} B (Monoid.toMulOneClass.{u3} B _inst_4)) (MulOneClass.toMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u3, u3, u2} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2) (MonoidHom.monoidHomClass.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)))) f (HSMul.hSMul.{u1, u3, u3} M B B (instHSMul.{u1, u3} M B _inst_5) c x)) (HSMul.hSMul.{u1, u2, u2} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : B) => A) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : B) => A) x) (instHSMul.{u1, u2} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : B) => A) x) (MulAction.toSMul.{u1, u2} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : B) => A) x) _inst_1 (MulDistribMulAction.toMulAction.{u1, u2} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : B) => A) x) _inst_1 _inst_2 _inst_3))) c (FunLike.coe.{max (succ u2) (succ u3), succ u3, succ u2} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) B (fun (_x : B) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : B) => A) _x) (MulHomClass.toFunLike.{max u2 u3, u3, u2} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) B A (MulOneClass.toMul.{u3} B (Monoid.toMulOneClass.{u3} B _inst_4)) (MulOneClass.toMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u3, u3, u2} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2) (MonoidHom.monoidHomClass.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)))) f x))) -> (MulDistribMulAction.{u1, u3} M B _inst_1 _inst_4)
+ forall {M : Type.{u1}} {A : Type.{u2}} {B : Type.{u3}} [_inst_1 : Monoid.{u1} M] [_inst_2 : Monoid.{u2} A] [_inst_3 : MulDistribMulAction.{u1, u2} M A _inst_1 _inst_2] [_inst_4 : Monoid.{u3} B] [_inst_5 : SMul.{u1, u3} M B] (f : MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)), (Function.Injective.{succ u3, succ u2} B A (FunLike.coe.{max (succ u2) (succ u3), succ u3, succ u2} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) B (fun (_x : B) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : B) => A) _x) (MulHomClass.toFunLike.{max u2 u3, u3, u2} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) B A (MulOneClass.toMul.{u3} B (Monoid.toMulOneClass.{u3} B _inst_4)) (MulOneClass.toMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u3, u3, u2} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2) (MonoidHom.monoidHomClass.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)))) f)) -> (forall (c : M) (x : B), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : B) => A) (HSMul.hSMul.{u1, u3, u3} M B B (instHSMul.{u1, u3} M B _inst_5) c x)) (FunLike.coe.{max (succ u2) (succ u3), succ u3, succ u2} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) B (fun (_x : B) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : B) => A) _x) (MulHomClass.toFunLike.{max u2 u3, u3, u2} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) B A (MulOneClass.toMul.{u3} B (Monoid.toMulOneClass.{u3} B _inst_4)) (MulOneClass.toMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u3, u3, u2} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2) (MonoidHom.monoidHomClass.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)))) f (HSMul.hSMul.{u1, u3, u3} M B B (instHSMul.{u1, u3} M B _inst_5) c x)) (HSMul.hSMul.{u1, u2, u2} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : B) => A) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : B) => A) x) (instHSMul.{u1, u2} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : B) => A) x) (MulAction.toSMul.{u1, u2} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : B) => A) x) _inst_1 (MulDistribMulAction.toMulAction.{u1, u2} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : B) => A) x) _inst_1 _inst_2 _inst_3))) c (FunLike.coe.{max (succ u2) (succ u3), succ u3, succ u2} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) B (fun (_x : B) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : B) => A) _x) (MulHomClass.toFunLike.{max u2 u3, u3, u2} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) B A (MulOneClass.toMul.{u3} B (Monoid.toMulOneClass.{u3} B _inst_4)) (MulOneClass.toMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u3, u3, u2} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2) (MonoidHom.monoidHomClass.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)))) f x))) -> (MulDistribMulAction.{u1, u3} M B _inst_1 _inst_4)
Case conversion may be inaccurate. Consider using '#align function.injective.mul_distrib_mul_action Function.Injective.mulDistribMulActionₓ'. -/
/-- Pullback a multiplicative distributive multiplicative action along an injective monoid
homomorphism.
@@ -1295,7 +1295,7 @@ protected def Function.Injective.mulDistribMulAction [Monoid B] [SMul M B] (f :
lean 3 declaration is
forall {M : Type.{u1}} {A : Type.{u2}} {B : Type.{u3}} [_inst_1 : Monoid.{u1} M] [_inst_2 : Monoid.{u2} A] [_inst_3 : MulDistribMulAction.{u1, u2} M A _inst_1 _inst_2] [_inst_4 : Monoid.{u3} B] [_inst_5 : SMul.{u1, u3} M B] (f : MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)), (Function.Surjective.{succ u2, succ u3} A B (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) (fun (_x : MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) => A -> B) (MonoidHom.hasCoeToFun.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) f)) -> (forall (c : M) (x : A), Eq.{succ u3} B (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) (fun (_x : MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) => A -> B) (MonoidHom.hasCoeToFun.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) f (SMul.smul.{u1, u2} M A (MulAction.toHasSmul.{u1, u2} M A _inst_1 (MulDistribMulAction.toMulAction.{u1, u2} M A _inst_1 _inst_2 _inst_3)) c x)) (SMul.smul.{u1, u3} M B _inst_5 c (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) (fun (_x : MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) => A -> B) (MonoidHom.hasCoeToFun.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) f x))) -> (MulDistribMulAction.{u1, u3} M B _inst_1 _inst_4)
but is expected to have type
- forall {M : Type.{u1}} {A : Type.{u2}} {B : Type.{u3}} [_inst_1 : Monoid.{u1} M] [_inst_2 : Monoid.{u2} A] [_inst_3 : MulDistribMulAction.{u1, u2} M A _inst_1 _inst_2] [_inst_4 : Monoid.{u3} B] [_inst_5 : SMul.{u1, u3} M B] (f : MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)), (Function.Surjective.{succ u2, succ u3} A B (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : A) => B) _x) (MulHomClass.toFunLike.{max u2 u3, u2, u3} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) A B (MulOneClass.toMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_2)) (MulOneClass.toMul.{u3} B (Monoid.toMulOneClass.{u3} B _inst_4)) (MonoidHomClass.toMulHomClass.{max u2 u3, u2, u3} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4) (MonoidHom.monoidHomClass.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)))) f)) -> (forall (c : M) (x : A), Eq.{succ u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : A) => B) (HSMul.hSMul.{u1, u2, u2} M A A (instHSMul.{u1, u2} M A (MulAction.toSMul.{u1, u2} M A _inst_1 (MulDistribMulAction.toMulAction.{u1, u2} M A _inst_1 _inst_2 _inst_3))) c x)) (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : A) => B) _x) (MulHomClass.toFunLike.{max u2 u3, u2, u3} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) A B (MulOneClass.toMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_2)) (MulOneClass.toMul.{u3} B (Monoid.toMulOneClass.{u3} B _inst_4)) (MonoidHomClass.toMulHomClass.{max u2 u3, u2, u3} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4) (MonoidHom.monoidHomClass.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)))) f (HSMul.hSMul.{u1, u2, u2} M A A (instHSMul.{u1, u2} M A (MulAction.toSMul.{u1, u2} M A _inst_1 (MulDistribMulAction.toMulAction.{u1, u2} M A _inst_1 _inst_2 _inst_3))) c x)) (HSMul.hSMul.{u1, u3, u3} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : A) => B) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : A) => B) x) (instHSMul.{u1, u3} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : A) => B) x) _inst_5) c (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : A) => B) _x) (MulHomClass.toFunLike.{max u2 u3, u2, u3} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) A B (MulOneClass.toMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_2)) (MulOneClass.toMul.{u3} B (Monoid.toMulOneClass.{u3} B _inst_4)) (MonoidHomClass.toMulHomClass.{max u2 u3, u2, u3} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4) (MonoidHom.monoidHomClass.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)))) f x))) -> (MulDistribMulAction.{u1, u3} M B _inst_1 _inst_4)
+ forall {M : Type.{u1}} {A : Type.{u2}} {B : Type.{u3}} [_inst_1 : Monoid.{u1} M] [_inst_2 : Monoid.{u2} A] [_inst_3 : MulDistribMulAction.{u1, u2} M A _inst_1 _inst_2] [_inst_4 : Monoid.{u3} B] [_inst_5 : SMul.{u1, u3} M B] (f : MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)), (Function.Surjective.{succ u2, succ u3} A B (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : A) => B) _x) (MulHomClass.toFunLike.{max u2 u3, u2, u3} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) A B (MulOneClass.toMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_2)) (MulOneClass.toMul.{u3} B (Monoid.toMulOneClass.{u3} B _inst_4)) (MonoidHomClass.toMulHomClass.{max u2 u3, u2, u3} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4) (MonoidHom.monoidHomClass.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)))) f)) -> (forall (c : M) (x : A), Eq.{succ u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : A) => B) (HSMul.hSMul.{u1, u2, u2} M A A (instHSMul.{u1, u2} M A (MulAction.toSMul.{u1, u2} M A _inst_1 (MulDistribMulAction.toMulAction.{u1, u2} M A _inst_1 _inst_2 _inst_3))) c x)) (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : A) => B) _x) (MulHomClass.toFunLike.{max u2 u3, u2, u3} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) A B (MulOneClass.toMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_2)) (MulOneClass.toMul.{u3} B (Monoid.toMulOneClass.{u3} B _inst_4)) (MonoidHomClass.toMulHomClass.{max u2 u3, u2, u3} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4) (MonoidHom.monoidHomClass.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)))) f (HSMul.hSMul.{u1, u2, u2} M A A (instHSMul.{u1, u2} M A (MulAction.toSMul.{u1, u2} M A _inst_1 (MulDistribMulAction.toMulAction.{u1, u2} M A _inst_1 _inst_2 _inst_3))) c x)) (HSMul.hSMul.{u1, u3, u3} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : A) => B) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : A) => B) x) (instHSMul.{u1, u3} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : A) => B) x) _inst_5) c (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : A) => B) _x) (MulHomClass.toFunLike.{max u2 u3, u2, u3} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) A B (MulOneClass.toMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_2)) (MulOneClass.toMul.{u3} B (Monoid.toMulOneClass.{u3} B _inst_4)) (MonoidHomClass.toMulHomClass.{max u2 u3, u2, u3} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4) (MonoidHom.monoidHomClass.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)))) f x))) -> (MulDistribMulAction.{u1, u3} M B _inst_1 _inst_4)
Case conversion may be inaccurate. Consider using '#align function.surjective.mul_distrib_mul_action Function.Surjective.mulDistribMulActionₓ'. -/
/-- Pushforward a multiplicative distributive multiplicative action along a surjective monoid
homomorphism.
@@ -1342,7 +1342,7 @@ variable {A}
lean 3 declaration is
forall {M : Type.{u1}} {A : Type.{u2}} [_inst_1 : Monoid.{u1} M] [_inst_2 : Monoid.{u2} A] [_inst_3 : MulDistribMulAction.{u1, u2} M A _inst_1 _inst_2] (r : M) (x : A), Eq.{succ u2} A (coeFn.{succ u2, succ u2} (MonoidHom.{u2, u2} A A (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u2} A _inst_2)) (fun (_x : MonoidHom.{u2, u2} A A (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u2} A _inst_2)) => A -> A) (MonoidHom.hasCoeToFun.{u2, u2} A A (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u2} A _inst_2)) (MulDistribMulAction.toMonoidHom.{u1, u2} M A _inst_1 _inst_2 _inst_3 r) x) (SMul.smul.{u1, u2} M A (MulAction.toHasSmul.{u1, u2} M A _inst_1 (MulDistribMulAction.toMulAction.{u1, u2} M A _inst_1 _inst_2 _inst_3)) r x)
but is expected to have type
- forall {M : Type.{u1}} {A : Type.{u2}} [_inst_1 : Monoid.{u1} M] [_inst_2 : Monoid.{u2} A] [_inst_3 : MulDistribMulAction.{u1, u2} M A _inst_1 _inst_2] (r : M) (x : A), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : A) => A) x) (FunLike.coe.{succ u2, succ u2, succ u2} (MonoidHom.{u2, u2} A A (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u2} A _inst_2)) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : A) => A) _x) (MulHomClass.toFunLike.{u2, u2, u2} (MonoidHom.{u2, u2} A A (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u2} A _inst_2)) A A (MulOneClass.toMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_2)) (MulOneClass.toMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_2)) (MonoidHomClass.toMulHomClass.{u2, u2, u2} (MonoidHom.{u2, u2} A A (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u2} A _inst_2)) A A (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u2} A _inst_2) (MonoidHom.monoidHomClass.{u2, u2} A A (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u2} A _inst_2)))) (MulDistribMulAction.toMonoidHom.{u1, u2} M A _inst_1 _inst_2 _inst_3 r) x) (HSMul.hSMul.{u1, u2, u2} M A A (instHSMul.{u1, u2} M A (MulAction.toSMul.{u1, u2} M A _inst_1 (MulDistribMulAction.toMulAction.{u1, u2} M A _inst_1 _inst_2 _inst_3))) r x)
+ forall {M : Type.{u1}} {A : Type.{u2}} [_inst_1 : Monoid.{u1} M] [_inst_2 : Monoid.{u2} A] [_inst_3 : MulDistribMulAction.{u1, u2} M A _inst_1 _inst_2] (r : M) (x : A), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : A) => A) x) (FunLike.coe.{succ u2, succ u2, succ u2} (MonoidHom.{u2, u2} A A (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u2} A _inst_2)) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : A) => A) _x) (MulHomClass.toFunLike.{u2, u2, u2} (MonoidHom.{u2, u2} A A (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u2} A _inst_2)) A A (MulOneClass.toMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_2)) (MulOneClass.toMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_2)) (MonoidHomClass.toMulHomClass.{u2, u2, u2} (MonoidHom.{u2, u2} A A (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u2} A _inst_2)) A A (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u2} A _inst_2) (MonoidHom.monoidHomClass.{u2, u2} A A (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u2} A _inst_2)))) (MulDistribMulAction.toMonoidHom.{u1, u2} M A _inst_1 _inst_2 _inst_3 r) x) (HSMul.hSMul.{u1, u2, u2} M A A (instHSMul.{u1, u2} M A (MulAction.toSMul.{u1, u2} M A _inst_1 (MulDistribMulAction.toMulAction.{u1, u2} M A _inst_1 _inst_2 _inst_3))) r x)
Case conversion may be inaccurate. Consider using '#align mul_distrib_mul_action.to_monoid_hom_apply MulDistribMulAction.toMonoidHom_applyₓ'. -/
@[simp]
theorem MulDistribMulAction.toMonoidHom_apply (r : M) (x : A) :
@@ -1592,7 +1592,7 @@ instance Multiplicative.smul [VAdd α β] : SMul (Multiplicative α) β :=
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SMul.{u1, u2} α β] (a : Additive.{u1} α) (b : β), Eq.{succ u2} β (SMul.smul.{u1, u2} α β _inst_1 (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (Additive.{u1} α) α) (fun (_x : Equiv.{succ u1, succ u1} (Additive.{u1} α) α) => (Additive.{u1} α) -> α) (Equiv.hasCoeToFun.{succ u1, succ u1} (Additive.{u1} α) α) (Additive.toMul.{u1} α) a) b) (VAdd.vadd.{u1, u2} (Additive.{u1} α) β (Additive.vadd.{u1, u2} α β _inst_1) a b)
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SMul.{u2, u1} α β] (a : Additive.{u2} α) (b : β), Eq.{succ u1} β (HSMul.hSMul.{u2, u1, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : Additive.{u2} α) => α) a) β β (instHSMul.{u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : Additive.{u2} α) => α) a) β _inst_1) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (Additive.{u2} α) α) (Additive.{u2} α) (fun (_x : Additive.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : Additive.{u2} α) => α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (Additive.{u2} α) α) (Additive.toMul.{u2} α) a) b) (HVAdd.hVAdd.{u2, u1, u1} (Additive.{u2} α) β β (instHVAdd.{u2, u1} (Additive.{u2} α) β (Additive.vadd.{u2, u1} α β _inst_1)) a b)
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SMul.{u2, u1} α β] (a : Additive.{u2} α) (b : β), Eq.{succ u1} β (HSMul.hSMul.{u2, u1, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : Additive.{u2} α) => α) a) β β (instHSMul.{u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : Additive.{u2} α) => α) a) β _inst_1) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (Additive.{u2} α) α) (Additive.{u2} α) (fun (_x : Additive.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : Additive.{u2} α) => α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (Additive.{u2} α) α) (Additive.toMul.{u2} α) a) b) (HVAdd.hVAdd.{u2, u1, u1} (Additive.{u2} α) β β (instHVAdd.{u2, u1} (Additive.{u2} α) β (Additive.vadd.{u2, u1} α β _inst_1)) a b)
Case conversion may be inaccurate. Consider using '#align to_mul_smul toMul_smulₓ'. -/
@[simp]
theorem toMul_smul [SMul α β] (a) (b : β) : (toMul a : α) • b = a +ᵥ b :=
@@ -1603,7 +1603,7 @@ theorem toMul_smul [SMul α β] (a) (b : β) : (toMul a : α) • b = a +ᵥ b :
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SMul.{u1, u2} α β] (a : α) (b : β), Eq.{succ u2} β (VAdd.vadd.{u1, u2} (Additive.{u1} α) β (Additive.vadd.{u1, u2} α β _inst_1) (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} α (Additive.{u1} α)) (fun (_x : Equiv.{succ u1, succ u1} α (Additive.{u1} α)) => α -> (Additive.{u1} α)) (Equiv.hasCoeToFun.{succ u1, succ u1} α (Additive.{u1} α)) (Additive.ofMul.{u1} α) a) b) (SMul.smul.{u1, u2} α β _inst_1 a b)
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SMul.{u2, u1} α β] (a : α) (b : β), Eq.{succ u1} β (HVAdd.hVAdd.{u2, u1, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α) => Additive.{u2} α) a) β β (instHVAdd.{u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α) => Additive.{u2} α) a) β (Additive.vadd.{u2, u1} α β _inst_1)) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} α (Additive.{u2} α)) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α) => Additive.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} α (Additive.{u2} α)) (Additive.ofMul.{u2} α) a) b) (HSMul.hSMul.{u2, u1, u1} α β β (instHSMul.{u2, u1} α β _inst_1) a b)
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SMul.{u2, u1} α β] (a : α) (b : β), Eq.{succ u1} β (HVAdd.hVAdd.{u2, u1, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α) => Additive.{u2} α) a) β β (instHVAdd.{u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α) => Additive.{u2} α) a) β (Additive.vadd.{u2, u1} α β _inst_1)) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} α (Additive.{u2} α)) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α) => Additive.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} α (Additive.{u2} α)) (Additive.ofMul.{u2} α) a) b) (HSMul.hSMul.{u2, u1, u1} α β β (instHSMul.{u2, u1} α β _inst_1) a b)
Case conversion may be inaccurate. Consider using '#align of_mul_vadd ofMul_vaddₓ'. -/
@[simp]
theorem ofMul_vadd [SMul α β] (a : α) (b : β) : ofMul a +ᵥ b = a • b :=
@@ -1614,7 +1614,7 @@ theorem ofMul_vadd [SMul α β] (a : α) (b : β) : ofMul a +ᵥ b = a • b :=
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : VAdd.{u1, u2} α β] (a : Multiplicative.{u1} α) (b : β), Eq.{succ u2} β (VAdd.vadd.{u1, u2} α β _inst_1 (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (Multiplicative.{u1} α) α) (fun (_x : Equiv.{succ u1, succ u1} (Multiplicative.{u1} α) α) => (Multiplicative.{u1} α) -> α) (Equiv.hasCoeToFun.{succ u1, succ u1} (Multiplicative.{u1} α) α) (Multiplicative.toAdd.{u1} α) a) b) (SMul.smul.{u1, u2} (Multiplicative.{u1} α) β (Multiplicative.smul.{u1, u2} α β _inst_1) a b)
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : VAdd.{u2, u1} α β] (a : Multiplicative.{u2} α) (b : β), Eq.{succ u1} β (HVAdd.hVAdd.{u2, u1, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : Multiplicative.{u2} α) => α) a) β β (instHVAdd.{u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : Multiplicative.{u2} α) => α) a) β _inst_1) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (Multiplicative.{u2} α) α) (Multiplicative.{u2} α) (fun (_x : Multiplicative.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : Multiplicative.{u2} α) => α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (Multiplicative.{u2} α) α) (Multiplicative.toAdd.{u2} α) a) b) (HSMul.hSMul.{u2, u1, u1} (Multiplicative.{u2} α) β β (instHSMul.{u2, u1} (Multiplicative.{u2} α) β (Multiplicative.smul.{u2, u1} α β _inst_1)) a b)
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : VAdd.{u2, u1} α β] (a : Multiplicative.{u2} α) (b : β), Eq.{succ u1} β (HVAdd.hVAdd.{u2, u1, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : Multiplicative.{u2} α) => α) a) β β (instHVAdd.{u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : Multiplicative.{u2} α) => α) a) β _inst_1) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (Multiplicative.{u2} α) α) (Multiplicative.{u2} α) (fun (_x : Multiplicative.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : Multiplicative.{u2} α) => α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (Multiplicative.{u2} α) α) (Multiplicative.toAdd.{u2} α) a) b) (HSMul.hSMul.{u2, u1, u1} (Multiplicative.{u2} α) β β (instHSMul.{u2, u1} (Multiplicative.{u2} α) β (Multiplicative.smul.{u2, u1} α β _inst_1)) a b)
Case conversion may be inaccurate. Consider using '#align to_add_vadd toAdd_vaddₓ'. -/
@[simp]
theorem toAdd_vadd [VAdd α β] (a) (b : β) : (toAdd a : α) +ᵥ b = a • b :=
@@ -1625,7 +1625,7 @@ theorem toAdd_vadd [VAdd α β] (a) (b : β) : (toAdd a : α) +ᵥ b = a • b :
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : VAdd.{u1, u2} α β] (a : α) (b : β), Eq.{succ u2} β (SMul.smul.{u1, u2} (Multiplicative.{u1} α) β (Multiplicative.smul.{u1, u2} α β _inst_1) (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} α (Multiplicative.{u1} α)) (fun (_x : Equiv.{succ u1, succ u1} α (Multiplicative.{u1} α)) => α -> (Multiplicative.{u1} α)) (Equiv.hasCoeToFun.{succ u1, succ u1} α (Multiplicative.{u1} α)) (Multiplicative.ofAdd.{u1} α) a) b) (VAdd.vadd.{u1, u2} α β _inst_1 a b)
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : VAdd.{u2, u1} α β] (a : α) (b : β), Eq.{succ u1} β (HSMul.hSMul.{u2, u1, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α) => Multiplicative.{u2} α) a) β β (instHSMul.{u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α) => Multiplicative.{u2} α) a) β (Multiplicative.smul.{u2, u1} α β _inst_1)) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} α (Multiplicative.{u2} α)) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α) => Multiplicative.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} α (Multiplicative.{u2} α)) (Multiplicative.ofAdd.{u2} α) a) b) (HVAdd.hVAdd.{u2, u1, u1} α β β (instHVAdd.{u2, u1} α β _inst_1) a b)
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : VAdd.{u2, u1} α β] (a : α) (b : β), Eq.{succ u1} β (HSMul.hSMul.{u2, u1, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α) => Multiplicative.{u2} α) a) β β (instHSMul.{u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α) => Multiplicative.{u2} α) a) β (Multiplicative.smul.{u2, u1} α β _inst_1)) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} α (Multiplicative.{u2} α)) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α) => Multiplicative.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} α (Multiplicative.{u2} α)) (Multiplicative.ofAdd.{u2} α) a) b) (HVAdd.hVAdd.{u2, u1, u1} α β β (instHVAdd.{u2, u1} α β _inst_1) a b)
Case conversion may be inaccurate. Consider using '#align of_add_smul ofAdd_smulₓ'. -/
@[simp]
theorem ofAdd_smul [VAdd α β] (a : α) (b : β) : ofAdd a • b = a +ᵥ b :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/3180fab693e2cee3bff62675571264cb8778b212
@@ -669,7 +669,7 @@ protected def Function.Surjective.mulAction [SMul M β] (f : α → β) (hf : Su
lean 3 declaration is
forall {R : Type.{u1}} {S : Type.{u2}} {M : Type.{u3}} [_inst_3 : Monoid.{u1} R] [_inst_4 : MulAction.{u1, u3} R M _inst_3] [_inst_5 : Monoid.{u2} S] [_inst_6 : SMul.{u2, u3} S M] (f : MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)), (Function.Surjective.{succ u1, succ u2} R S (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)) (fun (_x : MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)) => R -> S) (MonoidHom.hasCoeToFun.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)) f)) -> (forall (c : R) (x : M), Eq.{succ u3} M (SMul.smul.{u2, u3} S M _inst_6 (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)) (fun (_x : MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)) => R -> S) (MonoidHom.hasCoeToFun.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)) f c) x) (SMul.smul.{u1, u3} R M (MulAction.toHasSmul.{u1, u3} R M _inst_3 _inst_4) c x)) -> (MulAction.{u2, u3} S M _inst_5)
but is expected to have type
- forall {R : Type.{u1}} {S : Type.{u2}} {M : Type.{u3}} [_inst_3 : Monoid.{u1} R] [_inst_4 : MulAction.{u1, u3} R M _inst_3] [_inst_5 : Monoid.{u2} S] [_inst_6 : SMul.{u2, u3} S M] (f : MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)), (Function.Surjective.{succ u1, succ u2} R S (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)) R S (MulOneClass.toMul.{u1} R (Monoid.toMulOneClass.{u1} R _inst_3)) (MulOneClass.toMul.{u2} S (Monoid.toMulOneClass.{u2} S _inst_5)) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)) R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5) (MonoidHom.monoidHomClass.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)))) f)) -> (forall (c : R) (x : M), Eq.{succ u3} M (HSMul.hSMul.{u2, u3, u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : R) => S) c) M M (instHSMul.{u2, u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : R) => S) c) M _inst_6) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)) R S (MulOneClass.toMul.{u1} R (Monoid.toMulOneClass.{u1} R _inst_3)) (MulOneClass.toMul.{u2} S (Monoid.toMulOneClass.{u2} S _inst_5)) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)) R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5) (MonoidHom.monoidHomClass.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)))) f c) x) (HSMul.hSMul.{u1, u3, u3} R M M (instHSMul.{u1, u3} R M (MulAction.toSMul.{u1, u3} R M _inst_3 _inst_4)) c x)) -> (MulAction.{u2, u3} S M _inst_5)
+ forall {R : Type.{u1}} {S : Type.{u2}} {M : Type.{u3}} [_inst_3 : Monoid.{u1} R] [_inst_4 : MulAction.{u1, u3} R M _inst_3] [_inst_5 : Monoid.{u2} S] [_inst_6 : SMul.{u2, u3} S M] (f : MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)), (Function.Surjective.{succ u1, succ u2} R S (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)) R S (MulOneClass.toMul.{u1} R (Monoid.toMulOneClass.{u1} R _inst_3)) (MulOneClass.toMul.{u2} S (Monoid.toMulOneClass.{u2} S _inst_5)) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)) R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5) (MonoidHom.monoidHomClass.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)))) f)) -> (forall (c : R) (x : M), Eq.{succ u3} M (HSMul.hSMul.{u2, u3, u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => S) c) M M (instHSMul.{u2, u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => S) c) M _inst_6) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)) R S (MulOneClass.toMul.{u1} R (Monoid.toMulOneClass.{u1} R _inst_3)) (MulOneClass.toMul.{u2} S (Monoid.toMulOneClass.{u2} S _inst_5)) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)) R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5) (MonoidHom.monoidHomClass.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)))) f c) x) (HSMul.hSMul.{u1, u3, u3} R M M (instHSMul.{u1, u3} R M (MulAction.toSMul.{u1, u3} R M _inst_3 _inst_4)) c x)) -> (MulAction.{u2, u3} S M _inst_5)
Case conversion may be inaccurate. Consider using '#align function.surjective.mul_action_left Function.Surjective.mulActionLeftₓ'. -/
/-- Push forward the action of `R` on `M` along a compatible surjective map `f : R →* S`.
@@ -990,7 +990,7 @@ theorem smul_add (a : M) (b₁ b₂ : A) : a • (b₁ + b₂) = a • b₁ + a
lean 3 declaration is
forall {M : Type.{u1}} {A : Type.{u2}} {B : Type.{u3}} [_inst_1 : AddZeroClass.{u2} A] [_inst_2 : DistribSMul.{u1, u2} M A _inst_1] [_inst_3 : AddZeroClass.{u3} B] [_inst_4 : SMul.{u1, u3} M B] (f : AddMonoidHom.{u3, u2} B A _inst_3 _inst_1), (Function.Injective.{succ u3, succ u2} B A (coeFn.{max (succ u2) (succ u3), max (succ u3) (succ u2)} (AddMonoidHom.{u3, u2} B A _inst_3 _inst_1) (fun (_x : AddMonoidHom.{u3, u2} B A _inst_3 _inst_1) => B -> A) (AddMonoidHom.hasCoeToFun.{u3, u2} B A _inst_3 _inst_1) f)) -> (forall (c : M) (x : B), Eq.{succ u2} A (coeFn.{max (succ u2) (succ u3), max (succ u3) (succ u2)} (AddMonoidHom.{u3, u2} B A _inst_3 _inst_1) (fun (_x : AddMonoidHom.{u3, u2} B A _inst_3 _inst_1) => B -> A) (AddMonoidHom.hasCoeToFun.{u3, u2} B A _inst_3 _inst_1) f (SMul.smul.{u1, u3} M B _inst_4 c x)) (SMul.smul.{u1, u2} M A (SMulZeroClass.toHasSmul.{u1, u2} M A (AddZeroClass.toHasZero.{u2} A _inst_1) (DistribSMul.toSmulZeroClass.{u1, u2} M A _inst_1 _inst_2)) c (coeFn.{max (succ u2) (succ u3), max (succ u3) (succ u2)} (AddMonoidHom.{u3, u2} B A _inst_3 _inst_1) (fun (_x : AddMonoidHom.{u3, u2} B A _inst_3 _inst_1) => B -> A) (AddMonoidHom.hasCoeToFun.{u3, u2} B A _inst_3 _inst_1) f x))) -> (DistribSMul.{u1, u3} M B _inst_3)
but is expected to have type
- forall {M : Type.{u1}} {A : Type.{u2}} {B : Type.{u3}} [_inst_1 : AddZeroClass.{u2} A] [_inst_2 : DistribSMul.{u1, u2} M A _inst_1] [_inst_3 : AddZeroClass.{u3} B] [_inst_4 : SMul.{u1, u3} M B] (f : AddMonoidHom.{u3, u2} B A _inst_3 _inst_1), (Function.Injective.{succ u3, succ u2} B A (FunLike.coe.{max (succ u2) (succ u3), succ u3, succ u2} (AddMonoidHom.{u3, u2} B A _inst_3 _inst_1) B (fun (_x : B) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.398 : B) => A) _x) (AddHomClass.toFunLike.{max u2 u3, u3, u2} (AddMonoidHom.{u3, u2} B A _inst_3 _inst_1) B A (AddZeroClass.toAdd.{u3} B _inst_3) (AddZeroClass.toAdd.{u2} A _inst_1) (AddMonoidHomClass.toAddHomClass.{max u2 u3, u3, u2} (AddMonoidHom.{u3, u2} B A _inst_3 _inst_1) B A _inst_3 _inst_1 (AddMonoidHom.addMonoidHomClass.{u3, u2} B A _inst_3 _inst_1))) f)) -> (forall (c : M) (x : B), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.398 : B) => A) (HSMul.hSMul.{u1, u3, u3} M B B (instHSMul.{u1, u3} M B _inst_4) c x)) (FunLike.coe.{max (succ u2) (succ u3), succ u3, succ u2} (AddMonoidHom.{u3, u2} B A _inst_3 _inst_1) B (fun (_x : B) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.398 : B) => A) _x) (AddHomClass.toFunLike.{max u2 u3, u3, u2} (AddMonoidHom.{u3, u2} B A _inst_3 _inst_1) B A (AddZeroClass.toAdd.{u3} B _inst_3) (AddZeroClass.toAdd.{u2} A _inst_1) (AddMonoidHomClass.toAddHomClass.{max u2 u3, u3, u2} (AddMonoidHom.{u3, u2} B A _inst_3 _inst_1) B A _inst_3 _inst_1 (AddMonoidHom.addMonoidHomClass.{u3, u2} B A _inst_3 _inst_1))) f (HSMul.hSMul.{u1, u3, u3} M B B (instHSMul.{u1, u3} M B _inst_4) c x)) (HSMul.hSMul.{u1, u2, u2} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.398 : B) => A) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.398 : B) => A) x) (instHSMul.{u1, u2} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.398 : B) => A) x) (SMulZeroClass.toSMul.{u1, u2} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.398 : B) => A) x) (AddZeroClass.toZero.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.398 : B) => A) x) _inst_1) (DistribSMul.toSMulZeroClass.{u1, u2} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.398 : B) => A) x) _inst_1 _inst_2))) c (FunLike.coe.{max (succ u2) (succ u3), succ u3, succ u2} (AddMonoidHom.{u3, u2} B A _inst_3 _inst_1) B (fun (_x : B) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.398 : B) => A) _x) (AddHomClass.toFunLike.{max u2 u3, u3, u2} (AddMonoidHom.{u3, u2} B A _inst_3 _inst_1) B A (AddZeroClass.toAdd.{u3} B _inst_3) (AddZeroClass.toAdd.{u2} A _inst_1) (AddMonoidHomClass.toAddHomClass.{max u2 u3, u3, u2} (AddMonoidHom.{u3, u2} B A _inst_3 _inst_1) B A _inst_3 _inst_1 (AddMonoidHom.addMonoidHomClass.{u3, u2} B A _inst_3 _inst_1))) f x))) -> (DistribSMul.{u1, u3} M B _inst_3)
+ forall {M : Type.{u1}} {A : Type.{u2}} {B : Type.{u3}} [_inst_1 : AddZeroClass.{u2} A] [_inst_2 : DistribSMul.{u1, u2} M A _inst_1] [_inst_3 : AddZeroClass.{u3} B] [_inst_4 : SMul.{u1, u3} M B] (f : AddMonoidHom.{u3, u2} B A _inst_3 _inst_1), (Function.Injective.{succ u3, succ u2} B A (FunLike.coe.{max (succ u2) (succ u3), succ u3, succ u2} (AddMonoidHom.{u3, u2} B A _inst_3 _inst_1) B (fun (_x : B) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : B) => A) _x) (AddHomClass.toFunLike.{max u2 u3, u3, u2} (AddMonoidHom.{u3, u2} B A _inst_3 _inst_1) B A (AddZeroClass.toAdd.{u3} B _inst_3) (AddZeroClass.toAdd.{u2} A _inst_1) (AddMonoidHomClass.toAddHomClass.{max u2 u3, u3, u2} (AddMonoidHom.{u3, u2} B A _inst_3 _inst_1) B A _inst_3 _inst_1 (AddMonoidHom.addMonoidHomClass.{u3, u2} B A _inst_3 _inst_1))) f)) -> (forall (c : M) (x : B), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : B) => A) (HSMul.hSMul.{u1, u3, u3} M B B (instHSMul.{u1, u3} M B _inst_4) c x)) (FunLike.coe.{max (succ u2) (succ u3), succ u3, succ u2} (AddMonoidHom.{u3, u2} B A _inst_3 _inst_1) B (fun (_x : B) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : B) => A) _x) (AddHomClass.toFunLike.{max u2 u3, u3, u2} (AddMonoidHom.{u3, u2} B A _inst_3 _inst_1) B A (AddZeroClass.toAdd.{u3} B _inst_3) (AddZeroClass.toAdd.{u2} A _inst_1) (AddMonoidHomClass.toAddHomClass.{max u2 u3, u3, u2} (AddMonoidHom.{u3, u2} B A _inst_3 _inst_1) B A _inst_3 _inst_1 (AddMonoidHom.addMonoidHomClass.{u3, u2} B A _inst_3 _inst_1))) f (HSMul.hSMul.{u1, u3, u3} M B B (instHSMul.{u1, u3} M B _inst_4) c x)) (HSMul.hSMul.{u1, u2, u2} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : B) => A) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : B) => A) x) (instHSMul.{u1, u2} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : B) => A) x) (SMulZeroClass.toSMul.{u1, u2} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : B) => A) x) (AddZeroClass.toZero.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : B) => A) x) _inst_1) (DistribSMul.toSMulZeroClass.{u1, u2} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : B) => A) x) _inst_1 _inst_2))) c (FunLike.coe.{max (succ u2) (succ u3), succ u3, succ u2} (AddMonoidHom.{u3, u2} B A _inst_3 _inst_1) B (fun (_x : B) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : B) => A) _x) (AddHomClass.toFunLike.{max u2 u3, u3, u2} (AddMonoidHom.{u3, u2} B A _inst_3 _inst_1) B A (AddZeroClass.toAdd.{u3} B _inst_3) (AddZeroClass.toAdd.{u2} A _inst_1) (AddMonoidHomClass.toAddHomClass.{max u2 u3, u3, u2} (AddMonoidHom.{u3, u2} B A _inst_3 _inst_1) B A _inst_3 _inst_1 (AddMonoidHom.addMonoidHomClass.{u3, u2} B A _inst_3 _inst_1))) f x))) -> (DistribSMul.{u1, u3} M B _inst_3)
Case conversion may be inaccurate. Consider using '#align function.injective.distrib_smul Function.Injective.distribSMulₓ'. -/
/-- Pullback a distributive scalar multiplication along an injective additive monoid
homomorphism.
@@ -1007,7 +1007,7 @@ protected def Function.Injective.distribSMul [AddZeroClass B] [SMul M B] (f : B
lean 3 declaration is
forall {M : Type.{u1}} {A : Type.{u2}} {B : Type.{u3}} [_inst_1 : AddZeroClass.{u2} A] [_inst_2 : DistribSMul.{u1, u2} M A _inst_1] [_inst_3 : AddZeroClass.{u3} B] [_inst_4 : SMul.{u1, u3} M B] (f : AddMonoidHom.{u2, u3} A B _inst_1 _inst_3), (Function.Surjective.{succ u2, succ u3} A B (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (AddMonoidHom.{u2, u3} A B _inst_1 _inst_3) (fun (_x : AddMonoidHom.{u2, u3} A B _inst_1 _inst_3) => A -> B) (AddMonoidHom.hasCoeToFun.{u2, u3} A B _inst_1 _inst_3) f)) -> (forall (c : M) (x : A), Eq.{succ u3} B (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (AddMonoidHom.{u2, u3} A B _inst_1 _inst_3) (fun (_x : AddMonoidHom.{u2, u3} A B _inst_1 _inst_3) => A -> B) (AddMonoidHom.hasCoeToFun.{u2, u3} A B _inst_1 _inst_3) f (SMul.smul.{u1, u2} M A (SMulZeroClass.toHasSmul.{u1, u2} M A (AddZeroClass.toHasZero.{u2} A _inst_1) (DistribSMul.toSmulZeroClass.{u1, u2} M A _inst_1 _inst_2)) c x)) (SMul.smul.{u1, u3} M B _inst_4 c (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (AddMonoidHom.{u2, u3} A B _inst_1 _inst_3) (fun (_x : AddMonoidHom.{u2, u3} A B _inst_1 _inst_3) => A -> B) (AddMonoidHom.hasCoeToFun.{u2, u3} A B _inst_1 _inst_3) f x))) -> (DistribSMul.{u1, u3} M B _inst_3)
but is expected to have type
- forall {M : Type.{u1}} {A : Type.{u2}} {B : Type.{u3}} [_inst_1 : AddZeroClass.{u2} A] [_inst_2 : DistribSMul.{u1, u2} M A _inst_1] [_inst_3 : AddZeroClass.{u3} B] [_inst_4 : SMul.{u1, u3} M B] (f : AddMonoidHom.{u2, u3} A B _inst_1 _inst_3), (Function.Surjective.{succ u2, succ u3} A B (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (AddMonoidHom.{u2, u3} A B _inst_1 _inst_3) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.398 : A) => B) _x) (AddHomClass.toFunLike.{max u2 u3, u2, u3} (AddMonoidHom.{u2, u3} A B _inst_1 _inst_3) A B (AddZeroClass.toAdd.{u2} A _inst_1) (AddZeroClass.toAdd.{u3} B _inst_3) (AddMonoidHomClass.toAddHomClass.{max u2 u3, u2, u3} (AddMonoidHom.{u2, u3} A B _inst_1 _inst_3) A B _inst_1 _inst_3 (AddMonoidHom.addMonoidHomClass.{u2, u3} A B _inst_1 _inst_3))) f)) -> (forall (c : M) (x : A), Eq.{succ u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.398 : A) => B) (HSMul.hSMul.{u1, u2, u2} M A A (instHSMul.{u1, u2} M A (SMulZeroClass.toSMul.{u1, u2} M A (AddZeroClass.toZero.{u2} A _inst_1) (DistribSMul.toSMulZeroClass.{u1, u2} M A _inst_1 _inst_2))) c x)) (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (AddMonoidHom.{u2, u3} A B _inst_1 _inst_3) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.398 : A) => B) _x) (AddHomClass.toFunLike.{max u2 u3, u2, u3} (AddMonoidHom.{u2, u3} A B _inst_1 _inst_3) A B (AddZeroClass.toAdd.{u2} A _inst_1) (AddZeroClass.toAdd.{u3} B _inst_3) (AddMonoidHomClass.toAddHomClass.{max u2 u3, u2, u3} (AddMonoidHom.{u2, u3} A B _inst_1 _inst_3) A B _inst_1 _inst_3 (AddMonoidHom.addMonoidHomClass.{u2, u3} A B _inst_1 _inst_3))) f (HSMul.hSMul.{u1, u2, u2} M A A (instHSMul.{u1, u2} M A (SMulZeroClass.toSMul.{u1, u2} M A (AddZeroClass.toZero.{u2} A _inst_1) (DistribSMul.toSMulZeroClass.{u1, u2} M A _inst_1 _inst_2))) c x)) (HSMul.hSMul.{u1, u3, u3} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.398 : A) => B) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.398 : A) => B) x) (instHSMul.{u1, u3} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.398 : A) => B) x) _inst_4) c (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (AddMonoidHom.{u2, u3} A B _inst_1 _inst_3) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.398 : A) => B) _x) (AddHomClass.toFunLike.{max u2 u3, u2, u3} (AddMonoidHom.{u2, u3} A B _inst_1 _inst_3) A B (AddZeroClass.toAdd.{u2} A _inst_1) (AddZeroClass.toAdd.{u3} B _inst_3) (AddMonoidHomClass.toAddHomClass.{max u2 u3, u2, u3} (AddMonoidHom.{u2, u3} A B _inst_1 _inst_3) A B _inst_1 _inst_3 (AddMonoidHom.addMonoidHomClass.{u2, u3} A B _inst_1 _inst_3))) f x))) -> (DistribSMul.{u1, u3} M B _inst_3)
+ forall {M : Type.{u1}} {A : Type.{u2}} {B : Type.{u3}} [_inst_1 : AddZeroClass.{u2} A] [_inst_2 : DistribSMul.{u1, u2} M A _inst_1] [_inst_3 : AddZeroClass.{u3} B] [_inst_4 : SMul.{u1, u3} M B] (f : AddMonoidHom.{u2, u3} A B _inst_1 _inst_3), (Function.Surjective.{succ u2, succ u3} A B (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (AddMonoidHom.{u2, u3} A B _inst_1 _inst_3) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : A) => B) _x) (AddHomClass.toFunLike.{max u2 u3, u2, u3} (AddMonoidHom.{u2, u3} A B _inst_1 _inst_3) A B (AddZeroClass.toAdd.{u2} A _inst_1) (AddZeroClass.toAdd.{u3} B _inst_3) (AddMonoidHomClass.toAddHomClass.{max u2 u3, u2, u3} (AddMonoidHom.{u2, u3} A B _inst_1 _inst_3) A B _inst_1 _inst_3 (AddMonoidHom.addMonoidHomClass.{u2, u3} A B _inst_1 _inst_3))) f)) -> (forall (c : M) (x : A), Eq.{succ u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : A) => B) (HSMul.hSMul.{u1, u2, u2} M A A (instHSMul.{u1, u2} M A (SMulZeroClass.toSMul.{u1, u2} M A (AddZeroClass.toZero.{u2} A _inst_1) (DistribSMul.toSMulZeroClass.{u1, u2} M A _inst_1 _inst_2))) c x)) (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (AddMonoidHom.{u2, u3} A B _inst_1 _inst_3) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : A) => B) _x) (AddHomClass.toFunLike.{max u2 u3, u2, u3} (AddMonoidHom.{u2, u3} A B _inst_1 _inst_3) A B (AddZeroClass.toAdd.{u2} A _inst_1) (AddZeroClass.toAdd.{u3} B _inst_3) (AddMonoidHomClass.toAddHomClass.{max u2 u3, u2, u3} (AddMonoidHom.{u2, u3} A B _inst_1 _inst_3) A B _inst_1 _inst_3 (AddMonoidHom.addMonoidHomClass.{u2, u3} A B _inst_1 _inst_3))) f (HSMul.hSMul.{u1, u2, u2} M A A (instHSMul.{u1, u2} M A (SMulZeroClass.toSMul.{u1, u2} M A (AddZeroClass.toZero.{u2} A _inst_1) (DistribSMul.toSMulZeroClass.{u1, u2} M A _inst_1 _inst_2))) c x)) (HSMul.hSMul.{u1, u3, u3} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : A) => B) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : A) => B) x) (instHSMul.{u1, u3} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : A) => B) x) _inst_4) c (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (AddMonoidHom.{u2, u3} A B _inst_1 _inst_3) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : A) => B) _x) (AddHomClass.toFunLike.{max u2 u3, u2, u3} (AddMonoidHom.{u2, u3} A B _inst_1 _inst_3) A B (AddZeroClass.toAdd.{u2} A _inst_1) (AddZeroClass.toAdd.{u3} B _inst_3) (AddMonoidHomClass.toAddHomClass.{max u2 u3, u2, u3} (AddMonoidHom.{u2, u3} A B _inst_1 _inst_3) A B _inst_1 _inst_3 (AddMonoidHom.addMonoidHomClass.{u2, u3} A B _inst_1 _inst_3))) f x))) -> (DistribSMul.{u1, u3} M B _inst_3)
Case conversion may be inaccurate. Consider using '#align function.surjective.distrib_smul Function.Surjective.distribSMulₓ'. -/
/-- Pushforward a distributive scalar multiplication along a surjective additive monoid
homomorphism.
@@ -1100,7 +1100,7 @@ example :
lean 3 declaration is
forall {M : Type.{u1}} {A : Type.{u2}} {B : Type.{u3}} [_inst_1 : Monoid.{u1} M] [_inst_2 : AddMonoid.{u2} A] [_inst_3 : DistribMulAction.{u1, u2} M A _inst_1 _inst_2] [_inst_4 : AddMonoid.{u3} B] [_inst_5 : SMul.{u1, u3} M B] (f : AddMonoidHom.{u3, u2} B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2)), (Function.Injective.{succ u3, succ u2} B A (coeFn.{max (succ u2) (succ u3), max (succ u3) (succ u2)} (AddMonoidHom.{u3, u2} B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2)) (fun (_x : AddMonoidHom.{u3, u2} B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2)) => B -> A) (AddMonoidHom.hasCoeToFun.{u3, u2} B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2)) f)) -> (forall (c : M) (x : B), Eq.{succ u2} A (coeFn.{max (succ u2) (succ u3), max (succ u3) (succ u2)} (AddMonoidHom.{u3, u2} B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2)) (fun (_x : AddMonoidHom.{u3, u2} B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2)) => B -> A) (AddMonoidHom.hasCoeToFun.{u3, u2} B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2)) f (SMul.smul.{u1, u3} M B _inst_5 c x)) (SMul.smul.{u1, u2} M A (SMulZeroClass.toHasSmul.{u1, u2} M A (AddZeroClass.toHasZero.{u2} A (AddMonoid.toAddZeroClass.{u2} A _inst_2)) (DistribSMul.toSmulZeroClass.{u1, u2} M A (AddMonoid.toAddZeroClass.{u2} A _inst_2) (DistribMulAction.toDistribSMul.{u1, u2} M A _inst_1 _inst_2 _inst_3))) c (coeFn.{max (succ u2) (succ u3), max (succ u3) (succ u2)} (AddMonoidHom.{u3, u2} B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2)) (fun (_x : AddMonoidHom.{u3, u2} B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2)) => B -> A) (AddMonoidHom.hasCoeToFun.{u3, u2} B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2)) f x))) -> (DistribMulAction.{u1, u3} M B _inst_1 _inst_4)
but is expected to have type
- forall {M : Type.{u1}} {A : Type.{u2}} {B : Type.{u3}} [_inst_1 : Monoid.{u1} M] [_inst_2 : AddMonoid.{u2} A] [_inst_3 : DistribMulAction.{u1, u2} M A _inst_1 _inst_2] [_inst_4 : AddMonoid.{u3} B] [_inst_5 : SMul.{u1, u3} M B] (f : AddMonoidHom.{u3, u2} B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2)), (Function.Injective.{succ u3, succ u2} B A (FunLike.coe.{max (succ u2) (succ u3), succ u3, succ u2} (AddMonoidHom.{u3, u2} B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2)) B (fun (_x : B) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.398 : B) => A) _x) (AddHomClass.toFunLike.{max u2 u3, u3, u2} (AddMonoidHom.{u3, u2} B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2)) B A (AddZeroClass.toAdd.{u3} B (AddMonoid.toAddZeroClass.{u3} B _inst_4)) (AddZeroClass.toAdd.{u2} A (AddMonoid.toAddZeroClass.{u2} A _inst_2)) (AddMonoidHomClass.toAddHomClass.{max u2 u3, u3, u2} (AddMonoidHom.{u3, u2} B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2)) B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoidHom.addMonoidHomClass.{u3, u2} B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2)))) f)) -> (forall (c : M) (x : B), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.398 : B) => A) (HSMul.hSMul.{u1, u3, u3} M B B (instHSMul.{u1, u3} M B _inst_5) c x)) (FunLike.coe.{max (succ u2) (succ u3), succ u3, succ u2} (AddMonoidHom.{u3, u2} B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2)) B (fun (_x : B) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.398 : B) => A) _x) (AddHomClass.toFunLike.{max u2 u3, u3, u2} (AddMonoidHom.{u3, u2} B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2)) B A (AddZeroClass.toAdd.{u3} B (AddMonoid.toAddZeroClass.{u3} B _inst_4)) (AddZeroClass.toAdd.{u2} A (AddMonoid.toAddZeroClass.{u2} A _inst_2)) (AddMonoidHomClass.toAddHomClass.{max u2 u3, u3, u2} (AddMonoidHom.{u3, u2} B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2)) B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoidHom.addMonoidHomClass.{u3, u2} B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2)))) f (HSMul.hSMul.{u1, u3, u3} M B B (instHSMul.{u1, u3} M B _inst_5) c x)) (HSMul.hSMul.{u1, u2, u2} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.398 : B) => A) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.398 : B) => A) x) (instHSMul.{u1, u2} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.398 : B) => A) x) (SMulZeroClass.toSMul.{u1, u2} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.398 : B) => A) x) (AddMonoid.toZero.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.398 : B) => A) x) _inst_2) (DistribSMul.toSMulZeroClass.{u1, u2} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.398 : B) => A) x) (AddMonoid.toAddZeroClass.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.398 : B) => A) x) _inst_2) (DistribMulAction.toDistribSMul.{u1, u2} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.398 : B) => A) x) _inst_1 _inst_2 _inst_3)))) c (FunLike.coe.{max (succ u2) (succ u3), succ u3, succ u2} (AddMonoidHom.{u3, u2} B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2)) B (fun (_x : B) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.398 : B) => A) _x) (AddHomClass.toFunLike.{max u2 u3, u3, u2} (AddMonoidHom.{u3, u2} B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2)) B A (AddZeroClass.toAdd.{u3} B (AddMonoid.toAddZeroClass.{u3} B _inst_4)) (AddZeroClass.toAdd.{u2} A (AddMonoid.toAddZeroClass.{u2} A _inst_2)) (AddMonoidHomClass.toAddHomClass.{max u2 u3, u3, u2} (AddMonoidHom.{u3, u2} B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2)) B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoidHom.addMonoidHomClass.{u3, u2} B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2)))) f x))) -> (DistribMulAction.{u1, u3} M B _inst_1 _inst_4)
+ forall {M : Type.{u1}} {A : Type.{u2}} {B : Type.{u3}} [_inst_1 : Monoid.{u1} M] [_inst_2 : AddMonoid.{u2} A] [_inst_3 : DistribMulAction.{u1, u2} M A _inst_1 _inst_2] [_inst_4 : AddMonoid.{u3} B] [_inst_5 : SMul.{u1, u3} M B] (f : AddMonoidHom.{u3, u2} B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2)), (Function.Injective.{succ u3, succ u2} B A (FunLike.coe.{max (succ u2) (succ u3), succ u3, succ u2} (AddMonoidHom.{u3, u2} B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2)) B (fun (_x : B) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : B) => A) _x) (AddHomClass.toFunLike.{max u2 u3, u3, u2} (AddMonoidHom.{u3, u2} B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2)) B A (AddZeroClass.toAdd.{u3} B (AddMonoid.toAddZeroClass.{u3} B _inst_4)) (AddZeroClass.toAdd.{u2} A (AddMonoid.toAddZeroClass.{u2} A _inst_2)) (AddMonoidHomClass.toAddHomClass.{max u2 u3, u3, u2} (AddMonoidHom.{u3, u2} B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2)) B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoidHom.addMonoidHomClass.{u3, u2} B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2)))) f)) -> (forall (c : M) (x : B), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : B) => A) (HSMul.hSMul.{u1, u3, u3} M B B (instHSMul.{u1, u3} M B _inst_5) c x)) (FunLike.coe.{max (succ u2) (succ u3), succ u3, succ u2} (AddMonoidHom.{u3, u2} B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2)) B (fun (_x : B) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : B) => A) _x) (AddHomClass.toFunLike.{max u2 u3, u3, u2} (AddMonoidHom.{u3, u2} B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2)) B A (AddZeroClass.toAdd.{u3} B (AddMonoid.toAddZeroClass.{u3} B _inst_4)) (AddZeroClass.toAdd.{u2} A (AddMonoid.toAddZeroClass.{u2} A _inst_2)) (AddMonoidHomClass.toAddHomClass.{max u2 u3, u3, u2} (AddMonoidHom.{u3, u2} B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2)) B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoidHom.addMonoidHomClass.{u3, u2} B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2)))) f (HSMul.hSMul.{u1, u3, u3} M B B (instHSMul.{u1, u3} M B _inst_5) c x)) (HSMul.hSMul.{u1, u2, u2} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : B) => A) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : B) => A) x) (instHSMul.{u1, u2} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : B) => A) x) (SMulZeroClass.toSMul.{u1, u2} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : B) => A) x) (AddMonoid.toZero.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : B) => A) x) _inst_2) (DistribSMul.toSMulZeroClass.{u1, u2} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : B) => A) x) (AddMonoid.toAddZeroClass.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : B) => A) x) _inst_2) (DistribMulAction.toDistribSMul.{u1, u2} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : B) => A) x) _inst_1 _inst_2 _inst_3)))) c (FunLike.coe.{max (succ u2) (succ u3), succ u3, succ u2} (AddMonoidHom.{u3, u2} B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2)) B (fun (_x : B) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : B) => A) _x) (AddHomClass.toFunLike.{max u2 u3, u3, u2} (AddMonoidHom.{u3, u2} B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2)) B A (AddZeroClass.toAdd.{u3} B (AddMonoid.toAddZeroClass.{u3} B _inst_4)) (AddZeroClass.toAdd.{u2} A (AddMonoid.toAddZeroClass.{u2} A _inst_2)) (AddMonoidHomClass.toAddHomClass.{max u2 u3, u3, u2} (AddMonoidHom.{u3, u2} B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2)) B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoidHom.addMonoidHomClass.{u3, u2} B A (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoid.toAddZeroClass.{u2} A _inst_2)))) f x))) -> (DistribMulAction.{u1, u3} M B _inst_1 _inst_4)
Case conversion may be inaccurate. Consider using '#align function.injective.distrib_mul_action Function.Injective.distribMulActionₓ'. -/
/-- Pullback a distributive multiplicative action along an injective additive monoid
homomorphism.
@@ -1115,7 +1115,7 @@ protected def Function.Injective.distribMulAction [AddMonoid B] [SMul M B] (f :
lean 3 declaration is
forall {M : Type.{u1}} {A : Type.{u2}} {B : Type.{u3}} [_inst_1 : Monoid.{u1} M] [_inst_2 : AddMonoid.{u2} A] [_inst_3 : DistribMulAction.{u1, u2} M A _inst_1 _inst_2] [_inst_4 : AddMonoid.{u3} B] [_inst_5 : SMul.{u1, u3} M B] (f : AddMonoidHom.{u2, u3} A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4)), (Function.Surjective.{succ u2, succ u3} A B (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (AddMonoidHom.{u2, u3} A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4)) (fun (_x : AddMonoidHom.{u2, u3} A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4)) => A -> B) (AddMonoidHom.hasCoeToFun.{u2, u3} A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4)) f)) -> (forall (c : M) (x : A), Eq.{succ u3} B (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (AddMonoidHom.{u2, u3} A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4)) (fun (_x : AddMonoidHom.{u2, u3} A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4)) => A -> B) (AddMonoidHom.hasCoeToFun.{u2, u3} A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4)) f (SMul.smul.{u1, u2} M A (SMulZeroClass.toHasSmul.{u1, u2} M A (AddZeroClass.toHasZero.{u2} A (AddMonoid.toAddZeroClass.{u2} A _inst_2)) (DistribSMul.toSmulZeroClass.{u1, u2} M A (AddMonoid.toAddZeroClass.{u2} A _inst_2) (DistribMulAction.toDistribSMul.{u1, u2} M A _inst_1 _inst_2 _inst_3))) c x)) (SMul.smul.{u1, u3} M B _inst_5 c (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (AddMonoidHom.{u2, u3} A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4)) (fun (_x : AddMonoidHom.{u2, u3} A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4)) => A -> B) (AddMonoidHom.hasCoeToFun.{u2, u3} A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4)) f x))) -> (DistribMulAction.{u1, u3} M B _inst_1 _inst_4)
but is expected to have type
- forall {M : Type.{u1}} {A : Type.{u2}} {B : Type.{u3}} [_inst_1 : Monoid.{u1} M] [_inst_2 : AddMonoid.{u2} A] [_inst_3 : DistribMulAction.{u1, u2} M A _inst_1 _inst_2] [_inst_4 : AddMonoid.{u3} B] [_inst_5 : SMul.{u1, u3} M B] (f : AddMonoidHom.{u2, u3} A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4)), (Function.Surjective.{succ u2, succ u3} A B (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (AddMonoidHom.{u2, u3} A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4)) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.398 : A) => B) _x) (AddHomClass.toFunLike.{max u2 u3, u2, u3} (AddMonoidHom.{u2, u3} A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4)) A B (AddZeroClass.toAdd.{u2} A (AddMonoid.toAddZeroClass.{u2} A _inst_2)) (AddZeroClass.toAdd.{u3} B (AddMonoid.toAddZeroClass.{u3} B _inst_4)) (AddMonoidHomClass.toAddHomClass.{max u2 u3, u2, u3} (AddMonoidHom.{u2, u3} A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4)) A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoidHom.addMonoidHomClass.{u2, u3} A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4)))) f)) -> (forall (c : M) (x : A), Eq.{succ u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.398 : A) => B) (HSMul.hSMul.{u1, u2, u2} M A A (instHSMul.{u1, u2} M A (SMulZeroClass.toSMul.{u1, u2} M A (AddMonoid.toZero.{u2} A _inst_2) (DistribSMul.toSMulZeroClass.{u1, u2} M A (AddMonoid.toAddZeroClass.{u2} A _inst_2) (DistribMulAction.toDistribSMul.{u1, u2} M A _inst_1 _inst_2 _inst_3)))) c x)) (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (AddMonoidHom.{u2, u3} A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4)) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.398 : A) => B) _x) (AddHomClass.toFunLike.{max u2 u3, u2, u3} (AddMonoidHom.{u2, u3} A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4)) A B (AddZeroClass.toAdd.{u2} A (AddMonoid.toAddZeroClass.{u2} A _inst_2)) (AddZeroClass.toAdd.{u3} B (AddMonoid.toAddZeroClass.{u3} B _inst_4)) (AddMonoidHomClass.toAddHomClass.{max u2 u3, u2, u3} (AddMonoidHom.{u2, u3} A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4)) A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoidHom.addMonoidHomClass.{u2, u3} A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4)))) f (HSMul.hSMul.{u1, u2, u2} M A A (instHSMul.{u1, u2} M A (SMulZeroClass.toSMul.{u1, u2} M A (AddMonoid.toZero.{u2} A _inst_2) (DistribSMul.toSMulZeroClass.{u1, u2} M A (AddMonoid.toAddZeroClass.{u2} A _inst_2) (DistribMulAction.toDistribSMul.{u1, u2} M A _inst_1 _inst_2 _inst_3)))) c x)) (HSMul.hSMul.{u1, u3, u3} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.398 : A) => B) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.398 : A) => B) x) (instHSMul.{u1, u3} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.398 : A) => B) x) _inst_5) c (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (AddMonoidHom.{u2, u3} A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4)) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.398 : A) => B) _x) (AddHomClass.toFunLike.{max u2 u3, u2, u3} (AddMonoidHom.{u2, u3} A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4)) A B (AddZeroClass.toAdd.{u2} A (AddMonoid.toAddZeroClass.{u2} A _inst_2)) (AddZeroClass.toAdd.{u3} B (AddMonoid.toAddZeroClass.{u3} B _inst_4)) (AddMonoidHomClass.toAddHomClass.{max u2 u3, u2, u3} (AddMonoidHom.{u2, u3} A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4)) A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoidHom.addMonoidHomClass.{u2, u3} A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4)))) f x))) -> (DistribMulAction.{u1, u3} M B _inst_1 _inst_4)
+ forall {M : Type.{u1}} {A : Type.{u2}} {B : Type.{u3}} [_inst_1 : Monoid.{u1} M] [_inst_2 : AddMonoid.{u2} A] [_inst_3 : DistribMulAction.{u1, u2} M A _inst_1 _inst_2] [_inst_4 : AddMonoid.{u3} B] [_inst_5 : SMul.{u1, u3} M B] (f : AddMonoidHom.{u2, u3} A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4)), (Function.Surjective.{succ u2, succ u3} A B (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (AddMonoidHom.{u2, u3} A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4)) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : A) => B) _x) (AddHomClass.toFunLike.{max u2 u3, u2, u3} (AddMonoidHom.{u2, u3} A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4)) A B (AddZeroClass.toAdd.{u2} A (AddMonoid.toAddZeroClass.{u2} A _inst_2)) (AddZeroClass.toAdd.{u3} B (AddMonoid.toAddZeroClass.{u3} B _inst_4)) (AddMonoidHomClass.toAddHomClass.{max u2 u3, u2, u3} (AddMonoidHom.{u2, u3} A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4)) A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoidHom.addMonoidHomClass.{u2, u3} A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4)))) f)) -> (forall (c : M) (x : A), Eq.{succ u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : A) => B) (HSMul.hSMul.{u1, u2, u2} M A A (instHSMul.{u1, u2} M A (SMulZeroClass.toSMul.{u1, u2} M A (AddMonoid.toZero.{u2} A _inst_2) (DistribSMul.toSMulZeroClass.{u1, u2} M A (AddMonoid.toAddZeroClass.{u2} A _inst_2) (DistribMulAction.toDistribSMul.{u1, u2} M A _inst_1 _inst_2 _inst_3)))) c x)) (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (AddMonoidHom.{u2, u3} A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4)) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : A) => B) _x) (AddHomClass.toFunLike.{max u2 u3, u2, u3} (AddMonoidHom.{u2, u3} A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4)) A B (AddZeroClass.toAdd.{u2} A (AddMonoid.toAddZeroClass.{u2} A _inst_2)) (AddZeroClass.toAdd.{u3} B (AddMonoid.toAddZeroClass.{u3} B _inst_4)) (AddMonoidHomClass.toAddHomClass.{max u2 u3, u2, u3} (AddMonoidHom.{u2, u3} A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4)) A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoidHom.addMonoidHomClass.{u2, u3} A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4)))) f (HSMul.hSMul.{u1, u2, u2} M A A (instHSMul.{u1, u2} M A (SMulZeroClass.toSMul.{u1, u2} M A (AddMonoid.toZero.{u2} A _inst_2) (DistribSMul.toSMulZeroClass.{u1, u2} M A (AddMonoid.toAddZeroClass.{u2} A _inst_2) (DistribMulAction.toDistribSMul.{u1, u2} M A _inst_1 _inst_2 _inst_3)))) c x)) (HSMul.hSMul.{u1, u3, u3} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : A) => B) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : A) => B) x) (instHSMul.{u1, u3} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : A) => B) x) _inst_5) c (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (AddMonoidHom.{u2, u3} A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4)) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : A) => B) _x) (AddHomClass.toFunLike.{max u2 u3, u2, u3} (AddMonoidHom.{u2, u3} A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4)) A B (AddZeroClass.toAdd.{u2} A (AddMonoid.toAddZeroClass.{u2} A _inst_2)) (AddZeroClass.toAdd.{u3} B (AddMonoid.toAddZeroClass.{u3} B _inst_4)) (AddMonoidHomClass.toAddHomClass.{max u2 u3, u2, u3} (AddMonoidHom.{u2, u3} A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4)) A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4) (AddMonoidHom.addMonoidHomClass.{u2, u3} A B (AddMonoid.toAddZeroClass.{u2} A _inst_2) (AddMonoid.toAddZeroClass.{u3} B _inst_4)))) f x))) -> (DistribMulAction.{u1, u3} M B _inst_1 _inst_4)
Case conversion may be inaccurate. Consider using '#align function.surjective.distrib_mul_action Function.Surjective.distribMulActionₓ'. -/
/-- Pushforward a distributive multiplicative action along a surjective additive monoid
homomorphism.
@@ -1130,7 +1130,7 @@ protected def Function.Surjective.distribMulAction [AddMonoid B] [SMul M B] (f :
lean 3 declaration is
forall {R : Type.{u1}} {S : Type.{u2}} {M : Type.{u3}} [_inst_4 : Monoid.{u1} R] [_inst_5 : AddMonoid.{u3} M] [_inst_6 : DistribMulAction.{u1, u3} R M _inst_4 _inst_5] [_inst_7 : Monoid.{u2} S] [_inst_8 : SMul.{u2, u3} S M] (f : MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)), (Function.Surjective.{succ u1, succ u2} R S (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)) (fun (_x : MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)) => R -> S) (MonoidHom.hasCoeToFun.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)) f)) -> (forall (c : R) (x : M), Eq.{succ u3} M (SMul.smul.{u2, u3} S M _inst_8 (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)) (fun (_x : MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)) => R -> S) (MonoidHom.hasCoeToFun.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)) f c) x) (SMul.smul.{u1, u3} R M (SMulZeroClass.toHasSmul.{u1, u3} R M (AddZeroClass.toHasZero.{u3} M (AddMonoid.toAddZeroClass.{u3} M _inst_5)) (DistribSMul.toSmulZeroClass.{u1, u3} R M (AddMonoid.toAddZeroClass.{u3} M _inst_5) (DistribMulAction.toDistribSMul.{u1, u3} R M _inst_4 _inst_5 _inst_6))) c x)) -> (DistribMulAction.{u2, u3} S M _inst_7 _inst_5)
but is expected to have type
- forall {R : Type.{u1}} {S : Type.{u2}} {M : Type.{u3}} [_inst_4 : Monoid.{u1} R] [_inst_5 : AddMonoid.{u3} M] [_inst_6 : DistribMulAction.{u1, u3} R M _inst_4 _inst_5] [_inst_7 : Monoid.{u2} S] [_inst_8 : SMul.{u2, u3} S M] (f : MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)), (Function.Surjective.{succ u1, succ u2} R S (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)) R S (MulOneClass.toMul.{u1} R (Monoid.toMulOneClass.{u1} R _inst_4)) (MulOneClass.toMul.{u2} S (Monoid.toMulOneClass.{u2} S _inst_7)) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)) R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7) (MonoidHom.monoidHomClass.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)))) f)) -> (forall (c : R) (x : M), Eq.{succ u3} M (HSMul.hSMul.{u2, u3, u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : R) => S) c) M M (instHSMul.{u2, u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : R) => S) c) M _inst_8) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)) R S (MulOneClass.toMul.{u1} R (Monoid.toMulOneClass.{u1} R _inst_4)) (MulOneClass.toMul.{u2} S (Monoid.toMulOneClass.{u2} S _inst_7)) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)) R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7) (MonoidHom.monoidHomClass.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)))) f c) x) (HSMul.hSMul.{u1, u3, u3} R M M (instHSMul.{u1, u3} R M (SMulZeroClass.toSMul.{u1, u3} R M (AddMonoid.toZero.{u3} M _inst_5) (DistribSMul.toSMulZeroClass.{u1, u3} R M (AddMonoid.toAddZeroClass.{u3} M _inst_5) (DistribMulAction.toDistribSMul.{u1, u3} R M _inst_4 _inst_5 _inst_6)))) c x)) -> (DistribMulAction.{u2, u3} S M _inst_7 _inst_5)
+ forall {R : Type.{u1}} {S : Type.{u2}} {M : Type.{u3}} [_inst_4 : Monoid.{u1} R] [_inst_5 : AddMonoid.{u3} M] [_inst_6 : DistribMulAction.{u1, u3} R M _inst_4 _inst_5] [_inst_7 : Monoid.{u2} S] [_inst_8 : SMul.{u2, u3} S M] (f : MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)), (Function.Surjective.{succ u1, succ u2} R S (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)) R S (MulOneClass.toMul.{u1} R (Monoid.toMulOneClass.{u1} R _inst_4)) (MulOneClass.toMul.{u2} S (Monoid.toMulOneClass.{u2} S _inst_7)) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)) R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7) (MonoidHom.monoidHomClass.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)))) f)) -> (forall (c : R) (x : M), Eq.{succ u3} M (HSMul.hSMul.{u2, u3, u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => S) c) M M (instHSMul.{u2, u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => S) c) M _inst_8) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)) R S (MulOneClass.toMul.{u1} R (Monoid.toMulOneClass.{u1} R _inst_4)) (MulOneClass.toMul.{u2} S (Monoid.toMulOneClass.{u2} S _inst_7)) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)) R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7) (MonoidHom.monoidHomClass.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)))) f c) x) (HSMul.hSMul.{u1, u3, u3} R M M (instHSMul.{u1, u3} R M (SMulZeroClass.toSMul.{u1, u3} R M (AddMonoid.toZero.{u3} M _inst_5) (DistribSMul.toSMulZeroClass.{u1, u3} R M (AddMonoid.toAddZeroClass.{u3} M _inst_5) (DistribMulAction.toDistribSMul.{u1, u3} R M _inst_4 _inst_5 _inst_6)))) c x)) -> (DistribMulAction.{u2, u3} S M _inst_7 _inst_5)
Case conversion may be inaccurate. Consider using '#align function.surjective.distrib_mul_action_left Function.Surjective.distribMulActionLeftₓ'. -/
/-- Push forward the action of `R` on `M` along a compatible surjective map `f : R →* S`.
@@ -1277,7 +1277,7 @@ theorem smul_mul' (a : M) (b₁ b₂ : A) : a • (b₁ * b₂) = a • b₁ * a
lean 3 declaration is
forall {M : Type.{u1}} {A : Type.{u2}} {B : Type.{u3}} [_inst_1 : Monoid.{u1} M] [_inst_2 : Monoid.{u2} A] [_inst_3 : MulDistribMulAction.{u1, u2} M A _inst_1 _inst_2] [_inst_4 : Monoid.{u3} B] [_inst_5 : SMul.{u1, u3} M B] (f : MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)), (Function.Injective.{succ u3, succ u2} B A (coeFn.{max (succ u2) (succ u3), max (succ u3) (succ u2)} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) (fun (_x : MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) => B -> A) (MonoidHom.hasCoeToFun.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) f)) -> (forall (c : M) (x : B), Eq.{succ u2} A (coeFn.{max (succ u2) (succ u3), max (succ u3) (succ u2)} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) (fun (_x : MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) => B -> A) (MonoidHom.hasCoeToFun.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) f (SMul.smul.{u1, u3} M B _inst_5 c x)) (SMul.smul.{u1, u2} M A (MulAction.toHasSmul.{u1, u2} M A _inst_1 (MulDistribMulAction.toMulAction.{u1, u2} M A _inst_1 _inst_2 _inst_3)) c (coeFn.{max (succ u2) (succ u3), max (succ u3) (succ u2)} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) (fun (_x : MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) => B -> A) (MonoidHom.hasCoeToFun.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) f x))) -> (MulDistribMulAction.{u1, u3} M B _inst_1 _inst_4)
but is expected to have type
- forall {M : Type.{u1}} {A : Type.{u2}} {B : Type.{u3}} [_inst_1 : Monoid.{u1} M] [_inst_2 : Monoid.{u2} A] [_inst_3 : MulDistribMulAction.{u1, u2} M A _inst_1 _inst_2] [_inst_4 : Monoid.{u3} B] [_inst_5 : SMul.{u1, u3} M B] (f : MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)), (Function.Injective.{succ u3, succ u2} B A (FunLike.coe.{max (succ u2) (succ u3), succ u3, succ u2} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) B (fun (_x : B) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : B) => A) _x) (MulHomClass.toFunLike.{max u2 u3, u3, u2} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) B A (MulOneClass.toMul.{u3} B (Monoid.toMulOneClass.{u3} B _inst_4)) (MulOneClass.toMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u3, u3, u2} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2) (MonoidHom.monoidHomClass.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)))) f)) -> (forall (c : M) (x : B), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : B) => A) (HSMul.hSMul.{u1, u3, u3} M B B (instHSMul.{u1, u3} M B _inst_5) c x)) (FunLike.coe.{max (succ u2) (succ u3), succ u3, succ u2} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) B (fun (_x : B) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : B) => A) _x) (MulHomClass.toFunLike.{max u2 u3, u3, u2} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) B A (MulOneClass.toMul.{u3} B (Monoid.toMulOneClass.{u3} B _inst_4)) (MulOneClass.toMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u3, u3, u2} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2) (MonoidHom.monoidHomClass.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)))) f (HSMul.hSMul.{u1, u3, u3} M B B (instHSMul.{u1, u3} M B _inst_5) c x)) (HSMul.hSMul.{u1, u2, u2} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : B) => A) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : B) => A) x) (instHSMul.{u1, u2} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : B) => A) x) (MulAction.toSMul.{u1, u2} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : B) => A) x) _inst_1 (MulDistribMulAction.toMulAction.{u1, u2} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : B) => A) x) _inst_1 _inst_2 _inst_3))) c (FunLike.coe.{max (succ u2) (succ u3), succ u3, succ u2} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) B (fun (_x : B) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : B) => A) _x) (MulHomClass.toFunLike.{max u2 u3, u3, u2} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) B A (MulOneClass.toMul.{u3} B (Monoid.toMulOneClass.{u3} B _inst_4)) (MulOneClass.toMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u3, u3, u2} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2) (MonoidHom.monoidHomClass.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)))) f x))) -> (MulDistribMulAction.{u1, u3} M B _inst_1 _inst_4)
+ forall {M : Type.{u1}} {A : Type.{u2}} {B : Type.{u3}} [_inst_1 : Monoid.{u1} M] [_inst_2 : Monoid.{u2} A] [_inst_3 : MulDistribMulAction.{u1, u2} M A _inst_1 _inst_2] [_inst_4 : Monoid.{u3} B] [_inst_5 : SMul.{u1, u3} M B] (f : MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)), (Function.Injective.{succ u3, succ u2} B A (FunLike.coe.{max (succ u2) (succ u3), succ u3, succ u2} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) B (fun (_x : B) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : B) => A) _x) (MulHomClass.toFunLike.{max u2 u3, u3, u2} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) B A (MulOneClass.toMul.{u3} B (Monoid.toMulOneClass.{u3} B _inst_4)) (MulOneClass.toMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u3, u3, u2} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2) (MonoidHom.monoidHomClass.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)))) f)) -> (forall (c : M) (x : B), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : B) => A) (HSMul.hSMul.{u1, u3, u3} M B B (instHSMul.{u1, u3} M B _inst_5) c x)) (FunLike.coe.{max (succ u2) (succ u3), succ u3, succ u2} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) B (fun (_x : B) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : B) => A) _x) (MulHomClass.toFunLike.{max u2 u3, u3, u2} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) B A (MulOneClass.toMul.{u3} B (Monoid.toMulOneClass.{u3} B _inst_4)) (MulOneClass.toMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u3, u3, u2} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2) (MonoidHom.monoidHomClass.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)))) f (HSMul.hSMul.{u1, u3, u3} M B B (instHSMul.{u1, u3} M B _inst_5) c x)) (HSMul.hSMul.{u1, u2, u2} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : B) => A) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : B) => A) x) (instHSMul.{u1, u2} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : B) => A) x) (MulAction.toSMul.{u1, u2} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : B) => A) x) _inst_1 (MulDistribMulAction.toMulAction.{u1, u2} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : B) => A) x) _inst_1 _inst_2 _inst_3))) c (FunLike.coe.{max (succ u2) (succ u3), succ u3, succ u2} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) B (fun (_x : B) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : B) => A) _x) (MulHomClass.toFunLike.{max u2 u3, u3, u2} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) B A (MulOneClass.toMul.{u3} B (Monoid.toMulOneClass.{u3} B _inst_4)) (MulOneClass.toMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u3, u3, u2} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2) (MonoidHom.monoidHomClass.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)))) f x))) -> (MulDistribMulAction.{u1, u3} M B _inst_1 _inst_4)
Case conversion may be inaccurate. Consider using '#align function.injective.mul_distrib_mul_action Function.Injective.mulDistribMulActionₓ'. -/
/-- Pullback a multiplicative distributive multiplicative action along an injective monoid
homomorphism.
@@ -1295,7 +1295,7 @@ protected def Function.Injective.mulDistribMulAction [Monoid B] [SMul M B] (f :
lean 3 declaration is
forall {M : Type.{u1}} {A : Type.{u2}} {B : Type.{u3}} [_inst_1 : Monoid.{u1} M] [_inst_2 : Monoid.{u2} A] [_inst_3 : MulDistribMulAction.{u1, u2} M A _inst_1 _inst_2] [_inst_4 : Monoid.{u3} B] [_inst_5 : SMul.{u1, u3} M B] (f : MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)), (Function.Surjective.{succ u2, succ u3} A B (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) (fun (_x : MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) => A -> B) (MonoidHom.hasCoeToFun.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) f)) -> (forall (c : M) (x : A), Eq.{succ u3} B (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) (fun (_x : MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) => A -> B) (MonoidHom.hasCoeToFun.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) f (SMul.smul.{u1, u2} M A (MulAction.toHasSmul.{u1, u2} M A _inst_1 (MulDistribMulAction.toMulAction.{u1, u2} M A _inst_1 _inst_2 _inst_3)) c x)) (SMul.smul.{u1, u3} M B _inst_5 c (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) (fun (_x : MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) => A -> B) (MonoidHom.hasCoeToFun.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) f x))) -> (MulDistribMulAction.{u1, u3} M B _inst_1 _inst_4)
but is expected to have type
- forall {M : Type.{u1}} {A : Type.{u2}} {B : Type.{u3}} [_inst_1 : Monoid.{u1} M] [_inst_2 : Monoid.{u2} A] [_inst_3 : MulDistribMulAction.{u1, u2} M A _inst_1 _inst_2] [_inst_4 : Monoid.{u3} B] [_inst_5 : SMul.{u1, u3} M B] (f : MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)), (Function.Surjective.{succ u2, succ u3} A B (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : A) => B) _x) (MulHomClass.toFunLike.{max u2 u3, u2, u3} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) A B (MulOneClass.toMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_2)) (MulOneClass.toMul.{u3} B (Monoid.toMulOneClass.{u3} B _inst_4)) (MonoidHomClass.toMulHomClass.{max u2 u3, u2, u3} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4) (MonoidHom.monoidHomClass.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)))) f)) -> (forall (c : M) (x : A), Eq.{succ u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : A) => B) (HSMul.hSMul.{u1, u2, u2} M A A (instHSMul.{u1, u2} M A (MulAction.toSMul.{u1, u2} M A _inst_1 (MulDistribMulAction.toMulAction.{u1, u2} M A _inst_1 _inst_2 _inst_3))) c x)) (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : A) => B) _x) (MulHomClass.toFunLike.{max u2 u3, u2, u3} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) A B (MulOneClass.toMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_2)) (MulOneClass.toMul.{u3} B (Monoid.toMulOneClass.{u3} B _inst_4)) (MonoidHomClass.toMulHomClass.{max u2 u3, u2, u3} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4) (MonoidHom.monoidHomClass.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)))) f (HSMul.hSMul.{u1, u2, u2} M A A (instHSMul.{u1, u2} M A (MulAction.toSMul.{u1, u2} M A _inst_1 (MulDistribMulAction.toMulAction.{u1, u2} M A _inst_1 _inst_2 _inst_3))) c x)) (HSMul.hSMul.{u1, u3, u3} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : A) => B) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : A) => B) x) (instHSMul.{u1, u3} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : A) => B) x) _inst_5) c (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : A) => B) _x) (MulHomClass.toFunLike.{max u2 u3, u2, u3} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) A B (MulOneClass.toMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_2)) (MulOneClass.toMul.{u3} B (Monoid.toMulOneClass.{u3} B _inst_4)) (MonoidHomClass.toMulHomClass.{max u2 u3, u2, u3} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4) (MonoidHom.monoidHomClass.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)))) f x))) -> (MulDistribMulAction.{u1, u3} M B _inst_1 _inst_4)
+ forall {M : Type.{u1}} {A : Type.{u2}} {B : Type.{u3}} [_inst_1 : Monoid.{u1} M] [_inst_2 : Monoid.{u2} A] [_inst_3 : MulDistribMulAction.{u1, u2} M A _inst_1 _inst_2] [_inst_4 : Monoid.{u3} B] [_inst_5 : SMul.{u1, u3} M B] (f : MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)), (Function.Surjective.{succ u2, succ u3} A B (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : A) => B) _x) (MulHomClass.toFunLike.{max u2 u3, u2, u3} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) A B (MulOneClass.toMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_2)) (MulOneClass.toMul.{u3} B (Monoid.toMulOneClass.{u3} B _inst_4)) (MonoidHomClass.toMulHomClass.{max u2 u3, u2, u3} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4) (MonoidHom.monoidHomClass.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)))) f)) -> (forall (c : M) (x : A), Eq.{succ u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : A) => B) (HSMul.hSMul.{u1, u2, u2} M A A (instHSMul.{u1, u2} M A (MulAction.toSMul.{u1, u2} M A _inst_1 (MulDistribMulAction.toMulAction.{u1, u2} M A _inst_1 _inst_2 _inst_3))) c x)) (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : A) => B) _x) (MulHomClass.toFunLike.{max u2 u3, u2, u3} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) A B (MulOneClass.toMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_2)) (MulOneClass.toMul.{u3} B (Monoid.toMulOneClass.{u3} B _inst_4)) (MonoidHomClass.toMulHomClass.{max u2 u3, u2, u3} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4) (MonoidHom.monoidHomClass.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)))) f (HSMul.hSMul.{u1, u2, u2} M A A (instHSMul.{u1, u2} M A (MulAction.toSMul.{u1, u2} M A _inst_1 (MulDistribMulAction.toMulAction.{u1, u2} M A _inst_1 _inst_2 _inst_3))) c x)) (HSMul.hSMul.{u1, u3, u3} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : A) => B) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : A) => B) x) (instHSMul.{u1, u3} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : A) => B) x) _inst_5) c (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : A) => B) _x) (MulHomClass.toFunLike.{max u2 u3, u2, u3} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) A B (MulOneClass.toMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_2)) (MulOneClass.toMul.{u3} B (Monoid.toMulOneClass.{u3} B _inst_4)) (MonoidHomClass.toMulHomClass.{max u2 u3, u2, u3} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4) (MonoidHom.monoidHomClass.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)))) f x))) -> (MulDistribMulAction.{u1, u3} M B _inst_1 _inst_4)
Case conversion may be inaccurate. Consider using '#align function.surjective.mul_distrib_mul_action Function.Surjective.mulDistribMulActionₓ'. -/
/-- Pushforward a multiplicative distributive multiplicative action along a surjective monoid
homomorphism.
@@ -1342,7 +1342,7 @@ variable {A}
lean 3 declaration is
forall {M : Type.{u1}} {A : Type.{u2}} [_inst_1 : Monoid.{u1} M] [_inst_2 : Monoid.{u2} A] [_inst_3 : MulDistribMulAction.{u1, u2} M A _inst_1 _inst_2] (r : M) (x : A), Eq.{succ u2} A (coeFn.{succ u2, succ u2} (MonoidHom.{u2, u2} A A (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u2} A _inst_2)) (fun (_x : MonoidHom.{u2, u2} A A (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u2} A _inst_2)) => A -> A) (MonoidHom.hasCoeToFun.{u2, u2} A A (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u2} A _inst_2)) (MulDistribMulAction.toMonoidHom.{u1, u2} M A _inst_1 _inst_2 _inst_3 r) x) (SMul.smul.{u1, u2} M A (MulAction.toHasSmul.{u1, u2} M A _inst_1 (MulDistribMulAction.toMulAction.{u1, u2} M A _inst_1 _inst_2 _inst_3)) r x)
but is expected to have type
- forall {M : Type.{u1}} {A : Type.{u2}} [_inst_1 : Monoid.{u1} M] [_inst_2 : Monoid.{u2} A] [_inst_3 : MulDistribMulAction.{u1, u2} M A _inst_1 _inst_2] (r : M) (x : A), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : A) => A) x) (FunLike.coe.{succ u2, succ u2, succ u2} (MonoidHom.{u2, u2} A A (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u2} A _inst_2)) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : A) => A) _x) (MulHomClass.toFunLike.{u2, u2, u2} (MonoidHom.{u2, u2} A A (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u2} A _inst_2)) A A (MulOneClass.toMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_2)) (MulOneClass.toMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_2)) (MonoidHomClass.toMulHomClass.{u2, u2, u2} (MonoidHom.{u2, u2} A A (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u2} A _inst_2)) A A (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u2} A _inst_2) (MonoidHom.monoidHomClass.{u2, u2} A A (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u2} A _inst_2)))) (MulDistribMulAction.toMonoidHom.{u1, u2} M A _inst_1 _inst_2 _inst_3 r) x) (HSMul.hSMul.{u1, u2, u2} M A A (instHSMul.{u1, u2} M A (MulAction.toSMul.{u1, u2} M A _inst_1 (MulDistribMulAction.toMulAction.{u1, u2} M A _inst_1 _inst_2 _inst_3))) r x)
+ forall {M : Type.{u1}} {A : Type.{u2}} [_inst_1 : Monoid.{u1} M] [_inst_2 : Monoid.{u2} A] [_inst_3 : MulDistribMulAction.{u1, u2} M A _inst_1 _inst_2] (r : M) (x : A), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : A) => A) x) (FunLike.coe.{succ u2, succ u2, succ u2} (MonoidHom.{u2, u2} A A (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u2} A _inst_2)) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : A) => A) _x) (MulHomClass.toFunLike.{u2, u2, u2} (MonoidHom.{u2, u2} A A (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u2} A _inst_2)) A A (MulOneClass.toMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_2)) (MulOneClass.toMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_2)) (MonoidHomClass.toMulHomClass.{u2, u2, u2} (MonoidHom.{u2, u2} A A (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u2} A _inst_2)) A A (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u2} A _inst_2) (MonoidHom.monoidHomClass.{u2, u2} A A (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u2} A _inst_2)))) (MulDistribMulAction.toMonoidHom.{u1, u2} M A _inst_1 _inst_2 _inst_3 r) x) (HSMul.hSMul.{u1, u2, u2} M A A (instHSMul.{u1, u2} M A (MulAction.toSMul.{u1, u2} M A _inst_1 (MulDistribMulAction.toMulAction.{u1, u2} M A _inst_1 _inst_2 _inst_3))) r x)
Case conversion may be inaccurate. Consider using '#align mul_distrib_mul_action.to_monoid_hom_apply MulDistribMulAction.toMonoidHom_applyₓ'. -/
@[simp]
theorem MulDistribMulAction.toMonoidHom_apply (r : M) (x : A) :
@@ -1477,7 +1477,7 @@ instance AddMonoid.End.applyDistribMulAction [AddMonoid α] : DistribMulAction (
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : AddMonoid.{u1} α] (f : AddMonoid.End.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) (a : α), Eq.{succ u1} α (SMul.smul.{u1, u1} (AddMonoid.End.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) α (SMulZeroClass.toHasSmul.{u1, u1} (AddMonoid.End.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) α (AddZeroClass.toHasZero.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) (DistribSMul.toSmulZeroClass.{u1, u1} (AddMonoid.End.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) α (AddMonoid.toAddZeroClass.{u1} α _inst_1) (DistribMulAction.toDistribSMul.{u1, u1} (AddMonoid.End.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) α (AddMonoid.End.monoid.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) _inst_1 (AddMonoid.End.applyDistribMulAction.{u1} α _inst_1)))) f a) (coeFn.{succ u1, succ u1} (AddMonoid.End.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) (fun (_x : AddMonoid.End.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) => α -> α) (FunLike.hasCoeToFun.{succ u1, succ u1, succ u1} (AddMonoid.End.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) α (fun (_x : α) => α) (AddHomClass.toFunLike.{u1, u1, u1} (AddMonoid.End.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) α α (AddZeroClass.toHasAdd.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) (AddZeroClass.toHasAdd.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) (AddMonoidHomClass.toAddHomClass.{u1, u1, u1} (AddMonoid.End.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) α α (AddMonoid.toAddZeroClass.{u1} α _inst_1) (AddMonoid.toAddZeroClass.{u1} α _inst_1) (AddMonoid.End.addMonoidHomClass.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1))))) f a)
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : AddMonoid.{u1} α] (f : AddMonoid.End.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) (a : α), Eq.{succ u1} α (HSMul.hSMul.{u1, u1, u1} (AddMonoid.End.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) α α (instHSMul.{u1, u1} (AddMonoid.End.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) α (SMulZeroClass.toSMul.{u1, u1} (AddMonoid.End.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) α (AddMonoid.toZero.{u1} α _inst_1) (DistribSMul.toSMulZeroClass.{u1, u1} (AddMonoid.End.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) α (AddMonoid.toAddZeroClass.{u1} α _inst_1) (DistribMulAction.toDistribSMul.{u1, u1} (AddMonoid.End.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) α (AddMonoid.End.monoid.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) _inst_1 (AddMonoid.End.applyDistribMulAction.{u1} α _inst_1))))) f a) (FunLike.coe.{succ u1, succ u1, succ u1} (AddMonoid.End.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.398 : α) => α) _x) (AddHomClass.toFunLike.{u1, u1, u1} (AddMonoid.End.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) α α (AddZeroClass.toAdd.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) (AddZeroClass.toAdd.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) (AddMonoidHomClass.toAddHomClass.{u1, u1, u1} (AddMonoid.End.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) α α (AddMonoid.toAddZeroClass.{u1} α _inst_1) (AddMonoid.toAddZeroClass.{u1} α _inst_1) (AddMonoid.End.instAddMonoidHomClassEnd.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)))) f a)
+ forall {α : Type.{u1}} [_inst_1 : AddMonoid.{u1} α] (f : AddMonoid.End.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) (a : α), Eq.{succ u1} α (HSMul.hSMul.{u1, u1, u1} (AddMonoid.End.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) α α (instHSMul.{u1, u1} (AddMonoid.End.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) α (SMulZeroClass.toSMul.{u1, u1} (AddMonoid.End.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) α (AddMonoid.toZero.{u1} α _inst_1) (DistribSMul.toSMulZeroClass.{u1, u1} (AddMonoid.End.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) α (AddMonoid.toAddZeroClass.{u1} α _inst_1) (DistribMulAction.toDistribSMul.{u1, u1} (AddMonoid.End.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) α (AddMonoid.End.monoid.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) _inst_1 (AddMonoid.End.applyDistribMulAction.{u1} α _inst_1))))) f a) (FunLike.coe.{succ u1, succ u1, succ u1} (AddMonoid.End.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : α) => α) _x) (AddHomClass.toFunLike.{u1, u1, u1} (AddMonoid.End.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) α α (AddZeroClass.toAdd.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) (AddZeroClass.toAdd.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) (AddMonoidHomClass.toAddHomClass.{u1, u1, u1} (AddMonoid.End.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)) α α (AddMonoid.toAddZeroClass.{u1} α _inst_1) (AddMonoid.toAddZeroClass.{u1} α _inst_1) (AddMonoid.End.instAddMonoidHomClassEnd.{u1} α (AddMonoid.toAddZeroClass.{u1} α _inst_1)))) f a)
Case conversion may be inaccurate. Consider using '#align add_monoid.End.smul_def AddMonoid.End.smul_defₓ'. -/
@[simp]
theorem AddMonoid.End.smul_def [AddMonoid α] (f : AddMonoid.End α) (a : α) : f • a = f a :=
@@ -1592,7 +1592,7 @@ instance Multiplicative.smul [VAdd α β] : SMul (Multiplicative α) β :=
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SMul.{u1, u2} α β] (a : Additive.{u1} α) (b : β), Eq.{succ u2} β (SMul.smul.{u1, u2} α β _inst_1 (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (Additive.{u1} α) α) (fun (_x : Equiv.{succ u1, succ u1} (Additive.{u1} α) α) => (Additive.{u1} α) -> α) (Equiv.hasCoeToFun.{succ u1, succ u1} (Additive.{u1} α) α) (Additive.toMul.{u1} α) a) b) (VAdd.vadd.{u1, u2} (Additive.{u1} α) β (Additive.vadd.{u1, u2} α β _inst_1) a b)
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SMul.{u2, u1} α β] (a : Additive.{u2} α) (b : β), Eq.{succ u1} β (HSMul.hSMul.{u2, u1, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : Additive.{u2} α) => α) a) β β (instHSMul.{u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : Additive.{u2} α) => α) a) β _inst_1) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (Additive.{u2} α) α) (Additive.{u2} α) (fun (_x : Additive.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : Additive.{u2} α) => α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (Additive.{u2} α) α) (Additive.toMul.{u2} α) a) b) (HVAdd.hVAdd.{u2, u1, u1} (Additive.{u2} α) β β (instHVAdd.{u2, u1} (Additive.{u2} α) β (Additive.vadd.{u2, u1} α β _inst_1)) a b)
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SMul.{u2, u1} α β] (a : Additive.{u2} α) (b : β), Eq.{succ u1} β (HSMul.hSMul.{u2, u1, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : Additive.{u2} α) => α) a) β β (instHSMul.{u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : Additive.{u2} α) => α) a) β _inst_1) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (Additive.{u2} α) α) (Additive.{u2} α) (fun (_x : Additive.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : Additive.{u2} α) => α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (Additive.{u2} α) α) (Additive.toMul.{u2} α) a) b) (HVAdd.hVAdd.{u2, u1, u1} (Additive.{u2} α) β β (instHVAdd.{u2, u1} (Additive.{u2} α) β (Additive.vadd.{u2, u1} α β _inst_1)) a b)
Case conversion may be inaccurate. Consider using '#align to_mul_smul toMul_smulₓ'. -/
@[simp]
theorem toMul_smul [SMul α β] (a) (b : β) : (toMul a : α) • b = a +ᵥ b :=
@@ -1603,7 +1603,7 @@ theorem toMul_smul [SMul α β] (a) (b : β) : (toMul a : α) • b = a +ᵥ b :
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SMul.{u1, u2} α β] (a : α) (b : β), Eq.{succ u2} β (VAdd.vadd.{u1, u2} (Additive.{u1} α) β (Additive.vadd.{u1, u2} α β _inst_1) (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} α (Additive.{u1} α)) (fun (_x : Equiv.{succ u1, succ u1} α (Additive.{u1} α)) => α -> (Additive.{u1} α)) (Equiv.hasCoeToFun.{succ u1, succ u1} α (Additive.{u1} α)) (Additive.ofMul.{u1} α) a) b) (SMul.smul.{u1, u2} α β _inst_1 a b)
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SMul.{u2, u1} α β] (a : α) (b : β), Eq.{succ u1} β (HVAdd.hVAdd.{u2, u1, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α) => Additive.{u2} α) a) β β (instHVAdd.{u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α) => Additive.{u2} α) a) β (Additive.vadd.{u2, u1} α β _inst_1)) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} α (Additive.{u2} α)) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α) => Additive.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} α (Additive.{u2} α)) (Additive.ofMul.{u2} α) a) b) (HSMul.hSMul.{u2, u1, u1} α β β (instHSMul.{u2, u1} α β _inst_1) a b)
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SMul.{u2, u1} α β] (a : α) (b : β), Eq.{succ u1} β (HVAdd.hVAdd.{u2, u1, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α) => Additive.{u2} α) a) β β (instHVAdd.{u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α) => Additive.{u2} α) a) β (Additive.vadd.{u2, u1} α β _inst_1)) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} α (Additive.{u2} α)) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α) => Additive.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} α (Additive.{u2} α)) (Additive.ofMul.{u2} α) a) b) (HSMul.hSMul.{u2, u1, u1} α β β (instHSMul.{u2, u1} α β _inst_1) a b)
Case conversion may be inaccurate. Consider using '#align of_mul_vadd ofMul_vaddₓ'. -/
@[simp]
theorem ofMul_vadd [SMul α β] (a : α) (b : β) : ofMul a +ᵥ b = a • b :=
@@ -1614,7 +1614,7 @@ theorem ofMul_vadd [SMul α β] (a : α) (b : β) : ofMul a +ᵥ b = a • b :=
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : VAdd.{u1, u2} α β] (a : Multiplicative.{u1} α) (b : β), Eq.{succ u2} β (VAdd.vadd.{u1, u2} α β _inst_1 (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (Multiplicative.{u1} α) α) (fun (_x : Equiv.{succ u1, succ u1} (Multiplicative.{u1} α) α) => (Multiplicative.{u1} α) -> α) (Equiv.hasCoeToFun.{succ u1, succ u1} (Multiplicative.{u1} α) α) (Multiplicative.toAdd.{u1} α) a) b) (SMul.smul.{u1, u2} (Multiplicative.{u1} α) β (Multiplicative.smul.{u1, u2} α β _inst_1) a b)
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : VAdd.{u2, u1} α β] (a : Multiplicative.{u2} α) (b : β), Eq.{succ u1} β (HVAdd.hVAdd.{u2, u1, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : Multiplicative.{u2} α) => α) a) β β (instHVAdd.{u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : Multiplicative.{u2} α) => α) a) β _inst_1) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (Multiplicative.{u2} α) α) (Multiplicative.{u2} α) (fun (_x : Multiplicative.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : Multiplicative.{u2} α) => α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (Multiplicative.{u2} α) α) (Multiplicative.toAdd.{u2} α) a) b) (HSMul.hSMul.{u2, u1, u1} (Multiplicative.{u2} α) β β (instHSMul.{u2, u1} (Multiplicative.{u2} α) β (Multiplicative.smul.{u2, u1} α β _inst_1)) a b)
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : VAdd.{u2, u1} α β] (a : Multiplicative.{u2} α) (b : β), Eq.{succ u1} β (HVAdd.hVAdd.{u2, u1, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : Multiplicative.{u2} α) => α) a) β β (instHVAdd.{u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : Multiplicative.{u2} α) => α) a) β _inst_1) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (Multiplicative.{u2} α) α) (Multiplicative.{u2} α) (fun (_x : Multiplicative.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : Multiplicative.{u2} α) => α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (Multiplicative.{u2} α) α) (Multiplicative.toAdd.{u2} α) a) b) (HSMul.hSMul.{u2, u1, u1} (Multiplicative.{u2} α) β β (instHSMul.{u2, u1} (Multiplicative.{u2} α) β (Multiplicative.smul.{u2, u1} α β _inst_1)) a b)
Case conversion may be inaccurate. Consider using '#align to_add_vadd toAdd_vaddₓ'. -/
@[simp]
theorem toAdd_vadd [VAdd α β] (a) (b : β) : (toAdd a : α) +ᵥ b = a • b :=
@@ -1625,7 +1625,7 @@ theorem toAdd_vadd [VAdd α β] (a) (b : β) : (toAdd a : α) +ᵥ b = a • b :
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : VAdd.{u1, u2} α β] (a : α) (b : β), Eq.{succ u2} β (SMul.smul.{u1, u2} (Multiplicative.{u1} α) β (Multiplicative.smul.{u1, u2} α β _inst_1) (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} α (Multiplicative.{u1} α)) (fun (_x : Equiv.{succ u1, succ u1} α (Multiplicative.{u1} α)) => α -> (Multiplicative.{u1} α)) (Equiv.hasCoeToFun.{succ u1, succ u1} α (Multiplicative.{u1} α)) (Multiplicative.ofAdd.{u1} α) a) b) (VAdd.vadd.{u1, u2} α β _inst_1 a b)
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : VAdd.{u2, u1} α β] (a : α) (b : β), Eq.{succ u1} β (HSMul.hSMul.{u2, u1, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α) => Multiplicative.{u2} α) a) β β (instHSMul.{u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α) => Multiplicative.{u2} α) a) β (Multiplicative.smul.{u2, u1} α β _inst_1)) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} α (Multiplicative.{u2} α)) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α) => Multiplicative.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} α (Multiplicative.{u2} α)) (Multiplicative.ofAdd.{u2} α) a) b) (HVAdd.hVAdd.{u2, u1, u1} α β β (instHVAdd.{u2, u1} α β _inst_1) a b)
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : VAdd.{u2, u1} α β] (a : α) (b : β), Eq.{succ u1} β (HSMul.hSMul.{u2, u1, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α) => Multiplicative.{u2} α) a) β β (instHSMul.{u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α) => Multiplicative.{u2} α) a) β (Multiplicative.smul.{u2, u1} α β _inst_1)) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} α (Multiplicative.{u2} α)) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α) => Multiplicative.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} α (Multiplicative.{u2} α)) (Multiplicative.ofAdd.{u2} α) a) b) (HVAdd.hVAdd.{u2, u1, u1} α β β (instHVAdd.{u2, u1} α β _inst_1) a b)
Case conversion may be inaccurate. Consider using '#align of_add_smul ofAdd_smulₓ'. -/
@[simp]
theorem ofAdd_smul [VAdd α β] (a : α) (b : β) : ofAdd a • b = a +ᵥ b :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/38f16f960f5006c6c0c2bac7b0aba5273188f4e5
@@ -669,7 +669,7 @@ protected def Function.Surjective.mulAction [SMul M β] (f : α → β) (hf : Su
lean 3 declaration is
forall {R : Type.{u1}} {S : Type.{u2}} {M : Type.{u3}} [_inst_3 : Monoid.{u1} R] [_inst_4 : MulAction.{u1, u3} R M _inst_3] [_inst_5 : Monoid.{u2} S] [_inst_6 : SMul.{u2, u3} S M] (f : MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)), (Function.Surjective.{succ u1, succ u2} R S (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)) (fun (_x : MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)) => R -> S) (MonoidHom.hasCoeToFun.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)) f)) -> (forall (c : R) (x : M), Eq.{succ u3} M (SMul.smul.{u2, u3} S M _inst_6 (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)) (fun (_x : MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)) => R -> S) (MonoidHom.hasCoeToFun.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)) f c) x) (SMul.smul.{u1, u3} R M (MulAction.toHasSmul.{u1, u3} R M _inst_3 _inst_4) c x)) -> (MulAction.{u2, u3} S M _inst_5)
but is expected to have type
- forall {R : Type.{u1}} {S : Type.{u2}} {M : Type.{u3}} [_inst_3 : Monoid.{u1} R] [_inst_4 : MulAction.{u1, u3} R M _inst_3] [_inst_5 : Monoid.{u2} S] [_inst_6 : SMul.{u2, u3} S M] (f : MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)), (Function.Surjective.{succ u1, succ u2} R S (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)) R S (MulOneClass.toMul.{u1} R (Monoid.toMulOneClass.{u1} R _inst_3)) (MulOneClass.toMul.{u2} S (Monoid.toMulOneClass.{u2} S _inst_5)) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)) R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5) (MonoidHom.monoidHomClass.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)))) f)) -> (forall (c : R) (x : M), Eq.{succ u3} M (HSMul.hSMul.{u2, u3, u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : R) => S) c) M M (instHSMul.{u2, u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : R) => S) c) M _inst_6) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)) R S (MulOneClass.toMul.{u1} R (Monoid.toMulOneClass.{u1} R _inst_3)) (MulOneClass.toMul.{u2} S (Monoid.toMulOneClass.{u2} S _inst_5)) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)) R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5) (MonoidHom.monoidHomClass.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)))) f c) x) (HSMul.hSMul.{u1, u3, u3} R M M (instHSMul.{u1, u3} R M (MulAction.toSMul.{u1, u3} R M _inst_3 _inst_4)) c x)) -> (MulAction.{u2, u3} S M _inst_5)
+ forall {R : Type.{u1}} {S : Type.{u2}} {M : Type.{u3}} [_inst_3 : Monoid.{u1} R] [_inst_4 : MulAction.{u1, u3} R M _inst_3] [_inst_5 : Monoid.{u2} S] [_inst_6 : SMul.{u2, u3} S M] (f : MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)), (Function.Surjective.{succ u1, succ u2} R S (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)) R S (MulOneClass.toMul.{u1} R (Monoid.toMulOneClass.{u1} R _inst_3)) (MulOneClass.toMul.{u2} S (Monoid.toMulOneClass.{u2} S _inst_5)) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)) R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5) (MonoidHom.monoidHomClass.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)))) f)) -> (forall (c : R) (x : M), Eq.{succ u3} M (HSMul.hSMul.{u2, u3, u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : R) => S) c) M M (instHSMul.{u2, u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : R) => S) c) M _inst_6) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)) R S (MulOneClass.toMul.{u1} R (Monoid.toMulOneClass.{u1} R _inst_3)) (MulOneClass.toMul.{u2} S (Monoid.toMulOneClass.{u2} S _inst_5)) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)) R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5) (MonoidHom.monoidHomClass.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_3) (Monoid.toMulOneClass.{u2} S _inst_5)))) f c) x) (HSMul.hSMul.{u1, u3, u3} R M M (instHSMul.{u1, u3} R M (MulAction.toSMul.{u1, u3} R M _inst_3 _inst_4)) c x)) -> (MulAction.{u2, u3} S M _inst_5)
Case conversion may be inaccurate. Consider using '#align function.surjective.mul_action_left Function.Surjective.mulActionLeftₓ'. -/
/-- Push forward the action of `R` on `M` along a compatible surjective map `f : R →* S`.
@@ -1130,7 +1130,7 @@ protected def Function.Surjective.distribMulAction [AddMonoid B] [SMul M B] (f :
lean 3 declaration is
forall {R : Type.{u1}} {S : Type.{u2}} {M : Type.{u3}} [_inst_4 : Monoid.{u1} R] [_inst_5 : AddMonoid.{u3} M] [_inst_6 : DistribMulAction.{u1, u3} R M _inst_4 _inst_5] [_inst_7 : Monoid.{u2} S] [_inst_8 : SMul.{u2, u3} S M] (f : MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)), (Function.Surjective.{succ u1, succ u2} R S (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)) (fun (_x : MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)) => R -> S) (MonoidHom.hasCoeToFun.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)) f)) -> (forall (c : R) (x : M), Eq.{succ u3} M (SMul.smul.{u2, u3} S M _inst_8 (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)) (fun (_x : MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)) => R -> S) (MonoidHom.hasCoeToFun.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)) f c) x) (SMul.smul.{u1, u3} R M (SMulZeroClass.toHasSmul.{u1, u3} R M (AddZeroClass.toHasZero.{u3} M (AddMonoid.toAddZeroClass.{u3} M _inst_5)) (DistribSMul.toSmulZeroClass.{u1, u3} R M (AddMonoid.toAddZeroClass.{u3} M _inst_5) (DistribMulAction.toDistribSMul.{u1, u3} R M _inst_4 _inst_5 _inst_6))) c x)) -> (DistribMulAction.{u2, u3} S M _inst_7 _inst_5)
but is expected to have type
- forall {R : Type.{u1}} {S : Type.{u2}} {M : Type.{u3}} [_inst_4 : Monoid.{u1} R] [_inst_5 : AddMonoid.{u3} M] [_inst_6 : DistribMulAction.{u1, u3} R M _inst_4 _inst_5] [_inst_7 : Monoid.{u2} S] [_inst_8 : SMul.{u2, u3} S M] (f : MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)), (Function.Surjective.{succ u1, succ u2} R S (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)) R S (MulOneClass.toMul.{u1} R (Monoid.toMulOneClass.{u1} R _inst_4)) (MulOneClass.toMul.{u2} S (Monoid.toMulOneClass.{u2} S _inst_7)) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)) R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7) (MonoidHom.monoidHomClass.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)))) f)) -> (forall (c : R) (x : M), Eq.{succ u3} M (HSMul.hSMul.{u2, u3, u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : R) => S) c) M M (instHSMul.{u2, u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : R) => S) c) M _inst_8) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)) R S (MulOneClass.toMul.{u1} R (Monoid.toMulOneClass.{u1} R _inst_4)) (MulOneClass.toMul.{u2} S (Monoid.toMulOneClass.{u2} S _inst_7)) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)) R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7) (MonoidHom.monoidHomClass.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)))) f c) x) (HSMul.hSMul.{u1, u3, u3} R M M (instHSMul.{u1, u3} R M (SMulZeroClass.toSMul.{u1, u3} R M (AddMonoid.toZero.{u3} M _inst_5) (DistribSMul.toSMulZeroClass.{u1, u3} R M (AddMonoid.toAddZeroClass.{u3} M _inst_5) (DistribMulAction.toDistribSMul.{u1, u3} R M _inst_4 _inst_5 _inst_6)))) c x)) -> (DistribMulAction.{u2, u3} S M _inst_7 _inst_5)
+ forall {R : Type.{u1}} {S : Type.{u2}} {M : Type.{u3}} [_inst_4 : Monoid.{u1} R] [_inst_5 : AddMonoid.{u3} M] [_inst_6 : DistribMulAction.{u1, u3} R M _inst_4 _inst_5] [_inst_7 : Monoid.{u2} S] [_inst_8 : SMul.{u2, u3} S M] (f : MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)), (Function.Surjective.{succ u1, succ u2} R S (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)) R S (MulOneClass.toMul.{u1} R (Monoid.toMulOneClass.{u1} R _inst_4)) (MulOneClass.toMul.{u2} S (Monoid.toMulOneClass.{u2} S _inst_7)) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)) R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7) (MonoidHom.monoidHomClass.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)))) f)) -> (forall (c : R) (x : M), Eq.{succ u3} M (HSMul.hSMul.{u2, u3, u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : R) => S) c) M M (instHSMul.{u2, u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : R) => S) c) M _inst_8) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : R) => S) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)) R S (MulOneClass.toMul.{u1} R (Monoid.toMulOneClass.{u1} R _inst_4)) (MulOneClass.toMul.{u2} S (Monoid.toMulOneClass.{u2} S _inst_7)) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)) R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7) (MonoidHom.monoidHomClass.{u1, u2} R S (Monoid.toMulOneClass.{u1} R _inst_4) (Monoid.toMulOneClass.{u2} S _inst_7)))) f c) x) (HSMul.hSMul.{u1, u3, u3} R M M (instHSMul.{u1, u3} R M (SMulZeroClass.toSMul.{u1, u3} R M (AddMonoid.toZero.{u3} M _inst_5) (DistribSMul.toSMulZeroClass.{u1, u3} R M (AddMonoid.toAddZeroClass.{u3} M _inst_5) (DistribMulAction.toDistribSMul.{u1, u3} R M _inst_4 _inst_5 _inst_6)))) c x)) -> (DistribMulAction.{u2, u3} S M _inst_7 _inst_5)
Case conversion may be inaccurate. Consider using '#align function.surjective.distrib_mul_action_left Function.Surjective.distribMulActionLeftₓ'. -/
/-- Push forward the action of `R` on `M` along a compatible surjective map `f : R →* S`.
@@ -1277,7 +1277,7 @@ theorem smul_mul' (a : M) (b₁ b₂ : A) : a • (b₁ * b₂) = a • b₁ * a
lean 3 declaration is
forall {M : Type.{u1}} {A : Type.{u2}} {B : Type.{u3}} [_inst_1 : Monoid.{u1} M] [_inst_2 : Monoid.{u2} A] [_inst_3 : MulDistribMulAction.{u1, u2} M A _inst_1 _inst_2] [_inst_4 : Monoid.{u3} B] [_inst_5 : SMul.{u1, u3} M B] (f : MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)), (Function.Injective.{succ u3, succ u2} B A (coeFn.{max (succ u2) (succ u3), max (succ u3) (succ u2)} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) (fun (_x : MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) => B -> A) (MonoidHom.hasCoeToFun.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) f)) -> (forall (c : M) (x : B), Eq.{succ u2} A (coeFn.{max (succ u2) (succ u3), max (succ u3) (succ u2)} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) (fun (_x : MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) => B -> A) (MonoidHom.hasCoeToFun.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) f (SMul.smul.{u1, u3} M B _inst_5 c x)) (SMul.smul.{u1, u2} M A (MulAction.toHasSmul.{u1, u2} M A _inst_1 (MulDistribMulAction.toMulAction.{u1, u2} M A _inst_1 _inst_2 _inst_3)) c (coeFn.{max (succ u2) (succ u3), max (succ u3) (succ u2)} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) (fun (_x : MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) => B -> A) (MonoidHom.hasCoeToFun.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) f x))) -> (MulDistribMulAction.{u1, u3} M B _inst_1 _inst_4)
but is expected to have type
- forall {M : Type.{u1}} {A : Type.{u2}} {B : Type.{u3}} [_inst_1 : Monoid.{u1} M] [_inst_2 : Monoid.{u2} A] [_inst_3 : MulDistribMulAction.{u1, u2} M A _inst_1 _inst_2] [_inst_4 : Monoid.{u3} B] [_inst_5 : SMul.{u1, u3} M B] (f : MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)), (Function.Injective.{succ u3, succ u2} B A (FunLike.coe.{max (succ u2) (succ u3), succ u3, succ u2} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) B (fun (_x : B) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : B) => A) _x) (MulHomClass.toFunLike.{max u2 u3, u3, u2} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) B A (MulOneClass.toMul.{u3} B (Monoid.toMulOneClass.{u3} B _inst_4)) (MulOneClass.toMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u3, u3, u2} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2) (MonoidHom.monoidHomClass.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)))) f)) -> (forall (c : M) (x : B), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : B) => A) (HSMul.hSMul.{u1, u3, u3} M B B (instHSMul.{u1, u3} M B _inst_5) c x)) (FunLike.coe.{max (succ u2) (succ u3), succ u3, succ u2} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) B (fun (_x : B) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : B) => A) _x) (MulHomClass.toFunLike.{max u2 u3, u3, u2} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) B A (MulOneClass.toMul.{u3} B (Monoid.toMulOneClass.{u3} B _inst_4)) (MulOneClass.toMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u3, u3, u2} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2) (MonoidHom.monoidHomClass.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)))) f (HSMul.hSMul.{u1, u3, u3} M B B (instHSMul.{u1, u3} M B _inst_5) c x)) (HSMul.hSMul.{u1, u2, u2} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : B) => A) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : B) => A) x) (instHSMul.{u1, u2} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : B) => A) x) (MulAction.toSMul.{u1, u2} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : B) => A) x) _inst_1 (MulDistribMulAction.toMulAction.{u1, u2} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : B) => A) x) _inst_1 _inst_2 _inst_3))) c (FunLike.coe.{max (succ u2) (succ u3), succ u3, succ u2} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) B (fun (_x : B) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : B) => A) _x) (MulHomClass.toFunLike.{max u2 u3, u3, u2} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) B A (MulOneClass.toMul.{u3} B (Monoid.toMulOneClass.{u3} B _inst_4)) (MulOneClass.toMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u3, u3, u2} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2) (MonoidHom.monoidHomClass.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)))) f x))) -> (MulDistribMulAction.{u1, u3} M B _inst_1 _inst_4)
+ forall {M : Type.{u1}} {A : Type.{u2}} {B : Type.{u3}} [_inst_1 : Monoid.{u1} M] [_inst_2 : Monoid.{u2} A] [_inst_3 : MulDistribMulAction.{u1, u2} M A _inst_1 _inst_2] [_inst_4 : Monoid.{u3} B] [_inst_5 : SMul.{u1, u3} M B] (f : MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)), (Function.Injective.{succ u3, succ u2} B A (FunLike.coe.{max (succ u2) (succ u3), succ u3, succ u2} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) B (fun (_x : B) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : B) => A) _x) (MulHomClass.toFunLike.{max u2 u3, u3, u2} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) B A (MulOneClass.toMul.{u3} B (Monoid.toMulOneClass.{u3} B _inst_4)) (MulOneClass.toMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u3, u3, u2} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2) (MonoidHom.monoidHomClass.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)))) f)) -> (forall (c : M) (x : B), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : B) => A) (HSMul.hSMul.{u1, u3, u3} M B B (instHSMul.{u1, u3} M B _inst_5) c x)) (FunLike.coe.{max (succ u2) (succ u3), succ u3, succ u2} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) B (fun (_x : B) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : B) => A) _x) (MulHomClass.toFunLike.{max u2 u3, u3, u2} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) B A (MulOneClass.toMul.{u3} B (Monoid.toMulOneClass.{u3} B _inst_4)) (MulOneClass.toMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u3, u3, u2} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2) (MonoidHom.monoidHomClass.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)))) f (HSMul.hSMul.{u1, u3, u3} M B B (instHSMul.{u1, u3} M B _inst_5) c x)) (HSMul.hSMul.{u1, u2, u2} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : B) => A) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : B) => A) x) (instHSMul.{u1, u2} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : B) => A) x) (MulAction.toSMul.{u1, u2} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : B) => A) x) _inst_1 (MulDistribMulAction.toMulAction.{u1, u2} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : B) => A) x) _inst_1 _inst_2 _inst_3))) c (FunLike.coe.{max (succ u2) (succ u3), succ u3, succ u2} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) B (fun (_x : B) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : B) => A) _x) (MulHomClass.toFunLike.{max u2 u3, u3, u2} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) B A (MulOneClass.toMul.{u3} B (Monoid.toMulOneClass.{u3} B _inst_4)) (MulOneClass.toMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u3, u3, u2} (MonoidHom.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)) B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2) (MonoidHom.monoidHomClass.{u3, u2} B A (Monoid.toMulOneClass.{u3} B _inst_4) (Monoid.toMulOneClass.{u2} A _inst_2)))) f x))) -> (MulDistribMulAction.{u1, u3} M B _inst_1 _inst_4)
Case conversion may be inaccurate. Consider using '#align function.injective.mul_distrib_mul_action Function.Injective.mulDistribMulActionₓ'. -/
/-- Pullback a multiplicative distributive multiplicative action along an injective monoid
homomorphism.
@@ -1295,7 +1295,7 @@ protected def Function.Injective.mulDistribMulAction [Monoid B] [SMul M B] (f :
lean 3 declaration is
forall {M : Type.{u1}} {A : Type.{u2}} {B : Type.{u3}} [_inst_1 : Monoid.{u1} M] [_inst_2 : Monoid.{u2} A] [_inst_3 : MulDistribMulAction.{u1, u2} M A _inst_1 _inst_2] [_inst_4 : Monoid.{u3} B] [_inst_5 : SMul.{u1, u3} M B] (f : MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)), (Function.Surjective.{succ u2, succ u3} A B (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) (fun (_x : MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) => A -> B) (MonoidHom.hasCoeToFun.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) f)) -> (forall (c : M) (x : A), Eq.{succ u3} B (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) (fun (_x : MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) => A -> B) (MonoidHom.hasCoeToFun.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) f (SMul.smul.{u1, u2} M A (MulAction.toHasSmul.{u1, u2} M A _inst_1 (MulDistribMulAction.toMulAction.{u1, u2} M A _inst_1 _inst_2 _inst_3)) c x)) (SMul.smul.{u1, u3} M B _inst_5 c (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) (fun (_x : MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) => A -> B) (MonoidHom.hasCoeToFun.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) f x))) -> (MulDistribMulAction.{u1, u3} M B _inst_1 _inst_4)
but is expected to have type
- forall {M : Type.{u1}} {A : Type.{u2}} {B : Type.{u3}} [_inst_1 : Monoid.{u1} M] [_inst_2 : Monoid.{u2} A] [_inst_3 : MulDistribMulAction.{u1, u2} M A _inst_1 _inst_2] [_inst_4 : Monoid.{u3} B] [_inst_5 : SMul.{u1, u3} M B] (f : MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)), (Function.Surjective.{succ u2, succ u3} A B (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : A) => B) _x) (MulHomClass.toFunLike.{max u2 u3, u2, u3} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) A B (MulOneClass.toMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_2)) (MulOneClass.toMul.{u3} B (Monoid.toMulOneClass.{u3} B _inst_4)) (MonoidHomClass.toMulHomClass.{max u2 u3, u2, u3} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4) (MonoidHom.monoidHomClass.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)))) f)) -> (forall (c : M) (x : A), Eq.{succ u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : A) => B) (HSMul.hSMul.{u1, u2, u2} M A A (instHSMul.{u1, u2} M A (MulAction.toSMul.{u1, u2} M A _inst_1 (MulDistribMulAction.toMulAction.{u1, u2} M A _inst_1 _inst_2 _inst_3))) c x)) (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : A) => B) _x) (MulHomClass.toFunLike.{max u2 u3, u2, u3} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) A B (MulOneClass.toMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_2)) (MulOneClass.toMul.{u3} B (Monoid.toMulOneClass.{u3} B _inst_4)) (MonoidHomClass.toMulHomClass.{max u2 u3, u2, u3} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4) (MonoidHom.monoidHomClass.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)))) f (HSMul.hSMul.{u1, u2, u2} M A A (instHSMul.{u1, u2} M A (MulAction.toSMul.{u1, u2} M A _inst_1 (MulDistribMulAction.toMulAction.{u1, u2} M A _inst_1 _inst_2 _inst_3))) c x)) (HSMul.hSMul.{u1, u3, u3} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : A) => B) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : A) => B) x) (instHSMul.{u1, u3} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : A) => B) x) _inst_5) c (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : A) => B) _x) (MulHomClass.toFunLike.{max u2 u3, u2, u3} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) A B (MulOneClass.toMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_2)) (MulOneClass.toMul.{u3} B (Monoid.toMulOneClass.{u3} B _inst_4)) (MonoidHomClass.toMulHomClass.{max u2 u3, u2, u3} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4) (MonoidHom.monoidHomClass.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)))) f x))) -> (MulDistribMulAction.{u1, u3} M B _inst_1 _inst_4)
+ forall {M : Type.{u1}} {A : Type.{u2}} {B : Type.{u3}} [_inst_1 : Monoid.{u1} M] [_inst_2 : Monoid.{u2} A] [_inst_3 : MulDistribMulAction.{u1, u2} M A _inst_1 _inst_2] [_inst_4 : Monoid.{u3} B] [_inst_5 : SMul.{u1, u3} M B] (f : MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)), (Function.Surjective.{succ u2, succ u3} A B (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : A) => B) _x) (MulHomClass.toFunLike.{max u2 u3, u2, u3} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) A B (MulOneClass.toMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_2)) (MulOneClass.toMul.{u3} B (Monoid.toMulOneClass.{u3} B _inst_4)) (MonoidHomClass.toMulHomClass.{max u2 u3, u2, u3} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4) (MonoidHom.monoidHomClass.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)))) f)) -> (forall (c : M) (x : A), Eq.{succ u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : A) => B) (HSMul.hSMul.{u1, u2, u2} M A A (instHSMul.{u1, u2} M A (MulAction.toSMul.{u1, u2} M A _inst_1 (MulDistribMulAction.toMulAction.{u1, u2} M A _inst_1 _inst_2 _inst_3))) c x)) (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : A) => B) _x) (MulHomClass.toFunLike.{max u2 u3, u2, u3} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) A B (MulOneClass.toMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_2)) (MulOneClass.toMul.{u3} B (Monoid.toMulOneClass.{u3} B _inst_4)) (MonoidHomClass.toMulHomClass.{max u2 u3, u2, u3} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4) (MonoidHom.monoidHomClass.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)))) f (HSMul.hSMul.{u1, u2, u2} M A A (instHSMul.{u1, u2} M A (MulAction.toSMul.{u1, u2} M A _inst_1 (MulDistribMulAction.toMulAction.{u1, u2} M A _inst_1 _inst_2 _inst_3))) c x)) (HSMul.hSMul.{u1, u3, u3} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : A) => B) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : A) => B) x) (instHSMul.{u1, u3} M ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : A) => B) x) _inst_5) c (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : A) => B) _x) (MulHomClass.toFunLike.{max u2 u3, u2, u3} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) A B (MulOneClass.toMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_2)) (MulOneClass.toMul.{u3} B (Monoid.toMulOneClass.{u3} B _inst_4)) (MonoidHomClass.toMulHomClass.{max u2 u3, u2, u3} (MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)) A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4) (MonoidHom.monoidHomClass.{u2, u3} A B (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u3} B _inst_4)))) f x))) -> (MulDistribMulAction.{u1, u3} M B _inst_1 _inst_4)
Case conversion may be inaccurate. Consider using '#align function.surjective.mul_distrib_mul_action Function.Surjective.mulDistribMulActionₓ'. -/
/-- Pushforward a multiplicative distributive multiplicative action along a surjective monoid
homomorphism.
@@ -1342,7 +1342,7 @@ variable {A}
lean 3 declaration is
forall {M : Type.{u1}} {A : Type.{u2}} [_inst_1 : Monoid.{u1} M] [_inst_2 : Monoid.{u2} A] [_inst_3 : MulDistribMulAction.{u1, u2} M A _inst_1 _inst_2] (r : M) (x : A), Eq.{succ u2} A (coeFn.{succ u2, succ u2} (MonoidHom.{u2, u2} A A (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u2} A _inst_2)) (fun (_x : MonoidHom.{u2, u2} A A (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u2} A _inst_2)) => A -> A) (MonoidHom.hasCoeToFun.{u2, u2} A A (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u2} A _inst_2)) (MulDistribMulAction.toMonoidHom.{u1, u2} M A _inst_1 _inst_2 _inst_3 r) x) (SMul.smul.{u1, u2} M A (MulAction.toHasSmul.{u1, u2} M A _inst_1 (MulDistribMulAction.toMulAction.{u1, u2} M A _inst_1 _inst_2 _inst_3)) r x)
but is expected to have type
- forall {M : Type.{u1}} {A : Type.{u2}} [_inst_1 : Monoid.{u1} M] [_inst_2 : Monoid.{u2} A] [_inst_3 : MulDistribMulAction.{u1, u2} M A _inst_1 _inst_2] (r : M) (x : A), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : A) => A) x) (FunLike.coe.{succ u2, succ u2, succ u2} (MonoidHom.{u2, u2} A A (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u2} A _inst_2)) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : A) => A) _x) (MulHomClass.toFunLike.{u2, u2, u2} (MonoidHom.{u2, u2} A A (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u2} A _inst_2)) A A (MulOneClass.toMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_2)) (MulOneClass.toMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_2)) (MonoidHomClass.toMulHomClass.{u2, u2, u2} (MonoidHom.{u2, u2} A A (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u2} A _inst_2)) A A (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u2} A _inst_2) (MonoidHom.monoidHomClass.{u2, u2} A A (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u2} A _inst_2)))) (MulDistribMulAction.toMonoidHom.{u1, u2} M A _inst_1 _inst_2 _inst_3 r) x) (HSMul.hSMul.{u1, u2, u2} M A A (instHSMul.{u1, u2} M A (MulAction.toSMul.{u1, u2} M A _inst_1 (MulDistribMulAction.toMulAction.{u1, u2} M A _inst_1 _inst_2 _inst_3))) r x)
+ forall {M : Type.{u1}} {A : Type.{u2}} [_inst_1 : Monoid.{u1} M] [_inst_2 : Monoid.{u2} A] [_inst_3 : MulDistribMulAction.{u1, u2} M A _inst_1 _inst_2] (r : M) (x : A), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : A) => A) x) (FunLike.coe.{succ u2, succ u2, succ u2} (MonoidHom.{u2, u2} A A (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u2} A _inst_2)) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : A) => A) _x) (MulHomClass.toFunLike.{u2, u2, u2} (MonoidHom.{u2, u2} A A (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u2} A _inst_2)) A A (MulOneClass.toMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_2)) (MulOneClass.toMul.{u2} A (Monoid.toMulOneClass.{u2} A _inst_2)) (MonoidHomClass.toMulHomClass.{u2, u2, u2} (MonoidHom.{u2, u2} A A (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u2} A _inst_2)) A A (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u2} A _inst_2) (MonoidHom.monoidHomClass.{u2, u2} A A (Monoid.toMulOneClass.{u2} A _inst_2) (Monoid.toMulOneClass.{u2} A _inst_2)))) (MulDistribMulAction.toMonoidHom.{u1, u2} M A _inst_1 _inst_2 _inst_3 r) x) (HSMul.hSMul.{u1, u2, u2} M A A (instHSMul.{u1, u2} M A (MulAction.toSMul.{u1, u2} M A _inst_1 (MulDistribMulAction.toMulAction.{u1, u2} M A _inst_1 _inst_2 _inst_3))) r x)
Case conversion may be inaccurate. Consider using '#align mul_distrib_mul_action.to_monoid_hom_apply MulDistribMulAction.toMonoidHom_applyₓ'. -/
@[simp]
theorem MulDistribMulAction.toMonoidHom_apply (r : M) (x : A) :
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
@@ -226,12 +226,14 @@ theorem SMulCommClass.symm (M N α : Type*) [SMul M α] [SMul N α] [SMulCommCla
because this would cause a loop in the instance search graph. -/
add_decl_doc VAddCommClass.symm
+@[to_additive]
theorem Function.Injective.smulCommClass [SMul M α] [SMul N α] [SMul M β] [SMul N β]
[SMulCommClass M N β] {f : α → β} (hf : Function.Injective f)
(h₁ : ∀ (c : M) x, f (c • x) = c • f x) (h₂ : ∀ (c : N) x, f (c • x) = c • f x) :
SMulCommClass M N α where
smul_comm c₁ c₂ x := hf <| by simp only [h₁, h₂, smul_comm c₁ c₂ (f x)]
+@[to_additive]
theorem Function.Surjective.smulCommClass [SMul M α] [SMul N α] [SMul M β] [SMul N β]
[SMulCommClass M N α] {f : α → β} (hf : Function.Surjective f)
(h₁ : ∀ (c : M) x, f (c • x) = c • f x) (h₂ : ∀ (c : N) x, f (c • x) = c • f x) :
@@ -846,7 +846,7 @@ theorem smul_add (a : M) (b₁ b₂ : A) : a • (b₁ + b₂) = a • b₁ + a
instance AddMonoidHom.smulZeroClass [AddZeroClass B] : SMulZeroClass M (B →+ A) where
smul r f :=
- { toFun := (fun a => r • (f a))
+ { toFun := fun a => r • (f a)
map_zero' := by simp only [map_zero, smul_zero]
map_add' := fun x y => by simp only [map_add, smul_add] }
smul_zero r := ext fun _ => smul_zero _
@@ -628,9 +628,9 @@ def compHom [Monoid N] (g : N →* M) :
MulAction N α where
smul := SMul.comp.smul g
-- Porting note: was `by simp [g.map_one, MulAction.one_smul]`
- one_smul _ := by simp [(· • ·)]; apply MulAction.one_smul
+ one_smul _ := by simpa [(· • ·)] using MulAction.one_smul ..
-- Porting note: was `by simp [g.map_mul, MulAction.mul_smul]`
- mul_smul _ _ _ := by simp [(· • ·)]; apply MulAction.mul_smul
+ mul_smul _ _ _ := by simpa [(· • ·)] using MulAction.mul_smul ..
#align mul_action.comp_hom MulAction.compHom
#align add_action.comp_hom AddAction.compHom
This is a very large PR, but it has been reviewed piecemeal already in PRs to the bump/v4.7.0
branch as we update to intermediate nightlies.
Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Kyle Miller <kmill31415@gmail.com> Co-authored-by: damiano <adomani@gmail.com>
@@ -377,7 +377,8 @@ are still metavariables.
are still metavariables."]
theorem comp.isScalarTower [SMul M β] [SMul α β] [IsScalarTower M α β] (g : N → M) : by
haveI := comp α g; haveI := comp β g; exact IsScalarTower N α β :=
- { comp α g, comp β g with
+ { __ := comp α g
+ __ := comp β g
smul_assoc := fun n => smul_assoc (g n) }
#align has_smul.comp.is_scalar_tower SMul.comp.isScalarTower
#align has_vadd.comp.vadd_assoc_class VAdd.comp.isScalarTower
@@ -391,7 +392,7 @@ are still metavariables.
theorem comp.smulCommClass [SMul β α] [SMulCommClass M β α] (g : N → M) :
haveI := comp α g
SMulCommClass N β α :=
- { comp α g with
+ { __ := comp α g
smul_comm := fun n => smul_comm (g n) }
#align has_smul.comp.smul_comm_class SMul.comp.smulCommClass
#align has_vadd.comp.vadd_comm_class VAdd.comp.vaddCommClass
@@ -405,7 +406,7 @@ are still metavariables.
theorem comp.smulCommClass' [SMul β α] [SMulCommClass β M α] (g : N → M) :
haveI := comp α g
SMulCommClass β N α :=
- { comp α g with
+ { __ := comp α g
smul_comm := fun _ n => smul_comm _ (g n) }
#align has_smul.comp.smul_comm_class' SMul.comp.smulCommClass'
#align has_vadd.comp.vadd_comm_class' VAdd.comp.vaddCommClass'
Given a Hahn series x
and a scalar r
such that r • x ≠ 0
, the order of r • x
is not strictly less than the order of x
. If the exponent poset is linearly ordered, the order of x
is less than or equal to the order of r • x
. (Note that the order of a Hahn series is not uniquely defined when the exponent poset is not linearly ordered.) This is a complement to the addition result HahnSeries.min_order_le_order_add
.
@@ -763,6 +763,11 @@ theorem smul_zero (a : M) : a • (0 : A) = 0 :=
lemma smul_ite_zero (p : Prop) [Decidable p] (a : M) (b : A) :
(a • if p then b else 0) = if p then a • b else 0 := by split_ifs <;> simp
+lemma smul_eq_zero_of_right (a : M) {b : A} (h : b = 0) : a • b = 0 := h.symm ▸ smul_zero a
+#align smul_eq_zero_of_right smul_eq_zero_of_right
+lemma right_ne_zero_of_smul {a : M} {b : A} : a • b ≠ 0 → b ≠ 0 := mt <| smul_eq_zero_of_right a
+#align right_ne_zero_of_smul right_ne_zero_of_smul
+
/-- Pullback a zero-preserving scalar multiplication along an injective zero-preserving map.
See note [reducible non-instances]. -/
@[reducible]
@@ -432,6 +432,12 @@ theorem smul_mul_assoc [Mul β] [SMul α β] [IsScalarTower α β β] (r : α) (
#align smul_mul_assoc smul_mul_assoc
#align vadd_add_assoc vadd_add_assoc
+/-- Note that the `IsScalarTower α β β` typeclass argument is usually satisfied by `Algebra α β`.
+-/
+@[to_additive]
+lemma smul_div_assoc [DivInvMonoid β] [SMul α β] [IsScalarTower α β β] (r : α) (x y : β) :
+ r • x / y = r • (x / y) := by simp [div_eq_mul_inv, smul_mul_assoc]
+
@[to_additive]
theorem smul_smul_smul_comm [SMul α β] [SMul α γ] [SMul β δ] [SMul α δ] [SMul γ δ]
[IsScalarTower α β δ] [IsScalarTower α γ δ] [SMulCommClass β γ δ] (a : α) (b : β) (c : γ)
@@ -653,6 +653,19 @@ theorem isPretransitive_compHom
obtain ⟨e, rfl⟩ : ∃ e, f e = m := hf m
exact ⟨e, rfl⟩
+@[to_additive]
+theorem IsPretransitive.of_smul_eq {M N α : Type*} [SMul M α] [SMul N α]
+ [IsPretransitive M α] (f : M → N) (hf : ∀ {c : M} {x : α}, f c • x = c • x) :
+ IsPretransitive N α :=
+ ⟨fun x y ↦ (exists_smul_eq x y).elim fun m h ↦ ⟨f m, hf.trans h⟩⟩
+
+@[to_additive]
+theorem IsPretransitive.of_compHom
+ {M N α : Type*} [Monoid M] [Monoid N] [MulAction N α]
+ (f : M →* N) [h : letI := compHom α f; IsPretransitive M α] :
+ IsPretransitive N α :=
+ letI := compHom α f; h.of_smul_eq f rfl
+
end MulAction
end
@@ -666,6 +679,12 @@ theorem smul_one_smul {M} (N) [Monoid N] [SMul M N] [MulAction N α] [SMul M α]
#align smul_one_smul smul_one_smul
#align vadd_zero_vadd vadd_zero_vadd
+@[to_additive]
+theorem MulAction.IsPretransitive.of_isScalarTower (M : Type*) {N α : Type*} [Monoid N] [SMul M N]
+ [MulAction N α] [SMul M α] [IsScalarTower M N α] [IsPretransitive M α] :
+ IsPretransitive N α :=
+ of_smul_eq (fun x : M ↦ x • 1) (smul_one_smul N _ _)
+
@[to_additive (attr := simp)]
theorem smul_one_mul {M N} [MulOneClass N] [SMul M N] [IsScalarTower M N N] (x : M) (y : N) :
x • (1 : N) * y = x • y := by rw [smul_mul_assoc, one_mul]
Natural strengthening/extension of MonoidHom/RingHom.smulOneHom
. Follow-up of #9064.
monoidHomEquivMulActionIsScalarTower
: A homomorphism between two monoids M and N can be equivalently specified by a multiplicative action of M on N that is compatible with the multiplication on N.
ringHomEquivModuleIsScalarTower
: A homomorphism between semirings R and S can be equivalently specified by a R-module structure on S such that S/S/R is a scalar tower.
Mathlib doesn't have a typeclass for RingHom between noncommutative rings, but ringHomEquivModuleIsScalarTower
shows we can achieve the same effect with the combination of Module + IsScalarTower.
Co-authored-by: Junyan Xu <junyanxu.math@gmail.com> Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
@@ -707,6 +707,17 @@ def MonoidHom.smulOneHom {M N} [Monoid M] [MulOneClass N] [MulAction M N] [IsSca
#align smul_one_hom_apply MonoidHom.smulOneHom_apply
#align vadd_zero_hom_apply AddMonoidHom.vaddZeroHom_apply
+/-- A monoid homomorphism between two monoids M and N can be equivalently specified by a
+multiplicative action of M on N that is compatible with the multiplication on N. -/
+@[to_additive "A monoid homomorphism between two additive monoids M and N can be equivalently
+ specified by an additive action of M on N that is compatible with the addition on N."]
+def monoidHomEquivMulActionIsScalarTower (M N) [Monoid M] [Monoid N] :
+ (M →* N) ≃ {_inst : MulAction M N // IsScalarTower M N N} where
+ toFun f := ⟨MulAction.compHom N f, SMul.comp.isScalarTower _⟩
+ invFun := fun ⟨_, _⟩ ↦ MonoidHom.smulOneHom
+ left_inv f := MonoidHom.ext fun m ↦ mul_one (f m)
+ right_inv := fun ⟨_, _⟩ ↦ Subtype.ext <| MulAction.ext _ _ <| funext₂ <| smul_one_smul N
+
end CompatibleScalar
/-- Typeclass for scalar multiplication that preserves `0` on the right. -/
Generalise pow_ite
/ite_pow
and give a version of pow_add_pow_le
that doesn't require the exponent to be nonzero.
From LeanAPAP
@@ -458,24 +458,6 @@ theorem Commute.smul_left [Mul α] [SMulCommClass M α α] [IsScalarTower M α
end
-section ite
-
-variable [SMul M α] (p : Prop) [Decidable p]
-
-@[to_additive]
-theorem ite_smul (a₁ a₂ : M) (b : α) : ite p a₁ a₂ • b = ite p (a₁ • b) (a₂ • b) := by
- split_ifs <;> rfl
-#align ite_smul ite_smul
-#align ite_vadd ite_vadd
-
-@[to_additive]
-theorem smul_ite (a : M) (b₁ b₂ : α) : a • ite p b₁ b₂ = ite p (a • b₁) (a • b₂) := by
- split_ifs <;> rfl
-#align smul_ite smul_ite
-#align vadd_ite vadd_ite
-
-end ite
-
section
variable [Monoid M] [MulAction M α]
@@ -742,9 +724,8 @@ theorem smul_zero (a : M) : a • (0 : A) = 0 :=
SMulZeroClass.smul_zero _
#align smul_zero smul_zero
-@[simp]
lemma smul_ite_zero (p : Prop) [Decidable p] (a : M) (b : A) :
- (a • if p then b else 0) = if p then a • b else 0 := by rw [smul_ite, smul_zero]
+ (a • if p then b else 0) = if p then a • b else 0 := by split_ifs <;> simp
/-- Pullback a zero-preserving scalar multiplication along an injective zero-preserving map.
See note [reducible non-instances]. -/
@@ -594,6 +594,16 @@ theorem smul_mul_smul [Mul α] (r s : M) (x y : α) [IsScalarTower M α α] [SMu
#align smul_mul_smul smul_mul_smul
#align vadd_add_vadd vadd_add_vadd
+section Monoid
+variable [Monoid N] [MulAction M N] [IsScalarTower M N N] [SMulCommClass M N N]
+
+lemma smul_pow (r : M) (x : N) : ∀ n, (r • x) ^ n = r ^ n • x ^ n
+ | 0 => by simp
+ | n + 1 => by rw [pow_succ', smul_pow _ _ n, smul_mul_smul, ← pow_succ', ← pow_succ']
+#align smul_pow smul_pow
+
+end Monoid
+
end
namespace MulAction
@@ -1069,6 +1079,10 @@ theorem MulDistribMulAction.toMonoidHom_apply (r : M) (x : A) :
rfl
#align mul_distrib_mul_action.to_monoid_hom_apply MulDistribMulAction.toMonoidHom_apply
+@[simp] lemma smul_pow' (r : M) (x : A) (n : ℕ) : r • x ^ n = (r • x) ^ n :=
+ (MulDistribMulAction.toMonoidHom _ _).map_pow _ _
+#align smul_pow' smul_pow'
+
variable (M A)
/-- Each element of the monoid defines a monoid homomorphism. -/
@@ -705,15 +705,15 @@ theorem SMulCommClass.of_mul_smul_one {M N} [Monoid N] [SMul M N]
@[to_additive (attr := simps)
"If the additive action of `M` on `N` is compatible with addition on `N`, then
`fun x => x +ᵥ 0` is an additive monoid homomorphism from `M` to `N`."]
-def smulOneHom {M N} [Monoid M] [Monoid N] [MulAction M N] [IsScalarTower M N N] :
+def MonoidHom.smulOneHom {M N} [Monoid M] [MulOneClass N] [MulAction M N] [IsScalarTower M N N] :
M →* N where
toFun x := x • (1 : N)
map_one' := one_smul _ _
map_mul' x y := by rw [smul_one_mul, smul_smul]
-#align smul_one_hom smulOneHom
-#align vadd_zero_hom vaddZeroHom
-#align smul_one_hom_apply smulOneHom_apply
-#align vadd_zero_hom_apply vaddZeroHom_apply
+#align smul_one_hom MonoidHom.smulOneHom
+#align vadd_zero_hom AddMonoidHom.vaddZeroHom
+#align smul_one_hom_apply MonoidHom.smulOneHom_apply
+#align vadd_zero_hom_apply AddMonoidHom.vaddZeroHom_apply
end CompatibleScalar
(· op ·) a
by (a op ·)
(#8843)
I used the regex \(\(· (.) ·\) (.)\)
, replacing with ($2 $1 ·)
.
@@ -496,14 +496,13 @@ theorem one_smul (b : α) : (1 : M) • b = b :=
/-- `SMul` version of `one_mul_eq_id` -/
@[to_additive "`VAdd` version of `zero_add_eq_id`"]
-theorem one_smul_eq_id : ((· • ·) (1 : M) : α → α) = id :=
- funext <| one_smul _
+theorem one_smul_eq_id : (((1 : M) • ·) : α → α) = id := funext <| one_smul _
#align one_smul_eq_id one_smul_eq_id
#align zero_vadd_eq_id zero_vadd_eq_id
/-- `SMul` version of `comp_mul_left` -/
@[to_additive "`VAdd` version of `comp_add_left`"]
-theorem comp_smul_left (a₁ a₂ : M) : (· • ·) a₁ ∘ (· • ·) a₂ = ((· • ·) (a₁ * a₂) : α → α) :=
+theorem comp_smul_left (a₁ a₂ : M) : (a₁ • ·) ∘ (a₂ • ·) = (((a₁ * a₂) • ·) : α → α) :=
funext fun _ => (mul_smul _ _ _).symm
#align comp_smul_left comp_smul_left
#align comp_vadd_left comp_vadd_left
@@ -785,7 +784,7 @@ def SMulZeroClass.compFun (f : N → M) :
@[simps]
def SMulZeroClass.toZeroHom (x : M) :
ZeroHom A A where
- toFun := (· • ·) x
+ toFun := (x • ·)
map_zero' := smul_zero x
#align smul_zero_class.to_zero_hom SMulZeroClass.toZeroHom
#align smul_zero_class.to_zero_hom_apply SMulZeroClass.toZeroHom_apply
@@ -1057,7 +1056,7 @@ def MulDistribMulAction.compHom [Monoid N] (f : N →* M) : MulDistribMulAction
/-- Scalar multiplication by `r` as a `MonoidHom`. -/
def MulDistribMulAction.toMonoidHom (r : M) :
A →* A where
- toFun := (· • ·) r
+ toFun := (r • ·)
map_one' := smul_one r
map_mul' := smul_mul' r
#align mul_distrib_mul_action.to_monoid_hom MulDistribMulAction.toMonoidHom
(if P then 1 else 0) • a
(#8347)
Two simple lemmas, smul_ite_zero
, and ite_smul_zero
.
Also delete Finset.sum_univ_ite
since it is now provable by simp
thanks to these.
Rename and turn around the following to match the direction that simp
goes in:
ite_mul_zero_left
→ ite_zero_mul
ite_mul_zero_right
→ mul_ite_zero
ite_and_mul_zero
→ ite_zero_mul_ite_zero
@@ -733,6 +733,10 @@ theorem smul_zero (a : M) : a • (0 : A) = 0 :=
SMulZeroClass.smul_zero _
#align smul_zero smul_zero
+@[simp]
+lemma smul_ite_zero (p : Prop) [Decidable p] (a : M) (b : A) :
+ (a • if p then b else 0) = if p then a • b else 0 := by rw [smul_ite, smul_zero]
+
/-- Pullback a zero-preserving scalar multiplication along an injective zero-preserving map.
See note [reducible non-instances]. -/
@[reducible]
RingHom
application forms a MulDistribMulAction
(#8396)
This replaces a previous weaker result that it formed a DistribMulAction
.
The docstring seemed to assume this already existed, but forgot to mention the RingAut
version in another file.
@@ -1124,10 +1124,10 @@ This is generalized to bundled endomorphisms by:
* `AddMonoid.End.applyModule`
* `AddAut.applyDistribMulAction`
* `MulAut.applyMulDistribMulAction`
-* `RingHom.applyDistribMulAction`
* `LinearEquiv.applyDistribMulAction`
* `LinearMap.applyModule`
* `RingHom.applyMulSemiringAction`
+* `RingAut.applyMulSemiringAction`
* `AlgEquiv.applyMulSemiringAction`
-/
instance Function.End.applyMulAction :
@@ -1121,6 +1121,7 @@ variable {α}
This is generalized to bundled endomorphisms by:
* `Equiv.Perm.applyMulAction`
* `AddMonoid.End.applyDistribMulAction`
+* `AddMonoid.End.applyModule`
* `AddAut.applyDistribMulAction`
* `MulAut.applyMulDistribMulAction`
* `RingHom.applyDistribMulAction`
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
@@ -3,9 +3,9 @@ Copyright (c) 2018 Chris Hughes. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Chris Hughes, Yury Kudryashov
-/
-import Mathlib.Algebra.Group.TypeTags
import Mathlib.Algebra.Group.Commute.Defs
-import Mathlib.Algebra.Hom.Group.Defs
+import Mathlib.Algebra.Group.Hom.Defs
+import Mathlib.Algebra.Group.TypeTags
import Mathlib.Algebra.Opposites
import Mathlib.Logic.Embedding.Basic
@@ -642,6 +642,26 @@ an additive action of `N` on `α`.
See note [reducible non-instances]. -/
add_decl_doc AddAction.compHom
+@[to_additive]
+theorem compHom_smul_def
+ {E F G : Type*} [Monoid E] [Monoid F] [MulAction F G] (f : E →* F) (a : E) (x : G) :
+ letI : MulAction E G := MulAction.compHom _ f
+ a • x = (f a) • x := rfl
+
+/-- If an action is transitive, then composing this action with a surjective homomorphism gives
+again a transitive action. -/
+@[to_additive]
+theorem isPretransitive_compHom
+ {E F G : Type*} [Monoid E] [Monoid F] [MulAction F G] [IsPretransitive F G]
+ {f : E →* F} (hf : Surjective f) :
+ letI : MulAction E G := MulAction.compHom _ f
+ IsPretransitive E G := by
+ let _ : MulAction E G := MulAction.compHom _ f
+ refine ⟨fun x y ↦ ?_⟩
+ obtain ⟨m, rfl⟩ : ∃ m : F, m • x = y := exists_smul_eq F x y
+ obtain ⟨e, rfl⟩ : ∃ e, f e = m := hf m
+ exact ⟨e, rfl⟩
+
end MulAction
end
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.
@@ -802,7 +802,6 @@ See note [reducible non-instances]. -/
protected def Function.Injective.distribSMul [AddZeroClass B] [SMul M B] (f : B →+ A)
(hf : Injective f) (smul : ∀ (c : M) (x), f (c • x) = c • f x) : DistribSMul M B :=
{ hf.smulZeroClass f.toZeroHom smul with
- smul := (· • ·),
smul_add := fun c x y => hf <| by simp only [smul, map_add, smul_add] }
#align function.injective.distrib_smul Function.Injective.distribSMul
@@ -813,7 +812,6 @@ See note [reducible non-instances]. -/
protected def Function.Surjective.distribSMul [AddZeroClass B] [SMul M B] (f : A →+ B)
(hf : Surjective f) (smul : ∀ (c : M) (x), f (c • x) = c • f x) : DistribSMul M B :=
{ f.toZeroHom.smulZeroClass smul with
- smul := (· • ·),
smul_add := fun c x y => by
rcases hf x with ⟨x, rfl⟩
rcases hf y with ⟨y, rfl⟩
@@ -829,7 +827,6 @@ def Function.Surjective.distribSMulLeft {R S M : Type*} [AddZeroClass M] [Distri
[SMul S M] (f : R → S) (hf : Function.Surjective f)
(hsmul : ∀ (c) (x : M), f c • x = c • x) : DistribSMul S M :=
{ hf.smulZeroClassLeft f hsmul with
- smul := (· • ·),
smul_add := hf.forall.mpr fun c x y => by simp only [hsmul, smul_add] }
#align function.surjective.distrib_smul_left Function.Surjective.distribSMulLeft
@@ -840,7 +837,6 @@ See note [reducible non-instances]. -/
@[reducible]
def DistribSMul.compFun (f : N → M) : DistribSMul N A :=
{ SMulZeroClass.compFun A f with
- smul := SMul.comp.smul f,
smul_add := fun x => smul_add (f x) }
#align distrib_smul.comp_fun DistribSMul.compFun
@@ -888,7 +884,7 @@ See note [reducible non-instances]. -/
@[reducible]
protected def Function.Injective.distribMulAction [AddMonoid B] [SMul M B] (f : B →+ A)
(hf : Injective f) (smul : ∀ (c : M) (x), f (c • x) = c • f x) : DistribMulAction M B :=
- { hf.distribSMul f smul, hf.mulAction f smul with smul := (· • ·) }
+ { hf.distribSMul f smul, hf.mulAction f smul with }
#align function.injective.distrib_mul_action Function.Injective.distribMulAction
/-- Pushforward a distributive multiplicative action along a surjective additive monoid
@@ -897,7 +893,7 @@ See note [reducible non-instances]. -/
@[reducible]
protected def Function.Surjective.distribMulAction [AddMonoid B] [SMul M B] (f : A →+ B)
(hf : Surjective f) (smul : ∀ (c : M) (x), f (c • x) = c • f x) : DistribMulAction M B :=
- { hf.distribSMul f smul, hf.mulAction f smul with smul := (· • ·) }
+ { hf.distribSMul f smul, hf.mulAction f smul with }
#align function.surjective.distrib_mul_action Function.Surjective.distribMulAction
/-- Push forward the action of `R` on `M` along a compatible surjective map `f : R →* S`.
@@ -908,7 +904,7 @@ See also `Function.Surjective.mulActionLeft` and `Function.Surjective.moduleLeft
def Function.Surjective.distribMulActionLeft {R S M : Type*} [Monoid R] [AddMonoid M]
[DistribMulAction R M] [Monoid S] [SMul S M] (f : R →* S) (hf : Function.Surjective f)
(hsmul : ∀ (c) (x : M), f c • x = c • x) : DistribMulAction S M :=
- { hf.distribSMulLeft f hsmul, hf.mulActionLeft f hsmul with smul := (· • ·) }
+ { hf.distribSMulLeft f hsmul, hf.mulActionLeft f hsmul with }
#align function.surjective.distrib_mul_action_left Function.Surjective.distribMulActionLeft
variable (A)
@@ -917,7 +913,7 @@ variable (A)
See note [reducible non-instances]. -/
@[reducible]
def DistribMulAction.compHom [Monoid N] (f : N →* M) : DistribMulAction N A :=
- { DistribSMul.compFun A f, MulAction.compHom A f with smul := SMul.comp.smul f }
+ { DistribSMul.compFun A f, MulAction.compHom A f with }
#align distrib_mul_action.comp_hom DistribMulAction.compHom
/-- Each element of the monoid defines an additive monoid homomorphism. -/
@@ -1005,7 +1001,6 @@ See note [reducible non-instances]. -/
protected def Function.Injective.mulDistribMulAction [Monoid B] [SMul M B] (f : B →* A)
(hf : Injective f) (smul : ∀ (c : M) (x), f (c • x) = c • f x) : MulDistribMulAction M B :=
{ hf.mulAction f smul with
- smul := (· • ·),
smul_mul := fun c x y => hf <| by simp only [smul, f.map_mul, smul_mul'],
smul_one := fun c => hf <| by simp only [smul, f.map_one, smul_one] }
#align function.injective.mul_distrib_mul_action Function.Injective.mulDistribMulAction
@@ -1017,7 +1012,6 @@ See note [reducible non-instances]. -/
protected def Function.Surjective.mulDistribMulAction [Monoid B] [SMul M B] (f : A →* B)
(hf : Surjective f) (smul : ∀ (c : M) (x), f (c • x) = c • f x) : MulDistribMulAction M B :=
{ hf.mulAction f smul with
- smul := (· • ·),
smul_mul := fun c x y => by
rcases hf x with ⟨x, rfl⟩
rcases hf y with ⟨y, rfl⟩
@@ -1032,7 +1026,6 @@ See note [reducible non-instances]. -/
@[reducible]
def MulDistribMulAction.compHom [Monoid N] (f : N →* M) : MulDistribMulAction N A :=
{ MulAction.compHom A f with
- smul := SMul.comp.smul f,
smul_one := fun x => smul_one (f x),
smul_mul := fun x => smul_mul' (f x) }
#align mul_distrib_mul_action.comp_hom MulDistribMulAction.compHom
@@ -5,7 +5,7 @@ Authors: Chris Hughes, Yury Kudryashov
-/
import Mathlib.Algebra.Group.TypeTags
import Mathlib.Algebra.Group.Commute.Defs
-import Mathlib.Algebra.Hom.Group
+import Mathlib.Algebra.Hom.Group.Defs
import Mathlib.Algebra.Opposites
import Mathlib.Logic.Embedding.Basic
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Chris Hughes, Yury Kudryashov
-/
import Mathlib.Algebra.Group.TypeTags
-import Mathlib.Algebra.Group.Commute
+import Mathlib.Algebra.Group.Commute.Defs
import Mathlib.Algebra.Hom.Group
import Mathlib.Algebra.Opposites
import Mathlib.Logic.Embedding.Basic
@@ -1128,6 +1128,14 @@ theorem Function.End.smul_def (f : Function.End α) (a : α) : f • a = f a :=
rfl
#align function.End.smul_def Function.End.smul_def
+--TODO - This statement should be somethting like `toFun (f * g) = toFun f ∘ toFun g`
+theorem Function.End.mul_def (f g : Function.End α) : (f * g) = f ∘ g :=
+ rfl
+
+--TODO - This statement should be somethting like `toFun 1 = id`
+theorem Function.End.one_def : (1 : Function.End α) = id :=
+ rfl
+
/-- `Function.End.applyMulAction` is faithful. -/
instance Function.End.apply_FaithfulSMul : FaithfulSMul (Function.End α) α :=
⟨fun {_ _} => funext⟩
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -48,7 +48,7 @@ group action
-/
-variable {M N G A B α β γ δ : Type _}
+variable {M N G A B α β γ δ : Type*}
open Function (Injective Surjective)
@@ -58,14 +58,14 @@ open Function (Injective Surjective)
/-- Typeclass for faithful actions. -/
-class FaithfulVAdd (G : Type _) (P : Type _) [VAdd G P] : Prop where
+class FaithfulVAdd (G : Type*) (P : Type*) [VAdd G P] : Prop where
/-- Two elements `g₁` and `g₂` are equal whenever they act in the same way on all points. -/
eq_of_vadd_eq_vadd : ∀ {g₁ g₂ : G}, (∀ p : P, g₁ +ᵥ p = g₂ +ᵥ p) → g₁ = g₂
#align has_faithful_vadd FaithfulVAdd
/-- Typeclass for faithful actions. -/
@[to_additive]
-class FaithfulSMul (M : Type _) (α : Type _) [SMul M α] : Prop where
+class FaithfulSMul (M : Type*) (α : Type*) [SMul M α] : Prop where
/-- Two elements `m₁` and `m₂` are equal whenever they act in the same way on all points. -/
eq_of_smul_eq_smul : ∀ {m₁ m₂ : M}, (∀ a : α, m₁ • a = m₂ • a) → m₁ = m₂
#align has_faithful_smul FaithfulSMul
@@ -84,19 +84,19 @@ theorem smul_left_injective' [SMul M α] [FaithfulSMul M α] :
-- see Note [lower instance priority]
/-- See also `Monoid.toMulAction` and `MulZeroClass.toSMulWithZero`. -/
@[to_additive "See also `AddMonoid.toAddAction`"]
-instance (priority := 910) Mul.toSMul (α : Type _) [Mul α] : SMul α α :=
+instance (priority := 910) Mul.toSMul (α : Type*) [Mul α] : SMul α α :=
⟨(· * ·)⟩
#align has_mul.to_has_smul Mul.toSMul
#align has_add.to_has_vadd Add.toVAdd
@[to_additive (attr := simp)]
-theorem smul_eq_mul (α : Type _) [Mul α] {a a' : α} : a • a' = a * a' :=
+theorem smul_eq_mul (α : Type*) [Mul α] {a a' : α} : a • a' = a * a' :=
rfl
#align smul_eq_mul smul_eq_mul
#align vadd_eq_add vadd_eq_add
/-- Type class for additive monoid actions. -/
-class AddAction (G : Type _) (P : Type _) [AddMonoid G] extends VAdd G P where
+class AddAction (G : Type*) (P : Type*) [AddMonoid G] extends VAdd G P where
/-- Zero is a neutral element for `+ᵥ` -/
protected zero_vadd : ∀ p : P, (0 : G) +ᵥ p = p
/-- Associativity of `+` and `+ᵥ` -/
@@ -105,7 +105,7 @@ class AddAction (G : Type _) (P : Type _) [AddMonoid G] extends VAdd G P where
/-- Typeclass for multiplicative actions by monoids. This generalizes group actions. -/
@[to_additive (attr := ext)]
-class MulAction (α : Type _) (β : Type _) [Monoid α] extends SMul α β where
+class MulAction (α : Type*) (β : Type*) [Monoid α] extends SMul α β where
/-- One is the neutral element for `•` -/
protected one_smul : ∀ b : β, (1 : α) • b = b
/-- Associativity of `•` and `*` -/
@@ -131,7 +131,7 @@ property. We do not provide typeclasses `*Action.IsTransitive`; users should ass
/-- `M` acts pretransitively on `α` if for any `x y` there is `g` such that `g +ᵥ x = y`.
A transitive action should furthermore have `α` nonempty. -/
-class AddAction.IsPretransitive (M α : Type _) [VAdd M α] : Prop where
+class AddAction.IsPretransitive (M α : Type*) [VAdd M α] : Prop where
/-- There is `g` such that `g +ᵥ x = y`. -/
exists_vadd_eq : ∀ x y : α, ∃ g : M, g +ᵥ x = y
#align add_action.is_pretransitive AddAction.IsPretransitive
@@ -139,7 +139,7 @@ class AddAction.IsPretransitive (M α : Type _) [VAdd M α] : Prop where
/-- `M` acts pretransitively on `α` if for any `x y` there is `g` such that `g • x = y`.
A transitive action should furthermore have `α` nonempty. -/
@[to_additive]
-class MulAction.IsPretransitive (M α : Type _) [SMul M α] : Prop where
+class MulAction.IsPretransitive (M α : Type*) [SMul M α] : Prop where
/-- There is `g` such that `g • x = y`. -/
exists_smul_eq : ∀ x y : α, ∃ g : M, g • x = y
#align mul_action.is_pretransitive MulAction.IsPretransitive
@@ -175,14 +175,14 @@ end MulAction
/-- A typeclass mixin saying that two additive actions on the same space commute. -/
-class VAddCommClass (M N α : Type _) [VAdd M α] [VAdd N α] : Prop where
+class VAddCommClass (M N α : Type*) [VAdd M α] [VAdd N α] : Prop where
/-- `+ᵥ` is left commutative -/
vadd_comm : ∀ (m : M) (n : N) (a : α), m +ᵥ (n +ᵥ a) = n +ᵥ (m +ᵥ a)
#align vadd_comm_class VAddCommClass
/-- A typeclass mixin saying that two multiplicative actions on the same space commute. -/
@[to_additive]
-class SMulCommClass (M N α : Type _) [SMul M α] [SMul N α] : Prop where
+class SMulCommClass (M N α : Type*) [SMul M α] [SMul N α] : Prop where
/-- `•` is left commutative -/
smul_comm : ∀ (m : M) (n : N) (a : α), m • n • a = n • m • a
#align smul_comm_class SMulCommClass
@@ -216,7 +216,7 @@ An example of where this is used is `LinearMap.prod_equiv`.
/-- Commutativity of actions is a symmetric relation. This lemma can't be an instance because this
would cause a loop in the instance search graph. -/
@[to_additive]
-theorem SMulCommClass.symm (M N α : Type _) [SMul M α] [SMul N α] [SMulCommClass M N α] :
+theorem SMulCommClass.symm (M N α : Type*) [SMul M α] [SMul N α] [SMulCommClass M N α] :
SMulCommClass N M α :=
⟨fun a' a b => (smul_comm a a' b).symm⟩
#align smul_comm_class.symm SMulCommClass.symm
@@ -239,14 +239,14 @@ theorem Function.Surjective.smulCommClass [SMul M α] [SMul N α] [SMul M β] [S
smul_comm c₁ c₂ := hf.forall.2 fun x ↦ by simp only [← h₁, ← h₂, smul_comm c₁ c₂ x]
@[to_additive]
-instance smulCommClass_self (M α : Type _) [CommMonoid M] [MulAction M α] : SMulCommClass M M α :=
+instance smulCommClass_self (M α : Type*) [CommMonoid M] [MulAction M α] : SMulCommClass M M α :=
⟨fun a a' b => by rw [← mul_smul, mul_comm, mul_smul]⟩
#align smul_comm_class_self smulCommClass_self
#align vadd_comm_class_self vaddCommClass_self
/-- An instance of `VAddAssocClass M N α` states that the additive action of `M` on `α` is
determined by the additive actions of `M` on `N` and `N` on `α`. -/
-class VAddAssocClass (M N α : Type _) [VAdd M N] [VAdd N α] [VAdd M α] : Prop where
+class VAddAssocClass (M N α : Type*) [VAdd M N] [VAdd N α] [VAdd M α] : Prop where
/-- Associativity of `+ᵥ` -/
vadd_assoc : ∀ (x : M) (y : N) (z : α), x +ᵥ y +ᵥ z = x +ᵥ (y +ᵥ z)
#align vadd_assoc_class VAddAssocClass
@@ -255,7 +255,7 @@ class VAddAssocClass (M N α : Type _) [VAdd M N] [VAdd N α] [VAdd M α] : Prop
action of `M` on `α` is determined by the multiplicative actions of `M` on `N`
and `N` on `α`. -/
@[to_additive VAddAssocClass] -- TODO auto-translating
-class IsScalarTower (M N α : Type _) [SMul M N] [SMul N α] [SMul M α] : Prop where
+class IsScalarTower (M N α : Type*) [SMul M N] [SMul N α] [SMul M α] : Prop where
/-- Associativity of `•` -/
smul_assoc : ∀ (x : M) (y : N) (z : α), (x • y) • z = x • y • z
#align is_scalar_tower IsScalarTower
@@ -276,7 +276,7 @@ instance Semigroup.isScalarTower [Semigroup α] : IsScalarTower α α α :=
/-- A typeclass indicating that the right (aka `AddOpposite`) and left actions by `M` on `α` are
equal, that is that `M` acts centrally on `α`. This can be thought of as a version of commutativity
for `+ᵥ`. -/
-class IsCentralVAdd (M α : Type _) [VAdd M α] [VAdd Mᵃᵒᵖ α] : Prop where
+class IsCentralVAdd (M α : Type*) [VAdd M α] [VAdd Mᵃᵒᵖ α] : Prop where
/-- The right and left actions of `M` on `α` are equal. -/
op_vadd_eq_vadd : ∀ (m : M) (a : α), AddOpposite.op m +ᵥ a = m +ᵥ a
#align is_central_vadd IsCentralVAdd
@@ -285,7 +285,7 @@ class IsCentralVAdd (M α : Type _) [VAdd M α] [VAdd Mᵃᵒᵖ α] : Prop wher
equal, that is that `M` acts centrally on `α`. This can be thought of as a version of commutativity
for `•`. -/
@[to_additive]
-class IsCentralScalar (M α : Type _) [SMul M α] [SMul Mᵐᵒᵖ α] : Prop where
+class IsCentralScalar (M α : Type*) [SMul M α] [SMul Mᵐᵒᵖ α] : Prop where
/-- The right and left actions of `M` on `α` are equal. -/
op_smul_eq_smul : ∀ (m : M) (a : α), MulOpposite.op m • a = m • a
#align is_central_scalar IsCentralScalar
@@ -293,7 +293,7 @@ class IsCentralScalar (M α : Type _) [SMul M α] [SMul Mᵐᵒᵖ α] : Prop wh
attribute [simp] IsCentralScalar.op_smul_eq_smul
@[to_additive]
-theorem IsCentralScalar.unop_smul_eq_smul {M α : Type _} [SMul M α] [SMul Mᵐᵒᵖ α]
+theorem IsCentralScalar.unop_smul_eq_smul {M α : Type*} [SMul M α] [SMul Mᵐᵒᵖ α]
[IsCentralScalar M α] (m : Mᵐᵒᵖ) (a : α) : MulOpposite.unop m • a = m • a := by
induction m using MulOpposite.rec'
exact (IsCentralScalar.op_smul_eq_smul _ a).symm
@@ -546,7 +546,7 @@ See also `Function.Surjective.distribMulActionLeft` and `Function.Surjective.mod
-/
@[to_additive (attr := reducible)
"Push forward the action of `R` on `M` along a compatible surjective map `f : R →+ S`."]
-def Function.Surjective.mulActionLeft {R S M : Type _} [Monoid R] [MulAction R M] [Monoid S]
+def Function.Surjective.mulActionLeft {R S M : Type*} [Monoid R] [MulAction R M] [Monoid S]
[SMul S M] (f : R →* S) (hf : Function.Surjective f)
(hsmul : ∀ (c) (x : M), f c • x = c • x) :
MulAction S M where
@@ -699,7 +699,7 @@ def smulOneHom {M N} [Monoid M] [Monoid N] [MulAction M N] [IsScalarTower M N N]
end CompatibleScalar
/-- Typeclass for scalar multiplication that preserves `0` on the right. -/
-class SMulZeroClass (M A : Type _) [Zero A] extends SMul M A where
+class SMulZeroClass (M A : Type*) [Zero A] extends SMul M A where
/-- Multiplying `0` by a scalar gives `0` -/
smul_zero : ∀ a : M, a • (0 : A) = 0
#align smul_zero_class SMulZeroClass
@@ -738,7 +738,7 @@ protected def ZeroHom.smulZeroClass [Zero B] [SMul M B] (f : ZeroHom A B)
See also `Function.Surjective.distribMulActionLeft`.
-/
@[reducible]
-def Function.Surjective.smulZeroClassLeft {R S M : Type _} [Zero M] [SMulZeroClass R M]
+def Function.Surjective.smulZeroClassLeft {R S M : Type*} [Zero M] [SMulZeroClass R M]
[SMul S M] (f : R → S) (hf : Function.Surjective f)
(hsmul : ∀ (c) (x : M), f c • x = c • x) :
SMulZeroClass S M where
@@ -773,7 +773,7 @@ end smul_zero
This is exactly `DistribMulAction` without the `MulAction` part.
-/
@[ext]
-class DistribSMul (M A : Type _) [AddZeroClass A] extends SMulZeroClass M A where
+class DistribSMul (M A : Type*) [AddZeroClass A] extends SMulZeroClass M A where
/-- Scalar multiplication distributes across addition -/
smul_add : ∀ (a : M) (x y : A), a • (x + y) = a • x + a • y
#align distrib_smul DistribSMul
@@ -825,7 +825,7 @@ protected def Function.Surjective.distribSMul [AddZeroClass B] [SMul M B] (f : A
See also `Function.Surjective.distribMulActionLeft`.
-/
@[reducible]
-def Function.Surjective.distribSMulLeft {R S M : Type _} [AddZeroClass M] [DistribSMul R M]
+def Function.Surjective.distribSMulLeft {R S M : Type*} [AddZeroClass M] [DistribSMul R M]
[SMul S M] (f : R → S) (hf : Function.Surjective f)
(hsmul : ∀ (c) (x : M), f c • x = c • x) : DistribSMul S M :=
{ hf.smulZeroClassLeft f hsmul with
@@ -855,7 +855,7 @@ end DistribSMul
/-- Typeclass for multiplicative actions on additive structures. This generalizes group modules. -/
@[ext]
-class DistribMulAction (M A : Type _) [Monoid M] [AddMonoid A] extends MulAction M A where
+class DistribMulAction (M A : Type*) [Monoid M] [AddMonoid A] extends MulAction M A where
/-- Multiplying `0` by a scalar gives `0` -/
smul_zero : ∀ a : M, a • (0 : A) = 0
/-- Scalar multiplication distributes across addition -/
@@ -905,7 +905,7 @@ protected def Function.Surjective.distribMulAction [AddMonoid B] [SMul M B] (f :
See also `Function.Surjective.mulActionLeft` and `Function.Surjective.moduleLeft`.
-/
@[reducible]
-def Function.Surjective.distribMulActionLeft {R S M : Type _} [Monoid R] [AddMonoid M]
+def Function.Surjective.distribMulActionLeft {R S M : Type*} [Monoid R] [AddMonoid M]
[DistribMulAction R M] [Monoid S] [SMul S M] (f : R →* S) (hf : Function.Surjective f)
(hsmul : ∀ (c) (x : M), f c • x = c • x) : DistribMulAction S M :=
{ hf.distribSMulLeft f hsmul, hf.mulActionLeft f hsmul with smul := (· • ·) }
@@ -978,7 +978,7 @@ end
/-- Typeclass for multiplicative actions on multiplicative structures. This generalizes
conjugation actions. -/
@[ext]
-class MulDistribMulAction (M : Type _) (A : Type _) [Monoid M] [Monoid A] extends
+class MulDistribMulAction (M : Type*) (A : Type*) [Monoid M] [Monoid A] extends
MulAction M A where
/-- Distributivity of `•` across `*` -/
smul_mul : ∀ (r : M) (x y : A), r • (x * y) = r • x * r • y
with
instance construction patterns (#6241)
The general thought here is that
{ hf.distribMulAction f smul with
smul := (· • ·)
... }
is treated roughly as
let src := hf.distribMulAction f smul
{ toDistribMulAction :=
{ toMulAction :=
{ smul := (· • ·)
one_smul := src.one_smul
mul_smul := src.mul_smul}
smul_add := src.smul_add
smul_zero := src.smul_zero }
... }
which is a much larger term (especially once the let
is reduced, due to how many arguments hf.distribMulAction
consumes) than
{ toDistribMulAction := hf.distribMulAction f smul
... }
In some places the long version is maybe still more desirable, if we want a specific syntactic equality for smul
that the base structure defines differently; but none of the examples in this PR are such a case.
Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
Co-authored-by: Matthew Ballard <matt@mrb.email> Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
@@ -729,7 +729,6 @@ See note [reducible non-instances]. -/
protected def ZeroHom.smulZeroClass [Zero B] [SMul M B] (f : ZeroHom A B)
(smul : ∀ (c : M) (x), f (c • x) = c • f x) :
SMulZeroClass M B where
- smul := (· • ·)
-- Porting note: `simp` no longer works here.
smul_zero c := by rw [← map_zero f, ← smul, smul_zero]
#align zero_hom.smul_zero_class ZeroHom.smulZeroClass
@@ -2,11 +2,6 @@
Copyright (c) 2018 Chris Hughes. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Chris Hughes, Yury Kudryashov
-
-! This file was ported from Lean 3 source module group_theory.group_action.defs
-! leanprover-community/mathlib commit dad7ecf9a1feae63e6e49f07619b7087403fb8d4
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.Algebra.Group.TypeTags
import Mathlib.Algebra.Group.Commute
@@ -14,6 +9,8 @@ import Mathlib.Algebra.Hom.Group
import Mathlib.Algebra.Opposites
import Mathlib.Logic.Embedding.Basic
+#align_import group_theory.group_action.defs from "leanprover-community/mathlib"@"dad7ecf9a1feae63e6e49f07619b7087403fb8d4"
+
/-!
# Definitions of group actions
@@ -229,6 +229,18 @@ theorem SMulCommClass.symm (M N α : Type _) [SMul M α] [SMul N α] [SMulCommCl
because this would cause a loop in the instance search graph. -/
add_decl_doc VAddCommClass.symm
+theorem Function.Injective.smulCommClass [SMul M α] [SMul N α] [SMul M β] [SMul N β]
+ [SMulCommClass M N β] {f : α → β} (hf : Function.Injective f)
+ (h₁ : ∀ (c : M) x, f (c • x) = c • f x) (h₂ : ∀ (c : N) x, f (c • x) = c • f x) :
+ SMulCommClass M N α where
+ smul_comm c₁ c₂ x := hf <| by simp only [h₁, h₂, smul_comm c₁ c₂ (f x)]
+
+theorem Function.Surjective.smulCommClass [SMul M α] [SMul N α] [SMul M β] [SMul N β]
+ [SMulCommClass M N α] {f : α → β} (hf : Function.Surjective f)
+ (h₁ : ∀ (c : M) x, f (c • x) = c • f x) (h₂ : ∀ (c : N) x, f (c • x) = c • f x) :
+ SMulCommClass M N β where
+ smul_comm c₁ c₂ := hf.forall.2 fun x ↦ by simp only [← h₁, ← h₂, smul_comm c₁ c₂ x]
+
@[to_additive]
instance smulCommClass_self (M α : Type _) [CommMonoid M] [MulAction M α] : SMulCommClass M M α :=
⟨fun a a' b => by rw [← mul_smul, mul_comm, mul_smul]⟩
AddMonoidHom.distribMulAction
into 3 instances (#5380)
Add instances for ZeroSMulClass
and DistribSMul
with weaker
typeclass assumptions.
@@ -780,6 +780,13 @@ theorem smul_add (a : M) (b₁ b₂ : A) : a • (b₁ + b₂) = a • b₁ + a
DistribSMul.smul_add _ _ _
#align smul_add smul_add
+instance AddMonoidHom.smulZeroClass [AddZeroClass B] : SMulZeroClass M (B →+ A) where
+ smul r f :=
+ { toFun := (fun a => r • (f a))
+ map_zero' := by simp only [map_zero, smul_zero]
+ map_add' := fun x y => by simp only [map_add, smul_add] }
+ smul_zero r := ext fun _ => smul_zero _
+
/-- Pullback a distributive scalar multiplication along an injective additive monoid
homomorphism.
See note [reducible non-instances]. -/
@@ -281,6 +281,8 @@ class IsCentralScalar (M α : Type _) [SMul M α] [SMul Mᵐᵒᵖ α] : Prop wh
op_smul_eq_smul : ∀ (m : M) (a : α), MulOpposite.op m • a = m • a
#align is_central_scalar IsCentralScalar
+attribute [simp] IsCentralScalar.op_smul_eq_smul
+
@[to_additive]
theorem IsCentralScalar.unop_smul_eq_smul {M α : Type _} [SMul M α] [SMul Mᵐᵒᵖ α]
[IsCentralScalar M α] (m : Mᵐᵒᵖ) (a : α) : MulOpposite.unop m • a = m • a := by
@@ -827,7 +827,7 @@ def DistribSMul.compFun (f : N → M) : DistribSMul N A :=
smul_add := fun x => smul_add (f x) }
#align distrib_smul.comp_fun DistribSMul.compFun
-/-- Each element of the scalars defines a additive monoid homomorphism. -/
+/-- Each element of the scalars defines an additive monoid homomorphism. -/
@[simps]
def DistribSMul.toAddMonoidHom (x : M) : A →+ A :=
{ SMulZeroClass.toZeroHom A x with toFun := (· • ·) x, map_add' := smul_add x }
@@ -903,7 +903,7 @@ def DistribMulAction.compHom [Monoid N] (f : N →* M) : DistribMulAction N A :=
{ DistribSMul.compFun A f, MulAction.compHom A f with smul := SMul.comp.smul f }
#align distrib_mul_action.comp_hom DistribMulAction.compHom
-/-- Each element of the monoid defines a additive monoid homomorphism. -/
+/-- Each element of the monoid defines an additive monoid homomorphism. -/
@[simps!]
def DistribMulAction.toAddMonoidHom (x : M) : A →+ A :=
DistribSMul.toAddMonoidHom A x
@@ -389,7 +389,7 @@ theorem comp.smulCommClass [SMul β α] [SMulCommClass M β α] (g : N → M) :
are still metavariables.
-/
@[to_additive
- "This cannot be an instance because it can cause infinite loops wheneverthe `VAdd` arguments
+ "This cannot be an instance because it can cause infinite loops whenever the `VAdd` arguments
are still metavariables."]
theorem comp.smulCommClass' [SMul β α] [SMulCommClass β M α] (g : N → M) :
haveI := comp α g
fix-comments.py
on all files.@@ -1156,7 +1156,7 @@ def MulAction.ofEndHom [Monoid M] (f : M →* Function.End α) : MulAction M α
MulAction.compHom α f
#align mul_action.of_End_hom MulAction.ofEndHom
-/-! ### `additive`, `multiplicative` -/
+/-! ### `Additive`, `Multiplicative` -/
section
It turns out to be convenient to have MulOpposite α = AddOpposite α
true by definition, in the same way that it is convenient to have Additive α = α
; this means that we also get the defeq AddOpposite (Additive α) = MulOpposite α
, which is convenient when working with quotients.
This is a compromise between making MulOpposite α = AddOpposite α = α
(what we had in Lean 3) and
having no defeqs within those three types (which we had as of #1036).
This is motivated by #3333
@@ -283,8 +283,9 @@ class IsCentralScalar (M α : Type _) [SMul M α] [SMul Mᵐᵒᵖ α] : Prop wh
@[to_additive]
theorem IsCentralScalar.unop_smul_eq_smul {M α : Type _} [SMul M α] [SMul Mᵐᵒᵖ α]
- [IsCentralScalar M α] (m : Mᵐᵒᵖ) (a : α) : MulOpposite.unop m • a = m • a :=
- MulOpposite.rec (fun _ => (IsCentralScalar.op_smul_eq_smul _ _).symm) m
+ [IsCentralScalar M α] (m : Mᵐᵒᵖ) (a : α) : MulOpposite.unop m • a = m • a := by
+ induction m using MulOpposite.rec'
+ exact (IsCentralScalar.op_smul_eq_smul _ a).symm
#align is_central_scalar.unop_smul_eq_smul IsCentralScalar.unop_smul_eq_smul
#align is_central_vadd.unop_vadd_eq_vadd IsCentralVAdd.unop_vadd_eq_vadd
@@ -341,8 +341,7 @@ variable (α)
See note [reducible non-instances]. Since this is reducible, we make sure to go via
`SMul.comp.smul` to prevent typeclass inference unfolding too far. -/
-@[reducible,
- to_additive
+@[to_additive (attr := reducible)
"An additive action of `M` on `α` and a function `N → M` induces
an additive action of `N` on `α` "]
def comp (g : N → M) : SMul N α where smul := SMul.comp.smul g
@@ -502,7 +501,7 @@ variable {M}
/-- Pullback a multiplicative action along an injective map respecting `•`.
See note [reducible non-instances]. -/
@[to_additive (attr := reducible)
-"Pullback an additive action along an injective map respecting `+ᵥ`."]
+ "Pullback an additive action along an injective map respecting `+ᵥ`."]
protected def Function.Injective.mulAction [SMul M β] (f : β → α) (hf : Injective f)
(smul : ∀ (c : M) (x), f (c • x) = c • f x) :
MulAction M β where
@@ -515,7 +514,7 @@ protected def Function.Injective.mulAction [SMul M β] (f : β → α) (hf : Inj
/-- Pushforward a multiplicative action along a surjective map respecting `•`.
See note [reducible non-instances]. -/
@[to_additive (attr := reducible)
-"Pushforward an additive action along a surjective map respecting `+ᵥ`."]
+ "Pushforward an additive action along a surjective map respecting `+ᵥ`."]
protected def Function.Surjective.mulAction [SMul M β] (f : α → β) (hf : Surjective f)
(smul : ∀ (c : M) (x), f (c • x) = c • f x) :
MulAction M β where
@@ -533,9 +532,8 @@ protected def Function.Surjective.mulAction [SMul M β] (f : α → β) (hf : Su
See also `Function.Surjective.distribMulActionLeft` and `Function.Surjective.moduleLeft`.
-/
-@[reducible,
- to_additive
- "Push forward the action of `R` on `M` along a compatible surjective map `f : R →+ S`."]
+@[to_additive (attr := reducible)
+ "Push forward the action of `R` on `M` along a compatible surjective map `f : R →+ S`."]
def Function.Surjective.mulActionLeft {R S M : Type _} [Monoid R] [MulAction R M] [Monoid S]
[SMul S M] (f : R →* S) (hf : Function.Surjective f)
(hsmul : ∀ (c) (x : M), f c • x = c • x) :
@@ -674,8 +672,8 @@ theorem SMulCommClass.of_mul_smul_one {M N} [Monoid N] [SMul M N]
/-- If the multiplicative action of `M` on `N` is compatible with multiplication on `N`, then
`fun x => x • 1` is a monoid homomorphism from `M` to `N`. -/
@[to_additive (attr := simps)
- "If the additive action of `M` on `N` is compatible with addition on `N`, then
- `fun x => x +ᵥ 0` is an additive monoid homomorphism from `M` to `N`."]
+ "If the additive action of `M` on `N` is compatible with addition on `N`, then
+ `fun x => x +ᵥ 0` is an additive monoid homomorphism from `M` to `N`."]
def smulOneHom {M N} [Monoid M] [Monoid N] [MulAction M N] [IsScalarTower M N N] :
M →* N where
toFun x := x • (1 : N)
to_additive
on CommSemigroup.isCentralScalar
(#2344)
The SHA was already updated in #2498, but the #align
was forgotten, and the instance name was incorrectly generated.
Match https://github.com/leanprover-community/mathlib/pull/16975.
Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Floris van Doorn <fpvdoorn@gmail.com>
@@ -275,7 +275,7 @@ class IsCentralVAdd (M α : Type _) [VAdd M α] [VAdd Mᵃᵒᵖ α] : Prop wher
/-- A typeclass indicating that the right (aka `MulOpposite`) and left actions by `M` on `α` are
equal, that is that `M` acts centrally on `α`. This can be thought of as a version of commutativity
for `•`. -/
-@[to_additive IsCentralVAdd] -- TODO auto-translating
+@[to_additive]
class IsCentralScalar (M α : Type _) [SMul M α] [SMul Mᵐᵒᵖ α] : Prop where
/-- The right and left actions of `M` on `α` are equal. -/
op_smul_eq_smul : ∀ (m : M) (a : α), MulOpposite.op m • a = m • a
simps
, just raises a linter error if you run simps
in a more expensive mode without writing !
.to_additive, simps
. Will do that systematically in future PR.OmegaCompletePartialOrder.ContinuousHom.ofMono
a bitCo-authored-by: Yury G. Kudryashov <urkud@urkud.name>
@@ -905,7 +905,7 @@ def DistribMulAction.compHom [Monoid N] (f : N →* M) : DistribMulAction N A :=
#align distrib_mul_action.comp_hom DistribMulAction.compHom
/-- Each element of the monoid defines a additive monoid homomorphism. -/
-@[simps]
+@[simps!]
def DistribMulAction.toAddMonoidHom (x : M) : A →+ A :=
DistribSMul.toAddMonoidHom A x
#align distrib_mul_action.to_add_monoid_hom DistribMulAction.toAddMonoidHom
@@ -673,10 +673,9 @@ theorem SMulCommClass.of_mul_smul_one {M N} [Monoid N] [SMul M N]
/-- If the multiplicative action of `M` on `N` is compatible with multiplication on `N`, then
`fun x => x • 1` is a monoid homomorphism from `M` to `N`. -/
-@[to_additive
+@[to_additive (attr := simps)
"If the additive action of `M` on `N` is compatible with addition on `N`, then
- `fun x => x +ᵥ 0` is an additive monoid homomorphism from `M` to `N`.",
- simps]
+ `fun x => x +ᵥ 0` is an additive monoid homomorphism from `M` to `N`."]
def smulOneHom {M N} [Monoid M] [Monoid N] [MulAction M N] [IsScalarTower M N N] :
M →* N where
toFun x := x • (1 : N)
@@ -685,6 +684,7 @@ def smulOneHom {M N} [Monoid M] [Monoid N] [MulAction M N] [IsScalarTower M N N]
#align smul_one_hom smulOneHom
#align vadd_zero_hom vaddZeroHom
#align smul_one_hom_apply smulOneHom_apply
+#align vadd_zero_hom_apply vaddZeroHom_apply
end CompatibleScalar
This PR is the result of a slight variant on the following "algorithm"
_
and make all uppercase letters into lowercase_
and make all uppercase letters into lowercase(original_lean3_name, OriginalLean4Name)
#align
statement just before the next empty line#align
statement to have been inserted too early)@@ -114,6 +114,10 @@ class MulAction (α : Type _) (β : Type _) [Monoid α] extends SMul α β where
/-- Associativity of `•` and `*` -/
mul_smul : ∀ (x y : α) (b : β), (x * y) • b = x • y • b
#align mul_action MulAction
+#align mul_action.ext MulAction.ext
+#align add_action.ext_iff AddAction.ext_iff
+#align mul_action.ext_iff MulAction.ext_iff
+#align add_action.ext AddAction.ext
/-!
### (Pre)transitive action
@@ -680,6 +684,7 @@ def smulOneHom {M N} [Monoid M] [Monoid N] [MulAction M N] [IsScalarTower M N N]
map_mul' x y := by rw [smul_one_mul, smul_smul]
#align smul_one_hom smulOneHom
#align vadd_zero_hom vaddZeroHom
+#align smul_one_hom_apply smulOneHom_apply
end CompatibleScalar
@@ -750,6 +755,7 @@ def SMulZeroClass.toZeroHom (x : M) :
toFun := (· • ·) x
map_zero' := smul_zero x
#align smul_zero_class.to_zero_hom SMulZeroClass.toZeroHom
+#align smul_zero_class.to_zero_hom_apply SMulZeroClass.toZeroHom_apply
end smul_zero
@@ -762,6 +768,8 @@ class DistribSMul (M A : Type _) [AddZeroClass A] extends SMulZeroClass M A wher
/-- Scalar multiplication distributes across addition -/
smul_add : ∀ (a : M) (x y : A), a • (x + y) = a • x + a • y
#align distrib_smul DistribSMul
+#align distrib_smul.ext DistribSMul.ext
+#align distrib_smul.ext_iff DistribSMul.ext_iff
section DistribSMul
@@ -825,6 +833,7 @@ def DistribSMul.compFun (f : N → M) : DistribSMul N A :=
def DistribSMul.toAddMonoidHom (x : M) : A →+ A :=
{ SMulZeroClass.toZeroHom A x with toFun := (· • ·) x, map_add' := smul_add x }
#align distrib_smul.to_add_monoid_hom DistribSMul.toAddMonoidHom
+#align distrib_smul.to_add_monoid_hom_apply DistribSMul.toAddMonoidHom_apply
end DistribSMul
@@ -836,6 +845,8 @@ class DistribMulAction (M A : Type _) [Monoid M] [AddMonoid A] extends MulAction
/-- Scalar multiplication distributes across addition -/
smul_add : ∀ (a : M) (x y : A), a • (x + y) = a • x + a • y
#align distrib_mul_action DistribMulAction
+#align distrib_mul_action.ext DistribMulAction.ext
+#align distrib_mul_action.ext_iff DistribMulAction.ext_iff
section
@@ -898,6 +909,7 @@ def DistribMulAction.compHom [Monoid N] (f : N →* M) : DistribMulAction N A :=
def DistribMulAction.toAddMonoidHom (x : M) : A →+ A :=
DistribSMul.toAddMonoidHom A x
#align distrib_mul_action.to_add_monoid_hom DistribMulAction.toAddMonoidHom
+#align distrib_mul_action.to_add_monoid_hom_apply DistribMulAction.toAddMonoidHom_apply
variable (M)
@@ -909,6 +921,7 @@ def DistribMulAction.toAddMonoidEnd :
map_one' := AddMonoidHom.ext <| one_smul M
map_mul' x y := AddMonoidHom.ext <| mul_smul x y
#align distrib_mul_action.to_add_monoid_End DistribMulAction.toAddMonoidEnd
+#align distrib_mul_action.to_add_monoid_End_apply DistribMulAction.toAddMonoidEnd_apply
instance AddMonoid.nat_smulCommClass :
SMulCommClass ℕ M
@@ -956,6 +969,8 @@ class MulDistribMulAction (M : Type _) (A : Type _) [Monoid M] [Monoid A] extend
/-- Multiplying `1` by a scalar gives `1` -/
smul_one : ∀ r : M, r • (1 : A) = 1
#align mul_distrib_mul_action MulDistribMulAction
+#align mul_distrib_mul_action.ext MulDistribMulAction.ext
+#align mul_distrib_mul_action.ext_iff MulDistribMulAction.ext_iff
export MulDistribMulAction (smul_one)
@@ -1032,6 +1047,7 @@ def MulDistribMulAction.toMonoidEnd :
map_one' := MonoidHom.ext <| one_smul M
map_mul' x y := MonoidHom.ext <| mul_smul x y
#align mul_distrib_mul_action.to_monoid_End MulDistribMulAction.toMonoidEnd
+#align mul_distrib_mul_action.to_monoid_End_apply MulDistribMulAction.toMonoidEnd_apply
end
@@ -531,7 +531,7 @@ See also `Function.Surjective.distribMulActionLeft` and `Function.Surjective.mod
-/
@[reducible,
to_additive
- "Push forward the action of `R` on `M` along a compatible\nsurjective map `f : R →+ S`."]
+ "Push forward the action of `R` on `M` along a compatible surjective map `f : R →+ S`."]
def Function.Surjective.mulActionLeft {R S M : Type _} [Monoid R] [MulAction R M] [Monoid S]
[SMul S M] (f : R →* S) (hf : Function.Surjective f)
(hsmul : ∀ (c) (x : M), f c • x = c • x) :
@@ -82,6 +82,7 @@ theorem smul_left_injective' [SMul M α] [FaithfulSMul M α] :
Function.Injective ((· • ·) : M → α → α) := fun _ _ h =>
FaithfulSMul.eq_of_smul_eq_smul (congr_fun h)
#align smul_left_injective' smul_left_injective'
+#align vadd_left_injective' vadd_left_injective'
-- see Note [lower instance priority]
/-- See also `Monoid.toMulAction` and `MulZeroClass.toSMulWithZero`. -/
@@ -89,11 +90,13 @@ theorem smul_left_injective' [SMul M α] [FaithfulSMul M α] :
instance (priority := 910) Mul.toSMul (α : Type _) [Mul α] : SMul α α :=
⟨(· * ·)⟩
#align has_mul.to_has_smul Mul.toSMul
+#align has_add.to_has_vadd Add.toVAdd
@[to_additive (attr := simp)]
theorem smul_eq_mul (α : Type _) [Mul α] {a a' : α} : a • a' = a * a' :=
rfl
#align smul_eq_mul smul_eq_mul
+#align vadd_eq_add vadd_eq_add
/-- Type class for additive monoid actions. -/
class AddAction (G : Type _) (P : Type _) [AddMonoid G] extends VAdd G P where
@@ -148,17 +151,20 @@ variable (M) [SMul M α] [IsPretransitive M α]
theorem exists_smul_eq (x y : α) : ∃ m : M, m • x = y :=
IsPretransitive.exists_smul_eq x y
#align mul_action.exists_smul_eq MulAction.exists_smul_eq
+#align add_action.exists_vadd_eq AddAction.exists_vadd_eq
@[to_additive]
theorem surjective_smul (x : α) : Surjective fun c : M => c • x :=
exists_smul_eq M x
#align mul_action.surjective_smul MulAction.surjective_smul
+#align add_action.surjective_vadd AddAction.surjective_vadd
/-- The regular action of a group on itself is transitive. -/
@[to_additive "The regular action of a group on itself is transitive."]
instance Regular.isPretransitive [Group G] : IsPretransitive G G :=
⟨fun x y => ⟨y * x⁻¹, inv_mul_cancel_right _ _⟩⟩
#align mul_action.regular.is_pretransitive MulAction.Regular.isPretransitive
+#align add_action.regular.is_pretransitive AddAction.Regular.isPretransitive
end MulAction
@@ -213,6 +219,7 @@ theorem SMulCommClass.symm (M N α : Type _) [SMul M α] [SMul N α] [SMulCommCl
SMulCommClass N M α :=
⟨fun a' a b => (smul_comm a a' b).symm⟩
#align smul_comm_class.symm SMulCommClass.symm
+#align vadd_comm_class.symm VAddCommClass.symm
/-- Commutativity of additive actions is a symmetric relation. This lemma can't be an instance
because this would cause a loop in the instance search graph. -/
@@ -222,6 +229,7 @@ add_decl_doc VAddCommClass.symm
instance smulCommClass_self (M α : Type _) [CommMonoid M] [MulAction M α] : SMulCommClass M M α :=
⟨fun a a' b => by rw [← mul_smul, mul_comm, mul_smul]⟩
#align smul_comm_class_self smulCommClass_self
+#align vadd_comm_class_self vaddCommClass_self
/-- An instance of `VAddAssocClass M N α` states that the additive action of `M` on `α` is
determined by the additive actions of `M` on `N` and `N` on `α`. -/
@@ -244,11 +252,13 @@ theorem smul_assoc {M N} [SMul M N] [SMul N α] [SMul M α] [IsScalarTower M N
(y : N) (z : α) : (x • y) • z = x • y • z :=
IsScalarTower.smul_assoc x y z
#align smul_assoc smul_assoc
+#align vadd_assoc vadd_assoc
@[to_additive]
instance Semigroup.isScalarTower [Semigroup α] : IsScalarTower α α α :=
⟨mul_assoc⟩
#align semigroup.is_scalar_tower Semigroup.isScalarTower
+#align add_semigroup.vadd_assoc_class AddSemigroup.isScalarTower
/-- A typeclass indicating that the right (aka `AddOpposite`) and left actions by `M` on `α` are
equal, that is that `M` acts centrally on `α`. This can be thought of as a version of commutativity
@@ -272,6 +282,7 @@ theorem IsCentralScalar.unop_smul_eq_smul {M α : Type _} [SMul M α] [SMul Mᵐ
[IsCentralScalar M α] (m : Mᵐᵒᵖ) (a : α) : MulOpposite.unop m • a = m • a :=
MulOpposite.rec (fun _ => (IsCentralScalar.op_smul_eq_smul _ _).symm) m
#align is_central_scalar.unop_smul_eq_smul IsCentralScalar.unop_smul_eq_smul
+#align is_central_vadd.unop_vadd_eq_vadd IsCentralVAdd.unop_vadd_eq_vadd
export IsCentralVAdd (op_vadd_eq_vadd unop_vadd_eq_vadd)
@@ -283,12 +294,14 @@ instance (priority := 50) SMulCommClass.op_left [SMul M α] [SMul Mᵐᵒᵖ α]
[SMul N α] [SMulCommClass M N α] : SMulCommClass Mᵐᵒᵖ N α :=
⟨fun m n a => by rw [← unop_smul_eq_smul m (n • a), ← unop_smul_eq_smul m a, smul_comm]⟩
#align smul_comm_class.op_left SMulCommClass.op_left
+#align vadd_comm_class.op_left VAddCommClass.op_left
@[to_additive]
instance (priority := 50) SMulCommClass.op_right [SMul M α] [SMul N α] [SMul Nᵐᵒᵖ α]
[IsCentralScalar N α] [SMulCommClass M N α] : SMulCommClass M Nᵐᵒᵖ α :=
⟨fun m n a => by rw [← unop_smul_eq_smul n (m • a), ← unop_smul_eq_smul n a, smul_comm]⟩
#align smul_comm_class.op_right SMulCommClass.op_right
+#align vadd_comm_class.op_right VAddCommClass.op_right
@[to_additive]
instance (priority := 50) IsScalarTower.op_left [SMul M α] [SMul Mᵐᵒᵖ α] [IsCentralScalar M α]
@@ -296,6 +309,7 @@ instance (priority := 50) IsScalarTower.op_left [SMul M α] [SMul Mᵐᵒᵖ α]
IsScalarTower Mᵐᵒᵖ N α :=
⟨fun m n a => by rw [← unop_smul_eq_smul m (n • a), ← unop_smul_eq_smul m n, smul_assoc]⟩
#align is_scalar_tower.op_left IsScalarTower.op_left
+#align vadd_assoc_class.op_left VAddAssocClass.op_left
@[to_additive]
instance (priority := 50) IsScalarTower.op_right [SMul M α] [SMul M N] [SMul N α]
@@ -303,6 +317,7 @@ instance (priority := 50) IsScalarTower.op_right [SMul M α] [SMul M N] [SMul N
⟨fun m n a => by
rw [← unop_smul_eq_smul n a, ← unop_smul_eq_smul (m • n) a, MulOpposite.unop_smul, smul_assoc]⟩
#align is_scalar_tower.op_right IsScalarTower.op_right
+#align vadd_assoc_class.op_right VAddAssocClass.op_right
namespace SMul
@@ -314,6 +329,7 @@ variable [SMul M α]
def comp.smul (g : N → M) (n : N) (a : α) : α :=
g n • a
#align has_smul.comp.smul SMul.comp.smul
+#align has_vadd.comp.vadd VAdd.comp.vadd
variable (α)
@@ -327,6 +343,7 @@ See note [reducible non-instances]. Since this is reducible, we make sure to go
an additive action of `N` on `α` "]
def comp (g : N → M) : SMul N α where smul := SMul.comp.smul g
#align has_smul.comp SMul.comp
+#align has_vadd.comp VAdd.comp
variable {α}
@@ -348,6 +365,7 @@ theorem comp.isScalarTower [SMul M β] [SMul α β] [IsScalarTower M α β] (g :
{ comp α g, comp β g with
smul_assoc := fun n => smul_assoc (g n) }
#align has_smul.comp.is_scalar_tower SMul.comp.isScalarTower
+#align has_vadd.comp.vadd_assoc_class VAdd.comp.isScalarTower
/-- This cannot be an instance because it can cause infinite loops whenever the `SMul` arguments
are still metavariables.
@@ -361,6 +379,7 @@ theorem comp.smulCommClass [SMul β α] [SMulCommClass M β α] (g : N → M) :
{ comp α g with
smul_comm := fun n => smul_comm (g n) }
#align has_smul.comp.smul_comm_class SMul.comp.smulCommClass
+#align has_vadd.comp.vadd_comm_class VAdd.comp.vaddCommClass
/-- This cannot be an instance because it can cause infinite loops whenever the `SMul` arguments
are still metavariables.
@@ -374,6 +393,7 @@ theorem comp.smulCommClass' [SMul β α] [SMulCommClass β M α] (g : N → M) :
{ comp α g with
smul_comm := fun _ n => smul_comm _ (g n) }
#align has_smul.comp.smul_comm_class' SMul.comp.smulCommClass'
+#align has_vadd.comp.vadd_comm_class' VAdd.comp.vaddCommClass'
end SMul
@@ -386,6 +406,7 @@ theorem mul_smul_comm [Mul β] [SMul α β] [SMulCommClass α β β] (s : α) (x
x * s • y = s • (x * y) :=
(smul_comm s x y).symm
#align mul_smul_comm mul_smul_comm
+#align add_vadd_comm add_vadd_comm
/-- Note that the `IsScalarTower α β β` typeclass argument is usually satisfied by `Algebra α β`.
-/
@@ -394,6 +415,7 @@ theorem smul_mul_assoc [Mul β] [SMul α β] [IsScalarTower α β β] (r : α) (
r • x * y = r • (x * y) :=
smul_assoc r x y
#align smul_mul_assoc smul_mul_assoc
+#align vadd_add_assoc vadd_add_assoc
@[to_additive]
theorem smul_smul_smul_comm [SMul α β] [SMul α γ] [SMul β δ] [SMul α δ] [SMul γ δ]
@@ -401,6 +423,7 @@ theorem smul_smul_smul_comm [SMul α β] [SMul α γ] [SMul β δ] [SMul α δ]
(d : δ) : (a • b) • c • d = (a • c) • b • d := by
rw [smul_assoc, smul_assoc, smul_comm b]
#align smul_smul_smul_comm smul_smul_smul_comm
+#align vadd_vadd_vadd_comm vadd_vadd_vadd_comm
variable [SMul M α]
@@ -409,12 +432,14 @@ theorem Commute.smul_right [Mul α] [SMulCommClass M α α] [IsScalarTower M α
(h : Commute a b) (r : M) : Commute a (r • b) :=
(mul_smul_comm _ _ _).trans ((congr_arg _ h).trans <| (smul_mul_assoc _ _ _).symm)
#align commute.smul_right Commute.smul_right
+#align add_commute.vadd_right AddCommute.vadd_right
@[to_additive]
theorem Commute.smul_left [Mul α] [SMulCommClass M α α] [IsScalarTower M α α] {a b : α}
(h : Commute a b) (r : M) : Commute (r • a) b :=
(h.symm.smul_right r).symm
#align commute.smul_left Commute.smul_left
+#align add_commute.vadd_left AddCommute.vadd_left
end
@@ -426,11 +451,13 @@ variable [SMul M α] (p : Prop) [Decidable p]
theorem ite_smul (a₁ a₂ : M) (b : α) : ite p a₁ a₂ • b = ite p (a₁ • b) (a₂ • b) := by
split_ifs <;> rfl
#align ite_smul ite_smul
+#align ite_vadd ite_vadd
@[to_additive]
theorem smul_ite (a : M) (b₁ b₂ : α) : a • ite p b₁ b₂ = ite p (a • b₁) (a • b₂) := by
split_ifs <;> rfl
#align smul_ite smul_ite
+#align vadd_ite vadd_ite
end ite
@@ -442,6 +469,7 @@ variable [Monoid M] [MulAction M α]
theorem smul_smul (a₁ a₂ : M) (b : α) : a₁ • a₂ • b = (a₁ * a₂) • b :=
(mul_smul _ _ _).symm
#align smul_smul smul_smul
+#align vadd_vadd vadd_vadd
variable (M)
@@ -449,18 +477,21 @@ variable (M)
theorem one_smul (b : α) : (1 : M) • b = b :=
MulAction.one_smul _
#align one_smul one_smul
+#align zero_vadd zero_vadd
/-- `SMul` version of `one_mul_eq_id` -/
@[to_additive "`VAdd` version of `zero_add_eq_id`"]
theorem one_smul_eq_id : ((· • ·) (1 : M) : α → α) = id :=
funext <| one_smul _
#align one_smul_eq_id one_smul_eq_id
+#align zero_vadd_eq_id zero_vadd_eq_id
/-- `SMul` version of `comp_mul_left` -/
@[to_additive "`VAdd` version of `comp_add_left`"]
theorem comp_smul_left (a₁ a₂ : M) : (· • ·) a₁ ∘ (· • ·) a₂ = ((· • ·) (a₁ * a₂) : α → α) :=
funext fun _ => (mul_smul _ _ _).symm
#align comp_smul_left comp_smul_left
+#align comp_vadd_left comp_vadd_left
variable {M}
@@ -475,6 +506,7 @@ protected def Function.Injective.mulAction [SMul M β] (f : β → α) (hf : Inj
one_smul x := hf <| (smul _ _).trans <| one_smul _ (f x)
mul_smul c₁ c₂ x := hf <| by simp only [smul, mul_smul]
#align function.injective.mul_action Function.Injective.mulAction
+#align function.injective.add_action Function.Injective.addAction
/-- Pushforward a multiplicative action along a surjective map respecting `•`.
See note [reducible non-instances]. -/
@@ -491,6 +523,7 @@ protected def Function.Surjective.mulAction [SMul M β] (f : α → β) (hf : Su
rcases hf y with ⟨x, rfl⟩
simp only [← smul, mul_smul]
#align function.surjective.mul_action Function.Surjective.mulAction
+#align function.surjective.add_action Function.Surjective.addAction
/-- Push forward the action of `R` on `M` along a compatible surjective map `f : R →* S`.
@@ -507,6 +540,7 @@ def Function.Surjective.mulActionLeft {R S M : Type _} [Monoid R] [MulAction R M
one_smul b := by rw [← f.map_one, hsmul, one_smul]
mul_smul := hf.forall₂.mpr fun a b x => by simp only [← f.map_mul, hsmul, mul_smul]
#align function.surjective.mul_action_left Function.Surjective.mulActionLeft
+#align function.surjective.add_action_left Function.Surjective.addActionLeft
section
@@ -523,6 +557,7 @@ instance (priority := 910) Monoid.toMulAction :
one_smul := one_mul
mul_smul := mul_assoc
#align monoid.to_mul_action Monoid.toMulAction
+#align add_monoid.to_add_action AddMonoid.toAddAction
/-- The regular action of a monoid on itself by left addition.
@@ -533,6 +568,7 @@ add_decl_doc AddMonoid.toAddAction
instance IsScalarTower.left : IsScalarTower M M α :=
⟨fun x y z => mul_smul x y z⟩
#align is_scalar_tower.left IsScalarTower.left
+#align vadd_assoc_class.left VAddAssocClass.left
variable {M}
@@ -543,6 +579,7 @@ theorem smul_mul_smul [Mul α] (r s : M) (x y : α) [IsScalarTower M α α] [SMu
r • x * s • y = (r * s) • (x * y) := by
rw [smul_mul_assoc, mul_smul_comm, ← smul_assoc, smul_eq_mul]
#align smul_mul_smul smul_mul_smul
+#align vadd_add_vadd vadd_add_vadd
end
@@ -555,6 +592,7 @@ variable (M α)
def toFun : α ↪ M → α :=
⟨fun y x => x • y, fun y₁ y₂ H => one_smul M y₁ ▸ one_smul M y₂ ▸ by convert congr_fun H 1⟩
#align mul_action.to_fun MulAction.toFun
+#align add_action.to_fun AddAction.toFun
/-- Embedding of `α` into functions `M → α` induced by an additive action of `M` on `α`. -/
add_decl_doc AddAction.toFun
@@ -565,6 +603,7 @@ variable {M α}
theorem toFun_apply (x : M) (y : α) : MulAction.toFun M α y x = x • y :=
rfl
#align mul_action.to_fun_apply MulAction.toFun_apply
+#align add_action.to_fun_apply AddAction.toFun_apply
variable (α)
@@ -581,6 +620,7 @@ def compHom [Monoid N] (g : N →* M) :
-- Porting note: was `by simp [g.map_mul, MulAction.mul_smul]`
mul_smul _ _ _ := by simp [(· • ·)]; apply MulAction.mul_smul
#align mul_action.comp_hom MulAction.compHom
+#align add_action.comp_hom AddAction.compHom
/-- An additive action of `M` on `α` and an additive monoid homomorphism `N → M` induce
an additive action of `N` on `α`.
@@ -599,28 +639,33 @@ theorem smul_one_smul {M} (N) [Monoid N] [SMul M N] [MulAction N α] [SMul M α]
[IsScalarTower M N α] (x : M) (y : α) : (x • (1 : N)) • y = x • y := by
rw [smul_assoc, one_smul]
#align smul_one_smul smul_one_smul
+#align vadd_zero_vadd vadd_zero_vadd
@[to_additive (attr := simp)]
theorem smul_one_mul {M N} [MulOneClass N] [SMul M N] [IsScalarTower M N N] (x : M) (y : N) :
x • (1 : N) * y = x • y := by rw [smul_mul_assoc, one_mul]
#align smul_one_mul smul_one_mul
+#align vadd_zero_add vadd_zero_add
@[to_additive (attr := simp)]
theorem mul_smul_one {M N} [MulOneClass N] [SMul M N] [SMulCommClass M N N] (x : M) (y : N) :
y * x • (1 : N) = x • y := by rw [← smul_eq_mul, ← smul_comm, smul_eq_mul, mul_one]
#align mul_smul_one mul_smul_one
+#align add_vadd_zero add_vadd_zero
@[to_additive]
theorem IsScalarTower.of_smul_one_mul {M N} [Monoid N] [SMul M N]
(h : ∀ (x : M) (y : N), x • (1 : N) * y = x • y) : IsScalarTower M N N :=
⟨fun x y z => by rw [← h, smul_eq_mul, mul_assoc, h, smul_eq_mul]⟩
#align is_scalar_tower.of_smul_one_mul IsScalarTower.of_smul_one_mul
+#align vadd_assoc_class.of_vadd_zero_add VAddAssocClass.of_vadd_zero_add
@[to_additive]
theorem SMulCommClass.of_mul_smul_one {M N} [Monoid N] [SMul M N]
(H : ∀ (x : M) (y : N), y * x • (1 : N) = x • y) : SMulCommClass M N N :=
⟨fun x y z => by rw [← H x z, smul_eq_mul, ← H, smul_eq_mul, mul_assoc]⟩
#align smul_comm_class.of_mul_smul_one SMulCommClass.of_mul_smul_one
+#align vadd_comm_class.of_add_vadd_zero VAddCommClass.of_add_vadd_zero
/-- If the multiplicative action of `M` on `N` is compatible with multiplication on `N`, then
`fun x => x • 1` is a monoid homomorphism from `M` to `N`. -/
@@ -634,6 +679,7 @@ def smulOneHom {M N} [Monoid M] [Monoid N] [MulAction M N] [IsScalarTower M N N]
map_one' := one_smul _ _
map_mul' x y := by rw [smul_one_mul, smul_smul]
#align smul_one_hom smulOneHom
+#align vadd_zero_hom vaddZeroHom
end CompatibleScalar
to_additive
is @[to_additive (attrs := simp, ext, simps)]
simp
and simps
attributes to the to_additive
-dictionary.simp
-attributes). In particular it's possible that norm_cast
might generate some auxiliary declarations.to_additive
and simps
from the Simps
file to the toAdditive
file for uniformity.@[reassoc]
Co-authored-by: Johan Commelin <johan@commelin.net> Co-authored-by: Scott Morrison <scott.morrison@gmail.com>
@@ -90,13 +90,12 @@ instance (priority := 910) Mul.toSMul (α : Type _) [Mul α] : SMul α α :=
⟨(· * ·)⟩
#align has_mul.to_has_smul Mul.toSMul
-@[simp, to_additive]
+@[to_additive (attr := simp)]
theorem smul_eq_mul (α : Type _) [Mul α] {a a' : α} : a • a' = a * a' :=
rfl
#align smul_eq_mul smul_eq_mul
/-- Type class for additive monoid actions. -/
-@[ext]
class AddAction (G : Type _) (P : Type _) [AddMonoid G] extends VAdd G P where
/-- Zero is a neutral element for `+ᵥ` -/
protected zero_vadd : ∀ p : P, (0 : G) +ᵥ p = p
@@ -105,7 +104,7 @@ class AddAction (G : Type _) (P : Type _) [AddMonoid G] extends VAdd G P where
#align add_action AddAction
/-- Typeclass for multiplicative actions by monoids. This generalizes group actions. -/
-@[ext, to_additive]
+@[to_additive (attr := ext)]
class MulAction (α : Type _) (β : Type _) [Monoid α] extends SMul α β where
/-- One is the neutral element for `•` -/
protected one_smul : ∀ b : β, (1 : α) • b = b
@@ -240,7 +239,7 @@ class IsScalarTower (M N α : Type _) [SMul M N] [SMul N α] [SMul M α] : Prop
smul_assoc : ∀ (x : M) (y : N) (z : α), (x • y) • z = x • y • z
#align is_scalar_tower IsScalarTower
-@[simp, to_additive]
+@[to_additive (attr := simp)]
theorem smul_assoc {M N} [SMul M N] [SMul N α] [SMul M α] [IsScalarTower M N α] (x : M)
(y : N) (z : α) : (x • y) • z = x • y • z :=
IsScalarTower.smul_assoc x y z
@@ -311,7 +310,7 @@ variable [SMul M α]
/-- Auxiliary definition for `SMul.comp`, `MulAction.compHom`,
`DistribMulAction.compHom`, `Module.compHom`, etc. -/
-@[simp, to_additive " Auxiliary definition for `VAdd.comp`, `AddAction.compHom`, etc. "]
+@[to_additive (attr := simp) " Auxiliary definition for `VAdd.comp`, `AddAction.compHom`, etc. "]
def comp.smul (g : N → M) (n : N) (a : α) : α :=
g n • a
#align has_smul.comp.smul SMul.comp.smul
@@ -446,7 +445,7 @@ theorem smul_smul (a₁ a₂ : M) (b : α) : a₁ • a₂ • b = (a₁ * a₂)
variable (M)
-@[simp, to_additive]
+@[to_additive (attr := simp)]
theorem one_smul (b : α) : (1 : M) • b = b :=
MulAction.one_smul _
#align one_smul one_smul
@@ -467,7 +466,8 @@ variable {M}
/-- Pullback a multiplicative action along an injective map respecting `•`.
See note [reducible non-instances]. -/
-@[reducible, to_additive "Pullback an additive action along an injective map respecting `+ᵥ`."]
+@[to_additive (attr := reducible)
+"Pullback an additive action along an injective map respecting `+ᵥ`."]
protected def Function.Injective.mulAction [SMul M β] (f : β → α) (hf : Injective f)
(smul : ∀ (c : M) (x), f (c • x) = c • f x) :
MulAction M β where
@@ -478,7 +478,8 @@ protected def Function.Injective.mulAction [SMul M β] (f : β → α) (hf : Inj
/-- Pushforward a multiplicative action along a surjective map respecting `•`.
See note [reducible non-instances]. -/
-@[reducible, to_additive "Pushforward an additive action along a surjective map respecting `+ᵥ`."]
+@[to_additive (attr := reducible)
+"Pushforward an additive action along a surjective map respecting `+ᵥ`."]
protected def Function.Surjective.mulAction [SMul M β] (f : α → β) (hf : Surjective f)
(smul : ∀ (c : M) (x), f (c • x) = c • f x) :
MulAction M β where
@@ -560,7 +561,7 @@ add_decl_doc AddAction.toFun
variable {M α}
-@[simp, to_additive]
+@[to_additive (attr := simp)]
theorem toFun_apply (x : M) (y : α) : MulAction.toFun M α y x = x • y :=
rfl
#align mul_action.to_fun_apply MulAction.toFun_apply
@@ -571,7 +572,7 @@ variable (α)
a multiplicative action of `N` on `α`.
See note [reducible non-instances]. -/
-@[reducible, to_additive]
+@[to_additive (attr := reducible)]
def compHom [Monoid N] (g : N →* M) :
MulAction N α where
smul := SMul.comp.smul g
@@ -599,12 +600,12 @@ theorem smul_one_smul {M} (N) [Monoid N] [SMul M N] [MulAction N α] [SMul M α]
rw [smul_assoc, one_smul]
#align smul_one_smul smul_one_smul
-@[simp, to_additive]
+@[to_additive (attr := simp)]
theorem smul_one_mul {M N} [MulOneClass N] [SMul M N] [IsScalarTower M N N] (x : M) (y : N) :
x • (1 : N) * y = x • y := by rw [smul_mul_assoc, one_mul]
#align smul_one_mul smul_one_mul
-@[simp, to_additive]
+@[to_additive (attr := simp)]
theorem mul_smul_one {M N} [MulOneClass N] [SMul M N] [SMulCommClass M N N] (x : M) (y : N) :
y * x • (1 : N) = x • y := by rw [← smul_eq_mul, ← smul_comm, smul_eq_mul, mul_one]
#align mul_smul_one mul_smul_one
@@ -26,7 +26,7 @@ notation classes `SMul` and its additive version `VAdd`:
* `DistribMulAction M A` is a typeclass for an action of a multiplicative monoid on
an additive monoid such that `a • (b + c) = a • b + a • c` and `a • 0 = 0`.
-The hierarchy is extended further by `module`, defined elsewhere.
+The hierarchy is extended further by `Module`, defined elsewhere.
Also provided are typeclasses for faithful and transitive actions, and typeclasses regarding the
interaction of different group actions,
@@ -198,7 +198,7 @@ problem, but throws away structure that is useful for when we _do_ have a commut
To avoid making this compromise, we instead state these definitions as `M →ₗ[R] N →ₗ[S] P` or
`(M →ₗ[R] N) ≃ₗ[S] (M' →ₗ[R] N')` and require `SMulCommClass S R` on the appropriate modules. When
-the caller has `comm_semiring R`, they can set `S = R` and `smulCommClass_self` will populate the
+the caller has `CommSemiring R`, they can set `S = R` and `smulCommClass_self` will populate the
instance. If the caller only has `Semiring R` they can still set either `R = ℕ` or `S = ℕ`, and
`AddCommMonoid.nat_smulCommClass` or `AddCommMonoid.nat_smulCommClass'` will populate
the typeclass, which is still sufficient to recover a `≃+` or `→+` structure.
@@ -251,7 +251,7 @@ instance Semigroup.isScalarTower [Semigroup α] : IsScalarTower α α α :=
⟨mul_assoc⟩
#align semigroup.is_scalar_tower Semigroup.isScalarTower
-/-- A typeclass indicating that the right (aka `add_opposite`) and left actions by `M` on `α` are
+/-- A typeclass indicating that the right (aka `AddOpposite`) and left actions by `M` on `α` are
equal, that is that `M` acts centrally on `α`. This can be thought of as a version of commutativity
for `+ᵥ`. -/
class IsCentralVAdd (M α : Type _) [VAdd M α] [VAdd Mᵃᵒᵖ α] : Prop where
@@ -259,7 +259,7 @@ class IsCentralVAdd (M α : Type _) [VAdd M α] [VAdd Mᵃᵒᵖ α] : Prop wher
op_vadd_eq_vadd : ∀ (m : M) (a : α), AddOpposite.op m +ᵥ a = m +ᵥ a
#align is_central_vadd IsCentralVAdd
-/-- A typeclass indicating that the right (aka `mul_opposite`) and left actions by `M` on `α` are
+/-- A typeclass indicating that the right (aka `MulOpposite`) and left actions by `M` on `α` are
equal, that is that `M` acts centrally on `α`. This can be thought of as a version of commutativity
for `•`. -/
@[to_additive IsCentralVAdd] -- TODO auto-translating
@@ -1183,4 +1183,3 @@ See note [reducible non-instances]. -/
def AddAction.ofEndHom [AddMonoid M] (f : M →+ Additive (Function.End α)) : AddAction M α :=
AddAction.compHom α f
#align add_action.of_End_hom AddAction.ofEndHom
-
@@ -1094,43 +1094,18 @@ def MulAction.ofEndHom [Monoid M] (f : M →* Function.End α) : MulAction M α
MulAction.compHom α f
#align mul_action.of_End_hom MulAction.ofEndHom
-/-- The tautological additive action by `Additive (Function.End α)` on `α`. -/
-instance AddAction.functionEnd : AddAction (Additive (Function.End α)) α where
- vadd := (· <| ·)
- zero_vadd _ := rfl
- add_vadd _ _ _ := rfl
-#align add_action.function_End AddAction.functionEnd
-
-/-- The additive monoid hom representing an additive monoid action.
-
-When `M` is a group, see `AddAction.toPermHom`. -/
-def AddAction.toEndHom [AddMonoid M] [AddAction M α] : M →+ Additive (Function.End α) where
- toFun := (· +ᵥ ·)
- map_zero' := funext (zero_vadd M)
- map_add' x y := funext (add_vadd x y)
-#align add_action.to_End_hom AddAction.toEndHom
-
-/-- The additive action induced by a hom to `Additive (Function.End α)`
-
-See note [reducible non-instances]. -/
-@[reducible]
-def AddAction.ofEndHom [AddMonoid M] (f : M →+ Additive (Function.End α)) : AddAction M α :=
- AddAction.compHom α f
-#align add_action.of_End_hom AddAction.ofEndHom
-
/-! ### `additive`, `multiplicative` -/
-
section
open Additive Multiplicative
instance Additive.vadd [SMul α β] : VAdd (Additive α) β :=
- ⟨fun a => (· • ·) (toMul a)⟩
+ ⟨fun a => (toMul a • ·)⟩
#align additive.has_vadd Additive.vadd
instance Multiplicative.smul [VAdd α β] : SMul (Multiplicative α) β :=
- ⟨fun a => (· +ᵥ ·) (toAdd a)⟩
+ ⟨fun a => (toAdd a +ᵥ ·)⟩
#align multiplicative.has_smul Multiplicative.smul
@[simp]
@@ -1188,3 +1163,24 @@ instance Multiplicative.smulCommClass [VAdd α γ] [VAdd β γ] [VAddCommClass
#align multiplicative.smul_comm_class Multiplicative.smulCommClass
end
+
+/-- The tautological additive action by `Additive (Function.End α)` on `α`. -/
+instance AddAction.functionEnd : AddAction (Additive (Function.End α)) α :=
+ inferInstance
+#align add_action.function_End AddAction.functionEnd
+
+/-- The additive monoid hom representing an additive monoid action.
+
+When `M` is a group, see `AddAction.toPermHom`. -/
+def AddAction.toEndHom [AddMonoid M] [AddAction M α] : M →+ Additive (Function.End α) :=
+ MonoidHom.toAdditive'' MulAction.toEndHom
+#align add_action.to_End_hom AddAction.toEndHom
+
+/-- The additive action induced by a hom to `Additive (Function.End α)`
+
+See note [reducible non-instances]. -/
+@[reducible]
+def AddAction.ofEndHom [AddMonoid M] (f : M →+ Additive (Function.End α)) : AddAction M α :=
+ AddAction.compHom α f
+#align add_action.of_End_hom AddAction.ofEndHom
+
Fix a lot of wrong casing mostly in the docstrings but also sometimes in def/theorem names. E.g. fin 2 --> Fin 2
, add_monoid_hom --> AddMonoidHom
Remove \n
from to_additive
docstrings that were inserted by mathport.
Move files and directories with Gcd
and Smul
to GCD
and SMul
@@ -1024,7 +1024,7 @@ instance : Inhabited (Function.End α) :=
variable {α}
-/-- The tautological action by `function.End α` on `α`.
+/-- The tautological action by `Function.End α` on `α`.
This is generalized to bundled endomorphisms by:
* `Equiv.Perm.applyMulAction`
This refactor makes αᵐᵒᵖ
and αᵃᵒᵖ
into structures with one field, an idea more appropriate in Lean 4 than the Lean 3 approach of type synonyms.
@@ -270,11 +270,8 @@ class IsCentralScalar (M α : Type _) [SMul M α] [SMul Mᵐᵒᵖ α] : Prop wh
@[to_additive]
theorem IsCentralScalar.unop_smul_eq_smul {M α : Type _} [SMul M α] [SMul Mᵐᵒᵖ α]
- [IsCentralScalar M α] (m : Mᵐᵒᵖ) (a : α) : MulOpposite.unop m • a = m • a := by
- -- Porting note: was one liner
- apply MulOpposite.rec _ m
- intro m
- apply (IsCentralScalar.op_smul_eq_smul _ _).symm
+ [IsCentralScalar M α] (m : Mᵐᵒᵖ) (a : α) : MulOpposite.unop m • a = m • a :=
+ MulOpposite.rec (fun _ => (IsCentralScalar.op_smul_eq_smul _ _).symm) m
#align is_central_scalar.unop_smul_eq_smul IsCentralScalar.unop_smul_eq_smul
export IsCentralVAdd (op_vadd_eq_vadd unop_vadd_eq_vadd)
The script used to do this is included. The yaml file was obtained from https://raw.githubusercontent.com/wiki/leanprover-community/mathlib/mathlib4-port-status.md
@@ -2,6 +2,11 @@
Copyright (c) 2018 Chris Hughes. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Chris Hughes, Yury Kudryashov
+
+! This file was ported from Lean 3 source module group_theory.group_action.defs
+! leanprover-community/mathlib commit dad7ecf9a1feae63e6e49f07619b7087403fb8d4
+! Please do not edit these lines, except to modify the commit id
+! if you have ported upstream changes.
-/
import Mathlib.Algebra.Group.TypeTags
import Mathlib.Algebra.Group.Commute
All dependencies are ported!