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

Commit ca5c4b3

Browse files
committed
feat(group_theory/group_action): add a few instances (#10310)
* regular and opposite regular actions of a group on itself are transitive; * the action of a group on an orbit is transitive.
1 parent ca61dbf commit ca5c4b3

File tree

3 files changed

+59
-30
lines changed

3 files changed

+59
-30
lines changed

src/algebra/opposites.lean

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -286,6 +286,12 @@ instance _root_.has_mul.to_has_opposite_scalar [has_mul α] : has_scalar (opposi
286286

287287
@[simp] lemma op_smul_eq_mul [has_mul α] {a a' : α} : op a • a' = a' * a := rfl
288288

289+
-- TODO: add an additive version once we have additive opposites
290+
/-- The right regular action of a group on itself is transitive. -/
291+
instance _root_.mul_action.opposite_regular.is_pretransitive {G : Type*} [group G] :
292+
mul_action.is_pretransitive Gᵒᵖ G :=
293+
⟨λ x y, ⟨op (x⁻¹ * y), mul_inv_cancel_left _ _⟩⟩
294+
289295
instance _root_.semigroup.opposite_smul_comm_class [semigroup α] :
290296
smul_comm_class (opposite α) α α :=
291297
{ smul_comm := λ x y z, (mul_assoc _ _ _) }

src/group_theory/group_action/basic.lean

Lines changed: 6 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -97,40 +97,12 @@ def stabilizer.submonoid (b : β) : submonoid α :=
9797
@[simp, to_additive] lemma mem_stabilizer_submonoid_iff {b : β} {a : α} :
9898
a ∈ stabilizer.submonoid α b ↔ a • b = b := iff.rfl
9999

100-
variables (α β)
101-
/-- `α` acts pretransitively on `β` if for any `x y` there is `g` such that `g • x = y`.
102-
A transitive action should furthermore have `β` nonempty. -/
103-
class is_pretransitive : Prop :=
104-
(exists_smul_eq : ∀ x y : β, ∃ g : α, g • x = y)
105-
106-
variables {β}
107-
108-
lemma exists_smul_eq [is_pretransitive α β] (x y : β) :
109-
∃ m : α, m • x = y := is_pretransitive.exists_smul_eq x y
110-
111-
lemma surjective_smul [is_pretransitive α β] (x : β) :
112-
surjective (λ c : α, c • x) :=
113-
exists_smul_eq α x
114-
115-
lemma orbit_eq_univ [is_pretransitive α β] (x : β) :
100+
@[to_additive] lemma orbit_eq_univ [is_pretransitive α β] (x : β) :
116101
orbit α x = set.univ :=
117102
(surjective_smul α x).range_eq
118103

119104
end mul_action
120105

121-
namespace add_action
122-
variables (α β) [add_monoid α] [add_action α β]
123-
124-
/-- `α` acts pretransitively on `β` if for any `x y` there is `g` such that `g +ᵥ x = y`.
125-
A transitive action should furthermore have `β` nonempty. -/
126-
class is_pretransitive : Prop :=
127-
(exists_vadd_eq : ∀ x y : β, ∃ g : α, g +ᵥ x = y)
128-
129-
attribute [to_additive] mul_action.is_pretransitive mul_action.exists_smul_eq
130-
mul_action.surjective_smul mul_action.orbit_eq_univ
131-
132-
end add_action
133-
134106
namespace mul_action
135107
variable (α)
136108
variables [group α] [mul_action α β]
@@ -159,6 +131,11 @@ variables {α} {β}
159131
calc orbit α b = orbit α (a⁻¹ • a • b) : by rw inv_smul_smul
160132
... ⊆ orbit α (a • b) : orbit_smul_subset _ _
161133

134+
/-- The action of a group on an orbit is transitive. -/
135+
@[to_additive "The action of an additive group on an orbit is transitive."]
136+
instance (x : β) : is_pretransitive α (orbit α x) :=
137+
by { rintro ⟨_, a, rfl⟩ ⟨_, b, rfl⟩, use b * a⁻¹, ext1, simp [mul_smul] }⟩
138+
162139
@[to_additive] lemma orbit_eq_iff {a b : β} :
163140
orbit α a = orbit α b ↔ a ∈ orbit α b:=
164141
⟨λ h, h ▸ mem_orbit_self _, λ ⟨c, hc⟩, hc ▸ orbit_smul _ _⟩

src/group_theory/group_action/defs.lean

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ notation classes `has_scalar` and its additive version `has_vadd`:
2222
2323
The hierarchy is extended further by `module`, defined elsewhere.
2424
25-
Also provided are type-classes regarding the interaction of different group actions,
25+
Also provided are typeclasses for faithful and transitive actions, and typeclasses regarding the
26+
interaction of different group actions,
2627
2728
* `smul_comm_class M N α` and its additive version `vadd_comm_class M N α`;
2829
* `is_scalar_tower M N α` (no additive version).
@@ -46,6 +47,10 @@ variables {M N G A B α β γ : Type*}
4647

4748
open function
4849

50+
/-!
51+
### Faithful actions
52+
-/
53+
4954
/-- Typeclass for faithful actions. -/
5055
class has_faithful_vadd (G : Type*) (P : Type*) [has_vadd G P] : Prop :=
5156
(eq_of_vadd_eq_vadd : ∀ {g₁ g₂ : G}, (∀ p : P, g₁ +ᵥ p = g₂ +ᵥ p) → g₁ = g₂)
@@ -79,6 +84,47 @@ class mul_action (α : Type*) (β : Type*) [monoid α] extends has_scalar α β
7984
(one_smul : ∀ b : β, (1 : α) • b = b)
8085
(mul_smul : ∀ (x y : α) (b : β), (x * y) • b = x • y • b)
8186

87+
/-!
88+
### (Pre)transitive action
89+
90+
`M` acts pretransitively on `α` if for any `x y` there is `g` such that `g • x = y` (or `g +ᵥ x = y`
91+
for an additive action). A transitive action should furthermore have `α` nonempty.
92+
93+
In this section we define typeclasses `mul_action.is_pretransitive` and
94+
`add_action.is_pretransitive` and provide `mul_action.exists_smul_eq`/`add_action.exists_vadd_eq`,
95+
`mul_action.surjective_smul`/`add_action.surjective_vadd` as public interface to access this
96+
property. We do not provide typeclasses `*_action.is_transitive`; users should assume
97+
`[mul_action.is_pretransitive M α] [nonempty α]` instead. -/
98+
99+
/-- `M` acts pretransitively on `α` if for any `x y` there is `g` such that `g +ᵥ x = y`.
100+
A transitive action should furthermore have `α` nonempty. -/
101+
class add_action.is_pretransitive (M α : Type*) [has_vadd M α] : Prop :=
102+
(exists_vadd_eq : ∀ x y : α, ∃ g : M, g +ᵥ x = y)
103+
104+
/-- `M` acts pretransitively on `α` if for any `x y` there is `g` such that `g • x = y`.
105+
A transitive action should furthermore have `α` nonempty. -/
106+
@[to_additive] class mul_action.is_pretransitive (M α : Type*) [has_scalar M α] : Prop :=
107+
(exists_smul_eq : ∀ x y : α, ∃ g : M, g • x = y)
108+
109+
namespace mul_action
110+
111+
variables (M) {α} [has_scalar M α] [is_pretransitive M α]
112+
113+
@[to_additive] lemma exists_smul_eq (x y : α) : ∃ m : M, m • x = y :=
114+
is_pretransitive.exists_smul_eq x y
115+
116+
@[to_additive] lemma surjective_smul (x : α) : surjective (λ c : M, c • x) := exists_smul_eq M x
117+
118+
/-- The regular action of a group on itself is transitive. -/
119+
@[to_additive] instance regular.is_pretransitive [group G] : is_pretransitive G G :=
120+
⟨λ x y, ⟨y * x⁻¹, inv_mul_cancel_right _ _⟩⟩
121+
122+
end mul_action
123+
124+
/-!
125+
### Scalar tower and commuting actions
126+
-/
127+
82128
/-- A typeclass mixin saying that two additive actions on the same space commute. -/
83129
class vadd_comm_class (M N α : Type*) [has_vadd M α] [has_vadd N α] : Prop :=
84130
(vadd_comm : ∀ (m : M) (n : N) (a : α), m +ᵥ (n +ᵥ a) = n +ᵥ (m +ᵥ a))

0 commit comments

Comments
 (0)