@@ -22,7 +22,8 @@ notation classes `has_scalar` and its additive version `has_vadd`:
22
22
23
23
The hierarchy is extended further by `module`, defined elsewhere.
24
24
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,
26
27
27
28
* `smul_comm_class M N α` and its additive version `vadd_comm_class M N α`;
28
29
* `is_scalar_tower M N α` (no additive version).
@@ -46,6 +47,10 @@ variables {M N G A B α β γ : Type*}
46
47
47
48
open function
48
49
50
+ /-!
51
+ ### Faithful actions
52
+ -/
53
+
49
54
/-- Typeclass for faithful actions. -/
50
55
class has_faithful_vadd (G : Type *) (P : Type *) [has_vadd G P] : Prop :=
51
56
(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 α β
79
84
(one_smul : ∀ b : β, (1 : α) • b = b)
80
85
(mul_smul : ∀ (x y : α) (b : β), (x * y) • b = x • y • b)
81
86
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
+
82
128
/-- A typeclass mixin saying that two additive actions on the same space commute. -/
83
129
class vadd_comm_class (M N α : Type *) [has_vadd M α] [has_vadd N α] : Prop :=
84
130
(vadd_comm : ∀ (m : M) (n : N) (a : α), m +ᵥ (n +ᵥ a) = n +ᵥ (m +ᵥ a))
0 commit comments