Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit ca38357

Browse files
committed
feat(group_theory/group_action): add distrib_mul_action.to_add_aut and mul_distrib_mul_action.to_mul_aut (#9224)
These can be used to golf the existing `mul_aut_arrow`. This also moves some definitions out of `algebra/group_ring_action.lean` into a more appropriate file.
1 parent 17a473e commit ca38357

File tree

3 files changed

+65
-23
lines changed

3 files changed

+65
-23
lines changed

src/algebra/group_ring_action.lean

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -50,18 +50,6 @@ instance mul_semiring_action.to_mul_distrib_mul_action [h : mul_semiring_action
5050
mul_distrib_mul_action M R :=
5151
{ ..h }
5252

53-
/-- Each element of the group defines an additive monoid isomorphism. -/
54-
@[simps]
55-
def distrib_mul_action.to_add_equiv [distrib_mul_action G A] (x : G) : A ≃+ A :=
56-
{ .. distrib_mul_action.to_add_monoid_hom A x,
57-
.. mul_action.to_perm_hom G A x }
58-
59-
/-- Each element of the group defines a multiplicative monoid isomorphism. -/
60-
@[simps]
61-
def mul_distrib_mul_action.to_mul_equiv [mul_distrib_mul_action G M] (x : G) : M ≃* M :=
62-
{ .. mul_distrib_mul_action.to_monoid_hom M x,
63-
.. mul_action.to_perm_hom G M x }
64-
6553
/-- Each element of the monoid defines a semiring homomorphism. -/
6654
@[simps]
6755
def mul_semiring_action.to_ring_hom [mul_semiring_action M R] (x : M) : R →+* R :=
@@ -75,7 +63,7 @@ theorem to_ring_hom_injective [mul_semiring_action M R] [has_faithful_scalar M R
7563
/-- Each element of the group defines a semiring isomorphism. -/
7664
@[simps]
7765
def mul_semiring_action.to_ring_equiv [mul_semiring_action G R] (x : G) : R ≃+* R :=
78-
{ .. distrib_mul_action.to_add_equiv G R x,
66+
{ .. distrib_mul_action.to_add_equiv R x,
7967
.. mul_semiring_action.to_ring_hom G R x }
8068

8169
section

src/algebra/module/linear_map.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -693,7 +693,7 @@ variables [group S] [distrib_mul_action S M] [smul_comm_class S R M]
693693
This is a stronger version of `distrib_mul_action.to_add_equiv`. -/
694694
@[simps]
695695
def to_linear_equiv (s : S) : M ≃ₗ[R] M :=
696-
{ ..to_add_equiv _ _ s,
696+
{ ..to_add_equiv M s,
697697
..to_linear_map R M s }
698698

699699
end

src/group_theory/group_action/group.lean

Lines changed: 63 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -47,13 +47,15 @@ add_decl_doc add_action.to_perm
4747
variables (α) (β)
4848

4949
/-- Given an action of a group `α` on a set `β`, each `g : α` defines a permutation of `β`. -/
50+
@[simps]
5051
def mul_action.to_perm_hom : α →* equiv.perm β :=
5152
{ to_fun := mul_action.to_perm,
5253
map_one' := equiv.ext $ one_smul α,
5354
map_mul' := λ u₁ u₂, equiv.ext $ mul_smul (u₁:α) u₂ }
5455

5556
/-- Given an action of a additive group `α` on a set `β`, each `g : α` defines a permutation of
5657
`β`. -/
58+
@[simps]
5759
def add_action.to_perm_hom (α : Type*) [add_group α] [add_action α β] :
5860
α →+ additive (equiv.perm β) :=
5961
{ to_fun := λ a, additive.of_mul $ add_action.to_perm a,
@@ -136,6 +138,29 @@ section distrib_mul_action
136138
section group
137139
variables [group α] [add_monoid β] [distrib_mul_action α β]
138140

141+
variables (β)
142+
143+
/-- Each element of the group defines an additive monoid isomorphism.
144+
145+
This is a stronger version of `mul_action.to_perm`. -/
146+
@[simps {simp_rhs := tt}]
147+
def distrib_mul_action.to_add_equiv (x : α) : β ≃+ β :=
148+
{ .. distrib_mul_action.to_add_monoid_hom β x,
149+
.. mul_action.to_perm_hom α β x }
150+
151+
variables (α β)
152+
153+
/-- Each element of the group defines an additive monoid isomorphism.
154+
155+
This is a stronger version of `mul_action.to_perm_hom`. -/
156+
@[simps]
157+
def distrib_mul_action.to_add_aut : α →* add_aut β :=
158+
{ to_fun := distrib_mul_action.to_add_equiv β,
159+
map_one' := add_equiv.ext (one_smul _),
160+
map_mul' := λ a₁ a₂, add_equiv.ext (mul_smul _ _) }
161+
162+
variables {α β}
163+
139164
theorem smul_eq_zero_iff_eq (a : α) {x : β} : a • x = 0 ↔ x = 0 :=
140165
⟨λ h, by rw [← inv_smul_smul a x, h, smul_zero], λ h, h.symm ▸ smul_zero _⟩
141166

@@ -157,6 +182,34 @@ end gwz
157182

158183
end distrib_mul_action
159184

185+
section mul_distrib_mul_action
186+
variables [group α] [monoid β] [mul_distrib_mul_action α β]
187+
188+
variables (β)
189+
190+
/-- Each element of the group defines a multiplicative monoid isomorphism.
191+
192+
This is a stronger version of `mul_action.to_perm`. -/
193+
@[simps {simp_rhs := tt}]
194+
def mul_distrib_mul_action.to_mul_equiv (x : α) : β ≃* β :=
195+
{ .. mul_distrib_mul_action.to_monoid_hom β x,
196+
.. mul_action.to_perm_hom α β x }
197+
198+
variables (α β)
199+
200+
/-- Each element of the group defines an multiplicative monoid isomorphism.
201+
202+
This is a stronger version of `mul_action.to_perm_hom`. -/
203+
@[simps]
204+
def mul_distrib_mul_action.to_mul_aut : α →* mul_aut β :=
205+
{ to_fun := mul_distrib_mul_action.to_mul_equiv β,
206+
map_one' := mul_equiv.ext (one_smul _),
207+
map_mul' := λ a₁ a₂, mul_equiv.ext (mul_smul _ _) }
208+
209+
variables {α β}
210+
211+
end mul_distrib_mul_action
212+
160213
section arrow
161214

162215
/-- If `G` acts on `A`, then it acts also on `A → B`, by `(g • F) a = F (g⁻¹ • a)`. -/
@@ -167,17 +220,18 @@ section arrow
167220

168221
local attribute [instance] arrow_action
169222

223+
/-- When `B` is a monoid, `arrow_action` is additionally a `mul_distrib_mul_action`. -/
224+
def arrow_mul_distrib_mul_action {G A B : Type*} [group G] [mul_action G A] [monoid B] :
225+
mul_distrib_mul_action G (A → B) :=
226+
{ smul_one := λ g, rfl,
227+
smul_mul := λ g f₁ f₂, rfl }
228+
229+
local attribute [instance] arrow_mul_distrib_mul_action
230+
170231
/-- Given groups `G H` with `G` acting on `A`, `G` acts by
171232
multiplicative automorphisms on `A → H`. -/
172-
@[simps] def mul_aut_arrow {G A H} [group G] [mul_action G A] [group H] : G →* mul_aut (A → H) :=
173-
{ to_fun := λ g,
174-
{ to_fun := λ F, g • F,
175-
inv_fun := λ F, g⁻¹ • F,
176-
left_inv := λ F, inv_smul_smul g F,
177-
right_inv := λ F, smul_inv_smul g F,
178-
map_mul' := by { intros, ext, simp only [arrow_action_to_has_scalar_smul, pi.mul_apply] } },
179-
map_one' := by { ext, simp only [mul_aut.one_apply, mul_equiv.coe_mk, one_smul] },
180-
map_mul' := by { intros, ext, simp only [mul_smul, mul_equiv.coe_mk, mul_aut.mul_apply] } }
233+
@[simps] def mul_aut_arrow {G A H} [group G] [mul_action G A] [monoid H] : G →* mul_aut (A → H) :=
234+
mul_distrib_mul_action.to_mul_aut _ _
181235

182236
end arrow
183237

0 commit comments

Comments
 (0)