File: Mathlib/Topology/MetricSpace/Infsep.lean

full_name: Set.einfsep
code: /-- The "extended infimum separation" of a set with an edist function. -/
noncomputable def einfsep [EDist α] (s : Set α) : ℝ≥0∞ 
goal: ENNReal

full_name: Set.le_einfsep_iff
code: theorem le_einfsep_iff {d} :
    d ≤ s.einfsep ↔ ∀ x ∈ s, ∀ y ∈ s, x ≠ y → d ≤ edist x y 
goal: d ≤ s.einfsep ↔ ∀ x ∈ s, ∀ y ∈ s, x ≠ y → d ≤ edist x y

full_name: Set.einfsep_zero
code: theorem einfsep_zero : s.einfsep = 0 ↔ ∀ C > 0, ∃ x ∈ s, ∃ y ∈ s, x ≠ y ∧ edist x y < C 
goal: s.einfsep = 0 ↔ ∀ C > 0, ∃ x ∈ s, ∃ y ∈ s, x ≠ y ∧ edist x y < C

full_name: Set.einfsep_pos
code: theorem einfsep_pos : 0 < s.einfsep ↔ ∃ C > 0, ∀ x ∈ s, ∀ y ∈ s, x ≠ y → C ≤ edist x y 
goal: 0 < s.einfsep ↔ ∃ C > 0, ∀ x ∈ s, ∀ y ∈ s, x ≠ y → C ≤ edist x y

full_name: Set.einfsep_top
code: theorem einfsep_top :
    s.einfsep = ∞ ↔ ∀ x ∈ s, ∀ y ∈ s, x ≠ y → edist x y = ∞ 
goal: s.einfsep = ⊤ ↔ ∀ x ∈ s, ∀ y ∈ s, x ≠ y → edist x y = ⊤

full_name: Set.einfsep_lt_top
code: theorem einfsep_lt_top :
    s.einfsep < ∞ ↔ ∃ x ∈ s, ∃ y ∈ s, x ≠ y ∧ edist x y < ∞ 
goal: s.einfsep < ⊤ ↔ ∃ x ∈ s, ∃ y ∈ s, x ≠ y ∧ edist x y < ⊤

full_name: Set.einfsep_ne_top
code: theorem einfsep_ne_top :
    s.einfsep ≠ ∞ ↔ ∃ x ∈ s, ∃ y ∈ s, x ≠ y ∧ edist x y ≠ ∞ 
goal: s.einfsep ≠ ⊤ ↔ ∃ x ∈ s, ∃ y ∈ s, x ≠ y ∧ edist x y ≠ ⊤

full_name: Set.einfsep_lt_iff
code: theorem einfsep_lt_iff {d} :
    s.einfsep < d ↔ ∃ x ∈ s, ∃ y ∈ s, x ≠ y ∧ edist x y < d 
goal: s.einfsep < d ↔ ∃ x ∈ s, ∃ y ∈ s, x ≠ y ∧ edist x y < d

full_name: Set.nontrivial_of_einfsep_lt_top
code: theorem nontrivial_of_einfsep_lt_top (hs : s.einfsep < ∞) : s.Nontrivial 
goal: s.Nontrivial

full_name: Set.nontrivial_of_einfsep_ne_top
code: theorem nontrivial_of_einfsep_ne_top (hs : s.einfsep ≠ ∞) : s.Nontrivial 
goal: s.Nontrivial

full_name: Set.Subsingleton.einfsep
code: theorem Subsingleton.einfsep (hs : s.Subsingleton) : s.einfsep = ∞ 
goal: s.einfsep = ⊤

full_name: Set.le_einfsep_image_iff
code: theorem le_einfsep_image_iff {d} {f : β → α} {s : Set β} : d ≤ einfsep (f '' s)
    ↔ ∀ x ∈ s, ∀ y ∈ s, f x ≠ f y → d ≤ edist (f x) (f y) 
goal: d ≤ (f '' s).einfsep ↔ ∀ x ∈ s, ∀ y ∈ s, f x ≠ f y → d ≤ edist (f x) (f y)

full_name: Set.le_edist_of_le_einfsep
code: theorem le_edist_of_le_einfsep {d x} (hx : x ∈ s) {y} (hy : y ∈ s) (hxy : x ≠ y)
    (hd : d ≤ s.einfsep) : d ≤ edist x y 
goal: d ≤ edist x y

full_name: Set.einfsep_le_edist_of_mem
code: theorem einfsep_le_edist_of_mem {x} (hx : x ∈ s) {y} (hy : y ∈ s) (hxy : x ≠ y) :
    s.einfsep ≤ edist x y 
goal: s.einfsep ≤ edist x y

full_name: Set.einfsep_le_of_mem_of_edist_le
code: theorem einfsep_le_of_mem_of_edist_le {d x} (hx : x ∈ s) {y} (hy : y ∈ s) (hxy : x ≠ y)
    (hxy' : edist x y ≤ d) : s.einfsep ≤ d 
goal: s.einfsep ≤ d

full_name: Set.le_einfsep
code: theorem le_einfsep {d} (h : ∀ x ∈ s, ∀ y ∈ s, x ≠ y → d ≤ edist x y) : d ≤ s.einfsep 
goal: d ≤ s.einfsep

full_name: Set.einfsep_empty
code: @[simp]
theorem einfsep_empty : (∅ : Set α).einfsep = ∞ 
goal: ∅.einfsep = ⊤

full_name: Set.einfsep_singleton
code: @[simp]
theorem einfsep_singleton : ({x} : Set α).einfsep = ∞ 
goal: {x}.einfsep = ⊤

full_name: Set.einfsep_iUnion_mem_option
code: theorem einfsep_iUnion_mem_option {ι : Type*} (o : Option ι) (s : ι → Set α) :
    (⋃ i ∈ o, s i).einfsep = ⨅ i ∈ o, (s i).einfsep 
goal: (⋃ i ∈ o, s i).einfsep = ⨅ i ∈ o, (s i).einfsep

full_name: Set.einfsep_anti
code: theorem einfsep_anti (hst : s ⊆ t) : t.einfsep ≤ s.einfsep 
goal: t.einfsep ≤ s.einfsep

full_name: Set.einfsep_insert_le
code: theorem einfsep_insert_le : (insert x s).einfsep ≤ ⨅ (y ∈ s) (_ : x ≠ y), edist x y 
goal: (insert x s).einfsep ≤ ⨅ y ∈ s, ⨅ (_ : x ≠ y), edist x y

full_name: Set.le_einfsep_pair
code: theorem le_einfsep_pair : edist x y ⊓ edist y x ≤ ({x, y} : Set α).einfsep 
goal: edist x y ⊓ edist y x ≤ {x, y}.einfsep

full_name: Set.einfsep_pair_le_left
code: theorem einfsep_pair_le_left (hxy : x ≠ y) : ({x, y} : Set α).einfsep ≤ edist x y 
goal: {x, y}.einfsep ≤ edist x y

full_name: Set.einfsep_pair_le_right
code: theorem einfsep_pair_le_right (hxy : x ≠ y) : ({x, y} : Set α).einfsep ≤ edist y x 
goal: {x, y}.einfsep ≤ edist y x

full_name: Set.einfsep_pair_eq_inf
code: theorem einfsep_pair_eq_inf (hxy : x ≠ y) : ({x, y} : Set α).einfsep = edist x y ⊓ edist y x 
goal: {x, y}.einfsep = edist x y ⊓ edist y x

full_name: Set.einfsep_eq_iInf
code: theorem einfsep_eq_iInf : s.einfsep = ⨅ d : s.offDiag, (uncurry edist) (d : α × α) 
goal: s.einfsep = ⨅ d, Function.uncurry edist ↑d

full_name: Set.einfsep_of_fintype
code: theorem einfsep_of_fintype [DecidableEq α] [Fintype s] :
    s.einfsep = s.offDiag.toFinset.inf (uncurry edist) 
goal: s.einfsep = s.offDiag.toFinset.inf (Function.uncurry edist)

full_name: Set.Finite.einfsep
code: theorem Finite.einfsep (hs : s.Finite) : s.einfsep = hs.offDiag.toFinset.inf (uncurry edist) 
goal: s.einfsep = ⋯.toFinset.inf (Function.uncurry edist)

full_name: Set.Finset.coe_einfsep
code: theorem Finset.coe_einfsep [DecidableEq α] {s : Finset α} :
    (s : Set α).einfsep = s.offDiag.inf (uncurry edist) 
goal: (↑s).einfsep = s.offDiag.inf (Function.uncurry edist)

full_name: Set.Nontrivial.einfsep_exists_of_finite
code: theorem Nontrivial.einfsep_exists_of_finite [Finite s] (hs : s.Nontrivial) :
    ∃ x ∈ s, ∃ y ∈ s, x ≠ y ∧ s.einfsep = edist x y 
goal: ∃ x ∈ s, ∃ y ∈ s, x ≠ y ∧ s.einfsep = edist x y

full_name: Set.Finite.einfsep_exists_of_nontrivial
code: theorem Finite.einfsep_exists_of_nontrivial (hsf : s.Finite) (hs : s.Nontrivial) :
    ∃ x ∈ s, ∃ y ∈ s, x ≠ y ∧ s.einfsep = edist x y 
goal: ∃ x ∈ s, ∃ y ∈ s, x ≠ y ∧ s.einfsep = edist x y

full_name: Set.einfsep_pair
code: theorem einfsep_pair (hxy : x ≠ y) : ({x, y} : Set α).einfsep = edist x y 
goal: {x, y}.einfsep = edist x y

full_name: Set.einfsep_insert
code: theorem einfsep_insert : einfsep (insert x s) =
    (⨅ (y ∈ s) (_ : x ≠ y), edist x y) ⊓ s.einfsep 
goal: (insert x s).einfsep = (⨅ y ∈ s, ⨅ (_ : x ≠ y), edist x y) ⊓ s.einfsep

full_name: Set.einfsep_triple
code: theorem einfsep_triple (hxy : x ≠ y) (hyz : y ≠ z) (hxz : x ≠ z) :
    einfsep ({x, y, z} : Set α) = edist x y ⊓ edist x z ⊓ edist y z 
goal: {x, y, z}.einfsep = edist x y ⊓ edist x z ⊓ edist y z

full_name: Set.le_einfsep_pi_of_le
code: theorem le_einfsep_pi_of_le {π : β → Type*} [Fintype β] [∀ b, PseudoEMetricSpace (π b)]
    {s : ∀ b : β, Set (π b)} {c : ℝ≥0∞} (h : ∀ b, c ≤ einfsep (s b)) :
    c ≤ einfsep (Set.pi univ s) 
goal: c ≤ (Set.univ.pi s).einfsep

full_name: Set.subsingleton_of_einfsep_eq_top
code: theorem subsingleton_of_einfsep_eq_top (hs : s.einfsep = ∞) : s.Subsingleton 
goal: s.Subsingleton

full_name: Set.einfsep_eq_top_iff
code: theorem einfsep_eq_top_iff : s.einfsep = ∞ ↔ s.Subsingleton 
goal: s.einfsep = ⊤ ↔ s.Subsingleton

full_name: Set.Nontrivial.einfsep_ne_top
code: theorem Nontrivial.einfsep_ne_top (hs : s.Nontrivial) : s.einfsep ≠ ∞ 
goal: s.einfsep ≠ ⊤

full_name: Set.Nontrivial.einfsep_lt_top
code: theorem Nontrivial.einfsep_lt_top (hs : s.Nontrivial) : s.einfsep < ∞ 
goal: s.einfsep < ⊤

full_name: Set.einfsep_lt_top_iff
code: theorem einfsep_lt_top_iff : s.einfsep < ∞ ↔ s.Nontrivial 
goal: s.einfsep < ⊤ ↔ s.Nontrivial

full_name: Set.einfsep_ne_top_iff
code: theorem einfsep_ne_top_iff : s.einfsep ≠ ∞ ↔ s.Nontrivial 
goal: s.einfsep ≠ ⊤ ↔ s.Nontrivial

full_name: Set.le_einfsep_of_forall_dist_le
code: theorem le_einfsep_of_forall_dist_le {d} (h : ∀ x ∈ s, ∀ y ∈ s, x ≠ y → d ≤ dist x y) :
    ENNReal.ofReal d ≤ s.einfsep 
goal: ENNReal.ofReal d ≤ s.einfsep

full_name: Set.einfsep_pos_of_finite
code: theorem einfsep_pos_of_finite [Finite s] : 0 < s.einfsep 
goal: 0 < s.einfsep

full_name: Set.relatively_discrete_of_finite
code: theorem relatively_discrete_of_finite [Finite s] :
    ∃ C > 0, ∀ x ∈ s, ∀ y ∈ s, x ≠ y → C ≤ edist x y 
goal: ∃ C > 0, ∀ x ∈ s, ∀ y ∈ s, x ≠ y → C ≤ edist x y

full_name: Set.Finite.einfsep_pos
code: theorem Finite.einfsep_pos (hs : s.Finite) : 0 < s.einfsep 
goal: 0 < s.einfsep

full_name: Set.Finite.relatively_discrete
code: theorem Finite.relatively_discrete (hs : s.Finite) :
    ∃ C > 0, ∀ x ∈ s, ∀ y ∈ s, x ≠ y → C ≤ edist x y 
goal: ∃ C > 0, ∀ x ∈ s, ∀ y ∈ s, x ≠ y → C ≤ edist x y

full_name: Set.infsep
code: /-- The "infimum separation" of a set with an edist function. -/
noncomputable def infsep [EDist α] (s : Set α) : ℝ 
goal: ℝ

full_name: Set.infsep_zero
code: theorem infsep_zero : s.infsep = 0 ↔ s.einfsep = 0 ∨ s.einfsep = ∞ 
goal: s.infsep = 0 ↔ s.einfsep = 0 ∨ s.einfsep = ⊤

full_name: Set.infsep_nonneg
code: theorem infsep_nonneg : 0 ≤ s.infsep 
goal: 0 ≤ s.infsep

full_name: Set.infsep_pos
code: theorem infsep_pos : 0 < s.infsep ↔ 0 < s.einfsep ∧ s.einfsep < ∞ 
goal: 0 < s.infsep ↔ 0 < s.einfsep ∧ s.einfsep < ⊤

full_name: Set.Subsingleton.infsep_zero
code: theorem Subsingleton.infsep_zero (hs : s.Subsingleton) : s.infsep = 0 
goal: s.infsep = 0

full_name: Set.nontrivial_of_infsep_pos
code: theorem nontrivial_of_infsep_pos (hs : 0 < s.infsep) : s.Nontrivial 
goal: s.Nontrivial

full_name: Set.infsep_empty
code: theorem infsep_empty : (∅ : Set α).infsep = 0 
goal: ∅.infsep = 0

full_name: Set.infsep_singleton
code: theorem infsep_singleton : ({x} : Set α).infsep = 0 
goal: {x}.infsep = 0

full_name: Set.infsep_pair_le_toReal_inf
code: theorem infsep_pair_le_toReal_inf (hxy : x ≠ y) :
    ({x, y} : Set α).infsep ≤ (edist x y ⊓ edist y x).toReal 
goal: {x, y}.infsep ≤ (edist x y ⊓ edist y x).toReal

full_name: Set.infsep_pair_eq_toReal
code: theorem infsep_pair_eq_toReal : ({x, y} : Set α).infsep = (edist x y).toReal 
goal: {x, y}.infsep = (edist x y).toReal

full_name: Set.Nontrivial.le_infsep_iff
code: theorem Nontrivial.le_infsep_iff {d} (hs : s.Nontrivial) :
    d ≤ s.infsep ↔ ∀ x ∈ s, ∀ y ∈ s, x ≠ y → d ≤ dist x y 
goal: d ≤ s.infsep ↔ ∀ x ∈ s, ∀ y ∈ s, x ≠ y → d ≤ dist x y

full_name: Set.Nontrivial.infsep_lt_iff
code: theorem Nontrivial.infsep_lt_iff {d} (hs : s.Nontrivial) :
    s.infsep < d ↔ ∃ x ∈ s, ∃ y ∈ s, x ≠ y ∧ dist x y < d 
goal: s.infsep < d ↔ ∃ x ∈ s, ∃ y ∈ s, x ≠ y ∧ dist x y < d

full_name: Set.Nontrivial.le_infsep
code: theorem Nontrivial.le_infsep {d} (hs : s.Nontrivial)
    (h : ∀ x ∈ s, ∀ y ∈ s, x ≠ y → d ≤ dist x y) : d ≤ s.infsep 
goal: d ≤ s.infsep

full_name: Set.le_edist_of_le_infsep
code: theorem le_edist_of_le_infsep {d x} (hx : x ∈ s) {y} (hy : y ∈ s) (hxy : x ≠ y)
    (hd : d ≤ s.infsep) : d ≤ dist x y 
goal: d ≤ dist x y

full_name: Set.infsep_le_dist_of_mem
code: theorem infsep_le_dist_of_mem (hx : x ∈ s) (hy : y ∈ s) (hxy : x ≠ y) : s.infsep ≤ dist x y 
goal: s.infsep ≤ dist x y

full_name: Set.infsep_le_of_mem_of_edist_le
code: theorem infsep_le_of_mem_of_edist_le {d x} (hx : x ∈ s) {y} (hy : y ∈ s) (hxy : x ≠ y)
    (hxy' : dist x y ≤ d) : s.infsep ≤ d 
goal: s.infsep ≤ d

full_name: Set.infsep_pair
code: theorem infsep_pair : ({x, y} : Set α).infsep = dist x y 
goal: {x, y}.infsep = dist x y

full_name: Set.infsep_triple
code: theorem infsep_triple (hxy : x ≠ y) (hyz : y ≠ z) (hxz : x ≠ z) :
    ({x, y, z} : Set α).infsep = dist x y ⊓ dist x z ⊓ dist y z 
goal: {x, y, z}.infsep = dist x y ⊓ dist x z ⊓ dist y z

full_name: Set.Nontrivial.infsep_anti
code: theorem Nontrivial.infsep_anti (hs : s.Nontrivial) (hst : s ⊆ t) : t.infsep ≤ s.infsep 
goal: t.infsep ≤ s.infsep

full_name: Set.infsep_eq_iInf
code: theorem infsep_eq_iInf [Decidable s.Nontrivial] :
    s.infsep = if s.Nontrivial then ⨅ d : s.offDiag, (uncurry dist) (d : α × α) else 0 
goal: s.infsep = if s.Nontrivial then ⨅ d, Function.uncurry dist ↑d else 0

full_name: Set.Nontrivial.infsep_eq_iInf
code: theorem Nontrivial.infsep_eq_iInf (hs : s.Nontrivial) :
    s.infsep = ⨅ d : s.offDiag, (uncurry dist) (d : α × α) 
goal: s.infsep = ⨅ d, Function.uncurry dist ↑d

full_name: Set.infsep_of_fintype
code: theorem infsep_of_fintype [Decidable s.Nontrivial] [DecidableEq α] [Fintype s] : s.infsep =
    if hs : s.Nontrivial then s.offDiag.toFinset.inf' (by simpa) (uncurry dist) else 0 
goal: s.infsep = if hs : s.Nontrivial then s.offDiag.toFinset.inf' ⋯ (Function.uncurry dist) else 0

full_name: Set.Nontrivial.infsep_of_fintype
code: theorem Nontrivial.infsep_of_fintype [DecidableEq α] [Fintype s] (hs : s.Nontrivial) :
    s.infsep = s.offDiag.toFinset.inf' (by simpa) (uncurry dist) 
goal: s.infsep = s.offDiag.toFinset.inf' ⋯ (Function.uncurry dist)

full_name: Set.Finite.infsep
code: theorem Finite.infsep [Decidable s.Nontrivial] (hsf : s.Finite) :
    s.infsep =
      if hs : s.Nontrivial then hsf.offDiag.toFinset.inf' (by simpa) (uncurry dist) else 0 
goal: s.infsep = if hs : s.Nontrivial then ⋯.toFinset.inf' ⋯ (Function.uncurry dist) else 0

full_name: Set.Finite.infsep_of_nontrivial
code: theorem Finite.infsep_of_nontrivial (hsf : s.Finite) (hs : s.Nontrivial) :
    s.infsep = hsf.offDiag.toFinset.inf' (by simpa) (uncurry dist) 
goal: s.infsep = ⋯.toFinset.inf' ⋯ (Function.uncurry dist)

full_name: Finset.coe_infsep
code: theorem _root_.Finset.coe_infsep [DecidableEq α] (s : Finset α) : (s : Set α).infsep =
    if hs : s.offDiag.Nonempty then s.offDiag.inf' hs (uncurry dist) else 0 
goal: (↑s).infsep = if hs : s.offDiag.Nonempty then s.offDiag.inf' hs (Function.uncurry dist) else 0

full_name: Finset.coe_infsep_of_offDiag_nonempty
code: theorem _root_.Finset.coe_infsep_of_offDiag_nonempty [DecidableEq α] {s : Finset α}
    (hs : s.offDiag.Nonempty) : (s : Set α).infsep = s.offDiag.inf' hs (uncurry dist) 
goal: (↑s).infsep = s.offDiag.inf' hs (Function.uncurry dist)

full_name: Finset.coe_infsep_of_offDiag_empty
code: theorem _root_.Finset.coe_infsep_of_offDiag_empty
    [DecidableEq α] {s : Finset α} (hs : s.offDiag = ∅) : (s : Set α).infsep = 0 
goal: (↑s).infsep = 0

full_name: Set.Nontrivial.infsep_exists_of_finite
code: theorem Nontrivial.infsep_exists_of_finite [Finite s] (hs : s.Nontrivial) :
    ∃ x ∈ s, ∃ y ∈ s, x ≠ y ∧ s.infsep = dist x y 
goal: ∃ x ∈ s, ∃ y ∈ s, x ≠ y ∧ s.infsep = dist x y

full_name: Set.Finite.infsep_exists_of_nontrivial
code: theorem Finite.infsep_exists_of_nontrivial (hsf : s.Finite) (hs : s.Nontrivial) :
    ∃ x ∈ s, ∃ y ∈ s, x ≠ y ∧ s.infsep = dist x y 
goal: ∃ x ∈ s, ∃ y ∈ s, x ≠ y ∧ s.infsep = dist x y

full_name: Set.infsep_zero_iff_subsingleton_of_finite
code: theorem infsep_zero_iff_subsingleton_of_finite [Finite s] : s.infsep = 0 ↔ s.Subsingleton 
goal: s.infsep = 0 ↔ s.Subsingleton

full_name: Set.infsep_pos_iff_nontrivial_of_finite
code: theorem infsep_pos_iff_nontrivial_of_finite [Finite s] : 0 < s.infsep ↔ s.Nontrivial 
goal: 0 < s.infsep ↔ s.Nontrivial

full_name: Set.Finite.infsep_zero_iff_subsingleton
code: theorem Finite.infsep_zero_iff_subsingleton (hs : s.Finite) : s.infsep = 0 ↔ s.Subsingleton 
goal: s.infsep = 0 ↔ s.Subsingleton

full_name: Set.Finite.infsep_pos_iff_nontrivial
code: theorem Finite.infsep_pos_iff_nontrivial (hs : s.Finite) : 0 < s.infsep ↔ s.Nontrivial 
goal: 0 < s.infsep ↔ s.Nontrivial

full_name: Finset.infsep_zero_iff_subsingleton
code: theorem _root_.Finset.infsep_zero_iff_subsingleton (s : Finset α) :
    (s : Set α).infsep = 0 ↔ (s : Set α).Subsingleton 
goal: (↑s).infsep = 0 ↔ (↑s).Subsingleton

full_name: Finset.infsep_pos_iff_nontrivial
code: theorem _root_.Finset.infsep_pos_iff_nontrivial (s : Finset α) :
    0 < (s : Set α).infsep ↔ (s : Set α).Nontrivial 
goal: 0 < (↑s).infsep ↔ (↑s).Nontrivial