Skip to content

Commit 1621e0d

Browse files
committed
feat: relation-covered sets (#31104)
Define a notion of cover of a set relative to a relation. This will be used to unify metric and dynamical covers. From MiscYD and LeanAPAP
1 parent a51bff9 commit 1621e0d

File tree

2 files changed

+71
-0
lines changed

2 files changed

+71
-0
lines changed

Mathlib.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3711,6 +3711,7 @@ import Mathlib.Data.Real.Sqrt
37113711
import Mathlib.Data.Real.Star
37123712
import Mathlib.Data.Real.StarOrdered
37133713
import Mathlib.Data.Rel
3714+
import Mathlib.Data.Rel.Cover
37143715
import Mathlib.Data.Rel.Separated
37153716
import Mathlib.Data.SProd
37163717
import Mathlib.Data.Semiquot

Mathlib/Data/Rel/Cover.lean

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
/-
2+
Copyright (c) 2025 Yaël Dillies. All rights reserved.
3+
Released under Apache 2.0 license as described in the file LICENSE.
4+
Authors: Yaël Dillies
5+
-/
6+
import Mathlib.Data.Rel.Separated
7+
8+
/-!
9+
# Covers in a uniform space
10+
11+
This file defines covers, aka nets, which are a quantitative notion of compactness given an
12+
entourage.
13+
14+
A `U`-cover of a set `s` is a set `N` such that every element of `s` is `U`-close to some element of
15+
`N`.
16+
17+
The concept of uniform covers can be used to define two further notions of covering:
18+
* Metric covers: `Metric.IsCover`, defined using the distance entourage.
19+
* Dynamical covers: `Dynamics.IsDynCoverOf`, defined using the dynamical entourage.
20+
21+
## References
22+
23+
[R. Vershynin, *High Dimensional Probability*][vershynin2018high], Section 4.2.
24+
-/
25+
26+
open Set
27+
28+
namespace SetRel
29+
variable {X : Type*} {U V : SetRel X X} {s t N N₁ N₂ : Set X} {x : X}
30+
31+
/-- For an entourage `U`, a set `N` is a *`U`-cover* of a set `s` if every point of `s` is `U`-close
32+
to some point of `N`.
33+
34+
This is also called a *`U`-net* in the literature.
35+
36+
[R. Vershynin, *High Dimensional Probability*][vershynin2018high], 4.2.1. -/
37+
def IsCover (U : SetRel X X) (s N : Set X) : Prop := ∀ ⦃x⦄, x ∈ s → ∃ y ∈ N, x ~[U] y
38+
39+
@[simp] lemma IsCover.empty : IsCover U ∅ N := by simp [IsCover]
40+
41+
@[simp] lemma isCover_empty_right : IsCover U s ∅ ↔ s = ∅ := by
42+
simp [IsCover, eq_empty_iff_forall_notMem]
43+
44+
protected nonrec lemma IsCover.nonempty (hsN : IsCover U s N) (hs : s.Nonempty) : N.Nonempty :=
45+
let ⟨_x, hx⟩ := hs; let ⟨y, hy, _⟩ := hsN hx; ⟨y, hy⟩
46+
47+
@[simp] protected lemma isCover_univ : IsCover univ s N ↔ (s.Nonempty → N.Nonempty) := by
48+
simp [IsCover, Set.Nonempty]
49+
50+
lemma IsCover.mono (hN : N₁ ⊆ N₂) (h₁ : IsCover U s N₁) : IsCover U s N₂ :=
51+
fun _x hx ↦ let ⟨y, hy, hxy⟩ := h₁ hx; ⟨y, hN hy, hxy⟩
52+
53+
lemma IsCover.anti (hst : s ⊆ t) (ht : IsCover U t N) : IsCover U s N := fun _x hx ↦ ht <| hst hx
54+
55+
lemma IsCover.mono_entourage (hUV : U ⊆ V) (hU : IsCover U s N) : IsCover V s N :=
56+
fun _x hx ↦ let ⟨y, hy, hxy⟩ := hU hx; ⟨y, hy, hUV hxy⟩
57+
58+
/-- A maximal `U`-separated subset of a set `s` is a `U`-cover of `s`.
59+
60+
[R. Vershynin, *High Dimensional Probability*][vershynin2018high], 4.2.6. -/
61+
lemma IsCover.of_maximal_isSeparated [U.IsRefl] [U.IsSymm]
62+
(hN : Maximal (fun N ↦ N ⊆ s ∧ IsSeparated U N) N) : IsCover U s N := by
63+
rintro x hx
64+
by_contra! h
65+
simpa [U.rfl] using h _ <| hN.2 (y := insert x N) ⟨by simp [insert_subset_iff, hx, hN.1.1],
66+
hN.1.2.insert fun y hy hxy ↦ (h y hy hxy).elim⟩ (subset_insert _ _) (mem_insert _ _)
67+
68+
@[simp] lemma isCover_relId : IsCover .id s N ↔ s ⊆ N := by simp [IsCover, subset_def]
69+
70+
end SetRel

0 commit comments

Comments
 (0)