-
Notifications
You must be signed in to change notification settings - Fork 234
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat(Topology): clopen subsets of products of compact spaces are unio…
…ns of clopen boxes (#8678) Co-authored-by: Yury G. Kudryashov <urkud@urkud.name>
- Loading branch information
1 parent
8f17470
commit b8c9740
Showing
6 changed files
with
132 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
/- | ||
Copyright (c) 2023 Dagur Asgeirsson. All rights reserved. | ||
Released under Apache 2.0 license as described in the file LICENSE. | ||
Authors: Dagur Asgeirsson | ||
-/ | ||
import Mathlib.Topology.CompactOpen | ||
import Mathlib.Topology.Sets.Closeds | ||
|
||
/-! | ||
# Clopen subsets in cartesian products | ||
In general, a clopen subset in a cartesian product of topological spaces | ||
cannot be written as a union of "clopen boxes", | ||
i.e. products of clopen subsets of the components (see [buzyakovaClopenBox] for counterexamples). | ||
However, when one of the factors is compact, a clopen subset can be written as such a union. | ||
Our argument in `TopologicalSpace.Clopens.exists_prod_subset` | ||
follows the one given in [buzyakovaClopenBox]. | ||
We deduce that in a product of compact spaces, a clopen subset is a finite union of clopen boxes, | ||
and use that to prove that the property of having countably many clopens is preserved by taking | ||
cartesian products of compact spaces (this is relevant to the theory of light profinite sets). | ||
## References | ||
- [buzyakovaClopenBox]: *On clopen sets in Cartesian products*, 2001. | ||
- [engelking1989]: *General Topology*, 1989. | ||
-/ | ||
|
||
open Function Set Filter TopologicalSpace | ||
open scoped Topology | ||
|
||
variable {X Y : Type*} [TopologicalSpace X] [TopologicalSpace Y] [CompactSpace Y] | ||
|
||
theorem TopologicalSpace.Clopens.exists_prod_subset (W : Clopens (X × Y)) {a : X × Y} (h : a ∈ W) : | ||
∃ U : Clopens X, a.1 ∈ U ∧ ∃ V : Clopens Y, a.2 ∈ V ∧ U ×ˢ V ≤ W := by | ||
have hp : Continuous (fun y : Y ↦ (a.1, y)) := Continuous.Prod.mk _ | ||
let V : Set Y := {y | (a.1, y) ∈ W} | ||
have hV : IsCompact V := (W.2.2.preimage hp).isCompact | ||
let U : Set X := {x | MapsTo (Prod.mk x) V W} | ||
have hUV : U ×ˢ V ⊆ W := fun ⟨_, _⟩ hw ↦ hw.1 hw.2 | ||
exact ⟨⟨U, (ContinuousMap.isClopen_setOf_mapsTo hV W.2).preimage | ||
(ContinuousMap.id (X × Y)).curry.2⟩, by simp [MapsTo], ⟨V, W.2.preimage hp⟩, h, hUV⟩ | ||
|
||
variable [CompactSpace X] | ||
|
||
/-- Every clopen set in a product of two compact spaces | ||
is a union of finitely many clopen boxes. -/ | ||
theorem TopologicalSpace.Clopens.exists_finset_eq_sup_prod (W : Clopens (X × Y)) : | ||
∃ (I : Finset (Clopens X × Clopens Y)), W = I.sup fun i ↦ i.1 ×ˢ i.2 := by | ||
choose! U hxU V hxV hUV using fun x ↦ W.exists_prod_subset (a := x) | ||
rcases W.2.2.isCompact.elim_nhds_subcover (fun x ↦ U x ×ˢ V x) (fun x hx ↦ | ||
(U x ×ˢ V x).2.isOpen.mem_nhds ⟨hxU x hx, hxV x hx⟩) with ⟨I, hIW, hWI⟩ | ||
classical | ||
use I.image fun x ↦ (U x, V x) | ||
rw [Finset.sup_image] | ||
refine le_antisymm (fun x hx ↦ ?_) (Finset.sup_le fun x hx ↦ ?_) | ||
· rcases Set.mem_iUnion₂.1 (hWI hx) with ⟨i, hi, hxi⟩ | ||
exact SetLike.le_def.1 (Finset.le_sup hi) hxi | ||
· exact hUV _ <| hIW _ hx | ||
|
||
lemma TopologicalSpace.Clopens.surjective_finset_sup_prod : | ||
Surjective fun I : Finset (Clopens X × Clopens Y) ↦ I.sup fun i ↦ i.1 ×ˢ i.2 := fun W ↦ | ||
let ⟨I, hI⟩ := W.exists_finset_eq_sup_prod; ⟨I, hI.symm⟩ | ||
|
||
instance TopologicalSpace.Clopens.countable_prod [Countable (Clopens X)] | ||
[Countable (Clopens Y)] : Countable (Clopens (X × Y)) := | ||
surjective_finset_sup_prod.countable | ||
|
||
instance TopologicalSpace.Clopens.finite_prod [Finite (Clopens X)] [Finite (Clopens Y)] : | ||
Finite (Clopens (X × Y)) := by | ||
cases nonempty_fintype (Clopens X) | ||
cases nonempty_fintype (Clopens Y) | ||
exact .of_surjective _ surjective_finset_sup_prod |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters