@@ -212,6 +212,88 @@ end Stabilizers
212
212
213
213
end MulAction
214
214
215
+ section FixedPoints
216
+
217
+ variable (M : Type u) (α : Type v) [Monoid M]
218
+
219
+ section Monoid
220
+
221
+ variable [Monoid α] [MulDistribMulAction M α]
222
+
223
+ /-- The submonoid of elements fixed under the whole action. -/
224
+ def FixedPoints.submonoid : Submonoid α where
225
+ carrier := MulAction.fixedPoints M α
226
+ one_mem' := smul_one
227
+ mul_mem' ha hb _ := by rw [smul_mul', ha, hb]
228
+
229
+ @[simp]
230
+ lemma FixedPoints.mem_submonoid (a : α) : a ∈ submonoid M α ↔ ∀ m : M, m • a = a :=
231
+ Iff.rfl
232
+
233
+ end Monoid
234
+
235
+ section Group
236
+
237
+ variable [Group α] [MulDistribMulAction M α]
238
+
239
+ /-- The subgroup of elements fixed under the whole action. -/
240
+ def FixedPoints.subgroup : Subgroup α where
241
+ __ := submonoid M α
242
+ inv_mem' ha _ := by rw [smul_inv', ha]
243
+
244
+ /-- The notation for `FixedPoints.subgroup`, chosen to resemble `αᴹ`. -/
245
+ notation α "^*" M:51 => FixedPoints.subgroup M α
246
+
247
+ @[simp]
248
+ lemma FixedPoints.mem_subgroup (a : α) : a ∈ α^*M ↔ ∀ m : M, m • a = a :=
249
+ Iff.rfl
250
+
251
+ @[simp]
252
+ lemma FixedPoints.subgroup_toSubmonoid : (α^*M).toSubmonoid = submonoid M α :=
253
+ rfl
254
+
255
+ end Group
256
+
257
+ section AddMonoid
258
+
259
+ variable [AddMonoid α] [DistribMulAction M α]
260
+
261
+ /-- The additive submonoid of elements fixed under the whole action. -/
262
+ def FixedPoints.addSubmonoid : AddSubmonoid α where
263
+ carrier := MulAction.fixedPoints M α
264
+ zero_mem' := smul_zero
265
+ add_mem' ha hb _ := by rw [smul_add, ha, hb]
266
+
267
+ @[simp]
268
+ lemma FixedPoints.mem_addSubmonoid (a : α) : a ∈ addSubmonoid M α ↔ ∀ m : M, m • a = a :=
269
+ Iff.rfl
270
+
271
+ end AddMonoid
272
+
273
+ section AddGroup
274
+
275
+ variable [AddGroup α] [DistribMulAction M α]
276
+
277
+ /-- The additive subgroup of elements fixed under the whole action. -/
278
+ def FixedPoints.addSubgroup : AddSubgroup α where
279
+ __ := addSubmonoid M α
280
+ neg_mem' ha _ := by rw [smul_neg, ha]
281
+
282
+ /-- The notation for `FixedPoints.addSubgroup`, chosen to resemble `αᴹ`. -/
283
+ notation α "^+" M:51 => FixedPoints.addSubgroup M α
284
+
285
+ @[simp]
286
+ lemma FixedPoints.mem_addSubgroup (a : α) : a ∈ α^+M ↔ ∀ m : M, m • a = a :=
287
+ Iff.rfl
288
+
289
+ @[simp]
290
+ lemma FixedPoints.addSubgroup_toAddSubmonoid : (α^+M).toAddSubmonoid = addSubmonoid M α :=
291
+ rfl
292
+
293
+ end AddGroup
294
+
295
+ end FixedPoints
296
+
215
297
/-- `smul` by a `k : M` over a ring is injective, if `k` is not a zero divisor.
216
298
The general theory of such `k` is elaborated by `IsSMulRegular`.
217
299
The typeclass that restricts all terms of `M` to have this property is `NoZeroSMulDivisors`. -/
0 commit comments