@@ -33,7 +33,7 @@ Hausdorff, discrete group, properly discontinuous, quotient space
33
33
34
34
-/
35
35
36
- open_locale topological_space
36
+ open_locale topological_space pointwise
37
37
38
38
open filter set
39
39
@@ -61,6 +61,232 @@ export has_continuous_const_smul (continuous_const_smul)
61
61
62
62
export has_continuous_const_vadd (continuous_const_vadd)
63
63
64
+ variables {M α β : Type *}
65
+
66
+ section has_scalar
67
+ variables [topological_space α] [has_scalar M α] [has_continuous_const_smul M α]
68
+
69
+ @[to_additive]
70
+ lemma filter.tendsto.const_smul {f : β → α} {l : filter β} {a : α} (hf : tendsto f l (𝓝 a))
71
+ (c : M) :
72
+ tendsto (λ x, c • f x) l (𝓝 (c • a)) :=
73
+ ((continuous_const_smul _).tendsto _).comp hf
74
+
75
+ variables [topological_space β] {f : β → M} {g : β → α} {b : β} {s : set β}
76
+
77
+ @[to_additive]
78
+ lemma continuous_within_at.const_smul (hg : continuous_within_at g s b) (c : M) :
79
+ continuous_within_at (λ x, c • g x) s b :=
80
+ hg.const_smul c
81
+
82
+ @[to_additive]
83
+ lemma continuous_at.const_smul (hg : continuous_at g b) (c : M) :
84
+ continuous_at (λ x, c • g x) b :=
85
+ hg.const_smul c
86
+
87
+ @[to_additive]
88
+ lemma continuous_on.const_smul (hg : continuous_on g s) (c : M) :
89
+ continuous_on (λ x, c • g x) s :=
90
+ λ x hx, (hg x hx).const_smul c
91
+
92
+ @[to_additive]
93
+ lemma continuous.const_smul (hg : continuous g) (c : M) :
94
+ continuous (λ x, c • g x) :=
95
+ (continuous_const_smul _).comp hg
96
+
97
+ /-- If a scalar is central, then its right action is continuous when its left action is. -/
98
+ instance has_continuous_const_smul.op [has_scalar Mᵐᵒᵖ α] [is_central_scalar M α] :
99
+ has_continuous_const_smul Mᵐᵒᵖ α :=
100
+ ⟨ mul_opposite.rec $ λ c, by simpa only [op_smul_eq_smul] using continuous_const_smul c ⟩
101
+
102
+ @[to_additive]
103
+ instance [has_scalar M β] [has_continuous_const_smul M β] :
104
+ has_continuous_const_smul M (α × β) :=
105
+ ⟨λ _, (continuous_fst.const_smul _).prod_mk (continuous_snd.const_smul _)⟩
106
+
107
+ @[to_additive]
108
+ instance {ι : Type *} {γ : ι → Type *} [∀ i, topological_space (γ i)] [Π i, has_scalar M (γ i)]
109
+ [∀ i, has_continuous_const_smul M (γ i)] : has_continuous_const_smul M (Π i, γ i) :=
110
+ ⟨λ _, continuous_pi $ λ i, (continuous_apply i).const_smul _⟩
111
+
112
+ end has_scalar
113
+
114
+ section monoid
115
+
116
+ variables [topological_space α]
117
+ variables [monoid M] [mul_action M α] [has_continuous_const_smul M α]
118
+
119
+ @[to_additive] instance units.has_continuous_const_smul : has_continuous_const_smul Mˣ α :=
120
+ { continuous_const_smul := λ m, (continuous_const_smul (m : M) : _) }
121
+
122
+ @[to_additive]
123
+ lemma smul_closure_subset (c : M) (s : set α) : c • closure s ⊆ closure (c • s) :=
124
+ ((set.maps_to_image _ _).closure $ continuous_id.const_smul c).image_subset
125
+
126
+ @[to_additive]
127
+ lemma smul_closure_orbit_subset (c : M) (x : α) :
128
+ c • closure (mul_action.orbit M x) ⊆ closure (mul_action.orbit M x) :=
129
+ (smul_closure_subset c _).trans $ closure_mono $ mul_action.smul_orbit_subset _ _
130
+
131
+ end monoid
132
+
133
+ section group
134
+
135
+ variables {G : Type *} [topological_space α] [group G] [mul_action G α]
136
+ [has_continuous_const_smul G α]
137
+
138
+ @[to_additive]
139
+ lemma tendsto_const_smul_iff {f : β → α} {l : filter β} {a : α} (c : G) :
140
+ tendsto (λ x, c • f x) l (𝓝 $ c • a) ↔ tendsto f l (𝓝 a) :=
141
+ ⟨λ h, by simpa only [inv_smul_smul] using h.const_smul c⁻¹,
142
+ λ h, h.const_smul _⟩
143
+
144
+ variables [topological_space β] {f : β → α} {b : β} {s : set β}
145
+
146
+ @[to_additive]
147
+ lemma continuous_within_at_const_smul_iff (c : G) :
148
+ continuous_within_at (λ x, c • f x) s b ↔ continuous_within_at f s b :=
149
+ tendsto_const_smul_iff c
150
+
151
+ @[to_additive]
152
+ lemma continuous_on_const_smul_iff (c : G) : continuous_on (λ x, c • f x) s ↔ continuous_on f s :=
153
+ forall₂_congr $ λ b hb, continuous_within_at_const_smul_iff c
154
+
155
+ @[to_additive]
156
+ lemma continuous_at_const_smul_iff (c : G) :
157
+ continuous_at (λ x, c • f x) b ↔ continuous_at f b :=
158
+ tendsto_const_smul_iff c
159
+
160
+ @[to_additive]
161
+ lemma continuous_const_smul_iff (c : G) :
162
+ continuous (λ x, c • f x) ↔ continuous f :=
163
+ by simp only [continuous_iff_continuous_at, continuous_at_const_smul_iff]
164
+
165
+ /-- The homeomorphism given by scalar multiplication by a given element of a group `Γ` acting on
166
+ `T` is a homeomorphism from `T` to itself. -/
167
+ @[to_additive] def homeomorph.smul {G : Type *} [group G]
168
+ [mul_action G α] [has_continuous_const_smul G α] (γ : G) : α ≃ₜ α :=
169
+ { to_equiv := mul_action.to_perm γ,
170
+ continuous_to_fun := continuous_const_smul γ,
171
+ continuous_inv_fun := continuous_const_smul γ⁻¹ }
172
+
173
+ /-- The homeomorphism given by affine-addition by an element of an additive group `Γ` acting on
174
+ `T` is a homeomorphism from `T` to itself. -/
175
+ add_decl_doc homeomorph.vadd
176
+
177
+ @[to_additive]
178
+ lemma is_open_map_smul (c : G) : is_open_map (λ x : α, c • x) :=
179
+ (homeomorph.smul c).is_open_map
180
+
181
+ @[to_additive] lemma is_open.smul {s : set α} (hs : is_open s) (c : G) : is_open (c • s) :=
182
+ is_open_map_smul c s hs
183
+
184
+ @[to_additive]
185
+ lemma is_closed_map_smul (c : G) : is_closed_map (λ x : α, c • x) :=
186
+ (homeomorph.smul c).is_closed_map
187
+
188
+ @[to_additive] lemma is_closed.smul {s : set α} (hs : is_closed s) (c : G) : is_closed (c • s) :=
189
+ is_closed_map_smul c s hs
190
+
191
+ end group
192
+
193
+ section group_with_zero
194
+
195
+ variables {G₀ : Type *} [topological_space α] [group_with_zero G₀] [mul_action G₀ α]
196
+ [has_continuous_const_smul G₀ α]
197
+
198
+ lemma tendsto_const_smul_iff₀ {f : β → α} {l : filter β} {a : α} {c : G₀} (hc : c ≠ 0 ) :
199
+ tendsto (λ x, c • f x) l (𝓝 $ c • a) ↔ tendsto f l (𝓝 a) :=
200
+ tendsto_const_smul_iff (units.mk0 c hc)
201
+
202
+ variables [topological_space β] {f : β → α} {b : β} {c : G₀} {s : set β}
203
+
204
+ lemma continuous_within_at_const_smul_iff₀ (hc : c ≠ 0 ) :
205
+ continuous_within_at (λ x, c • f x) s b ↔ continuous_within_at f s b :=
206
+ tendsto_const_smul_iff (units.mk0 c hc)
207
+
208
+ lemma continuous_on_const_smul_iff₀ (hc : c ≠ 0 ) :
209
+ continuous_on (λ x, c • f x) s ↔ continuous_on f s :=
210
+ continuous_on_const_smul_iff (units.mk0 c hc)
211
+
212
+ lemma continuous_at_const_smul_iff₀ (hc : c ≠ 0 ) :
213
+ continuous_at (λ x, c • f x) b ↔ continuous_at f b :=
214
+ continuous_at_const_smul_iff (units.mk0 c hc)
215
+
216
+ lemma continuous_const_smul_iff₀ (hc : c ≠ 0 ) :
217
+ continuous (λ x, c • f x) ↔ continuous f :=
218
+ continuous_const_smul_iff (units.mk0 c hc)
219
+
220
+ /-- Scalar multiplication by a non-zero element of a group with zero acting on `α` is a
221
+ homeomorphism from `α` onto itself. -/
222
+ protected def homeomorph.smul_of_ne_zero (c : G₀) (hc : c ≠ 0 ) : α ≃ₜ α :=
223
+ homeomorph.smul (units.mk0 c hc)
224
+
225
+ lemma is_open_map_smul₀ {c : G₀} (hc : c ≠ 0 ) : is_open_map (λ x : α, c • x) :=
226
+ (homeomorph.smul_of_ne_zero c hc).is_open_map
227
+
228
+ lemma is_open.smul₀ {c : G₀} {s : set α} (hs : is_open s) (hc : c ≠ 0 ) : is_open (c • s) :=
229
+ is_open_map_smul₀ hc s hs
230
+
231
+ lemma interior_smul₀ {c : G₀} (hc : c ≠ 0 ) (s : set α) : interior (c • s) = c • interior s :=
232
+ ((homeomorph.smul_of_ne_zero c hc).image_interior s).symm
233
+
234
+ /-- `smul` is a closed map in the second argument.
235
+
236
+ The lemma that `smul` is a closed map in the first argument (for a normed space over a complete
237
+ normed field) is `is_closed_map_smul_left` in `analysis.normed_space.finite_dimension`. -/
238
+ lemma is_closed_map_smul_of_ne_zero {c : G₀} (hc : c ≠ 0 ) : is_closed_map (λ x : α, c • x) :=
239
+ (homeomorph.smul_of_ne_zero c hc).is_closed_map
240
+
241
+ /-- `smul` is a closed map in the second argument.
242
+
243
+ The lemma that `smul` is a closed map in the first argument (for a normed space over a complete
244
+ normed field) is `is_closed_map_smul_left` in `analysis.normed_space.finite_dimension`. -/
245
+ lemma is_closed_map_smul₀ {𝕜 M : Type *} [division_ring 𝕜] [add_comm_monoid M] [topological_space M]
246
+ [t1_space M] [module 𝕜 M] [has_continuous_const_smul 𝕜 M] (c : 𝕜) :
247
+ is_closed_map (λ x : M, c • x) :=
248
+ begin
249
+ rcases eq_or_ne c 0 with (rfl|hne),
250
+ { simp only [zero_smul], exact is_closed_map_const },
251
+ { exact (homeomorph.smul_of_ne_zero c hne).is_closed_map },
252
+ end
253
+
254
+ end group_with_zero
255
+
256
+ namespace is_unit
257
+
258
+ variables [monoid M] [topological_space α] [mul_action M α] [has_continuous_const_smul M α]
259
+
260
+ lemma tendsto_const_smul_iff {f : β → α} {l : filter β} {a : α} {c : M} (hc : is_unit c) :
261
+ tendsto (λ x, c • f x) l (𝓝 $ c • a) ↔ tendsto f l (𝓝 a) :=
262
+ let ⟨u, hu⟩ := hc in hu ▸ tendsto_const_smul_iff u
263
+
264
+ variables [topological_space β] {f : β → α} {b : β} {c : M} {s : set β}
265
+
266
+ lemma continuous_within_at_const_smul_iff (hc : is_unit c) :
267
+ continuous_within_at (λ x, c • f x) s b ↔ continuous_within_at f s b :=
268
+ let ⟨u, hu⟩ := hc in hu ▸ continuous_within_at_const_smul_iff u
269
+
270
+ lemma continuous_on_const_smul_iff (hc : is_unit c) :
271
+ continuous_on (λ x, c • f x) s ↔ continuous_on f s :=
272
+ let ⟨u, hu⟩ := hc in hu ▸ continuous_on_const_smul_iff u
273
+
274
+ lemma continuous_at_const_smul_iff (hc : is_unit c) :
275
+ continuous_at (λ x, c • f x) b ↔ continuous_at f b :=
276
+ let ⟨u, hu⟩ := hc in hu ▸ continuous_at_const_smul_iff u
277
+
278
+ lemma continuous_const_smul_iff (hc : is_unit c) :
279
+ continuous (λ x, c • f x) ↔ continuous f :=
280
+ let ⟨u, hu⟩ := hc in hu ▸ continuous_const_smul_iff u
281
+
282
+ lemma is_open_map_smul (hc : is_unit c) : is_open_map (λ x : α, c • x) :=
283
+ let ⟨u, hu⟩ := hc in hu ▸ is_open_map_smul u
284
+
285
+ lemma is_closed_map_smul (hc : is_unit c) : is_closed_map (λ x : α, c • x) :=
286
+ let ⟨u, hu⟩ := hc in hu ▸ is_closed_map_smul u
287
+
288
+ end is_unit
289
+
64
290
/-- Class `properly_discontinuous_smul Γ T` says that the scalar multiplication `(•) : Γ → T → T`
65
291
is properly discontinuous, that is, for any pair of compact sets `K, L` in `T`, only finitely many
66
292
`γ:Γ` move `K` to have nontrivial intersection with `L`.
@@ -93,26 +319,6 @@ export properly_discontinuous_smul (finite_disjoint_inter_image)
93
319
94
320
export properly_discontinuous_vadd (finite_disjoint_inter_image)
95
321
96
- /-- The homeomorphism given by scalar multiplication by a given element of a group `Γ` acting on
97
- `T` is a homeomorphism from `T` to itself. -/
98
- def homeomorph.smul {T : Type *} [topological_space T] {Γ : Type *} [group Γ]
99
- [mul_action Γ T] [has_continuous_const_smul Γ T] (γ : Γ) :
100
- T ≃ₜ T :=
101
- { to_equiv := mul_action.to_perm_hom Γ T γ,
102
- continuous_to_fun := continuous_const_smul γ,
103
- continuous_inv_fun := continuous_const_smul γ⁻¹ }
104
-
105
- /-- The homeomorphism given by affine-addition by an element of an additive group `Γ` acting on
106
- `T` is a homeomorphism from `T` to itself. -/
107
- def homeomorph.vadd {T : Type *} [topological_space T] {Γ : Type *} [add_group Γ]
108
- [add_action Γ T] [has_continuous_const_vadd Γ T] (γ : Γ) :
109
- T ≃ₜ T :=
110
- { to_equiv := add_action.to_perm_hom T Γ γ,
111
- continuous_to_fun := continuous_const_vadd γ,
112
- continuous_inv_fun := continuous_const_vadd (-γ) }
113
-
114
- attribute [to_additive homeomorph.vadd] homeomorph.smul
115
-
116
322
/-- The quotient map by a group action is open. -/
117
323
@[to_additive]
118
324
lemma is_open_map_quotient_mk_mul [has_continuous_const_smul Γ T] :
0 commit comments