@@ -45,16 +45,25 @@ def IsCover (ε : ℝ≥0) (s N : Set X) : Prop := SetRel.IsCover {(x, y) | edis
4545
4646@[simp] protected nonrec lemma IsCover.empty : IsCover ε ∅ N := .empty
4747
48+ @[simp] lemma isCover_empty_right : IsCover ε s ∅ ↔ s = ∅ := SetRel.isCover_empty_right
49+
4850protected nonrec lemma IsCover.nonempty (hsN : IsCover ε s N) (hs : s.Nonempty) : N.Nonempty :=
4951 hsN.nonempty hs
5052
53+ @[simp] lemma IsCover.refl (ε : ℝ≥0 ) (s : Set X) : IsCover ε s s := .rfl
54+ lemma IsCover.rfl {ε : ℝ≥0 } {s : Set X} : IsCover ε s s := refl ε s
55+
5156nonrec lemma IsCover.mono (hN : N₁ ⊆ N₂) (h₁ : IsCover ε s N₁) : IsCover ε s N₂ := h₁.mono hN
5257
5358nonrec lemma IsCover.anti (hst : s ⊆ t) (ht : IsCover ε t N) : IsCover ε s N := ht.anti hst
5459
5560lemma IsCover.mono_radius (hεδ : ε ≤ δ) (hε : IsCover ε s N) : IsCover δ s N :=
5661 hε.mono_entourage fun xy hxy ↦ by dsimp at *; exact le_trans hxy <| mod_cast hεδ
5762
63+ lemma IsCover.singleton_of_ediam_le (hA : EMetric.diam s ≤ ε) (hx : x ∈ s) :
64+ IsCover ε s ({x} : Set X) :=
65+ fun _ h_mem ↦ ⟨x, by simp, (EMetric.edist_le_diam_of_mem h_mem hx).trans hA⟩
66+
5867lemma isCover_iff_subset_iUnion_emetricClosedBall :
5968 IsCover ε s N ↔ s ⊆ ⋃ y ∈ N, EMetric.closedBall y ε := by
6069 simp [IsCover, SetRel.IsCover, subset_def]
@@ -66,6 +75,28 @@ nonrec lemma IsCover.of_maximal_isSeparated (hN : Maximal (fun N ↦ N ⊆ s ∧
6675 IsCover ε s N :=
6776 .of_maximal_isSeparated <| by simpa [isSeparated_iff_setRelIsSeparated] using hN
6877
78+ /-- A totally bounded set has finite `ε`-covers for all `ε > 0`. -/
79+ lemma exists_finite_isCover_of_totallyBounded (hε : ε ≠ 0 ) (hs : TotallyBounded s) :
80+ ∃ N ⊆ s, N.Finite ∧ IsCover ε s N := by
81+ rw [EMetric.totallyBounded_iff'] at hs
82+ obtain ⟨N, hNA, hN_finite, hN⟩ := hs ε (mod_cast hε.bot_lt)
83+ simp only [isCover_iff_subset_iUnion_emetricClosedBall]
84+ refine ⟨N, by simpa, by simpa, ?_⟩
85+ · refine hN.trans fun x hx ↦ ?_
86+ simp only [Set.mem_iUnion, EMetric.mem_ball, exists_prop, EMetric.mem_closedBall] at hx ⊢
87+ obtain ⟨y, hyN, hy⟩ := hx
88+ exact ⟨y, hyN, hy.le⟩
89+
90+ /-- A relatively compact set admits a finite cover. -/
91+ lemma exists_finite_isCover_of_isCompact_closure (hε : ε ≠ 0 ) (hs : IsCompact (closure s)) :
92+ ∃ N ⊆ s, N.Finite ∧ IsCover ε s N :=
93+ exists_finite_isCover_of_totallyBounded hε (hs.totallyBounded.subset subset_closure)
94+
95+ /-- A compact set admits a finite cover. -/
96+ lemma exists_finite_isCover_of_isCompact (hε : ε ≠ 0 ) (hs : IsCompact s) :
97+ ∃ N ⊆ s, N.Finite ∧ IsCover ε s N :=
98+ exists_finite_isCover_of_totallyBounded hε hs.totallyBounded
99+
69100end PseudoEMetricSpace
70101
71102section PseudoMetricSpace
@@ -77,23 +108,6 @@ lemma isCover_iff_subset_iUnion_closedBall : IsCover ε s N ↔ s ⊆ ⋃ y ∈
77108alias ⟨IsCover.subset_iUnion_closedBall, IsCover.of_subset_iUnion_closedBall⟩ :=
78109 isCover_iff_subset_iUnion_closedBall
79110
80- /-- A relatively compact set admits a finite cover. -/
81- lemma exists_finite_isCover_of_isCompact_closure (hε : ε ≠ 0 ) (hs : IsCompact (closure s)) :
82- ∃ N ⊆ s, N.Finite ∧ IsCover ε s N := by
83- obtain ⟨N, hNs, hN, hsN⟩ :=
84- exists_finite_cover_balls_of_isCompact_closure hs (ε := ε) (by positivity)
85- refine ⟨N, hNs, hN, .of_subset_iUnion_closedBall <| hsN.trans ?_⟩
86- gcongr
87- exact ball_subset_closedBall
88-
89- /-- A compact set admits a finite cover. -/
90- lemma exists_finite_isCover_of_isCompact (hε : ε ≠ 0 ) (hs : IsCompact s) :
91- ∃ N ⊆ s, N.Finite ∧ IsCover ε s N := by
92- obtain ⟨N, hNs, hN, hsN⟩ := hs.finite_cover_balls (e := ε) (by positivity)
93- refine ⟨N, hNs, hN, .of_subset_iUnion_closedBall <| hsN.trans ?_⟩
94- gcongr
95- exact ball_subset_closedBall
96-
97111lemma IsCover.of_subset_cthickening_of_lt {δ : ℝ≥0 } (hsN : s ⊆ cthickening ε N) (hεδ : ε < δ) :
98112 IsCover δ s N :=
99113 .of_subset_iUnion_closedBall <| hsN.trans (cthickening_subset_iUnion_closedBall_of_lt _
0 commit comments