Skip to content

Commit 68b37c8

Browse files
committed
feat: generalize IsClosed.vadd_right_of_isCompact to proper actions (#29715)
I realized a few weeks after adding them to Mathlib that the more conceptual approach for lemmas of the form "`s • t` is closed when one of `s` and `t` is closed and the other is compact" is that of proper maps and proper actions. This PR switches to this approach. More precisely: - I refactored the proof [IsClosed.smul_left_of_isCompact](https://leanprover-community.github.io/mathlib4_docs/Mathlib/Topology/Algebra/Group/Pointwise.html#IsClosed.smul_left_of_isCompact) in terms of properness. The proof is essentially the same length, but conceptually simpler. - More importantly, I generalize [IsClosed.vadd_right_of_isCompact](https://leanprover-community.github.io/mathlib4_docs/Mathlib/Topology/Algebra/Group/AddTorsor.html#IsClosed.vadd_right_of_isCompact) from topological torsors to proper actions. Note that I do not assume separation, which creates some troubles as compact sets are not closed...
1 parent 5092373 commit 68b37c8

File tree

3 files changed

+79
-49
lines changed

3 files changed

+79
-49
lines changed

Mathlib/Topology/Algebra/Group/AddTorsor.lean

Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ Released under Apache 2.0 license as described in the file LICENSE.
44
Authors: Attila Gáspár
55
-/
66
import Mathlib.Algebra.AddTorsor.Basic
7-
import Mathlib.Topology.Algebra.Group.Pointwise
7+
import Mathlib.Topology.Algebra.Monoid
8+
import Mathlib.Topology.Algebra.Group.Defs
89

910
/-!
1011
# Topological torsors of additive groups
@@ -84,22 +85,6 @@ def Homeomorph.vaddConst (p : P) : V ≃ₜ P where
8485
continuous_toFun := by fun_prop
8586
continuous_invFun := by fun_prop
8687

87-
section Pointwise
88-
89-
open Pointwise
90-
91-
theorem IsClosed.vadd_right_of_isCompact {s : Set V} {t : Set P} (hs : IsClosed s)
92-
(ht : IsCompact t) : IsClosed (s +ᵥ t) := by
93-
have ⟨p⟩ : Nonempty P := inferInstance
94-
have cont : Continuous (· -ᵥ p) := by fun_prop
95-
have := IsTopologicalAddTorsor.to_isTopologicalAddGroup V P
96-
convert (hs.add_right_of_isCompact <| ht.image cont).preimage cont
97-
rw [Set.eq_preimage_iff_image_eq <| by exact (Equiv.vaddConst p).symm.bijective,
98-
← Set.image2_vadd, Set.image_image2, ← Set.image2_add, Set.image2_image_right]
99-
simp only [vadd_vsub_assoc]
100-
101-
end Pointwise
102-
10388
end AddTorsor
10489

10590
section AddGroup

Mathlib/Topology/Algebra/Group/Pointwise.lean

Lines changed: 26 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
44
Authors: Johannes Hölzl, Mario Carneiro, Patrick Massot
55
-/
66
import Mathlib.Topology.Algebra.Group.Basic
7+
import Mathlib.Topology.Maps.Proper.Basic
78

89
/-!
910
# Pointwise operations on sets in topological groups
@@ -44,38 +45,33 @@ section ContinuousSMul
4445
variable [TopologicalSpace α] [TopologicalSpace β] [Group α] [MulAction α β] [ContinuousInv α]
4546
[ContinuousSMul α β] {s : Set α} {t : Set β}
4647

47-
@[to_additive]
48+
open Prod in
49+
/-- If `G` acts on `X` continuously, the set `s • t` is closed when `s : Set G` is *compact* and
50+
`t : Set X` is *closed*.
51+
52+
See also `IsClosed.smul_right_of_isCompact` for a version with the assumptions on `s` and `t`
53+
reversed, assuming that the action is *proper*. -/
54+
@[to_additive
55+
/-- If `G` acts on `X` continuously, the set `s +ᵥ t` is closed when `s : Set G` is *compact* and
56+
`t : Set X` is *closed*.
57+
58+
See also `IsClosed.vadd_right_of_isCompact` for a version with the assumptions on `s` and `t`
59+
reversed, assuming that the action is *proper*. -/]
4860
theorem IsClosed.smul_left_of_isCompact (ht : IsClosed t) (hs : IsCompact s) :
4961
IsClosed (s • t) := by
50-
have : ∀ x ∈ s • t, ∃ g ∈ s, g⁻¹ • x ∈ t := by
51-
rintro x ⟨g, hgs, y, hyt, rfl⟩
52-
refine ⟨g, hgs, ?_⟩
53-
rwa [inv_smul_smul]
54-
choose! f hf using this
55-
refine isClosed_of_closure_subset (fun x hx ↦ ?_)
56-
rcases mem_closure_iff_ultrafilter.mp hx with ⟨u, hust, hux⟩
57-
have : Ultrafilter.map f u ≤ 𝓟 s :=
58-
calc Ultrafilter.map f u ≤ map f (𝓟 (s • t)) := map_mono (le_principal_iff.mpr hust)
59-
_ = 𝓟 (f '' (s • t)) := map_principal
60-
_ ≤ 𝓟 s := principal_mono.mpr (image_subset_iff.mpr (fun x hx ↦ (hf x hx).1))
61-
rcases hs.ultrafilter_le_nhds (Ultrafilter.map f u) this with ⟨g, hg, hug⟩
62-
suffices g⁻¹ • x ∈ t from
63-
⟨g, hg, g⁻¹ • x, this, smul_inv_smul _ _⟩
64-
exact ht.mem_of_tendsto ((Tendsto.inv hug).smul hux)
65-
(Eventually.mono hust (fun y hy ↦ (hf y hy).2))
66-
67-
/-! One may expect a version of `IsClosed.smul_left_of_isCompact` where `t` is compact and `s` is
68-
closed, but such a lemma can't be true in this level of generality. For a counterexample, consider
69-
`ℚ` acting on `ℝ` by translation, and let `s : Set ℚ := univ`, `t : set ℝ := {0}`. Then `s` is
70-
closed and `t` is compact, but `s +ᵥ t` is the set of all rationals, which is definitely not
71-
closed in `ℝ`.
72-
To fix the proof, we would need to make two additional assumptions:
73-
- for any `x ∈ t`, `s • {x}` is closed
74-
- for any `x ∈ t`, there is a continuous function `g : s • {x} → s` such that, for all
75-
`y ∈ s • {x}`, we have `y = (g y) • x`
76-
These are fairly specific hypotheses so we don't state this version of the lemmas, but an
77-
interesting fact is that these two assumptions are verified in the case of an
78-
`IsTopologicalAddTorsor`. We prove this special case in `IsClosed.vadd_right_of_isCompact`. -/
62+
let Φ : s × β ≃ₜ s × β :=
63+
{ toFun := fun gx ↦ (gx.1, (gx.1 : α) • gx.2)
64+
invFun := fun gx ↦ (gx.1, (gx.1 : α)⁻¹ • gx.2)
65+
left_inv := fun _ ↦ by simp
66+
right_inv := fun _ ↦ by simp }
67+
have : s • t = (snd ∘ Φ) '' (snd ⁻¹' t) :=
68+
subset_antisymm
69+
(smul_subset_iff.mpr fun g hg x hx ↦ mem_image_of_mem (snd ∘ Φ) (x := ⟨⟨g, hg⟩, x⟩) hx)
70+
(image_subset_iff.mpr fun ⟨⟨g, hg⟩, x⟩ hx ↦ smul_mem_smul hg hx)
71+
rw [this]
72+
have : CompactSpace s := isCompact_iff_compactSpace.mp hs
73+
exact (isProperMap_snd_of_compactSpace.comp Φ.isProperMap).isClosedMap _
74+
(ht.preimage continuous_snd)
7975

8076
@[to_additive]
8177
theorem MulAction.isClosedMap_quotient [CompactSpace α] :

Mathlib/Topology/Algebra/ProperAction/Basic.lean

Lines changed: 51 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ Authors: Anatole Dedeker, Etienne Marion, Florestan Martin-Baillon, Vincent Guir
55
-/
66
import Mathlib.Topology.Algebra.Group.Quotient
77
import Mathlib.Topology.Algebra.MulAction
8-
import Mathlib.Topology.Maps.Proper.Basic
9-
import Mathlib.Topology.Maps.OpenQuotient
8+
import Mathlib.Topology.Algebra.Group.Defs
9+
import Mathlib.Topology.LocalAtTarget
1010

1111
/-!
1212
# Proper group action
@@ -205,3 +205,52 @@ instance [IsTopologicalGroup G] {H : Subgroup G} [H_closed : IsClosed (H : Set G
205205
instance QuotientGroup.instT2Space [IsTopologicalGroup G] {H : Subgroup G} [IsClosed (H : Set G)] :
206206
T2Space (G ⧸ H) :=
207207
t2Space_quotient_mulAction_of_properSMul
208+
209+
/-- If `G` acts on `X` properly, then the map `G × T → X × T, (g, t) ↦ (g • t, t)` is still
210+
proper for *any* subset `T` of `X`. -/
211+
@[to_additive
212+
/-- If `G` acts on `X` properly, then the map `G × T → X × T, (g, t) ↦ (g +ᵥ t, t)` is still
213+
proper for *any* subset `T` of `X`. -/]
214+
lemma ProperSMul.isProperMap_smul_pair_set [ProperSMul G X] {t : Set X} :
215+
IsProperMap (fun (gx : G × t) ↦ ((gx.1 • gx.2, gx.2) : X × t)) := by
216+
let Φ : G × X → X × X := fun gx ↦ (gx.1 • gx.2, gx.2)
217+
have Φ_proper : IsProperMap Φ := ProperSMul.isProperMap_smul_pair
218+
let α : G × t ≃ₜ (Φ ⁻¹' (snd ⁻¹' t)) :=
219+
have : univ ×ˢ t = Φ ⁻¹' (snd ⁻¹' t) := by rw [univ_prod]; rfl
220+
Homeomorph.Set.univ G |>.symm.prodCongr (.refl t) |>.trans
221+
((Homeomorph.Set.prod _ t).symm) |>.trans (Homeomorph.setCongr this)
222+
let β : X × t ≃ₜ (snd ⁻¹' t) :=
223+
Homeomorph.Set.univ X |>.symm.prodCongr (.refl t) |>.trans
224+
((Homeomorph.Set.prod _ t).symm) |>.trans (Homeomorph.setCongr univ_prod)
225+
exact β.symm.isProperMap.comp (Φ_proper.restrictPreimage (snd ⁻¹' t)) |>.comp α.isProperMap
226+
227+
open Pointwise in
228+
/-- If `G` acts on `X` properly, the set `s • t` is closed when `s : Set G` is *closed* and
229+
`t : Set X` is *compact*.
230+
231+
See also `IsClosed.smul_left_of_isCompact` for a version with the assumptions on `s` and `t`
232+
reversed. -/
233+
@[to_additive
234+
/-- If `G` acts on `X` properly, the set `s +ᵥ t` is closed when `s : Set G` is *closed* and
235+
`t : Set X` is *compact*. In particular, this applies when the action comes from an
236+
`IsTopologicalAddTorsor`.
237+
238+
See also `IsClosed.vadd_left_of_isCompact` for a version with the assumptions on `s` and `t`
239+
reversed. -/]
240+
theorem IsClosed.smul_right_of_isCompact [ProperSMul G X] {s : Set G} {t : Set X} (hs : IsClosed s)
241+
(ht : IsCompact t) : IsClosed (s • t) := by
242+
let Ψ : G × t → X × t := fun gx ↦ (gx.1 • gx.2, gx.2)
243+
have Ψ_proper : IsProperMap Ψ := ProperSMul.isProperMap_smul_pair_set
244+
have : s • t = (fst ∘ Ψ) '' (fst ⁻¹' s) :=
245+
subset_antisymm
246+
(smul_subset_iff.mpr fun g hg x hx ↦ mem_image_of_mem (fst ∘ Ψ) (x := ⟨g, ⟨x, hx⟩⟩) hg)
247+
(image_subset_iff.mpr fun ⟨g, ⟨x, hx⟩⟩ hg ↦ smul_mem_smul hg hx)
248+
rw [this]
249+
have : CompactSpace t := isCompact_iff_compactSpace.mp ht
250+
exact (isProperMap_fst_of_compactSpace.comp Ψ_proper).isClosedMap _ (hs.preimage continuous_fst)
251+
252+
/-! One may expect `IsClosed.smul_right_of_isCompact` to hold for arbitrary continuous actions,
253+
but such a lemma can't be true in this level of generality. For a counterexample, consider
254+
`ℚ` acting on `ℝ` by translation, and let `s : Set ℚ := univ`, `t : set ℝ := {0}`. Then `s` is
255+
closed and `t` is compact, but `s +ᵥ t` is the set of all rationals, which is definitely not
256+
closed in `ℝ`. -/

0 commit comments

Comments
 (0)