Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Merged by Bors] - feat: define ProperConstSMul #6675

Closed
wants to merge 12 commits into from
1 change: 1 addition & 0 deletions Mathlib.lean
Original file line number Diff line number Diff line change
Expand Up @@ -3125,6 +3125,7 @@ import Mathlib.Testing.SlimCheck.Sampleable
import Mathlib.Testing.SlimCheck.Testable
import Mathlib.Topology.Algebra.Affine
import Mathlib.Topology.Algebra.Algebra
import Mathlib.Topology.Algebra.CocompactSMul
import Mathlib.Topology.Algebra.ConstMulAction
import Mathlib.Topology.Algebra.Constructions
import Mathlib.Topology.Algebra.ContinuousAffineMap
Expand Down
44 changes: 44 additions & 0 deletions Mathlib/Topology/Algebra/CocompactSMul.lean
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
/-
Copyright (c) 2023 Yury Kudryashov. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yury Kudryashov
-/
import Mathlib.Topology.Algebra.ConstMulAction
/-!
# Cocompact actions

In this file we define `CocompactSMul M X` to be a mixin `Prop`-value class
stating that the preimage of a compact set under `(c • ·)` is a compact set.

We also provide 2 instances:
- for a continuous action on a compact Hausdorff space,
- and for a continuous group action on a general space.
-/

/-- A mixin typeclass saying that
the preimage of a compact set under `(c +ᵥ ·)` is a compact set. -/
class CocompactVAdd (M X : Type*) [VAdd M X] [TopologicalSpace X] : Prop where
/-- The preimage of a compact set under `(c +ᵥ ·)` is a compact set. -/
isCompact_preimage_vadd (c : M) {s : Set X} (hs : IsCompact s) : IsCompact ((c +ᵥ ·) ⁻¹' s)

/-- A mixin typeclass saying that the preimage of a compact set under `(c • ·)` is a compact set. -/
@[to_additive]
class CocompactSMul (M X : Type*) [SMul M X] [TopologicalSpace X] : Prop where
/-- The preimage of a compact set under `(c • ·)` is a compact set. -/
isCompact_preimage_smul (c : M) {s : Set X} (hs : IsCompact s) : IsCompact ((c • ·) ⁻¹' s)

/-- The preimage of a compact set under `(c • ·)` is a compact set. -/
@[to_additive "The preimage of a compact set under `(c +ᵥ ·)` is a compact set."]
theorem IsCompact.preimage_smul {M X : Type*} [SMul M X] [TopologicalSpace X] [CocompactSMul M X]
{s : Set X} (hs : IsCompact s) (c : M) : IsCompact ((c • ·) ⁻¹' s) :=
CocompactSMul.isCompact_preimage_smul c hs

@[to_additive]
instance (priority := 100) {M X : Type*} [SMul M X] [TopologicalSpace X] [ContinuousConstSMul M X]
[T2Space X] [CompactSpace X] : CocompactSMul M X :=
⟨fun c _s hs ↦ hs.preimage_continuous (continuous_const_smul c)⟩

@[to_additive]
instance (priority := 100) {G X : Type*} [Group G] [MulAction G X] [TopologicalSpace X]
[ContinuousConstSMul G X] : CocompactSMul G X :=
⟨fun c _s hs ↦ by rw [Set.preimage_smul]; exact hs.smul _⟩
4 changes: 4 additions & 0 deletions Mathlib/Topology/Separation.lean
Original file line number Diff line number Diff line change
Expand Up @@ -1311,6 +1311,10 @@ theorem Bornology.relativelyCompact_eq_inCompact [T2Space α] :
Bornology.ext _ _ Filter.coclosedCompact_eq_cocompact
#align bornology.relatively_compact_eq_in_compact Bornology.relativelyCompact_eq_inCompact

theorem IsCompact.preimage_continuous [CompactSpace α] [T2Space β] {f : α → β} {s : Set β}
(hs : IsCompact s) (hf : Continuous f) : IsCompact (f ⁻¹' s) :=
(hs.isClosed.preimage hf).isCompact
Comment on lines +1314 to +1316
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

While you're at it, could you link this to the IsProperMap API by showing that any map from a compact space to a Hausdorff space is proper?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

BTW, we have IsProperMap and CocompactMap.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I know, I added IsProperMap recently. I claim that it is the right concept mathematically, so I think we should expand this API rather than that of CocompactMap.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

... right concept mathematically

I wouldn't be surprised if both are useful (or even all 3 if you add isCompact_preimage). BTW, I didn't look closely at the definitions; which one is weaker?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In general spaces (and for continuous functions of course), IsProperMap -> isCompact_preimage -> CocompactMap . The equivalence between isCompact_preimage and CocompactMap works as soon as the codomain is Hausdorff, and everything is equivalent when the codomain is Hausdorff and locally compact.

Regarding isCompact_preimage vs CocompactMap, I think we can safely redefine CocompactMap in terms of compact preimages, the tendsto definition was a nice trick but I don't think it's mathematically meaningful.

IsProperMap on the other hand is indeed significantly stronger than CocompactMap, so I'm not suggesting removing the latter, but I know that some key results that are usually proved for isCompact_preimage maps only work in locally compact space unless you assume the stronger IsProperMap. I don't have a good example in mathlib of such a theorem about CocompactMap, but we have some in the context of group actions. For example you can remove the locally compactness assumption in t2Space_of_properlyDiscontinuousSMul_of_t2Space if you strengthen the definition of ProperlyDiscontinuousSMul to use IsProperMap.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done. I also added a version of isProperMap_iff_ultrafilter for a T₂ codomain.

Copy link
Member Author

@urkud urkud Aug 25, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do you think I should use IsProperMap instead of IsCompact s → IsCompact (f ⁻¹' s)? UPD: done.


/-- If `V : ι → Set α` is a decreasing family of compact sets then any neighborhood of
`⋂ i, V i` contains some `V i`. This is a version of `exists_subset_nhds_of_isCompact'` where we
don't need to assume each `V i` closed because it follows from compactness since `α` is
Expand Down