@@ -4,6 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
4
4
Authors: Chris Hughes
5
5
-/
6
6
import Mathlib.Algebra.Group.Aut
7
+ import Mathlib.Algebra.Group.Action.Basic
7
8
import Mathlib.Algebra.Group.Invertible.Basic
8
9
import Mathlib.Algebra.GroupWithZero.Units.Basic
9
10
import Mathlib.GroupTheory.GroupAction.Units
@@ -22,130 +23,6 @@ universe u v w
22
23
variable {α : Type u} {β : Type v} {γ : Type w}
23
24
24
25
section MulAction
25
- section Group
26
-
27
- variable [Group α] [MulAction α β]
28
-
29
- /-- Given an action of a group `α` on `β`, each `g : α` defines a permutation of `β`. -/
30
- @[to_additive (attr := simps)]
31
- def MulAction.toPerm (a : α) : Equiv.Perm β :=
32
- ⟨fun x => a • x, fun x => a⁻¹ • x, inv_smul_smul a, smul_inv_smul a⟩
33
- #align mul_action.to_perm MulAction.toPerm
34
- #align add_action.to_perm AddAction.toPerm
35
- #align add_action.to_perm_apply AddAction.toPerm_apply
36
- #align mul_action.to_perm_apply MulAction.toPerm_apply
37
- #align add_action.to_perm_symm_apply AddAction.toPerm_symm_apply
38
- #align mul_action.to_perm_symm_apply MulAction.toPerm_symm_apply
39
-
40
- /-- Given an action of an additive group `α` on `β`, each `g : α` defines a permutation of `β`. -/
41
- add_decl_doc AddAction.toPerm
42
-
43
- /-- `MulAction.toPerm` is injective on faithful actions. -/
44
- @[to_additive "`AddAction.toPerm` is injective on faithful actions."]
45
- theorem MulAction.toPerm_injective [FaithfulSMul α β] :
46
- Function.Injective (MulAction.toPerm : α → Equiv.Perm β) :=
47
- (show Function.Injective (Equiv.toFun ∘ MulAction.toPerm) from smul_left_injective').of_comp
48
- #align mul_action.to_perm_injective MulAction.toPerm_injective
49
- #align add_action.to_perm_injective AddAction.toPerm_injective
50
-
51
- variable (α) (β)
52
-
53
- /-- Given an action of a group `α` on a set `β`, each `g : α` defines a permutation of `β`. -/
54
- @[simps]
55
- def MulAction.toPermHom : α →* Equiv.Perm β where
56
- toFun := MulAction.toPerm
57
- map_one' := Equiv.ext <| one_smul α
58
- map_mul' u₁ u₂ := Equiv.ext <| mul_smul (u₁ : α) u₂
59
- #align mul_action.to_perm_hom MulAction.toPermHom
60
- #align mul_action.to_perm_hom_apply MulAction.toPermHom_apply
61
-
62
- /-- Given an action of an additive group `α` on a set `β`, each `g : α` defines a permutation of
63
- `β`. -/
64
- @[simps!]
65
- def AddAction.toPermHom (α : Type *) [AddGroup α] [AddAction α β] :
66
- α →+ Additive (Equiv.Perm β) :=
67
- MonoidHom.toAdditive'' <| MulAction.toPermHom (Multiplicative α) β
68
- #align add_action.to_perm_hom AddAction.toPermHom
69
-
70
- /-- The tautological action by `Equiv.Perm α` on `α`.
71
-
72
- This generalizes `Function.End.applyMulAction`. -/
73
- instance Equiv.Perm.applyMulAction (α : Type *) : MulAction (Equiv.Perm α) α where
74
- smul f a := f a
75
- one_smul _ := rfl
76
- mul_smul _ _ _ := rfl
77
- #align equiv.perm.apply_mul_action Equiv.Perm.applyMulAction
78
-
79
- @[simp]
80
- protected theorem Equiv.Perm.smul_def {α : Type *} (f : Equiv.Perm α) (a : α) : f • a = f a :=
81
- rfl
82
- #align equiv.perm.smul_def Equiv.Perm.smul_def
83
-
84
- /-- `Equiv.Perm.applyMulAction` is faithful. -/
85
- instance Equiv.Perm.applyFaithfulSMul (α : Type *) : FaithfulSMul (Equiv.Perm α) α :=
86
- ⟨Equiv.ext⟩
87
- #align equiv.perm.apply_has_faithful_smul Equiv.Perm.applyFaithfulSMul
88
-
89
- variable {α} {β}
90
-
91
- @[to_additive]
92
- protected theorem MulAction.bijective (g : α) : Function.Bijective (g • · : β → β) :=
93
- (MulAction.toPerm g).bijective
94
- #align mul_action.bijective MulAction.bijective
95
- #align add_action.bijective AddAction.bijective
96
-
97
- @[to_additive]
98
- protected theorem MulAction.injective (g : α) : Function.Injective (g • · : β → β) :=
99
- (MulAction.bijective g).injective
100
- #align mul_action.injective MulAction.injective
101
- #align add_action.injective AddAction.injective
102
-
103
- @[to_additive]
104
- protected theorem MulAction.surjective (g : α) : Function.Surjective (g • · : β → β) :=
105
- (MulAction.bijective g).surjective
106
- #align mul_action.surjective MulAction.surjective
107
- #align add_action.surjective AddAction.surjective
108
-
109
- @[to_additive]
110
- theorem smul_left_cancel (g : α) {x y : β} (h : g • x = g • y) : x = y :=
111
- MulAction.injective g h
112
- #align smul_left_cancel smul_left_cancel
113
- #align vadd_left_cancel vadd_left_cancel
114
-
115
- @[to_additive (attr := simp)]
116
- theorem smul_left_cancel_iff (g : α) {x y : β} : g • x = g • y ↔ x = y :=
117
- (MulAction.injective g).eq_iff
118
- #align smul_left_cancel_iff smul_left_cancel_iff
119
- #align vadd_left_cancel_iff vadd_left_cancel_iff
120
-
121
- @[to_additive]
122
- theorem smul_eq_iff_eq_inv_smul (g : α) {x y : β} : g • x = y ↔ x = g⁻¹ • y :=
123
- (MulAction.toPerm g).apply_eq_iff_eq_symm_apply
124
- #align smul_eq_iff_eq_inv_smul smul_eq_iff_eq_inv_smul
125
- #align vadd_eq_iff_eq_neg_vadd vadd_eq_iff_eq_neg_vadd
126
-
127
- end Group
128
-
129
- section Monoid
130
-
131
- variable [Monoid α] [MulAction α β]
132
- variable (c : α) (x y : β) [Invertible c]
133
-
134
- @[simp]
135
- theorem invOf_smul_smul : ⅟c • c • x = x := inv_smul_smul (unitOfInvertible c) _
136
-
137
- @[simp]
138
- theorem smul_invOf_smul : c • (⅟ c • x) = x := smul_inv_smul (unitOfInvertible c) _
139
-
140
- variable {c x y}
141
-
142
- theorem invOf_smul_eq_iff : ⅟c • x = y ↔ x = c • y :=
143
- inv_smul_eq_iff (g := unitOfInvertible c)
144
-
145
- theorem smul_eq_iff_eq_invOf_smul : c • x = y ↔ x = ⅟c • y :=
146
- smul_eq_iff_eq_inv_smul (g := unitOfInvertible c)
147
-
148
- end Monoid
149
26
150
27
/-- `Monoid.toMulAction` is faithful on nontrivial cancellative monoids with zero. -/
151
28
instance CancelMonoidWithZero.faithfulSMul [CancelMonoidWithZero α] [Nontrivial α] :
@@ -298,22 +175,6 @@ end MulDistribMulAction
298
175
299
176
section Arrow
300
177
301
- /-- If `G` acts on `A`, then it acts also on `A → B`, by `(g • F) a = F (g⁻¹ • a)`. -/
302
- @[to_additive (attr := simps) arrowAddAction
303
- "If `G` acts on `A`, then it acts also on `A → B`, by `(g +ᵥ F) a = F (g⁻¹ +ᵥ a)`" ]
304
- def arrowAction {G A B : Type *} [DivisionMonoid G] [MulAction G A] : MulAction G (A → B) where
305
- smul g F a := F (g⁻¹ • a)
306
- one_smul := by
307
- intro f
308
- show (fun x => f ((1 : G)⁻¹ • x)) = f
309
- simp only [inv_one, one_smul]
310
- mul_smul := by
311
- intros x y f
312
- show (fun a => f ((x*y)⁻¹ • a)) = (fun a => f (y⁻¹ • x⁻¹ • a))
313
- simp only [mul_smul, mul_inv_rev]
314
- #align arrow_action arrowAction
315
- #align arrow_add_action arrowAddAction
316
-
317
178
attribute [local instance] arrowAction
318
179
319
180
/-- When `B` is a monoid, `ArrowAction` is additionally a `MulDistribMulAction`. -/
@@ -338,19 +199,6 @@ end Arrow
338
199
339
200
namespace IsUnit
340
201
341
- section MulAction
342
-
343
- variable [Monoid α] [MulAction α β]
344
-
345
- @[to_additive]
346
- theorem smul_left_cancel {a : α} (ha : IsUnit a) {x y : β} : a • x = a • y ↔ x = y :=
347
- let ⟨u, hu⟩ := ha
348
- hu ▸ smul_left_cancel_iff u
349
- #align is_unit.smul_left_cancel IsUnit.smul_left_cancel
350
- #align is_add_unit.vadd_left_cancel IsAddUnit.vadd_left_cancel
351
-
352
- end MulAction
353
-
354
202
section DistribMulAction
355
203
356
204
variable [Monoid α] [AddMonoid β] [DistribMulAction α β]
@@ -368,12 +216,6 @@ section SMul
368
216
369
217
variable [Group α] [Monoid β]
370
218
371
- @[simp]
372
- theorem isUnit_smul_iff [MulAction α β] [SMulCommClass α β β] [IsScalarTower α β β] (g : α)
373
- (m : β) : IsUnit (g • m) ↔ IsUnit m :=
374
- ⟨fun h => inv_smul_smul g m ▸ h.smul g⁻¹, IsUnit.smul g⟩
375
- #align is_unit_smul_iff isUnit_smul_iff
376
-
377
219
theorem IsUnit.smul_sub_iff_sub_inv_smul [AddGroup β] [DistribMulAction α β] [IsScalarTower α β β]
378
220
[SMulCommClass α β β] (r : α) (a : β) : IsUnit (r • (1 : β) - a) ↔ IsUnit (1 - r⁻¹ • a) := by
379
221
rw [← isUnit_smul_iff r (1 - r⁻¹ • a), smul_sub, smul_inv_smul]
0 commit comments