@@ -38,6 +38,11 @@ class mul_semiring_action (M : Type u) [monoid M] (R : Type v) [semiring R]
38
38
39
39
export mul_semiring_action (smul_one)
40
40
41
+ /-- Typeclass for faithful multiplicative actions by monoids on semirings. -/
42
+ class faithful_mul_semiring_action (M : Type u) [monoid M] (R : Type v) [semiring R]
43
+ extends mul_semiring_action M R :=
44
+ (eq_of_smul_eq_smul' : ∀ {m₁ m₂ : M}, (∀ r : R, m₁ • r = m₂ • r) → m₁ = m₂)
45
+
41
46
section semiring
42
47
43
48
variables (M G : Type u) [monoid M] [group G]
@@ -48,6 +53,11 @@ lemma smul_mul' [mul_semiring_action M R] (g : M) (x y : R) :
48
53
g • (x * y) = (g • x) * (g • y) :=
49
54
mul_semiring_action.smul_mul g x y
50
55
56
+ variables {M} (R)
57
+ theorem eq_of_smul_eq_smul [faithful_mul_semiring_action M R] {m₁ m₂ : M} :
58
+ (∀ r : R, m₁ • r = m₂ • r) → m₁ = m₂ :=
59
+ faithful_mul_semiring_action.eq_of_smul_eq_smul'
60
+
51
61
variables (M R)
52
62
53
63
/-- Each element of the monoid defines a additive monoid homomorphism. -/
@@ -73,6 +83,10 @@ def mul_semiring_action.to_semiring_hom [mul_semiring_action M R] (x : M) : R
73
83
map_mul' := smul_mul' x,
74
84
.. distrib_mul_action.to_add_monoid_hom M R x }
75
85
86
+ theorem injective_to_semiring_hom [faithful_mul_semiring_action M R] :
87
+ function.injective (mul_semiring_action.to_semiring_hom M R) :=
88
+ λ m₁ m₂ h, eq_of_smul_eq_smul R $ λ r, ring_hom.ext_iff.1 h r
89
+
76
90
/-- Each element of the group defines a semiring isomorphism. -/
77
91
def mul_semiring_action.to_semiring_equiv [mul_semiring_action G R] (x : G) : R ≃+* R :=
78
92
{ .. distrib_mul_action.to_add_equiv G R x,
@@ -110,9 +124,7 @@ end simp_lemmas
110
124
111
125
namespace polynomial
112
126
113
- variables [mul_semiring_action M S]
114
-
115
- noncomputable instance : mul_semiring_action M (polynomial S) :=
127
+ noncomputable instance [mul_semiring_action M S] : mul_semiring_action M (polynomial S) :=
116
128
{ smul := λ m, map $ mul_semiring_action.to_semiring_hom M S m,
117
129
one_smul := λ p, by { ext n, erw coeff_map, exact one_smul M (p.coeff n) },
118
130
mul_smul := λ m n p, by { ext i,
@@ -123,6 +135,17 @@ noncomputable instance : mul_semiring_action M (polynomial S) :=
123
135
smul_one := λ m, map_one (mul_semiring_action.to_semiring_hom M S m),
124
136
smul_mul := λ m p q, map_mul (mul_semiring_action.to_semiring_hom M S m), }
125
137
138
+ noncomputable instance [faithful_mul_semiring_action M S] :
139
+ faithful_mul_semiring_action M (polynomial S) :=
140
+ { eq_of_smul_eq_smul' := λ m₁ m₂ h, eq_of_smul_eq_smul S $ λ s, C_inj.1 $
141
+ calc C (m₁ • s)
142
+ = m₁ • C s : (map_C $ mul_semiring_action.to_semiring_hom M S m₁).symm
143
+ ... = m₂ • C s : h (C s)
144
+ ... = C (m₂ • s) : map_C _,
145
+ .. polynomial.mul_semiring_action M S }
146
+
147
+ variables [mul_semiring_action M S]
148
+
126
149
@[simp] lemma coeff_smul' (m : M) (p : polynomial S) (n : ℕ) :
127
150
(m • p).coeff n = m • p.coeff n :=
128
151
coeff_map _ _
0 commit comments