@@ -3,10 +3,7 @@ Copyright (c) 2022 Thomas Browning. All rights reserved.
3
3
Released under Apache 2.0 license as described in the file LICENSE.
4
4
Authors: Thomas Browning, Nailin Guan
5
5
-/
6
- import Mathlib.Topology.Algebra.Equicontinuity
7
- import Mathlib.Topology.Algebra.Group.Compact
8
- import Mathlib.Topology.ContinuousMap.Algebra
9
- import Mathlib.Topology.UniformSpace.Ascoli
6
+ import Mathlib.Topology.Algebra.Group.Basic
10
7
11
8
/-!
12
9
@@ -20,6 +17,9 @@ This file defines the space of continuous homomorphisms between two topological
20
17
* `ContinuousAddMonoidHom A B`: The continuous additive homomorphisms `A →+ B`.
21
18
-/
22
19
20
+ assert_not_exists ContinuousLinearMap
21
+ assert_not_exists ContinuousLinearEquiv
22
+
23
23
section
24
24
25
25
open Function Topology
@@ -278,192 +278,6 @@ instance : CommGroup (ContinuousMonoidHom A E) where
278
278
inv f := (inv E).comp f
279
279
inv_mul_cancel f := ext fun x => inv_mul_cancel (f x)
280
280
281
- @[to_additive]
282
- instance : TopologicalSpace (ContinuousMonoidHom A B) :=
283
- TopologicalSpace.induced toContinuousMap ContinuousMap.compactOpen
284
-
285
- variable (A B C D E)
286
-
287
- @[to_additive]
288
- theorem isInducing_toContinuousMap :
289
- IsInducing (toContinuousMap : ContinuousMonoidHom A B → C(A, B)) := ⟨rfl⟩
290
-
291
- @[deprecated (since := "2024-10-28")] alias inducing_toContinuousMap := isInducing_toContinuousMap
292
-
293
- @[to_additive]
294
- theorem isEmbedding_toContinuousMap :
295
- IsEmbedding (toContinuousMap : ContinuousMonoidHom A B → C(A, B)) :=
296
- ⟨isInducing_toContinuousMap A B, toContinuousMap_injective⟩
297
-
298
- @[deprecated (since := "2024-10-26")]
299
- alias embedding_toContinuousMap := isEmbedding_toContinuousMap
300
-
301
- @[to_additive]
302
- instance instContinuousEvalConst : ContinuousEvalConst (ContinuousMonoidHom A B) A B :=
303
- .of_continuous_forget (isInducing_toContinuousMap A B).continuous
304
-
305
- @[to_additive]
306
- instance instContinuousEval [LocallyCompactPair A B] :
307
- ContinuousEval (ContinuousMonoidHom A B) A B :=
308
- .of_continuous_forget (isInducing_toContinuousMap A B).continuous
309
-
310
- @[to_additive]
311
- lemma range_toContinuousMap :
312
- Set.range (toContinuousMap : ContinuousMonoidHom A B → C(A, B)) =
313
- {f : C(A, B) | f 1 = 1 ∧ ∀ x y, f (x * y) = f x * f y} := by
314
- refine Set.Subset.antisymm (Set.range_subset_iff.2 fun f ↦ ⟨map_one f, map_mul f⟩) ?_
315
- rintro f ⟨h1, hmul⟩
316
- exact ⟨{ f with map_one' := h1, map_mul' := hmul }, rfl⟩
317
-
318
- @[to_additive]
319
- theorem isClosedEmbedding_toContinuousMap [ContinuousMul B] [T2Space B] :
320
- IsClosedEmbedding (toContinuousMap : ContinuousMonoidHom A B → C(A, B)) where
321
- toIsEmbedding := isEmbedding_toContinuousMap A B
322
- isClosed_range := by
323
- simp only [range_toContinuousMap, Set.setOf_and, Set.setOf_forall]
324
- refine .inter (isClosed_singleton.preimage (continuous_eval_const 1 )) <|
325
- isClosed_iInter fun x ↦ isClosed_iInter fun y ↦ ?_
326
- exact isClosed_eq (continuous_eval_const (x * y)) <|
327
- .mul (continuous_eval_const x) (continuous_eval_const y)
328
-
329
- @[deprecated (since := "2024-10-20")]
330
- alias closedEmbedding_toContinuousMap := isClosedEmbedding_toContinuousMap
331
-
332
- variable {A B C D E}
333
-
334
- @[to_additive]
335
- instance [T2Space B] : T2Space (ContinuousMonoidHom A B) :=
336
- (isEmbedding_toContinuousMap A B).t2Space
337
-
338
- @[to_additive]
339
- instance : TopologicalGroup (ContinuousMonoidHom A E) :=
340
- let hi := isInducing_toContinuousMap A E
341
- let hc := hi.continuous
342
- { continuous_mul := hi.continuous_iff.mpr (continuous_mul.comp (Continuous.prodMap hc hc))
343
- continuous_inv := hi.continuous_iff.mpr (continuous_inv.comp hc) }
344
-
345
- @[to_additive]
346
- theorem continuous_of_continuous_uncurry {A : Type *} [TopologicalSpace A]
347
- (f : A → ContinuousMonoidHom B C) (h : Continuous (Function.uncurry fun x y => f x y)) :
348
- Continuous f :=
349
- (isInducing_toContinuousMap _ _).continuous_iff.mpr
350
- (ContinuousMap.continuous_of_continuous_uncurry _ h)
351
-
352
- @[to_additive]
353
- theorem continuous_comp [LocallyCompactSpace B] :
354
- Continuous fun f : ContinuousMonoidHom A B × ContinuousMonoidHom B C => f.2 .comp f.1 :=
355
- (isInducing_toContinuousMap A C).continuous_iff.2 <|
356
- ContinuousMap.continuous_comp'.comp
357
- ((isInducing_toContinuousMap A B).prodMap (isInducing_toContinuousMap B C)).continuous
358
-
359
- @[to_additive]
360
- theorem continuous_comp_left (f : ContinuousMonoidHom A B) :
361
- Continuous fun g : ContinuousMonoidHom B C => g.comp f :=
362
- (isInducing_toContinuousMap A C).continuous_iff.2 <|
363
- f.toContinuousMap.continuous_precomp.comp (isInducing_toContinuousMap B C).continuous
364
-
365
- @[to_additive]
366
- theorem continuous_comp_right (f : ContinuousMonoidHom B C) :
367
- Continuous fun g : ContinuousMonoidHom A B => f.comp g :=
368
- (isInducing_toContinuousMap A C).continuous_iff.2 <|
369
- f.toContinuousMap.continuous_postcomp.comp (isInducing_toContinuousMap A B).continuous
370
-
371
- variable (E)
372
-
373
- /-- `ContinuousMonoidHom _ f` is a functor. -/
374
- @[to_additive "`ContinuousAddMonoidHom _ f` is a functor."]
375
- def compLeft (f : ContinuousMonoidHom A B) :
376
- ContinuousMonoidHom (ContinuousMonoidHom B E) (ContinuousMonoidHom A E) where
377
- toFun g := g.comp f
378
- map_one' := rfl
379
- map_mul' _g _h := rfl
380
- continuous_toFun := f.continuous_comp_left
381
-
382
- variable (A) {E}
383
-
384
- /-- `ContinuousMonoidHom f _` is a functor. -/
385
- @[to_additive "`ContinuousAddMonoidHom f _` is a functor."]
386
- def compRight {B : Type *} [CommGroup B] [TopologicalSpace B] [TopologicalGroup B]
387
- (f : ContinuousMonoidHom B E) :
388
- ContinuousMonoidHom (ContinuousMonoidHom A B) (ContinuousMonoidHom A E) where
389
- toFun g := f.comp g
390
- map_one' := ext fun _a => map_one f
391
- map_mul' g h := ext fun a => map_mul f (g a) (h a)
392
- continuous_toFun := f.continuous_comp_right
393
-
394
- section LocallyCompact
395
-
396
- variable {X Y : Type *} [TopologicalSpace X] [Group X] [TopologicalGroup X]
397
- [UniformSpace Y] [CommGroup Y] [UniformGroup Y] [T0Space Y] [CompactSpace Y]
398
-
399
- @[to_additive]
400
- theorem locallyCompactSpace_of_equicontinuousAt (U : Set X) (V : Set Y)
401
- (hU : IsCompact U) (hV : V ∈ nhds (1 : Y))
402
- (h : EquicontinuousAt (fun f : {f : X →* Y | Set.MapsTo f U V} ↦ (f : X → Y)) 1 ) :
403
- LocallyCompactSpace (ContinuousMonoidHom X Y) := by
404
- replace h := equicontinuous_of_equicontinuousAt_one _ h
405
- obtain ⟨W, hWo, hWV, hWc⟩ := local_compact_nhds hV
406
- let S1 : Set (X →* Y) := {f | Set.MapsTo f U W}
407
- let S2 : Set (ContinuousMonoidHom X Y) := {f | Set.MapsTo f U W}
408
- let S3 : Set C(X, Y) := (↑) '' S2
409
- let S4 : Set (X → Y) := (↑) '' S3
410
- replace h : Equicontinuous ((↑) : S1 → X → Y) :=
411
- h.comp (Subtype.map _root_.id fun f hf ↦ hf.mono_right hWV)
412
- have hS4 : S4 = (↑) '' S1 := by
413
- ext
414
- constructor
415
- · rintro ⟨-, ⟨f, hf, rfl⟩, rfl⟩
416
- exact ⟨f, hf, rfl⟩
417
- · rintro ⟨f, hf, rfl⟩
418
- exact ⟨⟨f, h.continuous ⟨f, hf⟩⟩, ⟨⟨f, h.continuous ⟨f, hf⟩⟩, hf, rfl⟩, rfl⟩
419
- replace h : Equicontinuous ((↑) : S3 → X → Y) := by
420
- rw [equicontinuous_iff_range, ← Set.image_eq_range] at h ⊢
421
- rwa [← hS4] at h
422
- replace hS4 : S4 = Set.pi U (fun _ ↦ W) ∩ Set.range ((↑) : (X →* Y) → (X → Y)) := by
423
- simp_rw [hS4, Set.ext_iff, Set.mem_image, S1, Set.mem_setOf_eq]
424
- exact fun f ↦ ⟨fun ⟨g, hg, hf⟩ ↦ hf ▸ ⟨hg, g, rfl⟩, fun ⟨hg, g, hf⟩ ↦ ⟨g, hf ▸ hg, hf⟩⟩
425
- replace hS4 : IsClosed S4 :=
426
- hS4.symm ▸ (isClosed_set_pi (fun _ _ ↦ hWc.isClosed)).inter (MonoidHom.isClosed_range_coe X Y)
427
- have hS2 : (interior S2).Nonempty := by
428
- let T : Set (ContinuousMonoidHom X Y) := {f | Set.MapsTo f U (interior W)}
429
- have h1 : T.Nonempty := ⟨1 , fun _ _ ↦ mem_interior_iff_mem_nhds.mpr hWo⟩
430
- have h2 : T ⊆ S2 := fun f hf ↦ hf.mono_right interior_subset
431
- have h3 : IsOpen T := isOpen_induced (ContinuousMap.isOpen_setOf_mapsTo hU isOpen_interior)
432
- exact h1.mono (interior_maximal h2 h3)
433
- exact TopologicalSpace.PositiveCompacts.locallyCompactSpace_of_group
434
- ⟨⟨S2, (isInducing_toContinuousMap X Y).isCompact_iff.mpr
435
- (ArzelaAscoli.isCompact_of_equicontinuous S3 hS4.isCompact h)⟩, hS2⟩
436
-
437
- variable [LocallyCompactSpace X]
438
-
439
- @[to_additive]
440
- theorem locallyCompactSpace_of_hasBasis (V : ℕ → Set Y)
441
- (hV : ∀ {n x}, x ∈ V n → x * x ∈ V n → x ∈ V (n + 1 ))
442
- (hVo : Filter.HasBasis (nhds 1 ) (fun _ ↦ True) V) :
443
- LocallyCompactSpace (ContinuousMonoidHom X Y) := by
444
- obtain ⟨U0, hU0c, hU0o⟩ := exists_compact_mem_nhds (1 : X)
445
- let U_aux : ℕ → {S : Set X | S ∈ nhds 1 } :=
446
- Nat.rec ⟨U0, hU0o⟩ <| fun _ S ↦ let h := exists_closed_nhds_one_inv_eq_mul_subset S.2
447
- ⟨Classical.choose h, (Classical.choose_spec h).1 ⟩
448
- let U : ℕ → Set X := fun n ↦ (U_aux n).1
449
- have hU1 : ∀ n, U n ∈ nhds 1 := fun n ↦ (U_aux n).2
450
- have hU2 : ∀ n, U (n + 1 ) * U (n + 1 ) ⊆ U n :=
451
- fun n ↦ (Classical.choose_spec (exists_closed_nhds_one_inv_eq_mul_subset (U_aux n).2 )).2 .2 .2
452
- have hU3 : ∀ n, U (n + 1 ) ⊆ U n :=
453
- fun n x hx ↦ hU2 n (mul_one x ▸ Set.mul_mem_mul hx (mem_of_mem_nhds (hU1 (n + 1 ))))
454
- have hU4 : ∀ f : X →* Y, Set.MapsTo f (U 0 ) (V 0 ) → ∀ n, Set.MapsTo f (U n) (V n) := by
455
- intro f hf n
456
- induction' n with n ih
457
- · exact hf
458
- · exact fun x hx ↦ hV (ih (hU3 n hx)) (map_mul f x x ▸ ih (hU2 n (Set.mul_mem_mul hx hx)))
459
- apply locallyCompactSpace_of_equicontinuousAt (U 0 ) (V 0 ) hU0c (hVo.mem_of_mem trivial)
460
- rw [hVo.uniformity_of_nhds_one.equicontinuousAt_iff_right]
461
- refine fun n _ ↦ Filter.eventually_iff_exists_mem.mpr ⟨U n, hU1 n, fun x hx ⟨f, hf⟩ ↦ ?_⟩
462
- rw [Set.mem_setOf_eq, map_one, div_one]
463
- exact hU4 f hf n hx
464
-
465
- end LocallyCompact
466
-
467
281
end ContinuousMonoidHom
468
282
469
283
end
0 commit comments