Skip to content

Commit 0636ded

Browse files
committed
chore(Topology/Algebra/ContinuousMonoidHom): do not depend on ContinuousLinearMap (#21443)
The dependency should go in the other direction.
1 parent 0642034 commit 0636ded

File tree

4 files changed

+215
-191
lines changed

4 files changed

+215
-191
lines changed

Mathlib.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5234,6 +5234,7 @@ import Mathlib.Topology.Algebra.Field
52345234
import Mathlib.Topology.Algebra.FilterBasis
52355235
import Mathlib.Topology.Algebra.Group.Basic
52365236
import Mathlib.Topology.Algebra.Group.Compact
5237+
import Mathlib.Topology.Algebra.Group.CompactOpen
52375238
import Mathlib.Topology.Algebra.Group.OpenMapping
52385239
import Mathlib.Topology.Algebra.Group.Quotient
52395240
import Mathlib.Topology.Algebra.Group.SubmonoidClosure

Mathlib/Topology/Algebra/ContinuousMonoidHom.lean

Lines changed: 4 additions & 190 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,7 @@ Copyright (c) 2022 Thomas Browning. All rights reserved.
33
Released under Apache 2.0 license as described in the file LICENSE.
44
Authors: Thomas Browning, Nailin Guan
55
-/
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
107

118
/-!
129
@@ -20,6 +17,9 @@ This file defines the space of continuous homomorphisms between two topological
2017
* `ContinuousAddMonoidHom A B`: The continuous additive homomorphisms `A →+ B`.
2118
-/
2219

20+
assert_not_exists ContinuousLinearMap
21+
assert_not_exists ContinuousLinearEquiv
22+
2323
section
2424

2525
open Function Topology
@@ -278,192 +278,6 @@ instance : CommGroup (ContinuousMonoidHom A E) where
278278
inv f := (inv E).comp f
279279
inv_mul_cancel f := ext fun x => inv_mul_cancel (f x)
280280

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-
467281
end ContinuousMonoidHom
468282

469283
end

0 commit comments

Comments
 (0)