@@ -7,6 +7,7 @@ import topology.continuous_on
7
7
import group_theory.submonoid.operations
8
8
import algebra.group.prod
9
9
import algebra.pointwise
10
+ import algebra.big_operators.finprod
10
11
11
12
/-!
12
13
# Theory of topological monoids
@@ -19,17 +20,17 @@ the definitions.
19
20
open classical set filter topological_space
20
21
open_locale classical topological_space big_operators
21
22
22
- variables {α β M N : Type *}
23
+ variables {ι α X M N : Type *} [topological_space X]
23
24
24
25
/-- Basic hypothesis to talk about a topological additive monoid or a topological additive
25
- semigroup. A topological additive monoid over `α `, for example, is obtained by requiring both the
26
- instances `add_monoid α ` and `has_continuous_add α `. -/
26
+ semigroup. A topological additive monoid over `M `, for example, is obtained by requiring both the
27
+ instances `add_monoid M ` and `has_continuous_add M `. -/
27
28
class has_continuous_add (M : Type *) [topological_space M] [has_add M] : Prop :=
28
29
(continuous_add : continuous (λ p : M × M, p.1 + p.2 ))
29
30
30
31
/-- Basic hypothesis to talk about a topological monoid or a topological semigroup.
31
- A topological monoid over `α `, for example, is obtained by requiring both the instances `monoid α `
32
- and `has_continuous_mul α `. -/
32
+ A topological monoid over `M `, for example, is obtained by requiring both the instances `monoid M `
33
+ and `has_continuous_mul M `. -/
33
34
@[to_additive]
34
35
class has_continuous_mul (M : Type *) [topological_space M] [has_mul M] : Prop :=
35
36
(continuous_mul : continuous (λ p : M × M, p.1 * p.2 ))
@@ -43,8 +44,7 @@ lemma continuous_mul : continuous (λp:M×M, p.1 * p.2) :=
43
44
has_continuous_mul.continuous_mul
44
45
45
46
@[continuity, to_additive]
46
- lemma continuous.mul [topological_space α] {f : α → M} {g : α → M}
47
- (hf : continuous f) (hg : continuous g) :
47
+ lemma continuous.mul {f g : X → M} (hf : continuous f) (hg : continuous g) :
48
48
continuous (λx, f x * g x) :=
49
49
continuous_mul.comp (hf.prod_mk hg : _)
50
50
@@ -60,8 +60,8 @@ lemma continuous_mul_right (a : M) : continuous (λ b:M, b * a) :=
60
60
continuous_id.mul continuous_const
61
61
62
62
@[to_additive]
63
- lemma continuous_on.mul [topological_space α] {f : α → M} {g : α → M} {s : set α}
64
- (hf : continuous_on f s) ( hg : continuous_on g s) :
63
+ lemma continuous_on.mul {f g : X → M} {s : set X} (hf : continuous_on f s)
64
+ (hg : continuous_on g s) :
65
65
continuous_on (λx, f x * g x) s :=
66
66
(continuous_mul.comp_continuous_on (hf.prod hg) : _)
67
67
@@ -70,7 +70,7 @@ lemma tendsto_mul {a b : M} : tendsto (λp:M×M, p.fst * p.snd) (𝓝 (a, b)) (
70
70
continuous_iff_continuous_at.mp has_continuous_mul.continuous_mul (a, b)
71
71
72
72
@[to_additive]
73
- lemma filter.tendsto.mul {f : α → M} { g : α → M} {x : filter α} {a b : M}
73
+ lemma filter.tendsto.mul {f g : α → M} {x : filter α} {a b : M}
74
74
(hf : tendsto f x (𝓝 a)) (hg : tendsto g x (𝓝 b)) :
75
75
tendsto (λx, f x * g x) x (𝓝 (a * b)) :=
76
76
tendsto_mul.comp (hf.prod_mk_nhds hg)
@@ -86,14 +86,13 @@ lemma filter.tendsto.mul_const (b : M) {c : M} {f : α → M} {l : filter α}
86
86
h.mul tendsto_const_nhds
87
87
88
88
@[to_additive]
89
- lemma continuous_at.mul [topological_space α] {f : α → M} {g : α → M} {x : α}
90
- (hf : continuous_at f x) (hg : continuous_at g x) :
89
+ lemma continuous_at.mul {f g : X → M} {x : X} (hf : continuous_at f x) (hg : continuous_at g x) :
91
90
continuous_at (λx, f x * g x) x :=
92
91
hf.mul hg
93
92
94
93
@[to_additive]
95
- lemma continuous_within_at.mul [topological_space α] {f : α → M} { g : α → M} {s : set α } {x : α}
96
- (hf : continuous_within_at f s x) ( hg : continuous_within_at g s x) :
94
+ lemma continuous_within_at.mul {f g : X → M} {s : set X } {x : X} (hf : continuous_within_at f s x)
95
+ (hg : continuous_within_at g s x) :
97
96
continuous_within_at (λx, f x * g x) s x :=
98
97
hf.mul hg
99
98
@@ -103,8 +102,8 @@ instance [topological_space N] [has_mul N] [has_continuous_mul N] : has_continuo
103
102
((continuous_snd.comp continuous_fst).mul (continuous_snd.comp continuous_snd))⟩
104
103
105
104
@[to_additive]
106
- instance pi.has_continuous_mul {C : β → Type *} [∀ b , topological_space (C b )]
107
- [∀ b , has_mul (C b )] [∀ b , has_continuous_mul (C b )] : has_continuous_mul (Π b , C b ) :=
105
+ instance pi.has_continuous_mul {C : ι → Type *} [∀ i , topological_space (C i )]
106
+ [∀ i , has_mul (C i )] [∀ i , has_continuous_mul (C i )] : has_continuous_mul (Π i , C i ) :=
108
107
{ continuous_mul := continuous_pi (λ i, continuous.mul
109
108
((continuous_apply i).comp continuous_fst) ((continuous_apply i).comp continuous_snd)) }
110
109
@@ -243,8 +242,8 @@ begin
243
242
end
244
243
245
244
@[to_additive]
246
- lemma tendsto_list_prod {f : β → α → M} {x : filter α} {a : β → M} :
247
- ∀l:list β , (∀c ∈l, tendsto (f c ) x (𝓝 (a c ))) →
245
+ lemma tendsto_list_prod {f : ι → α → M} {x : filter α} {a : ι → M} :
246
+ ∀ l:list ι , (∀i ∈l, tendsto (f i ) x (𝓝 (a i ))) →
248
247
tendsto (λb, (l.map (λc, f c b)).prod) x (𝓝 ((l.map a).prod))
249
248
| [] _ := by simp [tendsto_const_nhds]
250
249
| (f :: l) h :=
@@ -255,9 +254,9 @@ lemma tendsto_list_prod {f : β → α → M} {x : filter α} {a : β → M} :
255
254
end
256
255
257
256
@[to_additive]
258
- lemma continuous_list_prod [topological_space α] {f : β → α → M} (l : list β )
259
- (h : ∀c ∈l, continuous (f c )) :
260
- continuous (λa, (l.map (λc , f c a)).prod) :=
257
+ lemma continuous_list_prod {f : ι → X → M} (l : list ι )
258
+ (h : ∀i ∈l, continuous (f i )) :
259
+ continuous (λa, (l.map (λi , f i a)).prod) :=
261
260
continuous_iff_continuous_at.2 $ assume x, tendsto_list_prod l $ assume c hc,
262
261
continuous_iff_continuous_at.1 (h c hc) x
263
262
@@ -268,7 +267,7 @@ lemma continuous_pow : ∀ n : ℕ, continuous (λ a : M, a ^ n)
268
267
| (k+1 ) := by { simp only [pow_succ], exact continuous_id.mul (continuous_pow _) }
269
268
270
269
@[continuity]
271
- lemma continuous.pow {f : α → M} [topological_space α] (h : continuous f) (n : ℕ) :
270
+ lemma continuous.pow {f : X → M} (h : continuous f) (n : ℕ) :
272
271
continuous (λ b, (f b) ^ n) :=
273
272
continuous.comp (continuous_pow n) h
274
273
@@ -338,31 +337,55 @@ mem_nhds_sets oS S.one_mem
338
337
variable [has_continuous_mul M]
339
338
340
339
@[to_additive]
341
- lemma tendsto_multiset_prod {f : β → α → M} {x : filter α} {a : β → M} (s : multiset β ) :
342
- (∀c∈ s, tendsto (f c ) x (𝓝 (a c ))) →
340
+ lemma tendsto_multiset_prod {f : ι → α → M} {x : filter α} {a : ι → M} (s : multiset ι ) :
341
+ (∀ i ∈ s, tendsto (f i ) x (𝓝 (a i ))) →
343
342
tendsto (λb, (s.map (λc, f c b)).prod) x (𝓝 ((s.map a).prod)) :=
344
- by { rcases s with ⟨l⟩, simp, exact tendsto_list_prod l }
343
+ by { rcases s with ⟨l⟩, simpa using tendsto_list_prod l }
345
344
346
345
@[to_additive]
347
- lemma tendsto_finset_prod {f : β → α → M} {x : filter α} {a : β → M} (s : finset β ) :
348
- (∀c∈ s, tendsto (f c ) x (𝓝 (a c ))) → tendsto (λb, ∏ c in s, f c b) x (𝓝 (∏ c in s, a c)) :=
346
+ lemma tendsto_finset_prod {f : ι → α → M} {x : filter α} {a : ι → M} (s : finset ι ) :
347
+ (∀ i ∈ s, tendsto (f i ) x (𝓝 (a i ))) → tendsto (λb, ∏ c in s, f c b) x (𝓝 (∏ c in s, a c)) :=
349
348
tendsto_multiset_prod _
350
349
351
350
@[to_additive, continuity]
352
- lemma continuous_multiset_prod [topological_space α] {f : β → α → M} (s : multiset β ) :
353
- (∀c∈ s, continuous (f c )) → continuous (λa , (s.map (λc , f c a)).prod) :=
354
- by { rcases s with ⟨l⟩, simp, exact continuous_list_prod l }
351
+ lemma continuous_multiset_prod {f : ι → X → M} (s : multiset ι ) :
352
+ (∀i ∈ s, continuous (f i )) → continuous (λ a , (s.map (λ i , f i a)).prod) :=
353
+ by { rcases s with ⟨l⟩, simpa using continuous_list_prod l }
355
354
356
355
attribute [continuity] continuous_multiset_sum
357
356
358
357
@[continuity, to_additive]
359
- lemma continuous_finset_prod [topological_space α] {f : β → α → M} (s : finset β ) :
360
- (∀c∈ s, continuous (f c )) → continuous (λa, ∏ c in s, f c a) :=
358
+ lemma continuous_finset_prod {f : ι → X → M} (s : finset ι ) :
359
+ (∀ i ∈ s, continuous (f i )) → continuous (λa, ∏ i in s, f i a) :=
361
360
continuous_multiset_prod _
362
361
363
362
-- should `to_additive` be doing this?
364
363
attribute [continuity] continuous_finset_sum
365
364
365
+ open function
366
+
367
+ @[to_additive] lemma continuous_finprod {f : ι → X → M} (hc : ∀ i, continuous (f i))
368
+ (hf : locally_finite (λ i, mul_support (f i))) :
369
+ continuous (λ x, ∏ᶠ i, f i x) :=
370
+ begin
371
+ refine continuous_iff_continuous_at.2 (λ x, _),
372
+ rcases hf x with ⟨U, hxU, hUf⟩,
373
+ have : continuous_at (λ x, ∏ i in hUf.to_finset, f i x) x,
374
+ from tendsto_finset_prod _ (λ i hi, (hc i).continuous_at),
375
+ refine this.congr (mem_sets_of_superset hxU $ λ y hy, _),
376
+ refine (finprod_eq_prod_of_mul_support_subset _ (λ i hi, _)).symm,
377
+ rw [hUf.coe_to_finset],
378
+ exact ⟨y, hi, hy⟩
379
+ end
380
+
381
+ @[to_additive] lemma continuous_finprod_cond {f : ι → X → M} {p : ι → Prop }
382
+ (hc : ∀ i, p i → continuous (f i)) (hf : locally_finite (λ i, mul_support (f i))) :
383
+ continuous (λ x, ∏ᶠ i (hi : p i), f i x) :=
384
+ begin
385
+ simp only [← finprod_subtype_eq_finprod_cond],
386
+ exact continuous_finprod (λ i, hc i i.2 ) (hf.comp_injective subtype.coe_injective)
387
+ end
388
+
366
389
end
367
390
368
391
instance additive.has_continuous_add {M} [h : topological_space M] [has_mul M]
0 commit comments