topology.metric_space.hausdorff_distance
⟷
Mathlib.Topology.MetricSpace.Thickening
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
@@ -4,6 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Sébastien Gouëzel
-/
import analysis.specific_limits.basic
+import topology.metric_space.isometric_smul
import topology.metric_space.isometry
import topology.instances.ennreal
@@ -30,7 +31,7 @@ This files introduces:
* `cthickening δ s`, the closed thickening by radius `δ` of a set `s` in a pseudo emetric space.
-/
noncomputable theory
-open_locale classical nnreal ennreal topology
+open_locale classical nnreal ennreal topology pointwise
universes u v w
open classical set function topological_space filter
@@ -167,6 +168,11 @@ lemma inf_edist_image (hΦ : isometry Φ) :
inf_edist (Φ x) (Φ '' t) = inf_edist x t :=
by simp only [inf_edist, infi_image, hΦ.edist_eq]
+@[simp, to_additive] lemma inf_edist_smul {M} [has_smul M α] [has_isometric_smul M α]
+ (c : M) (x : α) (s : set α) :
+ inf_edist (c • x) (c • s) = inf_edist x s :=
+inf_edist_image (isometry_smul _ _)
+
lemma _root_.is_open.exists_Union_is_closed {U : set α} (hU : is_open U) :
∃ F : ℕ → set α, (∀ n, is_closed (F n)) ∧ (∀ n, F n ⊆ U) ∧ ((⋃ n, F n) = U) ∧ monotone F :=
begin
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
Add lemmas relating ennreal.to_real
and ennreal.to_nnreal
to the indexed infimum.
Note that a slightly different set of lemmas and proofs were added in leanprover-community/mathlib4#3457.
Please make sure to switch to these versions when forward-porting, and add #align
s to the existing lemmas.
This also adds inf_dist_eq_infi
, which is from the same mathlib4 PR.
Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
@@ -425,6 +425,14 @@ open emetric
/-- The minimal distance of a point to a set -/
def inf_dist (x : α) (s : set α) : ℝ := ennreal.to_real (inf_edist x s)
+theorem inf_dist_eq_infi : inf_dist x s = ⨅ y : s, dist x y :=
+begin
+ rw [inf_dist, inf_edist, infi_subtype', ennreal.to_real_infi],
+ { simp only [dist_edist],
+ refl },
+ { exact λ _, edist_ne_top _ _ }
+end
+
/-- the minimal distance is always nonnegative -/
lemma inf_dist_nonneg : 0 ≤ inf_dist x s := by simp [inf_dist]
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(first ported)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -4,9 +4,9 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Sébastien Gouëzel
-/
import Analysis.SpecificLimits.Basic
-import Topology.MetricSpace.IsometricSmul
+import Topology.MetricSpace.IsometricSMul
import Topology.MetricSpace.Isometry
-import Topology.Instances.Ennreal
+import Topology.Instances.ENNReal
#align_import topology.metric_space.hausdorff_distance from "leanprover-community/mathlib"@"bc91ed7093bf098d253401e69df601fc33dde156"
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -218,7 +218,7 @@ theorem infEdist_closure_pos_iff_not_mem_closure {x : α} {E : Set α} :
theorem exists_real_pos_lt_infEdist_of_not_mem_closure {x : α} {E : Set α} (h : x ∉ closure E) :
∃ ε : ℝ, 0 < ε ∧ ENNReal.ofReal ε < infEdist x E :=
by
- rw [← inf_edist_pos_iff_not_mem_closure, ENNReal.lt_iff_exists_real_btwn] at h
+ rw [← inf_edist_pos_iff_not_mem_closure, ENNReal.lt_iff_exists_real_btwn] at h
rcases h with ⟨ε, ⟨_, ⟨ε_pos, ε_lt⟩⟩⟩
exact ⟨ε, ⟨ennreal.of_real_pos.mp ε_pos, ε_lt⟩⟩
#align emetric.exists_real_pos_lt_inf_edist_of_not_mem_closure EMetric.exists_real_pos_lt_infEdist_of_not_mem_closure
@@ -232,7 +232,7 @@ theorem disjoint_closedBall_of_lt_infEdist {r : ℝ≥0∞} (h : r < infEdist x
apply lt_irrefl (inf_edist x s)
calc
inf_edist x s ≤ edist x y := inf_edist_le_edist_of_mem h'y
- _ ≤ r := by rwa [mem_closed_ball, edist_comm] at hy
+ _ ≤ r := by rwa [mem_closed_ball, edist_comm] at hy
_ < inf_edist x s := h
#align emetric.disjoint_closed_ball_of_lt_inf_edist EMetric.disjoint_closedBall_of_lt_infEdist
-/
@@ -272,7 +272,7 @@ theorem IsOpen.exists_iUnion_isClosed {U : Set α} (hU : IsOpen U) :
show (⋃ n, F n) = U
· refine' subset.antisymm (by simp only [Union_subset_iff, F_subset, forall_const]) fun x hx => _
have : ¬x ∈ Uᶜ := by simpa using hx
- rw [mem_iff_inf_edist_zero_of_closed hU.is_closed_compl] at this
+ rw [mem_iff_inf_edist_zero_of_closed hU.is_closed_compl] at this
have B : 0 < inf_edist x (Uᶜ) := by simpa [pos_iff_ne_zero] using this
have : Filter.Tendsto (fun n => a ^ n) at_top (𝓝 0) :=
ENNReal.tendsto_pow_atTop_nhds_zero_of_lt_one a_lt_one
@@ -560,7 +560,7 @@ theorem empty_or_nonempty_of_hausdorffEdist_ne_top (fin : hausdorffEdist s t ≠
cases' s.eq_empty_or_nonempty with hs hs
· cases' t.eq_empty_or_nonempty with ht ht
· exact Or.inl ⟨hs, ht⟩
- · rw [Hausdorff_edist_comm] at fin
+ · rw [Hausdorff_edist_comm] at fin
exact Or.inr ⟨nonempty_of_Hausdorff_edist_ne_top ht Fin, ht⟩
· exact Or.inr ⟨hs, nonempty_of_Hausdorff_edist_ne_top hs Fin⟩
#align emetric.empty_or_nonempty_of_Hausdorff_edist_ne_top EMetric.empty_or_nonempty_of_hausdorffEdist_ne_top
@@ -820,7 +820,7 @@ theorem infDist_inter_closedBall_of_mem (h : y ∈ s) :
rcases(inf_dist_lt_iff ⟨y, h.1⟩).mp hlt with ⟨z, hzs, hz⟩
cases' le_or_lt (dist z x) (dist y x) with hle hlt
· exact hz.not_le (inf_dist_le_dist_of_mem ⟨hzs, hle⟩)
- · rw [dist_comm z, dist_comm y] at hlt
+ · rw [dist_comm z, dist_comm y] at hlt
exact (hlt.trans hz).not_le (inf_dist_le_dist_of_mem h)
#align metric.inf_dist_inter_closed_ball_of_mem Metric.infDist_inter_closedBall_of_mem
-/
@@ -990,11 +990,11 @@ theorem hausdorffDist_le_of_infDist {r : ℝ} (hr : 0 ≤ r) (H1 : ∀ x ∈ s,
· intro x hx
have I := H1 x hx
rwa [inf_dist, ← ENNReal.toReal_ofReal hr,
- ENNReal.toReal_le_toReal (inf_edist_ne_top ht) ENNReal.ofReal_ne_top] at I
+ ENNReal.toReal_le_toReal (inf_edist_ne_top ht) ENNReal.ofReal_ne_top] at I
· intro x hx
have I := H2 x hx
rwa [inf_dist, ← ENNReal.toReal_ofReal hr,
- ENNReal.toReal_le_toReal (inf_edist_ne_top hs) ENNReal.ofReal_ne_top] at I
+ ENNReal.toReal_le_toReal (inf_edist_ne_top hs) ENNReal.ofReal_ne_top] at I
rwa [Hausdorff_dist, ← ENNReal.toReal_ofReal hr,
ENNReal.toReal_le_toReal h1 ENNReal.ofReal_ne_top]
#align metric.Hausdorff_dist_le_of_inf_dist Metric.hausdorffDist_le_of_infDist
@@ -1057,9 +1057,9 @@ theorem exists_dist_lt_of_hausdorffDist_lt {r : ℝ} (h : x ∈ s) (H : hausdorf
have r0 : 0 < r := lt_of_le_of_lt Hausdorff_dist_nonneg H
have : Hausdorff_edist s t < ENNReal.ofReal r := by
rwa [Hausdorff_dist, ← ENNReal.toReal_ofReal (le_of_lt r0),
- ENNReal.toReal_lt_toReal Fin ENNReal.ofReal_ne_top] at H
+ ENNReal.toReal_lt_toReal Fin ENNReal.ofReal_ne_top] at H
rcases exists_edist_lt_of_Hausdorff_edist_lt h this with ⟨y, hy, yr⟩
- rw [edist_dist, ENNReal.ofReal_lt_ofReal_iff r0] at yr
+ rw [edist_dist, ENNReal.ofReal_lt_ofReal_iff r0] at yr
exact ⟨y, hy, yr⟩
#align metric.exists_dist_lt_of_Hausdorff_dist_lt Metric.exists_dist_lt_of_hausdorffDist_lt
-/
@@ -1070,8 +1070,8 @@ theorem exists_dist_lt_of_hausdorffDist_lt {r : ℝ} (h : x ∈ s) (H : hausdorf
theorem exists_dist_lt_of_hausdorffDist_lt' {r : ℝ} (h : y ∈ t) (H : hausdorffDist s t < r)
(fin : hausdorffEdist s t ≠ ⊤) : ∃ x ∈ s, dist x y < r :=
by
- rw [Hausdorff_dist_comm] at H
- rw [Hausdorff_edist_comm] at fin
+ rw [Hausdorff_dist_comm] at H
+ rw [Hausdorff_edist_comm] at fin
simpa [dist_comm] using exists_dist_lt_of_Hausdorff_dist_lt h H Fin
#align metric.exists_dist_lt_of_Hausdorff_dist_lt' Metric.exists_dist_lt_of_hausdorffDist_lt'
-/
@@ -1127,7 +1127,7 @@ theorem hausdorffDist_triangle (fin : hausdorffEdist s t ≠ ⊤) :
theorem hausdorffDist_triangle' (fin : hausdorffEdist t u ≠ ⊤) :
hausdorffDist s u ≤ hausdorffDist s t + hausdorffDist t u :=
by
- rw [Hausdorff_edist_comm] at fin
+ rw [Hausdorff_edist_comm] at fin
have I : Hausdorff_dist u s ≤ Hausdorff_dist u t + Hausdorff_dist t s :=
Hausdorff_dist_triangle Fin
simpa [add_comm, Hausdorff_dist_comm] using I
@@ -1277,8 +1277,8 @@ theorem frontier_thickening_disjoint (A : Set α) :
refine'
((disjoint_singleton.2 fun h => hr.ne _).Preimage _).mono (frontier_thickening_subset _)
(frontier_thickening_subset _)
- apply_fun ENNReal.toReal at h
- rwa [ENNReal.toReal_ofReal h₁, ENNReal.toReal_ofReal (h₁.trans hr.le)] at h
+ apply_fun ENNReal.toReal at h
+ rwa [ENNReal.toReal_ofReal h₁, ENNReal.toReal_ofReal (h₁.trans hr.le)] at h
#align metric.frontier_thickening_disjoint Metric.frontier_thickening_disjoint
-/
@@ -1295,7 +1295,7 @@ theorem mem_thickening_iff {E : Set X} {x : X} : x ∈ thickening δ E ↔ ∃ z
rw [dist_edist]
have d_lt_top : edist x z < ∞ := by simp only [edist_dist, ENNReal.ofReal_lt_top]
have key := @ENNReal.ofReal_lt_ofReal_iff_of_nonneg (edist x z).toReal δ ENNReal.toReal_nonneg
- rwa [ENNReal.ofReal_toReal d_lt_top.ne] at key
+ rwa [ENNReal.ofReal_toReal d_lt_top.ne] at key
simp_rw [mem_thickening_iff_exists_edist_lt, key_iff]
#align metric.mem_thickening_iff Metric.mem_thickening_iff
-/
@@ -1474,7 +1474,7 @@ theorem cthickening_subset_thickening' {δ₁ δ₂ : ℝ} (δ₂_pos : 0 < δ
/-- The open thickening `thickening δ E` is contained in the closed thickening `cthickening δ E`
with the same radius. -/
theorem thickening_subset_cthickening (δ : ℝ) (E : Set α) : thickening δ E ⊆ cthickening δ E := by
- intro x hx; rw [thickening, mem_set_of_eq] at hx ; exact hx.le
+ intro x hx; rw [thickening, mem_set_of_eq] at hx; exact hx.le
#align metric.thickening_subset_cthickening Metric.thickening_subset_cthickening
-/
@@ -1581,12 +1581,12 @@ theorem thickening_iUnion (δ : ℝ) (f : ι → Set α) :
theorem ediam_cthickening_le (ε : ℝ≥0) : EMetric.diam (cthickening ε s) ≤ EMetric.diam s + 2 * ε :=
by
refine' diam_le fun x hx y hy => ENNReal.le_of_forall_pos_le_add fun δ hδ _ => _
- rw [mem_cthickening_iff, ENNReal.ofReal_coe_nnreal] at hx hy
+ rw [mem_cthickening_iff, ENNReal.ofReal_coe_nnreal] at hx hy
have hε : (ε : ℝ≥0∞) < ε + ↑(δ / 2) := ENNReal.coe_lt_coe.2 (lt_add_of_pos_right _ <| half_pos hδ)
- rw [ENNReal.coe_div two_ne_zero, ENNReal.coe_two] at hε
+ rw [ENNReal.coe_div two_ne_zero, ENNReal.coe_two] at hε
replace hx := hx.trans_lt hε
replace hy := hy.trans_lt hε
- rw [inf_edist_lt_iff] at hx hy
+ rw [inf_edist_lt_iff] at hx hy
obtain ⟨x', hx', hxx'⟩ := hx
obtain ⟨y', hy', hyy'⟩ := hy
refine'
@@ -1665,8 +1665,8 @@ theorem Disjoint.exists_thickenings (hst : Disjoint s t) (hs : IsCompact s) (ht
refine' ⟨r / 2, half_pos (NNReal.coe_pos.2 hr), _⟩
rw [disjoint_iff_inf_le]
rintro z ⟨hzs, hzt⟩
- rw [mem_thickening_iff_exists_edist_lt] at hzs hzt
- rw [← NNReal.coe_two, ← NNReal.coe_div, ENNReal.ofReal_coe_nnreal] at hzs hzt
+ rw [mem_thickening_iff_exists_edist_lt] at hzs hzt
+ rw [← NNReal.coe_two, ← NNReal.coe_div, ENNReal.ofReal_coe_nnreal] at hzs hzt
obtain ⟨x, hx, hzx⟩ := hzs
obtain ⟨y, hy, hzy⟩ := hzt
refine' (h x hx y hy).not_le _
@@ -1788,7 +1788,7 @@ theorem closure_eq_iInter_cthickening' (E : Set α) (s : Set ℝ)
by_cases hs₀ : s ⊆ Ioi 0
· rw [← cthickening_zero]; apply cthickening_eq_Inter_cthickening' _ hs₀ hs
obtain ⟨δ, hδs, δ_nonpos⟩ := not_subset.mp hs₀
- rw [Set.mem_Ioi, not_lt] at δ_nonpos
+ rw [Set.mem_Ioi, not_lt] at δ_nonpos
apply subset.antisymm
· exact subset_Inter₂ fun ε _ => closure_subset_cthickening ε E
· rw [← cthickening_of_nonpos δ_nonpos E]
@@ -1865,7 +1865,7 @@ theorem IsCompact.cthickening_eq_biUnion_closedBall {α : Type _} [PseudoMetricS
obtain ⟨y, yE, hy⟩ : ∃ y ∈ E, inf_edist x E = edist x y := hE.exists_inf_edist_eq_edist hne _
have D1 : edist x y ≤ ENNReal.ofReal δ := (le_of_eq hy.symm).trans hx
have D2 : dist x y ≤ δ := by
- rw [edist_dist] at D1
+ rw [edist_dist] at D1
exact (ENNReal.ofReal_le_ofReal_iff hδ).1 D1
exact mem_bUnion yE D2
#align is_compact.cthickening_eq_bUnion_closed_ball IsCompact.cthickening_eq_biUnion_closedBall
@@ -1903,7 +1903,7 @@ theorem infEdist_le_infEdist_cthickening_add :
infEdist x s ≤ infEdist x (cthickening δ s) + ENNReal.ofReal δ :=
by
refine' le_of_forall_lt' fun r h => _
- simp_rw [← lt_tsub_iff_right, inf_edist_lt_iff, mem_cthickening_iff] at h
+ simp_rw [← lt_tsub_iff_right, inf_edist_lt_iff, mem_cthickening_iff] at h
obtain ⟨y, hy, hxy⟩ := h
exact
inf_edist_le_edist_add_inf_edist.trans_lt
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -275,7 +275,7 @@ theorem IsOpen.exists_iUnion_isClosed {U : Set α} (hU : IsOpen U) :
rw [mem_iff_inf_edist_zero_of_closed hU.is_closed_compl] at this
have B : 0 < inf_edist x (Uᶜ) := by simpa [pos_iff_ne_zero] using this
have : Filter.Tendsto (fun n => a ^ n) at_top (𝓝 0) :=
- ENNReal.tendsto_pow_atTop_nhds_0_of_lt_1 a_lt_one
+ ENNReal.tendsto_pow_atTop_nhds_zero_of_lt_one a_lt_one
rcases((tendsto_order.1 this).2 _ B).exists with ⟨n, hn⟩
simp only [mem_Union, mem_Ici, mem_preimage]
exact ⟨n, hn.le⟩
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -268,7 +268,7 @@ theorem IsOpen.exists_iUnion_isClosed {U : Set α} (hU : IsOpen U) :
show Monotone F
· intro m n hmn x hx
simp only [mem_Ici, mem_preimage] at hx ⊢
- apply le_trans (pow_le_pow_of_le_one' a_lt_one.le hmn) hx
+ apply le_trans (pow_le_pow_right_of_le_one' a_lt_one.le hmn) hx
show (⋃ n, F n) = U
· refine' subset.antisymm (by simp only [Union_subset_iff, F_subset, forall_const]) fun x hx => _
have : ¬x ∈ Uᶜ := by simpa using hx
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,10 +3,10 @@ Copyright (c) 2019 Sébastien Gouëzel. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Sébastien Gouëzel
-/
-import Mathbin.Analysis.SpecificLimits.Basic
-import Mathbin.Topology.MetricSpace.IsometricSmul
-import Mathbin.Topology.MetricSpace.Isometry
-import Mathbin.Topology.Instances.Ennreal
+import Analysis.SpecificLimits.Basic
+import Topology.MetricSpace.IsometricSmul
+import Topology.MetricSpace.Isometry
+import Topology.Instances.Ennreal
#align_import topology.metric_space.hausdorff_distance from "leanprover-community/mathlib"@"bc91ed7093bf098d253401e69df601fc33dde156"
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -725,7 +725,8 @@ theorem disjoint_closedBall_of_lt_infDist {r : ℝ} (h : r < infDist x s) :
-/
#print Metric.dist_le_infDist_add_diam /-
-theorem dist_le_infDist_add_diam (hs : Bounded s) (hy : y ∈ s) : dist x y ≤ infDist x s + diam s :=
+theorem dist_le_infDist_add_diam (hs : IsBounded s) (hy : y ∈ s) :
+ dist x y ≤ infDist x s + diam s :=
by
have A : inf_edist x s ≠ ∞ := inf_edist_ne_top ⟨y, hy⟩
have B : EMetric.diam s ≠ ∞ := hs.ediam_ne_top
@@ -914,7 +915,7 @@ theorem hausdorffDist_nonneg : 0 ≤ hausdorffDist s t := by simp [Hausdorff_dis
/-- If two sets are nonempty and bounded in a metric space, they are at finite Hausdorff
edistance. -/
theorem hausdorffEdist_ne_top_of_nonempty_of_bounded (hs : s.Nonempty) (ht : t.Nonempty)
- (bs : Bounded s) (bt : Bounded t) : hausdorffEdist s t ≠ ⊤ :=
+ (bs : IsBounded s) (bt : IsBounded t) : hausdorffEdist s t ≠ ⊤ :=
by
rcases hs with ⟨cs, hcs⟩
rcases ht with ⟨ct, hct⟩
@@ -1017,8 +1018,8 @@ theorem hausdorffDist_le_of_mem_dist {r : ℝ} (hr : 0 ≤ r) (H1 : ∀ x ∈ s,
#print Metric.hausdorffDist_le_diam /-
/-- The Hausdorff distance is controlled by the diameter of the union -/
-theorem hausdorffDist_le_diam (hs : s.Nonempty) (bs : Bounded s) (ht : t.Nonempty)
- (bt : Bounded t) : hausdorffDist s t ≤ diam (s ∪ t) :=
+theorem hausdorffDist_le_diam (hs : s.Nonempty) (bs : IsBounded s) (ht : t.Nonempty)
+ (bt : IsBounded t) : hausdorffDist s t ≤ diam (s ∪ t) :=
by
rcases hs with ⟨x, xs⟩
rcases ht with ⟨y, yt⟩
@@ -1321,8 +1322,8 @@ theorem thickening_eq_biUnion_ball {δ : ℝ} {E : Set X} : thickening δ E =
#align metric.thickening_eq_bUnion_ball Metric.thickening_eq_biUnion_ball
-/
-#print Metric.Bounded.thickening /-
-theorem Bounded.thickening {δ : ℝ} {E : Set X} (h : Bounded E) : Bounded (thickening δ E) :=
+#print Bornology.IsBounded.thickening /-
+theorem IsBounded.thickening {δ : ℝ} {E : Set X} (h : IsBounded E) : IsBounded (thickening δ E) :=
by
refine' bounded_iff_mem_bounded.2 fun x hx => _
rcases h.subset_ball x with ⟨R, hR⟩
@@ -1332,7 +1333,7 @@ theorem Bounded.thickening {δ : ℝ} {E : Set X} (h : Bounded E) : Bounded (thi
calc
dist y x ≤ dist z x + dist y z := by rw [add_comm]; exact dist_triangle _ _ _
_ ≤ R + δ := add_le_add (hR zE) hz.le
-#align metric.bounded.thickening Metric.Bounded.thickening
+#align metric.bounded.thickening Bornology.IsBounded.thickening
-/
end Thickening
@@ -1484,16 +1485,16 @@ theorem thickening_subset_cthickening_of_le {δ₁ δ₂ : ℝ} (hle : δ₁ ≤
#align metric.thickening_subset_cthickening_of_le Metric.thickening_subset_cthickening_of_le
-/
-#print Metric.Bounded.cthickening /-
-theorem Bounded.cthickening {α : Type _} [PseudoMetricSpace α] {δ : ℝ} {E : Set α} (h : Bounded E) :
- Bounded (cthickening δ E) :=
+#print Bornology.IsBounded.cthickening /-
+theorem IsBounded.cthickening {α : Type _} [PseudoMetricSpace α] {δ : ℝ} {E : Set α}
+ (h : IsBounded E) : IsBounded (cthickening δ E) :=
by
have : bounded (thickening (max (δ + 1) 1) E) := h.thickening
apply bounded.mono _ this
exact
cthickening_subset_thickening' (zero_lt_one.trans_le (le_max_right _ _))
((lt_add_one _).trans_le (le_max_left _ _)) _
-#align metric.bounded.cthickening Metric.Bounded.cthickening
+#align metric.bounded.cthickening Bornology.IsBounded.cthickening
-/
#print Metric.thickening_subset_interior_cthickening /-
mathlib commit https://github.com/leanprover-community/mathlib/commit/001ffdc42920050657fd45bd2b8bfbec8eaaeb29
@@ -1705,7 +1705,7 @@ theorem IsCompact.exists_thickening_subset_open (hs : IsCompact s) (ht : IsOpen
#print Metric.hasBasis_nhdsSet_thickening /-
theorem hasBasis_nhdsSet_thickening {K : Set α} (hK : IsCompact K) :
(𝓝ˢ K).HasBasis (fun δ : ℝ => 0 < δ) fun δ => thickening δ K :=
- (hasBasis_nhdsSet K).to_has_basis' (fun U hU => hK.exists_thickening_subset_open hU.1 hU.2)
+ (hasBasis_nhdsSet K).to_hasBasis' (fun U hU => hK.exists_thickening_subset_open hU.1 hU.2)
fun _ => thickening_mem_nhdsSet K
#align metric.has_basis_nhds_set_thickening Metric.hasBasis_nhdsSet_thickening
-/
@@ -1713,7 +1713,7 @@ theorem hasBasis_nhdsSet_thickening {K : Set α} (hK : IsCompact K) :
#print Metric.hasBasis_nhdsSet_cthickening /-
theorem hasBasis_nhdsSet_cthickening {K : Set α} (hK : IsCompact K) :
(𝓝ˢ K).HasBasis (fun δ : ℝ => 0 < δ) fun δ => cthickening δ K :=
- (hasBasis_nhdsSet K).to_has_basis' (fun U hU => hK.exists_cthickening_subset_open hU.1 hU.2)
+ (hasBasis_nhdsSet K).to_hasBasis' (fun U hU => hK.exists_cthickening_subset_open hU.1 hU.2)
fun _ => cthickening_mem_nhdsSet K
#align metric.has_basis_nhds_set_cthickening Metric.hasBasis_nhdsSet_cthickening
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,17 +2,14 @@
Copyright (c) 2019 Sébastien Gouëzel. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Sébastien Gouëzel
-
-! This file was ported from Lean 3 source module topology.metric_space.hausdorff_distance
-! leanprover-community/mathlib commit bc91ed7093bf098d253401e69df601fc33dde156
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.Analysis.SpecificLimits.Basic
import Mathbin.Topology.MetricSpace.IsometricSmul
import Mathbin.Topology.MetricSpace.Isometry
import Mathbin.Topology.Instances.Ennreal
+#align_import topology.metric_space.hausdorff_distance from "leanprover-community/mathlib"@"bc91ed7093bf098d253401e69df601fc33dde156"
+
/-!
# Hausdorff distance
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -63,14 +63,18 @@ def infEdist (x : α) (s : Set α) : ℝ≥0∞ :=
#align emetric.inf_edist EMetric.infEdist
-/
+#print EMetric.infEdist_empty /-
@[simp]
theorem infEdist_empty : infEdist x ∅ = ∞ :=
iInf_emptyset
#align emetric.inf_edist_empty EMetric.infEdist_empty
+-/
+#print EMetric.le_infEdist /-
theorem le_infEdist {d} : d ≤ infEdist x s ↔ ∀ y ∈ s, d ≤ edist x y := by
simp only [inf_edist, le_iInf_iff]
#align emetric.le_inf_edist EMetric.le_infEdist
+-/
#print EMetric.infEdist_union /-
/-- The edist to a union is the minimum of the edists -/
@@ -80,10 +84,12 @@ theorem infEdist_union : infEdist x (s ∪ t) = infEdist x s ⊓ infEdist x t :=
#align emetric.inf_edist_union EMetric.infEdist_union
-/
+#print EMetric.infEdist_iUnion /-
@[simp]
theorem infEdist_iUnion (f : ι → Set α) (x : α) : infEdist x (⋃ i, f i) = ⨅ i, infEdist x (f i) :=
iInf_iUnion f _
#align emetric.inf_edist_Union EMetric.infEdist_iUnion
+-/
#print EMetric.infEdist_singleton /-
/-- The edist to a singleton is the edistance to the single point of this singleton -/
@@ -93,26 +99,35 @@ theorem infEdist_singleton : infEdist x {y} = edist x y :=
#align emetric.inf_edist_singleton EMetric.infEdist_singleton
-/
+#print EMetric.infEdist_le_edist_of_mem /-
/-- The edist to a set is bounded above by the edist to any of its points -/
theorem infEdist_le_edist_of_mem (h : y ∈ s) : infEdist x s ≤ edist x y :=
iInf₂_le _ h
#align emetric.inf_edist_le_edist_of_mem EMetric.infEdist_le_edist_of_mem
+-/
+#print EMetric.infEdist_zero_of_mem /-
/-- If a point `x` belongs to `s`, then its edist to `s` vanishes -/
theorem infEdist_zero_of_mem (h : x ∈ s) : infEdist x s = 0 :=
nonpos_iff_eq_zero.1 <| @edist_self _ _ x ▸ infEdist_le_edist_of_mem h
#align emetric.inf_edist_zero_of_mem EMetric.infEdist_zero_of_mem
+-/
+#print EMetric.infEdist_anti /-
/-- The edist is antitone with respect to inclusion. -/
theorem infEdist_anti (h : s ⊆ t) : infEdist x t ≤ infEdist x s :=
iInf_le_iInf_of_subset h
#align emetric.inf_edist_anti EMetric.infEdist_anti
+-/
+#print EMetric.infEdist_lt_iff /-
/-- The edist to a set is `< r` iff there exists a point in the set at edistance `< r` -/
theorem infEdist_lt_iff {r : ℝ≥0∞} : infEdist x s < r ↔ ∃ y ∈ s, edist x y < r := by
simp_rw [inf_edist, iInf_lt_iff]
#align emetric.inf_edist_lt_iff EMetric.infEdist_lt_iff
+-/
+#print EMetric.infEdist_le_infEdist_add_edist /-
/-- The edist of `x` to `s` is bounded by the sum of the edist of `y` to `s` and
the edist from `x` to `y` -/
theorem infEdist_le_infEdist_add_edist : infEdist x s ≤ infEdist y s + edist x y :=
@@ -121,11 +136,15 @@ theorem infEdist_le_infEdist_add_edist : infEdist x s ≤ infEdist y s + edist x
iInf₂_mono fun z hz => (edist_triangle _ _ _).trans_eq (add_comm _ _)
_ = (⨅ z ∈ s, edist y z) + edist x y := by simp only [ENNReal.iInf_add]
#align emetric.inf_edist_le_inf_edist_add_edist EMetric.infEdist_le_infEdist_add_edist
+-/
+#print EMetric.infEdist_le_edist_add_infEdist /-
theorem infEdist_le_edist_add_infEdist : infEdist x s ≤ edist x y + infEdist y s := by
rw [add_comm]; exact inf_edist_le_inf_edist_add_edist
#align emetric.inf_edist_le_edist_add_inf_edist EMetric.infEdist_le_edist_add_infEdist
+-/
+#print EMetric.edist_le_infEdist_add_ediam /-
theorem edist_le_infEdist_add_ediam (hy : y ∈ s) : edist x y ≤ infEdist x s + diam s :=
by
simp_rw [inf_edist, ENNReal.iInf_add]
@@ -134,13 +153,16 @@ theorem edist_le_infEdist_add_ediam (hy : y ∈ s) : edist x y ≤ infEdist x s
edist x y ≤ edist x i + edist i y := edist_triangle _ _ _
_ ≤ edist x i + diam s := add_le_add le_rfl (edist_le_diam_of_mem hi hy)
#align emetric.edist_le_inf_edist_add_ediam EMetric.edist_le_infEdist_add_ediam
+-/
+#print EMetric.continuous_infEdist /-
/-- The edist to a set depends continuously on the point -/
@[continuity]
theorem continuous_infEdist : Continuous fun x => infEdist x s :=
continuous_of_le_add_edist 1 (by simp) <| by
simp only [one_mul, inf_edist_le_inf_edist_add_edist, forall₂_true_iff]
#align emetric.continuous_inf_edist EMetric.continuous_infEdist
+-/
#print EMetric.infEdist_closure /-
/-- The edist to a set and to its closure coincide -/
@@ -163,30 +185,39 @@ theorem infEdist_closure : infEdist x (closure s) = infEdist x s :=
#align emetric.inf_edist_closure EMetric.infEdist_closure
-/
+#print EMetric.mem_closure_iff_infEdist_zero /-
/-- A point belongs to the closure of `s` iff its infimum edistance to this set vanishes -/
theorem mem_closure_iff_infEdist_zero : x ∈ closure s ↔ infEdist x s = 0 :=
⟨fun h => by rw [← inf_edist_closure]; exact inf_edist_zero_of_mem h, fun h =>
EMetric.mem_closure_iff.2 fun ε εpos => infEdist_lt_iff.mp <| by rwa [h]⟩
#align emetric.mem_closure_iff_inf_edist_zero EMetric.mem_closure_iff_infEdist_zero
+-/
+#print EMetric.mem_iff_infEdist_zero_of_closed /-
/-- Given a closed set `s`, a point belongs to `s` iff its infimum edistance to this set vanishes -/
theorem mem_iff_infEdist_zero_of_closed (h : IsClosed s) : x ∈ s ↔ infEdist x s = 0 :=
by
convert ← mem_closure_iff_inf_edist_zero
exact h.closure_eq
#align emetric.mem_iff_inf_edist_zero_of_closed EMetric.mem_iff_infEdist_zero_of_closed
+-/
+#print EMetric.infEdist_pos_iff_not_mem_closure /-
/-- The infimum edistance of a point to a set is positive if and only if the point is not in the
closure of the set. -/
theorem infEdist_pos_iff_not_mem_closure {x : α} {E : Set α} : 0 < infEdist x E ↔ x ∉ closure E :=
by rw [mem_closure_iff_inf_edist_zero, pos_iff_ne_zero]
#align emetric.inf_edist_pos_iff_not_mem_closure EMetric.infEdist_pos_iff_not_mem_closure
+-/
+#print EMetric.infEdist_closure_pos_iff_not_mem_closure /-
theorem infEdist_closure_pos_iff_not_mem_closure {x : α} {E : Set α} :
0 < infEdist x (closure E) ↔ x ∉ closure E := by
rw [inf_edist_closure, inf_edist_pos_iff_not_mem_closure]
#align emetric.inf_edist_closure_pos_iff_not_mem_closure EMetric.infEdist_closure_pos_iff_not_mem_closure
+-/
+#print EMetric.exists_real_pos_lt_infEdist_of_not_mem_closure /-
theorem exists_real_pos_lt_infEdist_of_not_mem_closure {x : α} {E : Set α} (h : x ∉ closure E) :
∃ ε : ℝ, 0 < ε ∧ ENNReal.ofReal ε < infEdist x E :=
by
@@ -194,7 +225,9 @@ theorem exists_real_pos_lt_infEdist_of_not_mem_closure {x : α} {E : Set α} (h
rcases h with ⟨ε, ⟨_, ⟨ε_pos, ε_lt⟩⟩⟩
exact ⟨ε, ⟨ennreal.of_real_pos.mp ε_pos, ε_lt⟩⟩
#align emetric.exists_real_pos_lt_inf_edist_of_not_mem_closure EMetric.exists_real_pos_lt_infEdist_of_not_mem_closure
+-/
+#print EMetric.disjoint_closedBall_of_lt_infEdist /-
theorem disjoint_closedBall_of_lt_infEdist {r : ℝ≥0∞} (h : r < infEdist x s) :
Disjoint (closedBall x r) s := by
rw [disjoint_left]
@@ -205,6 +238,7 @@ theorem disjoint_closedBall_of_lt_infEdist {r : ℝ≥0∞} (h : r < infEdist x
_ ≤ r := by rwa [mem_closed_ball, edist_comm] at hy
_ < inf_edist x s := h
#align emetric.disjoint_closed_ball_of_lt_inf_edist EMetric.disjoint_closedBall_of_lt_infEdist
+-/
#print EMetric.infEdist_image /-
/-- The infimum edistance is invariant under isometries -/
@@ -213,13 +247,16 @@ theorem infEdist_image (hΦ : Isometry Φ) : infEdist (Φ x) (Φ '' t) = infEdis
#align emetric.inf_edist_image EMetric.infEdist_image
-/
+#print EMetric.infEdist_smul /-
@[simp, to_additive]
theorem infEdist_smul {M} [SMul M α] [IsometricSMul M α] (c : M) (x : α) (s : Set α) :
infEdist (c • x) (c • s) = infEdist x s :=
infEdist_image (isometry_smul _ _)
#align emetric.inf_edist_smul EMetric.infEdist_smul
#align emetric.inf_edist_vadd EMetric.infEdist_vadd
+-/
+#print IsOpen.exists_iUnion_isClosed /-
theorem IsOpen.exists_iUnion_isClosed {U : Set α} (hU : IsOpen U) :
∃ F : ℕ → Set α, (∀ n, IsClosed (F n)) ∧ (∀ n, F n ⊆ U) ∧ (⋃ n, F n) = U ∧ Monotone F :=
by
@@ -246,7 +283,9 @@ theorem IsOpen.exists_iUnion_isClosed {U : Set α} (hU : IsOpen U) :
simp only [mem_Union, mem_Ici, mem_preimage]
exact ⟨n, hn.le⟩
#align is_open.exists_Union_is_closed IsOpen.exists_iUnion_isClosed
+-/
+#print IsCompact.exists_infEdist_eq_edist /-
theorem IsCompact.exists_infEdist_eq_edist (hs : IsCompact s) (hne : s.Nonempty) (x : α) :
∃ y ∈ s, infEdist x s = edist x y :=
by
@@ -255,7 +294,9 @@ theorem IsCompact.exists_infEdist_eq_edist (hs : IsCompact s) (hne : s.Nonempty)
hs.exists_forall_le hne A.continuous_on
exact ⟨y, ys, le_antisymm (inf_edist_le_edist_of_mem ys) (by rwa [le_inf_edist])⟩
#align is_compact.exists_inf_edist_eq_edist IsCompact.exists_infEdist_eq_edist
+-/
+#print EMetric.exists_pos_forall_lt_edist /-
theorem exists_pos_forall_lt_edist (hs : IsCompact s) (ht : IsClosed t) (hst : Disjoint s t) :
∃ r : ℝ≥0, 0 < r ∧ ∀ x ∈ s, ∀ y ∈ t, (r : ℝ≥0∞) < edist x y :=
by
@@ -267,6 +308,7 @@ theorem exists_pos_forall_lt_edist (hs : IsCompact s) (ht : IsClosed t) (hst : D
rcases ENNReal.lt_iff_exists_nnreal_btwn.1 this with ⟨r, h₀, hr⟩
exact ⟨r, ennreal.coe_pos.mp h₀, fun y hy z hz => hr.trans_le <| le_inf_edist.1 (h y hy) z hz⟩
#align emetric.exists_pos_forall_lt_edist EMetric.exists_pos_forall_lt_edist
+-/
end InfEdist
@@ -282,14 +324,17 @@ irreducible_def hausdorffEdist {α : Type u} [PseudoEMetricSpace α] (s t : Set
#align emetric.Hausdorff_edist EMetric.hausdorffEdist
-/
+#print EMetric.hausdorffEdist_def /-
theorem hausdorffEdist_def {α : Type u} [PseudoEMetricSpace α] (s t : Set α) :
hausdorffEdist s t = (⨆ x ∈ s, infEdist x t) ⊔ ⨆ y ∈ t, infEdist y s := by rw [Hausdorff_edist]
#align emetric.Hausdorff_edist_def EMetric.hausdorffEdist_def
+-/
section HausdorffEdist
variable [PseudoEMetricSpace α] [PseudoEMetricSpace β] {x y : α} {s t u : Set α} {Φ : α → β}
+#print EMetric.hausdorffEdist_self /-
/-- The Hausdorff edistance of a set to itself vanishes -/
@[simp]
theorem hausdorffEdist_self : hausdorffEdist s s = 0 :=
@@ -297,6 +342,7 @@ theorem hausdorffEdist_self : hausdorffEdist s s = 0 :=
simp only [Hausdorff_edist_def, sup_idem, ENNReal.iSup_eq_zero]
exact fun x hx => inf_edist_zero_of_mem hx
#align emetric.Hausdorff_edist_self EMetric.hausdorffEdist_self
+-/
#print EMetric.hausdorffEdist_comm /-
/-- The Haudorff edistances of `s` to `t` and of `t` to `s` coincide -/
@@ -305,6 +351,7 @@ theorem hausdorffEdist_comm : hausdorffEdist s t = hausdorffEdist t s := by
#align emetric.Hausdorff_edist_comm EMetric.hausdorffEdist_comm
-/
+#print EMetric.hausdorffEdist_le_of_infEdist /-
/-- Bounding the Hausdorff edistance by bounding the edistance of any point
in each set to the other set -/
theorem hausdorffEdist_le_of_infEdist {r : ℝ≥0∞} (H1 : ∀ x ∈ s, infEdist x t ≤ r)
@@ -313,7 +360,9 @@ theorem hausdorffEdist_le_of_infEdist {r : ℝ≥0∞} (H1 : ∀ x ∈ s, infEdi
simp only [Hausdorff_edist, sup_le_iff, iSup_le_iff]
exact ⟨H1, H2⟩
#align emetric.Hausdorff_edist_le_of_inf_edist EMetric.hausdorffEdist_le_of_infEdist
+-/
+#print EMetric.hausdorffEdist_le_of_mem_edist /-
/-- Bounding the Hausdorff edistance by exhibiting, for any point in each set,
another point in the other set at controlled distance -/
theorem hausdorffEdist_le_of_mem_edist {r : ℝ≥0∞} (H1 : ∀ x ∈ s, ∃ y ∈ t, edist x y ≤ r)
@@ -327,7 +376,9 @@ theorem hausdorffEdist_le_of_mem_edist {r : ℝ≥0∞} (H1 : ∀ x ∈ s, ∃ y
rcases H2 x xt with ⟨y, ys, hy⟩
exact le_trans (inf_edist_le_edist_of_mem ys) hy
#align emetric.Hausdorff_edist_le_of_mem_edist EMetric.hausdorffEdist_le_of_mem_edist
+-/
+#print EMetric.infEdist_le_hausdorffEdist_of_mem /-
/-- The distance to a set is controlled by the Hausdorff distance -/
theorem infEdist_le_hausdorffEdist_of_mem (h : x ∈ s) : infEdist x t ≤ hausdorffEdist s t :=
by
@@ -335,7 +386,9 @@ theorem infEdist_le_hausdorffEdist_of_mem (h : x ∈ s) : infEdist x t ≤ hausd
refine' le_trans _ le_sup_left
exact le_iSup₂ x h
#align emetric.inf_edist_le_Hausdorff_edist_of_mem EMetric.infEdist_le_hausdorffEdist_of_mem
+-/
+#print EMetric.exists_edist_lt_of_hausdorffEdist_lt /-
/-- If the Hausdorff distance is `<r`, then any point in one of the sets has
a corresponding point at distance `<r` in the other set -/
theorem exists_edist_lt_of_hausdorffEdist_lt {r : ℝ≥0∞} (h : x ∈ s) (H : hausdorffEdist s t < r) :
@@ -345,7 +398,9 @@ theorem exists_edist_lt_of_hausdorffEdist_lt {r : ℝ≥0∞} (h : x ∈ s) (H :
infEdist x t ≤ hausdorffEdist s t := infEdist_le_hausdorffEdist_of_mem h
_ < r := H
#align emetric.exists_edist_lt_of_Hausdorff_edist_lt EMetric.exists_edist_lt_of_hausdorffEdist_lt
+-/
+#print EMetric.infEdist_le_infEdist_add_hausdorffEdist /-
/-- The distance from `x` to `s` or `t` is controlled in terms of the Hausdorff distance
between `s` and `t` -/
theorem infEdist_le_infEdist_add_hausdorffEdist :
@@ -368,6 +423,7 @@ theorem infEdist_le_infEdist_add_hausdorffEdist :
_ = inf_edist x s + Hausdorff_edist s t + ε := by
simp [ENNReal.add_halves, add_comm, add_left_comm]
#align emetric.inf_edist_le_inf_edist_add_Hausdorff_edist EMetric.infEdist_le_infEdist_add_hausdorffEdist
+-/
#print EMetric.hausdorffEdist_image /-
/-- The Hausdorff edistance is invariant under eisometries -/
@@ -377,6 +433,7 @@ theorem hausdorffEdist_image (h : Isometry Φ) :
#align emetric.Hausdorff_edist_image EMetric.hausdorffEdist_image
-/
+#print EMetric.hausdorffEdist_le_ediam /-
/-- The Hausdorff distance is controlled by the diameter of the union -/
theorem hausdorffEdist_le_ediam (hs : s.Nonempty) (ht : t.Nonempty) :
hausdorffEdist s t ≤ diam (s ∪ t) :=
@@ -389,7 +446,9 @@ theorem hausdorffEdist_le_ediam (hs : s.Nonempty) (ht : t.Nonempty) :
· intro z hz
exact ⟨x, xs, edist_le_diam_of_mem (subset_union_right _ _ hz) (subset_union_left _ _ xs)⟩
#align emetric.Hausdorff_edist_le_ediam EMetric.hausdorffEdist_le_ediam
+-/
+#print EMetric.hausdorffEdist_triangle /-
/-- The Hausdorff distance satisfies the triangular inequality -/
theorem hausdorffEdist_triangle : hausdorffEdist s u ≤ hausdorffEdist s t + hausdorffEdist t u :=
by
@@ -412,7 +471,9 @@ theorem hausdorffEdist_triangle : hausdorffEdist s u ≤ hausdorffEdist s t + ha
(add_le_add_right (inf_edist_le_Hausdorff_edist_of_mem xu) _)
_ = Hausdorff_edist s t + Hausdorff_edist t u := by simp [Hausdorff_edist_comm, add_comm]
#align emetric.Hausdorff_edist_triangle EMetric.hausdorffEdist_triangle
+-/
+#print EMetric.hausdorffEdist_zero_iff_closure_eq_closure /-
/-- Two sets are at zero Hausdorff edistance if and only if they have the same closure -/
theorem hausdorffEdist_zero_iff_closure_eq_closure :
hausdorffEdist s t = 0 ↔ closure s = closure t :=
@@ -426,12 +487,15 @@ theorem hausdorffEdist_zero_iff_closure_eq_closure :
(closure_minimal h.2 isClosed_closure),
fun h => ⟨h ▸ subset_closure, h.symm ▸ subset_closure⟩⟩
#align emetric.Hausdorff_edist_zero_iff_closure_eq_closure EMetric.hausdorffEdist_zero_iff_closure_eq_closure
+-/
+#print EMetric.hausdorffEdist_self_closure /-
/-- The Hausdorff edistance between a set and its closure vanishes -/
@[simp]
theorem hausdorffEdist_self_closure : hausdorffEdist s (closure s) = 0 := by
rw [Hausdorff_edist_zero_iff_closure_eq_closure, closure_closure]
#align emetric.Hausdorff_edist_self_closure EMetric.hausdorffEdist_self_closure
+-/
#print EMetric.hausdorffEdist_closure₁ /-
/-- Replacing a set by its closure does not change the Hausdorff edistance. -/
@@ -466,12 +530,15 @@ theorem hausdorffEdist_closure : hausdorffEdist (closure s) (closure t) = hausdo
#align emetric.Hausdorff_edist_closure EMetric.hausdorffEdist_closure
-/
+#print EMetric.hausdorffEdist_zero_iff_eq_of_closed /-
/-- Two closed sets are at zero Hausdorff edistance if and only if they coincide -/
theorem hausdorffEdist_zero_iff_eq_of_closed (hs : IsClosed s) (ht : IsClosed t) :
hausdorffEdist s t = 0 ↔ s = t := by
rw [Hausdorff_edist_zero_iff_closure_eq_closure, hs.closure_eq, ht.closure_eq]
#align emetric.Hausdorff_edist_zero_iff_eq_of_closed EMetric.hausdorffEdist_zero_iff_eq_of_closed
+-/
+#print EMetric.hausdorffEdist_empty /-
/-- The Haudorff edistance to the empty set is infinite -/
theorem hausdorffEdist_empty (ne : s.Nonempty) : hausdorffEdist s ∅ = ∞ :=
by
@@ -479,13 +546,17 @@ theorem hausdorffEdist_empty (ne : s.Nonempty) : hausdorffEdist s ∅ = ∞ :=
have : inf_edist x ∅ ≤ Hausdorff_edist s ∅ := inf_edist_le_Hausdorff_edist_of_mem xs
simpa using this
#align emetric.Hausdorff_edist_empty EMetric.hausdorffEdist_empty
+-/
+#print EMetric.nonempty_of_hausdorffEdist_ne_top /-
/-- If a set is at finite Hausdorff edistance of a nonempty set, it is nonempty -/
theorem nonempty_of_hausdorffEdist_ne_top (hs : s.Nonempty) (fin : hausdorffEdist s t ≠ ⊤) :
t.Nonempty :=
t.eq_empty_or_nonempty.elim (fun ht => (Fin <| ht.symm ▸ hausdorffEdist_empty hs).elim) id
#align emetric.nonempty_of_Hausdorff_edist_ne_top EMetric.nonempty_of_hausdorffEdist_ne_top
+-/
+#print EMetric.empty_or_nonempty_of_hausdorffEdist_ne_top /-
theorem empty_or_nonempty_of_hausdorffEdist_ne_top (fin : hausdorffEdist s t ≠ ⊤) :
s = ∅ ∧ t = ∅ ∨ s.Nonempty ∧ t.Nonempty :=
by
@@ -496,6 +567,7 @@ theorem empty_or_nonempty_of_hausdorffEdist_ne_top (fin : hausdorffEdist s t ≠
exact Or.inr ⟨nonempty_of_Hausdorff_edist_ne_top ht Fin, ht⟩
· exact Or.inr ⟨hs, nonempty_of_Hausdorff_edist_ne_top hs Fin⟩
#align emetric.empty_or_nonempty_of_Hausdorff_edist_ne_top EMetric.empty_or_nonempty_of_hausdorffEdist_ne_top
+-/
end HausdorffEdist
@@ -528,6 +600,7 @@ def infDist (x : α) (s : Set α) : ℝ :=
#align metric.inf_dist Metric.infDist
-/
+#print Metric.infDist_eq_iInf /-
theorem infDist_eq_iInf : infDist x s = ⨅ y : s, dist x y :=
by
rw [inf_dist, inf_edist, iInf_subtype', ENNReal.toReal_iInf]
@@ -535,17 +608,23 @@ theorem infDist_eq_iInf : infDist x s = ⨅ y : s, dist x y :=
rfl
· exact fun _ => edist_ne_top _ _
#align metric.inf_dist_eq_infi Metric.infDist_eq_iInf
+-/
+#print Metric.infDist_nonneg /-
/-- the minimal distance is always nonnegative -/
theorem infDist_nonneg : 0 ≤ infDist x s := by simp [inf_dist]
#align metric.inf_dist_nonneg Metric.infDist_nonneg
+-/
+#print Metric.infDist_empty /-
/-- the minimal distance to the empty set is 0 (if you want to have the more reasonable
value ∞ instead, use `inf_edist`, which takes values in ℝ≥0∞) -/
@[simp]
theorem infDist_empty : infDist x ∅ = 0 := by simp [inf_dist]
#align metric.inf_dist_empty Metric.infDist_empty
+-/
+#print Metric.infEdist_ne_top /-
/-- In a metric space, the minimal edistance to a nonempty set is finite -/
theorem infEdist_ne_top (h : s.Nonempty) : infEdist x s ≠ ⊤ :=
by
@@ -555,11 +634,14 @@ theorem infEdist_ne_top (h : s.Nonempty) : infEdist x s ≠ ⊤ :=
inf_edist x s ≤ edist x y := inf_edist_le_edist_of_mem hy
_ < ⊤ := lt_top_iff_ne_top.2 (edist_ne_top _ _)
#align metric.inf_edist_ne_top Metric.infEdist_ne_top
+-/
+#print Metric.infDist_zero_of_mem /-
/-- The minimal distance of a point to a set containing it vanishes -/
theorem infDist_zero_of_mem (h : x ∈ s) : infDist x s = 0 := by
simp [inf_edist_zero_of_mem h, inf_dist]
#align metric.inf_dist_zero_of_mem Metric.infDist_zero_of_mem
+-/
#print Metric.infDist_singleton /-
/-- The minimal distance to a singleton is the distance to the unique point in this singleton -/
@@ -568,13 +650,16 @@ theorem infDist_singleton : infDist x {y} = dist x y := by simp [inf_dist, inf_e
#align metric.inf_dist_singleton Metric.infDist_singleton
-/
+#print Metric.infDist_le_dist_of_mem /-
/-- The minimal distance to a set is bounded by the distance to any point in this set -/
theorem infDist_le_dist_of_mem (h : y ∈ s) : infDist x s ≤ dist x y :=
by
rw [dist_edist, inf_dist, ENNReal.toReal_le_toReal (inf_edist_ne_top ⟨_, h⟩) (edist_ne_top _ _)]
exact inf_edist_le_edist_of_mem h
#align metric.inf_dist_le_dist_of_mem Metric.infDist_le_dist_of_mem
+-/
+#print Metric.infDist_le_infDist_of_subset /-
/-- The minimal distance is monotonous with respect to inclusion -/
theorem infDist_le_infDist_of_subset (h : s ⊆ t) (hs : s.Nonempty) : infDist x t ≤ infDist x s :=
by
@@ -582,13 +667,17 @@ theorem infDist_le_infDist_of_subset (h : s ⊆ t) (hs : s.Nonempty) : infDist x
rw [inf_dist, inf_dist, ENNReal.toReal_le_toReal (inf_edist_ne_top ht) (inf_edist_ne_top hs)]
exact inf_edist_anti h
#align metric.inf_dist_le_inf_dist_of_subset Metric.infDist_le_infDist_of_subset
+-/
+#print Metric.infDist_lt_iff /-
/-- The minimal distance to a set is `< r` iff there exists a point in this set at distance `< r` -/
theorem infDist_lt_iff {r : ℝ} (hs : s.Nonempty) : infDist x s < r ↔ ∃ y ∈ s, dist x y < r := by
simp_rw [inf_dist, ← ENNReal.lt_ofReal_iff_toReal_lt (inf_edist_ne_top hs), inf_edist_lt_iff,
ENNReal.lt_ofReal_iff_toReal_lt (edist_ne_top _ _), ← dist_edist]
#align metric.inf_dist_lt_iff Metric.infDist_lt_iff
+-/
+#print Metric.infDist_le_infDist_add_dist /-
/-- The minimal distance from `x` to `s` is bounded by the distance from `y` to `s`, modulo
the distance between `x` and `y` -/
theorem infDist_le_infDist_add_dist : infDist x s ≤ infDist y s + dist x y :=
@@ -601,11 +690,15 @@ theorem infDist_le_infDist_add_dist : infDist x s ≤ infDist y s + dist x y :=
· exact inf_edist_le_inf_edist_add_edist
· simp [ENNReal.add_eq_top, inf_edist_ne_top hs, edist_ne_top]
#align metric.inf_dist_le_inf_dist_add_dist Metric.infDist_le_infDist_add_dist
+-/
+#print Metric.not_mem_of_dist_lt_infDist /-
theorem not_mem_of_dist_lt_infDist (h : dist x y < infDist x s) : y ∉ s := fun hy =>
h.not_le <| infDist_le_dist_of_mem hy
#align metric.not_mem_of_dist_lt_inf_dist Metric.not_mem_of_dist_lt_infDist
+-/
+#print Metric.disjoint_ball_infDist /-
theorem disjoint_ball_infDist : Disjoint (ball x (infDist x s)) s :=
disjoint_left.2 fun y hy =>
not_mem_of_dist_lt_infDist <|
@@ -613,10 +706,13 @@ theorem disjoint_ball_infDist : Disjoint (ball x (infDist x s)) s :=
dist x y = dist y x := dist_comm _ _
_ < infDist x s := hy
#align metric.disjoint_ball_inf_dist Metric.disjoint_ball_infDist
+-/
+#print Metric.ball_infDist_subset_compl /-
theorem ball_infDist_subset_compl : ball x (infDist x s) ⊆ sᶜ :=
disjoint_ball_infDist.subset_compl_right
#align metric.ball_inf_dist_subset_compl Metric.ball_infDist_subset_compl
+-/
#print Metric.ball_infDist_compl_subset /-
theorem ball_infDist_compl_subset : ball x (infDist x (sᶜ)) ⊆ s :=
@@ -624,11 +720,14 @@ theorem ball_infDist_compl_subset : ball x (infDist x (sᶜ)) ⊆ s :=
#align metric.ball_inf_dist_compl_subset Metric.ball_infDist_compl_subset
-/
+#print Metric.disjoint_closedBall_of_lt_infDist /-
theorem disjoint_closedBall_of_lt_infDist {r : ℝ} (h : r < infDist x s) :
Disjoint (closedBall x r) s :=
disjoint_ball_infDist.mono_left <| closedBall_subset_ball h
#align metric.disjoint_closed_ball_of_lt_inf_dist Metric.disjoint_closedBall_of_lt_infDist
+-/
+#print Metric.dist_le_infDist_add_diam /-
theorem dist_le_infDist_add_diam (hs : Bounded s) (hy : y ∈ s) : dist x y ≤ infDist x s + diam s :=
by
have A : inf_edist x s ≠ ∞ := inf_edist_ne_top ⟨y, hy⟩
@@ -639,6 +738,7 @@ theorem dist_le_infDist_add_diam (hs : Bounded s) (hy : y ∈ s) : dist x y ≤
· rw [edist_dist]; exact ENNReal.ofReal_ne_top
· exact ENNReal.add_ne_top.2 ⟨A, B⟩
#align metric.dist_le_inf_dist_add_diam Metric.dist_le_infDist_add_diam
+-/
variable (s)
@@ -673,22 +773,29 @@ theorem infDist_closure : infDist x (closure s) = infDist x s := by
#align metric.inf_dist_eq_closure Metric.infDist_closure
-/
+#print Metric.infDist_zero_of_mem_closure /-
/-- If a point belongs to the closure of `s`, then its infimum distance to `s` equals zero.
The converse is true provided that `s` is nonempty, see `mem_closure_iff_inf_dist_zero`. -/
theorem infDist_zero_of_mem_closure (hx : x ∈ closure s) : infDist x s = 0 := by
rw [← inf_dist_eq_closure]; exact inf_dist_zero_of_mem hx
#align metric.inf_dist_zero_of_mem_closure Metric.infDist_zero_of_mem_closure
+-/
+#print Metric.mem_closure_iff_infDist_zero /-
/-- A point belongs to the closure of `s` iff its infimum distance to this set vanishes -/
theorem mem_closure_iff_infDist_zero (h : s.Nonempty) : x ∈ closure s ↔ infDist x s = 0 := by
simp [mem_closure_iff_inf_edist_zero, inf_dist, ENNReal.toReal_eq_zero_iff, inf_edist_ne_top h]
#align metric.mem_closure_iff_inf_dist_zero Metric.mem_closure_iff_infDist_zero
+-/
+#print IsClosed.mem_iff_infDist_zero /-
/-- Given a closed set `s`, a point belongs to `s` iff its infimum distance to this set vanishes -/
theorem IsClosed.mem_iff_infDist_zero (h : IsClosed s) (hs : s.Nonempty) :
x ∈ s ↔ infDist x s = 0 := by rw [← mem_closure_iff_inf_dist_zero hs, h.closure_eq]
#align is_closed.mem_iff_inf_dist_zero IsClosed.mem_iff_infDist_zero
+-/
+#print IsClosed.not_mem_iff_infDist_pos /-
/-- Given a closed set `s`, a point belongs to `s` iff its infimum distance to this set vanishes -/
theorem IsClosed.not_mem_iff_infDist_pos (h : IsClosed s) (hs : s.Nonempty) :
x ∉ s ↔ 0 < infDist x s := by
@@ -696,6 +803,7 @@ theorem IsClosed.not_mem_iff_infDist_pos (h : IsClosed s) (hs : s.Nonempty) :
push_neg
simp [h.mem_iff_inf_dist_zero hs, le_antisymm_iff, inf_dist_nonneg]
#align is_closed.not_mem_iff_inf_dist_pos IsClosed.not_mem_iff_infDist_pos
+-/
#print Metric.infDist_image /-
/-- The infimum distance is invariant under isometries -/
@@ -719,12 +827,15 @@ theorem infDist_inter_closedBall_of_mem (h : y ∈ s) :
#align metric.inf_dist_inter_closed_ball_of_mem Metric.infDist_inter_closedBall_of_mem
-/
+#print IsCompact.exists_infDist_eq_dist /-
theorem IsCompact.exists_infDist_eq_dist (h : IsCompact s) (hne : s.Nonempty) (x : α) :
∃ y ∈ s, infDist x s = dist x y :=
let ⟨y, hys, hy⟩ := h.exists_infEdist_eq_edist hne x
⟨y, hys, by rw [inf_dist, dist_edist, hy]⟩
#align is_compact.exists_inf_dist_eq_dist IsCompact.exists_infDist_eq_dist
+-/
+#print IsClosed.exists_infDist_eq_dist /-
theorem IsClosed.exists_infDist_eq_dist [ProperSpace α] (h : IsClosed s) (hne : s.Nonempty)
(x : α) : ∃ y ∈ s, infDist x s = dist x y :=
by
@@ -737,11 +848,14 @@ theorem IsClosed.exists_infDist_eq_dist [ProperSpace α] (h : IsClosed s) (hne :
htc.exists_inf_dist_eq_dist htne x
exact ⟨y, hys, hyd⟩
#align is_closed.exists_inf_dist_eq_dist IsClosed.exists_infDist_eq_dist
+-/
+#print Metric.exists_mem_closure_infDist_eq_dist /-
theorem exists_mem_closure_infDist_eq_dist [ProperSpace α] (hne : s.Nonempty) (x : α) :
∃ y ∈ closure s, infDist x s = dist x y := by
simpa only [inf_dist_eq_closure] using is_closed_closure.exists_inf_dist_eq_dist hne.closure x
#align metric.exists_mem_closure_inf_dist_eq_dist Metric.exists_mem_closure_infDist_eq_dist
+-/
/-! ### Distance of a point to a set as a function into `ℝ≥0`. -/
@@ -753,25 +867,33 @@ def infNndist (x : α) (s : Set α) : ℝ≥0 :=
#align metric.inf_nndist Metric.infNndist
-/
+#print Metric.coe_infNndist /-
@[simp]
theorem coe_infNndist : (infNndist x s : ℝ) = infDist x s :=
rfl
#align metric.coe_inf_nndist Metric.coe_infNndist
+-/
+#print Metric.lipschitz_infNndist_pt /-
/-- The minimal distance to a set (as `ℝ≥0`) is Lipschitz in point with constant 1 -/
theorem lipschitz_infNndist_pt (s : Set α) : LipschitzWith 1 fun x => infNndist x s :=
LipschitzWith.of_le_add fun x y => infDist_le_infDist_add_dist
#align metric.lipschitz_inf_nndist_pt Metric.lipschitz_infNndist_pt
+-/
+#print Metric.uniformContinuous_infNndist_pt /-
/-- The minimal distance to a set (as `ℝ≥0`) is uniformly continuous in point -/
theorem uniformContinuous_infNndist_pt (s : Set α) : UniformContinuous fun x => infNndist x s :=
(lipschitz_infNndist_pt s).UniformContinuous
#align metric.uniform_continuous_inf_nndist_pt Metric.uniformContinuous_infNndist_pt
+-/
+#print Metric.continuous_infNndist_pt /-
/-- The minimal distance to a set (as `ℝ≥0`) is continuous in point -/
theorem continuous_infNndist_pt (s : Set α) : Continuous fun x => infNndist x s :=
(uniformContinuous_infNndist_pt s).Continuous
#align metric.continuous_inf_nndist_pt Metric.continuous_infNndist_pt
+-/
/-! ### The Hausdorff distance as a function into `ℝ`. -/
@@ -785,10 +907,13 @@ def hausdorffDist (s t : Set α) : ℝ :=
#align metric.Hausdorff_dist Metric.hausdorffDist
-/
+#print Metric.hausdorffDist_nonneg /-
/-- The Hausdorff distance is nonnegative -/
theorem hausdorffDist_nonneg : 0 ≤ hausdorffDist s t := by simp [Hausdorff_dist]
#align metric.Hausdorff_dist_nonneg Metric.hausdorffDist_nonneg
+-/
+#print Metric.hausdorffEdist_ne_top_of_nonempty_of_bounded /-
/-- If two sets are nonempty and bounded in a metric space, they are at finite Hausdorff
edistance. -/
theorem hausdorffEdist_ne_top_of_nonempty_of_bounded (hs : s.Nonempty) (ht : t.Nonempty)
@@ -813,11 +938,14 @@ theorem hausdorffEdist_ne_top_of_nonempty_of_bounded (hs : s.Nonempty) (ht : t.N
exact le_trans dist_nonneg this
exact ne_top_of_le_ne_top ENNReal.ofReal_ne_top this
#align metric.Hausdorff_edist_ne_top_of_nonempty_of_bounded Metric.hausdorffEdist_ne_top_of_nonempty_of_bounded
+-/
+#print Metric.hausdorffDist_self_zero /-
/-- The Hausdorff distance between a set and itself is zero -/
@[simp]
theorem hausdorffDist_self_zero : hausdorffDist s s = 0 := by simp [Hausdorff_dist]
#align metric.Hausdorff_dist_self_zero Metric.hausdorffDist_self_zero
+-/
#print Metric.hausdorffDist_comm /-
/-- The Hausdorff distance from `s` to `t` and from `t` to `s` coincide -/
@@ -826,6 +954,7 @@ theorem hausdorffDist_comm : hausdorffDist s t = hausdorffDist t s := by
#align metric.Hausdorff_dist_comm Metric.hausdorffDist_comm
-/
+#print Metric.hausdorffDist_empty /-
/-- The Hausdorff distance to the empty set vanishes (if you want to have the more reasonable
value ∞ instead, use `Hausdorff_edist`, which takes values in ℝ≥0∞) -/
@[simp]
@@ -835,13 +964,17 @@ theorem hausdorffDist_empty : hausdorffDist s ∅ = 0 :=
· simp [h]
· simp [Hausdorff_dist, Hausdorff_edist_empty h]
#align metric.Hausdorff_dist_empty Metric.hausdorffDist_empty
+-/
+#print Metric.hausdorffDist_empty' /-
/-- The Hausdorff distance to the empty set vanishes (if you want to have the more reasonable
value ∞ instead, use `Hausdorff_edist`, which takes values in ℝ≥0∞) -/
@[simp]
theorem hausdorffDist_empty' : hausdorffDist ∅ s = 0 := by simp [Hausdorff_dist_comm]
#align metric.Hausdorff_dist_empty' Metric.hausdorffDist_empty'
+-/
+#print Metric.hausdorffDist_le_of_infDist /-
/-- Bounding the Hausdorff distance by bounding the distance of any point
in each set to the other set -/
theorem hausdorffDist_le_of_infDist {r : ℝ} (hr : 0 ≤ r) (H1 : ∀ x ∈ s, infDist x t ≤ r)
@@ -867,7 +1000,9 @@ theorem hausdorffDist_le_of_infDist {r : ℝ} (hr : 0 ≤ r) (H1 : ∀ x ∈ s,
rwa [Hausdorff_dist, ← ENNReal.toReal_ofReal hr,
ENNReal.toReal_le_toReal h1 ENNReal.ofReal_ne_top]
#align metric.Hausdorff_dist_le_of_inf_dist Metric.hausdorffDist_le_of_infDist
+-/
+#print Metric.hausdorffDist_le_of_mem_dist /-
/-- Bounding the Hausdorff distance by exhibiting, for any point in each set,
another point in the other set at controlled distance -/
theorem hausdorffDist_le_of_mem_dist {r : ℝ} (hr : 0 ≤ r) (H1 : ∀ x ∈ s, ∃ y ∈ t, dist x y ≤ r)
@@ -881,7 +1016,9 @@ theorem hausdorffDist_le_of_mem_dist {r : ℝ} (hr : 0 ≤ r) (H1 : ∀ x ∈ s,
rcases H2 x xt with ⟨y, ys, hy⟩
exact le_trans (inf_dist_le_dist_of_mem ys) hy
#align metric.Hausdorff_dist_le_of_mem_dist Metric.hausdorffDist_le_of_mem_dist
+-/
+#print Metric.hausdorffDist_le_diam /-
/-- The Hausdorff distance is controlled by the diameter of the union -/
theorem hausdorffDist_le_diam (hs : s.Nonempty) (bs : Bounded s) (ht : t.Nonempty)
(bt : Bounded t) : hausdorffDist s t ≤ diam (s ∪ t) :=
@@ -900,7 +1037,9 @@ theorem hausdorffDist_le_diam (hs : s.Nonempty) (bs : Bounded s) (ht : t.Nonempt
dist_le_diam_of_mem (bounded_union.2 ⟨bs, bt⟩) (subset_union_right _ _ hz)
(subset_union_left _ _ xs)⟩
#align metric.Hausdorff_dist_le_diam Metric.hausdorffDist_le_diam
+-/
+#print Metric.infDist_le_hausdorffDist_of_mem /-
/-- The distance to a set is controlled by the Hausdorff distance -/
theorem infDist_le_hausdorffDist_of_mem (hx : x ∈ s) (fin : hausdorffEdist s t ≠ ⊤) :
infDist x t ≤ hausdorffDist s t :=
@@ -909,7 +1048,9 @@ theorem infDist_le_hausdorffDist_of_mem (hx : x ∈ s) (fin : hausdorffEdist s t
rw [Hausdorff_dist, inf_dist, ENNReal.toReal_le_toReal (inf_edist_ne_top ht) Fin]
exact inf_edist_le_Hausdorff_edist_of_mem hx
#align metric.inf_dist_le_Hausdorff_dist_of_mem Metric.infDist_le_hausdorffDist_of_mem
+-/
+#print Metric.exists_dist_lt_of_hausdorffDist_lt /-
/-- If the Hausdorff distance is `<r`, then any point in one of the sets is at distance
`<r` of a point in the other set -/
theorem exists_dist_lt_of_hausdorffDist_lt {r : ℝ} (h : x ∈ s) (H : hausdorffDist s t < r)
@@ -923,7 +1064,9 @@ theorem exists_dist_lt_of_hausdorffDist_lt {r : ℝ} (h : x ∈ s) (H : hausdorf
rw [edist_dist, ENNReal.ofReal_lt_ofReal_iff r0] at yr
exact ⟨y, hy, yr⟩
#align metric.exists_dist_lt_of_Hausdorff_dist_lt Metric.exists_dist_lt_of_hausdorffDist_lt
+-/
+#print Metric.exists_dist_lt_of_hausdorffDist_lt' /-
/-- If the Hausdorff distance is `<r`, then any point in one of the sets is at distance
`<r` of a point in the other set -/
theorem exists_dist_lt_of_hausdorffDist_lt' {r : ℝ} (h : y ∈ t) (H : hausdorffDist s t < r)
@@ -933,7 +1076,9 @@ theorem exists_dist_lt_of_hausdorffDist_lt' {r : ℝ} (h : y ∈ t) (H : hausdor
rw [Hausdorff_edist_comm] at fin
simpa [dist_comm] using exists_dist_lt_of_Hausdorff_dist_lt h H Fin
#align metric.exists_dist_lt_of_Hausdorff_dist_lt' Metric.exists_dist_lt_of_hausdorffDist_lt'
+-/
+#print Metric.infDist_le_infDist_add_hausdorffDist /-
/-- The infimum distance to `s` and `t` are the same, up to the Hausdorff distance
between `s` and `t` -/
theorem infDist_le_infDist_add_hausdorffDist (fin : hausdorffEdist s t ≠ ⊤) :
@@ -946,6 +1091,7 @@ theorem infDist_le_infDist_add_hausdorffDist (fin : hausdorffEdist s t ≠ ⊤)
· exact inf_edist_le_inf_edist_add_Hausdorff_edist
· exact ENNReal.add_ne_top.2 ⟨inf_edist_ne_top hs, Fin⟩
#align metric.inf_dist_le_inf_dist_add_Hausdorff_dist Metric.infDist_le_infDist_add_hausdorffDist
+-/
#print Metric.hausdorffDist_image /-
/-- The Hausdorff distance is invariant under isometries -/
@@ -955,6 +1101,7 @@ theorem hausdorffDist_image (h : Isometry Φ) :
#align metric.Hausdorff_dist_image Metric.hausdorffDist_image
-/
+#print Metric.hausdorffDist_triangle /-
/-- The Hausdorff distance satisfies the triangular inequality -/
theorem hausdorffDist_triangle (fin : hausdorffEdist s t ≠ ⊤) :
hausdorffDist s u ≤ hausdorffDist s t + hausdorffDist t u :=
@@ -975,7 +1122,9 @@ theorem hausdorffDist_triangle (fin : hausdorffEdist s t ≠ ⊤) :
· exact Hausdorff_edist_triangle
· simp [ENNReal.add_eq_top, lt_top_iff_ne_top.1 Dtu, Fin]
#align metric.Hausdorff_dist_triangle Metric.hausdorffDist_triangle
+-/
+#print Metric.hausdorffDist_triangle' /-
/-- The Hausdorff distance satisfies the triangular inequality -/
theorem hausdorffDist_triangle' (fin : hausdorffEdist t u ≠ ⊤) :
hausdorffDist s u ≤ hausdorffDist s t + hausdorffDist t u :=
@@ -985,11 +1134,14 @@ theorem hausdorffDist_triangle' (fin : hausdorffEdist t u ≠ ⊤) :
Hausdorff_dist_triangle Fin
simpa [add_comm, Hausdorff_dist_comm] using I
#align metric.Hausdorff_dist_triangle' Metric.hausdorffDist_triangle'
+-/
+#print Metric.hausdorffDist_self_closure /-
/-- The Hausdorff distance between a set and its closure vanish -/
@[simp]
theorem hausdorffDist_self_closure : hausdorffDist s (closure s) = 0 := by simp [Hausdorff_dist]
#align metric.Hausdorff_dist_self_closure Metric.hausdorffDist_self_closure
+-/
#print Metric.hausdorffDist_closure₁ /-
/-- Replacing a set by its closure does not change the Hausdorff distance. -/
@@ -1015,19 +1167,23 @@ theorem hausdorffDist_closure : hausdorffDist (closure s) (closure t) = hausdorf
#align metric.Hausdorff_dist_closure Metric.hausdorffDist_closure
-/
+#print Metric.hausdorffDist_zero_iff_closure_eq_closure /-
/-- Two sets are at zero Hausdorff distance if and only if they have the same closures -/
theorem hausdorffDist_zero_iff_closure_eq_closure (fin : hausdorffEdist s t ≠ ⊤) :
hausdorffDist s t = 0 ↔ closure s = closure t := by
simp [Hausdorff_edist_zero_iff_closure_eq_closure.symm, Hausdorff_dist,
ENNReal.toReal_eq_zero_iff, Fin]
#align metric.Hausdorff_dist_zero_iff_closure_eq_closure Metric.hausdorffDist_zero_iff_closure_eq_closure
+-/
+#print IsClosed.hausdorffDist_zero_iff_eq /-
/-- Two closed sets are at zero Hausdorff distance if and only if they coincide -/
theorem IsClosed.hausdorffDist_zero_iff_eq (hs : IsClosed s) (ht : IsClosed t)
(fin : hausdorffEdist s t ≠ ⊤) : hausdorffDist s t = 0 ↔ s = t := by
simp [← Hausdorff_edist_zero_iff_eq_of_closed hs ht, Hausdorff_dist, ENNReal.toReal_eq_zero_iff,
Fin]
#align is_closed.Hausdorff_dist_zero_iff_eq IsClosed.hausdorffDist_zero_iff_eq
+-/
end
@@ -1046,15 +1202,19 @@ def thickening (δ : ℝ) (E : Set α) : Set α :=
#align metric.thickening Metric.thickening
-/
+#print Metric.mem_thickening_iff_infEdist_lt /-
theorem mem_thickening_iff_infEdist_lt : x ∈ thickening δ s ↔ infEdist x s < ENNReal.ofReal δ :=
Iff.rfl
#align metric.mem_thickening_iff_inf_edist_lt Metric.mem_thickening_iff_infEdist_lt
+-/
+#print Metric.thickening_eq_preimage_infEdist /-
/-- The (open) thickening equals the preimage of an open interval under `inf_edist`. -/
theorem thickening_eq_preimage_infEdist (δ : ℝ) (E : Set α) :
thickening δ E = (fun x => infEdist x E) ⁻¹' Iio (ENNReal.ofReal δ) :=
rfl
#align metric.thickening_eq_preimage_inf_edist Metric.thickening_eq_preimage_infEdist
+-/
#print Metric.isOpen_thickening /-
/-- The (open) thickening is an open set. -/
@@ -1071,16 +1231,20 @@ theorem thickening_empty (δ : ℝ) : thickening δ (∅ : Set α) = ∅ := by
#align metric.thickening_empty Metric.thickening_empty
-/
+#print Metric.thickening_of_nonpos /-
theorem thickening_of_nonpos (hδ : δ ≤ 0) (s : Set α) : thickening δ s = ∅ :=
eq_empty_of_forall_not_mem fun x => ((ENNReal.ofReal_of_nonpos hδ).trans_le bot_le).not_lt
#align metric.thickening_of_nonpos Metric.thickening_of_nonpos
+-/
+#print Metric.thickening_mono /-
/-- The (open) thickening `thickening δ E` of a fixed subset `E` is an increasing function of the
thickening radius `δ`. -/
theorem thickening_mono {δ₁ δ₂ : ℝ} (hle : δ₁ ≤ δ₂) (E : Set α) :
thickening δ₁ E ⊆ thickening δ₂ E :=
preimage_mono (Iio_subset_Iio (ENNReal.ofReal_le_ofReal hle))
#align metric.thickening_mono Metric.thickening_mono
+-/
#print Metric.thickening_subset_of_subset /-
/-- The (open) thickening `thickening δ E` with a fixed thickening radius `δ` is
@@ -1090,10 +1254,12 @@ theorem thickening_subset_of_subset (δ : ℝ) {E₁ E₂ : Set α} (h : E₁
#align metric.thickening_subset_of_subset Metric.thickening_subset_of_subset
-/
+#print Metric.mem_thickening_iff_exists_edist_lt /-
theorem mem_thickening_iff_exists_edist_lt {δ : ℝ} (E : Set α) (x : α) :
x ∈ thickening δ E ↔ ∃ z ∈ E, edist x z < ENNReal.ofReal δ :=
infEdist_lt_iff
#align metric.mem_thickening_iff_exists_edist_lt Metric.mem_thickening_iff_exists_edist_lt
+-/
#print Metric.frontier_thickening_subset /-
/-- The frontier of the (open) thickening of a set is contained in an `inf_edist` level set. -/
@@ -1103,6 +1269,7 @@ theorem frontier_thickening_subset (E : Set α) {δ : ℝ} :
#align metric.frontier_thickening_subset Metric.frontier_thickening_subset
-/
+#print Metric.frontier_thickening_disjoint /-
theorem frontier_thickening_disjoint (A : Set α) :
Pairwise (Disjoint on fun r : ℝ => frontier (thickening r A)) :=
by
@@ -1115,9 +1282,11 @@ theorem frontier_thickening_disjoint (A : Set α) :
apply_fun ENNReal.toReal at h
rwa [ENNReal.toReal_ofReal h₁, ENNReal.toReal_ofReal (h₁.trans hr.le)] at h
#align metric.frontier_thickening_disjoint Metric.frontier_thickening_disjoint
+-/
variable {X : Type u} [PseudoMetricSpace X]
+#print Metric.mem_thickening_iff /-
/-- A point in a metric space belongs to the (open) `δ`-thickening of a subset `E` if and only if
it is at distance less than `δ` from some point of `E`. -/
theorem mem_thickening_iff {E : Set X} {x : X} : x ∈ thickening δ E ↔ ∃ z ∈ E, dist x z < δ :=
@@ -1131,6 +1300,7 @@ theorem mem_thickening_iff {E : Set X} {x : X} : x ∈ thickening δ E ↔ ∃ z
rwa [ENNReal.ofReal_toReal d_lt_top.ne] at key
simp_rw [mem_thickening_iff_exists_edist_lt, key_iff]
#align metric.mem_thickening_iff Metric.mem_thickening_iff
+-/
#print Metric.thickening_singleton /-
@[simp]
@@ -1185,16 +1355,21 @@ def cthickening (δ : ℝ) (E : Set α) : Set α :=
#align metric.cthickening Metric.cthickening
-/
+#print Metric.mem_cthickening_iff /-
@[simp]
theorem mem_cthickening_iff : x ∈ cthickening δ s ↔ infEdist x s ≤ ENNReal.ofReal δ :=
Iff.rfl
#align metric.mem_cthickening_iff Metric.mem_cthickening_iff
+-/
+#print Metric.mem_cthickening_of_edist_le /-
theorem mem_cthickening_of_edist_le (x y : α) (δ : ℝ) (E : Set α) (h : y ∈ E)
(h' : edist x y ≤ ENNReal.ofReal δ) : x ∈ cthickening δ E :=
(infEdist_le_edist_of_mem h).trans h'
#align metric.mem_cthickening_of_edist_le Metric.mem_cthickening_of_edist_le
+-/
+#print Metric.mem_cthickening_of_dist_le /-
theorem mem_cthickening_of_dist_le {α : Type _} [PseudoMetricSpace α] (x y : α) (δ : ℝ) (E : Set α)
(h : y ∈ E) (h' : dist x y ≤ δ) : x ∈ cthickening δ E :=
by
@@ -1202,11 +1377,14 @@ theorem mem_cthickening_of_dist_le {α : Type _} [PseudoMetricSpace α] (x y :
rw [edist_dist]
exact ENNReal.ofReal_le_ofReal h'
#align metric.mem_cthickening_of_dist_le Metric.mem_cthickening_of_dist_le
+-/
+#print Metric.cthickening_eq_preimage_infEdist /-
theorem cthickening_eq_preimage_infEdist (δ : ℝ) (E : Set α) :
cthickening δ E = (fun x => infEdist x E) ⁻¹' Iic (ENNReal.ofReal δ) :=
rfl
#align metric.cthickening_eq_preimage_inf_edist Metric.cthickening_eq_preimage_infEdist
+-/
#print Metric.isClosed_cthickening /-
/-- The closed thickening is a closed set. -/
@@ -1223,32 +1401,42 @@ theorem cthickening_empty (δ : ℝ) : cthickening δ (∅ : Set α) = ∅ := by
#align metric.cthickening_empty Metric.cthickening_empty
-/
+#print Metric.cthickening_of_nonpos /-
theorem cthickening_of_nonpos {δ : ℝ} (hδ : δ ≤ 0) (E : Set α) : cthickening δ E = closure E := by
ext x; simp [mem_closure_iff_inf_edist_zero, cthickening, ENNReal.ofReal_eq_zero.2 hδ]
#align metric.cthickening_of_nonpos Metric.cthickening_of_nonpos
+-/
+#print Metric.cthickening_zero /-
/-- The closed thickening with radius zero is the closure of the set. -/
@[simp]
theorem cthickening_zero (E : Set α) : cthickening 0 E = closure E :=
cthickening_of_nonpos le_rfl E
#align metric.cthickening_zero Metric.cthickening_zero
+-/
+#print Metric.cthickening_max_zero /-
theorem cthickening_max_zero (δ : ℝ) (E : Set α) : cthickening (max 0 δ) E = cthickening δ E := by
cases le_total δ 0 <;> simp [cthickening_of_nonpos, *]
#align metric.cthickening_max_zero Metric.cthickening_max_zero
+-/
+#print Metric.cthickening_mono /-
/-- The closed thickening `cthickening δ E` of a fixed subset `E` is an increasing function of
the thickening radius `δ`. -/
theorem cthickening_mono {δ₁ δ₂ : ℝ} (hle : δ₁ ≤ δ₂) (E : Set α) :
cthickening δ₁ E ⊆ cthickening δ₂ E :=
preimage_mono (Iic_subset_Iic.mpr (ENNReal.ofReal_le_ofReal hle))
#align metric.cthickening_mono Metric.cthickening_mono
+-/
+#print Metric.cthickening_singleton /-
@[simp]
theorem cthickening_singleton {α : Type _} [PseudoMetricSpace α] (x : α) {δ : ℝ} (hδ : 0 ≤ δ) :
cthickening δ ({x} : Set α) = closedBall x δ := by ext y;
simp [cthickening, edist_dist, ENNReal.ofReal_le_ofReal_iff hδ]
#align metric.cthickening_singleton Metric.cthickening_singleton
+-/
#print Metric.closedBall_subset_cthickening_singleton /-
theorem closedBall_subset_cthickening_singleton {α : Type _} [PseudoMetricSpace α] (x : α) (δ : ℝ) :
@@ -1268,17 +1456,21 @@ theorem cthickening_subset_of_subset (δ : ℝ) {E₁ E₂ : Set α} (h : E₁
#align metric.cthickening_subset_of_subset Metric.cthickening_subset_of_subset
-/
+#print Metric.cthickening_subset_thickening /-
theorem cthickening_subset_thickening {δ₁ : ℝ≥0} {δ₂ : ℝ} (hlt : (δ₁ : ℝ) < δ₂) (E : Set α) :
cthickening δ₁ E ⊆ thickening δ₂ E := fun _ hx =>
lt_of_le_of_lt hx ((ENNReal.ofReal_lt_ofReal_iff (lt_of_le_of_lt δ₁.Prop hlt)).mpr hlt)
#align metric.cthickening_subset_thickening Metric.cthickening_subset_thickening
+-/
+#print Metric.cthickening_subset_thickening' /-
/-- The closed thickening `cthickening δ₁ E` is contained in the open thickening `thickening δ₂ E`
if the radius of the latter is positive and larger. -/
theorem cthickening_subset_thickening' {δ₁ δ₂ : ℝ} (δ₂_pos : 0 < δ₂) (hlt : δ₁ < δ₂) (E : Set α) :
cthickening δ₁ E ⊆ thickening δ₂ E := fun _ hx =>
lt_of_le_of_lt hx ((ENNReal.ofReal_lt_ofReal_iff δ₂_pos).mpr hlt)
#align metric.cthickening_subset_thickening' Metric.cthickening_subset_thickening'
+-/
#print Metric.thickening_subset_cthickening /-
/-- The open thickening `thickening δ E` is contained in the closed thickening `cthickening δ E`
@@ -1288,10 +1480,12 @@ theorem thickening_subset_cthickening (δ : ℝ) (E : Set α) : thickening δ E
#align metric.thickening_subset_cthickening Metric.thickening_subset_cthickening
-/
+#print Metric.thickening_subset_cthickening_of_le /-
theorem thickening_subset_cthickening_of_le {δ₁ δ₂ : ℝ} (hle : δ₁ ≤ δ₂) (E : Set α) :
thickening δ₁ E ⊆ cthickening δ₂ E :=
(thickening_subset_cthickening δ₁ E).trans (cthickening_mono hle E)
#align metric.thickening_subset_cthickening_of_le Metric.thickening_subset_cthickening_of_le
+-/
#print Metric.Bounded.cthickening /-
theorem Bounded.cthickening {α : Type _} [PseudoMetricSpace α] {δ : ℝ} {E : Set α} (h : Bounded E) :
@@ -1327,16 +1521,20 @@ theorem closure_subset_cthickening (δ : ℝ) (E : Set α) : closure E ⊆ cthic
#align metric.closure_subset_cthickening Metric.closure_subset_cthickening
-/
+#print Metric.closure_subset_thickening /-
/-- The (open) thickening of a set contains the closure of the set. -/
theorem closure_subset_thickening {δ : ℝ} (δ_pos : 0 < δ) (E : Set α) :
closure E ⊆ thickening δ E := by rw [← cthickening_zero];
exact cthickening_subset_thickening' δ_pos δ_pos E
#align metric.closure_subset_thickening Metric.closure_subset_thickening
+-/
+#print Metric.self_subset_thickening /-
/-- A set is contained in its own (open) thickening. -/
theorem self_subset_thickening {δ : ℝ} (δ_pos : 0 < δ) (E : Set α) : E ⊆ thickening δ E :=
(@subset_closure _ _ E).trans (closure_subset_thickening δ_pos E)
#align metric.self_subset_thickening Metric.self_subset_thickening
+-/
#print Metric.self_subset_cthickening /-
/-- A set is contained in its own closed thickening. -/
@@ -1345,13 +1543,17 @@ theorem self_subset_cthickening {δ : ℝ} (E : Set α) : E ⊆ cthickening δ E
#align metric.self_subset_cthickening Metric.self_subset_cthickening
-/
+#print Metric.thickening_mem_nhdsSet /-
theorem thickening_mem_nhdsSet (E : Set α) {δ : ℝ} (hδ : 0 < δ) : thickening δ E ∈ 𝓝ˢ E :=
isOpen_thickening.mem_nhdsSet.2 <| self_subset_thickening hδ E
#align metric.thickening_mem_nhds_set Metric.thickening_mem_nhdsSet
+-/
+#print Metric.cthickening_mem_nhdsSet /-
theorem cthickening_mem_nhdsSet (E : Set α) {δ : ℝ} (hδ : 0 < δ) : cthickening δ E ∈ 𝓝ˢ E :=
mem_of_superset (thickening_mem_nhdsSet E hδ) (thickening_subset_cthickening _ _)
#align metric.cthickening_mem_nhds_set Metric.cthickening_mem_nhdsSet
+-/
#print Metric.thickening_union /-
@[simp]
@@ -1369,12 +1571,15 @@ theorem cthickening_union (δ : ℝ) (s t : Set α) :
#align metric.cthickening_union Metric.cthickening_union
-/
+#print Metric.thickening_iUnion /-
@[simp]
theorem thickening_iUnion (δ : ℝ) (f : ι → Set α) :
thickening δ (⋃ i, f i) = ⋃ i, thickening δ (f i) := by
simp_rw [thickening, inf_edist_Union, iInf_lt_iff, set_of_exists]
#align metric.thickening_Union Metric.thickening_iUnion
+-/
+#print Metric.ediam_cthickening_le /-
theorem ediam_cthickening_le (ε : ℝ≥0) : EMetric.diam (cthickening ε s) ≤ EMetric.diam s + 2 * ε :=
by
refine' diam_le fun x hx y hy => ENNReal.le_of_forall_pos_le_add fun δ hδ _ => _
@@ -1396,11 +1601,15 @@ theorem ediam_cthickening_le (ε : ℝ≥0) : EMetric.diam (cthickening ε s)
rw [← add_assoc, ← two_mul, mul_add, ENNReal.mul_div_cancel' two_ne_zero ENNReal.two_ne_top]
abel
#align metric.ediam_cthickening_le Metric.ediam_cthickening_le
+-/
+#print Metric.ediam_thickening_le /-
theorem ediam_thickening_le (ε : ℝ≥0) : EMetric.diam (thickening ε s) ≤ EMetric.diam s + 2 * ε :=
(EMetric.diam_mono <| thickening_subset_cthickening _ _).trans <| ediam_cthickening_le _
#align metric.ediam_thickening_le Metric.ediam_thickening_le
+-/
+#print Metric.diam_cthickening_le /-
theorem diam_cthickening_le {α : Type _} [PseudoMetricSpace α] (s : Set α) (hε : 0 ≤ ε) :
diam (cthickening ε s) ≤ diam s + 2 * ε :=
by
@@ -1416,7 +1625,9 @@ theorem diam_cthickening_le {α : Type _} [PseudoMetricSpace α] (s : Set α) (h
· rw [diam_eq_zero_of_unbounded hs]
positivity
#align metric.diam_cthickening_le Metric.diam_cthickening_le
+-/
+#print Metric.diam_thickening_le /-
theorem diam_thickening_le {α : Type _} [PseudoMetricSpace α] (s : Set α) (hε : 0 ≤ ε) :
diam (thickening ε s) ≤ diam s + 2 * ε :=
by
@@ -1430,6 +1641,7 @@ theorem diam_thickening_le {α : Type _} [PseudoMetricSpace α] (s : Set α) (h
· rw [diam_eq_zero_of_unbounded (mt (bounded.mono <| self_subset_thickening hε _) hs)]
positivity
#align metric.diam_thickening_le Metric.diam_thickening_le
+-/
#print Metric.thickening_closure /-
@[simp]
@@ -1447,6 +1659,7 @@ theorem cthickening_closure : cthickening δ (closure s) = cthickening δ s := b
open ENNReal
+#print Disjoint.exists_thickenings /-
theorem Disjoint.exists_thickenings (hst : Disjoint s t) (hs : IsCompact s) (ht : IsClosed t) :
∃ δ, 0 < δ ∧ Disjoint (thickening δ s) (thickening δ t) :=
by
@@ -1464,7 +1677,9 @@ theorem Disjoint.exists_thickenings (hst : Disjoint s t) (hs : IsCompact s) (ht
_ ≤ ↑(r / 2) + ↑(r / 2) := (add_le_add hzx.le hzy.le)
_ = r := by rw [← ENNReal.coe_add, add_halves]
#align disjoint.exists_thickenings Disjoint.exists_thickenings
+-/
+#print Disjoint.exists_cthickenings /-
theorem Disjoint.exists_cthickenings (hst : Disjoint s t) (hs : IsCompact s) (ht : IsClosed t) :
∃ δ, 0 < δ ∧ Disjoint (cthickening δ s) (cthickening δ t) :=
by
@@ -1472,31 +1687,41 @@ theorem Disjoint.exists_cthickenings (hst : Disjoint s t) (hs : IsCompact s) (ht
refine' ⟨δ / 2, half_pos hδ, h.mono _ _⟩ <;>
exact cthickening_subset_thickening' hδ (half_lt_self hδ) _
#align disjoint.exists_cthickenings Disjoint.exists_cthickenings
+-/
+#print IsCompact.exists_cthickening_subset_open /-
theorem IsCompact.exists_cthickening_subset_open (hs : IsCompact s) (ht : IsOpen t) (hst : s ⊆ t) :
∃ δ, 0 < δ ∧ cthickening δ s ⊆ t :=
(hst.disjoint_compl_right.exists_cthickenings hs ht.isClosed_compl).imp fun δ h =>
⟨h.1, disjoint_compl_right_iff_subset.1 <| h.2.mono_right <| self_subset_cthickening _⟩
#align is_compact.exists_cthickening_subset_open IsCompact.exists_cthickening_subset_open
+-/
+#print IsCompact.exists_thickening_subset_open /-
theorem IsCompact.exists_thickening_subset_open (hs : IsCompact s) (ht : IsOpen t) (hst : s ⊆ t) :
∃ δ, 0 < δ ∧ thickening δ s ⊆ t :=
let ⟨δ, h₀, hδ⟩ := hs.exists_cthickening_subset_open ht hst
⟨δ, h₀, (thickening_subset_cthickening _ _).trans hδ⟩
#align is_compact.exists_thickening_subset_open IsCompact.exists_thickening_subset_open
+-/
+#print Metric.hasBasis_nhdsSet_thickening /-
theorem hasBasis_nhdsSet_thickening {K : Set α} (hK : IsCompact K) :
(𝓝ˢ K).HasBasis (fun δ : ℝ => 0 < δ) fun δ => thickening δ K :=
(hasBasis_nhdsSet K).to_has_basis' (fun U hU => hK.exists_thickening_subset_open hU.1 hU.2)
fun _ => thickening_mem_nhdsSet K
#align metric.has_basis_nhds_set_thickening Metric.hasBasis_nhdsSet_thickening
+-/
+#print Metric.hasBasis_nhdsSet_cthickening /-
theorem hasBasis_nhdsSet_cthickening {K : Set α} (hK : IsCompact K) :
(𝓝ˢ K).HasBasis (fun δ : ℝ => 0 < δ) fun δ => cthickening δ K :=
(hasBasis_nhdsSet K).to_has_basis' (fun U hU => hK.exists_cthickening_subset_open hU.1 hU.2)
fun _ => cthickening_mem_nhdsSet K
#align metric.has_basis_nhds_set_cthickening Metric.hasBasis_nhdsSet_cthickening
+-/
+#print Metric.cthickening_eq_iInter_cthickening' /-
theorem cthickening_eq_iInter_cthickening' {δ : ℝ} (s : Set ℝ) (hsδ : s ⊆ Ioi δ)
(hs : ∀ ε, δ < ε → (s ∩ Ioc δ ε).Nonempty) (E : Set α) :
cthickening δ E = ⋂ ε ∈ s, cthickening ε E :=
@@ -1513,7 +1738,9 @@ theorem cthickening_eq_iInter_cthickening' {δ : ℝ} (s : Set ℝ) (hsδ : s
rw [ENNReal.coe_nnreal_eq η]
exact ENNReal.ofReal_add_le
#align metric.cthickening_eq_Inter_cthickening' Metric.cthickening_eq_iInter_cthickening'
+-/
+#print Metric.cthickening_eq_iInter_cthickening /-
theorem cthickening_eq_iInter_cthickening {δ : ℝ} (E : Set α) :
cthickening δ E = ⋂ (ε : ℝ) (h : δ < ε), cthickening ε E :=
by
@@ -1521,7 +1748,9 @@ theorem cthickening_eq_iInter_cthickening {δ : ℝ} (E : Set α) :
simp_rw [inter_eq_right_iff_subset.mpr Ioc_subset_Ioi_self]
exact fun _ hε => nonempty_Ioc.mpr hε
#align metric.cthickening_eq_Inter_cthickening Metric.cthickening_eq_iInter_cthickening
+-/
+#print Metric.cthickening_eq_iInter_thickening' /-
theorem cthickening_eq_iInter_thickening' {δ : ℝ} (δ_nn : 0 ≤ δ) (s : Set ℝ) (hsδ : s ⊆ Ioi δ)
(hs : ∀ ε, δ < ε → (s ∩ Ioc δ ε).Nonempty) (E : Set α) :
cthickening δ E = ⋂ ε ∈ s, thickening ε E :=
@@ -1533,7 +1762,9 @@ theorem cthickening_eq_iInter_thickening' {δ : ℝ} (δ_nn : 0 ≤ δ) (s : Set
· rw [cthickening_eq_Inter_cthickening' s hsδ hs E]
exact Inter₂_mono fun ε hε => thickening_subset_cthickening ε E
#align metric.cthickening_eq_Inter_thickening' Metric.cthickening_eq_iInter_thickening'
+-/
+#print Metric.cthickening_eq_iInter_thickening /-
theorem cthickening_eq_iInter_thickening {δ : ℝ} (δ_nn : 0 ≤ δ) (E : Set α) :
cthickening δ E = ⋂ (ε : ℝ) (h : δ < ε), thickening ε E :=
by
@@ -1541,12 +1772,16 @@ theorem cthickening_eq_iInter_thickening {δ : ℝ} (δ_nn : 0 ≤ δ) (E : Set
simp_rw [inter_eq_right_iff_subset.mpr Ioc_subset_Ioi_self]
exact fun _ hε => nonempty_Ioc.mpr hε
#align metric.cthickening_eq_Inter_thickening Metric.cthickening_eq_iInter_thickening
+-/
+#print Metric.cthickening_eq_iInter_thickening'' /-
theorem cthickening_eq_iInter_thickening'' (δ : ℝ) (E : Set α) :
cthickening δ E = ⋂ (ε : ℝ) (h : max 0 δ < ε), thickening ε E := by
rw [← cthickening_max_zero, cthickening_eq_Inter_thickening]; exact le_max_left _ _
#align metric.cthickening_eq_Inter_thickening'' Metric.cthickening_eq_iInter_thickening''
+-/
+#print Metric.closure_eq_iInter_cthickening' /-
/-- The closure of a set equals the intersection of its closed thickenings of positive radii
accumulating at zero. -/
theorem closure_eq_iInter_cthickening' (E : Set α) (s : Set ℝ)
@@ -1561,25 +1796,32 @@ theorem closure_eq_iInter_cthickening' (E : Set α) (s : Set ℝ)
· rw [← cthickening_of_nonpos δ_nonpos E]
exact bInter_subset_of_mem hδs
#align metric.closure_eq_Inter_cthickening' Metric.closure_eq_iInter_cthickening'
+-/
+#print Metric.closure_eq_iInter_cthickening /-
/-- The closure of a set equals the intersection of its closed thickenings of positive radii. -/
theorem closure_eq_iInter_cthickening (E : Set α) :
closure E = ⋂ (δ : ℝ) (h : 0 < δ), cthickening δ E := by rw [← cthickening_zero];
exact cthickening_eq_Inter_cthickening E
#align metric.closure_eq_Inter_cthickening Metric.closure_eq_iInter_cthickening
+-/
+#print Metric.closure_eq_iInter_thickening' /-
/-- The closure of a set equals the intersection of its open thickenings of positive radii
accumulating at zero. -/
theorem closure_eq_iInter_thickening' (E : Set α) (s : Set ℝ) (hs₀ : s ⊆ Ioi 0)
(hs : ∀ ε, 0 < ε → (s ∩ Ioc 0 ε).Nonempty) : closure E = ⋂ δ ∈ s, thickening δ E := by
rw [← cthickening_zero]; apply cthickening_eq_Inter_thickening' le_rfl _ hs₀ hs
#align metric.closure_eq_Inter_thickening' Metric.closure_eq_iInter_thickening'
+-/
+#print Metric.closure_eq_iInter_thickening /-
/-- The closure of a set equals the intersection of its (open) thickenings of positive radii. -/
theorem closure_eq_iInter_thickening (E : Set α) :
closure E = ⋂ (δ : ℝ) (h : 0 < δ), thickening δ E := by rw [← cthickening_zero];
exact cthickening_eq_Inter_thickening rfl.ge E
#align metric.closure_eq_Inter_thickening Metric.closure_eq_iInter_thickening
+-/
#print Metric.frontier_cthickening_subset /-
/-- The frontier of the closed thickening of a set is contained in an `inf_edist` level set. -/
@@ -1600,6 +1842,7 @@ theorem closedBall_subset_cthickening {α : Type _} [PseudoMetricSpace α] {x :
#align metric.closed_ball_subset_cthickening Metric.closedBall_subset_cthickening
-/
+#print Metric.cthickening_subset_iUnion_closedBall_of_lt /-
theorem cthickening_subset_iUnion_closedBall_of_lt {α : Type _} [PseudoMetricSpace α] (E : Set α)
{δ δ' : ℝ} (hδ₀ : 0 < δ') (hδδ' : δ < δ') : cthickening δ E ⊆ ⋃ x ∈ E, closedBall x δ' :=
by
@@ -1607,7 +1850,9 @@ theorem cthickening_subset_iUnion_closedBall_of_lt {α : Type _} [PseudoMetricSp
obtain ⟨y, hy₁, hy₂⟩ := mem_thickening_iff.mp hx
exact mem_Union₂.mpr ⟨y, hy₁, hy₂.le⟩
#align metric.cthickening_subset_Union_closed_ball_of_lt Metric.cthickening_subset_iUnion_closedBall_of_lt
+-/
+#print IsCompact.cthickening_eq_biUnion_closedBall /-
/-- The closed thickening of a compact set `E` is the union of the balls `closed_ball x δ` over
`x ∈ E`.
@@ -1626,7 +1871,9 @@ theorem IsCompact.cthickening_eq_biUnion_closedBall {α : Type _} [PseudoMetricS
exact (ENNReal.ofReal_le_ofReal_iff hδ).1 D1
exact mem_bUnion yE D2
#align is_compact.cthickening_eq_bUnion_closed_ball IsCompact.cthickening_eq_biUnion_closedBall
+-/
+#print Metric.cthickening_eq_biUnion_closedBall /-
theorem cthickening_eq_biUnion_closedBall {α : Type _} [PseudoMetricSpace α] [ProperSpace α]
(E : Set α) (hδ : 0 ≤ δ) : cthickening δ E = ⋃ x ∈ closure E, closedBall x δ :=
by
@@ -1642,13 +1889,17 @@ theorem cthickening_eq_biUnion_closedBall {α : Type _} [PseudoMetricSpace α] [
(((congr_arg ENNReal.ofReal hy.symm).le.trans ENNReal.ofReal_toReal_le).trans hx)
exact mem_bUnion yE hy
#align metric.cthickening_eq_bUnion_closed_ball Metric.cthickening_eq_biUnion_closedBall
+-/
+#print IsClosed.cthickening_eq_biUnion_closedBall /-
theorem IsClosed.cthickening_eq_biUnion_closedBall {α : Type _} [PseudoMetricSpace α]
[ProperSpace α] {E : Set α} (hE : IsClosed E) (hδ : 0 ≤ δ) :
cthickening δ E = ⋃ x ∈ E, closedBall x δ := by
rw [cthickening_eq_bUnion_closed_ball E hδ, hE.closure_eq]
#align is_closed.cthickening_eq_bUnion_closed_ball IsClosed.cthickening_eq_biUnion_closedBall
+-/
+#print Metric.infEdist_le_infEdist_cthickening_add /-
/-- For the equality, see `inf_edist_cthickening`. -/
theorem infEdist_le_infEdist_cthickening_add :
infEdist x s ≤ infEdist x (cthickening δ s) + ENNReal.ofReal δ :=
@@ -1661,14 +1912,18 @@ theorem infEdist_le_infEdist_cthickening_add :
((ENNReal.add_lt_add_of_lt_of_le (hy.trans_lt ENNReal.ofReal_lt_top).Ne hxy hy).trans_le
(tsub_add_cancel_of_le <| le_self_add.trans (lt_tsub_iff_left.1 hxy).le).le)
#align metric.inf_edist_le_inf_edist_cthickening_add Metric.infEdist_le_infEdist_cthickening_add
+-/
+#print Metric.infEdist_le_infEdist_thickening_add /-
/-- For the equality, see `inf_edist_thickening`. -/
theorem infEdist_le_infEdist_thickening_add :
infEdist x s ≤ infEdist x (thickening δ s) + ENNReal.ofReal δ :=
infEdist_le_infEdist_cthickening_add.trans <|
add_le_add_right (infEdist_anti <| thickening_subset_cthickening _ _) _
#align metric.inf_edist_le_inf_edist_thickening_add Metric.infEdist_le_infEdist_thickening_add
+-/
+#print Metric.thickening_thickening_subset /-
/-- For the equality, see `thickening_thickening`. -/
@[simp]
theorem thickening_thickening_subset (ε δ : ℝ) (s : Set α) :
@@ -1683,7 +1938,9 @@ theorem thickening_thickening_subset (ε δ : ℝ) (s : Set α) :
exact fun ⟨y, ⟨z, hz, hy⟩, hx⟩ =>
⟨z, hz, (edist_triangle _ _ _).trans_lt <| ENNReal.add_lt_add hx hy⟩
#align metric.thickening_thickening_subset Metric.thickening_thickening_subset
+-/
+#print Metric.thickening_cthickening_subset /-
/-- For the equality, see `thickening_cthickening`. -/
@[simp]
theorem thickening_cthickening_subset (ε : ℝ) (hδ : 0 ≤ δ) (s : Set α) :
@@ -1699,7 +1956,9 @@ theorem thickening_cthickening_subset (ε : ℝ) (hδ : 0 ≤ δ) (s : Set α) :
inf_edist_le_edist_add_inf_edist.trans_lt
(ENNReal.add_lt_add_of_lt_of_le (hy.trans_lt ENNReal.ofReal_lt_top).Ne hxy hy)
#align metric.thickening_cthickening_subset Metric.thickening_cthickening_subset
+-/
+#print Metric.cthickening_thickening_subset /-
/-- For the equality, see `cthickening_thickening`. -/
@[simp]
theorem cthickening_thickening_subset (hε : 0 ≤ ε) (δ : ℝ) (s : Set α) :
@@ -1711,7 +1970,9 @@ theorem cthickening_thickening_subset (hε : 0 ≤ ε) (δ : ℝ) (s : Set α) :
simp_rw [mem_cthickening_iff, ENNReal.ofReal_add hε hδ]
exact fun hx => inf_edist_le_inf_edist_thickening_add.trans (add_le_add_right hx _)
#align metric.cthickening_thickening_subset Metric.cthickening_thickening_subset
+-/
+#print Metric.cthickening_cthickening_subset /-
/-- For the equality, see `cthickening_cthickening`. -/
@[simp]
theorem cthickening_cthickening_subset (hε : 0 ≤ ε) (hδ : 0 ≤ δ) (s : Set α) :
@@ -1721,12 +1982,15 @@ theorem cthickening_cthickening_subset (hε : 0 ≤ ε) (hδ : 0 ≤ δ) (s : Se
simp_rw [mem_cthickening_iff, ENNReal.ofReal_add hε hδ]
exact fun hx => inf_edist_le_inf_edist_cthickening_add.trans (add_le_add_right hx _)
#align metric.cthickening_cthickening_subset Metric.cthickening_cthickening_subset
+-/
+#print Metric.frontier_cthickening_disjoint /-
theorem frontier_cthickening_disjoint (A : Set α) :
Pairwise (Disjoint on fun r : ℝ≥0 => frontier (cthickening r A)) := fun r₁ r₂ hr =>
((disjoint_singleton.2 <| by simpa).Preimage _).mono (frontier_cthickening_subset _)
(frontier_cthickening_subset _)
#align metric.frontier_cthickening_disjoint Metric.frontier_cthickening_disjoint
+-/
end Cthickening
mathlib commit https://github.com/leanprover-community/mathlib/commit/7e5137f579de09a059a5ce98f364a04e221aabf0
@@ -120,7 +120,6 @@ theorem infEdist_le_infEdist_add_edist : infEdist x s ≤ infEdist y s + edist x
(⨅ z ∈ s, edist x z) ≤ ⨅ z ∈ s, edist y z + edist x y :=
iInf₂_mono fun z hz => (edist_triangle _ _ _).trans_eq (add_comm _ _)
_ = (⨅ z ∈ s, edist y z) + edist x y := by simp only [ENNReal.iInf_add]
-
#align emetric.inf_edist_le_inf_edist_add_edist EMetric.infEdist_le_infEdist_add_edist
theorem infEdist_le_edist_add_infEdist : infEdist x s ≤ edist x y + infEdist y s := by
@@ -134,7 +133,6 @@ theorem edist_le_infEdist_add_ediam (hy : y ∈ s) : edist x y ≤ infEdist x s
calc
edist x y ≤ edist x i + edist i y := edist_triangle _ _ _
_ ≤ edist x i + diam s := add_le_add le_rfl (edist_le_diam_of_mem hi hy)
-
#align emetric.edist_le_inf_edist_add_ediam EMetric.edist_le_infEdist_add_ediam
/-- The edist to a set depends continuously on the point -/
@@ -162,7 +160,6 @@ theorem infEdist_closure : infEdist x (closure s) = infEdist x s :=
_ ≤ edist x y + edist y z := (edist_triangle _ _ _)
_ ≤ inf_edist x (closure s) + ε / 2 + ε / 2 := (add_le_add (le_of_lt hy) (le_of_lt dyz))
_ = inf_edist x (closure s) + ↑ε := by rw [add_assoc, ENNReal.add_halves]
-
#align emetric.inf_edist_closure EMetric.infEdist_closure
-/
@@ -207,7 +204,6 @@ theorem disjoint_closedBall_of_lt_infEdist {r : ℝ≥0∞} (h : r < infEdist x
inf_edist x s ≤ edist x y := inf_edist_le_edist_of_mem h'y
_ ≤ r := by rwa [mem_closed_ball, edist_comm] at hy
_ < inf_edist x s := h
-
#align emetric.disjoint_closed_ball_of_lt_inf_edist EMetric.disjoint_closedBall_of_lt_infEdist
#print EMetric.infEdist_image /-
@@ -348,7 +344,6 @@ theorem exists_edist_lt_of_hausdorffEdist_lt {r : ℝ≥0∞} (h : x ∈ s) (H :
calc
infEdist x t ≤ hausdorffEdist s t := infEdist_le_hausdorffEdist_of_mem h
_ < r := H
-
#align emetric.exists_edist_lt_of_Hausdorff_edist_lt EMetric.exists_edist_lt_of_hausdorffEdist_lt
/-- The distance from `x` to `s` or `t` is controlled in terms of the Hausdorff distance
@@ -372,7 +367,6 @@ theorem infEdist_le_infEdist_add_hausdorffEdist :
_ ≤ inf_edist x s + ε / 2 + (Hausdorff_edist s t + ε / 2) := (add_le_add dxy.le dyz.le)
_ = inf_edist x s + Hausdorff_edist s t + ε := by
simp [ENNReal.add_halves, add_comm, add_left_comm]
-
#align emetric.inf_edist_le_inf_edist_add_Hausdorff_edist EMetric.infEdist_le_infEdist_add_hausdorffEdist
#print EMetric.hausdorffEdist_image /-
@@ -409,7 +403,6 @@ theorem hausdorffEdist_triangle : hausdorffEdist s u ≤ hausdorffEdist s t + ha
inf_edist_le_inf_edist_add_Hausdorff_edist
_ ≤ Hausdorff_edist s t + Hausdorff_edist t u :=
add_le_add_right (inf_edist_le_Hausdorff_edist_of_mem xs) _
-
show ∀ x ∈ u, inf_edist x s ≤ Hausdorff_edist s t + Hausdorff_edist t u;
exact fun x xu =>
calc
@@ -418,7 +411,6 @@ theorem hausdorffEdist_triangle : hausdorffEdist s u ≤ hausdorffEdist s t + ha
_ ≤ Hausdorff_edist u t + Hausdorff_edist t s :=
(add_le_add_right (inf_edist_le_Hausdorff_edist_of_mem xu) _)
_ = Hausdorff_edist s t + Hausdorff_edist t u := by simp [Hausdorff_edist_comm, add_comm]
-
#align emetric.Hausdorff_edist_triangle EMetric.hausdorffEdist_triangle
/-- Two sets are at zero Hausdorff edistance if and only if they have the same closure -/
@@ -433,7 +425,6 @@ theorem hausdorffEdist_zero_iff_closure_eq_closure :
Subset.antisymm (closure_minimal h.1 isClosed_closure)
(closure_minimal h.2 isClosed_closure),
fun h => ⟨h ▸ subset_closure, h.symm ▸ subset_closure⟩⟩
-
#align emetric.Hausdorff_edist_zero_iff_closure_eq_closure EMetric.hausdorffEdist_zero_iff_closure_eq_closure
/-- The Hausdorff edistance between a set and its closure vanishes -/
@@ -452,12 +443,10 @@ theorem hausdorffEdist_closure₁ : hausdorffEdist (closure s) t = hausdorffEdis
calc
_ ≤ Hausdorff_edist (closure s) s + Hausdorff_edist s t := Hausdorff_edist_triangle
_ = Hausdorff_edist s t := by simp [Hausdorff_edist_comm]
-
·
calc
_ ≤ Hausdorff_edist s (closure s) + Hausdorff_edist (closure s) t := Hausdorff_edist_triangle
_ = Hausdorff_edist (closure s) t := by simp
-
#align emetric.Hausdorff_edist_closure₁ EMetric.hausdorffEdist_closure₁
-/
@@ -565,7 +554,6 @@ theorem infEdist_ne_top (h : s.Nonempty) : infEdist x s ≠ ⊤ :=
calc
inf_edist x s ≤ edist x y := inf_edist_le_edist_of_mem hy
_ < ⊤ := lt_top_iff_ne_top.2 (edist_ne_top _ _)
-
#align metric.inf_edist_ne_top Metric.infEdist_ne_top
/-- The minimal distance of a point to a set containing it vanishes -/
@@ -624,7 +612,6 @@ theorem disjoint_ball_infDist : Disjoint (ball x (infDist x s)) s :=
calc
dist x y = dist y x := dist_comm _ _
_ < infDist x s := hy
-
#align metric.disjoint_ball_inf_dist Metric.disjoint_ball_infDist
theorem ball_infDist_subset_compl : ball x (infDist x s) ⊆ sᶜ :=
@@ -978,13 +965,11 @@ theorem hausdorffDist_triangle (fin : hausdorffEdist s t ≠ ⊤) :
Hausdorff_dist s u = 0 + 0 := by simp [Hausdorff_dist, h]
_ ≤ Hausdorff_dist s t + Hausdorff_dist t u :=
add_le_add Hausdorff_dist_nonneg Hausdorff_dist_nonneg
-
· have Dtu : Hausdorff_edist t u < ⊤ :=
calc
Hausdorff_edist t u ≤ Hausdorff_edist t s + Hausdorff_edist s u := Hausdorff_edist_triangle
_ = Hausdorff_edist s t + Hausdorff_edist s u := by simp [Hausdorff_edist_comm]
_ < ⊤ := lt_top_iff_ne_top.mpr <| ennreal.add_ne_top.mpr ⟨Fin, h⟩
-
rw [Hausdorff_dist, Hausdorff_dist, Hausdorff_dist, ← ENNReal.toReal_add Fin Dtu.ne,
ENNReal.toReal_le_toReal h]
· exact Hausdorff_edist_triangle
@@ -1180,7 +1165,6 @@ theorem Bounded.thickening {δ : ℝ} {E : Set X} (h : Bounded E) : Bounded (thi
calc
dist y x ≤ dist z x + dist y z := by rw [add_comm]; exact dist_triangle _ _ _
_ ≤ R + δ := add_le_add (hR zE) hz.le
-
#align metric.bounded.thickening Metric.Bounded.thickening
-/
@@ -1479,7 +1463,6 @@ theorem Disjoint.exists_thickenings (hst : Disjoint s t) (hs : IsCompact s) (ht
edist x y ≤ edist z x + edist z y := edist_triangle_left _ _ _
_ ≤ ↑(r / 2) + ↑(r / 2) := (add_le_add hzx.le hzy.le)
_ = r := by rw [← ENNReal.coe_add, add_halves]
-
#align disjoint.exists_thickenings Disjoint.exists_thickenings
theorem Disjoint.exists_cthickenings (hst : Disjoint s t) (hs : IsCompact s) (ht : IsClosed t) :
mathlib commit https://github.com/leanprover-community/mathlib/commit/5f25c089cb34db4db112556f23c50d12da81b297
@@ -175,7 +175,7 @@ theorem mem_closure_iff_infEdist_zero : x ∈ closure s ↔ infEdist x s = 0 :=
/-- Given a closed set `s`, a point belongs to `s` iff its infimum edistance to this set vanishes -/
theorem mem_iff_infEdist_zero_of_closed (h : IsClosed s) : x ∈ s ↔ infEdist x s = 0 :=
by
- convert← mem_closure_iff_inf_edist_zero
+ convert ← mem_closure_iff_inf_edist_zero
exact h.closure_eq
#align emetric.mem_iff_inf_edist_zero_of_closed EMetric.mem_iff_infEdist_zero_of_closed
@@ -1057,7 +1057,7 @@ open Emetric
/-- The (open) `δ`-thickening `thickening δ E` of a subset `E` in a pseudo emetric space consists
of those points that are at distance less than `δ` from some point of `E`. -/
def thickening (δ : ℝ) (E : Set α) : Set α :=
- { x : α | infEdist x E < ENNReal.ofReal δ }
+ {x : α | infEdist x E < ENNReal.ofReal δ}
#align metric.thickening Metric.thickening
-/
@@ -1113,7 +1113,7 @@ theorem mem_thickening_iff_exists_edist_lt {δ : ℝ} (E : Set α) (x : α) :
#print Metric.frontier_thickening_subset /-
/-- The frontier of the (open) thickening of a set is contained in an `inf_edist` level set. -/
theorem frontier_thickening_subset (E : Set α) {δ : ℝ} :
- frontier (thickening δ E) ⊆ { x : α | infEdist x E = ENNReal.ofReal δ } :=
+ frontier (thickening δ E) ⊆ {x : α | infEdist x E = ENNReal.ofReal δ} :=
frontier_lt_subset_eq continuous_infEdist continuous_const
#align metric.frontier_thickening_subset Metric.frontier_thickening_subset
-/
@@ -1127,7 +1127,7 @@ theorem frontier_thickening_disjoint (A : Set α) :
refine'
((disjoint_singleton.2 fun h => hr.ne _).Preimage _).mono (frontier_thickening_subset _)
(frontier_thickening_subset _)
- apply_fun ENNReal.toReal at h
+ apply_fun ENNReal.toReal at h
rwa [ENNReal.toReal_ofReal h₁, ENNReal.toReal_ofReal (h₁.trans hr.le)] at h
#align metric.frontier_thickening_disjoint Metric.frontier_thickening_disjoint
@@ -1197,7 +1197,7 @@ open Emetric
/-- The closed `δ`-thickening `cthickening δ E` of a subset `E` in a pseudo emetric space consists
of those points that are at infimum distance at most `δ` from `E`. -/
def cthickening (δ : ℝ) (E : Set α) : Set α :=
- { x : α | infEdist x E ≤ ENNReal.ofReal δ }
+ {x : α | infEdist x E ≤ ENNReal.ofReal δ}
#align metric.cthickening Metric.cthickening
-/
@@ -1601,7 +1601,7 @@ theorem closure_eq_iInter_thickening (E : Set α) :
#print Metric.frontier_cthickening_subset /-
/-- The frontier of the closed thickening of a set is contained in an `inf_edist` level set. -/
theorem frontier_cthickening_subset (E : Set α) {δ : ℝ} :
- frontier (cthickening δ E) ⊆ { x : α | infEdist x E = ENNReal.ofReal δ } :=
+ frontier (cthickening δ E) ⊆ {x : α | infEdist x E = ENNReal.ofReal δ} :=
frontier_le_subset_eq continuous_infEdist continuous_const
#align metric.frontier_cthickening_subset Metric.frontier_cthickening_subset
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -193,7 +193,7 @@ theorem infEdist_closure_pos_iff_not_mem_closure {x : α} {E : Set α} :
theorem exists_real_pos_lt_infEdist_of_not_mem_closure {x : α} {E : Set α} (h : x ∉ closure E) :
∃ ε : ℝ, 0 < ε ∧ ENNReal.ofReal ε < infEdist x E :=
by
- rw [← inf_edist_pos_iff_not_mem_closure, ENNReal.lt_iff_exists_real_btwn] at h
+ rw [← inf_edist_pos_iff_not_mem_closure, ENNReal.lt_iff_exists_real_btwn] at h
rcases h with ⟨ε, ⟨_, ⟨ε_pos, ε_lt⟩⟩⟩
exact ⟨ε, ⟨ennreal.of_real_pos.mp ε_pos, ε_lt⟩⟩
#align emetric.exists_real_pos_lt_inf_edist_of_not_mem_closure EMetric.exists_real_pos_lt_infEdist_of_not_mem_closure
@@ -205,7 +205,7 @@ theorem disjoint_closedBall_of_lt_infEdist {r : ℝ≥0∞} (h : r < infEdist x
apply lt_irrefl (inf_edist x s)
calc
inf_edist x s ≤ edist x y := inf_edist_le_edist_of_mem h'y
- _ ≤ r := by rwa [mem_closed_ball, edist_comm] at hy
+ _ ≤ r := by rwa [mem_closed_ball, edist_comm] at hy
_ < inf_edist x s := h
#align emetric.disjoint_closed_ball_of_lt_inf_edist EMetric.disjoint_closedBall_of_lt_infEdist
@@ -237,12 +237,12 @@ theorem IsOpen.exists_iUnion_isClosed {U : Set α} (hU : IsOpen U) :
refine' ⟨F, fun n => IsClosed.preimage continuous_inf_edist isClosed_Ici, F_subset, _, _⟩
show Monotone F
· intro m n hmn x hx
- simp only [mem_Ici, mem_preimage] at hx⊢
+ simp only [mem_Ici, mem_preimage] at hx ⊢
apply le_trans (pow_le_pow_of_le_one' a_lt_one.le hmn) hx
show (⋃ n, F n) = U
· refine' subset.antisymm (by simp only [Union_subset_iff, F_subset, forall_const]) fun x hx => _
have : ¬x ∈ Uᶜ := by simpa using hx
- rw [mem_iff_inf_edist_zero_of_closed hU.is_closed_compl] at this
+ rw [mem_iff_inf_edist_zero_of_closed hU.is_closed_compl] at this
have B : 0 < inf_edist x (Uᶜ) := by simpa [pos_iff_ne_zero] using this
have : Filter.Tendsto (fun n => a ^ n) at_top (𝓝 0) :=
ENNReal.tendsto_pow_atTop_nhds_0_of_lt_1 a_lt_one
@@ -503,7 +503,7 @@ theorem empty_or_nonempty_of_hausdorffEdist_ne_top (fin : hausdorffEdist s t ≠
cases' s.eq_empty_or_nonempty with hs hs
· cases' t.eq_empty_or_nonempty with ht ht
· exact Or.inl ⟨hs, ht⟩
- · rw [Hausdorff_edist_comm] at fin
+ · rw [Hausdorff_edist_comm] at fin
exact Or.inr ⟨nonempty_of_Hausdorff_edist_ne_top ht Fin, ht⟩
· exact Or.inr ⟨hs, nonempty_of_Hausdorff_edist_ne_top hs Fin⟩
#align emetric.empty_or_nonempty_of_Hausdorff_edist_ne_top EMetric.empty_or_nonempty_of_hausdorffEdist_ne_top
@@ -727,7 +727,7 @@ theorem infDist_inter_closedBall_of_mem (h : y ∈ s) :
rcases(inf_dist_lt_iff ⟨y, h.1⟩).mp hlt with ⟨z, hzs, hz⟩
cases' le_or_lt (dist z x) (dist y x) with hle hlt
· exact hz.not_le (inf_dist_le_dist_of_mem ⟨hzs, hle⟩)
- · rw [dist_comm z, dist_comm y] at hlt
+ · rw [dist_comm z, dist_comm y] at hlt
exact (hlt.trans hz).not_le (inf_dist_le_dist_of_mem h)
#align metric.inf_dist_inter_closed_ball_of_mem Metric.infDist_inter_closedBall_of_mem
-/
@@ -872,11 +872,11 @@ theorem hausdorffDist_le_of_infDist {r : ℝ} (hr : 0 ≤ r) (H1 : ∀ x ∈ s,
· intro x hx
have I := H1 x hx
rwa [inf_dist, ← ENNReal.toReal_ofReal hr,
- ENNReal.toReal_le_toReal (inf_edist_ne_top ht) ENNReal.ofReal_ne_top] at I
+ ENNReal.toReal_le_toReal (inf_edist_ne_top ht) ENNReal.ofReal_ne_top] at I
· intro x hx
have I := H2 x hx
rwa [inf_dist, ← ENNReal.toReal_ofReal hr,
- ENNReal.toReal_le_toReal (inf_edist_ne_top hs) ENNReal.ofReal_ne_top] at I
+ ENNReal.toReal_le_toReal (inf_edist_ne_top hs) ENNReal.ofReal_ne_top] at I
rwa [Hausdorff_dist, ← ENNReal.toReal_ofReal hr,
ENNReal.toReal_le_toReal h1 ENNReal.ofReal_ne_top]
#align metric.Hausdorff_dist_le_of_inf_dist Metric.hausdorffDist_le_of_infDist
@@ -931,9 +931,9 @@ theorem exists_dist_lt_of_hausdorffDist_lt {r : ℝ} (h : x ∈ s) (H : hausdorf
have r0 : 0 < r := lt_of_le_of_lt Hausdorff_dist_nonneg H
have : Hausdorff_edist s t < ENNReal.ofReal r := by
rwa [Hausdorff_dist, ← ENNReal.toReal_ofReal (le_of_lt r0),
- ENNReal.toReal_lt_toReal Fin ENNReal.ofReal_ne_top] at H
+ ENNReal.toReal_lt_toReal Fin ENNReal.ofReal_ne_top] at H
rcases exists_edist_lt_of_Hausdorff_edist_lt h this with ⟨y, hy, yr⟩
- rw [edist_dist, ENNReal.ofReal_lt_ofReal_iff r0] at yr
+ rw [edist_dist, ENNReal.ofReal_lt_ofReal_iff r0] at yr
exact ⟨y, hy, yr⟩
#align metric.exists_dist_lt_of_Hausdorff_dist_lt Metric.exists_dist_lt_of_hausdorffDist_lt
@@ -942,8 +942,8 @@ theorem exists_dist_lt_of_hausdorffDist_lt {r : ℝ} (h : x ∈ s) (H : hausdorf
theorem exists_dist_lt_of_hausdorffDist_lt' {r : ℝ} (h : y ∈ t) (H : hausdorffDist s t < r)
(fin : hausdorffEdist s t ≠ ⊤) : ∃ x ∈ s, dist x y < r :=
by
- rw [Hausdorff_dist_comm] at H
- rw [Hausdorff_edist_comm] at fin
+ rw [Hausdorff_dist_comm] at H
+ rw [Hausdorff_edist_comm] at fin
simpa [dist_comm] using exists_dist_lt_of_Hausdorff_dist_lt h H Fin
#align metric.exists_dist_lt_of_Hausdorff_dist_lt' Metric.exists_dist_lt_of_hausdorffDist_lt'
@@ -995,7 +995,7 @@ theorem hausdorffDist_triangle (fin : hausdorffEdist s t ≠ ⊤) :
theorem hausdorffDist_triangle' (fin : hausdorffEdist t u ≠ ⊤) :
hausdorffDist s u ≤ hausdorffDist s t + hausdorffDist t u :=
by
- rw [Hausdorff_edist_comm] at fin
+ rw [Hausdorff_edist_comm] at fin
have I : Hausdorff_dist u s ≤ Hausdorff_dist u t + Hausdorff_dist t s :=
Hausdorff_dist_triangle Fin
simpa [add_comm, Hausdorff_dist_comm] using I
@@ -1127,8 +1127,8 @@ theorem frontier_thickening_disjoint (A : Set α) :
refine'
((disjoint_singleton.2 fun h => hr.ne _).Preimage _).mono (frontier_thickening_subset _)
(frontier_thickening_subset _)
- apply_fun ENNReal.toReal at h
- rwa [ENNReal.toReal_ofReal h₁, ENNReal.toReal_ofReal (h₁.trans hr.le)] at h
+ apply_fun ENNReal.toReal at h
+ rwa [ENNReal.toReal_ofReal h₁, ENNReal.toReal_ofReal (h₁.trans hr.le)] at h
#align metric.frontier_thickening_disjoint Metric.frontier_thickening_disjoint
variable {X : Type u} [PseudoMetricSpace X]
@@ -1143,7 +1143,7 @@ theorem mem_thickening_iff {E : Set X} {x : X} : x ∈ thickening δ E ↔ ∃ z
rw [dist_edist]
have d_lt_top : edist x z < ∞ := by simp only [edist_dist, ENNReal.ofReal_lt_top]
have key := @ENNReal.ofReal_lt_ofReal_iff_of_nonneg (edist x z).toReal δ ENNReal.toReal_nonneg
- rwa [ENNReal.ofReal_toReal d_lt_top.ne] at key
+ rwa [ENNReal.ofReal_toReal d_lt_top.ne] at key
simp_rw [mem_thickening_iff_exists_edist_lt, key_iff]
#align metric.mem_thickening_iff Metric.mem_thickening_iff
@@ -1300,7 +1300,7 @@ theorem cthickening_subset_thickening' {δ₁ δ₂ : ℝ} (δ₂_pos : 0 < δ
/-- The open thickening `thickening δ E` is contained in the closed thickening `cthickening δ E`
with the same radius. -/
theorem thickening_subset_cthickening (δ : ℝ) (E : Set α) : thickening δ E ⊆ cthickening δ E := by
- intro x hx; rw [thickening, mem_set_of_eq] at hx; exact hx.le
+ intro x hx; rw [thickening, mem_set_of_eq] at hx ; exact hx.le
#align metric.thickening_subset_cthickening Metric.thickening_subset_cthickening
-/
@@ -1394,12 +1394,12 @@ theorem thickening_iUnion (δ : ℝ) (f : ι → Set α) :
theorem ediam_cthickening_le (ε : ℝ≥0) : EMetric.diam (cthickening ε s) ≤ EMetric.diam s + 2 * ε :=
by
refine' diam_le fun x hx y hy => ENNReal.le_of_forall_pos_le_add fun δ hδ _ => _
- rw [mem_cthickening_iff, ENNReal.ofReal_coe_nnreal] at hx hy
+ rw [mem_cthickening_iff, ENNReal.ofReal_coe_nnreal] at hx hy
have hε : (ε : ℝ≥0∞) < ε + ↑(δ / 2) := ENNReal.coe_lt_coe.2 (lt_add_of_pos_right _ <| half_pos hδ)
- rw [ENNReal.coe_div two_ne_zero, ENNReal.coe_two] at hε
+ rw [ENNReal.coe_div two_ne_zero, ENNReal.coe_two] at hε
replace hx := hx.trans_lt hε
replace hy := hy.trans_lt hε
- rw [inf_edist_lt_iff] at hx hy
+ rw [inf_edist_lt_iff] at hx hy
obtain ⟨x', hx', hxx'⟩ := hx
obtain ⟨y', hy', hyy'⟩ := hy
refine'
@@ -1470,8 +1470,8 @@ theorem Disjoint.exists_thickenings (hst : Disjoint s t) (hs : IsCompact s) (ht
refine' ⟨r / 2, half_pos (NNReal.coe_pos.2 hr), _⟩
rw [disjoint_iff_inf_le]
rintro z ⟨hzs, hzt⟩
- rw [mem_thickening_iff_exists_edist_lt] at hzs hzt
- rw [← NNReal.coe_two, ← NNReal.coe_div, ENNReal.ofReal_coe_nnreal] at hzs hzt
+ rw [mem_thickening_iff_exists_edist_lt] at hzs hzt
+ rw [← NNReal.coe_two, ← NNReal.coe_div, ENNReal.ofReal_coe_nnreal] at hzs hzt
obtain ⟨x, hx, hzx⟩ := hzs
obtain ⟨y, hy, hzy⟩ := hzt
refine' (h x hx y hy).not_le _
@@ -1572,7 +1572,7 @@ theorem closure_eq_iInter_cthickening' (E : Set α) (s : Set ℝ)
by_cases hs₀ : s ⊆ Ioi 0
· rw [← cthickening_zero]; apply cthickening_eq_Inter_cthickening' _ hs₀ hs
obtain ⟨δ, hδs, δ_nonpos⟩ := not_subset.mp hs₀
- rw [Set.mem_Ioi, not_lt] at δ_nonpos
+ rw [Set.mem_Ioi, not_lt] at δ_nonpos
apply subset.antisymm
· exact subset_Inter₂ fun ε _ => closure_subset_cthickening ε E
· rw [← cthickening_of_nonpos δ_nonpos E]
@@ -1639,7 +1639,7 @@ theorem IsCompact.cthickening_eq_biUnion_closedBall {α : Type _} [PseudoMetricS
obtain ⟨y, yE, hy⟩ : ∃ y ∈ E, inf_edist x E = edist x y := hE.exists_inf_edist_eq_edist hne _
have D1 : edist x y ≤ ENNReal.ofReal δ := (le_of_eq hy.symm).trans hx
have D2 : dist x y ≤ δ := by
- rw [edist_dist] at D1
+ rw [edist_dist] at D1
exact (ENNReal.ofReal_le_ofReal_iff hδ).1 D1
exact mem_bUnion yE D2
#align is_compact.cthickening_eq_bUnion_closed_ball IsCompact.cthickening_eq_biUnion_closedBall
@@ -1671,7 +1671,7 @@ theorem infEdist_le_infEdist_cthickening_add :
infEdist x s ≤ infEdist x (cthickening δ s) + ENNReal.ofReal δ :=
by
refine' le_of_forall_lt' fun r h => _
- simp_rw [← lt_tsub_iff_right, inf_edist_lt_iff, mem_cthickening_iff] at h
+ simp_rw [← lt_tsub_iff_right, inf_edist_lt_iff, mem_cthickening_iff] at h
obtain ⟨y, hy, hxy⟩ := h
exact
inf_edist_le_edist_add_inf_edist.trans_lt
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -39,7 +39,7 @@ This files introduces:
noncomputable section
-open Classical NNReal ENNReal Topology Pointwise
+open scoped Classical NNReal ENNReal Topology Pointwise
universe u v w
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -63,23 +63,11 @@ def infEdist (x : α) (s : Set α) : ℝ≥0∞ :=
#align emetric.inf_edist EMetric.infEdist
-/
-/- warning: emetric.inf_edist_empty -> EMetric.infEdist_empty is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α}, Eq.{1} ENNReal (EMetric.infEdist.{u1} α _inst_1 x (EmptyCollection.emptyCollection.{u1} (Set.{u1} α) (Set.hasEmptyc.{u1} α))) (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α}, Eq.{1} ENNReal (EMetric.infEdist.{u1} α _inst_1 x (EmptyCollection.emptyCollection.{u1} (Set.{u1} α) (Set.instEmptyCollectionSet.{u1} α))) (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal)))
-Case conversion may be inaccurate. Consider using '#align emetric.inf_edist_empty EMetric.infEdist_emptyₓ'. -/
@[simp]
theorem infEdist_empty : infEdist x ∅ = ∞ :=
iInf_emptyset
#align emetric.inf_edist_empty EMetric.infEdist_empty
-/- warning: emetric.le_inf_edist -> EMetric.le_infEdist is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {s : Set.{u1} α} {d : ENNReal}, Iff (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) d (EMetric.infEdist.{u1} α _inst_1 x s)) (forall (y : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) -> (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) d (EDist.edist.{u1} α (PseudoEMetricSpace.toHasEdist.{u1} α _inst_1) x y)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {s : Set.{u1} α} {d : ENNReal}, Iff (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) d (EMetric.infEdist.{u1} α _inst_1 x s)) (forall (y : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y s) -> (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) d (EDist.edist.{u1} α (PseudoEMetricSpace.toEDist.{u1} α _inst_1) x y)))
-Case conversion may be inaccurate. Consider using '#align emetric.le_inf_edist EMetric.le_infEdistₓ'. -/
theorem le_infEdist {d} : d ≤ infEdist x s ↔ ∀ y ∈ s, d ≤ edist x y := by
simp only [inf_edist, le_iInf_iff]
#align emetric.le_inf_edist EMetric.le_infEdist
@@ -92,12 +80,6 @@ theorem infEdist_union : infEdist x (s ∪ t) = infEdist x s ⊓ infEdist x t :=
#align emetric.inf_edist_union EMetric.infEdist_union
-/
-/- warning: emetric.inf_edist_Union -> EMetric.infEdist_iUnion is a dubious translation:
-lean 3 declaration is
- forall {ι : Sort.{u2}} {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (f : ι -> (Set.{u1} α)) (x : α), Eq.{1} ENNReal (EMetric.infEdist.{u1} α _inst_1 x (Set.iUnion.{u1, u2} α ι (fun (i : ι) => f i))) (iInf.{0, u2} ENNReal (ConditionallyCompleteLattice.toHasInf.{0} ENNReal (CompleteLattice.toConditionallyCompleteLattice.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) ι (fun (i : ι) => EMetric.infEdist.{u1} α _inst_1 x (f i)))
-but is expected to have type
- forall {ι : Sort.{u1}} {α : Type.{u2}} [_inst_1 : PseudoEMetricSpace.{u2} α] (f : ι -> (Set.{u2} α)) (x : α), Eq.{1} ENNReal (EMetric.infEdist.{u2} α _inst_1 x (Set.iUnion.{u2, u1} α ι (fun (i : ι) => f i))) (iInf.{0, u1} ENNReal (ConditionallyCompleteLattice.toInfSet.{0} ENNReal (ConditionallyCompleteLinearOrder.toConditionallyCompleteLattice.{0} ENNReal (ConditionallyCompleteLinearOrderBot.toConditionallyCompleteLinearOrder.{0} ENNReal (CompleteLinearOrder.toConditionallyCompleteLinearOrderBot.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal)))) ι (fun (i : ι) => EMetric.infEdist.{u2} α _inst_1 x (f i)))
-Case conversion may be inaccurate. Consider using '#align emetric.inf_edist_Union EMetric.infEdist_iUnionₓ'. -/
@[simp]
theorem infEdist_iUnion (f : ι → Set α) (x : α) : infEdist x (⋃ i, f i) = ⨅ i, infEdist x (f i) :=
iInf_iUnion f _
@@ -111,56 +93,26 @@ theorem infEdist_singleton : infEdist x {y} = edist x y :=
#align emetric.inf_edist_singleton EMetric.infEdist_singleton
-/
-/- warning: emetric.inf_edist_le_edist_of_mem -> EMetric.infEdist_le_edist_of_mem is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {y : α} {s : Set.{u1} α}, (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) -> (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.infEdist.{u1} α _inst_1 x s) (EDist.edist.{u1} α (PseudoEMetricSpace.toHasEdist.{u1} α _inst_1) x y))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {y : α} {s : Set.{u1} α}, (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y s) -> (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.infEdist.{u1} α _inst_1 x s) (EDist.edist.{u1} α (PseudoEMetricSpace.toEDist.{u1} α _inst_1) x y))
-Case conversion may be inaccurate. Consider using '#align emetric.inf_edist_le_edist_of_mem EMetric.infEdist_le_edist_of_memₓ'. -/
/-- The edist to a set is bounded above by the edist to any of its points -/
theorem infEdist_le_edist_of_mem (h : y ∈ s) : infEdist x s ≤ edist x y :=
iInf₂_le _ h
#align emetric.inf_edist_le_edist_of_mem EMetric.infEdist_le_edist_of_mem
-/- warning: emetric.inf_edist_zero_of_mem -> EMetric.infEdist_zero_of_mem is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {s : Set.{u1} α}, (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) -> (Eq.{1} ENNReal (EMetric.infEdist.{u1} α _inst_1 x s) (OfNat.ofNat.{0} ENNReal 0 (OfNat.mk.{0} ENNReal 0 (Zero.zero.{0} ENNReal ENNReal.hasZero))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {s : Set.{u1} α}, (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) -> (Eq.{1} ENNReal (EMetric.infEdist.{u1} α _inst_1 x s) (OfNat.ofNat.{0} ENNReal 0 (Zero.toOfNat0.{0} ENNReal instENNRealZero)))
-Case conversion may be inaccurate. Consider using '#align emetric.inf_edist_zero_of_mem EMetric.infEdist_zero_of_memₓ'. -/
/-- If a point `x` belongs to `s`, then its edist to `s` vanishes -/
theorem infEdist_zero_of_mem (h : x ∈ s) : infEdist x s = 0 :=
nonpos_iff_eq_zero.1 <| @edist_self _ _ x ▸ infEdist_le_edist_of_mem h
#align emetric.inf_edist_zero_of_mem EMetric.infEdist_zero_of_mem
-/- warning: emetric.inf_edist_anti -> EMetric.infEdist_anti is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {s : Set.{u1} α} {t : Set.{u1} α}, (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) s t) -> (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.infEdist.{u1} α _inst_1 x t) (EMetric.infEdist.{u1} α _inst_1 x s))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {s : Set.{u1} α} {t : Set.{u1} α}, (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) s t) -> (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.infEdist.{u1} α _inst_1 x t) (EMetric.infEdist.{u1} α _inst_1 x s))
-Case conversion may be inaccurate. Consider using '#align emetric.inf_edist_anti EMetric.infEdist_antiₓ'. -/
/-- The edist is antitone with respect to inclusion. -/
theorem infEdist_anti (h : s ⊆ t) : infEdist x t ≤ infEdist x s :=
iInf_le_iInf_of_subset h
#align emetric.inf_edist_anti EMetric.infEdist_anti
-/- warning: emetric.inf_edist_lt_iff -> EMetric.infEdist_lt_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {s : Set.{u1} α} {r : ENNReal}, Iff (LT.lt.{0} ENNReal (Preorder.toHasLt.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.infEdist.{u1} α _inst_1 x s) r) (Exists.{succ u1} α (fun (y : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) => LT.lt.{0} ENNReal (Preorder.toHasLt.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EDist.edist.{u1} α (PseudoEMetricSpace.toHasEdist.{u1} α _inst_1) x y) r)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {s : Set.{u1} α} {r : ENNReal}, Iff (LT.lt.{0} ENNReal (Preorder.toLT.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.infEdist.{u1} α _inst_1 x s) r) (Exists.{succ u1} α (fun (y : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y s) (LT.lt.{0} ENNReal (Preorder.toLT.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EDist.edist.{u1} α (PseudoEMetricSpace.toEDist.{u1} α _inst_1) x y) r)))
-Case conversion may be inaccurate. Consider using '#align emetric.inf_edist_lt_iff EMetric.infEdist_lt_iffₓ'. -/
/-- The edist to a set is `< r` iff there exists a point in the set at edistance `< r` -/
theorem infEdist_lt_iff {r : ℝ≥0∞} : infEdist x s < r ↔ ∃ y ∈ s, edist x y < r := by
simp_rw [inf_edist, iInf_lt_iff]
#align emetric.inf_edist_lt_iff EMetric.infEdist_lt_iff
-/- warning: emetric.inf_edist_le_inf_edist_add_edist -> EMetric.infEdist_le_infEdist_add_edist is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {y : α} {s : Set.{u1} α}, LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.infEdist.{u1} α _inst_1 x s) (HAdd.hAdd.{0, 0, 0} ENNReal ENNReal ENNReal (instHAdd.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring)))))))) (EMetric.infEdist.{u1} α _inst_1 y s) (EDist.edist.{u1} α (PseudoEMetricSpace.toHasEdist.{u1} α _inst_1) x y))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {y : α} {s : Set.{u1} α}, LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.infEdist.{u1} α _inst_1 x s) (HAdd.hAdd.{0, 0, 0} ENNReal ENNReal ENNReal (instHAdd.{0} ENNReal (Distrib.toAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal)))))))) (EMetric.infEdist.{u1} α _inst_1 y s) (EDist.edist.{u1} α (PseudoEMetricSpace.toEDist.{u1} α _inst_1) x y))
-Case conversion may be inaccurate. Consider using '#align emetric.inf_edist_le_inf_edist_add_edist EMetric.infEdist_le_infEdist_add_edistₓ'. -/
/-- The edist of `x` to `s` is bounded by the sum of the edist of `y` to `s` and
the edist from `x` to `y` -/
theorem infEdist_le_infEdist_add_edist : infEdist x s ≤ infEdist y s + edist x y :=
@@ -171,22 +123,10 @@ theorem infEdist_le_infEdist_add_edist : infEdist x s ≤ infEdist y s + edist x
#align emetric.inf_edist_le_inf_edist_add_edist EMetric.infEdist_le_infEdist_add_edist
-/- warning: emetric.inf_edist_le_edist_add_inf_edist -> EMetric.infEdist_le_edist_add_infEdist is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {y : α} {s : Set.{u1} α}, LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.infEdist.{u1} α _inst_1 x s) (HAdd.hAdd.{0, 0, 0} ENNReal ENNReal ENNReal (instHAdd.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring)))))))) (EDist.edist.{u1} α (PseudoEMetricSpace.toHasEdist.{u1} α _inst_1) x y) (EMetric.infEdist.{u1} α _inst_1 y s))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {y : α} {s : Set.{u1} α}, LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.infEdist.{u1} α _inst_1 x s) (HAdd.hAdd.{0, 0, 0} ENNReal ENNReal ENNReal (instHAdd.{0} ENNReal (Distrib.toAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal)))))))) (EDist.edist.{u1} α (PseudoEMetricSpace.toEDist.{u1} α _inst_1) x y) (EMetric.infEdist.{u1} α _inst_1 y s))
-Case conversion may be inaccurate. Consider using '#align emetric.inf_edist_le_edist_add_inf_edist EMetric.infEdist_le_edist_add_infEdistₓ'. -/
theorem infEdist_le_edist_add_infEdist : infEdist x s ≤ edist x y + infEdist y s := by
rw [add_comm]; exact inf_edist_le_inf_edist_add_edist
#align emetric.inf_edist_le_edist_add_inf_edist EMetric.infEdist_le_edist_add_infEdist
-/- warning: emetric.edist_le_inf_edist_add_ediam -> EMetric.edist_le_infEdist_add_ediam is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {y : α} {s : Set.{u1} α}, (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) -> (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EDist.edist.{u1} α (PseudoEMetricSpace.toHasEdist.{u1} α _inst_1) x y) (HAdd.hAdd.{0, 0, 0} ENNReal ENNReal ENNReal (instHAdd.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring)))))))) (EMetric.infEdist.{u1} α _inst_1 x s) (EMetric.diam.{u1} α _inst_1 s)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {y : α} {s : Set.{u1} α}, (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y s) -> (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EDist.edist.{u1} α (PseudoEMetricSpace.toEDist.{u1} α _inst_1) x y) (HAdd.hAdd.{0, 0, 0} ENNReal ENNReal ENNReal (instHAdd.{0} ENNReal (Distrib.toAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal)))))))) (EMetric.infEdist.{u1} α _inst_1 x s) (EMetric.diam.{u1} α _inst_1 s)))
-Case conversion may be inaccurate. Consider using '#align emetric.edist_le_inf_edist_add_ediam EMetric.edist_le_infEdist_add_ediamₓ'. -/
theorem edist_le_infEdist_add_ediam (hy : y ∈ s) : edist x y ≤ infEdist x s + diam s :=
by
simp_rw [inf_edist, ENNReal.iInf_add]
@@ -197,12 +137,6 @@ theorem edist_le_infEdist_add_ediam (hy : y ∈ s) : edist x y ≤ infEdist x s
#align emetric.edist_le_inf_edist_add_ediam EMetric.edist_le_infEdist_add_ediam
-/- warning: emetric.continuous_inf_edist -> EMetric.continuous_infEdist is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α}, Continuous.{u1, 0} α ENNReal (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) ENNReal.topologicalSpace (fun (x : α) => EMetric.infEdist.{u1} α _inst_1 x s)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α}, Continuous.{u1, 0} α ENNReal (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) ENNReal.instTopologicalSpaceENNReal (fun (x : α) => EMetric.infEdist.{u1} α _inst_1 x s)
-Case conversion may be inaccurate. Consider using '#align emetric.continuous_inf_edist EMetric.continuous_infEdistₓ'. -/
/-- The edist to a set depends continuously on the point -/
@[continuity]
theorem continuous_infEdist : Continuous fun x => infEdist x s :=
@@ -232,24 +166,12 @@ theorem infEdist_closure : infEdist x (closure s) = infEdist x s :=
#align emetric.inf_edist_closure EMetric.infEdist_closure
-/
-/- warning: emetric.mem_closure_iff_inf_edist_zero -> EMetric.mem_closure_iff_infEdist_zero is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {s : Set.{u1} α}, Iff (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) s)) (Eq.{1} ENNReal (EMetric.infEdist.{u1} α _inst_1 x s) (OfNat.ofNat.{0} ENNReal 0 (OfNat.mk.{0} ENNReal 0 (Zero.zero.{0} ENNReal ENNReal.hasZero))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {s : Set.{u1} α}, Iff (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) s)) (Eq.{1} ENNReal (EMetric.infEdist.{u1} α _inst_1 x s) (OfNat.ofNat.{0} ENNReal 0 (Zero.toOfNat0.{0} ENNReal instENNRealZero)))
-Case conversion may be inaccurate. Consider using '#align emetric.mem_closure_iff_inf_edist_zero EMetric.mem_closure_iff_infEdist_zeroₓ'. -/
/-- A point belongs to the closure of `s` iff its infimum edistance to this set vanishes -/
theorem mem_closure_iff_infEdist_zero : x ∈ closure s ↔ infEdist x s = 0 :=
⟨fun h => by rw [← inf_edist_closure]; exact inf_edist_zero_of_mem h, fun h =>
EMetric.mem_closure_iff.2 fun ε εpos => infEdist_lt_iff.mp <| by rwa [h]⟩
#align emetric.mem_closure_iff_inf_edist_zero EMetric.mem_closure_iff_infEdist_zero
-/- warning: emetric.mem_iff_inf_edist_zero_of_closed -> EMetric.mem_iff_infEdist_zero_of_closed is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {s : Set.{u1} α}, (IsClosed.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) s) -> (Iff (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) (Eq.{1} ENNReal (EMetric.infEdist.{u1} α _inst_1 x s) (OfNat.ofNat.{0} ENNReal 0 (OfNat.mk.{0} ENNReal 0 (Zero.zero.{0} ENNReal ENNReal.hasZero)))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {s : Set.{u1} α}, (IsClosed.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) s) -> (Iff (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) (Eq.{1} ENNReal (EMetric.infEdist.{u1} α _inst_1 x s) (OfNat.ofNat.{0} ENNReal 0 (Zero.toOfNat0.{0} ENNReal instENNRealZero))))
-Case conversion may be inaccurate. Consider using '#align emetric.mem_iff_inf_edist_zero_of_closed EMetric.mem_iff_infEdist_zero_of_closedₓ'. -/
/-- Given a closed set `s`, a point belongs to `s` iff its infimum edistance to this set vanishes -/
theorem mem_iff_infEdist_zero_of_closed (h : IsClosed s) : x ∈ s ↔ infEdist x s = 0 :=
by
@@ -257,35 +179,17 @@ theorem mem_iff_infEdist_zero_of_closed (h : IsClosed s) : x ∈ s ↔ infEdist
exact h.closure_eq
#align emetric.mem_iff_inf_edist_zero_of_closed EMetric.mem_iff_infEdist_zero_of_closed
-/- warning: emetric.inf_edist_pos_iff_not_mem_closure -> EMetric.infEdist_pos_iff_not_mem_closure is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {E : Set.{u1} α}, Iff (LT.lt.{0} ENNReal (Preorder.toHasLt.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 0 (OfNat.mk.{0} ENNReal 0 (Zero.zero.{0} ENNReal ENNReal.hasZero))) (EMetric.infEdist.{u1} α _inst_1 x E)) (Not (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {E : Set.{u1} α}, Iff (LT.lt.{0} ENNReal (Preorder.toLT.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 0 (Zero.toOfNat0.{0} ENNReal instENNRealZero)) (EMetric.infEdist.{u1} α _inst_1 x E)) (Not (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E)))
-Case conversion may be inaccurate. Consider using '#align emetric.inf_edist_pos_iff_not_mem_closure EMetric.infEdist_pos_iff_not_mem_closureₓ'. -/
/-- The infimum edistance of a point to a set is positive if and only if the point is not in the
closure of the set. -/
theorem infEdist_pos_iff_not_mem_closure {x : α} {E : Set α} : 0 < infEdist x E ↔ x ∉ closure E :=
by rw [mem_closure_iff_inf_edist_zero, pos_iff_ne_zero]
#align emetric.inf_edist_pos_iff_not_mem_closure EMetric.infEdist_pos_iff_not_mem_closure
-/- warning: emetric.inf_edist_closure_pos_iff_not_mem_closure -> EMetric.infEdist_closure_pos_iff_not_mem_closure is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {E : Set.{u1} α}, Iff (LT.lt.{0} ENNReal (Preorder.toHasLt.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 0 (OfNat.mk.{0} ENNReal 0 (Zero.zero.{0} ENNReal ENNReal.hasZero))) (EMetric.infEdist.{u1} α _inst_1 x (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E))) (Not (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {E : Set.{u1} α}, Iff (LT.lt.{0} ENNReal (Preorder.toLT.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 0 (Zero.toOfNat0.{0} ENNReal instENNRealZero)) (EMetric.infEdist.{u1} α _inst_1 x (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E))) (Not (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E)))
-Case conversion may be inaccurate. Consider using '#align emetric.inf_edist_closure_pos_iff_not_mem_closure EMetric.infEdist_closure_pos_iff_not_mem_closureₓ'. -/
theorem infEdist_closure_pos_iff_not_mem_closure {x : α} {E : Set α} :
0 < infEdist x (closure E) ↔ x ∉ closure E := by
rw [inf_edist_closure, inf_edist_pos_iff_not_mem_closure]
#align emetric.inf_edist_closure_pos_iff_not_mem_closure EMetric.infEdist_closure_pos_iff_not_mem_closure
-/- warning: emetric.exists_real_pos_lt_inf_edist_of_not_mem_closure -> EMetric.exists_real_pos_lt_infEdist_of_not_mem_closure is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {E : Set.{u1} α}, (Not (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E))) -> (Exists.{1} Real (fun (ε : Real) => And (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) ε) (LT.lt.{0} ENNReal (Preorder.toHasLt.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (ENNReal.ofReal ε) (EMetric.infEdist.{u1} α _inst_1 x E))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {E : Set.{u1} α}, (Not (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E))) -> (Exists.{1} Real (fun (ε : Real) => And (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) ε) (LT.lt.{0} ENNReal (Preorder.toLT.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (ENNReal.ofReal ε) (EMetric.infEdist.{u1} α _inst_1 x E))))
-Case conversion may be inaccurate. Consider using '#align emetric.exists_real_pos_lt_inf_edist_of_not_mem_closure EMetric.exists_real_pos_lt_infEdist_of_not_mem_closureₓ'. -/
theorem exists_real_pos_lt_infEdist_of_not_mem_closure {x : α} {E : Set α} (h : x ∉ closure E) :
∃ ε : ℝ, 0 < ε ∧ ENNReal.ofReal ε < infEdist x E :=
by
@@ -294,12 +198,6 @@ theorem exists_real_pos_lt_infEdist_of_not_mem_closure {x : α} {E : Set α} (h
exact ⟨ε, ⟨ennreal.of_real_pos.mp ε_pos, ε_lt⟩⟩
#align emetric.exists_real_pos_lt_inf_edist_of_not_mem_closure EMetric.exists_real_pos_lt_infEdist_of_not_mem_closure
-/- warning: emetric.disjoint_closed_ball_of_lt_inf_edist -> EMetric.disjoint_closedBall_of_lt_infEdist is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {s : Set.{u1} α} {r : ENNReal}, (LT.lt.{0} ENNReal (Preorder.toHasLt.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) r (EMetric.infEdist.{u1} α _inst_1 x s)) -> (Disjoint.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} (Set.{u1} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α))) (EMetric.closedBall.{u1} α _inst_1 x r) s)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {s : Set.{u1} α} {r : ENNReal}, (LT.lt.{0} ENNReal (Preorder.toLT.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) r (EMetric.infEdist.{u1} α _inst_1 x s)) -> (Disjoint.{u1} (Set.{u1} α) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) (BoundedOrder.toOrderBot.{u1} (Set.{u1} α) (Preorder.toLE.{u1} (Set.{u1} α) (PartialOrder.toPreorder.{u1} (Set.{u1} α) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))))) (CompleteLattice.toBoundedOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) (EMetric.closedBall.{u1} α _inst_1 x r) s)
-Case conversion may be inaccurate. Consider using '#align emetric.disjoint_closed_ball_of_lt_inf_edist EMetric.disjoint_closedBall_of_lt_infEdistₓ'. -/
theorem disjoint_closedBall_of_lt_infEdist {r : ℝ≥0∞} (h : r < infEdist x s) :
Disjoint (closedBall x r) s := by
rw [disjoint_left]
@@ -319,12 +217,6 @@ theorem infEdist_image (hΦ : Isometry Φ) : infEdist (Φ x) (Φ '' t) = infEdis
#align emetric.inf_edist_image EMetric.infEdist_image
-/
-/- warning: emetric.inf_edist_smul -> EMetric.infEdist_smul is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {M : Type.{u2}} [_inst_3 : SMul.{u2, u1} M α] [_inst_4 : IsometricSMul.{u2, u1} M α _inst_1 _inst_3] (c : M) (x : α) (s : Set.{u1} α), Eq.{1} ENNReal (EMetric.infEdist.{u1} α _inst_1 (SMul.smul.{u2, u1} M α _inst_3 c x) (SMul.smul.{u2, u1} M (Set.{u1} α) (Set.smulSet.{u2, u1} M α _inst_3) c s)) (EMetric.infEdist.{u1} α _inst_1 x s)
-but is expected to have type
- forall {α : Type.{u2}} [_inst_1 : PseudoEMetricSpace.{u2} α] {M : Type.{u1}} [_inst_3 : SMul.{u1, u2} M α] [_inst_4 : IsometricSMul.{u1, u2} M α _inst_1 _inst_3] (c : M) (x : α) (s : Set.{u2} α), Eq.{1} ENNReal (EMetric.infEdist.{u2} α _inst_1 (HSMul.hSMul.{u1, u2, u2} M α α (instHSMul.{u1, u2} M α _inst_3) c x) (HSMul.hSMul.{u1, u2, u2} M (Set.{u2} α) (Set.{u2} α) (instHSMul.{u1, u2} M (Set.{u2} α) (Set.smulSet.{u1, u2} M α _inst_3)) c s)) (EMetric.infEdist.{u2} α _inst_1 x s)
-Case conversion may be inaccurate. Consider using '#align emetric.inf_edist_smul EMetric.infEdist_smulₓ'. -/
@[simp, to_additive]
theorem infEdist_smul {M} [SMul M α] [IsometricSMul M α] (c : M) (x : α) (s : Set α) :
infEdist (c • x) (c • s) = infEdist x s :=
@@ -332,12 +224,6 @@ theorem infEdist_smul {M} [SMul M α] [IsometricSMul M α] (c : M) (x : α) (s :
#align emetric.inf_edist_smul EMetric.infEdist_smul
#align emetric.inf_edist_vadd EMetric.infEdist_vadd
-/- warning: is_open.exists_Union_is_closed -> IsOpen.exists_iUnion_isClosed is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {U : Set.{u1} α}, (IsOpen.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) U) -> (Exists.{succ u1} (Nat -> (Set.{u1} α)) (fun (F : Nat -> (Set.{u1} α)) => And (forall (n : Nat), IsClosed.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) (F n)) (And (forall (n : Nat), HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) (F n) U) (And (Eq.{succ u1} (Set.{u1} α) (Set.iUnion.{u1, 1} α Nat (fun (n : Nat) => F n)) U) (Monotone.{0, u1} Nat (Set.{u1} α) (PartialOrder.toPreorder.{0} Nat (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring))) (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α))))))) F)))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {U : Set.{u1} α}, (IsOpen.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) U) -> (Exists.{succ u1} (Nat -> (Set.{u1} α)) (fun (F : Nat -> (Set.{u1} α)) => And (forall (n : Nat), IsClosed.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) (F n)) (And (forall (n : Nat), HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) (F n) U) (And (Eq.{succ u1} (Set.{u1} α) (Set.iUnion.{u1, 1} α Nat (fun (n : Nat) => F n)) U) (Monotone.{0, u1} Nat (Set.{u1} α) (PartialOrder.toPreorder.{0} Nat (StrictOrderedSemiring.toPartialOrder.{0} Nat Nat.strictOrderedSemiring)) (PartialOrder.toPreorder.{u1} (Set.{u1} α) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) F)))))
-Case conversion may be inaccurate. Consider using '#align is_open.exists_Union_is_closed IsOpen.exists_iUnion_isClosedₓ'. -/
theorem IsOpen.exists_iUnion_isClosed {U : Set α} (hU : IsOpen U) :
∃ F : ℕ → Set α, (∀ n, IsClosed (F n)) ∧ (∀ n, F n ⊆ U) ∧ (⋃ n, F n) = U ∧ Monotone F :=
by
@@ -365,12 +251,6 @@ theorem IsOpen.exists_iUnion_isClosed {U : Set α} (hU : IsOpen U) :
exact ⟨n, hn.le⟩
#align is_open.exists_Union_is_closed IsOpen.exists_iUnion_isClosed
-/- warning: is_compact.exists_inf_edist_eq_edist -> IsCompact.exists_infEdist_eq_edist is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α}, (IsCompact.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) s) -> (Set.Nonempty.{u1} α s) -> (forall (x : α), Exists.{succ u1} α (fun (y : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) => Eq.{1} ENNReal (EMetric.infEdist.{u1} α _inst_1 x s) (EDist.edist.{u1} α (PseudoEMetricSpace.toHasEdist.{u1} α _inst_1) x y))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α}, (IsCompact.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) s) -> (Set.Nonempty.{u1} α s) -> (forall (x : α), Exists.{succ u1} α (fun (y : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y s) (Eq.{1} ENNReal (EMetric.infEdist.{u1} α _inst_1 x s) (EDist.edist.{u1} α (PseudoEMetricSpace.toEDist.{u1} α _inst_1) x y))))
-Case conversion may be inaccurate. Consider using '#align is_compact.exists_inf_edist_eq_edist IsCompact.exists_infEdist_eq_edistₓ'. -/
theorem IsCompact.exists_infEdist_eq_edist (hs : IsCompact s) (hne : s.Nonempty) (x : α) :
∃ y ∈ s, infEdist x s = edist x y :=
by
@@ -380,12 +260,6 @@ theorem IsCompact.exists_infEdist_eq_edist (hs : IsCompact s) (hne : s.Nonempty)
exact ⟨y, ys, le_antisymm (inf_edist_le_edist_of_mem ys) (by rwa [le_inf_edist])⟩
#align is_compact.exists_inf_edist_eq_edist IsCompact.exists_infEdist_eq_edist
-/- warning: emetric.exists_pos_forall_lt_edist -> EMetric.exists_pos_forall_lt_edist is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (IsCompact.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) s) -> (IsClosed.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) t) -> (Disjoint.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} (Set.{u1} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α))) s t) -> (Exists.{1} NNReal (fun (r : NNReal) => And (LT.lt.{0} NNReal (Preorder.toHasLt.{0} NNReal (PartialOrder.toPreorder.{0} NNReal (OrderedCancelAddCommMonoid.toPartialOrder.{0} NNReal (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} NNReal NNReal.strictOrderedSemiring)))) (OfNat.ofNat.{0} NNReal 0 (OfNat.mk.{0} NNReal 0 (Zero.zero.{0} NNReal (MulZeroClass.toHasZero.{0} NNReal (NonUnitalNonAssocSemiring.toMulZeroClass.{0} NNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} NNReal (Semiring.toNonAssocSemiring.{0} NNReal NNReal.semiring))))))) r) (forall (x : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) -> (forall (y : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y t) -> (LT.lt.{0} ENNReal (Preorder.toHasLt.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) NNReal ENNReal (HasLiftT.mk.{1, 1} NNReal ENNReal (CoeTCₓ.coe.{1, 1} NNReal ENNReal (coeBase.{1, 1} NNReal ENNReal ENNReal.hasCoe))) r) (EDist.edist.{u1} α (PseudoEMetricSpace.toHasEdist.{u1} α _inst_1) x y))))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (IsCompact.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) s) -> (IsClosed.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) t) -> (Disjoint.{u1} (Set.{u1} α) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) (BoundedOrder.toOrderBot.{u1} (Set.{u1} α) (Preorder.toLE.{u1} (Set.{u1} α) (PartialOrder.toPreorder.{u1} (Set.{u1} α) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))))) (CompleteLattice.toBoundedOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) s t) -> (Exists.{1} NNReal (fun (r : NNReal) => And (LT.lt.{0} NNReal (Preorder.toLT.{0} NNReal (PartialOrder.toPreorder.{0} NNReal (StrictOrderedSemiring.toPartialOrder.{0} NNReal instNNRealStrictOrderedSemiring))) (OfNat.ofNat.{0} NNReal 0 (Zero.toOfNat0.{0} NNReal instNNRealZero)) r) (forall (x : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) -> (forall (y : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y t) -> (LT.lt.{0} ENNReal (Preorder.toLT.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (ENNReal.some r) (EDist.edist.{u1} α (PseudoEMetricSpace.toEDist.{u1} α _inst_1) x y))))))
-Case conversion may be inaccurate. Consider using '#align emetric.exists_pos_forall_lt_edist EMetric.exists_pos_forall_lt_edistₓ'. -/
theorem exists_pos_forall_lt_edist (hs : IsCompact s) (ht : IsClosed t) (hst : Disjoint s t) :
∃ r : ℝ≥0, 0 < r ∧ ∀ x ∈ s, ∀ y ∈ t, (r : ℝ≥0∞) < edist x y :=
by
@@ -412,12 +286,6 @@ irreducible_def hausdorffEdist {α : Type u} [PseudoEMetricSpace α] (s t : Set
#align emetric.Hausdorff_edist EMetric.hausdorffEdist
-/
-/- warning: emetric.Hausdorff_edist_def -> EMetric.hausdorffEdist_def is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (s : Set.{u1} α) (t : Set.{u1} α), Eq.{1} ENNReal (EMetric.hausdorffEdist.{u1} α _inst_1 s t) (Sup.sup.{0} ENNReal (SemilatticeSup.toHasSup.{0} ENNReal ENNReal.semilatticeSup) (iSup.{0, succ u1} ENNReal (ConditionallyCompleteLattice.toHasSup.{0} ENNReal (CompleteLattice.toConditionallyCompleteLattice.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) α (fun (x : α) => iSup.{0, 0} ENNReal (ConditionallyCompleteLattice.toHasSup.{0} ENNReal (CompleteLattice.toConditionallyCompleteLattice.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) => EMetric.infEdist.{u1} α _inst_1 x t))) (iSup.{0, succ u1} ENNReal (ConditionallyCompleteLattice.toHasSup.{0} ENNReal (CompleteLattice.toConditionallyCompleteLattice.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) α (fun (y : α) => iSup.{0, 0} ENNReal (ConditionallyCompleteLattice.toHasSup.{0} ENNReal (CompleteLattice.toConditionallyCompleteLattice.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y t) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y t) => EMetric.infEdist.{u1} α _inst_1 y s))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (s : Set.{u1} α) (t : Set.{u1} α), Eq.{1} ENNReal (EMetric.hausdorffEdist.{u1} α _inst_1 s t) (Sup.sup.{0} ENNReal (SemilatticeSup.toSup.{0} ENNReal instENNRealSemilatticeSup) (iSup.{0, succ u1} ENNReal (ConditionallyCompleteLattice.toSupSet.{0} ENNReal (ConditionallyCompleteLinearOrder.toConditionallyCompleteLattice.{0} ENNReal (ConditionallyCompleteLinearOrderBot.toConditionallyCompleteLinearOrder.{0} ENNReal (CompleteLinearOrder.toConditionallyCompleteLinearOrderBot.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal)))) α (fun (x : α) => iSup.{0, 0} ENNReal (ConditionallyCompleteLattice.toSupSet.{0} ENNReal (ConditionallyCompleteLinearOrder.toConditionallyCompleteLattice.{0} ENNReal (ConditionallyCompleteLinearOrderBot.toConditionallyCompleteLinearOrder.{0} ENNReal (CompleteLinearOrder.toConditionallyCompleteLinearOrderBot.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal)))) (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) (fun (H : Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) => EMetric.infEdist.{u1} α _inst_1 x t))) (iSup.{0, succ u1} ENNReal (ConditionallyCompleteLattice.toSupSet.{0} ENNReal (ConditionallyCompleteLinearOrder.toConditionallyCompleteLattice.{0} ENNReal (ConditionallyCompleteLinearOrderBot.toConditionallyCompleteLinearOrder.{0} ENNReal (CompleteLinearOrder.toConditionallyCompleteLinearOrderBot.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal)))) α (fun (y : α) => iSup.{0, 0} ENNReal (ConditionallyCompleteLattice.toSupSet.{0} ENNReal (ConditionallyCompleteLinearOrder.toConditionallyCompleteLattice.{0} ENNReal (ConditionallyCompleteLinearOrderBot.toConditionallyCompleteLinearOrder.{0} ENNReal (CompleteLinearOrder.toConditionallyCompleteLinearOrderBot.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal)))) (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y t) (fun (H : Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y t) => EMetric.infEdist.{u1} α _inst_1 y s))))
-Case conversion may be inaccurate. Consider using '#align emetric.Hausdorff_edist_def EMetric.hausdorffEdist_defₓ'. -/
theorem hausdorffEdist_def {α : Type u} [PseudoEMetricSpace α] (s t : Set α) :
hausdorffEdist s t = (⨆ x ∈ s, infEdist x t) ⊔ ⨆ y ∈ t, infEdist y s := by rw [Hausdorff_edist]
#align emetric.Hausdorff_edist_def EMetric.hausdorffEdist_def
@@ -426,12 +294,6 @@ section HausdorffEdist
variable [PseudoEMetricSpace α] [PseudoEMetricSpace β] {x y : α} {s t u : Set α} {Φ : α → β}
-/- warning: emetric.Hausdorff_edist_self -> EMetric.hausdorffEdist_self is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α}, Eq.{1} ENNReal (EMetric.hausdorffEdist.{u1} α _inst_1 s s) (OfNat.ofNat.{0} ENNReal 0 (OfNat.mk.{0} ENNReal 0 (Zero.zero.{0} ENNReal ENNReal.hasZero)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α}, Eq.{1} ENNReal (EMetric.hausdorffEdist.{u1} α _inst_1 s s) (OfNat.ofNat.{0} ENNReal 0 (Zero.toOfNat0.{0} ENNReal instENNRealZero))
-Case conversion may be inaccurate. Consider using '#align emetric.Hausdorff_edist_self EMetric.hausdorffEdist_selfₓ'. -/
/-- The Hausdorff edistance of a set to itself vanishes -/
@[simp]
theorem hausdorffEdist_self : hausdorffEdist s s = 0 :=
@@ -447,12 +309,6 @@ theorem hausdorffEdist_comm : hausdorffEdist s t = hausdorffEdist t s := by
#align emetric.Hausdorff_edist_comm EMetric.hausdorffEdist_comm
-/
-/- warning: emetric.Hausdorff_edist_le_of_inf_edist -> EMetric.hausdorffEdist_le_of_infEdist is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α} {r : ENNReal}, (forall (x : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) -> (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.infEdist.{u1} α _inst_1 x t) r)) -> (forall (x : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x t) -> (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.infEdist.{u1} α _inst_1 x s) r)) -> (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.hausdorffEdist.{u1} α _inst_1 s t) r)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α} {r : ENNReal}, (forall (x : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) -> (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.infEdist.{u1} α _inst_1 x t) r)) -> (forall (x : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x t) -> (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.infEdist.{u1} α _inst_1 x s) r)) -> (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.hausdorffEdist.{u1} α _inst_1 s t) r)
-Case conversion may be inaccurate. Consider using '#align emetric.Hausdorff_edist_le_of_inf_edist EMetric.hausdorffEdist_le_of_infEdistₓ'. -/
/-- Bounding the Hausdorff edistance by bounding the edistance of any point
in each set to the other set -/
theorem hausdorffEdist_le_of_infEdist {r : ℝ≥0∞} (H1 : ∀ x ∈ s, infEdist x t ≤ r)
@@ -462,12 +318,6 @@ theorem hausdorffEdist_le_of_infEdist {r : ℝ≥0∞} (H1 : ∀ x ∈ s, infEdi
exact ⟨H1, H2⟩
#align emetric.Hausdorff_edist_le_of_inf_edist EMetric.hausdorffEdist_le_of_infEdist
-/- warning: emetric.Hausdorff_edist_le_of_mem_edist -> EMetric.hausdorffEdist_le_of_mem_edist is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α} {r : ENNReal}, (forall (x : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) -> (Exists.{succ u1} α (fun (y : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y t) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y t) => LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EDist.edist.{u1} α (PseudoEMetricSpace.toHasEdist.{u1} α _inst_1) x y) r)))) -> (forall (x : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x t) -> (Exists.{succ u1} α (fun (y : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) => LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EDist.edist.{u1} α (PseudoEMetricSpace.toHasEdist.{u1} α _inst_1) x y) r)))) -> (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.hausdorffEdist.{u1} α _inst_1 s t) r)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α} {r : ENNReal}, (forall (x : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) -> (Exists.{succ u1} α (fun (y : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y t) (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EDist.edist.{u1} α (PseudoEMetricSpace.toEDist.{u1} α _inst_1) x y) r)))) -> (forall (x : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x t) -> (Exists.{succ u1} α (fun (y : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y s) (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EDist.edist.{u1} α (PseudoEMetricSpace.toEDist.{u1} α _inst_1) x y) r)))) -> (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.hausdorffEdist.{u1} α _inst_1 s t) r)
-Case conversion may be inaccurate. Consider using '#align emetric.Hausdorff_edist_le_of_mem_edist EMetric.hausdorffEdist_le_of_mem_edistₓ'. -/
/-- Bounding the Hausdorff edistance by exhibiting, for any point in each set,
another point in the other set at controlled distance -/
theorem hausdorffEdist_le_of_mem_edist {r : ℝ≥0∞} (H1 : ∀ x ∈ s, ∃ y ∈ t, edist x y ≤ r)
@@ -482,12 +332,6 @@ theorem hausdorffEdist_le_of_mem_edist {r : ℝ≥0∞} (H1 : ∀ x ∈ s, ∃ y
exact le_trans (inf_edist_le_edist_of_mem ys) hy
#align emetric.Hausdorff_edist_le_of_mem_edist EMetric.hausdorffEdist_le_of_mem_edist
-/- warning: emetric.inf_edist_le_Hausdorff_edist_of_mem -> EMetric.infEdist_le_hausdorffEdist_of_mem is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {s : Set.{u1} α} {t : Set.{u1} α}, (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) -> (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.infEdist.{u1} α _inst_1 x t) (EMetric.hausdorffEdist.{u1} α _inst_1 s t))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {s : Set.{u1} α} {t : Set.{u1} α}, (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) -> (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.infEdist.{u1} α _inst_1 x t) (EMetric.hausdorffEdist.{u1} α _inst_1 s t))
-Case conversion may be inaccurate. Consider using '#align emetric.inf_edist_le_Hausdorff_edist_of_mem EMetric.infEdist_le_hausdorffEdist_of_memₓ'. -/
/-- The distance to a set is controlled by the Hausdorff distance -/
theorem infEdist_le_hausdorffEdist_of_mem (h : x ∈ s) : infEdist x t ≤ hausdorffEdist s t :=
by
@@ -496,12 +340,6 @@ theorem infEdist_le_hausdorffEdist_of_mem (h : x ∈ s) : infEdist x t ≤ hausd
exact le_iSup₂ x h
#align emetric.inf_edist_le_Hausdorff_edist_of_mem EMetric.infEdist_le_hausdorffEdist_of_mem
-/- warning: emetric.exists_edist_lt_of_Hausdorff_edist_lt -> EMetric.exists_edist_lt_of_hausdorffEdist_lt is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {s : Set.{u1} α} {t : Set.{u1} α} {r : ENNReal}, (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) -> (LT.lt.{0} ENNReal (Preorder.toHasLt.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.hausdorffEdist.{u1} α _inst_1 s t) r) -> (Exists.{succ u1} α (fun (y : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y t) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y t) => LT.lt.{0} ENNReal (Preorder.toHasLt.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EDist.edist.{u1} α (PseudoEMetricSpace.toHasEdist.{u1} α _inst_1) x y) r)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {s : Set.{u1} α} {t : Set.{u1} α} {r : ENNReal}, (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) -> (LT.lt.{0} ENNReal (Preorder.toLT.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.hausdorffEdist.{u1} α _inst_1 s t) r) -> (Exists.{succ u1} α (fun (y : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y t) (LT.lt.{0} ENNReal (Preorder.toLT.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EDist.edist.{u1} α (PseudoEMetricSpace.toEDist.{u1} α _inst_1) x y) r)))
-Case conversion may be inaccurate. Consider using '#align emetric.exists_edist_lt_of_Hausdorff_edist_lt EMetric.exists_edist_lt_of_hausdorffEdist_ltₓ'. -/
/-- If the Hausdorff distance is `<r`, then any point in one of the sets has
a corresponding point at distance `<r` in the other set -/
theorem exists_edist_lt_of_hausdorffEdist_lt {r : ℝ≥0∞} (h : x ∈ s) (H : hausdorffEdist s t < r) :
@@ -513,12 +351,6 @@ theorem exists_edist_lt_of_hausdorffEdist_lt {r : ℝ≥0∞} (h : x ∈ s) (H :
#align emetric.exists_edist_lt_of_Hausdorff_edist_lt EMetric.exists_edist_lt_of_hausdorffEdist_lt
-/- warning: emetric.inf_edist_le_inf_edist_add_Hausdorff_edist -> EMetric.infEdist_le_infEdist_add_hausdorffEdist is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {s : Set.{u1} α} {t : Set.{u1} α}, LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.infEdist.{u1} α _inst_1 x t) (HAdd.hAdd.{0, 0, 0} ENNReal ENNReal ENNReal (instHAdd.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring)))))))) (EMetric.infEdist.{u1} α _inst_1 x s) (EMetric.hausdorffEdist.{u1} α _inst_1 s t))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {s : Set.{u1} α} {t : Set.{u1} α}, LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.infEdist.{u1} α _inst_1 x t) (HAdd.hAdd.{0, 0, 0} ENNReal ENNReal ENNReal (instHAdd.{0} ENNReal (Distrib.toAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal)))))))) (EMetric.infEdist.{u1} α _inst_1 x s) (EMetric.hausdorffEdist.{u1} α _inst_1 s t))
-Case conversion may be inaccurate. Consider using '#align emetric.inf_edist_le_inf_edist_add_Hausdorff_edist EMetric.infEdist_le_infEdist_add_hausdorffEdistₓ'. -/
/-- The distance from `x` to `s` or `t` is controlled in terms of the Hausdorff distance
between `s` and `t` -/
theorem infEdist_le_infEdist_add_hausdorffEdist :
@@ -551,12 +383,6 @@ theorem hausdorffEdist_image (h : Isometry Φ) :
#align emetric.Hausdorff_edist_image EMetric.hausdorffEdist_image
-/
-/- warning: emetric.Hausdorff_edist_le_ediam -> EMetric.hausdorffEdist_le_ediam is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (Set.Nonempty.{u1} α s) -> (Set.Nonempty.{u1} α t) -> (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.hausdorffEdist.{u1} α _inst_1 s t) (EMetric.diam.{u1} α _inst_1 (Union.union.{u1} (Set.{u1} α) (Set.hasUnion.{u1} α) s t)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (Set.Nonempty.{u1} α s) -> (Set.Nonempty.{u1} α t) -> (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.hausdorffEdist.{u1} α _inst_1 s t) (EMetric.diam.{u1} α _inst_1 (Union.union.{u1} (Set.{u1} α) (Set.instUnionSet.{u1} α) s t)))
-Case conversion may be inaccurate. Consider using '#align emetric.Hausdorff_edist_le_ediam EMetric.hausdorffEdist_le_ediamₓ'. -/
/-- The Hausdorff distance is controlled by the diameter of the union -/
theorem hausdorffEdist_le_ediam (hs : s.Nonempty) (ht : t.Nonempty) :
hausdorffEdist s t ≤ diam (s ∪ t) :=
@@ -570,12 +396,6 @@ theorem hausdorffEdist_le_ediam (hs : s.Nonempty) (ht : t.Nonempty) :
exact ⟨x, xs, edist_le_diam_of_mem (subset_union_right _ _ hz) (subset_union_left _ _ xs)⟩
#align emetric.Hausdorff_edist_le_ediam EMetric.hausdorffEdist_le_ediam
-/- warning: emetric.Hausdorff_edist_triangle -> EMetric.hausdorffEdist_triangle is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α} {u : Set.{u1} α}, LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.hausdorffEdist.{u1} α _inst_1 s u) (HAdd.hAdd.{0, 0, 0} ENNReal ENNReal ENNReal (instHAdd.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring)))))))) (EMetric.hausdorffEdist.{u1} α _inst_1 s t) (EMetric.hausdorffEdist.{u1} α _inst_1 t u))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α} {u : Set.{u1} α}, LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.hausdorffEdist.{u1} α _inst_1 s u) (HAdd.hAdd.{0, 0, 0} ENNReal ENNReal ENNReal (instHAdd.{0} ENNReal (Distrib.toAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal)))))))) (EMetric.hausdorffEdist.{u1} α _inst_1 s t) (EMetric.hausdorffEdist.{u1} α _inst_1 t u))
-Case conversion may be inaccurate. Consider using '#align emetric.Hausdorff_edist_triangle EMetric.hausdorffEdist_triangleₓ'. -/
/-- The Hausdorff distance satisfies the triangular inequality -/
theorem hausdorffEdist_triangle : hausdorffEdist s u ≤ hausdorffEdist s t + hausdorffEdist t u :=
by
@@ -601,12 +421,6 @@ theorem hausdorffEdist_triangle : hausdorffEdist s u ≤ hausdorffEdist s t + ha
#align emetric.Hausdorff_edist_triangle EMetric.hausdorffEdist_triangle
-/- warning: emetric.Hausdorff_edist_zero_iff_closure_eq_closure -> EMetric.hausdorffEdist_zero_iff_closure_eq_closure is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, Iff (Eq.{1} ENNReal (EMetric.hausdorffEdist.{u1} α _inst_1 s t) (OfNat.ofNat.{0} ENNReal 0 (OfNat.mk.{0} ENNReal 0 (Zero.zero.{0} ENNReal ENNReal.hasZero)))) (Eq.{succ u1} (Set.{u1} α) (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) s) (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) t))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, Iff (Eq.{1} ENNReal (EMetric.hausdorffEdist.{u1} α _inst_1 s t) (OfNat.ofNat.{0} ENNReal 0 (Zero.toOfNat0.{0} ENNReal instENNRealZero))) (Eq.{succ u1} (Set.{u1} α) (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) s) (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) t))
-Case conversion may be inaccurate. Consider using '#align emetric.Hausdorff_edist_zero_iff_closure_eq_closure EMetric.hausdorffEdist_zero_iff_closure_eq_closureₓ'. -/
/-- Two sets are at zero Hausdorff edistance if and only if they have the same closure -/
theorem hausdorffEdist_zero_iff_closure_eq_closure :
hausdorffEdist s t = 0 ↔ closure s = closure t :=
@@ -622,12 +436,6 @@ theorem hausdorffEdist_zero_iff_closure_eq_closure :
#align emetric.Hausdorff_edist_zero_iff_closure_eq_closure EMetric.hausdorffEdist_zero_iff_closure_eq_closure
-/- warning: emetric.Hausdorff_edist_self_closure -> EMetric.hausdorffEdist_self_closure is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α}, Eq.{1} ENNReal (EMetric.hausdorffEdist.{u1} α _inst_1 s (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) s)) (OfNat.ofNat.{0} ENNReal 0 (OfNat.mk.{0} ENNReal 0 (Zero.zero.{0} ENNReal ENNReal.hasZero)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α}, Eq.{1} ENNReal (EMetric.hausdorffEdist.{u1} α _inst_1 s (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) s)) (OfNat.ofNat.{0} ENNReal 0 (Zero.toOfNat0.{0} ENNReal instENNRealZero))
-Case conversion may be inaccurate. Consider using '#align emetric.Hausdorff_edist_self_closure EMetric.hausdorffEdist_self_closureₓ'. -/
/-- The Hausdorff edistance between a set and its closure vanishes -/
@[simp]
theorem hausdorffEdist_self_closure : hausdorffEdist s (closure s) = 0 := by
@@ -669,24 +477,12 @@ theorem hausdorffEdist_closure : hausdorffEdist (closure s) (closure t) = hausdo
#align emetric.Hausdorff_edist_closure EMetric.hausdorffEdist_closure
-/
-/- warning: emetric.Hausdorff_edist_zero_iff_eq_of_closed -> EMetric.hausdorffEdist_zero_iff_eq_of_closed is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (IsClosed.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) s) -> (IsClosed.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) t) -> (Iff (Eq.{1} ENNReal (EMetric.hausdorffEdist.{u1} α _inst_1 s t) (OfNat.ofNat.{0} ENNReal 0 (OfNat.mk.{0} ENNReal 0 (Zero.zero.{0} ENNReal ENNReal.hasZero)))) (Eq.{succ u1} (Set.{u1} α) s t))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (IsClosed.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) s) -> (IsClosed.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) t) -> (Iff (Eq.{1} ENNReal (EMetric.hausdorffEdist.{u1} α _inst_1 s t) (OfNat.ofNat.{0} ENNReal 0 (Zero.toOfNat0.{0} ENNReal instENNRealZero))) (Eq.{succ u1} (Set.{u1} α) s t))
-Case conversion may be inaccurate. Consider using '#align emetric.Hausdorff_edist_zero_iff_eq_of_closed EMetric.hausdorffEdist_zero_iff_eq_of_closedₓ'. -/
/-- Two closed sets are at zero Hausdorff edistance if and only if they coincide -/
theorem hausdorffEdist_zero_iff_eq_of_closed (hs : IsClosed s) (ht : IsClosed t) :
hausdorffEdist s t = 0 ↔ s = t := by
rw [Hausdorff_edist_zero_iff_closure_eq_closure, hs.closure_eq, ht.closure_eq]
#align emetric.Hausdorff_edist_zero_iff_eq_of_closed EMetric.hausdorffEdist_zero_iff_eq_of_closed
-/- warning: emetric.Hausdorff_edist_empty -> EMetric.hausdorffEdist_empty is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α}, (Set.Nonempty.{u1} α s) -> (Eq.{1} ENNReal (EMetric.hausdorffEdist.{u1} α _inst_1 s (EmptyCollection.emptyCollection.{u1} (Set.{u1} α) (Set.hasEmptyc.{u1} α))) (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α}, (Set.Nonempty.{u1} α s) -> (Eq.{1} ENNReal (EMetric.hausdorffEdist.{u1} α _inst_1 s (EmptyCollection.emptyCollection.{u1} (Set.{u1} α) (Set.instEmptyCollectionSet.{u1} α))) (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))
-Case conversion may be inaccurate. Consider using '#align emetric.Hausdorff_edist_empty EMetric.hausdorffEdist_emptyₓ'. -/
/-- The Haudorff edistance to the empty set is infinite -/
theorem hausdorffEdist_empty (ne : s.Nonempty) : hausdorffEdist s ∅ = ∞ :=
by
@@ -695,24 +491,12 @@ theorem hausdorffEdist_empty (ne : s.Nonempty) : hausdorffEdist s ∅ = ∞ :=
simpa using this
#align emetric.Hausdorff_edist_empty EMetric.hausdorffEdist_empty
-/- warning: emetric.nonempty_of_Hausdorff_edist_ne_top -> EMetric.nonempty_of_hausdorffEdist_ne_top is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (Set.Nonempty.{u1} α s) -> (Ne.{1} ENNReal (EMetric.hausdorffEdist.{u1} α _inst_1 s t) (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder)))) -> (Set.Nonempty.{u1} α t)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (Set.Nonempty.{u1} α s) -> (Ne.{1} ENNReal (EMetric.hausdorffEdist.{u1} α _inst_1 s t) (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal)))) -> (Set.Nonempty.{u1} α t)
-Case conversion may be inaccurate. Consider using '#align emetric.nonempty_of_Hausdorff_edist_ne_top EMetric.nonempty_of_hausdorffEdist_ne_topₓ'. -/
/-- If a set is at finite Hausdorff edistance of a nonempty set, it is nonempty -/
theorem nonempty_of_hausdorffEdist_ne_top (hs : s.Nonempty) (fin : hausdorffEdist s t ≠ ⊤) :
t.Nonempty :=
t.eq_empty_or_nonempty.elim (fun ht => (Fin <| ht.symm ▸ hausdorffEdist_empty hs).elim) id
#align emetric.nonempty_of_Hausdorff_edist_ne_top EMetric.nonempty_of_hausdorffEdist_ne_top
-/- warning: emetric.empty_or_nonempty_of_Hausdorff_edist_ne_top -> EMetric.empty_or_nonempty_of_hausdorffEdist_ne_top is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (Ne.{1} ENNReal (EMetric.hausdorffEdist.{u1} α _inst_1 s t) (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder)))) -> (Or (And (Eq.{succ u1} (Set.{u1} α) s (EmptyCollection.emptyCollection.{u1} (Set.{u1} α) (Set.hasEmptyc.{u1} α))) (Eq.{succ u1} (Set.{u1} α) t (EmptyCollection.emptyCollection.{u1} (Set.{u1} α) (Set.hasEmptyc.{u1} α)))) (And (Set.Nonempty.{u1} α s) (Set.Nonempty.{u1} α t)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (Ne.{1} ENNReal (EMetric.hausdorffEdist.{u1} α _inst_1 s t) (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal)))) -> (Or (And (Eq.{succ u1} (Set.{u1} α) s (EmptyCollection.emptyCollection.{u1} (Set.{u1} α) (Set.instEmptyCollectionSet.{u1} α))) (Eq.{succ u1} (Set.{u1} α) t (EmptyCollection.emptyCollection.{u1} (Set.{u1} α) (Set.instEmptyCollectionSet.{u1} α)))) (And (Set.Nonempty.{u1} α s) (Set.Nonempty.{u1} α t)))
-Case conversion may be inaccurate. Consider using '#align emetric.empty_or_nonempty_of_Hausdorff_edist_ne_top EMetric.empty_or_nonempty_of_hausdorffEdist_ne_topₓ'. -/
theorem empty_or_nonempty_of_hausdorffEdist_ne_top (fin : hausdorffEdist s t ≠ ⊤) :
s = ∅ ∧ t = ∅ ∨ s.Nonempty ∧ t.Nonempty :=
by
@@ -755,12 +539,6 @@ def infDist (x : α) (s : Set α) : ℝ :=
#align metric.inf_dist Metric.infDist
-/
-/- warning: metric.inf_dist_eq_infi -> Metric.infDist_eq_iInf is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α}, Eq.{1} Real (Metric.infDist.{u1} α _inst_1 x s) (iInf.{0, succ u1} Real Real.hasInf (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) (fun (y : coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) => Dist.dist.{u1} α (PseudoMetricSpace.toHasDist.{u1} α _inst_1) x ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) α (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) α (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) α (coeBase.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) α (coeSubtype.{succ u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s))))) y)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α}, Eq.{1} Real (Metric.infDist.{u1} α _inst_1 x s) (iInf.{0, succ u1} Real Real.instInfSetReal (Set.Elem.{u1} α s) (fun (y : Set.Elem.{u1} α s) => Dist.dist.{u1} α (PseudoMetricSpace.toDist.{u1} α _inst_1) x (Subtype.val.{succ u1} α (fun (x : α) => Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) y)))
-Case conversion may be inaccurate. Consider using '#align metric.inf_dist_eq_infi Metric.infDist_eq_iInfₓ'. -/
theorem infDist_eq_iInf : infDist x s = ⨅ y : s, dist x y :=
by
rw [inf_dist, inf_edist, iInf_subtype', ENNReal.toReal_iInf]
@@ -769,34 +547,16 @@ theorem infDist_eq_iInf : infDist x s = ⨅ y : s, dist x y :=
· exact fun _ => edist_ne_top _ _
#align metric.inf_dist_eq_infi Metric.infDist_eq_iInf
-/- warning: metric.inf_dist_nonneg -> Metric.infDist_nonneg is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α}, LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) (Metric.infDist.{u1} α _inst_1 x s)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α}, LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) (Metric.infDist.{u1} α _inst_1 x s)
-Case conversion may be inaccurate. Consider using '#align metric.inf_dist_nonneg Metric.infDist_nonnegₓ'. -/
/-- the minimal distance is always nonnegative -/
theorem infDist_nonneg : 0 ≤ infDist x s := by simp [inf_dist]
#align metric.inf_dist_nonneg Metric.infDist_nonneg
-/- warning: metric.inf_dist_empty -> Metric.infDist_empty is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {x : α}, Eq.{1} Real (Metric.infDist.{u1} α _inst_1 x (EmptyCollection.emptyCollection.{u1} (Set.{u1} α) (Set.hasEmptyc.{u1} α))) (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {x : α}, Eq.{1} Real (Metric.infDist.{u1} α _inst_1 x (EmptyCollection.emptyCollection.{u1} (Set.{u1} α) (Set.instEmptyCollectionSet.{u1} α))) (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))
-Case conversion may be inaccurate. Consider using '#align metric.inf_dist_empty Metric.infDist_emptyₓ'. -/
/-- the minimal distance to the empty set is 0 (if you want to have the more reasonable
value ∞ instead, use `inf_edist`, which takes values in ℝ≥0∞) -/
@[simp]
theorem infDist_empty : infDist x ∅ = 0 := by simp [inf_dist]
#align metric.inf_dist_empty Metric.infDist_empty
-/- warning: metric.inf_edist_ne_top -> Metric.infEdist_ne_top is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α}, (Set.Nonempty.{u1} α s) -> (Ne.{1} ENNReal (EMetric.infEdist.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) x s) (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α}, (Set.Nonempty.{u1} α s) -> (Ne.{1} ENNReal (EMetric.infEdist.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) x s) (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))
-Case conversion may be inaccurate. Consider using '#align metric.inf_edist_ne_top Metric.infEdist_ne_topₓ'. -/
/-- In a metric space, the minimal edistance to a nonempty set is finite -/
theorem infEdist_ne_top (h : s.Nonempty) : infEdist x s ≠ ⊤ :=
by
@@ -808,12 +568,6 @@ theorem infEdist_ne_top (h : s.Nonempty) : infEdist x s ≠ ⊤ :=
#align metric.inf_edist_ne_top Metric.infEdist_ne_top
-/- warning: metric.inf_dist_zero_of_mem -> Metric.infDist_zero_of_mem is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α}, (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) -> (Eq.{1} Real (Metric.infDist.{u1} α _inst_1 x s) (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α}, (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) -> (Eq.{1} Real (Metric.infDist.{u1} α _inst_1 x s) (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))
-Case conversion may be inaccurate. Consider using '#align metric.inf_dist_zero_of_mem Metric.infDist_zero_of_memₓ'. -/
/-- The minimal distance of a point to a set containing it vanishes -/
theorem infDist_zero_of_mem (h : x ∈ s) : infDist x s = 0 := by
simp [inf_edist_zero_of_mem h, inf_dist]
@@ -826,12 +580,6 @@ theorem infDist_singleton : infDist x {y} = dist x y := by simp [inf_dist, inf_e
#align metric.inf_dist_singleton Metric.infDist_singleton
-/
-/- warning: metric.inf_dist_le_dist_of_mem -> Metric.infDist_le_dist_of_mem is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α} {y : α}, (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) -> (LE.le.{0} Real Real.hasLe (Metric.infDist.{u1} α _inst_1 x s) (Dist.dist.{u1} α (PseudoMetricSpace.toHasDist.{u1} α _inst_1) x y))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α} {y : α}, (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y s) -> (LE.le.{0} Real Real.instLEReal (Metric.infDist.{u1} α _inst_1 x s) (Dist.dist.{u1} α (PseudoMetricSpace.toDist.{u1} α _inst_1) x y))
-Case conversion may be inaccurate. Consider using '#align metric.inf_dist_le_dist_of_mem Metric.infDist_le_dist_of_memₓ'. -/
/-- The minimal distance to a set is bounded by the distance to any point in this set -/
theorem infDist_le_dist_of_mem (h : y ∈ s) : infDist x s ≤ dist x y :=
by
@@ -839,12 +587,6 @@ theorem infDist_le_dist_of_mem (h : y ∈ s) : infDist x s ≤ dist x y :=
exact inf_edist_le_edist_of_mem h
#align metric.inf_dist_le_dist_of_mem Metric.infDist_le_dist_of_mem
-/- warning: metric.inf_dist_le_inf_dist_of_subset -> Metric.infDist_le_infDist_of_subset is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α} {x : α}, (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) s t) -> (Set.Nonempty.{u1} α s) -> (LE.le.{0} Real Real.hasLe (Metric.infDist.{u1} α _inst_1 x t) (Metric.infDist.{u1} α _inst_1 x s))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α} {x : α}, (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) s t) -> (Set.Nonempty.{u1} α s) -> (LE.le.{0} Real Real.instLEReal (Metric.infDist.{u1} α _inst_1 x t) (Metric.infDist.{u1} α _inst_1 x s))
-Case conversion may be inaccurate. Consider using '#align metric.inf_dist_le_inf_dist_of_subset Metric.infDist_le_infDist_of_subsetₓ'. -/
/-- The minimal distance is monotonous with respect to inclusion -/
theorem infDist_le_infDist_of_subset (h : s ⊆ t) (hs : s.Nonempty) : infDist x t ≤ infDist x s :=
by
@@ -853,24 +595,12 @@ theorem infDist_le_infDist_of_subset (h : s ⊆ t) (hs : s.Nonempty) : infDist x
exact inf_edist_anti h
#align metric.inf_dist_le_inf_dist_of_subset Metric.infDist_le_infDist_of_subset
-/- warning: metric.inf_dist_lt_iff -> Metric.infDist_lt_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α} {r : Real}, (Set.Nonempty.{u1} α s) -> (Iff (LT.lt.{0} Real Real.hasLt (Metric.infDist.{u1} α _inst_1 x s) r) (Exists.{succ u1} α (fun (y : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) => LT.lt.{0} Real Real.hasLt (Dist.dist.{u1} α (PseudoMetricSpace.toHasDist.{u1} α _inst_1) x y) r))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α} {r : Real}, (Set.Nonempty.{u1} α s) -> (Iff (LT.lt.{0} Real Real.instLTReal (Metric.infDist.{u1} α _inst_1 x s) r) (Exists.{succ u1} α (fun (y : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y s) (LT.lt.{0} Real Real.instLTReal (Dist.dist.{u1} α (PseudoMetricSpace.toDist.{u1} α _inst_1) x y) r))))
-Case conversion may be inaccurate. Consider using '#align metric.inf_dist_lt_iff Metric.infDist_lt_iffₓ'. -/
/-- The minimal distance to a set is `< r` iff there exists a point in this set at distance `< r` -/
theorem infDist_lt_iff {r : ℝ} (hs : s.Nonempty) : infDist x s < r ↔ ∃ y ∈ s, dist x y < r := by
simp_rw [inf_dist, ← ENNReal.lt_ofReal_iff_toReal_lt (inf_edist_ne_top hs), inf_edist_lt_iff,
ENNReal.lt_ofReal_iff_toReal_lt (edist_ne_top _ _), ← dist_edist]
#align metric.inf_dist_lt_iff Metric.infDist_lt_iff
-/- warning: metric.inf_dist_le_inf_dist_add_dist -> Metric.infDist_le_infDist_add_dist is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α} {y : α}, LE.le.{0} Real Real.hasLe (Metric.infDist.{u1} α _inst_1 x s) (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.hasAdd) (Metric.infDist.{u1} α _inst_1 y s) (Dist.dist.{u1} α (PseudoMetricSpace.toHasDist.{u1} α _inst_1) x y))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α} {y : α}, LE.le.{0} Real Real.instLEReal (Metric.infDist.{u1} α _inst_1 x s) (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.instAddReal) (Metric.infDist.{u1} α _inst_1 y s) (Dist.dist.{u1} α (PseudoMetricSpace.toDist.{u1} α _inst_1) x y))
-Case conversion may be inaccurate. Consider using '#align metric.inf_dist_le_inf_dist_add_dist Metric.infDist_le_infDist_add_distₓ'. -/
/-- The minimal distance from `x` to `s` is bounded by the distance from `y` to `s`, modulo
the distance between `x` and `y` -/
theorem infDist_le_infDist_add_dist : infDist x s ≤ infDist y s + dist x y :=
@@ -884,22 +614,10 @@ theorem infDist_le_infDist_add_dist : infDist x s ≤ infDist y s + dist x y :=
· simp [ENNReal.add_eq_top, inf_edist_ne_top hs, edist_ne_top]
#align metric.inf_dist_le_inf_dist_add_dist Metric.infDist_le_infDist_add_dist
-/- warning: metric.not_mem_of_dist_lt_inf_dist -> Metric.not_mem_of_dist_lt_infDist is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α} {y : α}, (LT.lt.{0} Real Real.hasLt (Dist.dist.{u1} α (PseudoMetricSpace.toHasDist.{u1} α _inst_1) x y) (Metric.infDist.{u1} α _inst_1 x s)) -> (Not (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α} {y : α}, (LT.lt.{0} Real Real.instLTReal (Dist.dist.{u1} α (PseudoMetricSpace.toDist.{u1} α _inst_1) x y) (Metric.infDist.{u1} α _inst_1 x s)) -> (Not (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y s))
-Case conversion may be inaccurate. Consider using '#align metric.not_mem_of_dist_lt_inf_dist Metric.not_mem_of_dist_lt_infDistₓ'. -/
theorem not_mem_of_dist_lt_infDist (h : dist x y < infDist x s) : y ∉ s := fun hy =>
h.not_le <| infDist_le_dist_of_mem hy
#align metric.not_mem_of_dist_lt_inf_dist Metric.not_mem_of_dist_lt_infDist
-/- warning: metric.disjoint_ball_inf_dist -> Metric.disjoint_ball_infDist is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α}, Disjoint.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} (Set.{u1} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α))) (Metric.ball.{u1} α _inst_1 x (Metric.infDist.{u1} α _inst_1 x s)) s
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α}, Disjoint.{u1} (Set.{u1} α) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) (BoundedOrder.toOrderBot.{u1} (Set.{u1} α) (Preorder.toLE.{u1} (Set.{u1} α) (PartialOrder.toPreorder.{u1} (Set.{u1} α) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))))) (CompleteLattice.toBoundedOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) (Metric.ball.{u1} α _inst_1 x (Metric.infDist.{u1} α _inst_1 x s)) s
-Case conversion may be inaccurate. Consider using '#align metric.disjoint_ball_inf_dist Metric.disjoint_ball_infDistₓ'. -/
theorem disjoint_ball_infDist : Disjoint (ball x (infDist x s)) s :=
disjoint_left.2 fun y hy =>
not_mem_of_dist_lt_infDist <|
@@ -909,12 +627,6 @@ theorem disjoint_ball_infDist : Disjoint (ball x (infDist x s)) s :=
#align metric.disjoint_ball_inf_dist Metric.disjoint_ball_infDist
-/- warning: metric.ball_inf_dist_subset_compl -> Metric.ball_infDist_subset_compl is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α}, HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) (Metric.ball.{u1} α _inst_1 x (Metric.infDist.{u1} α _inst_1 x s)) (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)) s)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α}, HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) (Metric.ball.{u1} α _inst_1 x (Metric.infDist.{u1} α _inst_1 x s)) (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.instBooleanAlgebraSet.{u1} α)) s)
-Case conversion may be inaccurate. Consider using '#align metric.ball_inf_dist_subset_compl Metric.ball_infDist_subset_complₓ'. -/
theorem ball_infDist_subset_compl : ball x (infDist x s) ⊆ sᶜ :=
disjoint_ball_infDist.subset_compl_right
#align metric.ball_inf_dist_subset_compl Metric.ball_infDist_subset_compl
@@ -925,23 +637,11 @@ theorem ball_infDist_compl_subset : ball x (infDist x (sᶜ)) ⊆ s :=
#align metric.ball_inf_dist_compl_subset Metric.ball_infDist_compl_subset
-/
-/- warning: metric.disjoint_closed_ball_of_lt_inf_dist -> Metric.disjoint_closedBall_of_lt_infDist is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α} {r : Real}, (LT.lt.{0} Real Real.hasLt r (Metric.infDist.{u1} α _inst_1 x s)) -> (Disjoint.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} (Set.{u1} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α))) (Metric.closedBall.{u1} α _inst_1 x r) s)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α} {r : Real}, (LT.lt.{0} Real Real.instLTReal r (Metric.infDist.{u1} α _inst_1 x s)) -> (Disjoint.{u1} (Set.{u1} α) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) (BoundedOrder.toOrderBot.{u1} (Set.{u1} α) (Preorder.toLE.{u1} (Set.{u1} α) (PartialOrder.toPreorder.{u1} (Set.{u1} α) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))))) (CompleteLattice.toBoundedOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) (Metric.closedBall.{u1} α _inst_1 x r) s)
-Case conversion may be inaccurate. Consider using '#align metric.disjoint_closed_ball_of_lt_inf_dist Metric.disjoint_closedBall_of_lt_infDistₓ'. -/
theorem disjoint_closedBall_of_lt_infDist {r : ℝ} (h : r < infDist x s) :
Disjoint (closedBall x r) s :=
disjoint_ball_infDist.mono_left <| closedBall_subset_ball h
#align metric.disjoint_closed_ball_of_lt_inf_dist Metric.disjoint_closedBall_of_lt_infDist
-/- warning: metric.dist_le_inf_dist_add_diam -> Metric.dist_le_infDist_add_diam is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α} {y : α}, (Metric.Bounded.{u1} α _inst_1 s) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) -> (LE.le.{0} Real Real.hasLe (Dist.dist.{u1} α (PseudoMetricSpace.toHasDist.{u1} α _inst_1) x y) (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.hasAdd) (Metric.infDist.{u1} α _inst_1 x s) (Metric.diam.{u1} α _inst_1 s)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α} {y : α}, (Metric.Bounded.{u1} α _inst_1 s) -> (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y s) -> (LE.le.{0} Real Real.instLEReal (Dist.dist.{u1} α (PseudoMetricSpace.toDist.{u1} α _inst_1) x y) (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.instAddReal) (Metric.infDist.{u1} α _inst_1 x s) (Metric.diam.{u1} α _inst_1 s)))
-Case conversion may be inaccurate. Consider using '#align metric.dist_le_inf_dist_add_diam Metric.dist_le_infDist_add_diamₓ'. -/
theorem dist_le_infDist_add_diam (hs : Bounded s) (hy : y ∈ s) : dist x y ≤ infDist x s + diam s :=
by
have A : inf_edist x s ≠ ∞ := inf_edist_ne_top ⟨y, hy⟩
@@ -986,46 +686,22 @@ theorem infDist_closure : infDist x (closure s) = infDist x s := by
#align metric.inf_dist_eq_closure Metric.infDist_closure
-/
-/- warning: metric.inf_dist_zero_of_mem_closure -> Metric.infDist_zero_of_mem_closure is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α}, (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1)) s)) -> (Eq.{1} Real (Metric.infDist.{u1} α _inst_1 x s) (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α}, (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1)) s)) -> (Eq.{1} Real (Metric.infDist.{u1} α _inst_1 x s) (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))
-Case conversion may be inaccurate. Consider using '#align metric.inf_dist_zero_of_mem_closure Metric.infDist_zero_of_mem_closureₓ'. -/
/-- If a point belongs to the closure of `s`, then its infimum distance to `s` equals zero.
The converse is true provided that `s` is nonempty, see `mem_closure_iff_inf_dist_zero`. -/
theorem infDist_zero_of_mem_closure (hx : x ∈ closure s) : infDist x s = 0 := by
rw [← inf_dist_eq_closure]; exact inf_dist_zero_of_mem hx
#align metric.inf_dist_zero_of_mem_closure Metric.infDist_zero_of_mem_closure
-/- warning: metric.mem_closure_iff_inf_dist_zero -> Metric.mem_closure_iff_infDist_zero is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α}, (Set.Nonempty.{u1} α s) -> (Iff (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1)) s)) (Eq.{1} Real (Metric.infDist.{u1} α _inst_1 x s) (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α}, (Set.Nonempty.{u1} α s) -> (Iff (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1)) s)) (Eq.{1} Real (Metric.infDist.{u1} α _inst_1 x s) (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))))
-Case conversion may be inaccurate. Consider using '#align metric.mem_closure_iff_inf_dist_zero Metric.mem_closure_iff_infDist_zeroₓ'. -/
/-- A point belongs to the closure of `s` iff its infimum distance to this set vanishes -/
theorem mem_closure_iff_infDist_zero (h : s.Nonempty) : x ∈ closure s ↔ infDist x s = 0 := by
simp [mem_closure_iff_inf_edist_zero, inf_dist, ENNReal.toReal_eq_zero_iff, inf_edist_ne_top h]
#align metric.mem_closure_iff_inf_dist_zero Metric.mem_closure_iff_infDist_zero
-/- warning: is_closed.mem_iff_inf_dist_zero -> IsClosed.mem_iff_infDist_zero is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α}, (IsClosed.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1)) s) -> (Set.Nonempty.{u1} α s) -> (Iff (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) (Eq.{1} Real (Metric.infDist.{u1} α _inst_1 x s) (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α}, (IsClosed.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1)) s) -> (Set.Nonempty.{u1} α s) -> (Iff (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) (Eq.{1} Real (Metric.infDist.{u1} α _inst_1 x s) (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))))
-Case conversion may be inaccurate. Consider using '#align is_closed.mem_iff_inf_dist_zero IsClosed.mem_iff_infDist_zeroₓ'. -/
/-- Given a closed set `s`, a point belongs to `s` iff its infimum distance to this set vanishes -/
theorem IsClosed.mem_iff_infDist_zero (h : IsClosed s) (hs : s.Nonempty) :
x ∈ s ↔ infDist x s = 0 := by rw [← mem_closure_iff_inf_dist_zero hs, h.closure_eq]
#align is_closed.mem_iff_inf_dist_zero IsClosed.mem_iff_infDist_zero
-/- warning: is_closed.not_mem_iff_inf_dist_pos -> IsClosed.not_mem_iff_infDist_pos is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α}, (IsClosed.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1)) s) -> (Set.Nonempty.{u1} α s) -> (Iff (Not (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s)) (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) (Metric.infDist.{u1} α _inst_1 x s)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α}, (IsClosed.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1)) s) -> (Set.Nonempty.{u1} α s) -> (Iff (Not (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s)) (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) (Metric.infDist.{u1} α _inst_1 x s)))
-Case conversion may be inaccurate. Consider using '#align is_closed.not_mem_iff_inf_dist_pos IsClosed.not_mem_iff_infDist_posₓ'. -/
/-- Given a closed set `s`, a point belongs to `s` iff its infimum distance to this set vanishes -/
theorem IsClosed.not_mem_iff_infDist_pos (h : IsClosed s) (hs : s.Nonempty) :
x ∉ s ↔ 0 < infDist x s := by
@@ -1056,24 +732,12 @@ theorem infDist_inter_closedBall_of_mem (h : y ∈ s) :
#align metric.inf_dist_inter_closed_ball_of_mem Metric.infDist_inter_closedBall_of_mem
-/
-/- warning: is_compact.exists_inf_dist_eq_dist -> IsCompact.exists_infDist_eq_dist is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α}, (IsCompact.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1)) s) -> (Set.Nonempty.{u1} α s) -> (forall (x : α), Exists.{succ u1} α (fun (y : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) => Eq.{1} Real (Metric.infDist.{u1} α _inst_1 x s) (Dist.dist.{u1} α (PseudoMetricSpace.toHasDist.{u1} α _inst_1) x y))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α}, (IsCompact.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1)) s) -> (Set.Nonempty.{u1} α s) -> (forall (x : α), Exists.{succ u1} α (fun (y : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y s) (Eq.{1} Real (Metric.infDist.{u1} α _inst_1 x s) (Dist.dist.{u1} α (PseudoMetricSpace.toDist.{u1} α _inst_1) x y))))
-Case conversion may be inaccurate. Consider using '#align is_compact.exists_inf_dist_eq_dist IsCompact.exists_infDist_eq_distₓ'. -/
theorem IsCompact.exists_infDist_eq_dist (h : IsCompact s) (hne : s.Nonempty) (x : α) :
∃ y ∈ s, infDist x s = dist x y :=
let ⟨y, hys, hy⟩ := h.exists_infEdist_eq_edist hne x
⟨y, hys, by rw [inf_dist, dist_edist, hy]⟩
#align is_compact.exists_inf_dist_eq_dist IsCompact.exists_infDist_eq_dist
-/- warning: is_closed.exists_inf_dist_eq_dist -> IsClosed.exists_infDist_eq_dist is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} [_inst_3 : ProperSpace.{u1} α _inst_1], (IsClosed.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1)) s) -> (Set.Nonempty.{u1} α s) -> (forall (x : α), Exists.{succ u1} α (fun (y : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) => Eq.{1} Real (Metric.infDist.{u1} α _inst_1 x s) (Dist.dist.{u1} α (PseudoMetricSpace.toHasDist.{u1} α _inst_1) x y))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} [_inst_3 : ProperSpace.{u1} α _inst_1], (IsClosed.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1)) s) -> (Set.Nonempty.{u1} α s) -> (forall (x : α), Exists.{succ u1} α (fun (y : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y s) (Eq.{1} Real (Metric.infDist.{u1} α _inst_1 x s) (Dist.dist.{u1} α (PseudoMetricSpace.toDist.{u1} α _inst_1) x y))))
-Case conversion may be inaccurate. Consider using '#align is_closed.exists_inf_dist_eq_dist IsClosed.exists_infDist_eq_distₓ'. -/
theorem IsClosed.exists_infDist_eq_dist [ProperSpace α] (h : IsClosed s) (hne : s.Nonempty)
(x : α) : ∃ y ∈ s, infDist x s = dist x y :=
by
@@ -1087,12 +751,6 @@ theorem IsClosed.exists_infDist_eq_dist [ProperSpace α] (h : IsClosed s) (hne :
exact ⟨y, hys, hyd⟩
#align is_closed.exists_inf_dist_eq_dist IsClosed.exists_infDist_eq_dist
-/- warning: metric.exists_mem_closure_inf_dist_eq_dist -> Metric.exists_mem_closure_infDist_eq_dist is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} [_inst_3 : ProperSpace.{u1} α _inst_1], (Set.Nonempty.{u1} α s) -> (forall (x : α), Exists.{succ u1} α (fun (y : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1)) s)) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1)) s)) => Eq.{1} Real (Metric.infDist.{u1} α _inst_1 x s) (Dist.dist.{u1} α (PseudoMetricSpace.toHasDist.{u1} α _inst_1) x y))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} [_inst_3 : ProperSpace.{u1} α _inst_1], (Set.Nonempty.{u1} α s) -> (forall (x : α), Exists.{succ u1} α (fun (y : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1)) s)) (Eq.{1} Real (Metric.infDist.{u1} α _inst_1 x s) (Dist.dist.{u1} α (PseudoMetricSpace.toDist.{u1} α _inst_1) x y))))
-Case conversion may be inaccurate. Consider using '#align metric.exists_mem_closure_inf_dist_eq_dist Metric.exists_mem_closure_infDist_eq_distₓ'. -/
theorem exists_mem_closure_infDist_eq_dist [ProperSpace α] (hne : s.Nonempty) (x : α) :
∃ y ∈ closure s, infDist x s = dist x y := by
simpa only [inf_dist_eq_closure] using is_closed_closure.exists_inf_dist_eq_dist hne.closure x
@@ -1108,45 +766,21 @@ def infNndist (x : α) (s : Set α) : ℝ≥0 :=
#align metric.inf_nndist Metric.infNndist
-/
-/- warning: metric.coe_inf_nndist -> Metric.coe_infNndist is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α}, Eq.{1} Real ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) NNReal Real (HasLiftT.mk.{1, 1} NNReal Real (CoeTCₓ.coe.{1, 1} NNReal Real (coeBase.{1, 1} NNReal Real NNReal.Real.hasCoe))) (Metric.infNndist.{u1} α _inst_1 x s)) (Metric.infDist.{u1} α _inst_1 x s)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α}, Eq.{1} Real (NNReal.toReal (Metric.infNndist.{u1} α _inst_1 x s)) (Metric.infDist.{u1} α _inst_1 x s)
-Case conversion may be inaccurate. Consider using '#align metric.coe_inf_nndist Metric.coe_infNndistₓ'. -/
@[simp]
theorem coe_infNndist : (infNndist x s : ℝ) = infDist x s :=
rfl
#align metric.coe_inf_nndist Metric.coe_infNndist
-/- warning: metric.lipschitz_inf_nndist_pt -> Metric.lipschitz_infNndist_pt is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] (s : Set.{u1} α), LipschitzWith.{u1, 0} α NNReal (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) (PseudoMetricSpace.toPseudoEMetricSpace.{0} NNReal NNReal.pseudoMetricSpace) (OfNat.ofNat.{0} NNReal 1 (OfNat.mk.{0} NNReal 1 (One.one.{0} NNReal (AddMonoidWithOne.toOne.{0} NNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} NNReal (NonAssocSemiring.toAddCommMonoidWithOne.{0} NNReal (Semiring.toNonAssocSemiring.{0} NNReal NNReal.semiring))))))) (fun (x : α) => Metric.infNndist.{u1} α _inst_1 x s)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] (s : Set.{u1} α), LipschitzWith.{u1, 0} α NNReal (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) (EMetricSpace.toPseudoEMetricSpace.{0} NNReal (MetricSpace.toEMetricSpace.{0} NNReal instMetricSpaceNNReal)) (OfNat.ofNat.{0} NNReal 1 (One.toOfNat1.{0} NNReal instNNRealOne)) (fun (x : α) => Metric.infNndist.{u1} α _inst_1 x s)
-Case conversion may be inaccurate. Consider using '#align metric.lipschitz_inf_nndist_pt Metric.lipschitz_infNndist_ptₓ'. -/
/-- The minimal distance to a set (as `ℝ≥0`) is Lipschitz in point with constant 1 -/
theorem lipschitz_infNndist_pt (s : Set α) : LipschitzWith 1 fun x => infNndist x s :=
LipschitzWith.of_le_add fun x y => infDist_le_infDist_add_dist
#align metric.lipschitz_inf_nndist_pt Metric.lipschitz_infNndist_pt
-/- warning: metric.uniform_continuous_inf_nndist_pt -> Metric.uniformContinuous_infNndist_pt is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] (s : Set.{u1} α), UniformContinuous.{u1, 0} α NNReal (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1) (PseudoMetricSpace.toUniformSpace.{0} NNReal NNReal.pseudoMetricSpace) (fun (x : α) => Metric.infNndist.{u1} α _inst_1 x s)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] (s : Set.{u1} α), UniformContinuous.{u1, 0} α NNReal (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1) (PseudoMetricSpace.toUniformSpace.{0} NNReal instPseudoMetricSpaceNNReal) (fun (x : α) => Metric.infNndist.{u1} α _inst_1 x s)
-Case conversion may be inaccurate. Consider using '#align metric.uniform_continuous_inf_nndist_pt Metric.uniformContinuous_infNndist_ptₓ'. -/
/-- The minimal distance to a set (as `ℝ≥0`) is uniformly continuous in point -/
theorem uniformContinuous_infNndist_pt (s : Set α) : UniformContinuous fun x => infNndist x s :=
(lipschitz_infNndist_pt s).UniformContinuous
#align metric.uniform_continuous_inf_nndist_pt Metric.uniformContinuous_infNndist_pt
-/- warning: metric.continuous_inf_nndist_pt -> Metric.continuous_infNndist_pt is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] (s : Set.{u1} α), Continuous.{u1, 0} α NNReal (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1)) NNReal.topologicalSpace (fun (x : α) => Metric.infNndist.{u1} α _inst_1 x s)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] (s : Set.{u1} α), Continuous.{u1, 0} α NNReal (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1)) NNReal.instTopologicalSpaceNNReal (fun (x : α) => Metric.infNndist.{u1} α _inst_1 x s)
-Case conversion may be inaccurate. Consider using '#align metric.continuous_inf_nndist_pt Metric.continuous_infNndist_ptₓ'. -/
/-- The minimal distance to a set (as `ℝ≥0`) is continuous in point -/
theorem continuous_infNndist_pt (s : Set α) : Continuous fun x => infNndist x s :=
(uniformContinuous_infNndist_pt s).Continuous
@@ -1164,22 +798,10 @@ def hausdorffDist (s t : Set α) : ℝ :=
#align metric.Hausdorff_dist Metric.hausdorffDist
-/
-/- warning: metric.Hausdorff_dist_nonneg -> Metric.hausdorffDist_nonneg is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) (Metric.hausdorffDist.{u1} α _inst_1 s t)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) (Metric.hausdorffDist.{u1} α _inst_1 s t)
-Case conversion may be inaccurate. Consider using '#align metric.Hausdorff_dist_nonneg Metric.hausdorffDist_nonnegₓ'. -/
/-- The Hausdorff distance is nonnegative -/
theorem hausdorffDist_nonneg : 0 ≤ hausdorffDist s t := by simp [Hausdorff_dist]
#align metric.Hausdorff_dist_nonneg Metric.hausdorffDist_nonneg
-/- warning: metric.Hausdorff_edist_ne_top_of_nonempty_of_bounded -> Metric.hausdorffEdist_ne_top_of_nonempty_of_bounded is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (Set.Nonempty.{u1} α s) -> (Set.Nonempty.{u1} α t) -> (Metric.Bounded.{u1} α _inst_1 s) -> (Metric.Bounded.{u1} α _inst_1 t) -> (Ne.{1} ENNReal (EMetric.hausdorffEdist.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) s t) (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (Set.Nonempty.{u1} α s) -> (Set.Nonempty.{u1} α t) -> (Metric.Bounded.{u1} α _inst_1 s) -> (Metric.Bounded.{u1} α _inst_1 t) -> (Ne.{1} ENNReal (EMetric.hausdorffEdist.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) s t) (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))
-Case conversion may be inaccurate. Consider using '#align metric.Hausdorff_edist_ne_top_of_nonempty_of_bounded Metric.hausdorffEdist_ne_top_of_nonempty_of_boundedₓ'. -/
/-- If two sets are nonempty and bounded in a metric space, they are at finite Hausdorff
edistance. -/
theorem hausdorffEdist_ne_top_of_nonempty_of_bounded (hs : s.Nonempty) (ht : t.Nonempty)
@@ -1205,12 +827,6 @@ theorem hausdorffEdist_ne_top_of_nonempty_of_bounded (hs : s.Nonempty) (ht : t.N
exact ne_top_of_le_ne_top ENNReal.ofReal_ne_top this
#align metric.Hausdorff_edist_ne_top_of_nonempty_of_bounded Metric.hausdorffEdist_ne_top_of_nonempty_of_bounded
-/- warning: metric.Hausdorff_dist_self_zero -> Metric.hausdorffDist_self_zero is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α}, Eq.{1} Real (Metric.hausdorffDist.{u1} α _inst_1 s s) (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α}, Eq.{1} Real (Metric.hausdorffDist.{u1} α _inst_1 s s) (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))
-Case conversion may be inaccurate. Consider using '#align metric.Hausdorff_dist_self_zero Metric.hausdorffDist_self_zeroₓ'. -/
/-- The Hausdorff distance between a set and itself is zero -/
@[simp]
theorem hausdorffDist_self_zero : hausdorffDist s s = 0 := by simp [Hausdorff_dist]
@@ -1223,12 +839,6 @@ theorem hausdorffDist_comm : hausdorffDist s t = hausdorffDist t s := by
#align metric.Hausdorff_dist_comm Metric.hausdorffDist_comm
-/
-/- warning: metric.Hausdorff_dist_empty -> Metric.hausdorffDist_empty is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α}, Eq.{1} Real (Metric.hausdorffDist.{u1} α _inst_1 s (EmptyCollection.emptyCollection.{u1} (Set.{u1} α) (Set.hasEmptyc.{u1} α))) (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α}, Eq.{1} Real (Metric.hausdorffDist.{u1} α _inst_1 s (EmptyCollection.emptyCollection.{u1} (Set.{u1} α) (Set.instEmptyCollectionSet.{u1} α))) (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))
-Case conversion may be inaccurate. Consider using '#align metric.Hausdorff_dist_empty Metric.hausdorffDist_emptyₓ'. -/
/-- The Hausdorff distance to the empty set vanishes (if you want to have the more reasonable
value ∞ instead, use `Hausdorff_edist`, which takes values in ℝ≥0∞) -/
@[simp]
@@ -1239,24 +849,12 @@ theorem hausdorffDist_empty : hausdorffDist s ∅ = 0 :=
· simp [Hausdorff_dist, Hausdorff_edist_empty h]
#align metric.Hausdorff_dist_empty Metric.hausdorffDist_empty
-/- warning: metric.Hausdorff_dist_empty' -> Metric.hausdorffDist_empty' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α}, Eq.{1} Real (Metric.hausdorffDist.{u1} α _inst_1 (EmptyCollection.emptyCollection.{u1} (Set.{u1} α) (Set.hasEmptyc.{u1} α)) s) (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α}, Eq.{1} Real (Metric.hausdorffDist.{u1} α _inst_1 (EmptyCollection.emptyCollection.{u1} (Set.{u1} α) (Set.instEmptyCollectionSet.{u1} α)) s) (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))
-Case conversion may be inaccurate. Consider using '#align metric.Hausdorff_dist_empty' Metric.hausdorffDist_empty'ₓ'. -/
/-- The Hausdorff distance to the empty set vanishes (if you want to have the more reasonable
value ∞ instead, use `Hausdorff_edist`, which takes values in ℝ≥0∞) -/
@[simp]
theorem hausdorffDist_empty' : hausdorffDist ∅ s = 0 := by simp [Hausdorff_dist_comm]
#align metric.Hausdorff_dist_empty' Metric.hausdorffDist_empty'
-/- warning: metric.Hausdorff_dist_le_of_inf_dist -> Metric.hausdorffDist_le_of_infDist is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α} {r : Real}, (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) r) -> (forall (x : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) -> (LE.le.{0} Real Real.hasLe (Metric.infDist.{u1} α _inst_1 x t) r)) -> (forall (x : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x t) -> (LE.le.{0} Real Real.hasLe (Metric.infDist.{u1} α _inst_1 x s) r)) -> (LE.le.{0} Real Real.hasLe (Metric.hausdorffDist.{u1} α _inst_1 s t) r)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α} {r : Real}, (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) r) -> (forall (x : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) -> (LE.le.{0} Real Real.instLEReal (Metric.infDist.{u1} α _inst_1 x t) r)) -> (forall (x : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x t) -> (LE.le.{0} Real Real.instLEReal (Metric.infDist.{u1} α _inst_1 x s) r)) -> (LE.le.{0} Real Real.instLEReal (Metric.hausdorffDist.{u1} α _inst_1 s t) r)
-Case conversion may be inaccurate. Consider using '#align metric.Hausdorff_dist_le_of_inf_dist Metric.hausdorffDist_le_of_infDistₓ'. -/
/-- Bounding the Hausdorff distance by bounding the distance of any point
in each set to the other set -/
theorem hausdorffDist_le_of_infDist {r : ℝ} (hr : 0 ≤ r) (H1 : ∀ x ∈ s, infDist x t ≤ r)
@@ -1283,12 +881,6 @@ theorem hausdorffDist_le_of_infDist {r : ℝ} (hr : 0 ≤ r) (H1 : ∀ x ∈ s,
ENNReal.toReal_le_toReal h1 ENNReal.ofReal_ne_top]
#align metric.Hausdorff_dist_le_of_inf_dist Metric.hausdorffDist_le_of_infDist
-/- warning: metric.Hausdorff_dist_le_of_mem_dist -> Metric.hausdorffDist_le_of_mem_dist is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α} {r : Real}, (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) r) -> (forall (x : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) -> (Exists.{succ u1} α (fun (y : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y t) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y t) => LE.le.{0} Real Real.hasLe (Dist.dist.{u1} α (PseudoMetricSpace.toHasDist.{u1} α _inst_1) x y) r)))) -> (forall (x : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x t) -> (Exists.{succ u1} α (fun (y : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) => LE.le.{0} Real Real.hasLe (Dist.dist.{u1} α (PseudoMetricSpace.toHasDist.{u1} α _inst_1) x y) r)))) -> (LE.le.{0} Real Real.hasLe (Metric.hausdorffDist.{u1} α _inst_1 s t) r)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α} {r : Real}, (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) r) -> (forall (x : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) -> (Exists.{succ u1} α (fun (y : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y t) (LE.le.{0} Real Real.instLEReal (Dist.dist.{u1} α (PseudoMetricSpace.toDist.{u1} α _inst_1) x y) r)))) -> (forall (x : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x t) -> (Exists.{succ u1} α (fun (y : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y s) (LE.le.{0} Real Real.instLEReal (Dist.dist.{u1} α (PseudoMetricSpace.toDist.{u1} α _inst_1) x y) r)))) -> (LE.le.{0} Real Real.instLEReal (Metric.hausdorffDist.{u1} α _inst_1 s t) r)
-Case conversion may be inaccurate. Consider using '#align metric.Hausdorff_dist_le_of_mem_dist Metric.hausdorffDist_le_of_mem_distₓ'. -/
/-- Bounding the Hausdorff distance by exhibiting, for any point in each set,
another point in the other set at controlled distance -/
theorem hausdorffDist_le_of_mem_dist {r : ℝ} (hr : 0 ≤ r) (H1 : ∀ x ∈ s, ∃ y ∈ t, dist x y ≤ r)
@@ -1303,12 +895,6 @@ theorem hausdorffDist_le_of_mem_dist {r : ℝ} (hr : 0 ≤ r) (H1 : ∀ x ∈ s,
exact le_trans (inf_dist_le_dist_of_mem ys) hy
#align metric.Hausdorff_dist_le_of_mem_dist Metric.hausdorffDist_le_of_mem_dist
-/- warning: metric.Hausdorff_dist_le_diam -> Metric.hausdorffDist_le_diam is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (Set.Nonempty.{u1} α s) -> (Metric.Bounded.{u1} α _inst_1 s) -> (Set.Nonempty.{u1} α t) -> (Metric.Bounded.{u1} α _inst_1 t) -> (LE.le.{0} Real Real.hasLe (Metric.hausdorffDist.{u1} α _inst_1 s t) (Metric.diam.{u1} α _inst_1 (Union.union.{u1} (Set.{u1} α) (Set.hasUnion.{u1} α) s t)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (Set.Nonempty.{u1} α s) -> (Metric.Bounded.{u1} α _inst_1 s) -> (Set.Nonempty.{u1} α t) -> (Metric.Bounded.{u1} α _inst_1 t) -> (LE.le.{0} Real Real.instLEReal (Metric.hausdorffDist.{u1} α _inst_1 s t) (Metric.diam.{u1} α _inst_1 (Union.union.{u1} (Set.{u1} α) (Set.instUnionSet.{u1} α) s t)))
-Case conversion may be inaccurate. Consider using '#align metric.Hausdorff_dist_le_diam Metric.hausdorffDist_le_diamₓ'. -/
/-- The Hausdorff distance is controlled by the diameter of the union -/
theorem hausdorffDist_le_diam (hs : s.Nonempty) (bs : Bounded s) (ht : t.Nonempty)
(bt : Bounded t) : hausdorffDist s t ≤ diam (s ∪ t) :=
@@ -1328,12 +914,6 @@ theorem hausdorffDist_le_diam (hs : s.Nonempty) (bs : Bounded s) (ht : t.Nonempt
(subset_union_left _ _ xs)⟩
#align metric.Hausdorff_dist_le_diam Metric.hausdorffDist_le_diam
-/- warning: metric.inf_dist_le_Hausdorff_dist_of_mem -> Metric.infDist_le_hausdorffDist_of_mem is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α} {x : α}, (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) -> (Ne.{1} ENNReal (EMetric.hausdorffEdist.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) s t) (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder)))) -> (LE.le.{0} Real Real.hasLe (Metric.infDist.{u1} α _inst_1 x t) (Metric.hausdorffDist.{u1} α _inst_1 s t))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α} {x : α}, (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) -> (Ne.{1} ENNReal (EMetric.hausdorffEdist.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) s t) (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal)))) -> (LE.le.{0} Real Real.instLEReal (Metric.infDist.{u1} α _inst_1 x t) (Metric.hausdorffDist.{u1} α _inst_1 s t))
-Case conversion may be inaccurate. Consider using '#align metric.inf_dist_le_Hausdorff_dist_of_mem Metric.infDist_le_hausdorffDist_of_memₓ'. -/
/-- The distance to a set is controlled by the Hausdorff distance -/
theorem infDist_le_hausdorffDist_of_mem (hx : x ∈ s) (fin : hausdorffEdist s t ≠ ⊤) :
infDist x t ≤ hausdorffDist s t :=
@@ -1343,12 +923,6 @@ theorem infDist_le_hausdorffDist_of_mem (hx : x ∈ s) (fin : hausdorffEdist s t
exact inf_edist_le_Hausdorff_edist_of_mem hx
#align metric.inf_dist_le_Hausdorff_dist_of_mem Metric.infDist_le_hausdorffDist_of_mem
-/- warning: metric.exists_dist_lt_of_Hausdorff_dist_lt -> Metric.exists_dist_lt_of_hausdorffDist_lt is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α} {x : α} {r : Real}, (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) -> (LT.lt.{0} Real Real.hasLt (Metric.hausdorffDist.{u1} α _inst_1 s t) r) -> (Ne.{1} ENNReal (EMetric.hausdorffEdist.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) s t) (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder)))) -> (Exists.{succ u1} α (fun (y : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y t) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y t) => LT.lt.{0} Real Real.hasLt (Dist.dist.{u1} α (PseudoMetricSpace.toHasDist.{u1} α _inst_1) x y) r)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α} {x : α} {r : Real}, (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) -> (LT.lt.{0} Real Real.instLTReal (Metric.hausdorffDist.{u1} α _inst_1 s t) r) -> (Ne.{1} ENNReal (EMetric.hausdorffEdist.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) s t) (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal)))) -> (Exists.{succ u1} α (fun (y : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y t) (LT.lt.{0} Real Real.instLTReal (Dist.dist.{u1} α (PseudoMetricSpace.toDist.{u1} α _inst_1) x y) r)))
-Case conversion may be inaccurate. Consider using '#align metric.exists_dist_lt_of_Hausdorff_dist_lt Metric.exists_dist_lt_of_hausdorffDist_ltₓ'. -/
/-- If the Hausdorff distance is `<r`, then any point in one of the sets is at distance
`<r` of a point in the other set -/
theorem exists_dist_lt_of_hausdorffDist_lt {r : ℝ} (h : x ∈ s) (H : hausdorffDist s t < r)
@@ -1363,12 +937,6 @@ theorem exists_dist_lt_of_hausdorffDist_lt {r : ℝ} (h : x ∈ s) (H : hausdorf
exact ⟨y, hy, yr⟩
#align metric.exists_dist_lt_of_Hausdorff_dist_lt Metric.exists_dist_lt_of_hausdorffDist_lt
-/- warning: metric.exists_dist_lt_of_Hausdorff_dist_lt' -> Metric.exists_dist_lt_of_hausdorffDist_lt' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α} {y : α} {r : Real}, (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y t) -> (LT.lt.{0} Real Real.hasLt (Metric.hausdorffDist.{u1} α _inst_1 s t) r) -> (Ne.{1} ENNReal (EMetric.hausdorffEdist.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) s t) (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder)))) -> (Exists.{succ u1} α (fun (x : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) => LT.lt.{0} Real Real.hasLt (Dist.dist.{u1} α (PseudoMetricSpace.toHasDist.{u1} α _inst_1) x y) r)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α} {y : α} {r : Real}, (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y t) -> (LT.lt.{0} Real Real.instLTReal (Metric.hausdorffDist.{u1} α _inst_1 s t) r) -> (Ne.{1} ENNReal (EMetric.hausdorffEdist.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) s t) (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal)))) -> (Exists.{succ u1} α (fun (x : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) (LT.lt.{0} Real Real.instLTReal (Dist.dist.{u1} α (PseudoMetricSpace.toDist.{u1} α _inst_1) x y) r)))
-Case conversion may be inaccurate. Consider using '#align metric.exists_dist_lt_of_Hausdorff_dist_lt' Metric.exists_dist_lt_of_hausdorffDist_lt'ₓ'. -/
/-- If the Hausdorff distance is `<r`, then any point in one of the sets is at distance
`<r` of a point in the other set -/
theorem exists_dist_lt_of_hausdorffDist_lt' {r : ℝ} (h : y ∈ t) (H : hausdorffDist s t < r)
@@ -1379,12 +947,6 @@ theorem exists_dist_lt_of_hausdorffDist_lt' {r : ℝ} (h : y ∈ t) (H : hausdor
simpa [dist_comm] using exists_dist_lt_of_Hausdorff_dist_lt h H Fin
#align metric.exists_dist_lt_of_Hausdorff_dist_lt' Metric.exists_dist_lt_of_hausdorffDist_lt'
-/- warning: metric.inf_dist_le_inf_dist_add_Hausdorff_dist -> Metric.infDist_le_infDist_add_hausdorffDist is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α} {x : α}, (Ne.{1} ENNReal (EMetric.hausdorffEdist.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) s t) (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder)))) -> (LE.le.{0} Real Real.hasLe (Metric.infDist.{u1} α _inst_1 x t) (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.hasAdd) (Metric.infDist.{u1} α _inst_1 x s) (Metric.hausdorffDist.{u1} α _inst_1 s t)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α} {x : α}, (Ne.{1} ENNReal (EMetric.hausdorffEdist.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) s t) (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal)))) -> (LE.le.{0} Real Real.instLEReal (Metric.infDist.{u1} α _inst_1 x t) (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.instAddReal) (Metric.infDist.{u1} α _inst_1 x s) (Metric.hausdorffDist.{u1} α _inst_1 s t)))
-Case conversion may be inaccurate. Consider using '#align metric.inf_dist_le_inf_dist_add_Hausdorff_dist Metric.infDist_le_infDist_add_hausdorffDistₓ'. -/
/-- The infimum distance to `s` and `t` are the same, up to the Hausdorff distance
between `s` and `t` -/
theorem infDist_le_infDist_add_hausdorffDist (fin : hausdorffEdist s t ≠ ⊤) :
@@ -1406,12 +968,6 @@ theorem hausdorffDist_image (h : Isometry Φ) :
#align metric.Hausdorff_dist_image Metric.hausdorffDist_image
-/
-/- warning: metric.Hausdorff_dist_triangle -> Metric.hausdorffDist_triangle is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α} {u : Set.{u1} α}, (Ne.{1} ENNReal (EMetric.hausdorffEdist.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) s t) (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder)))) -> (LE.le.{0} Real Real.hasLe (Metric.hausdorffDist.{u1} α _inst_1 s u) (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.hasAdd) (Metric.hausdorffDist.{u1} α _inst_1 s t) (Metric.hausdorffDist.{u1} α _inst_1 t u)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α} {u : Set.{u1} α}, (Ne.{1} ENNReal (EMetric.hausdorffEdist.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) s t) (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal)))) -> (LE.le.{0} Real Real.instLEReal (Metric.hausdorffDist.{u1} α _inst_1 s u) (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.instAddReal) (Metric.hausdorffDist.{u1} α _inst_1 s t) (Metric.hausdorffDist.{u1} α _inst_1 t u)))
-Case conversion may be inaccurate. Consider using '#align metric.Hausdorff_dist_triangle Metric.hausdorffDist_triangleₓ'. -/
/-- The Hausdorff distance satisfies the triangular inequality -/
theorem hausdorffDist_triangle (fin : hausdorffEdist s t ≠ ⊤) :
hausdorffDist s u ≤ hausdorffDist s t + hausdorffDist t u :=
@@ -1435,12 +991,6 @@ theorem hausdorffDist_triangle (fin : hausdorffEdist s t ≠ ⊤) :
· simp [ENNReal.add_eq_top, lt_top_iff_ne_top.1 Dtu, Fin]
#align metric.Hausdorff_dist_triangle Metric.hausdorffDist_triangle
-/- warning: metric.Hausdorff_dist_triangle' -> Metric.hausdorffDist_triangle' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α} {u : Set.{u1} α}, (Ne.{1} ENNReal (EMetric.hausdorffEdist.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) t u) (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder)))) -> (LE.le.{0} Real Real.hasLe (Metric.hausdorffDist.{u1} α _inst_1 s u) (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.hasAdd) (Metric.hausdorffDist.{u1} α _inst_1 s t) (Metric.hausdorffDist.{u1} α _inst_1 t u)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α} {u : Set.{u1} α}, (Ne.{1} ENNReal (EMetric.hausdorffEdist.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) t u) (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal)))) -> (LE.le.{0} Real Real.instLEReal (Metric.hausdorffDist.{u1} α _inst_1 s u) (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.instAddReal) (Metric.hausdorffDist.{u1} α _inst_1 s t) (Metric.hausdorffDist.{u1} α _inst_1 t u)))
-Case conversion may be inaccurate. Consider using '#align metric.Hausdorff_dist_triangle' Metric.hausdorffDist_triangle'ₓ'. -/
/-- The Hausdorff distance satisfies the triangular inequality -/
theorem hausdorffDist_triangle' (fin : hausdorffEdist t u ≠ ⊤) :
hausdorffDist s u ≤ hausdorffDist s t + hausdorffDist t u :=
@@ -1451,12 +1001,6 @@ theorem hausdorffDist_triangle' (fin : hausdorffEdist t u ≠ ⊤) :
simpa [add_comm, Hausdorff_dist_comm] using I
#align metric.Hausdorff_dist_triangle' Metric.hausdorffDist_triangle'
-/- warning: metric.Hausdorff_dist_self_closure -> Metric.hausdorffDist_self_closure is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α}, Eq.{1} Real (Metric.hausdorffDist.{u1} α _inst_1 s (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1)) s)) (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α}, Eq.{1} Real (Metric.hausdorffDist.{u1} α _inst_1 s (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1)) s)) (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))
-Case conversion may be inaccurate. Consider using '#align metric.Hausdorff_dist_self_closure Metric.hausdorffDist_self_closureₓ'. -/
/-- The Hausdorff distance between a set and its closure vanish -/
@[simp]
theorem hausdorffDist_self_closure : hausdorffDist s (closure s) = 0 := by simp [Hausdorff_dist]
@@ -1486,12 +1030,6 @@ theorem hausdorffDist_closure : hausdorffDist (closure s) (closure t) = hausdorf
#align metric.Hausdorff_dist_closure Metric.hausdorffDist_closure
-/
-/- warning: metric.Hausdorff_dist_zero_iff_closure_eq_closure -> Metric.hausdorffDist_zero_iff_closure_eq_closure is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (Ne.{1} ENNReal (EMetric.hausdorffEdist.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) s t) (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder)))) -> (Iff (Eq.{1} Real (Metric.hausdorffDist.{u1} α _inst_1 s t) (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))) (Eq.{succ u1} (Set.{u1} α) (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1)) s) (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1)) t)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (Ne.{1} ENNReal (EMetric.hausdorffEdist.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) s t) (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal)))) -> (Iff (Eq.{1} Real (Metric.hausdorffDist.{u1} α _inst_1 s t) (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))) (Eq.{succ u1} (Set.{u1} α) (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1)) s) (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1)) t)))
-Case conversion may be inaccurate. Consider using '#align metric.Hausdorff_dist_zero_iff_closure_eq_closure Metric.hausdorffDist_zero_iff_closure_eq_closureₓ'. -/
/-- Two sets are at zero Hausdorff distance if and only if they have the same closures -/
theorem hausdorffDist_zero_iff_closure_eq_closure (fin : hausdorffEdist s t ≠ ⊤) :
hausdorffDist s t = 0 ↔ closure s = closure t := by
@@ -1499,12 +1037,6 @@ theorem hausdorffDist_zero_iff_closure_eq_closure (fin : hausdorffEdist s t ≠
ENNReal.toReal_eq_zero_iff, Fin]
#align metric.Hausdorff_dist_zero_iff_closure_eq_closure Metric.hausdorffDist_zero_iff_closure_eq_closure
-/- warning: is_closed.Hausdorff_dist_zero_iff_eq -> IsClosed.hausdorffDist_zero_iff_eq is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (IsClosed.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1)) s) -> (IsClosed.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1)) t) -> (Ne.{1} ENNReal (EMetric.hausdorffEdist.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) s t) (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder)))) -> (Iff (Eq.{1} Real (Metric.hausdorffDist.{u1} α _inst_1 s t) (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))) (Eq.{succ u1} (Set.{u1} α) s t))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (IsClosed.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1)) s) -> (IsClosed.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1)) t) -> (Ne.{1} ENNReal (EMetric.hausdorffEdist.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) s t) (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal)))) -> (Iff (Eq.{1} Real (Metric.hausdorffDist.{u1} α _inst_1 s t) (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))) (Eq.{succ u1} (Set.{u1} α) s t))
-Case conversion may be inaccurate. Consider using '#align is_closed.Hausdorff_dist_zero_iff_eq IsClosed.hausdorffDist_zero_iff_eqₓ'. -/
/-- Two closed sets are at zero Hausdorff distance if and only if they coincide -/
theorem IsClosed.hausdorffDist_zero_iff_eq (hs : IsClosed s) (ht : IsClosed t)
(fin : hausdorffEdist s t ≠ ⊤) : hausdorffDist s t = 0 ↔ s = t := by
@@ -1529,22 +1061,10 @@ def thickening (δ : ℝ) (E : Set α) : Set α :=
#align metric.thickening Metric.thickening
-/
-/- warning: metric.mem_thickening_iff_inf_edist_lt -> Metric.mem_thickening_iff_infEdist_lt is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real} {s : Set.{u1} α} {x : α}, Iff (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (Metric.thickening.{u1} α _inst_1 δ s)) (LT.lt.{0} ENNReal (Preorder.toHasLt.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.infEdist.{u1} α _inst_1 x s) (ENNReal.ofReal δ))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real} {s : Set.{u1} α} {x : α}, Iff (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x (Metric.thickening.{u1} α _inst_1 δ s)) (LT.lt.{0} ENNReal (Preorder.toLT.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.infEdist.{u1} α _inst_1 x s) (ENNReal.ofReal δ))
-Case conversion may be inaccurate. Consider using '#align metric.mem_thickening_iff_inf_edist_lt Metric.mem_thickening_iff_infEdist_ltₓ'. -/
theorem mem_thickening_iff_infEdist_lt : x ∈ thickening δ s ↔ infEdist x s < ENNReal.ofReal δ :=
Iff.rfl
#align metric.mem_thickening_iff_inf_edist_lt Metric.mem_thickening_iff_infEdist_lt
-/- warning: metric.thickening_eq_preimage_inf_edist -> Metric.thickening_eq_preimage_infEdist is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (δ : Real) (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Metric.thickening.{u1} α _inst_1 δ E) (Set.preimage.{u1, 0} α ENNReal (fun (x : α) => EMetric.infEdist.{u1} α _inst_1 x E) (Set.Iio.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder)))) (ENNReal.ofReal δ)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (δ : Real) (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Metric.thickening.{u1} α _inst_1 δ E) (Set.preimage.{u1, 0} α ENNReal (fun (x : α) => EMetric.infEdist.{u1} α _inst_1 x E) (Set.Iio.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal)))) (ENNReal.ofReal δ)))
-Case conversion may be inaccurate. Consider using '#align metric.thickening_eq_preimage_inf_edist Metric.thickening_eq_preimage_infEdistₓ'. -/
/-- The (open) thickening equals the preimage of an open interval under `inf_edist`. -/
theorem thickening_eq_preimage_infEdist (δ : ℝ) (E : Set α) :
thickening δ E = (fun x => infEdist x E) ⁻¹' Iio (ENNReal.ofReal δ) :=
@@ -1566,22 +1086,10 @@ theorem thickening_empty (δ : ℝ) : thickening δ (∅ : Set α) = ∅ := by
#align metric.thickening_empty Metric.thickening_empty
-/
-/- warning: metric.thickening_of_nonpos -> Metric.thickening_of_nonpos is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real}, (LE.le.{0} Real Real.hasLe δ (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))) -> (forall (s : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Metric.thickening.{u1} α _inst_1 δ s) (EmptyCollection.emptyCollection.{u1} (Set.{u1} α) (Set.hasEmptyc.{u1} α)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real}, (LE.le.{0} Real Real.instLEReal δ (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))) -> (forall (s : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Metric.thickening.{u1} α _inst_1 δ s) (EmptyCollection.emptyCollection.{u1} (Set.{u1} α) (Set.instEmptyCollectionSet.{u1} α)))
-Case conversion may be inaccurate. Consider using '#align metric.thickening_of_nonpos Metric.thickening_of_nonposₓ'. -/
theorem thickening_of_nonpos (hδ : δ ≤ 0) (s : Set α) : thickening δ s = ∅ :=
eq_empty_of_forall_not_mem fun x => ((ENNReal.ofReal_of_nonpos hδ).trans_le bot_le).not_lt
#align metric.thickening_of_nonpos Metric.thickening_of_nonpos
-/- warning: metric.thickening_mono -> Metric.thickening_mono is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ₁ : Real} {δ₂ : Real}, (LE.le.{0} Real Real.hasLe δ₁ δ₂) -> (forall (E : Set.{u1} α), HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) (Metric.thickening.{u1} α _inst_1 δ₁ E) (Metric.thickening.{u1} α _inst_1 δ₂ E))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ₁ : Real} {δ₂ : Real}, (LE.le.{0} Real Real.instLEReal δ₁ δ₂) -> (forall (E : Set.{u1} α), HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) (Metric.thickening.{u1} α _inst_1 δ₁ E) (Metric.thickening.{u1} α _inst_1 δ₂ E))
-Case conversion may be inaccurate. Consider using '#align metric.thickening_mono Metric.thickening_monoₓ'. -/
/-- The (open) thickening `thickening δ E` of a fixed subset `E` is an increasing function of the
thickening radius `δ`. -/
theorem thickening_mono {δ₁ δ₂ : ℝ} (hle : δ₁ ≤ δ₂) (E : Set α) :
@@ -1597,12 +1105,6 @@ theorem thickening_subset_of_subset (δ : ℝ) {E₁ E₂ : Set α} (h : E₁
#align metric.thickening_subset_of_subset Metric.thickening_subset_of_subset
-/
-/- warning: metric.mem_thickening_iff_exists_edist_lt -> Metric.mem_thickening_iff_exists_edist_lt is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real} (E : Set.{u1} α) (x : α), Iff (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (Metric.thickening.{u1} α _inst_1 δ E)) (Exists.{succ u1} α (fun (z : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) z E) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) z E) => LT.lt.{0} ENNReal (Preorder.toHasLt.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EDist.edist.{u1} α (PseudoEMetricSpace.toHasEdist.{u1} α _inst_1) x z) (ENNReal.ofReal δ))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real} (E : Set.{u1} α) (x : α), Iff (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x (Metric.thickening.{u1} α _inst_1 δ E)) (Exists.{succ u1} α (fun (z : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) z E) (LT.lt.{0} ENNReal (Preorder.toLT.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EDist.edist.{u1} α (PseudoEMetricSpace.toEDist.{u1} α _inst_1) x z) (ENNReal.ofReal δ))))
-Case conversion may be inaccurate. Consider using '#align metric.mem_thickening_iff_exists_edist_lt Metric.mem_thickening_iff_exists_edist_ltₓ'. -/
theorem mem_thickening_iff_exists_edist_lt {δ : ℝ} (E : Set α) (x : α) :
x ∈ thickening δ E ↔ ∃ z ∈ E, edist x z < ENNReal.ofReal δ :=
infEdist_lt_iff
@@ -1616,12 +1118,6 @@ theorem frontier_thickening_subset (E : Set α) {δ : ℝ} :
#align metric.frontier_thickening_subset Metric.frontier_thickening_subset
-/
-/- warning: metric.frontier_thickening_disjoint -> Metric.frontier_thickening_disjoint is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (A : Set.{u1} α), Pairwise.{0} Real (Function.onFun.{1, succ u1, 1} Real (Set.{u1} α) Prop (Disjoint.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} (Set.{u1} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)))) (fun (r : Real) => frontier.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) (Metric.thickening.{u1} α _inst_1 r A)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (A : Set.{u1} α), Pairwise.{0} Real (Function.onFun.{1, succ u1, 1} Real (Set.{u1} α) Prop (Disjoint.{u1} (Set.{u1} α) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) (BoundedOrder.toOrderBot.{u1} (Set.{u1} α) (Preorder.toLE.{u1} (Set.{u1} α) (PartialOrder.toPreorder.{u1} (Set.{u1} α) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))))) (CompleteLattice.toBoundedOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (fun (r : Real) => frontier.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) (Metric.thickening.{u1} α _inst_1 r A)))
-Case conversion may be inaccurate. Consider using '#align metric.frontier_thickening_disjoint Metric.frontier_thickening_disjointₓ'. -/
theorem frontier_thickening_disjoint (A : Set α) :
Pairwise (Disjoint on fun r : ℝ => frontier (thickening r A)) :=
by
@@ -1637,12 +1133,6 @@ theorem frontier_thickening_disjoint (A : Set α) :
variable {X : Type u} [PseudoMetricSpace X]
-/- warning: metric.mem_thickening_iff -> Metric.mem_thickening_iff is a dubious translation:
-lean 3 declaration is
- forall {δ : Real} {X : Type.{u1}} [_inst_2 : PseudoMetricSpace.{u1} X] {E : Set.{u1} X} {x : X}, Iff (Membership.Mem.{u1, u1} X (Set.{u1} X) (Set.hasMem.{u1} X) x (Metric.thickening.{u1} X (PseudoMetricSpace.toPseudoEMetricSpace.{u1} X _inst_2) δ E)) (Exists.{succ u1} X (fun (z : X) => Exists.{0} (Membership.Mem.{u1, u1} X (Set.{u1} X) (Set.hasMem.{u1} X) z E) (fun (H : Membership.Mem.{u1, u1} X (Set.{u1} X) (Set.hasMem.{u1} X) z E) => LT.lt.{0} Real Real.hasLt (Dist.dist.{u1} X (PseudoMetricSpace.toHasDist.{u1} X _inst_2) x z) δ)))
-but is expected to have type
- forall {δ : Real} {X : Type.{u1}} [_inst_2 : PseudoMetricSpace.{u1} X] {E : Set.{u1} X} {x : X}, Iff (Membership.mem.{u1, u1} X (Set.{u1} X) (Set.instMembershipSet.{u1} X) x (Metric.thickening.{u1} X (PseudoMetricSpace.toPseudoEMetricSpace.{u1} X _inst_2) δ E)) (Exists.{succ u1} X (fun (z : X) => And (Membership.mem.{u1, u1} X (Set.{u1} X) (Set.instMembershipSet.{u1} X) z E) (LT.lt.{0} Real Real.instLTReal (Dist.dist.{u1} X (PseudoMetricSpace.toDist.{u1} X _inst_2) x z) δ)))
-Case conversion may be inaccurate. Consider using '#align metric.mem_thickening_iff Metric.mem_thickening_iffₓ'. -/
/-- A point in a metric space belongs to the (open) `δ`-thickening of a subset `E` if and only if
it is at distance less than `δ` from some point of `E`. -/
theorem mem_thickening_iff {E : Set X} {x : X} : x ∈ thickening δ E ↔ ∃ z ∈ E, dist x z < δ :=
@@ -1711,34 +1201,16 @@ def cthickening (δ : ℝ) (E : Set α) : Set α :=
#align metric.cthickening Metric.cthickening
-/
-/- warning: metric.mem_cthickening_iff -> Metric.mem_cthickening_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real} {s : Set.{u1} α} {x : α}, Iff (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (Metric.cthickening.{u1} α _inst_1 δ s)) (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.infEdist.{u1} α _inst_1 x s) (ENNReal.ofReal δ))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real} {s : Set.{u1} α} {x : α}, Iff (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x (Metric.cthickening.{u1} α _inst_1 δ s)) (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.infEdist.{u1} α _inst_1 x s) (ENNReal.ofReal δ))
-Case conversion may be inaccurate. Consider using '#align metric.mem_cthickening_iff Metric.mem_cthickening_iffₓ'. -/
@[simp]
theorem mem_cthickening_iff : x ∈ cthickening δ s ↔ infEdist x s ≤ ENNReal.ofReal δ :=
Iff.rfl
#align metric.mem_cthickening_iff Metric.mem_cthickening_iff
-/- warning: metric.mem_cthickening_of_edist_le -> Metric.mem_cthickening_of_edist_le is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (x : α) (y : α) (δ : Real) (E : Set.{u1} α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y E) -> (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EDist.edist.{u1} α (PseudoEMetricSpace.toHasEdist.{u1} α _inst_1) x y) (ENNReal.ofReal δ)) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (Metric.cthickening.{u1} α _inst_1 δ E))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (x : α) (y : α) (δ : Real) (E : Set.{u1} α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y E) -> (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EDist.edist.{u1} α (PseudoEMetricSpace.toEDist.{u1} α _inst_1) x y) (ENNReal.ofReal δ)) -> (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x (Metric.cthickening.{u1} α _inst_1 δ E))
-Case conversion may be inaccurate. Consider using '#align metric.mem_cthickening_of_edist_le Metric.mem_cthickening_of_edist_leₓ'. -/
theorem mem_cthickening_of_edist_le (x y : α) (δ : ℝ) (E : Set α) (h : y ∈ E)
(h' : edist x y ≤ ENNReal.ofReal δ) : x ∈ cthickening δ E :=
(infEdist_le_edist_of_mem h).trans h'
#align metric.mem_cthickening_of_edist_le Metric.mem_cthickening_of_edist_le
-/- warning: metric.mem_cthickening_of_dist_le -> Metric.mem_cthickening_of_dist_le is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_2 : PseudoMetricSpace.{u1} α] (x : α) (y : α) (δ : Real) (E : Set.{u1} α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y E) -> (LE.le.{0} Real Real.hasLe (Dist.dist.{u1} α (PseudoMetricSpace.toHasDist.{u1} α _inst_2) x y) δ) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (Metric.cthickening.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_2) δ E))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_2 : PseudoMetricSpace.{u1} α] (x : α) (y : α) (δ : Real) (E : Set.{u1} α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y E) -> (LE.le.{0} Real Real.instLEReal (Dist.dist.{u1} α (PseudoMetricSpace.toDist.{u1} α _inst_2) x y) δ) -> (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x (Metric.cthickening.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_2) δ E))
-Case conversion may be inaccurate. Consider using '#align metric.mem_cthickening_of_dist_le Metric.mem_cthickening_of_dist_leₓ'. -/
theorem mem_cthickening_of_dist_le {α : Type _} [PseudoMetricSpace α] (x y : α) (δ : ℝ) (E : Set α)
(h : y ∈ E) (h' : dist x y ≤ δ) : x ∈ cthickening δ E :=
by
@@ -1747,12 +1219,6 @@ theorem mem_cthickening_of_dist_le {α : Type _} [PseudoMetricSpace α] (x y :
exact ENNReal.ofReal_le_ofReal h'
#align metric.mem_cthickening_of_dist_le Metric.mem_cthickening_of_dist_le
-/- warning: metric.cthickening_eq_preimage_inf_edist -> Metric.cthickening_eq_preimage_infEdist is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (δ : Real) (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α _inst_1 δ E) (Set.preimage.{u1, 0} α ENNReal (fun (x : α) => EMetric.infEdist.{u1} α _inst_1 x E) (Set.Iic.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder)))) (ENNReal.ofReal δ)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (δ : Real) (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α _inst_1 δ E) (Set.preimage.{u1, 0} α ENNReal (fun (x : α) => EMetric.infEdist.{u1} α _inst_1 x E) (Set.Iic.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal)))) (ENNReal.ofReal δ)))
-Case conversion may be inaccurate. Consider using '#align metric.cthickening_eq_preimage_inf_edist Metric.cthickening_eq_preimage_infEdistₓ'. -/
theorem cthickening_eq_preimage_infEdist (δ : ℝ) (E : Set α) :
cthickening δ E = (fun x => infEdist x E) ⁻¹' Iic (ENNReal.ofReal δ) :=
rfl
@@ -1773,44 +1239,20 @@ theorem cthickening_empty (δ : ℝ) : cthickening δ (∅ : Set α) = ∅ := by
#align metric.cthickening_empty Metric.cthickening_empty
-/
-/- warning: metric.cthickening_of_nonpos -> Metric.cthickening_of_nonpos is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real}, (LE.le.{0} Real Real.hasLe δ (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))) -> (forall (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α _inst_1 δ E) (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real}, (LE.le.{0} Real Real.instLEReal δ (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))) -> (forall (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α _inst_1 δ E) (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E))
-Case conversion may be inaccurate. Consider using '#align metric.cthickening_of_nonpos Metric.cthickening_of_nonposₓ'. -/
theorem cthickening_of_nonpos {δ : ℝ} (hδ : δ ≤ 0) (E : Set α) : cthickening δ E = closure E := by
ext x; simp [mem_closure_iff_inf_edist_zero, cthickening, ENNReal.ofReal_eq_zero.2 hδ]
#align metric.cthickening_of_nonpos Metric.cthickening_of_nonpos
-/- warning: metric.cthickening_zero -> Metric.cthickening_zero is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α _inst_1 (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) E) (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α _inst_1 (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) E) (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E)
-Case conversion may be inaccurate. Consider using '#align metric.cthickening_zero Metric.cthickening_zeroₓ'. -/
/-- The closed thickening with radius zero is the closure of the set. -/
@[simp]
theorem cthickening_zero (E : Set α) : cthickening 0 E = closure E :=
cthickening_of_nonpos le_rfl E
#align metric.cthickening_zero Metric.cthickening_zero
-/- warning: metric.cthickening_max_zero -> Metric.cthickening_max_zero is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (δ : Real) (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α _inst_1 (LinearOrder.max.{0} Real Real.linearOrder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) E) (Metric.cthickening.{u1} α _inst_1 δ E)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (δ : Real) (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α _inst_1 (Max.max.{0} Real (LinearOrderedRing.toMax.{0} Real Real.instLinearOrderedRingReal) (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) E) (Metric.cthickening.{u1} α _inst_1 δ E)
-Case conversion may be inaccurate. Consider using '#align metric.cthickening_max_zero Metric.cthickening_max_zeroₓ'. -/
theorem cthickening_max_zero (δ : ℝ) (E : Set α) : cthickening (max 0 δ) E = cthickening δ E := by
cases le_total δ 0 <;> simp [cthickening_of_nonpos, *]
#align metric.cthickening_max_zero Metric.cthickening_max_zero
-/- warning: metric.cthickening_mono -> Metric.cthickening_mono is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ₁ : Real} {δ₂ : Real}, (LE.le.{0} Real Real.hasLe δ₁ δ₂) -> (forall (E : Set.{u1} α), HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) (Metric.cthickening.{u1} α _inst_1 δ₁ E) (Metric.cthickening.{u1} α _inst_1 δ₂ E))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ₁ : Real} {δ₂ : Real}, (LE.le.{0} Real Real.instLEReal δ₁ δ₂) -> (forall (E : Set.{u1} α), HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) (Metric.cthickening.{u1} α _inst_1 δ₁ E) (Metric.cthickening.{u1} α _inst_1 δ₂ E))
-Case conversion may be inaccurate. Consider using '#align metric.cthickening_mono Metric.cthickening_monoₓ'. -/
/-- The closed thickening `cthickening δ E` of a fixed subset `E` is an increasing function of
the thickening radius `δ`. -/
theorem cthickening_mono {δ₁ δ₂ : ℝ} (hle : δ₁ ≤ δ₂) (E : Set α) :
@@ -1818,12 +1260,6 @@ theorem cthickening_mono {δ₁ δ₂ : ℝ} (hle : δ₁ ≤ δ₂) (E : Set α
preimage_mono (Iic_subset_Iic.mpr (ENNReal.ofReal_le_ofReal hle))
#align metric.cthickening_mono Metric.cthickening_mono
-/- warning: metric.cthickening_singleton -> Metric.cthickening_singleton is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_2 : PseudoMetricSpace.{u1} α] (x : α) {δ : Real}, (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) -> (Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_2) δ (Singleton.singleton.{u1, u1} α (Set.{u1} α) (Set.hasSingleton.{u1} α) x)) (Metric.closedBall.{u1} α _inst_2 x δ))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_2 : PseudoMetricSpace.{u1} α] (x : α) {δ : Real}, (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) -> (Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_2) δ (Singleton.singleton.{u1, u1} α (Set.{u1} α) (Set.instSingletonSet.{u1} α) x)) (Metric.closedBall.{u1} α _inst_2 x δ))
-Case conversion may be inaccurate. Consider using '#align metric.cthickening_singleton Metric.cthickening_singletonₓ'. -/
@[simp]
theorem cthickening_singleton {α : Type _} [PseudoMetricSpace α] (x : α) {δ : ℝ} (hδ : 0 ≤ δ) :
cthickening δ ({x} : Set α) = closedBall x δ := by ext y;
@@ -1848,23 +1284,11 @@ theorem cthickening_subset_of_subset (δ : ℝ) {E₁ E₂ : Set α} (h : E₁
#align metric.cthickening_subset_of_subset Metric.cthickening_subset_of_subset
-/
-/- warning: metric.cthickening_subset_thickening -> Metric.cthickening_subset_thickening is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ₁ : NNReal} {δ₂ : Real}, (LT.lt.{0} Real Real.hasLt ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) NNReal Real (HasLiftT.mk.{1, 1} NNReal Real (CoeTCₓ.coe.{1, 1} NNReal Real (coeBase.{1, 1} NNReal Real NNReal.Real.hasCoe))) δ₁) δ₂) -> (forall (E : Set.{u1} α), HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) (Metric.cthickening.{u1} α _inst_1 ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) NNReal Real (HasLiftT.mk.{1, 1} NNReal Real (CoeTCₓ.coe.{1, 1} NNReal Real (coeBase.{1, 1} NNReal Real NNReal.Real.hasCoe))) δ₁) E) (Metric.thickening.{u1} α _inst_1 δ₂ E))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ₁ : NNReal} {δ₂ : Real}, (LT.lt.{0} Real Real.instLTReal (NNReal.toReal δ₁) δ₂) -> (forall (E : Set.{u1} α), HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) (Metric.cthickening.{u1} α _inst_1 (NNReal.toReal δ₁) E) (Metric.thickening.{u1} α _inst_1 δ₂ E))
-Case conversion may be inaccurate. Consider using '#align metric.cthickening_subset_thickening Metric.cthickening_subset_thickeningₓ'. -/
theorem cthickening_subset_thickening {δ₁ : ℝ≥0} {δ₂ : ℝ} (hlt : (δ₁ : ℝ) < δ₂) (E : Set α) :
cthickening δ₁ E ⊆ thickening δ₂ E := fun _ hx =>
lt_of_le_of_lt hx ((ENNReal.ofReal_lt_ofReal_iff (lt_of_le_of_lt δ₁.Prop hlt)).mpr hlt)
#align metric.cthickening_subset_thickening Metric.cthickening_subset_thickening
-/- warning: metric.cthickening_subset_thickening' -> Metric.cthickening_subset_thickening' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ₁ : Real} {δ₂ : Real}, (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ₂) -> (LT.lt.{0} Real Real.hasLt δ₁ δ₂) -> (forall (E : Set.{u1} α), HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) (Metric.cthickening.{u1} α _inst_1 δ₁ E) (Metric.thickening.{u1} α _inst_1 δ₂ E))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ₁ : Real} {δ₂ : Real}, (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ₂) -> (LT.lt.{0} Real Real.instLTReal δ₁ δ₂) -> (forall (E : Set.{u1} α), HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) (Metric.cthickening.{u1} α _inst_1 δ₁ E) (Metric.thickening.{u1} α _inst_1 δ₂ E))
-Case conversion may be inaccurate. Consider using '#align metric.cthickening_subset_thickening' Metric.cthickening_subset_thickening'ₓ'. -/
/-- The closed thickening `cthickening δ₁ E` is contained in the open thickening `thickening δ₂ E`
if the radius of the latter is positive and larger. -/
theorem cthickening_subset_thickening' {δ₁ δ₂ : ℝ} (δ₂_pos : 0 < δ₂) (hlt : δ₁ < δ₂) (E : Set α) :
@@ -1880,12 +1304,6 @@ theorem thickening_subset_cthickening (δ : ℝ) (E : Set α) : thickening δ E
#align metric.thickening_subset_cthickening Metric.thickening_subset_cthickening
-/
-/- warning: metric.thickening_subset_cthickening_of_le -> Metric.thickening_subset_cthickening_of_le is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ₁ : Real} {δ₂ : Real}, (LE.le.{0} Real Real.hasLe δ₁ δ₂) -> (forall (E : Set.{u1} α), HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) (Metric.thickening.{u1} α _inst_1 δ₁ E) (Metric.cthickening.{u1} α _inst_1 δ₂ E))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ₁ : Real} {δ₂ : Real}, (LE.le.{0} Real Real.instLEReal δ₁ δ₂) -> (forall (E : Set.{u1} α), HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) (Metric.thickening.{u1} α _inst_1 δ₁ E) (Metric.cthickening.{u1} α _inst_1 δ₂ E))
-Case conversion may be inaccurate. Consider using '#align metric.thickening_subset_cthickening_of_le Metric.thickening_subset_cthickening_of_leₓ'. -/
theorem thickening_subset_cthickening_of_le {δ₁ δ₂ : ℝ} (hle : δ₁ ≤ δ₂) (E : Set α) :
thickening δ₁ E ⊆ cthickening δ₂ E :=
(thickening_subset_cthickening δ₁ E).trans (cthickening_mono hle E)
@@ -1925,24 +1343,12 @@ theorem closure_subset_cthickening (δ : ℝ) (E : Set α) : closure E ⊆ cthic
#align metric.closure_subset_cthickening Metric.closure_subset_cthickening
-/
-/- warning: metric.closure_subset_thickening -> Metric.closure_subset_thickening is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real}, (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) -> (forall (E : Set.{u1} α), HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E) (Metric.thickening.{u1} α _inst_1 δ E))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real}, (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) -> (forall (E : Set.{u1} α), HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E) (Metric.thickening.{u1} α _inst_1 δ E))
-Case conversion may be inaccurate. Consider using '#align metric.closure_subset_thickening Metric.closure_subset_thickeningₓ'. -/
/-- The (open) thickening of a set contains the closure of the set. -/
theorem closure_subset_thickening {δ : ℝ} (δ_pos : 0 < δ) (E : Set α) :
closure E ⊆ thickening δ E := by rw [← cthickening_zero];
exact cthickening_subset_thickening' δ_pos δ_pos E
#align metric.closure_subset_thickening Metric.closure_subset_thickening
-/- warning: metric.self_subset_thickening -> Metric.self_subset_thickening is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real}, (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) -> (forall (E : Set.{u1} α), HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) E (Metric.thickening.{u1} α _inst_1 δ E))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real}, (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) -> (forall (E : Set.{u1} α), HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) E (Metric.thickening.{u1} α _inst_1 δ E))
-Case conversion may be inaccurate. Consider using '#align metric.self_subset_thickening Metric.self_subset_thickeningₓ'. -/
/-- A set is contained in its own (open) thickening. -/
theorem self_subset_thickening {δ : ℝ} (δ_pos : 0 < δ) (E : Set α) : E ⊆ thickening δ E :=
(@subset_closure _ _ E).trans (closure_subset_thickening δ_pos E)
@@ -1955,22 +1361,10 @@ theorem self_subset_cthickening {δ : ℝ} (E : Set α) : E ⊆ cthickening δ E
#align metric.self_subset_cthickening Metric.self_subset_cthickening
-/
-/- warning: metric.thickening_mem_nhds_set -> Metric.thickening_mem_nhdsSet is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (E : Set.{u1} α) {δ : Real}, (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) -> (Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) (Metric.thickening.{u1} α _inst_1 δ E) (nhdsSet.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (E : Set.{u1} α) {δ : Real}, (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) -> (Membership.mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (instMembershipSetFilter.{u1} α) (Metric.thickening.{u1} α _inst_1 δ E) (nhdsSet.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E))
-Case conversion may be inaccurate. Consider using '#align metric.thickening_mem_nhds_set Metric.thickening_mem_nhdsSetₓ'. -/
theorem thickening_mem_nhdsSet (E : Set α) {δ : ℝ} (hδ : 0 < δ) : thickening δ E ∈ 𝓝ˢ E :=
isOpen_thickening.mem_nhdsSet.2 <| self_subset_thickening hδ E
#align metric.thickening_mem_nhds_set Metric.thickening_mem_nhdsSet
-/- warning: metric.cthickening_mem_nhds_set -> Metric.cthickening_mem_nhdsSet is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (E : Set.{u1} α) {δ : Real}, (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) -> (Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) (Metric.cthickening.{u1} α _inst_1 δ E) (nhdsSet.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (E : Set.{u1} α) {δ : Real}, (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) -> (Membership.mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (instMembershipSetFilter.{u1} α) (Metric.cthickening.{u1} α _inst_1 δ E) (nhdsSet.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E))
-Case conversion may be inaccurate. Consider using '#align metric.cthickening_mem_nhds_set Metric.cthickening_mem_nhdsSetₓ'. -/
theorem cthickening_mem_nhdsSet (E : Set α) {δ : ℝ} (hδ : 0 < δ) : cthickening δ E ∈ 𝓝ˢ E :=
mem_of_superset (thickening_mem_nhdsSet E hδ) (thickening_subset_cthickening _ _)
#align metric.cthickening_mem_nhds_set Metric.cthickening_mem_nhdsSet
@@ -1991,24 +1385,12 @@ theorem cthickening_union (δ : ℝ) (s t : Set α) :
#align metric.cthickening_union Metric.cthickening_union
-/
-/- warning: metric.thickening_Union -> Metric.thickening_iUnion is a dubious translation:
-lean 3 declaration is
- forall {ι : Sort.{u2}} {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (δ : Real) (f : ι -> (Set.{u1} α)), Eq.{succ u1} (Set.{u1} α) (Metric.thickening.{u1} α _inst_1 δ (Set.iUnion.{u1, u2} α ι (fun (i : ι) => f i))) (Set.iUnion.{u1, u2} α ι (fun (i : ι) => Metric.thickening.{u1} α _inst_1 δ (f i)))
-but is expected to have type
- forall {ι : Sort.{u1}} {α : Type.{u2}} [_inst_1 : PseudoEMetricSpace.{u2} α] (δ : Real) (f : ι -> (Set.{u2} α)), Eq.{succ u2} (Set.{u2} α) (Metric.thickening.{u2} α _inst_1 δ (Set.iUnion.{u2, u1} α ι (fun (i : ι) => f i))) (Set.iUnion.{u2, u1} α ι (fun (i : ι) => Metric.thickening.{u2} α _inst_1 δ (f i)))
-Case conversion may be inaccurate. Consider using '#align metric.thickening_Union Metric.thickening_iUnionₓ'. -/
@[simp]
theorem thickening_iUnion (δ : ℝ) (f : ι → Set α) :
thickening δ (⋃ i, f i) = ⋃ i, thickening δ (f i) := by
simp_rw [thickening, inf_edist_Union, iInf_lt_iff, set_of_exists]
#align metric.thickening_Union Metric.thickening_iUnion
-/- warning: metric.ediam_cthickening_le -> Metric.ediam_cthickening_le is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} (ε : NNReal), LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.diam.{u1} α _inst_1 (Metric.cthickening.{u1} α _inst_1 ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) NNReal Real (HasLiftT.mk.{1, 1} NNReal Real (CoeTCₓ.coe.{1, 1} NNReal Real (coeBase.{1, 1} NNReal Real NNReal.Real.hasCoe))) ε) s)) (HAdd.hAdd.{0, 0, 0} ENNReal ENNReal ENNReal (instHAdd.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring)))))))) (EMetric.diam.{u1} α _inst_1 s) (HMul.hMul.{0, 0, 0} ENNReal ENNReal ENNReal (instHMul.{0} ENNReal (Distrib.toHasMul.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring)))))))) (OfNat.ofNat.{0} ENNReal 2 (OfNat.mk.{0} ENNReal 2 (bit0.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring))))))) (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne)))))) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) NNReal ENNReal (HasLiftT.mk.{1, 1} NNReal ENNReal (CoeTCₓ.coe.{1, 1} NNReal ENNReal (coeBase.{1, 1} NNReal ENNReal ENNReal.hasCoe))) ε)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} (ε : NNReal), LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.diam.{u1} α _inst_1 (Metric.cthickening.{u1} α _inst_1 (NNReal.toReal ε) s)) (HAdd.hAdd.{0, 0, 0} ENNReal ENNReal ENNReal (instHAdd.{0} ENNReal (Distrib.toAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal)))))))) (EMetric.diam.{u1} α _inst_1 s) (HMul.hMul.{0, 0, 0} ENNReal ENNReal ENNReal (instHMul.{0} ENNReal (CanonicallyOrderedCommSemiring.toMul.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal)) (OfNat.ofNat.{0} ENNReal 2 (instOfNat.{0} ENNReal 2 (CanonicallyOrderedCommSemiring.toNatCast.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal) (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))))) (ENNReal.some ε)))
-Case conversion may be inaccurate. Consider using '#align metric.ediam_cthickening_le Metric.ediam_cthickening_leₓ'. -/
theorem ediam_cthickening_le (ε : ℝ≥0) : EMetric.diam (cthickening ε s) ≤ EMetric.diam s + 2 * ε :=
by
refine' diam_le fun x hx y hy => ENNReal.le_of_forall_pos_le_add fun δ hδ _ => _
@@ -2031,22 +1413,10 @@ theorem ediam_cthickening_le (ε : ℝ≥0) : EMetric.diam (cthickening ε s)
abel
#align metric.ediam_cthickening_le Metric.ediam_cthickening_le
-/- warning: metric.ediam_thickening_le -> Metric.ediam_thickening_le is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} (ε : NNReal), LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.diam.{u1} α _inst_1 (Metric.thickening.{u1} α _inst_1 ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) NNReal Real (HasLiftT.mk.{1, 1} NNReal Real (CoeTCₓ.coe.{1, 1} NNReal Real (coeBase.{1, 1} NNReal Real NNReal.Real.hasCoe))) ε) s)) (HAdd.hAdd.{0, 0, 0} ENNReal ENNReal ENNReal (instHAdd.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring)))))))) (EMetric.diam.{u1} α _inst_1 s) (HMul.hMul.{0, 0, 0} ENNReal ENNReal ENNReal (instHMul.{0} ENNReal (Distrib.toHasMul.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring)))))))) (OfNat.ofNat.{0} ENNReal 2 (OfNat.mk.{0} ENNReal 2 (bit0.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring))))))) (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne)))))) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) NNReal ENNReal (HasLiftT.mk.{1, 1} NNReal ENNReal (CoeTCₓ.coe.{1, 1} NNReal ENNReal (coeBase.{1, 1} NNReal ENNReal ENNReal.hasCoe))) ε)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} (ε : NNReal), LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.diam.{u1} α _inst_1 (Metric.thickening.{u1} α _inst_1 (NNReal.toReal ε) s)) (HAdd.hAdd.{0, 0, 0} ENNReal ENNReal ENNReal (instHAdd.{0} ENNReal (Distrib.toAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal)))))))) (EMetric.diam.{u1} α _inst_1 s) (HMul.hMul.{0, 0, 0} ENNReal ENNReal ENNReal (instHMul.{0} ENNReal (CanonicallyOrderedCommSemiring.toMul.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal)) (OfNat.ofNat.{0} ENNReal 2 (instOfNat.{0} ENNReal 2 (CanonicallyOrderedCommSemiring.toNatCast.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal) (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))))) (ENNReal.some ε)))
-Case conversion may be inaccurate. Consider using '#align metric.ediam_thickening_le Metric.ediam_thickening_leₓ'. -/
theorem ediam_thickening_le (ε : ℝ≥0) : EMetric.diam (thickening ε s) ≤ EMetric.diam s + 2 * ε :=
(EMetric.diam_mono <| thickening_subset_cthickening _ _).trans <| ediam_cthickening_le _
#align metric.ediam_thickening_le Metric.ediam_thickening_le
-/- warning: metric.diam_cthickening_le -> Metric.diam_cthickening_le is a dubious translation:
-lean 3 declaration is
- forall {ε : Real} {α : Type.{u1}} [_inst_2 : PseudoMetricSpace.{u1} α] (s : Set.{u1} α), (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) ε) -> (LE.le.{0} Real Real.hasLe (Metric.diam.{u1} α _inst_2 (Metric.cthickening.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_2) ε s)) (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.hasAdd) (Metric.diam.{u1} α _inst_2 s) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) (OfNat.ofNat.{0} Real 2 (OfNat.mk.{0} Real 2 (bit0.{0} Real Real.hasAdd (One.one.{0} Real Real.hasOne)))) ε)))
-but is expected to have type
- forall {ε : Real} {α : Type.{u1}} [_inst_2 : PseudoMetricSpace.{u1} α] (s : Set.{u1} α), (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) ε) -> (LE.le.{0} Real Real.instLEReal (Metric.diam.{u1} α _inst_2 (Metric.cthickening.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_2) ε s)) (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.instAddReal) (Metric.diam.{u1} α _inst_2 s) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) (OfNat.ofNat.{0} Real 2 (instOfNat.{0} Real 2 Real.natCast (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))))) ε)))
-Case conversion may be inaccurate. Consider using '#align metric.diam_cthickening_le Metric.diam_cthickening_leₓ'. -/
theorem diam_cthickening_le {α : Type _} [PseudoMetricSpace α] (s : Set α) (hε : 0 ≤ ε) :
diam (cthickening ε s) ≤ diam s + 2 * ε :=
by
@@ -2063,12 +1433,6 @@ theorem diam_cthickening_le {α : Type _} [PseudoMetricSpace α] (s : Set α) (h
positivity
#align metric.diam_cthickening_le Metric.diam_cthickening_le
-/- warning: metric.diam_thickening_le -> Metric.diam_thickening_le is a dubious translation:
-lean 3 declaration is
- forall {ε : Real} {α : Type.{u1}} [_inst_2 : PseudoMetricSpace.{u1} α] (s : Set.{u1} α), (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) ε) -> (LE.le.{0} Real Real.hasLe (Metric.diam.{u1} α _inst_2 (Metric.thickening.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_2) ε s)) (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.hasAdd) (Metric.diam.{u1} α _inst_2 s) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) (OfNat.ofNat.{0} Real 2 (OfNat.mk.{0} Real 2 (bit0.{0} Real Real.hasAdd (One.one.{0} Real Real.hasOne)))) ε)))
-but is expected to have type
- forall {ε : Real} {α : Type.{u1}} [_inst_2 : PseudoMetricSpace.{u1} α] (s : Set.{u1} α), (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) ε) -> (LE.le.{0} Real Real.instLEReal (Metric.diam.{u1} α _inst_2 (Metric.thickening.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_2) ε s)) (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.instAddReal) (Metric.diam.{u1} α _inst_2 s) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) (OfNat.ofNat.{0} Real 2 (instOfNat.{0} Real 2 Real.natCast (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))))) ε)))
-Case conversion may be inaccurate. Consider using '#align metric.diam_thickening_le Metric.diam_thickening_leₓ'. -/
theorem diam_thickening_le {α : Type _} [PseudoMetricSpace α] (s : Set α) (hε : 0 ≤ ε) :
diam (thickening ε s) ≤ diam s + 2 * ε :=
by
@@ -2099,12 +1463,6 @@ theorem cthickening_closure : cthickening δ (closure s) = cthickening δ s := b
open ENNReal
-/- warning: disjoint.exists_thickenings -> Disjoint.exists_thickenings is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (Disjoint.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} (Set.{u1} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α))) s t) -> (IsCompact.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) s) -> (IsClosed.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) t) -> (Exists.{1} Real (fun (δ : Real) => And (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) (Disjoint.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} (Set.{u1} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α))) (Metric.thickening.{u1} α _inst_1 δ s) (Metric.thickening.{u1} α _inst_1 δ t))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (Disjoint.{u1} (Set.{u1} α) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) (BoundedOrder.toOrderBot.{u1} (Set.{u1} α) (Preorder.toLE.{u1} (Set.{u1} α) (PartialOrder.toPreorder.{u1} (Set.{u1} α) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))))) (CompleteLattice.toBoundedOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) s t) -> (IsCompact.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) s) -> (IsClosed.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) t) -> (Exists.{1} Real (fun (δ : Real) => And (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) (Disjoint.{u1} (Set.{u1} α) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) (BoundedOrder.toOrderBot.{u1} (Set.{u1} α) (Preorder.toLE.{u1} (Set.{u1} α) (PartialOrder.toPreorder.{u1} (Set.{u1} α) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))))) (CompleteLattice.toBoundedOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) (Metric.thickening.{u1} α _inst_1 δ s) (Metric.thickening.{u1} α _inst_1 δ t))))
-Case conversion may be inaccurate. Consider using '#align disjoint.exists_thickenings Disjoint.exists_thickeningsₓ'. -/
theorem Disjoint.exists_thickenings (hst : Disjoint s t) (hs : IsCompact s) (ht : IsClosed t) :
∃ δ, 0 < δ ∧ Disjoint (thickening δ s) (thickening δ t) :=
by
@@ -2124,12 +1482,6 @@ theorem Disjoint.exists_thickenings (hst : Disjoint s t) (hs : IsCompact s) (ht
#align disjoint.exists_thickenings Disjoint.exists_thickenings
-/- warning: disjoint.exists_cthickenings -> Disjoint.exists_cthickenings is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (Disjoint.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} (Set.{u1} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α))) s t) -> (IsCompact.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) s) -> (IsClosed.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) t) -> (Exists.{1} Real (fun (δ : Real) => And (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) (Disjoint.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} (Set.{u1} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α))) (Metric.cthickening.{u1} α _inst_1 δ s) (Metric.cthickening.{u1} α _inst_1 δ t))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (Disjoint.{u1} (Set.{u1} α) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) (BoundedOrder.toOrderBot.{u1} (Set.{u1} α) (Preorder.toLE.{u1} (Set.{u1} α) (PartialOrder.toPreorder.{u1} (Set.{u1} α) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))))) (CompleteLattice.toBoundedOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) s t) -> (IsCompact.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) s) -> (IsClosed.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) t) -> (Exists.{1} Real (fun (δ : Real) => And (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) (Disjoint.{u1} (Set.{u1} α) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) (BoundedOrder.toOrderBot.{u1} (Set.{u1} α) (Preorder.toLE.{u1} (Set.{u1} α) (PartialOrder.toPreorder.{u1} (Set.{u1} α) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))))) (CompleteLattice.toBoundedOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) (Metric.cthickening.{u1} α _inst_1 δ s) (Metric.cthickening.{u1} α _inst_1 δ t))))
-Case conversion may be inaccurate. Consider using '#align disjoint.exists_cthickenings Disjoint.exists_cthickeningsₓ'. -/
theorem Disjoint.exists_cthickenings (hst : Disjoint s t) (hs : IsCompact s) (ht : IsClosed t) :
∃ δ, 0 < δ ∧ Disjoint (cthickening δ s) (cthickening δ t) :=
by
@@ -2138,60 +1490,30 @@ theorem Disjoint.exists_cthickenings (hst : Disjoint s t) (hs : IsCompact s) (ht
exact cthickening_subset_thickening' hδ (half_lt_self hδ) _
#align disjoint.exists_cthickenings Disjoint.exists_cthickenings
-/- warning: is_compact.exists_cthickening_subset_open -> IsCompact.exists_cthickening_subset_open is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (IsCompact.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) s) -> (IsOpen.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) t) -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) s t) -> (Exists.{1} Real (fun (δ : Real) => And (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) (Metric.cthickening.{u1} α _inst_1 δ s) t)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (IsCompact.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) s) -> (IsOpen.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) t) -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) s t) -> (Exists.{1} Real (fun (δ : Real) => And (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) (Metric.cthickening.{u1} α _inst_1 δ s) t)))
-Case conversion may be inaccurate. Consider using '#align is_compact.exists_cthickening_subset_open IsCompact.exists_cthickening_subset_openₓ'. -/
theorem IsCompact.exists_cthickening_subset_open (hs : IsCompact s) (ht : IsOpen t) (hst : s ⊆ t) :
∃ δ, 0 < δ ∧ cthickening δ s ⊆ t :=
(hst.disjoint_compl_right.exists_cthickenings hs ht.isClosed_compl).imp fun δ h =>
⟨h.1, disjoint_compl_right_iff_subset.1 <| h.2.mono_right <| self_subset_cthickening _⟩
#align is_compact.exists_cthickening_subset_open IsCompact.exists_cthickening_subset_open
-/- warning: is_compact.exists_thickening_subset_open -> IsCompact.exists_thickening_subset_open is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (IsCompact.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) s) -> (IsOpen.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) t) -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) s t) -> (Exists.{1} Real (fun (δ : Real) => And (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) (Metric.thickening.{u1} α _inst_1 δ s) t)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (IsCompact.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) s) -> (IsOpen.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) t) -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) s t) -> (Exists.{1} Real (fun (δ : Real) => And (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) (Metric.thickening.{u1} α _inst_1 δ s) t)))
-Case conversion may be inaccurate. Consider using '#align is_compact.exists_thickening_subset_open IsCompact.exists_thickening_subset_openₓ'. -/
theorem IsCompact.exists_thickening_subset_open (hs : IsCompact s) (ht : IsOpen t) (hst : s ⊆ t) :
∃ δ, 0 < δ ∧ thickening δ s ⊆ t :=
let ⟨δ, h₀, hδ⟩ := hs.exists_cthickening_subset_open ht hst
⟨δ, h₀, (thickening_subset_cthickening _ _).trans hδ⟩
#align is_compact.exists_thickening_subset_open IsCompact.exists_thickening_subset_open
-/- warning: metric.has_basis_nhds_set_thickening -> Metric.hasBasis_nhdsSet_thickening is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {K : Set.{u1} α}, (IsCompact.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) K) -> (Filter.HasBasis.{u1, 1} α Real (nhdsSet.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) K) (fun (δ : Real) => LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) (fun (δ : Real) => Metric.thickening.{u1} α _inst_1 δ K))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {K : Set.{u1} α}, (IsCompact.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) K) -> (Filter.HasBasis.{u1, 1} α Real (nhdsSet.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) K) (fun (δ : Real) => LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) (fun (δ : Real) => Metric.thickening.{u1} α _inst_1 δ K))
-Case conversion may be inaccurate. Consider using '#align metric.has_basis_nhds_set_thickening Metric.hasBasis_nhdsSet_thickeningₓ'. -/
theorem hasBasis_nhdsSet_thickening {K : Set α} (hK : IsCompact K) :
(𝓝ˢ K).HasBasis (fun δ : ℝ => 0 < δ) fun δ => thickening δ K :=
(hasBasis_nhdsSet K).to_has_basis' (fun U hU => hK.exists_thickening_subset_open hU.1 hU.2)
fun _ => thickening_mem_nhdsSet K
#align metric.has_basis_nhds_set_thickening Metric.hasBasis_nhdsSet_thickening
-/- warning: metric.has_basis_nhds_set_cthickening -> Metric.hasBasis_nhdsSet_cthickening is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {K : Set.{u1} α}, (IsCompact.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) K) -> (Filter.HasBasis.{u1, 1} α Real (nhdsSet.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) K) (fun (δ : Real) => LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) (fun (δ : Real) => Metric.cthickening.{u1} α _inst_1 δ K))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {K : Set.{u1} α}, (IsCompact.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) K) -> (Filter.HasBasis.{u1, 1} α Real (nhdsSet.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) K) (fun (δ : Real) => LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) (fun (δ : Real) => Metric.cthickening.{u1} α _inst_1 δ K))
-Case conversion may be inaccurate. Consider using '#align metric.has_basis_nhds_set_cthickening Metric.hasBasis_nhdsSet_cthickeningₓ'. -/
theorem hasBasis_nhdsSet_cthickening {K : Set α} (hK : IsCompact K) :
(𝓝ˢ K).HasBasis (fun δ : ℝ => 0 < δ) fun δ => cthickening δ K :=
(hasBasis_nhdsSet K).to_has_basis' (fun U hU => hK.exists_cthickening_subset_open hU.1 hU.2)
fun _ => cthickening_mem_nhdsSet K
#align metric.has_basis_nhds_set_cthickening Metric.hasBasis_nhdsSet_cthickening
-/- warning: metric.cthickening_eq_Inter_cthickening' -> Metric.cthickening_eq_iInter_cthickening' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real} (s : Set.{0} Real), (HasSubset.Subset.{0} (Set.{0} Real) (Set.hasSubset.{0} Real) s (Set.Ioi.{0} Real Real.preorder δ)) -> (forall (ε : Real), (LT.lt.{0} Real Real.hasLt δ ε) -> (Set.Nonempty.{0} Real (Inter.inter.{0} (Set.{0} Real) (Set.hasInter.{0} Real) s (Set.Ioc.{0} Real Real.preorder δ ε)))) -> (forall (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α _inst_1 δ E) (Set.iInter.{u1, 1} α Real (fun (ε : Real) => Set.iInter.{u1, 0} α (Membership.Mem.{0, 0} Real (Set.{0} Real) (Set.hasMem.{0} Real) ε s) (fun (H : Membership.Mem.{0, 0} Real (Set.{0} Real) (Set.hasMem.{0} Real) ε s) => Metric.cthickening.{u1} α _inst_1 ε E))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real} (s : Set.{0} Real), (HasSubset.Subset.{0} (Set.{0} Real) (Set.instHasSubsetSet.{0} Real) s (Set.Ioi.{0} Real Real.instPreorderReal δ)) -> (forall (ε : Real), (LT.lt.{0} Real Real.instLTReal δ ε) -> (Set.Nonempty.{0} Real (Inter.inter.{0} (Set.{0} Real) (Set.instInterSet.{0} Real) s (Set.Ioc.{0} Real Real.instPreorderReal δ ε)))) -> (forall (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α _inst_1 δ E) (Set.iInter.{u1, 1} α Real (fun (ε : Real) => Set.iInter.{u1, 0} α (Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) ε s) (fun (H : Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) ε s) => Metric.cthickening.{u1} α _inst_1 ε E))))
-Case conversion may be inaccurate. Consider using '#align metric.cthickening_eq_Inter_cthickening' Metric.cthickening_eq_iInter_cthickening'ₓ'. -/
theorem cthickening_eq_iInter_cthickening' {δ : ℝ} (s : Set ℝ) (hsδ : s ⊆ Ioi δ)
(hs : ∀ ε, δ < ε → (s ∩ Ioc δ ε).Nonempty) (E : Set α) :
cthickening δ E = ⋂ ε ∈ s, cthickening ε E :=
@@ -2209,12 +1531,6 @@ theorem cthickening_eq_iInter_cthickening' {δ : ℝ} (s : Set ℝ) (hsδ : s
exact ENNReal.ofReal_add_le
#align metric.cthickening_eq_Inter_cthickening' Metric.cthickening_eq_iInter_cthickening'
-/- warning: metric.cthickening_eq_Inter_cthickening -> Metric.cthickening_eq_iInter_cthickening is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real} (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α _inst_1 δ E) (Set.iInter.{u1, 1} α Real (fun (ε : Real) => Set.iInter.{u1, 0} α (LT.lt.{0} Real Real.hasLt δ ε) (fun (h : LT.lt.{0} Real Real.hasLt δ ε) => Metric.cthickening.{u1} α _inst_1 ε E)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real} (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α _inst_1 δ E) (Set.iInter.{u1, 1} α Real (fun (ε : Real) => Set.iInter.{u1, 0} α (LT.lt.{0} Real Real.instLTReal δ ε) (fun (h : LT.lt.{0} Real Real.instLTReal δ ε) => Metric.cthickening.{u1} α _inst_1 ε E)))
-Case conversion may be inaccurate. Consider using '#align metric.cthickening_eq_Inter_cthickening Metric.cthickening_eq_iInter_cthickeningₓ'. -/
theorem cthickening_eq_iInter_cthickening {δ : ℝ} (E : Set α) :
cthickening δ E = ⋂ (ε : ℝ) (h : δ < ε), cthickening ε E :=
by
@@ -2223,12 +1539,6 @@ theorem cthickening_eq_iInter_cthickening {δ : ℝ} (E : Set α) :
exact fun _ hε => nonempty_Ioc.mpr hε
#align metric.cthickening_eq_Inter_cthickening Metric.cthickening_eq_iInter_cthickening
-/- warning: metric.cthickening_eq_Inter_thickening' -> Metric.cthickening_eq_iInter_thickening' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real}, (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) -> (forall (s : Set.{0} Real), (HasSubset.Subset.{0} (Set.{0} Real) (Set.hasSubset.{0} Real) s (Set.Ioi.{0} Real Real.preorder δ)) -> (forall (ε : Real), (LT.lt.{0} Real Real.hasLt δ ε) -> (Set.Nonempty.{0} Real (Inter.inter.{0} (Set.{0} Real) (Set.hasInter.{0} Real) s (Set.Ioc.{0} Real Real.preorder δ ε)))) -> (forall (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α _inst_1 δ E) (Set.iInter.{u1, 1} α Real (fun (ε : Real) => Set.iInter.{u1, 0} α (Membership.Mem.{0, 0} Real (Set.{0} Real) (Set.hasMem.{0} Real) ε s) (fun (H : Membership.Mem.{0, 0} Real (Set.{0} Real) (Set.hasMem.{0} Real) ε s) => Metric.thickening.{u1} α _inst_1 ε E)))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real}, (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) -> (forall (s : Set.{0} Real), (HasSubset.Subset.{0} (Set.{0} Real) (Set.instHasSubsetSet.{0} Real) s (Set.Ioi.{0} Real Real.instPreorderReal δ)) -> (forall (ε : Real), (LT.lt.{0} Real Real.instLTReal δ ε) -> (Set.Nonempty.{0} Real (Inter.inter.{0} (Set.{0} Real) (Set.instInterSet.{0} Real) s (Set.Ioc.{0} Real Real.instPreorderReal δ ε)))) -> (forall (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α _inst_1 δ E) (Set.iInter.{u1, 1} α Real (fun (ε : Real) => Set.iInter.{u1, 0} α (Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) ε s) (fun (H : Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) ε s) => Metric.thickening.{u1} α _inst_1 ε E)))))
-Case conversion may be inaccurate. Consider using '#align metric.cthickening_eq_Inter_thickening' Metric.cthickening_eq_iInter_thickening'ₓ'. -/
theorem cthickening_eq_iInter_thickening' {δ : ℝ} (δ_nn : 0 ≤ δ) (s : Set ℝ) (hsδ : s ⊆ Ioi δ)
(hs : ∀ ε, δ < ε → (s ∩ Ioc δ ε).Nonempty) (E : Set α) :
cthickening δ E = ⋂ ε ∈ s, thickening ε E :=
@@ -2241,12 +1551,6 @@ theorem cthickening_eq_iInter_thickening' {δ : ℝ} (δ_nn : 0 ≤ δ) (s : Set
exact Inter₂_mono fun ε hε => thickening_subset_cthickening ε E
#align metric.cthickening_eq_Inter_thickening' Metric.cthickening_eq_iInter_thickening'
-/- warning: metric.cthickening_eq_Inter_thickening -> Metric.cthickening_eq_iInter_thickening is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real}, (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) -> (forall (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α _inst_1 δ E) (Set.iInter.{u1, 1} α Real (fun (ε : Real) => Set.iInter.{u1, 0} α (LT.lt.{0} Real Real.hasLt δ ε) (fun (h : LT.lt.{0} Real Real.hasLt δ ε) => Metric.thickening.{u1} α _inst_1 ε E))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real}, (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) -> (forall (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α _inst_1 δ E) (Set.iInter.{u1, 1} α Real (fun (ε : Real) => Set.iInter.{u1, 0} α (LT.lt.{0} Real Real.instLTReal δ ε) (fun (h : LT.lt.{0} Real Real.instLTReal δ ε) => Metric.thickening.{u1} α _inst_1 ε E))))
-Case conversion may be inaccurate. Consider using '#align metric.cthickening_eq_Inter_thickening Metric.cthickening_eq_iInter_thickeningₓ'. -/
theorem cthickening_eq_iInter_thickening {δ : ℝ} (δ_nn : 0 ≤ δ) (E : Set α) :
cthickening δ E = ⋂ (ε : ℝ) (h : δ < ε), thickening ε E :=
by
@@ -2255,23 +1559,11 @@ theorem cthickening_eq_iInter_thickening {δ : ℝ} (δ_nn : 0 ≤ δ) (E : Set
exact fun _ hε => nonempty_Ioc.mpr hε
#align metric.cthickening_eq_Inter_thickening Metric.cthickening_eq_iInter_thickening
-/- warning: metric.cthickening_eq_Inter_thickening'' -> Metric.cthickening_eq_iInter_thickening'' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (δ : Real) (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α _inst_1 δ E) (Set.iInter.{u1, 1} α Real (fun (ε : Real) => Set.iInter.{u1, 0} α (LT.lt.{0} Real Real.hasLt (LinearOrder.max.{0} Real Real.linearOrder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) ε) (fun (h : LT.lt.{0} Real Real.hasLt (LinearOrder.max.{0} Real Real.linearOrder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) ε) => Metric.thickening.{u1} α _inst_1 ε E)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (δ : Real) (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α _inst_1 δ E) (Set.iInter.{u1, 1} α Real (fun (ε : Real) => Set.iInter.{u1, 0} α (LT.lt.{0} Real Real.instLTReal (Max.max.{0} Real (LinearOrderedRing.toMax.{0} Real Real.instLinearOrderedRingReal) (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) ε) (fun (h : LT.lt.{0} Real Real.instLTReal (Max.max.{0} Real (LinearOrderedRing.toMax.{0} Real Real.instLinearOrderedRingReal) (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) ε) => Metric.thickening.{u1} α _inst_1 ε E)))
-Case conversion may be inaccurate. Consider using '#align metric.cthickening_eq_Inter_thickening'' Metric.cthickening_eq_iInter_thickening''ₓ'. -/
theorem cthickening_eq_iInter_thickening'' (δ : ℝ) (E : Set α) :
cthickening δ E = ⋂ (ε : ℝ) (h : max 0 δ < ε), thickening ε E := by
rw [← cthickening_max_zero, cthickening_eq_Inter_thickening]; exact le_max_left _ _
#align metric.cthickening_eq_Inter_thickening'' Metric.cthickening_eq_iInter_thickening''
-/- warning: metric.closure_eq_Inter_cthickening' -> Metric.closure_eq_iInter_cthickening' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (E : Set.{u1} α) (s : Set.{0} Real), (forall (ε : Real), (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) ε) -> (Set.Nonempty.{0} Real (Inter.inter.{0} (Set.{0} Real) (Set.hasInter.{0} Real) s (Set.Ioc.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) ε)))) -> (Eq.{succ u1} (Set.{u1} α) (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E) (Set.iInter.{u1, 1} α Real (fun (δ : Real) => Set.iInter.{u1, 0} α (Membership.Mem.{0, 0} Real (Set.{0} Real) (Set.hasMem.{0} Real) δ s) (fun (H : Membership.Mem.{0, 0} Real (Set.{0} Real) (Set.hasMem.{0} Real) δ s) => Metric.cthickening.{u1} α _inst_1 δ E))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (E : Set.{u1} α) (s : Set.{0} Real), (forall (ε : Real), (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) ε) -> (Set.Nonempty.{0} Real (Inter.inter.{0} (Set.{0} Real) (Set.instInterSet.{0} Real) s (Set.Ioc.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) ε)))) -> (Eq.{succ u1} (Set.{u1} α) (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E) (Set.iInter.{u1, 1} α Real (fun (δ : Real) => Set.iInter.{u1, 0} α (Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) δ s) (fun (H : Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) δ s) => Metric.cthickening.{u1} α _inst_1 δ E))))
-Case conversion may be inaccurate. Consider using '#align metric.closure_eq_Inter_cthickening' Metric.closure_eq_iInter_cthickening'ₓ'. -/
/-- The closure of a set equals the intersection of its closed thickenings of positive radii
accumulating at zero. -/
theorem closure_eq_iInter_cthickening' (E : Set α) (s : Set ℝ)
@@ -2287,24 +1579,12 @@ theorem closure_eq_iInter_cthickening' (E : Set α) (s : Set ℝ)
exact bInter_subset_of_mem hδs
#align metric.closure_eq_Inter_cthickening' Metric.closure_eq_iInter_cthickening'
-/- warning: metric.closure_eq_Inter_cthickening -> Metric.closure_eq_iInter_cthickening is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E) (Set.iInter.{u1, 1} α Real (fun (δ : Real) => Set.iInter.{u1, 0} α (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) (fun (h : LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) => Metric.cthickening.{u1} α _inst_1 δ E)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E) (Set.iInter.{u1, 1} α Real (fun (δ : Real) => Set.iInter.{u1, 0} α (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) (fun (h : LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) => Metric.cthickening.{u1} α _inst_1 δ E)))
-Case conversion may be inaccurate. Consider using '#align metric.closure_eq_Inter_cthickening Metric.closure_eq_iInter_cthickeningₓ'. -/
/-- The closure of a set equals the intersection of its closed thickenings of positive radii. -/
theorem closure_eq_iInter_cthickening (E : Set α) :
closure E = ⋂ (δ : ℝ) (h : 0 < δ), cthickening δ E := by rw [← cthickening_zero];
exact cthickening_eq_Inter_cthickening E
#align metric.closure_eq_Inter_cthickening Metric.closure_eq_iInter_cthickening
-/- warning: metric.closure_eq_Inter_thickening' -> Metric.closure_eq_iInter_thickening' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (E : Set.{u1} α) (s : Set.{0} Real), (HasSubset.Subset.{0} (Set.{0} Real) (Set.hasSubset.{0} Real) s (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) -> (forall (ε : Real), (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) ε) -> (Set.Nonempty.{0} Real (Inter.inter.{0} (Set.{0} Real) (Set.hasInter.{0} Real) s (Set.Ioc.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) ε)))) -> (Eq.{succ u1} (Set.{u1} α) (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E) (Set.iInter.{u1, 1} α Real (fun (δ : Real) => Set.iInter.{u1, 0} α (Membership.Mem.{0, 0} Real (Set.{0} Real) (Set.hasMem.{0} Real) δ s) (fun (H : Membership.Mem.{0, 0} Real (Set.{0} Real) (Set.hasMem.{0} Real) δ s) => Metric.thickening.{u1} α _inst_1 δ E))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (E : Set.{u1} α) (s : Set.{0} Real), (HasSubset.Subset.{0} (Set.{0} Real) (Set.instHasSubsetSet.{0} Real) s (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) -> (forall (ε : Real), (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) ε) -> (Set.Nonempty.{0} Real (Inter.inter.{0} (Set.{0} Real) (Set.instInterSet.{0} Real) s (Set.Ioc.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) ε)))) -> (Eq.{succ u1} (Set.{u1} α) (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E) (Set.iInter.{u1, 1} α Real (fun (δ : Real) => Set.iInter.{u1, 0} α (Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) δ s) (fun (H : Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) δ s) => Metric.thickening.{u1} α _inst_1 δ E))))
-Case conversion may be inaccurate. Consider using '#align metric.closure_eq_Inter_thickening' Metric.closure_eq_iInter_thickening'ₓ'. -/
/-- The closure of a set equals the intersection of its open thickenings of positive radii
accumulating at zero. -/
theorem closure_eq_iInter_thickening' (E : Set α) (s : Set ℝ) (hs₀ : s ⊆ Ioi 0)
@@ -2312,12 +1592,6 @@ theorem closure_eq_iInter_thickening' (E : Set α) (s : Set ℝ) (hs₀ : s ⊆
rw [← cthickening_zero]; apply cthickening_eq_Inter_thickening' le_rfl _ hs₀ hs
#align metric.closure_eq_Inter_thickening' Metric.closure_eq_iInter_thickening'
-/- warning: metric.closure_eq_Inter_thickening -> Metric.closure_eq_iInter_thickening is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E) (Set.iInter.{u1, 1} α Real (fun (δ : Real) => Set.iInter.{u1, 0} α (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) (fun (h : LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) => Metric.thickening.{u1} α _inst_1 δ E)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E) (Set.iInter.{u1, 1} α Real (fun (δ : Real) => Set.iInter.{u1, 0} α (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) (fun (h : LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) => Metric.thickening.{u1} α _inst_1 δ E)))
-Case conversion may be inaccurate. Consider using '#align metric.closure_eq_Inter_thickening Metric.closure_eq_iInter_thickeningₓ'. -/
/-- The closure of a set equals the intersection of its (open) thickenings of positive radii. -/
theorem closure_eq_iInter_thickening (E : Set α) :
closure E = ⋂ (δ : ℝ) (h : 0 < δ), thickening δ E := by rw [← cthickening_zero];
@@ -2343,12 +1617,6 @@ theorem closedBall_subset_cthickening {α : Type _} [PseudoMetricSpace α] {x :
#align metric.closed_ball_subset_cthickening Metric.closedBall_subset_cthickening
-/
-/- warning: metric.cthickening_subset_Union_closed_ball_of_lt -> Metric.cthickening_subset_iUnion_closedBall_of_lt is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_2 : PseudoMetricSpace.{u1} α] (E : Set.{u1} α) {δ : Real} {δ' : Real}, (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ') -> (LT.lt.{0} Real Real.hasLt δ δ') -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) (Metric.cthickening.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_2) δ E) (Set.iUnion.{u1, succ u1} α α (fun (x : α) => Set.iUnion.{u1, 0} α (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x E) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x E) => Metric.closedBall.{u1} α _inst_2 x δ'))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_2 : PseudoMetricSpace.{u1} α] (E : Set.{u1} α) {δ : Real} {δ' : Real}, (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ') -> (LT.lt.{0} Real Real.instLTReal δ δ') -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) (Metric.cthickening.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_2) δ E) (Set.iUnion.{u1, succ u1} α α (fun (x : α) => Set.iUnion.{u1, 0} α (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x E) (fun (H : Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x E) => Metric.closedBall.{u1} α _inst_2 x δ'))))
-Case conversion may be inaccurate. Consider using '#align metric.cthickening_subset_Union_closed_ball_of_lt Metric.cthickening_subset_iUnion_closedBall_of_ltₓ'. -/
theorem cthickening_subset_iUnion_closedBall_of_lt {α : Type _} [PseudoMetricSpace α] (E : Set α)
{δ δ' : ℝ} (hδ₀ : 0 < δ') (hδδ' : δ < δ') : cthickening δ E ⊆ ⋃ x ∈ E, closedBall x δ' :=
by
@@ -2357,12 +1625,6 @@ theorem cthickening_subset_iUnion_closedBall_of_lt {α : Type _} [PseudoMetricSp
exact mem_Union₂.mpr ⟨y, hy₁, hy₂.le⟩
#align metric.cthickening_subset_Union_closed_ball_of_lt Metric.cthickening_subset_iUnion_closedBall_of_lt
-/- warning: is_compact.cthickening_eq_bUnion_closed_ball -> IsCompact.cthickening_eq_biUnion_closedBall is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_2 : PseudoMetricSpace.{u1} α] {δ : Real} {E : Set.{u1} α}, (IsCompact.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_2)) E) -> (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) -> (Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_2) δ E) (Set.iUnion.{u1, succ u1} α α (fun (x : α) => Set.iUnion.{u1, 0} α (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x E) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x E) => Metric.closedBall.{u1} α _inst_2 x δ))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_2 : PseudoMetricSpace.{u1} α] {δ : Real} {E : Set.{u1} α}, (IsCompact.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_2)) E) -> (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) -> (Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_2) δ E) (Set.iUnion.{u1, succ u1} α α (fun (x : α) => Set.iUnion.{u1, 0} α (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x E) (fun (H : Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x E) => Metric.closedBall.{u1} α _inst_2 x δ))))
-Case conversion may be inaccurate. Consider using '#align is_compact.cthickening_eq_bUnion_closed_ball IsCompact.cthickening_eq_biUnion_closedBallₓ'. -/
/-- The closed thickening of a compact set `E` is the union of the balls `closed_ball x δ` over
`x ∈ E`.
@@ -2382,12 +1644,6 @@ theorem IsCompact.cthickening_eq_biUnion_closedBall {α : Type _} [PseudoMetricS
exact mem_bUnion yE D2
#align is_compact.cthickening_eq_bUnion_closed_ball IsCompact.cthickening_eq_biUnion_closedBall
-/- warning: metric.cthickening_eq_bUnion_closed_ball -> Metric.cthickening_eq_biUnion_closedBall is a dubious translation:
-lean 3 declaration is
- forall {δ : Real} {α : Type.{u1}} [_inst_2 : PseudoMetricSpace.{u1} α] [_inst_3 : ProperSpace.{u1} α _inst_2] (E : Set.{u1} α), (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) -> (Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_2) δ E) (Set.iUnion.{u1, succ u1} α α (fun (x : α) => Set.iUnion.{u1, 0} α (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_2)) E)) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_2)) E)) => Metric.closedBall.{u1} α _inst_2 x δ))))
-but is expected to have type
- forall {δ : Real} {α : Type.{u1}} [_inst_2 : PseudoMetricSpace.{u1} α] [_inst_3 : ProperSpace.{u1} α _inst_2] (E : Set.{u1} α), (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) -> (Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_2) δ E) (Set.iUnion.{u1, succ u1} α α (fun (x : α) => Set.iUnion.{u1, 0} α (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_2)) E)) (fun (H : Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_2)) E)) => Metric.closedBall.{u1} α _inst_2 x δ))))
-Case conversion may be inaccurate. Consider using '#align metric.cthickening_eq_bUnion_closed_ball Metric.cthickening_eq_biUnion_closedBallₓ'. -/
theorem cthickening_eq_biUnion_closedBall {α : Type _} [PseudoMetricSpace α] [ProperSpace α]
(E : Set α) (hδ : 0 ≤ δ) : cthickening δ E = ⋃ x ∈ closure E, closedBall x δ :=
by
@@ -2404,24 +1660,12 @@ theorem cthickening_eq_biUnion_closedBall {α : Type _} [PseudoMetricSpace α] [
exact mem_bUnion yE hy
#align metric.cthickening_eq_bUnion_closed_ball Metric.cthickening_eq_biUnion_closedBall
-/- warning: is_closed.cthickening_eq_bUnion_closed_ball -> IsClosed.cthickening_eq_biUnion_closedBall is a dubious translation:
-lean 3 declaration is
- forall {δ : Real} {α : Type.{u1}} [_inst_2 : PseudoMetricSpace.{u1} α] [_inst_3 : ProperSpace.{u1} α _inst_2] {E : Set.{u1} α}, (IsClosed.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_2)) E) -> (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) -> (Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_2) δ E) (Set.iUnion.{u1, succ u1} α α (fun (x : α) => Set.iUnion.{u1, 0} α (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x E) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x E) => Metric.closedBall.{u1} α _inst_2 x δ))))
-but is expected to have type
- forall {δ : Real} {α : Type.{u1}} [_inst_2 : PseudoMetricSpace.{u1} α] [_inst_3 : ProperSpace.{u1} α _inst_2] {E : Set.{u1} α}, (IsClosed.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_2)) E) -> (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) -> (Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_2) δ E) (Set.iUnion.{u1, succ u1} α α (fun (x : α) => Set.iUnion.{u1, 0} α (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x E) (fun (H : Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x E) => Metric.closedBall.{u1} α _inst_2 x δ))))
-Case conversion may be inaccurate. Consider using '#align is_closed.cthickening_eq_bUnion_closed_ball IsClosed.cthickening_eq_biUnion_closedBallₓ'. -/
theorem IsClosed.cthickening_eq_biUnion_closedBall {α : Type _} [PseudoMetricSpace α]
[ProperSpace α] {E : Set α} (hE : IsClosed E) (hδ : 0 ≤ δ) :
cthickening δ E = ⋃ x ∈ E, closedBall x δ := by
rw [cthickening_eq_bUnion_closed_ball E hδ, hE.closure_eq]
#align is_closed.cthickening_eq_bUnion_closed_ball IsClosed.cthickening_eq_biUnion_closedBall
-/- warning: metric.inf_edist_le_inf_edist_cthickening_add -> Metric.infEdist_le_infEdist_cthickening_add is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real} {s : Set.{u1} α} {x : α}, LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.infEdist.{u1} α _inst_1 x s) (HAdd.hAdd.{0, 0, 0} ENNReal ENNReal ENNReal (instHAdd.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring)))))))) (EMetric.infEdist.{u1} α _inst_1 x (Metric.cthickening.{u1} α _inst_1 δ s)) (ENNReal.ofReal δ))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real} {s : Set.{u1} α} {x : α}, LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.infEdist.{u1} α _inst_1 x s) (HAdd.hAdd.{0, 0, 0} ENNReal ENNReal ENNReal (instHAdd.{0} ENNReal (Distrib.toAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal)))))))) (EMetric.infEdist.{u1} α _inst_1 x (Metric.cthickening.{u1} α _inst_1 δ s)) (ENNReal.ofReal δ))
-Case conversion may be inaccurate. Consider using '#align metric.inf_edist_le_inf_edist_cthickening_add Metric.infEdist_le_infEdist_cthickening_addₓ'. -/
/-- For the equality, see `inf_edist_cthickening`. -/
theorem infEdist_le_infEdist_cthickening_add :
infEdist x s ≤ infEdist x (cthickening δ s) + ENNReal.ofReal δ :=
@@ -2435,12 +1679,6 @@ theorem infEdist_le_infEdist_cthickening_add :
(tsub_add_cancel_of_le <| le_self_add.trans (lt_tsub_iff_left.1 hxy).le).le)
#align metric.inf_edist_le_inf_edist_cthickening_add Metric.infEdist_le_infEdist_cthickening_add
-/- warning: metric.inf_edist_le_inf_edist_thickening_add -> Metric.infEdist_le_infEdist_thickening_add is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real} {s : Set.{u1} α} {x : α}, LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.infEdist.{u1} α _inst_1 x s) (HAdd.hAdd.{0, 0, 0} ENNReal ENNReal ENNReal (instHAdd.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring)))))))) (EMetric.infEdist.{u1} α _inst_1 x (Metric.thickening.{u1} α _inst_1 δ s)) (ENNReal.ofReal δ))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real} {s : Set.{u1} α} {x : α}, LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.infEdist.{u1} α _inst_1 x s) (HAdd.hAdd.{0, 0, 0} ENNReal ENNReal ENNReal (instHAdd.{0} ENNReal (Distrib.toAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal)))))))) (EMetric.infEdist.{u1} α _inst_1 x (Metric.thickening.{u1} α _inst_1 δ s)) (ENNReal.ofReal δ))
-Case conversion may be inaccurate. Consider using '#align metric.inf_edist_le_inf_edist_thickening_add Metric.infEdist_le_infEdist_thickening_addₓ'. -/
/-- For the equality, see `inf_edist_thickening`. -/
theorem infEdist_le_infEdist_thickening_add :
infEdist x s ≤ infEdist x (thickening δ s) + ENNReal.ofReal δ :=
@@ -2448,12 +1686,6 @@ theorem infEdist_le_infEdist_thickening_add :
add_le_add_right (infEdist_anti <| thickening_subset_cthickening _ _) _
#align metric.inf_edist_le_inf_edist_thickening_add Metric.infEdist_le_infEdist_thickening_add
-/- warning: metric.thickening_thickening_subset -> Metric.thickening_thickening_subset is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (ε : Real) (δ : Real) (s : Set.{u1} α), HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) (Metric.thickening.{u1} α _inst_1 ε (Metric.thickening.{u1} α _inst_1 δ s)) (Metric.thickening.{u1} α _inst_1 (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.hasAdd) ε δ) s)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (ε : Real) (δ : Real) (s : Set.{u1} α), HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) (Metric.thickening.{u1} α _inst_1 ε (Metric.thickening.{u1} α _inst_1 δ s)) (Metric.thickening.{u1} α _inst_1 (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.instAddReal) ε δ) s)
-Case conversion may be inaccurate. Consider using '#align metric.thickening_thickening_subset Metric.thickening_thickening_subsetₓ'. -/
/-- For the equality, see `thickening_thickening`. -/
@[simp]
theorem thickening_thickening_subset (ε δ : ℝ) (s : Set α) :
@@ -2469,12 +1701,6 @@ theorem thickening_thickening_subset (ε δ : ℝ) (s : Set α) :
⟨z, hz, (edist_triangle _ _ _).trans_lt <| ENNReal.add_lt_add hx hy⟩
#align metric.thickening_thickening_subset Metric.thickening_thickening_subset
-/- warning: metric.thickening_cthickening_subset -> Metric.thickening_cthickening_subset is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real} (ε : Real), (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) -> (forall (s : Set.{u1} α), HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) (Metric.thickening.{u1} α _inst_1 ε (Metric.cthickening.{u1} α _inst_1 δ s)) (Metric.thickening.{u1} α _inst_1 (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.hasAdd) ε δ) s))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real} (ε : Real), (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) -> (forall (s : Set.{u1} α), HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) (Metric.thickening.{u1} α _inst_1 ε (Metric.cthickening.{u1} α _inst_1 δ s)) (Metric.thickening.{u1} α _inst_1 (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.instAddReal) ε δ) s))
-Case conversion may be inaccurate. Consider using '#align metric.thickening_cthickening_subset Metric.thickening_cthickening_subsetₓ'. -/
/-- For the equality, see `thickening_cthickening`. -/
@[simp]
theorem thickening_cthickening_subset (ε : ℝ) (hδ : 0 ≤ δ) (s : Set α) :
@@ -2491,12 +1717,6 @@ theorem thickening_cthickening_subset (ε : ℝ) (hδ : 0 ≤ δ) (s : Set α) :
(ENNReal.add_lt_add_of_lt_of_le (hy.trans_lt ENNReal.ofReal_lt_top).Ne hxy hy)
#align metric.thickening_cthickening_subset Metric.thickening_cthickening_subset
-/- warning: metric.cthickening_thickening_subset -> Metric.cthickening_thickening_subset is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {ε : Real}, (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) ε) -> (forall (δ : Real) (s : Set.{u1} α), HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) (Metric.cthickening.{u1} α _inst_1 ε (Metric.thickening.{u1} α _inst_1 δ s)) (Metric.cthickening.{u1} α _inst_1 (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.hasAdd) ε δ) s))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {ε : Real}, (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) ε) -> (forall (δ : Real) (s : Set.{u1} α), HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) (Metric.cthickening.{u1} α _inst_1 ε (Metric.thickening.{u1} α _inst_1 δ s)) (Metric.cthickening.{u1} α _inst_1 (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.instAddReal) ε δ) s))
-Case conversion may be inaccurate. Consider using '#align metric.cthickening_thickening_subset Metric.cthickening_thickening_subsetₓ'. -/
/-- For the equality, see `cthickening_thickening`. -/
@[simp]
theorem cthickening_thickening_subset (hε : 0 ≤ ε) (δ : ℝ) (s : Set α) :
@@ -2509,12 +1729,6 @@ theorem cthickening_thickening_subset (hε : 0 ≤ ε) (δ : ℝ) (s : Set α) :
exact fun hx => inf_edist_le_inf_edist_thickening_add.trans (add_le_add_right hx _)
#align metric.cthickening_thickening_subset Metric.cthickening_thickening_subset
-/- warning: metric.cthickening_cthickening_subset -> Metric.cthickening_cthickening_subset is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real} {ε : Real}, (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) ε) -> (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) -> (forall (s : Set.{u1} α), HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) (Metric.cthickening.{u1} α _inst_1 ε (Metric.cthickening.{u1} α _inst_1 δ s)) (Metric.cthickening.{u1} α _inst_1 (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.hasAdd) ε δ) s))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real} {ε : Real}, (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) ε) -> (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) -> (forall (s : Set.{u1} α), HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) (Metric.cthickening.{u1} α _inst_1 ε (Metric.cthickening.{u1} α _inst_1 δ s)) (Metric.cthickening.{u1} α _inst_1 (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.instAddReal) ε δ) s))
-Case conversion may be inaccurate. Consider using '#align metric.cthickening_cthickening_subset Metric.cthickening_cthickening_subsetₓ'. -/
/-- For the equality, see `cthickening_cthickening`. -/
@[simp]
theorem cthickening_cthickening_subset (hε : 0 ≤ ε) (hδ : 0 ≤ δ) (s : Set α) :
@@ -2525,12 +1739,6 @@ theorem cthickening_cthickening_subset (hε : 0 ≤ ε) (hδ : 0 ≤ δ) (s : Se
exact fun hx => inf_edist_le_inf_edist_cthickening_add.trans (add_le_add_right hx _)
#align metric.cthickening_cthickening_subset Metric.cthickening_cthickening_subset
-/- warning: metric.frontier_cthickening_disjoint -> Metric.frontier_cthickening_disjoint is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (A : Set.{u1} α), Pairwise.{0} NNReal (Function.onFun.{1, succ u1, 1} NNReal (Set.{u1} α) Prop (Disjoint.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} (Set.{u1} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)))) (fun (r : NNReal) => frontier.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) (Metric.cthickening.{u1} α _inst_1 ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) NNReal Real (HasLiftT.mk.{1, 1} NNReal Real (CoeTCₓ.coe.{1, 1} NNReal Real (coeBase.{1, 1} NNReal Real NNReal.Real.hasCoe))) r) A)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (A : Set.{u1} α), Pairwise.{0} NNReal (Function.onFun.{1, succ u1, 1} NNReal (Set.{u1} α) Prop (Disjoint.{u1} (Set.{u1} α) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) (BoundedOrder.toOrderBot.{u1} (Set.{u1} α) (Preorder.toLE.{u1} (Set.{u1} α) (PartialOrder.toPreorder.{u1} (Set.{u1} α) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))))) (CompleteLattice.toBoundedOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (fun (r : NNReal) => frontier.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) (Metric.cthickening.{u1} α _inst_1 (NNReal.toReal r) A)))
-Case conversion may be inaccurate. Consider using '#align metric.frontier_cthickening_disjoint Metric.frontier_cthickening_disjointₓ'. -/
theorem frontier_cthickening_disjoint (A : Set α) :
Pairwise (Disjoint on fun r : ℝ≥0 => frontier (cthickening r A)) := fun r₁ r₂ hr =>
((disjoint_singleton.2 <| by simpa).Preimage _).mono (frontier_cthickening_subset _)
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -177,10 +177,8 @@ lean 3 declaration is
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {y : α} {s : Set.{u1} α}, LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.infEdist.{u1} α _inst_1 x s) (HAdd.hAdd.{0, 0, 0} ENNReal ENNReal ENNReal (instHAdd.{0} ENNReal (Distrib.toAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal)))))))) (EDist.edist.{u1} α (PseudoEMetricSpace.toEDist.{u1} α _inst_1) x y) (EMetric.infEdist.{u1} α _inst_1 y s))
Case conversion may be inaccurate. Consider using '#align emetric.inf_edist_le_edist_add_inf_edist EMetric.infEdist_le_edist_add_infEdistₓ'. -/
-theorem infEdist_le_edist_add_infEdist : infEdist x s ≤ edist x y + infEdist y s :=
- by
- rw [add_comm]
- exact inf_edist_le_inf_edist_add_edist
+theorem infEdist_le_edist_add_infEdist : infEdist x s ≤ edist x y + infEdist y s := by
+ rw [add_comm]; exact inf_edist_le_inf_edist_add_edist
#align emetric.inf_edist_le_edist_add_inf_edist EMetric.infEdist_le_edist_add_infEdist
/- warning: emetric.edist_le_inf_edist_add_ediam -> EMetric.edist_le_infEdist_add_ediam is a dubious translation:
@@ -242,9 +240,7 @@ but is expected to have type
Case conversion may be inaccurate. Consider using '#align emetric.mem_closure_iff_inf_edist_zero EMetric.mem_closure_iff_infEdist_zeroₓ'. -/
/-- A point belongs to the closure of `s` iff its infimum edistance to this set vanishes -/
theorem mem_closure_iff_infEdist_zero : x ∈ closure s ↔ infEdist x s = 0 :=
- ⟨fun h => by
- rw [← inf_edist_closure]
- exact inf_edist_zero_of_mem h, fun h =>
+ ⟨fun h => by rw [← inf_edist_closure]; exact inf_edist_zero_of_mem h, fun h =>
EMetric.mem_closure_iff.2 fun ε εpos => infEdist_lt_iff.mp <| by rwa [h]⟩
#align emetric.mem_closure_iff_inf_edist_zero EMetric.mem_closure_iff_infEdist_zero
@@ -393,9 +389,7 @@ Case conversion may be inaccurate. Consider using '#align emetric.exists_pos_for
theorem exists_pos_forall_lt_edist (hs : IsCompact s) (ht : IsClosed t) (hst : Disjoint s t) :
∃ r : ℝ≥0, 0 < r ∧ ∀ x ∈ s, ∀ y ∈ t, (r : ℝ≥0∞) < edist x y :=
by
- rcases s.eq_empty_or_nonempty with (rfl | hne)
- · use 1
- simp
+ rcases s.eq_empty_or_nonempty with (rfl | hne); · use 1; simp
obtain ⟨x, hx, h⟩ : ∃ x ∈ s, ∀ y ∈ s, inf_edist x t ≤ inf_edist y t :=
hs.exists_forall_le hne continuous_inf_edist.continuous_on
have : 0 < inf_edist x t :=
@@ -955,8 +949,7 @@ theorem dist_le_infDist_add_diam (hs : Bounded s) (hy : y ∈ s) : dist x y ≤
rw [inf_dist, diam, ← ENNReal.toReal_add A B, dist_edist]
apply (ENNReal.toReal_le_toReal _ _).2
· exact edist_le_inf_edist_add_ediam hy
- · rw [edist_dist]
- exact ENNReal.ofReal_ne_top
+ · rw [edist_dist]; exact ENNReal.ofReal_ne_top
· exact ENNReal.add_ne_top.2 ⟨A, B⟩
#align metric.dist_le_inf_dist_add_diam Metric.dist_le_infDist_add_diam
@@ -1001,10 +994,8 @@ but is expected to have type
Case conversion may be inaccurate. Consider using '#align metric.inf_dist_zero_of_mem_closure Metric.infDist_zero_of_mem_closureₓ'. -/
/-- If a point belongs to the closure of `s`, then its infimum distance to `s` equals zero.
The converse is true provided that `s` is nonempty, see `mem_closure_iff_inf_dist_zero`. -/
-theorem infDist_zero_of_mem_closure (hx : x ∈ closure s) : infDist x s = 0 :=
- by
- rw [← inf_dist_eq_closure]
- exact inf_dist_zero_of_mem hx
+theorem infDist_zero_of_mem_closure (hx : x ∈ closure s) : infDist x s = 0 := by
+ rw [← inf_dist_eq_closure]; exact inf_dist_zero_of_mem hx
#align metric.inf_dist_zero_of_mem_closure Metric.infDist_zero_of_mem_closure
/- warning: metric.mem_closure_iff_inf_dist_zero -> Metric.mem_closure_iff_infDist_zero is a dubious translation:
@@ -1668,9 +1659,7 @@ theorem mem_thickening_iff {E : Set X} {x : X} : x ∈ thickening δ E ↔ ∃ z
#print Metric.thickening_singleton /-
@[simp]
-theorem thickening_singleton (δ : ℝ) (x : X) : thickening δ ({x} : Set X) = ball x δ :=
- by
- ext
+theorem thickening_singleton (δ : ℝ) (x : X) : thickening δ ({x} : Set X) = ball x δ := by ext;
simp [mem_thickening_iff]
#align metric.thickening_singleton Metric.thickening_singleton
-/
@@ -1685,11 +1674,8 @@ theorem ball_subset_thickening {x : X} {E : Set X} (hx : x ∈ E) (δ : ℝ) :
#print Metric.thickening_eq_biUnion_ball /-
/-- The (open) `δ`-thickening `thickening δ E` of a subset `E` in a metric space equals the
union of balls of radius `δ` centered at points of `E`. -/
-theorem thickening_eq_biUnion_ball {δ : ℝ} {E : Set X} : thickening δ E = ⋃ x ∈ E, ball x δ :=
- by
- ext x
- rw [mem_Union₂]
- exact mem_thickening_iff
+theorem thickening_eq_biUnion_ball {δ : ℝ} {E : Set X} : thickening δ E = ⋃ x ∈ E, ball x δ := by
+ ext x; rw [mem_Union₂]; exact mem_thickening_iff
#align metric.thickening_eq_bUnion_ball Metric.thickening_eq_biUnion_ball
-/
@@ -1702,9 +1688,7 @@ theorem Bounded.thickening {δ : ℝ} {E : Set X} (h : Bounded E) : Bounded (thi
intro y hy
rcases mem_thickening_iff.1 hy with ⟨z, zE, hz⟩
calc
- dist y x ≤ dist z x + dist y z := by
- rw [add_comm]
- exact dist_triangle _ _ _
+ dist y x ≤ dist z x + dist y z := by rw [add_comm]; exact dist_triangle _ _ _
_ ≤ R + δ := add_le_add (hR zE) hz.le
#align metric.bounded.thickening Metric.Bounded.thickening
@@ -1795,10 +1779,8 @@ lean 3 declaration is
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real}, (LE.le.{0} Real Real.instLEReal δ (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))) -> (forall (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α _inst_1 δ E) (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E))
Case conversion may be inaccurate. Consider using '#align metric.cthickening_of_nonpos Metric.cthickening_of_nonposₓ'. -/
-theorem cthickening_of_nonpos {δ : ℝ} (hδ : δ ≤ 0) (E : Set α) : cthickening δ E = closure E :=
- by
- ext x
- simp [mem_closure_iff_inf_edist_zero, cthickening, ENNReal.ofReal_eq_zero.2 hδ]
+theorem cthickening_of_nonpos {δ : ℝ} (hδ : δ ≤ 0) (E : Set α) : cthickening δ E = closure E := by
+ ext x; simp [mem_closure_iff_inf_edist_zero, cthickening, ENNReal.ofReal_eq_zero.2 hδ]
#align metric.cthickening_of_nonpos Metric.cthickening_of_nonpos
/- warning: metric.cthickening_zero -> Metric.cthickening_zero is a dubious translation:
@@ -1844,9 +1826,7 @@ but is expected to have type
Case conversion may be inaccurate. Consider using '#align metric.cthickening_singleton Metric.cthickening_singletonₓ'. -/
@[simp]
theorem cthickening_singleton {α : Type _} [PseudoMetricSpace α] (x : α) {δ : ℝ} (hδ : 0 ≤ δ) :
- cthickening δ ({x} : Set α) = closedBall x δ :=
- by
- ext y
+ cthickening δ ({x} : Set α) = closedBall x δ := by ext y;
simp [cthickening, edist_dist, ENNReal.ofReal_le_ofReal_iff hδ]
#align metric.cthickening_singleton Metric.cthickening_singleton
@@ -1895,11 +1875,8 @@ theorem cthickening_subset_thickening' {δ₁ δ₂ : ℝ} (δ₂_pos : 0 < δ
#print Metric.thickening_subset_cthickening /-
/-- The open thickening `thickening δ E` is contained in the closed thickening `cthickening δ E`
with the same radius. -/
-theorem thickening_subset_cthickening (δ : ℝ) (E : Set α) : thickening δ E ⊆ cthickening δ E :=
- by
- intro x hx
- rw [thickening, mem_set_of_eq] at hx
- exact hx.le
+theorem thickening_subset_cthickening (δ : ℝ) (E : Set α) : thickening δ E ⊆ cthickening δ E := by
+ intro x hx; rw [thickening, mem_set_of_eq] at hx; exact hx.le
#align metric.thickening_subset_cthickening Metric.thickening_subset_cthickening
-/
@@ -1943,10 +1920,8 @@ theorem closure_thickening_subset_cthickening (δ : ℝ) (E : Set α) :
#print Metric.closure_subset_cthickening /-
/-- The closed thickening of a set contains the closure of the set. -/
-theorem closure_subset_cthickening (δ : ℝ) (E : Set α) : closure E ⊆ cthickening δ E :=
- by
- rw [← cthickening_of_nonpos (min_le_right δ 0)]
- exact cthickening_mono (min_le_left δ 0) E
+theorem closure_subset_cthickening (δ : ℝ) (E : Set α) : closure E ⊆ cthickening δ E := by
+ rw [← cthickening_of_nonpos (min_le_right δ 0)]; exact cthickening_mono (min_le_left δ 0) E
#align metric.closure_subset_cthickening Metric.closure_subset_cthickening
-/
@@ -1958,8 +1933,7 @@ but is expected to have type
Case conversion may be inaccurate. Consider using '#align metric.closure_subset_thickening Metric.closure_subset_thickeningₓ'. -/
/-- The (open) thickening of a set contains the closure of the set. -/
theorem closure_subset_thickening {δ : ℝ} (δ_pos : 0 < δ) (E : Set α) :
- closure E ⊆ thickening δ E := by
- rw [← cthickening_zero]
+ closure E ⊆ thickening δ E := by rw [← cthickening_zero];
exact cthickening_subset_thickening' δ_pos δ_pos E
#align metric.closure_subset_thickening Metric.closure_subset_thickening
@@ -2288,10 +2262,8 @@ but is expected to have type
forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (δ : Real) (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α _inst_1 δ E) (Set.iInter.{u1, 1} α Real (fun (ε : Real) => Set.iInter.{u1, 0} α (LT.lt.{0} Real Real.instLTReal (Max.max.{0} Real (LinearOrderedRing.toMax.{0} Real Real.instLinearOrderedRingReal) (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) ε) (fun (h : LT.lt.{0} Real Real.instLTReal (Max.max.{0} Real (LinearOrderedRing.toMax.{0} Real Real.instLinearOrderedRingReal) (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) ε) => Metric.thickening.{u1} α _inst_1 ε E)))
Case conversion may be inaccurate. Consider using '#align metric.cthickening_eq_Inter_thickening'' Metric.cthickening_eq_iInter_thickening''ₓ'. -/
theorem cthickening_eq_iInter_thickening'' (δ : ℝ) (E : Set α) :
- cthickening δ E = ⋂ (ε : ℝ) (h : max 0 δ < ε), thickening ε E :=
- by
- rw [← cthickening_max_zero, cthickening_eq_Inter_thickening]
- exact le_max_left _ _
+ cthickening δ E = ⋂ (ε : ℝ) (h : max 0 δ < ε), thickening ε E := by
+ rw [← cthickening_max_zero, cthickening_eq_Inter_thickening]; exact le_max_left _ _
#align metric.cthickening_eq_Inter_thickening'' Metric.cthickening_eq_iInter_thickening''
/- warning: metric.closure_eq_Inter_cthickening' -> Metric.closure_eq_iInter_cthickening' is a dubious translation:
@@ -2306,8 +2278,7 @@ theorem closure_eq_iInter_cthickening' (E : Set α) (s : Set ℝ)
(hs : ∀ ε, 0 < ε → (s ∩ Ioc 0 ε).Nonempty) : closure E = ⋂ δ ∈ s, cthickening δ E :=
by
by_cases hs₀ : s ⊆ Ioi 0
- · rw [← cthickening_zero]
- apply cthickening_eq_Inter_cthickening' _ hs₀ hs
+ · rw [← cthickening_zero]; apply cthickening_eq_Inter_cthickening' _ hs₀ hs
obtain ⟨δ, hδs, δ_nonpos⟩ := not_subset.mp hs₀
rw [Set.mem_Ioi, not_lt] at δ_nonpos
apply subset.antisymm
@@ -2324,9 +2295,7 @@ but is expected to have type
Case conversion may be inaccurate. Consider using '#align metric.closure_eq_Inter_cthickening Metric.closure_eq_iInter_cthickeningₓ'. -/
/-- The closure of a set equals the intersection of its closed thickenings of positive radii. -/
theorem closure_eq_iInter_cthickening (E : Set α) :
- closure E = ⋂ (δ : ℝ) (h : 0 < δ), cthickening δ E :=
- by
- rw [← cthickening_zero]
+ closure E = ⋂ (δ : ℝ) (h : 0 < δ), cthickening δ E := by rw [← cthickening_zero];
exact cthickening_eq_Inter_cthickening E
#align metric.closure_eq_Inter_cthickening Metric.closure_eq_iInter_cthickening
@@ -2339,10 +2308,8 @@ Case conversion may be inaccurate. Consider using '#align metric.closure_eq_Inte
/-- The closure of a set equals the intersection of its open thickenings of positive radii
accumulating at zero. -/
theorem closure_eq_iInter_thickening' (E : Set α) (s : Set ℝ) (hs₀ : s ⊆ Ioi 0)
- (hs : ∀ ε, 0 < ε → (s ∩ Ioc 0 ε).Nonempty) : closure E = ⋂ δ ∈ s, thickening δ E :=
- by
- rw [← cthickening_zero]
- apply cthickening_eq_Inter_thickening' le_rfl _ hs₀ hs
+ (hs : ∀ ε, 0 < ε → (s ∩ Ioc 0 ε).Nonempty) : closure E = ⋂ δ ∈ s, thickening δ E := by
+ rw [← cthickening_zero]; apply cthickening_eq_Inter_thickening' le_rfl _ hs₀ hs
#align metric.closure_eq_Inter_thickening' Metric.closure_eq_iInter_thickening'
/- warning: metric.closure_eq_Inter_thickening -> Metric.closure_eq_iInter_thickening is a dubious translation:
@@ -2353,9 +2320,7 @@ but is expected to have type
Case conversion may be inaccurate. Consider using '#align metric.closure_eq_Inter_thickening Metric.closure_eq_iInter_thickeningₓ'. -/
/-- The closure of a set equals the intersection of its (open) thickenings of positive radii. -/
theorem closure_eq_iInter_thickening (E : Set α) :
- closure E = ⋂ (δ : ℝ) (h : 0 < δ), thickening δ E :=
- by
- rw [← cthickening_zero]
+ closure E = ⋂ (δ : ℝ) (h : 0 < δ), thickening δ E := by rw [← cthickening_zero];
exact cthickening_eq_Inter_thickening rfl.ge E
#align metric.closure_eq_Inter_thickening Metric.closure_eq_iInter_thickening
mathlib commit https://github.com/leanprover-community/mathlib/commit/ef95945cd48c932c9e034872bd25c3c220d9c946
@@ -323,12 +323,18 @@ theorem infEdist_image (hΦ : Isometry Φ) : infEdist (Φ x) (Φ '' t) = infEdis
#align emetric.inf_edist_image EMetric.infEdist_image
-/
+/- warning: emetric.inf_edist_smul -> EMetric.infEdist_smul is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {M : Type.{u2}} [_inst_3 : SMul.{u2, u1} M α] [_inst_4 : IsometricSMul.{u2, u1} M α _inst_1 _inst_3] (c : M) (x : α) (s : Set.{u1} α), Eq.{1} ENNReal (EMetric.infEdist.{u1} α _inst_1 (SMul.smul.{u2, u1} M α _inst_3 c x) (SMul.smul.{u2, u1} M (Set.{u1} α) (Set.smulSet.{u2, u1} M α _inst_3) c s)) (EMetric.infEdist.{u1} α _inst_1 x s)
+but is expected to have type
+ forall {α : Type.{u2}} [_inst_1 : PseudoEMetricSpace.{u2} α] {M : Type.{u1}} [_inst_3 : SMul.{u1, u2} M α] [_inst_4 : IsometricSMul.{u1, u2} M α _inst_1 _inst_3] (c : M) (x : α) (s : Set.{u2} α), Eq.{1} ENNReal (EMetric.infEdist.{u2} α _inst_1 (HSMul.hSMul.{u1, u2, u2} M α α (instHSMul.{u1, u2} M α _inst_3) c x) (HSMul.hSMul.{u1, u2, u2} M (Set.{u2} α) (Set.{u2} α) (instHSMul.{u1, u2} M (Set.{u2} α) (Set.smulSet.{u1, u2} M α _inst_3)) c s)) (EMetric.infEdist.{u2} α _inst_1 x s)
+Case conversion may be inaccurate. Consider using '#align emetric.inf_edist_smul EMetric.infEdist_smulₓ'. -/
@[simp, to_additive]
theorem infEdist_smul {M} [SMul M α] [IsometricSMul M α] (c : M) (x : α) (s : Set α) :
infEdist (c • x) (c • s) = infEdist x s :=
infEdist_image (isometry_smul _ _)
-#align emetric.inf_edist_smul Emetric.infEdist_smul
-#align emetric.inf_edist_vadd Emetric.infEdist_vadd
+#align emetric.inf_edist_smul EMetric.infEdist_smul
+#align emetric.inf_edist_vadd EMetric.infEdist_vadd
/- warning: is_open.exists_Union_is_closed -> IsOpen.exists_iUnion_isClosed is a dubious translation:
lean 3 declaration is
mathlib commit https://github.com/leanprover-community/mathlib/commit/ef95945cd48c932c9e034872bd25c3c220d9c946
@@ -4,11 +4,12 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Sébastien Gouëzel
! This file was ported from Lean 3 source module topology.metric_space.hausdorff_distance
-! leanprover-community/mathlib commit c1686dff26eaecf4efd4edd141ebf78de309ae80
+! leanprover-community/mathlib commit bc91ed7093bf098d253401e69df601fc33dde156
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
import Mathbin.Analysis.SpecificLimits.Basic
+import Mathbin.Topology.MetricSpace.IsometricSmul
import Mathbin.Topology.MetricSpace.Isometry
import Mathbin.Topology.Instances.Ennreal
@@ -38,7 +39,7 @@ This files introduces:
noncomputable section
-open Classical NNReal ENNReal Topology
+open Classical NNReal ENNReal Topology Pointwise
universe u v w
@@ -322,6 +323,13 @@ theorem infEdist_image (hΦ : Isometry Φ) : infEdist (Φ x) (Φ '' t) = infEdis
#align emetric.inf_edist_image EMetric.infEdist_image
-/
+@[simp, to_additive]
+theorem infEdist_smul {M} [SMul M α] [IsometricSMul M α] (c : M) (x : α) (s : Set α) :
+ infEdist (c • x) (c • s) = infEdist x s :=
+ infEdist_image (isometry_smul _ _)
+#align emetric.inf_edist_smul Emetric.infEdist_smul
+#align emetric.inf_edist_vadd Emetric.infEdist_vadd
+
/- warning: is_open.exists_Union_is_closed -> IsOpen.exists_iUnion_isClosed is a dubious translation:
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {U : Set.{u1} α}, (IsOpen.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) U) -> (Exists.{succ u1} (Nat -> (Set.{u1} α)) (fun (F : Nat -> (Set.{u1} α)) => And (forall (n : Nat), IsClosed.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) (F n)) (And (forall (n : Nat), HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) (F n) U) (And (Eq.{succ u1} (Set.{u1} α) (Set.iUnion.{u1, 1} α Nat (fun (n : Nat) => F n)) U) (Monotone.{0, u1} Nat (Set.{u1} α) (PartialOrder.toPreorder.{0} Nat (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring))) (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α))))))) F)))))
mathlib commit https://github.com/leanprover-community/mathlib/commit/0b9eaaa7686280fad8cce467f5c3c57ee6ce77f8
@@ -75,7 +75,7 @@ theorem infEdist_empty : infEdist x ∅ = ∞ :=
/- warning: emetric.le_inf_edist -> EMetric.le_infEdist is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {s : Set.{u1} α} {d : ENNReal}, Iff (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) d (EMetric.infEdist.{u1} α _inst_1 x s)) (forall (y : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) -> (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) d (EDist.edist.{u1} α (PseudoEMetricSpace.toHasEdist.{u1} α _inst_1) x y)))
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {s : Set.{u1} α} {d : ENNReal}, Iff (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) d (EMetric.infEdist.{u1} α _inst_1 x s)) (forall (y : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) -> (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) d (EDist.edist.{u1} α (PseudoEMetricSpace.toHasEdist.{u1} α _inst_1) x y)))
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {s : Set.{u1} α} {d : ENNReal}, Iff (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) d (EMetric.infEdist.{u1} α _inst_1 x s)) (forall (y : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y s) -> (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) d (EDist.edist.{u1} α (PseudoEMetricSpace.toEDist.{u1} α _inst_1) x y)))
Case conversion may be inaccurate. Consider using '#align emetric.le_inf_edist EMetric.le_infEdistₓ'. -/
@@ -112,7 +112,7 @@ theorem infEdist_singleton : infEdist x {y} = edist x y :=
/- warning: emetric.inf_edist_le_edist_of_mem -> EMetric.infEdist_le_edist_of_mem is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {y : α} {s : Set.{u1} α}, (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) -> (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.infEdist.{u1} α _inst_1 x s) (EDist.edist.{u1} α (PseudoEMetricSpace.toHasEdist.{u1} α _inst_1) x y))
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {y : α} {s : Set.{u1} α}, (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) -> (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.infEdist.{u1} α _inst_1 x s) (EDist.edist.{u1} α (PseudoEMetricSpace.toHasEdist.{u1} α _inst_1) x y))
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {y : α} {s : Set.{u1} α}, (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y s) -> (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.infEdist.{u1} α _inst_1 x s) (EDist.edist.{u1} α (PseudoEMetricSpace.toEDist.{u1} α _inst_1) x y))
Case conversion may be inaccurate. Consider using '#align emetric.inf_edist_le_edist_of_mem EMetric.infEdist_le_edist_of_memₓ'. -/
@@ -134,7 +134,7 @@ theorem infEdist_zero_of_mem (h : x ∈ s) : infEdist x s = 0 :=
/- warning: emetric.inf_edist_anti -> EMetric.infEdist_anti is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {s : Set.{u1} α} {t : Set.{u1} α}, (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) s t) -> (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.infEdist.{u1} α _inst_1 x t) (EMetric.infEdist.{u1} α _inst_1 x s))
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {s : Set.{u1} α} {t : Set.{u1} α}, (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) s t) -> (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.infEdist.{u1} α _inst_1 x t) (EMetric.infEdist.{u1} α _inst_1 x s))
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {s : Set.{u1} α} {t : Set.{u1} α}, (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) s t) -> (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.infEdist.{u1} α _inst_1 x t) (EMetric.infEdist.{u1} α _inst_1 x s))
Case conversion may be inaccurate. Consider using '#align emetric.inf_edist_anti EMetric.infEdist_antiₓ'. -/
@@ -145,7 +145,7 @@ theorem infEdist_anti (h : s ⊆ t) : infEdist x t ≤ infEdist x s :=
/- warning: emetric.inf_edist_lt_iff -> EMetric.infEdist_lt_iff is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {s : Set.{u1} α} {r : ENNReal}, Iff (LT.lt.{0} ENNReal (Preorder.toLT.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.infEdist.{u1} α _inst_1 x s) r) (Exists.{succ u1} α (fun (y : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) => LT.lt.{0} ENNReal (Preorder.toLT.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EDist.edist.{u1} α (PseudoEMetricSpace.toHasEdist.{u1} α _inst_1) x y) r)))
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {s : Set.{u1} α} {r : ENNReal}, Iff (LT.lt.{0} ENNReal (Preorder.toHasLt.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.infEdist.{u1} α _inst_1 x s) r) (Exists.{succ u1} α (fun (y : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) => LT.lt.{0} ENNReal (Preorder.toHasLt.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EDist.edist.{u1} α (PseudoEMetricSpace.toHasEdist.{u1} α _inst_1) x y) r)))
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {s : Set.{u1} α} {r : ENNReal}, Iff (LT.lt.{0} ENNReal (Preorder.toLT.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.infEdist.{u1} α _inst_1 x s) r) (Exists.{succ u1} α (fun (y : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y s) (LT.lt.{0} ENNReal (Preorder.toLT.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EDist.edist.{u1} α (PseudoEMetricSpace.toEDist.{u1} α _inst_1) x y) r)))
Case conversion may be inaccurate. Consider using '#align emetric.inf_edist_lt_iff EMetric.infEdist_lt_iffₓ'. -/
@@ -156,7 +156,7 @@ theorem infEdist_lt_iff {r : ℝ≥0∞} : infEdist x s < r ↔ ∃ y ∈ s, edi
/- warning: emetric.inf_edist_le_inf_edist_add_edist -> EMetric.infEdist_le_infEdist_add_edist is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {y : α} {s : Set.{u1} α}, LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.infEdist.{u1} α _inst_1 x s) (HAdd.hAdd.{0, 0, 0} ENNReal ENNReal ENNReal (instHAdd.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring)))))))) (EMetric.infEdist.{u1} α _inst_1 y s) (EDist.edist.{u1} α (PseudoEMetricSpace.toHasEdist.{u1} α _inst_1) x y))
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {y : α} {s : Set.{u1} α}, LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.infEdist.{u1} α _inst_1 x s) (HAdd.hAdd.{0, 0, 0} ENNReal ENNReal ENNReal (instHAdd.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring)))))))) (EMetric.infEdist.{u1} α _inst_1 y s) (EDist.edist.{u1} α (PseudoEMetricSpace.toHasEdist.{u1} α _inst_1) x y))
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {y : α} {s : Set.{u1} α}, LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.infEdist.{u1} α _inst_1 x s) (HAdd.hAdd.{0, 0, 0} ENNReal ENNReal ENNReal (instHAdd.{0} ENNReal (Distrib.toAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal)))))))) (EMetric.infEdist.{u1} α _inst_1 y s) (EDist.edist.{u1} α (PseudoEMetricSpace.toEDist.{u1} α _inst_1) x y))
Case conversion may be inaccurate. Consider using '#align emetric.inf_edist_le_inf_edist_add_edist EMetric.infEdist_le_infEdist_add_edistₓ'. -/
@@ -172,7 +172,7 @@ theorem infEdist_le_infEdist_add_edist : infEdist x s ≤ infEdist y s + edist x
/- warning: emetric.inf_edist_le_edist_add_inf_edist -> EMetric.infEdist_le_edist_add_infEdist is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {y : α} {s : Set.{u1} α}, LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.infEdist.{u1} α _inst_1 x s) (HAdd.hAdd.{0, 0, 0} ENNReal ENNReal ENNReal (instHAdd.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring)))))))) (EDist.edist.{u1} α (PseudoEMetricSpace.toHasEdist.{u1} α _inst_1) x y) (EMetric.infEdist.{u1} α _inst_1 y s))
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {y : α} {s : Set.{u1} α}, LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.infEdist.{u1} α _inst_1 x s) (HAdd.hAdd.{0, 0, 0} ENNReal ENNReal ENNReal (instHAdd.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring)))))))) (EDist.edist.{u1} α (PseudoEMetricSpace.toHasEdist.{u1} α _inst_1) x y) (EMetric.infEdist.{u1} α _inst_1 y s))
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {y : α} {s : Set.{u1} α}, LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.infEdist.{u1} α _inst_1 x s) (HAdd.hAdd.{0, 0, 0} ENNReal ENNReal ENNReal (instHAdd.{0} ENNReal (Distrib.toAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal)))))))) (EDist.edist.{u1} α (PseudoEMetricSpace.toEDist.{u1} α _inst_1) x y) (EMetric.infEdist.{u1} α _inst_1 y s))
Case conversion may be inaccurate. Consider using '#align emetric.inf_edist_le_edist_add_inf_edist EMetric.infEdist_le_edist_add_infEdistₓ'. -/
@@ -184,7 +184,7 @@ theorem infEdist_le_edist_add_infEdist : infEdist x s ≤ edist x y + infEdist y
/- warning: emetric.edist_le_inf_edist_add_ediam -> EMetric.edist_le_infEdist_add_ediam is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {y : α} {s : Set.{u1} α}, (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) -> (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EDist.edist.{u1} α (PseudoEMetricSpace.toHasEdist.{u1} α _inst_1) x y) (HAdd.hAdd.{0, 0, 0} ENNReal ENNReal ENNReal (instHAdd.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring)))))))) (EMetric.infEdist.{u1} α _inst_1 x s) (EMetric.diam.{u1} α _inst_1 s)))
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {y : α} {s : Set.{u1} α}, (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) -> (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EDist.edist.{u1} α (PseudoEMetricSpace.toHasEdist.{u1} α _inst_1) x y) (HAdd.hAdd.{0, 0, 0} ENNReal ENNReal ENNReal (instHAdd.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring)))))))) (EMetric.infEdist.{u1} α _inst_1 x s) (EMetric.diam.{u1} α _inst_1 s)))
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {y : α} {s : Set.{u1} α}, (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y s) -> (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EDist.edist.{u1} α (PseudoEMetricSpace.toEDist.{u1} α _inst_1) x y) (HAdd.hAdd.{0, 0, 0} ENNReal ENNReal ENNReal (instHAdd.{0} ENNReal (Distrib.toAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal)))))))) (EMetric.infEdist.{u1} α _inst_1 x s) (EMetric.diam.{u1} α _inst_1 s)))
Case conversion may be inaccurate. Consider using '#align emetric.edist_le_inf_edist_add_ediam EMetric.edist_le_infEdist_add_ediamₓ'. -/
@@ -262,7 +262,7 @@ theorem mem_iff_infEdist_zero_of_closed (h : IsClosed s) : x ∈ s ↔ infEdist
/- warning: emetric.inf_edist_pos_iff_not_mem_closure -> EMetric.infEdist_pos_iff_not_mem_closure is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {E : Set.{u1} α}, Iff (LT.lt.{0} ENNReal (Preorder.toLT.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 0 (OfNat.mk.{0} ENNReal 0 (Zero.zero.{0} ENNReal ENNReal.hasZero))) (EMetric.infEdist.{u1} α _inst_1 x E)) (Not (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E)))
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {E : Set.{u1} α}, Iff (LT.lt.{0} ENNReal (Preorder.toHasLt.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 0 (OfNat.mk.{0} ENNReal 0 (Zero.zero.{0} ENNReal ENNReal.hasZero))) (EMetric.infEdist.{u1} α _inst_1 x E)) (Not (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E)))
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {E : Set.{u1} α}, Iff (LT.lt.{0} ENNReal (Preorder.toLT.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 0 (Zero.toOfNat0.{0} ENNReal instENNRealZero)) (EMetric.infEdist.{u1} α _inst_1 x E)) (Not (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E)))
Case conversion may be inaccurate. Consider using '#align emetric.inf_edist_pos_iff_not_mem_closure EMetric.infEdist_pos_iff_not_mem_closureₓ'. -/
@@ -274,7 +274,7 @@ theorem infEdist_pos_iff_not_mem_closure {x : α} {E : Set α} : 0 < infEdist x
/- warning: emetric.inf_edist_closure_pos_iff_not_mem_closure -> EMetric.infEdist_closure_pos_iff_not_mem_closure is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {E : Set.{u1} α}, Iff (LT.lt.{0} ENNReal (Preorder.toLT.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 0 (OfNat.mk.{0} ENNReal 0 (Zero.zero.{0} ENNReal ENNReal.hasZero))) (EMetric.infEdist.{u1} α _inst_1 x (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E))) (Not (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E)))
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {E : Set.{u1} α}, Iff (LT.lt.{0} ENNReal (Preorder.toHasLt.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 0 (OfNat.mk.{0} ENNReal 0 (Zero.zero.{0} ENNReal ENNReal.hasZero))) (EMetric.infEdist.{u1} α _inst_1 x (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E))) (Not (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E)))
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {E : Set.{u1} α}, Iff (LT.lt.{0} ENNReal (Preorder.toLT.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 0 (Zero.toOfNat0.{0} ENNReal instENNRealZero)) (EMetric.infEdist.{u1} α _inst_1 x (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E))) (Not (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E)))
Case conversion may be inaccurate. Consider using '#align emetric.inf_edist_closure_pos_iff_not_mem_closure EMetric.infEdist_closure_pos_iff_not_mem_closureₓ'. -/
@@ -285,7 +285,7 @@ theorem infEdist_closure_pos_iff_not_mem_closure {x : α} {E : Set α} :
/- warning: emetric.exists_real_pos_lt_inf_edist_of_not_mem_closure -> EMetric.exists_real_pos_lt_infEdist_of_not_mem_closure is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {E : Set.{u1} α}, (Not (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E))) -> (Exists.{1} Real (fun (ε : Real) => And (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) ε) (LT.lt.{0} ENNReal (Preorder.toLT.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (ENNReal.ofReal ε) (EMetric.infEdist.{u1} α _inst_1 x E))))
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {E : Set.{u1} α}, (Not (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E))) -> (Exists.{1} Real (fun (ε : Real) => And (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) ε) (LT.lt.{0} ENNReal (Preorder.toHasLt.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (ENNReal.ofReal ε) (EMetric.infEdist.{u1} α _inst_1 x E))))
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {E : Set.{u1} α}, (Not (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E))) -> (Exists.{1} Real (fun (ε : Real) => And (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) ε) (LT.lt.{0} ENNReal (Preorder.toLT.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (ENNReal.ofReal ε) (EMetric.infEdist.{u1} α _inst_1 x E))))
Case conversion may be inaccurate. Consider using '#align emetric.exists_real_pos_lt_inf_edist_of_not_mem_closure EMetric.exists_real_pos_lt_infEdist_of_not_mem_closureₓ'. -/
@@ -299,7 +299,7 @@ theorem exists_real_pos_lt_infEdist_of_not_mem_closure {x : α} {E : Set α} (h
/- warning: emetric.disjoint_closed_ball_of_lt_inf_edist -> EMetric.disjoint_closedBall_of_lt_infEdist is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {s : Set.{u1} α} {r : ENNReal}, (LT.lt.{0} ENNReal (Preorder.toLT.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) r (EMetric.infEdist.{u1} α _inst_1 x s)) -> (Disjoint.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} (Set.{u1} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α))) (EMetric.closedBall.{u1} α _inst_1 x r) s)
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {s : Set.{u1} α} {r : ENNReal}, (LT.lt.{0} ENNReal (Preorder.toHasLt.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) r (EMetric.infEdist.{u1} α _inst_1 x s)) -> (Disjoint.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} (Set.{u1} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α))) (EMetric.closedBall.{u1} α _inst_1 x r) s)
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {s : Set.{u1} α} {r : ENNReal}, (LT.lt.{0} ENNReal (Preorder.toLT.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) r (EMetric.infEdist.{u1} α _inst_1 x s)) -> (Disjoint.{u1} (Set.{u1} α) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) (BoundedOrder.toOrderBot.{u1} (Set.{u1} α) (Preorder.toLE.{u1} (Set.{u1} α) (PartialOrder.toPreorder.{u1} (Set.{u1} α) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))))) (CompleteLattice.toBoundedOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) (EMetric.closedBall.{u1} α _inst_1 x r) s)
Case conversion may be inaccurate. Consider using '#align emetric.disjoint_closed_ball_of_lt_inf_edist EMetric.disjoint_closedBall_of_lt_infEdistₓ'. -/
@@ -372,7 +372,7 @@ theorem IsCompact.exists_infEdist_eq_edist (hs : IsCompact s) (hne : s.Nonempty)
/- warning: emetric.exists_pos_forall_lt_edist -> EMetric.exists_pos_forall_lt_edist is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (IsCompact.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) s) -> (IsClosed.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) t) -> (Disjoint.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} (Set.{u1} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α))) s t) -> (Exists.{1} NNReal (fun (r : NNReal) => And (LT.lt.{0} NNReal (Preorder.toLT.{0} NNReal (PartialOrder.toPreorder.{0} NNReal (OrderedCancelAddCommMonoid.toPartialOrder.{0} NNReal (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} NNReal NNReal.strictOrderedSemiring)))) (OfNat.ofNat.{0} NNReal 0 (OfNat.mk.{0} NNReal 0 (Zero.zero.{0} NNReal (MulZeroClass.toHasZero.{0} NNReal (NonUnitalNonAssocSemiring.toMulZeroClass.{0} NNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} NNReal (Semiring.toNonAssocSemiring.{0} NNReal NNReal.semiring))))))) r) (forall (x : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) -> (forall (y : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y t) -> (LT.lt.{0} ENNReal (Preorder.toLT.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) NNReal ENNReal (HasLiftT.mk.{1, 1} NNReal ENNReal (CoeTCₓ.coe.{1, 1} NNReal ENNReal (coeBase.{1, 1} NNReal ENNReal ENNReal.hasCoe))) r) (EDist.edist.{u1} α (PseudoEMetricSpace.toHasEdist.{u1} α _inst_1) x y))))))
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (IsCompact.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) s) -> (IsClosed.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) t) -> (Disjoint.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} (Set.{u1} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α))) s t) -> (Exists.{1} NNReal (fun (r : NNReal) => And (LT.lt.{0} NNReal (Preorder.toHasLt.{0} NNReal (PartialOrder.toPreorder.{0} NNReal (OrderedCancelAddCommMonoid.toPartialOrder.{0} NNReal (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} NNReal NNReal.strictOrderedSemiring)))) (OfNat.ofNat.{0} NNReal 0 (OfNat.mk.{0} NNReal 0 (Zero.zero.{0} NNReal (MulZeroClass.toHasZero.{0} NNReal (NonUnitalNonAssocSemiring.toMulZeroClass.{0} NNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} NNReal (Semiring.toNonAssocSemiring.{0} NNReal NNReal.semiring))))))) r) (forall (x : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) -> (forall (y : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y t) -> (LT.lt.{0} ENNReal (Preorder.toHasLt.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) NNReal ENNReal (HasLiftT.mk.{1, 1} NNReal ENNReal (CoeTCₓ.coe.{1, 1} NNReal ENNReal (coeBase.{1, 1} NNReal ENNReal ENNReal.hasCoe))) r) (EDist.edist.{u1} α (PseudoEMetricSpace.toHasEdist.{u1} α _inst_1) x y))))))
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (IsCompact.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) s) -> (IsClosed.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) t) -> (Disjoint.{u1} (Set.{u1} α) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) (BoundedOrder.toOrderBot.{u1} (Set.{u1} α) (Preorder.toLE.{u1} (Set.{u1} α) (PartialOrder.toPreorder.{u1} (Set.{u1} α) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))))) (CompleteLattice.toBoundedOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) s t) -> (Exists.{1} NNReal (fun (r : NNReal) => And (LT.lt.{0} NNReal (Preorder.toLT.{0} NNReal (PartialOrder.toPreorder.{0} NNReal (StrictOrderedSemiring.toPartialOrder.{0} NNReal instNNRealStrictOrderedSemiring))) (OfNat.ofNat.{0} NNReal 0 (Zero.toOfNat0.{0} NNReal instNNRealZero)) r) (forall (x : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) -> (forall (y : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y t) -> (LT.lt.{0} ENNReal (Preorder.toLT.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (ENNReal.some r) (EDist.edist.{u1} α (PseudoEMetricSpace.toEDist.{u1} α _inst_1) x y))))))
Case conversion may be inaccurate. Consider using '#align emetric.exists_pos_forall_lt_edist EMetric.exists_pos_forall_lt_edistₓ'. -/
@@ -441,7 +441,7 @@ theorem hausdorffEdist_comm : hausdorffEdist s t = hausdorffEdist t s := by
/- warning: emetric.Hausdorff_edist_le_of_inf_edist -> EMetric.hausdorffEdist_le_of_infEdist is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α} {r : ENNReal}, (forall (x : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) -> (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.infEdist.{u1} α _inst_1 x t) r)) -> (forall (x : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x t) -> (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.infEdist.{u1} α _inst_1 x s) r)) -> (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.hausdorffEdist.{u1} α _inst_1 s t) r)
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α} {r : ENNReal}, (forall (x : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) -> (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.infEdist.{u1} α _inst_1 x t) r)) -> (forall (x : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x t) -> (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.infEdist.{u1} α _inst_1 x s) r)) -> (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.hausdorffEdist.{u1} α _inst_1 s t) r)
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α} {r : ENNReal}, (forall (x : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) -> (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.infEdist.{u1} α _inst_1 x t) r)) -> (forall (x : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x t) -> (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.infEdist.{u1} α _inst_1 x s) r)) -> (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.hausdorffEdist.{u1} α _inst_1 s t) r)
Case conversion may be inaccurate. Consider using '#align emetric.Hausdorff_edist_le_of_inf_edist EMetric.hausdorffEdist_le_of_infEdistₓ'. -/
@@ -456,7 +456,7 @@ theorem hausdorffEdist_le_of_infEdist {r : ℝ≥0∞} (H1 : ∀ x ∈ s, infEdi
/- warning: emetric.Hausdorff_edist_le_of_mem_edist -> EMetric.hausdorffEdist_le_of_mem_edist is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α} {r : ENNReal}, (forall (x : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) -> (Exists.{succ u1} α (fun (y : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y t) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y t) => LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EDist.edist.{u1} α (PseudoEMetricSpace.toHasEdist.{u1} α _inst_1) x y) r)))) -> (forall (x : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x t) -> (Exists.{succ u1} α (fun (y : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) => LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EDist.edist.{u1} α (PseudoEMetricSpace.toHasEdist.{u1} α _inst_1) x y) r)))) -> (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.hausdorffEdist.{u1} α _inst_1 s t) r)
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α} {r : ENNReal}, (forall (x : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) -> (Exists.{succ u1} α (fun (y : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y t) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y t) => LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EDist.edist.{u1} α (PseudoEMetricSpace.toHasEdist.{u1} α _inst_1) x y) r)))) -> (forall (x : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x t) -> (Exists.{succ u1} α (fun (y : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) => LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EDist.edist.{u1} α (PseudoEMetricSpace.toHasEdist.{u1} α _inst_1) x y) r)))) -> (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.hausdorffEdist.{u1} α _inst_1 s t) r)
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α} {r : ENNReal}, (forall (x : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) -> (Exists.{succ u1} α (fun (y : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y t) (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EDist.edist.{u1} α (PseudoEMetricSpace.toEDist.{u1} α _inst_1) x y) r)))) -> (forall (x : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x t) -> (Exists.{succ u1} α (fun (y : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y s) (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EDist.edist.{u1} α (PseudoEMetricSpace.toEDist.{u1} α _inst_1) x y) r)))) -> (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.hausdorffEdist.{u1} α _inst_1 s t) r)
Case conversion may be inaccurate. Consider using '#align emetric.Hausdorff_edist_le_of_mem_edist EMetric.hausdorffEdist_le_of_mem_edistₓ'. -/
@@ -476,7 +476,7 @@ theorem hausdorffEdist_le_of_mem_edist {r : ℝ≥0∞} (H1 : ∀ x ∈ s, ∃ y
/- warning: emetric.inf_edist_le_Hausdorff_edist_of_mem -> EMetric.infEdist_le_hausdorffEdist_of_mem is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {s : Set.{u1} α} {t : Set.{u1} α}, (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) -> (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.infEdist.{u1} α _inst_1 x t) (EMetric.hausdorffEdist.{u1} α _inst_1 s t))
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {s : Set.{u1} α} {t : Set.{u1} α}, (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) -> (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.infEdist.{u1} α _inst_1 x t) (EMetric.hausdorffEdist.{u1} α _inst_1 s t))
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {s : Set.{u1} α} {t : Set.{u1} α}, (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) -> (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.infEdist.{u1} α _inst_1 x t) (EMetric.hausdorffEdist.{u1} α _inst_1 s t))
Case conversion may be inaccurate. Consider using '#align emetric.inf_edist_le_Hausdorff_edist_of_mem EMetric.infEdist_le_hausdorffEdist_of_memₓ'. -/
@@ -490,7 +490,7 @@ theorem infEdist_le_hausdorffEdist_of_mem (h : x ∈ s) : infEdist x t ≤ hausd
/- warning: emetric.exists_edist_lt_of_Hausdorff_edist_lt -> EMetric.exists_edist_lt_of_hausdorffEdist_lt is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {s : Set.{u1} α} {t : Set.{u1} α} {r : ENNReal}, (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) -> (LT.lt.{0} ENNReal (Preorder.toLT.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.hausdorffEdist.{u1} α _inst_1 s t) r) -> (Exists.{succ u1} α (fun (y : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y t) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y t) => LT.lt.{0} ENNReal (Preorder.toLT.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EDist.edist.{u1} α (PseudoEMetricSpace.toHasEdist.{u1} α _inst_1) x y) r)))
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {s : Set.{u1} α} {t : Set.{u1} α} {r : ENNReal}, (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) -> (LT.lt.{0} ENNReal (Preorder.toHasLt.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.hausdorffEdist.{u1} α _inst_1 s t) r) -> (Exists.{succ u1} α (fun (y : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y t) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y t) => LT.lt.{0} ENNReal (Preorder.toHasLt.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EDist.edist.{u1} α (PseudoEMetricSpace.toHasEdist.{u1} α _inst_1) x y) r)))
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {s : Set.{u1} α} {t : Set.{u1} α} {r : ENNReal}, (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) -> (LT.lt.{0} ENNReal (Preorder.toLT.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.hausdorffEdist.{u1} α _inst_1 s t) r) -> (Exists.{succ u1} α (fun (y : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y t) (LT.lt.{0} ENNReal (Preorder.toLT.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EDist.edist.{u1} α (PseudoEMetricSpace.toEDist.{u1} α _inst_1) x y) r)))
Case conversion may be inaccurate. Consider using '#align emetric.exists_edist_lt_of_Hausdorff_edist_lt EMetric.exists_edist_lt_of_hausdorffEdist_ltₓ'. -/
@@ -507,7 +507,7 @@ theorem exists_edist_lt_of_hausdorffEdist_lt {r : ℝ≥0∞} (h : x ∈ s) (H :
/- warning: emetric.inf_edist_le_inf_edist_add_Hausdorff_edist -> EMetric.infEdist_le_infEdist_add_hausdorffEdist is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {s : Set.{u1} α} {t : Set.{u1} α}, LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.infEdist.{u1} α _inst_1 x t) (HAdd.hAdd.{0, 0, 0} ENNReal ENNReal ENNReal (instHAdd.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring)))))))) (EMetric.infEdist.{u1} α _inst_1 x s) (EMetric.hausdorffEdist.{u1} α _inst_1 s t))
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {s : Set.{u1} α} {t : Set.{u1} α}, LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.infEdist.{u1} α _inst_1 x t) (HAdd.hAdd.{0, 0, 0} ENNReal ENNReal ENNReal (instHAdd.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring)))))))) (EMetric.infEdist.{u1} α _inst_1 x s) (EMetric.hausdorffEdist.{u1} α _inst_1 s t))
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {s : Set.{u1} α} {t : Set.{u1} α}, LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.infEdist.{u1} α _inst_1 x t) (HAdd.hAdd.{0, 0, 0} ENNReal ENNReal ENNReal (instHAdd.{0} ENNReal (Distrib.toAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal)))))))) (EMetric.infEdist.{u1} α _inst_1 x s) (EMetric.hausdorffEdist.{u1} α _inst_1 s t))
Case conversion may be inaccurate. Consider using '#align emetric.inf_edist_le_inf_edist_add_Hausdorff_edist EMetric.infEdist_le_infEdist_add_hausdorffEdistₓ'. -/
@@ -545,7 +545,7 @@ theorem hausdorffEdist_image (h : Isometry Φ) :
/- warning: emetric.Hausdorff_edist_le_ediam -> EMetric.hausdorffEdist_le_ediam is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (Set.Nonempty.{u1} α s) -> (Set.Nonempty.{u1} α t) -> (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.hausdorffEdist.{u1} α _inst_1 s t) (EMetric.diam.{u1} α _inst_1 (Union.union.{u1} (Set.{u1} α) (Set.hasUnion.{u1} α) s t)))
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (Set.Nonempty.{u1} α s) -> (Set.Nonempty.{u1} α t) -> (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.hausdorffEdist.{u1} α _inst_1 s t) (EMetric.diam.{u1} α _inst_1 (Union.union.{u1} (Set.{u1} α) (Set.hasUnion.{u1} α) s t)))
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (Set.Nonempty.{u1} α s) -> (Set.Nonempty.{u1} α t) -> (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.hausdorffEdist.{u1} α _inst_1 s t) (EMetric.diam.{u1} α _inst_1 (Union.union.{u1} (Set.{u1} α) (Set.instUnionSet.{u1} α) s t)))
Case conversion may be inaccurate. Consider using '#align emetric.Hausdorff_edist_le_ediam EMetric.hausdorffEdist_le_ediamₓ'. -/
@@ -564,7 +564,7 @@ theorem hausdorffEdist_le_ediam (hs : s.Nonempty) (ht : t.Nonempty) :
/- warning: emetric.Hausdorff_edist_triangle -> EMetric.hausdorffEdist_triangle is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α} {u : Set.{u1} α}, LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.hausdorffEdist.{u1} α _inst_1 s u) (HAdd.hAdd.{0, 0, 0} ENNReal ENNReal ENNReal (instHAdd.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring)))))))) (EMetric.hausdorffEdist.{u1} α _inst_1 s t) (EMetric.hausdorffEdist.{u1} α _inst_1 t u))
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α} {u : Set.{u1} α}, LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.hausdorffEdist.{u1} α _inst_1 s u) (HAdd.hAdd.{0, 0, 0} ENNReal ENNReal ENNReal (instHAdd.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring)))))))) (EMetric.hausdorffEdist.{u1} α _inst_1 s t) (EMetric.hausdorffEdist.{u1} α _inst_1 t u))
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α} {u : Set.{u1} α}, LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.hausdorffEdist.{u1} α _inst_1 s u) (HAdd.hAdd.{0, 0, 0} ENNReal ENNReal ENNReal (instHAdd.{0} ENNReal (Distrib.toAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal)))))))) (EMetric.hausdorffEdist.{u1} α _inst_1 s t) (EMetric.hausdorffEdist.{u1} α _inst_1 t u))
Case conversion may be inaccurate. Consider using '#align emetric.Hausdorff_edist_triangle EMetric.hausdorffEdist_triangleₓ'. -/
@@ -1526,7 +1526,7 @@ def thickening (δ : ℝ) (E : Set α) : Set α :=
/- warning: metric.mem_thickening_iff_inf_edist_lt -> Metric.mem_thickening_iff_infEdist_lt is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real} {s : Set.{u1} α} {x : α}, Iff (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (Metric.thickening.{u1} α _inst_1 δ s)) (LT.lt.{0} ENNReal (Preorder.toLT.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.infEdist.{u1} α _inst_1 x s) (ENNReal.ofReal δ))
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real} {s : Set.{u1} α} {x : α}, Iff (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (Metric.thickening.{u1} α _inst_1 δ s)) (LT.lt.{0} ENNReal (Preorder.toHasLt.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.infEdist.{u1} α _inst_1 x s) (ENNReal.ofReal δ))
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real} {s : Set.{u1} α} {x : α}, Iff (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x (Metric.thickening.{u1} α _inst_1 δ s)) (LT.lt.{0} ENNReal (Preorder.toLT.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.infEdist.{u1} α _inst_1 x s) (ENNReal.ofReal δ))
Case conversion may be inaccurate. Consider using '#align metric.mem_thickening_iff_inf_edist_lt Metric.mem_thickening_iff_infEdist_ltₓ'. -/
@@ -1594,7 +1594,7 @@ theorem thickening_subset_of_subset (δ : ℝ) {E₁ E₂ : Set α} (h : E₁
/- warning: metric.mem_thickening_iff_exists_edist_lt -> Metric.mem_thickening_iff_exists_edist_lt is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real} (E : Set.{u1} α) (x : α), Iff (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (Metric.thickening.{u1} α _inst_1 δ E)) (Exists.{succ u1} α (fun (z : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) z E) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) z E) => LT.lt.{0} ENNReal (Preorder.toLT.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EDist.edist.{u1} α (PseudoEMetricSpace.toHasEdist.{u1} α _inst_1) x z) (ENNReal.ofReal δ))))
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real} (E : Set.{u1} α) (x : α), Iff (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (Metric.thickening.{u1} α _inst_1 δ E)) (Exists.{succ u1} α (fun (z : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) z E) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) z E) => LT.lt.{0} ENNReal (Preorder.toHasLt.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EDist.edist.{u1} α (PseudoEMetricSpace.toHasEdist.{u1} α _inst_1) x z) (ENNReal.ofReal δ))))
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real} (E : Set.{u1} α) (x : α), Iff (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x (Metric.thickening.{u1} α _inst_1 δ E)) (Exists.{succ u1} α (fun (z : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) z E) (LT.lt.{0} ENNReal (Preorder.toLT.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EDist.edist.{u1} α (PseudoEMetricSpace.toEDist.{u1} α _inst_1) x z) (ENNReal.ofReal δ))))
Case conversion may be inaccurate. Consider using '#align metric.mem_thickening_iff_exists_edist_lt Metric.mem_thickening_iff_exists_edist_ltₓ'. -/
@@ -1715,7 +1715,7 @@ def cthickening (δ : ℝ) (E : Set α) : Set α :=
/- warning: metric.mem_cthickening_iff -> Metric.mem_cthickening_iff is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real} {s : Set.{u1} α} {x : α}, Iff (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (Metric.cthickening.{u1} α _inst_1 δ s)) (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.infEdist.{u1} α _inst_1 x s) (ENNReal.ofReal δ))
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real} {s : Set.{u1} α} {x : α}, Iff (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (Metric.cthickening.{u1} α _inst_1 δ s)) (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.infEdist.{u1} α _inst_1 x s) (ENNReal.ofReal δ))
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real} {s : Set.{u1} α} {x : α}, Iff (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x (Metric.cthickening.{u1} α _inst_1 δ s)) (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.infEdist.{u1} α _inst_1 x s) (ENNReal.ofReal δ))
Case conversion may be inaccurate. Consider using '#align metric.mem_cthickening_iff Metric.mem_cthickening_iffₓ'. -/
@@ -1726,7 +1726,7 @@ theorem mem_cthickening_iff : x ∈ cthickening δ s ↔ infEdist x s ≤ ENNRea
/- warning: metric.mem_cthickening_of_edist_le -> Metric.mem_cthickening_of_edist_le is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (x : α) (y : α) (δ : Real) (E : Set.{u1} α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y E) -> (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EDist.edist.{u1} α (PseudoEMetricSpace.toHasEdist.{u1} α _inst_1) x y) (ENNReal.ofReal δ)) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (Metric.cthickening.{u1} α _inst_1 δ E))
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (x : α) (y : α) (δ : Real) (E : Set.{u1} α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y E) -> (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EDist.edist.{u1} α (PseudoEMetricSpace.toHasEdist.{u1} α _inst_1) x y) (ENNReal.ofReal δ)) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (Metric.cthickening.{u1} α _inst_1 δ E))
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (x : α) (y : α) (δ : Real) (E : Set.{u1} α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y E) -> (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EDist.edist.{u1} α (PseudoEMetricSpace.toEDist.{u1} α _inst_1) x y) (ENNReal.ofReal δ)) -> (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x (Metric.cthickening.{u1} α _inst_1 δ E))
Case conversion may be inaccurate. Consider using '#align metric.mem_cthickening_of_edist_le Metric.mem_cthickening_of_edist_leₓ'. -/
@@ -2017,7 +2017,7 @@ theorem thickening_iUnion (δ : ℝ) (f : ι → Set α) :
/- warning: metric.ediam_cthickening_le -> Metric.ediam_cthickening_le is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} (ε : NNReal), LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.diam.{u1} α _inst_1 (Metric.cthickening.{u1} α _inst_1 ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) NNReal Real (HasLiftT.mk.{1, 1} NNReal Real (CoeTCₓ.coe.{1, 1} NNReal Real (coeBase.{1, 1} NNReal Real NNReal.Real.hasCoe))) ε) s)) (HAdd.hAdd.{0, 0, 0} ENNReal ENNReal ENNReal (instHAdd.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring)))))))) (EMetric.diam.{u1} α _inst_1 s) (HMul.hMul.{0, 0, 0} ENNReal ENNReal ENNReal (instHMul.{0} ENNReal (Distrib.toHasMul.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring)))))))) (OfNat.ofNat.{0} ENNReal 2 (OfNat.mk.{0} ENNReal 2 (bit0.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring))))))) (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne)))))) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) NNReal ENNReal (HasLiftT.mk.{1, 1} NNReal ENNReal (CoeTCₓ.coe.{1, 1} NNReal ENNReal (coeBase.{1, 1} NNReal ENNReal ENNReal.hasCoe))) ε)))
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} (ε : NNReal), LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.diam.{u1} α _inst_1 (Metric.cthickening.{u1} α _inst_1 ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) NNReal Real (HasLiftT.mk.{1, 1} NNReal Real (CoeTCₓ.coe.{1, 1} NNReal Real (coeBase.{1, 1} NNReal Real NNReal.Real.hasCoe))) ε) s)) (HAdd.hAdd.{0, 0, 0} ENNReal ENNReal ENNReal (instHAdd.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring)))))))) (EMetric.diam.{u1} α _inst_1 s) (HMul.hMul.{0, 0, 0} ENNReal ENNReal ENNReal (instHMul.{0} ENNReal (Distrib.toHasMul.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring)))))))) (OfNat.ofNat.{0} ENNReal 2 (OfNat.mk.{0} ENNReal 2 (bit0.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring))))))) (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne)))))) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) NNReal ENNReal (HasLiftT.mk.{1, 1} NNReal ENNReal (CoeTCₓ.coe.{1, 1} NNReal ENNReal (coeBase.{1, 1} NNReal ENNReal ENNReal.hasCoe))) ε)))
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} (ε : NNReal), LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.diam.{u1} α _inst_1 (Metric.cthickening.{u1} α _inst_1 (NNReal.toReal ε) s)) (HAdd.hAdd.{0, 0, 0} ENNReal ENNReal ENNReal (instHAdd.{0} ENNReal (Distrib.toAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal)))))))) (EMetric.diam.{u1} α _inst_1 s) (HMul.hMul.{0, 0, 0} ENNReal ENNReal ENNReal (instHMul.{0} ENNReal (CanonicallyOrderedCommSemiring.toMul.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal)) (OfNat.ofNat.{0} ENNReal 2 (instOfNat.{0} ENNReal 2 (CanonicallyOrderedCommSemiring.toNatCast.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal) (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))))) (ENNReal.some ε)))
Case conversion may be inaccurate. Consider using '#align metric.ediam_cthickening_le Metric.ediam_cthickening_leₓ'. -/
@@ -2045,7 +2045,7 @@ theorem ediam_cthickening_le (ε : ℝ≥0) : EMetric.diam (cthickening ε s)
/- warning: metric.ediam_thickening_le -> Metric.ediam_thickening_le is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} (ε : NNReal), LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.diam.{u1} α _inst_1 (Metric.thickening.{u1} α _inst_1 ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) NNReal Real (HasLiftT.mk.{1, 1} NNReal Real (CoeTCₓ.coe.{1, 1} NNReal Real (coeBase.{1, 1} NNReal Real NNReal.Real.hasCoe))) ε) s)) (HAdd.hAdd.{0, 0, 0} ENNReal ENNReal ENNReal (instHAdd.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring)))))))) (EMetric.diam.{u1} α _inst_1 s) (HMul.hMul.{0, 0, 0} ENNReal ENNReal ENNReal (instHMul.{0} ENNReal (Distrib.toHasMul.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring)))))))) (OfNat.ofNat.{0} ENNReal 2 (OfNat.mk.{0} ENNReal 2 (bit0.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring))))))) (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne)))))) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) NNReal ENNReal (HasLiftT.mk.{1, 1} NNReal ENNReal (CoeTCₓ.coe.{1, 1} NNReal ENNReal (coeBase.{1, 1} NNReal ENNReal ENNReal.hasCoe))) ε)))
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} (ε : NNReal), LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.diam.{u1} α _inst_1 (Metric.thickening.{u1} α _inst_1 ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) NNReal Real (HasLiftT.mk.{1, 1} NNReal Real (CoeTCₓ.coe.{1, 1} NNReal Real (coeBase.{1, 1} NNReal Real NNReal.Real.hasCoe))) ε) s)) (HAdd.hAdd.{0, 0, 0} ENNReal ENNReal ENNReal (instHAdd.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring)))))))) (EMetric.diam.{u1} α _inst_1 s) (HMul.hMul.{0, 0, 0} ENNReal ENNReal ENNReal (instHMul.{0} ENNReal (Distrib.toHasMul.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring)))))))) (OfNat.ofNat.{0} ENNReal 2 (OfNat.mk.{0} ENNReal 2 (bit0.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring))))))) (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne)))))) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) NNReal ENNReal (HasLiftT.mk.{1, 1} NNReal ENNReal (CoeTCₓ.coe.{1, 1} NNReal ENNReal (coeBase.{1, 1} NNReal ENNReal ENNReal.hasCoe))) ε)))
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} (ε : NNReal), LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.diam.{u1} α _inst_1 (Metric.thickening.{u1} α _inst_1 (NNReal.toReal ε) s)) (HAdd.hAdd.{0, 0, 0} ENNReal ENNReal ENNReal (instHAdd.{0} ENNReal (Distrib.toAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal)))))))) (EMetric.diam.{u1} α _inst_1 s) (HMul.hMul.{0, 0, 0} ENNReal ENNReal ENNReal (instHMul.{0} ENNReal (CanonicallyOrderedCommSemiring.toMul.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal)) (OfNat.ofNat.{0} ENNReal 2 (instOfNat.{0} ENNReal 2 (CanonicallyOrderedCommSemiring.toNatCast.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal) (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))))) (ENNReal.some ε)))
Case conversion may be inaccurate. Consider using '#align metric.ediam_thickening_le Metric.ediam_thickening_leₓ'. -/
@@ -2439,7 +2439,7 @@ theorem IsClosed.cthickening_eq_biUnion_closedBall {α : Type _} [PseudoMetricSp
/- warning: metric.inf_edist_le_inf_edist_cthickening_add -> Metric.infEdist_le_infEdist_cthickening_add is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real} {s : Set.{u1} α} {x : α}, LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.infEdist.{u1} α _inst_1 x s) (HAdd.hAdd.{0, 0, 0} ENNReal ENNReal ENNReal (instHAdd.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring)))))))) (EMetric.infEdist.{u1} α _inst_1 x (Metric.cthickening.{u1} α _inst_1 δ s)) (ENNReal.ofReal δ))
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real} {s : Set.{u1} α} {x : α}, LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.infEdist.{u1} α _inst_1 x s) (HAdd.hAdd.{0, 0, 0} ENNReal ENNReal ENNReal (instHAdd.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring)))))))) (EMetric.infEdist.{u1} α _inst_1 x (Metric.cthickening.{u1} α _inst_1 δ s)) (ENNReal.ofReal δ))
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real} {s : Set.{u1} α} {x : α}, LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.infEdist.{u1} α _inst_1 x s) (HAdd.hAdd.{0, 0, 0} ENNReal ENNReal ENNReal (instHAdd.{0} ENNReal (Distrib.toAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal)))))))) (EMetric.infEdist.{u1} α _inst_1 x (Metric.cthickening.{u1} α _inst_1 δ s)) (ENNReal.ofReal δ))
Case conversion may be inaccurate. Consider using '#align metric.inf_edist_le_inf_edist_cthickening_add Metric.infEdist_le_infEdist_cthickening_addₓ'. -/
@@ -2458,7 +2458,7 @@ theorem infEdist_le_infEdist_cthickening_add :
/- warning: metric.inf_edist_le_inf_edist_thickening_add -> Metric.infEdist_le_infEdist_thickening_add is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real} {s : Set.{u1} α} {x : α}, LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.infEdist.{u1} α _inst_1 x s) (HAdd.hAdd.{0, 0, 0} ENNReal ENNReal ENNReal (instHAdd.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring)))))))) (EMetric.infEdist.{u1} α _inst_1 x (Metric.thickening.{u1} α _inst_1 δ s)) (ENNReal.ofReal δ))
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real} {s : Set.{u1} α} {x : α}, LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.infEdist.{u1} α _inst_1 x s) (HAdd.hAdd.{0, 0, 0} ENNReal ENNReal ENNReal (instHAdd.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring)))))))) (EMetric.infEdist.{u1} α _inst_1 x (Metric.thickening.{u1} α _inst_1 δ s)) (ENNReal.ofReal δ))
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real} {s : Set.{u1} α} {x : α}, LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.infEdist.{u1} α _inst_1 x s) (HAdd.hAdd.{0, 0, 0} ENNReal ENNReal ENNReal (instHAdd.{0} ENNReal (Distrib.toAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal)))))))) (EMetric.infEdist.{u1} α _inst_1 x (Metric.thickening.{u1} α _inst_1 δ s)) (ENNReal.ofReal δ))
Case conversion may be inaccurate. Consider using '#align metric.inf_edist_le_inf_edist_thickening_add Metric.infEdist_le_infEdist_thickening_addₓ'. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/e3fb84046afd187b710170887195d50bada934ee
@@ -70,7 +70,7 @@ but is expected to have type
Case conversion may be inaccurate. Consider using '#align emetric.inf_edist_empty EMetric.infEdist_emptyₓ'. -/
@[simp]
theorem infEdist_empty : infEdist x ∅ = ∞ :=
- infᵢ_emptyset
+ iInf_emptyset
#align emetric.inf_edist_empty EMetric.infEdist_empty
/- warning: emetric.le_inf_edist -> EMetric.le_infEdist is a dubious translation:
@@ -80,33 +80,33 @@ but is expected to have type
forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {s : Set.{u1} α} {d : ENNReal}, Iff (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) d (EMetric.infEdist.{u1} α _inst_1 x s)) (forall (y : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y s) -> (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) d (EDist.edist.{u1} α (PseudoEMetricSpace.toEDist.{u1} α _inst_1) x y)))
Case conversion may be inaccurate. Consider using '#align emetric.le_inf_edist EMetric.le_infEdistₓ'. -/
theorem le_infEdist {d} : d ≤ infEdist x s ↔ ∀ y ∈ s, d ≤ edist x y := by
- simp only [inf_edist, le_infᵢ_iff]
+ simp only [inf_edist, le_iInf_iff]
#align emetric.le_inf_edist EMetric.le_infEdist
#print EMetric.infEdist_union /-
/-- The edist to a union is the minimum of the edists -/
@[simp]
theorem infEdist_union : infEdist x (s ∪ t) = infEdist x s ⊓ infEdist x t :=
- infᵢ_union
+ iInf_union
#align emetric.inf_edist_union EMetric.infEdist_union
-/
-/- warning: emetric.inf_edist_Union -> EMetric.infEdist_unionᵢ is a dubious translation:
+/- warning: emetric.inf_edist_Union -> EMetric.infEdist_iUnion is a dubious translation:
lean 3 declaration is
- forall {ι : Sort.{u2}} {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (f : ι -> (Set.{u1} α)) (x : α), Eq.{1} ENNReal (EMetric.infEdist.{u1} α _inst_1 x (Set.unionᵢ.{u1, u2} α ι (fun (i : ι) => f i))) (infᵢ.{0, u2} ENNReal (ConditionallyCompleteLattice.toHasInf.{0} ENNReal (CompleteLattice.toConditionallyCompleteLattice.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) ι (fun (i : ι) => EMetric.infEdist.{u1} α _inst_1 x (f i)))
+ forall {ι : Sort.{u2}} {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (f : ι -> (Set.{u1} α)) (x : α), Eq.{1} ENNReal (EMetric.infEdist.{u1} α _inst_1 x (Set.iUnion.{u1, u2} α ι (fun (i : ι) => f i))) (iInf.{0, u2} ENNReal (ConditionallyCompleteLattice.toHasInf.{0} ENNReal (CompleteLattice.toConditionallyCompleteLattice.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) ι (fun (i : ι) => EMetric.infEdist.{u1} α _inst_1 x (f i)))
but is expected to have type
- forall {ι : Sort.{u1}} {α : Type.{u2}} [_inst_1 : PseudoEMetricSpace.{u2} α] (f : ι -> (Set.{u2} α)) (x : α), Eq.{1} ENNReal (EMetric.infEdist.{u2} α _inst_1 x (Set.unionᵢ.{u2, u1} α ι (fun (i : ι) => f i))) (infᵢ.{0, u1} ENNReal (ConditionallyCompleteLattice.toInfSet.{0} ENNReal (ConditionallyCompleteLinearOrder.toConditionallyCompleteLattice.{0} ENNReal (ConditionallyCompleteLinearOrderBot.toConditionallyCompleteLinearOrder.{0} ENNReal (CompleteLinearOrder.toConditionallyCompleteLinearOrderBot.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal)))) ι (fun (i : ι) => EMetric.infEdist.{u2} α _inst_1 x (f i)))
-Case conversion may be inaccurate. Consider using '#align emetric.inf_edist_Union EMetric.infEdist_unionᵢₓ'. -/
+ forall {ι : Sort.{u1}} {α : Type.{u2}} [_inst_1 : PseudoEMetricSpace.{u2} α] (f : ι -> (Set.{u2} α)) (x : α), Eq.{1} ENNReal (EMetric.infEdist.{u2} α _inst_1 x (Set.iUnion.{u2, u1} α ι (fun (i : ι) => f i))) (iInf.{0, u1} ENNReal (ConditionallyCompleteLattice.toInfSet.{0} ENNReal (ConditionallyCompleteLinearOrder.toConditionallyCompleteLattice.{0} ENNReal (ConditionallyCompleteLinearOrderBot.toConditionallyCompleteLinearOrder.{0} ENNReal (CompleteLinearOrder.toConditionallyCompleteLinearOrderBot.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal)))) ι (fun (i : ι) => EMetric.infEdist.{u2} α _inst_1 x (f i)))
+Case conversion may be inaccurate. Consider using '#align emetric.inf_edist_Union EMetric.infEdist_iUnionₓ'. -/
@[simp]
-theorem infEdist_unionᵢ (f : ι → Set α) (x : α) : infEdist x (⋃ i, f i) = ⨅ i, infEdist x (f i) :=
- infᵢ_unionᵢ f _
-#align emetric.inf_edist_Union EMetric.infEdist_unionᵢ
+theorem infEdist_iUnion (f : ι → Set α) (x : α) : infEdist x (⋃ i, f i) = ⨅ i, infEdist x (f i) :=
+ iInf_iUnion f _
+#align emetric.inf_edist_Union EMetric.infEdist_iUnion
#print EMetric.infEdist_singleton /-
/-- The edist to a singleton is the edistance to the single point of this singleton -/
@[simp]
theorem infEdist_singleton : infEdist x {y} = edist x y :=
- infᵢ_singleton
+ iInf_singleton
#align emetric.inf_edist_singleton EMetric.infEdist_singleton
-/
@@ -118,7 +118,7 @@ but is expected to have type
Case conversion may be inaccurate. Consider using '#align emetric.inf_edist_le_edist_of_mem EMetric.infEdist_le_edist_of_memₓ'. -/
/-- The edist to a set is bounded above by the edist to any of its points -/
theorem infEdist_le_edist_of_mem (h : y ∈ s) : infEdist x s ≤ edist x y :=
- infᵢ₂_le _ h
+ iInf₂_le _ h
#align emetric.inf_edist_le_edist_of_mem EMetric.infEdist_le_edist_of_mem
/- warning: emetric.inf_edist_zero_of_mem -> EMetric.infEdist_zero_of_mem is a dubious translation:
@@ -140,7 +140,7 @@ but is expected to have type
Case conversion may be inaccurate. Consider using '#align emetric.inf_edist_anti EMetric.infEdist_antiₓ'. -/
/-- The edist is antitone with respect to inclusion. -/
theorem infEdist_anti (h : s ⊆ t) : infEdist x t ≤ infEdist x s :=
- infᵢ_le_infᵢ_of_subset h
+ iInf_le_iInf_of_subset h
#align emetric.inf_edist_anti EMetric.infEdist_anti
/- warning: emetric.inf_edist_lt_iff -> EMetric.infEdist_lt_iff is a dubious translation:
@@ -151,7 +151,7 @@ but is expected to have type
Case conversion may be inaccurate. Consider using '#align emetric.inf_edist_lt_iff EMetric.infEdist_lt_iffₓ'. -/
/-- The edist to a set is `< r` iff there exists a point in the set at edistance `< r` -/
theorem infEdist_lt_iff {r : ℝ≥0∞} : infEdist x s < r ↔ ∃ y ∈ s, edist x y < r := by
- simp_rw [inf_edist, infᵢ_lt_iff]
+ simp_rw [inf_edist, iInf_lt_iff]
#align emetric.inf_edist_lt_iff EMetric.infEdist_lt_iff
/- warning: emetric.inf_edist_le_inf_edist_add_edist -> EMetric.infEdist_le_infEdist_add_edist is a dubious translation:
@@ -165,8 +165,8 @@ the edist from `x` to `y` -/
theorem infEdist_le_infEdist_add_edist : infEdist x s ≤ infEdist y s + edist x y :=
calc
(⨅ z ∈ s, edist x z) ≤ ⨅ z ∈ s, edist y z + edist x y :=
- infᵢ₂_mono fun z hz => (edist_triangle _ _ _).trans_eq (add_comm _ _)
- _ = (⨅ z ∈ s, edist y z) + edist x y := by simp only [ENNReal.infᵢ_add]
+ iInf₂_mono fun z hz => (edist_triangle _ _ _).trans_eq (add_comm _ _)
+ _ = (⨅ z ∈ s, edist y z) + edist x y := by simp only [ENNReal.iInf_add]
#align emetric.inf_edist_le_inf_edist_add_edist EMetric.infEdist_le_infEdist_add_edist
@@ -190,8 +190,8 @@ but is expected to have type
Case conversion may be inaccurate. Consider using '#align emetric.edist_le_inf_edist_add_ediam EMetric.edist_le_infEdist_add_ediamₓ'. -/
theorem edist_le_infEdist_add_ediam (hy : y ∈ s) : edist x y ≤ infEdist x s + diam s :=
by
- simp_rw [inf_edist, ENNReal.infᵢ_add]
- refine' le_infᵢ fun i => le_infᵢ fun hi => _
+ simp_rw [inf_edist, ENNReal.iInf_add]
+ refine' le_iInf fun i => le_iInf fun hi => _
calc
edist x y ≤ edist x i + edist i y := edist_triangle _ _ _
_ ≤ edist x i + diam s := add_le_add le_rfl (edist_le_diam_of_mem hi hy)
@@ -318,17 +318,17 @@ theorem disjoint_closedBall_of_lt_infEdist {r : ℝ≥0∞} (h : r < infEdist x
#print EMetric.infEdist_image /-
/-- The infimum edistance is invariant under isometries -/
theorem infEdist_image (hΦ : Isometry Φ) : infEdist (Φ x) (Φ '' t) = infEdist x t := by
- simp only [inf_edist, infᵢ_image, hΦ.edist_eq]
+ simp only [inf_edist, iInf_image, hΦ.edist_eq]
#align emetric.inf_edist_image EMetric.infEdist_image
-/
-/- warning: is_open.exists_Union_is_closed -> IsOpen.exists_unionᵢ_isClosed is a dubious translation:
+/- warning: is_open.exists_Union_is_closed -> IsOpen.exists_iUnion_isClosed is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {U : Set.{u1} α}, (IsOpen.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) U) -> (Exists.{succ u1} (Nat -> (Set.{u1} α)) (fun (F : Nat -> (Set.{u1} α)) => And (forall (n : Nat), IsClosed.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) (F n)) (And (forall (n : Nat), HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) (F n) U) (And (Eq.{succ u1} (Set.{u1} α) (Set.unionᵢ.{u1, 1} α Nat (fun (n : Nat) => F n)) U) (Monotone.{0, u1} Nat (Set.{u1} α) (PartialOrder.toPreorder.{0} Nat (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring))) (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α))))))) F)))))
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {U : Set.{u1} α}, (IsOpen.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) U) -> (Exists.{succ u1} (Nat -> (Set.{u1} α)) (fun (F : Nat -> (Set.{u1} α)) => And (forall (n : Nat), IsClosed.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) (F n)) (And (forall (n : Nat), HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) (F n) U) (And (Eq.{succ u1} (Set.{u1} α) (Set.iUnion.{u1, 1} α Nat (fun (n : Nat) => F n)) U) (Monotone.{0, u1} Nat (Set.{u1} α) (PartialOrder.toPreorder.{0} Nat (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring))) (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α))))))) F)))))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {U : Set.{u1} α}, (IsOpen.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) U) -> (Exists.{succ u1} (Nat -> (Set.{u1} α)) (fun (F : Nat -> (Set.{u1} α)) => And (forall (n : Nat), IsClosed.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) (F n)) (And (forall (n : Nat), HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) (F n) U) (And (Eq.{succ u1} (Set.{u1} α) (Set.unionᵢ.{u1, 1} α Nat (fun (n : Nat) => F n)) U) (Monotone.{0, u1} Nat (Set.{u1} α) (PartialOrder.toPreorder.{0} Nat (StrictOrderedSemiring.toPartialOrder.{0} Nat Nat.strictOrderedSemiring)) (PartialOrder.toPreorder.{u1} (Set.{u1} α) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) F)))))
-Case conversion may be inaccurate. Consider using '#align is_open.exists_Union_is_closed IsOpen.exists_unionᵢ_isClosedₓ'. -/
-theorem IsOpen.exists_unionᵢ_isClosed {U : Set α} (hU : IsOpen U) :
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {U : Set.{u1} α}, (IsOpen.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) U) -> (Exists.{succ u1} (Nat -> (Set.{u1} α)) (fun (F : Nat -> (Set.{u1} α)) => And (forall (n : Nat), IsClosed.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) (F n)) (And (forall (n : Nat), HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) (F n) U) (And (Eq.{succ u1} (Set.{u1} α) (Set.iUnion.{u1, 1} α Nat (fun (n : Nat) => F n)) U) (Monotone.{0, u1} Nat (Set.{u1} α) (PartialOrder.toPreorder.{0} Nat (StrictOrderedSemiring.toPartialOrder.{0} Nat Nat.strictOrderedSemiring)) (PartialOrder.toPreorder.{u1} (Set.{u1} α) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) F)))))
+Case conversion may be inaccurate. Consider using '#align is_open.exists_Union_is_closed IsOpen.exists_iUnion_isClosedₓ'. -/
+theorem IsOpen.exists_iUnion_isClosed {U : Set α} (hU : IsOpen U) :
∃ F : ℕ → Set α, (∀ n, IsClosed (F n)) ∧ (∀ n, F n ⊆ U) ∧ (⋃ n, F n) = U ∧ Monotone F :=
by
obtain ⟨a, a_pos, a_lt_one⟩ : ∃ a : ℝ≥0∞, 0 < a ∧ a < 1 := exists_between zero_lt_one
@@ -353,7 +353,7 @@ theorem IsOpen.exists_unionᵢ_isClosed {U : Set α} (hU : IsOpen U) :
rcases((tendsto_order.1 this).2 _ B).exists with ⟨n, hn⟩
simp only [mem_Union, mem_Ici, mem_preimage]
exact ⟨n, hn.le⟩
-#align is_open.exists_Union_is_closed IsOpen.exists_unionᵢ_isClosed
+#align is_open.exists_Union_is_closed IsOpen.exists_iUnion_isClosed
/- warning: is_compact.exists_inf_edist_eq_edist -> IsCompact.exists_infEdist_eq_edist is a dubious translation:
lean 3 declaration is
@@ -406,9 +406,9 @@ irreducible_def hausdorffEdist {α : Type u} [PseudoEMetricSpace α] (s t : Set
/- warning: emetric.Hausdorff_edist_def -> EMetric.hausdorffEdist_def is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (s : Set.{u1} α) (t : Set.{u1} α), Eq.{1} ENNReal (EMetric.hausdorffEdist.{u1} α _inst_1 s t) (Sup.sup.{0} ENNReal (SemilatticeSup.toHasSup.{0} ENNReal ENNReal.semilatticeSup) (supᵢ.{0, succ u1} ENNReal (ConditionallyCompleteLattice.toHasSup.{0} ENNReal (CompleteLattice.toConditionallyCompleteLattice.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) α (fun (x : α) => supᵢ.{0, 0} ENNReal (ConditionallyCompleteLattice.toHasSup.{0} ENNReal (CompleteLattice.toConditionallyCompleteLattice.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) => EMetric.infEdist.{u1} α _inst_1 x t))) (supᵢ.{0, succ u1} ENNReal (ConditionallyCompleteLattice.toHasSup.{0} ENNReal (CompleteLattice.toConditionallyCompleteLattice.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) α (fun (y : α) => supᵢ.{0, 0} ENNReal (ConditionallyCompleteLattice.toHasSup.{0} ENNReal (CompleteLattice.toConditionallyCompleteLattice.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y t) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y t) => EMetric.infEdist.{u1} α _inst_1 y s))))
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (s : Set.{u1} α) (t : Set.{u1} α), Eq.{1} ENNReal (EMetric.hausdorffEdist.{u1} α _inst_1 s t) (Sup.sup.{0} ENNReal (SemilatticeSup.toHasSup.{0} ENNReal ENNReal.semilatticeSup) (iSup.{0, succ u1} ENNReal (ConditionallyCompleteLattice.toHasSup.{0} ENNReal (CompleteLattice.toConditionallyCompleteLattice.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) α (fun (x : α) => iSup.{0, 0} ENNReal (ConditionallyCompleteLattice.toHasSup.{0} ENNReal (CompleteLattice.toConditionallyCompleteLattice.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) => EMetric.infEdist.{u1} α _inst_1 x t))) (iSup.{0, succ u1} ENNReal (ConditionallyCompleteLattice.toHasSup.{0} ENNReal (CompleteLattice.toConditionallyCompleteLattice.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) α (fun (y : α) => iSup.{0, 0} ENNReal (ConditionallyCompleteLattice.toHasSup.{0} ENNReal (CompleteLattice.toConditionallyCompleteLattice.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y t) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y t) => EMetric.infEdist.{u1} α _inst_1 y s))))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (s : Set.{u1} α) (t : Set.{u1} α), Eq.{1} ENNReal (EMetric.hausdorffEdist.{u1} α _inst_1 s t) (Sup.sup.{0} ENNReal (SemilatticeSup.toSup.{0} ENNReal instENNRealSemilatticeSup) (supᵢ.{0, succ u1} ENNReal (ConditionallyCompleteLattice.toSupSet.{0} ENNReal (ConditionallyCompleteLinearOrder.toConditionallyCompleteLattice.{0} ENNReal (ConditionallyCompleteLinearOrderBot.toConditionallyCompleteLinearOrder.{0} ENNReal (CompleteLinearOrder.toConditionallyCompleteLinearOrderBot.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal)))) α (fun (x : α) => supᵢ.{0, 0} ENNReal (ConditionallyCompleteLattice.toSupSet.{0} ENNReal (ConditionallyCompleteLinearOrder.toConditionallyCompleteLattice.{0} ENNReal (ConditionallyCompleteLinearOrderBot.toConditionallyCompleteLinearOrder.{0} ENNReal (CompleteLinearOrder.toConditionallyCompleteLinearOrderBot.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal)))) (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) (fun (H : Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) => EMetric.infEdist.{u1} α _inst_1 x t))) (supᵢ.{0, succ u1} ENNReal (ConditionallyCompleteLattice.toSupSet.{0} ENNReal (ConditionallyCompleteLinearOrder.toConditionallyCompleteLattice.{0} ENNReal (ConditionallyCompleteLinearOrderBot.toConditionallyCompleteLinearOrder.{0} ENNReal (CompleteLinearOrder.toConditionallyCompleteLinearOrderBot.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal)))) α (fun (y : α) => supᵢ.{0, 0} ENNReal (ConditionallyCompleteLattice.toSupSet.{0} ENNReal (ConditionallyCompleteLinearOrder.toConditionallyCompleteLattice.{0} ENNReal (ConditionallyCompleteLinearOrderBot.toConditionallyCompleteLinearOrder.{0} ENNReal (CompleteLinearOrder.toConditionallyCompleteLinearOrderBot.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal)))) (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y t) (fun (H : Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y t) => EMetric.infEdist.{u1} α _inst_1 y s))))
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (s : Set.{u1} α) (t : Set.{u1} α), Eq.{1} ENNReal (EMetric.hausdorffEdist.{u1} α _inst_1 s t) (Sup.sup.{0} ENNReal (SemilatticeSup.toSup.{0} ENNReal instENNRealSemilatticeSup) (iSup.{0, succ u1} ENNReal (ConditionallyCompleteLattice.toSupSet.{0} ENNReal (ConditionallyCompleteLinearOrder.toConditionallyCompleteLattice.{0} ENNReal (ConditionallyCompleteLinearOrderBot.toConditionallyCompleteLinearOrder.{0} ENNReal (CompleteLinearOrder.toConditionallyCompleteLinearOrderBot.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal)))) α (fun (x : α) => iSup.{0, 0} ENNReal (ConditionallyCompleteLattice.toSupSet.{0} ENNReal (ConditionallyCompleteLinearOrder.toConditionallyCompleteLattice.{0} ENNReal (ConditionallyCompleteLinearOrderBot.toConditionallyCompleteLinearOrder.{0} ENNReal (CompleteLinearOrder.toConditionallyCompleteLinearOrderBot.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal)))) (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) (fun (H : Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) => EMetric.infEdist.{u1} α _inst_1 x t))) (iSup.{0, succ u1} ENNReal (ConditionallyCompleteLattice.toSupSet.{0} ENNReal (ConditionallyCompleteLinearOrder.toConditionallyCompleteLattice.{0} ENNReal (ConditionallyCompleteLinearOrderBot.toConditionallyCompleteLinearOrder.{0} ENNReal (CompleteLinearOrder.toConditionallyCompleteLinearOrderBot.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal)))) α (fun (y : α) => iSup.{0, 0} ENNReal (ConditionallyCompleteLattice.toSupSet.{0} ENNReal (ConditionallyCompleteLinearOrder.toConditionallyCompleteLattice.{0} ENNReal (ConditionallyCompleteLinearOrderBot.toConditionallyCompleteLinearOrder.{0} ENNReal (CompleteLinearOrder.toConditionallyCompleteLinearOrderBot.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal)))) (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y t) (fun (H : Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y t) => EMetric.infEdist.{u1} α _inst_1 y s))))
Case conversion may be inaccurate. Consider using '#align emetric.Hausdorff_edist_def EMetric.hausdorffEdist_defₓ'. -/
theorem hausdorffEdist_def {α : Type u} [PseudoEMetricSpace α] (s t : Set α) :
hausdorffEdist s t = (⨆ x ∈ s, infEdist x t) ⊔ ⨆ y ∈ t, infEdist y s := by rw [Hausdorff_edist]
@@ -428,7 +428,7 @@ Case conversion may be inaccurate. Consider using '#align emetric.Hausdorff_edis
@[simp]
theorem hausdorffEdist_self : hausdorffEdist s s = 0 :=
by
- simp only [Hausdorff_edist_def, sup_idem, ENNReal.supᵢ_eq_zero]
+ simp only [Hausdorff_edist_def, sup_idem, ENNReal.iSup_eq_zero]
exact fun x hx => inf_edist_zero_of_mem hx
#align emetric.Hausdorff_edist_self EMetric.hausdorffEdist_self
@@ -450,7 +450,7 @@ in each set to the other set -/
theorem hausdorffEdist_le_of_infEdist {r : ℝ≥0∞} (H1 : ∀ x ∈ s, infEdist x t ≤ r)
(H2 : ∀ x ∈ t, infEdist x s ≤ r) : hausdorffEdist s t ≤ r :=
by
- simp only [Hausdorff_edist, sup_le_iff, supᵢ_le_iff]
+ simp only [Hausdorff_edist, sup_le_iff, iSup_le_iff]
exact ⟨H1, H2⟩
#align emetric.Hausdorff_edist_le_of_inf_edist EMetric.hausdorffEdist_le_of_infEdist
@@ -485,7 +485,7 @@ theorem infEdist_le_hausdorffEdist_of_mem (h : x ∈ s) : infEdist x t ≤ hausd
by
rw [Hausdorff_edist_def]
refine' le_trans _ le_sup_left
- exact le_supᵢ₂ x h
+ exact le_iSup₂ x h
#align emetric.inf_edist_le_Hausdorff_edist_of_mem EMetric.infEdist_le_hausdorffEdist_of_mem
/- warning: emetric.exists_edist_lt_of_Hausdorff_edist_lt -> EMetric.exists_edist_lt_of_hausdorffEdist_lt is a dubious translation:
@@ -539,7 +539,7 @@ theorem infEdist_le_infEdist_add_hausdorffEdist :
/-- The Hausdorff edistance is invariant under eisometries -/
theorem hausdorffEdist_image (h : Isometry Φ) :
hausdorffEdist (Φ '' s) (Φ '' t) = hausdorffEdist s t := by
- simp only [Hausdorff_edist_def, supᵢ_image, inf_edist_image h]
+ simp only [Hausdorff_edist_def, iSup_image, inf_edist_image h]
#align emetric.Hausdorff_edist_image EMetric.hausdorffEdist_image
-/
@@ -572,7 +572,7 @@ Case conversion may be inaccurate. Consider using '#align emetric.Hausdorff_edis
theorem hausdorffEdist_triangle : hausdorffEdist s u ≤ hausdorffEdist s t + hausdorffEdist t u :=
by
rw [Hausdorff_edist_def]
- simp only [sup_le_iff, supᵢ_le_iff]
+ simp only [sup_le_iff, iSup_le_iff]
constructor
show ∀ x ∈ s, inf_edist x u ≤ Hausdorff_edist s t + Hausdorff_edist t u;
exact fun x xs =>
@@ -604,7 +604,7 @@ theorem hausdorffEdist_zero_iff_closure_eq_closure :
hausdorffEdist s t = 0 ↔ closure s = closure t :=
calc
hausdorffEdist s t = 0 ↔ s ⊆ closure t ∧ t ⊆ closure s := by
- simp only [Hausdorff_edist_def, ENNReal.sup_eq_zero, ENNReal.supᵢ_eq_zero, ←
+ simp only [Hausdorff_edist_def, ENNReal.sup_eq_zero, ENNReal.iSup_eq_zero, ←
mem_closure_iff_inf_edist_zero, subset_def]
_ ↔ closure s = closure t :=
⟨fun h =>
@@ -747,19 +747,19 @@ def infDist (x : α) (s : Set α) : ℝ :=
#align metric.inf_dist Metric.infDist
-/
-/- warning: metric.inf_dist_eq_infi -> Metric.infDist_eq_infᵢ is a dubious translation:
+/- warning: metric.inf_dist_eq_infi -> Metric.infDist_eq_iInf is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α}, Eq.{1} Real (Metric.infDist.{u1} α _inst_1 x s) (infᵢ.{0, succ u1} Real Real.hasInf (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) (fun (y : coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) => Dist.dist.{u1} α (PseudoMetricSpace.toHasDist.{u1} α _inst_1) x ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) α (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) α (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) α (coeBase.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) α (coeSubtype.{succ u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s))))) y)))
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α}, Eq.{1} Real (Metric.infDist.{u1} α _inst_1 x s) (iInf.{0, succ u1} Real Real.hasInf (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) (fun (y : coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) => Dist.dist.{u1} α (PseudoMetricSpace.toHasDist.{u1} α _inst_1) x ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) α (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) α (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) α (coeBase.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) α (coeSubtype.{succ u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s))))) y)))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α}, Eq.{1} Real (Metric.infDist.{u1} α _inst_1 x s) (infᵢ.{0, succ u1} Real Real.instInfSetReal (Set.Elem.{u1} α s) (fun (y : Set.Elem.{u1} α s) => Dist.dist.{u1} α (PseudoMetricSpace.toDist.{u1} α _inst_1) x (Subtype.val.{succ u1} α (fun (x : α) => Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) y)))
-Case conversion may be inaccurate. Consider using '#align metric.inf_dist_eq_infi Metric.infDist_eq_infᵢₓ'. -/
-theorem infDist_eq_infᵢ : infDist x s = ⨅ y : s, dist x y :=
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α}, Eq.{1} Real (Metric.infDist.{u1} α _inst_1 x s) (iInf.{0, succ u1} Real Real.instInfSetReal (Set.Elem.{u1} α s) (fun (y : Set.Elem.{u1} α s) => Dist.dist.{u1} α (PseudoMetricSpace.toDist.{u1} α _inst_1) x (Subtype.val.{succ u1} α (fun (x : α) => Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) y)))
+Case conversion may be inaccurate. Consider using '#align metric.inf_dist_eq_infi Metric.infDist_eq_iInfₓ'. -/
+theorem infDist_eq_iInf : infDist x s = ⨅ y : s, dist x y :=
by
- rw [inf_dist, inf_edist, infᵢ_subtype', ENNReal.toReal_infᵢ]
+ rw [inf_dist, inf_edist, iInf_subtype', ENNReal.toReal_iInf]
· simp only [dist_edist]
rfl
· exact fun _ => edist_ne_top _ _
-#align metric.inf_dist_eq_infi Metric.infDist_eq_infᵢ
+#align metric.inf_dist_eq_infi Metric.infDist_eq_iInf
/- warning: metric.inf_dist_nonneg -> Metric.infDist_nonneg is a dubious translation:
lean 3 declaration is
@@ -1668,15 +1668,15 @@ theorem ball_subset_thickening {x : X} {E : Set X} (hx : x ∈ E) (δ : ℝ) :
#align metric.ball_subset_thickening Metric.ball_subset_thickening
-/
-#print Metric.thickening_eq_bunionᵢ_ball /-
+#print Metric.thickening_eq_biUnion_ball /-
/-- The (open) `δ`-thickening `thickening δ E` of a subset `E` in a metric space equals the
union of balls of radius `δ` centered at points of `E`. -/
-theorem thickening_eq_bunionᵢ_ball {δ : ℝ} {E : Set X} : thickening δ E = ⋃ x ∈ E, ball x δ :=
+theorem thickening_eq_biUnion_ball {δ : ℝ} {E : Set X} : thickening δ E = ⋃ x ∈ E, ball x δ :=
by
ext x
rw [mem_Union₂]
exact mem_thickening_iff
-#align metric.thickening_eq_bUnion_ball Metric.thickening_eq_bunionᵢ_ball
+#align metric.thickening_eq_bUnion_ball Metric.thickening_eq_biUnion_ball
-/
#print Metric.Bounded.thickening /-
@@ -2003,17 +2003,17 @@ theorem cthickening_union (δ : ℝ) (s t : Set α) :
#align metric.cthickening_union Metric.cthickening_union
-/
-/- warning: metric.thickening_Union -> Metric.thickening_unionᵢ is a dubious translation:
+/- warning: metric.thickening_Union -> Metric.thickening_iUnion is a dubious translation:
lean 3 declaration is
- forall {ι : Sort.{u2}} {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (δ : Real) (f : ι -> (Set.{u1} α)), Eq.{succ u1} (Set.{u1} α) (Metric.thickening.{u1} α _inst_1 δ (Set.unionᵢ.{u1, u2} α ι (fun (i : ι) => f i))) (Set.unionᵢ.{u1, u2} α ι (fun (i : ι) => Metric.thickening.{u1} α _inst_1 δ (f i)))
+ forall {ι : Sort.{u2}} {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (δ : Real) (f : ι -> (Set.{u1} α)), Eq.{succ u1} (Set.{u1} α) (Metric.thickening.{u1} α _inst_1 δ (Set.iUnion.{u1, u2} α ι (fun (i : ι) => f i))) (Set.iUnion.{u1, u2} α ι (fun (i : ι) => Metric.thickening.{u1} α _inst_1 δ (f i)))
but is expected to have type
- forall {ι : Sort.{u1}} {α : Type.{u2}} [_inst_1 : PseudoEMetricSpace.{u2} α] (δ : Real) (f : ι -> (Set.{u2} α)), Eq.{succ u2} (Set.{u2} α) (Metric.thickening.{u2} α _inst_1 δ (Set.unionᵢ.{u2, u1} α ι (fun (i : ι) => f i))) (Set.unionᵢ.{u2, u1} α ι (fun (i : ι) => Metric.thickening.{u2} α _inst_1 δ (f i)))
-Case conversion may be inaccurate. Consider using '#align metric.thickening_Union Metric.thickening_unionᵢₓ'. -/
+ forall {ι : Sort.{u1}} {α : Type.{u2}} [_inst_1 : PseudoEMetricSpace.{u2} α] (δ : Real) (f : ι -> (Set.{u2} α)), Eq.{succ u2} (Set.{u2} α) (Metric.thickening.{u2} α _inst_1 δ (Set.iUnion.{u2, u1} α ι (fun (i : ι) => f i))) (Set.iUnion.{u2, u1} α ι (fun (i : ι) => Metric.thickening.{u2} α _inst_1 δ (f i)))
+Case conversion may be inaccurate. Consider using '#align metric.thickening_Union Metric.thickening_iUnionₓ'. -/
@[simp]
-theorem thickening_unionᵢ (δ : ℝ) (f : ι → Set α) :
+theorem thickening_iUnion (δ : ℝ) (f : ι → Set α) :
thickening δ (⋃ i, f i) = ⋃ i, thickening δ (f i) := by
- simp_rw [thickening, inf_edist_Union, infᵢ_lt_iff, set_of_exists]
-#align metric.thickening_Union Metric.thickening_unionᵢ
+ simp_rw [thickening, inf_edist_Union, iInf_lt_iff, set_of_exists]
+#align metric.thickening_Union Metric.thickening_iUnion
/- warning: metric.ediam_cthickening_le -> Metric.ediam_cthickening_le is a dubious translation:
lean 3 declaration is
@@ -2198,13 +2198,13 @@ theorem hasBasis_nhdsSet_cthickening {K : Set α} (hK : IsCompact K) :
fun _ => cthickening_mem_nhdsSet K
#align metric.has_basis_nhds_set_cthickening Metric.hasBasis_nhdsSet_cthickening
-/- warning: metric.cthickening_eq_Inter_cthickening' -> Metric.cthickening_eq_interᵢ_cthickening' is a dubious translation:
+/- warning: metric.cthickening_eq_Inter_cthickening' -> Metric.cthickening_eq_iInter_cthickening' is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real} (s : Set.{0} Real), (HasSubset.Subset.{0} (Set.{0} Real) (Set.hasSubset.{0} Real) s (Set.Ioi.{0} Real Real.preorder δ)) -> (forall (ε : Real), (LT.lt.{0} Real Real.hasLt δ ε) -> (Set.Nonempty.{0} Real (Inter.inter.{0} (Set.{0} Real) (Set.hasInter.{0} Real) s (Set.Ioc.{0} Real Real.preorder δ ε)))) -> (forall (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α _inst_1 δ E) (Set.interᵢ.{u1, 1} α Real (fun (ε : Real) => Set.interᵢ.{u1, 0} α (Membership.Mem.{0, 0} Real (Set.{0} Real) (Set.hasMem.{0} Real) ε s) (fun (H : Membership.Mem.{0, 0} Real (Set.{0} Real) (Set.hasMem.{0} Real) ε s) => Metric.cthickening.{u1} α _inst_1 ε E))))
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real} (s : Set.{0} Real), (HasSubset.Subset.{0} (Set.{0} Real) (Set.hasSubset.{0} Real) s (Set.Ioi.{0} Real Real.preorder δ)) -> (forall (ε : Real), (LT.lt.{0} Real Real.hasLt δ ε) -> (Set.Nonempty.{0} Real (Inter.inter.{0} (Set.{0} Real) (Set.hasInter.{0} Real) s (Set.Ioc.{0} Real Real.preorder δ ε)))) -> (forall (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α _inst_1 δ E) (Set.iInter.{u1, 1} α Real (fun (ε : Real) => Set.iInter.{u1, 0} α (Membership.Mem.{0, 0} Real (Set.{0} Real) (Set.hasMem.{0} Real) ε s) (fun (H : Membership.Mem.{0, 0} Real (Set.{0} Real) (Set.hasMem.{0} Real) ε s) => Metric.cthickening.{u1} α _inst_1 ε E))))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real} (s : Set.{0} Real), (HasSubset.Subset.{0} (Set.{0} Real) (Set.instHasSubsetSet.{0} Real) s (Set.Ioi.{0} Real Real.instPreorderReal δ)) -> (forall (ε : Real), (LT.lt.{0} Real Real.instLTReal δ ε) -> (Set.Nonempty.{0} Real (Inter.inter.{0} (Set.{0} Real) (Set.instInterSet.{0} Real) s (Set.Ioc.{0} Real Real.instPreorderReal δ ε)))) -> (forall (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α _inst_1 δ E) (Set.interᵢ.{u1, 1} α Real (fun (ε : Real) => Set.interᵢ.{u1, 0} α (Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) ε s) (fun (H : Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) ε s) => Metric.cthickening.{u1} α _inst_1 ε E))))
-Case conversion may be inaccurate. Consider using '#align metric.cthickening_eq_Inter_cthickening' Metric.cthickening_eq_interᵢ_cthickening'ₓ'. -/
-theorem cthickening_eq_interᵢ_cthickening' {δ : ℝ} (s : Set ℝ) (hsδ : s ⊆ Ioi δ)
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real} (s : Set.{0} Real), (HasSubset.Subset.{0} (Set.{0} Real) (Set.instHasSubsetSet.{0} Real) s (Set.Ioi.{0} Real Real.instPreorderReal δ)) -> (forall (ε : Real), (LT.lt.{0} Real Real.instLTReal δ ε) -> (Set.Nonempty.{0} Real (Inter.inter.{0} (Set.{0} Real) (Set.instInterSet.{0} Real) s (Set.Ioc.{0} Real Real.instPreorderReal δ ε)))) -> (forall (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α _inst_1 δ E) (Set.iInter.{u1, 1} α Real (fun (ε : Real) => Set.iInter.{u1, 0} α (Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) ε s) (fun (H : Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) ε s) => Metric.cthickening.{u1} α _inst_1 ε E))))
+Case conversion may be inaccurate. Consider using '#align metric.cthickening_eq_Inter_cthickening' Metric.cthickening_eq_iInter_cthickening'ₓ'. -/
+theorem cthickening_eq_iInter_cthickening' {δ : ℝ} (s : Set ℝ) (hsδ : s ⊆ Ioi δ)
(hs : ∀ ε, δ < ε → (s ∩ Ioc δ ε).Nonempty) (E : Set α) :
cthickening δ E = ⋂ ε ∈ s, cthickening ε E :=
by
@@ -2219,29 +2219,29 @@ theorem cthickening_eq_interᵢ_cthickening' {δ : ℝ} (s : Set ℝ) (hsδ : s
apply ((hx ε hsε).trans (ENNReal.ofReal_le_ofReal hε.2)).trans
rw [ENNReal.coe_nnreal_eq η]
exact ENNReal.ofReal_add_le
-#align metric.cthickening_eq_Inter_cthickening' Metric.cthickening_eq_interᵢ_cthickening'
+#align metric.cthickening_eq_Inter_cthickening' Metric.cthickening_eq_iInter_cthickening'
-/- warning: metric.cthickening_eq_Inter_cthickening -> Metric.cthickening_eq_interᵢ_cthickening is a dubious translation:
+/- warning: metric.cthickening_eq_Inter_cthickening -> Metric.cthickening_eq_iInter_cthickening is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real} (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α _inst_1 δ E) (Set.interᵢ.{u1, 1} α Real (fun (ε : Real) => Set.interᵢ.{u1, 0} α (LT.lt.{0} Real Real.hasLt δ ε) (fun (h : LT.lt.{0} Real Real.hasLt δ ε) => Metric.cthickening.{u1} α _inst_1 ε E)))
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real} (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α _inst_1 δ E) (Set.iInter.{u1, 1} α Real (fun (ε : Real) => Set.iInter.{u1, 0} α (LT.lt.{0} Real Real.hasLt δ ε) (fun (h : LT.lt.{0} Real Real.hasLt δ ε) => Metric.cthickening.{u1} α _inst_1 ε E)))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real} (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α _inst_1 δ E) (Set.interᵢ.{u1, 1} α Real (fun (ε : Real) => Set.interᵢ.{u1, 0} α (LT.lt.{0} Real Real.instLTReal δ ε) (fun (h : LT.lt.{0} Real Real.instLTReal δ ε) => Metric.cthickening.{u1} α _inst_1 ε E)))
-Case conversion may be inaccurate. Consider using '#align metric.cthickening_eq_Inter_cthickening Metric.cthickening_eq_interᵢ_cthickeningₓ'. -/
-theorem cthickening_eq_interᵢ_cthickening {δ : ℝ} (E : Set α) :
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real} (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α _inst_1 δ E) (Set.iInter.{u1, 1} α Real (fun (ε : Real) => Set.iInter.{u1, 0} α (LT.lt.{0} Real Real.instLTReal δ ε) (fun (h : LT.lt.{0} Real Real.instLTReal δ ε) => Metric.cthickening.{u1} α _inst_1 ε E)))
+Case conversion may be inaccurate. Consider using '#align metric.cthickening_eq_Inter_cthickening Metric.cthickening_eq_iInter_cthickeningₓ'. -/
+theorem cthickening_eq_iInter_cthickening {δ : ℝ} (E : Set α) :
cthickening δ E = ⋂ (ε : ℝ) (h : δ < ε), cthickening ε E :=
by
apply cthickening_eq_Inter_cthickening' (Ioi δ) rfl.subset
simp_rw [inter_eq_right_iff_subset.mpr Ioc_subset_Ioi_self]
exact fun _ hε => nonempty_Ioc.mpr hε
-#align metric.cthickening_eq_Inter_cthickening Metric.cthickening_eq_interᵢ_cthickening
+#align metric.cthickening_eq_Inter_cthickening Metric.cthickening_eq_iInter_cthickening
-/- warning: metric.cthickening_eq_Inter_thickening' -> Metric.cthickening_eq_interᵢ_thickening' is a dubious translation:
+/- warning: metric.cthickening_eq_Inter_thickening' -> Metric.cthickening_eq_iInter_thickening' is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real}, (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) -> (forall (s : Set.{0} Real), (HasSubset.Subset.{0} (Set.{0} Real) (Set.hasSubset.{0} Real) s (Set.Ioi.{0} Real Real.preorder δ)) -> (forall (ε : Real), (LT.lt.{0} Real Real.hasLt δ ε) -> (Set.Nonempty.{0} Real (Inter.inter.{0} (Set.{0} Real) (Set.hasInter.{0} Real) s (Set.Ioc.{0} Real Real.preorder δ ε)))) -> (forall (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α _inst_1 δ E) (Set.interᵢ.{u1, 1} α Real (fun (ε : Real) => Set.interᵢ.{u1, 0} α (Membership.Mem.{0, 0} Real (Set.{0} Real) (Set.hasMem.{0} Real) ε s) (fun (H : Membership.Mem.{0, 0} Real (Set.{0} Real) (Set.hasMem.{0} Real) ε s) => Metric.thickening.{u1} α _inst_1 ε E)))))
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real}, (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) -> (forall (s : Set.{0} Real), (HasSubset.Subset.{0} (Set.{0} Real) (Set.hasSubset.{0} Real) s (Set.Ioi.{0} Real Real.preorder δ)) -> (forall (ε : Real), (LT.lt.{0} Real Real.hasLt δ ε) -> (Set.Nonempty.{0} Real (Inter.inter.{0} (Set.{0} Real) (Set.hasInter.{0} Real) s (Set.Ioc.{0} Real Real.preorder δ ε)))) -> (forall (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α _inst_1 δ E) (Set.iInter.{u1, 1} α Real (fun (ε : Real) => Set.iInter.{u1, 0} α (Membership.Mem.{0, 0} Real (Set.{0} Real) (Set.hasMem.{0} Real) ε s) (fun (H : Membership.Mem.{0, 0} Real (Set.{0} Real) (Set.hasMem.{0} Real) ε s) => Metric.thickening.{u1} α _inst_1 ε E)))))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real}, (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) -> (forall (s : Set.{0} Real), (HasSubset.Subset.{0} (Set.{0} Real) (Set.instHasSubsetSet.{0} Real) s (Set.Ioi.{0} Real Real.instPreorderReal δ)) -> (forall (ε : Real), (LT.lt.{0} Real Real.instLTReal δ ε) -> (Set.Nonempty.{0} Real (Inter.inter.{0} (Set.{0} Real) (Set.instInterSet.{0} Real) s (Set.Ioc.{0} Real Real.instPreorderReal δ ε)))) -> (forall (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α _inst_1 δ E) (Set.interᵢ.{u1, 1} α Real (fun (ε : Real) => Set.interᵢ.{u1, 0} α (Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) ε s) (fun (H : Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) ε s) => Metric.thickening.{u1} α _inst_1 ε E)))))
-Case conversion may be inaccurate. Consider using '#align metric.cthickening_eq_Inter_thickening' Metric.cthickening_eq_interᵢ_thickening'ₓ'. -/
-theorem cthickening_eq_interᵢ_thickening' {δ : ℝ} (δ_nn : 0 ≤ δ) (s : Set ℝ) (hsδ : s ⊆ Ioi δ)
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real}, (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) -> (forall (s : Set.{0} Real), (HasSubset.Subset.{0} (Set.{0} Real) (Set.instHasSubsetSet.{0} Real) s (Set.Ioi.{0} Real Real.instPreorderReal δ)) -> (forall (ε : Real), (LT.lt.{0} Real Real.instLTReal δ ε) -> (Set.Nonempty.{0} Real (Inter.inter.{0} (Set.{0} Real) (Set.instInterSet.{0} Real) s (Set.Ioc.{0} Real Real.instPreorderReal δ ε)))) -> (forall (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α _inst_1 δ E) (Set.iInter.{u1, 1} α Real (fun (ε : Real) => Set.iInter.{u1, 0} α (Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) ε s) (fun (H : Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) ε s) => Metric.thickening.{u1} α _inst_1 ε E)))))
+Case conversion may be inaccurate. Consider using '#align metric.cthickening_eq_Inter_thickening' Metric.cthickening_eq_iInter_thickening'ₓ'. -/
+theorem cthickening_eq_iInter_thickening' {δ : ℝ} (δ_nn : 0 ≤ δ) (s : Set ℝ) (hsδ : s ⊆ Ioi δ)
(hs : ∀ ε, δ < ε → (s ∩ Ioc δ ε).Nonempty) (E : Set α) :
cthickening δ E = ⋂ ε ∈ s, thickening ε E :=
by
@@ -2251,44 +2251,44 @@ theorem cthickening_eq_interᵢ_thickening' {δ : ℝ} (δ_nn : 0 ≤ δ) (s : S
exact ss.trans (thickening_mono hε'.2 E)
· rw [cthickening_eq_Inter_cthickening' s hsδ hs E]
exact Inter₂_mono fun ε hε => thickening_subset_cthickening ε E
-#align metric.cthickening_eq_Inter_thickening' Metric.cthickening_eq_interᵢ_thickening'
+#align metric.cthickening_eq_Inter_thickening' Metric.cthickening_eq_iInter_thickening'
-/- warning: metric.cthickening_eq_Inter_thickening -> Metric.cthickening_eq_interᵢ_thickening is a dubious translation:
+/- warning: metric.cthickening_eq_Inter_thickening -> Metric.cthickening_eq_iInter_thickening is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real}, (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) -> (forall (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α _inst_1 δ E) (Set.interᵢ.{u1, 1} α Real (fun (ε : Real) => Set.interᵢ.{u1, 0} α (LT.lt.{0} Real Real.hasLt δ ε) (fun (h : LT.lt.{0} Real Real.hasLt δ ε) => Metric.thickening.{u1} α _inst_1 ε E))))
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real}, (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) -> (forall (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α _inst_1 δ E) (Set.iInter.{u1, 1} α Real (fun (ε : Real) => Set.iInter.{u1, 0} α (LT.lt.{0} Real Real.hasLt δ ε) (fun (h : LT.lt.{0} Real Real.hasLt δ ε) => Metric.thickening.{u1} α _inst_1 ε E))))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real}, (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) -> (forall (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α _inst_1 δ E) (Set.interᵢ.{u1, 1} α Real (fun (ε : Real) => Set.interᵢ.{u1, 0} α (LT.lt.{0} Real Real.instLTReal δ ε) (fun (h : LT.lt.{0} Real Real.instLTReal δ ε) => Metric.thickening.{u1} α _inst_1 ε E))))
-Case conversion may be inaccurate. Consider using '#align metric.cthickening_eq_Inter_thickening Metric.cthickening_eq_interᵢ_thickeningₓ'. -/
-theorem cthickening_eq_interᵢ_thickening {δ : ℝ} (δ_nn : 0 ≤ δ) (E : Set α) :
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real}, (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) -> (forall (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α _inst_1 δ E) (Set.iInter.{u1, 1} α Real (fun (ε : Real) => Set.iInter.{u1, 0} α (LT.lt.{0} Real Real.instLTReal δ ε) (fun (h : LT.lt.{0} Real Real.instLTReal δ ε) => Metric.thickening.{u1} α _inst_1 ε E))))
+Case conversion may be inaccurate. Consider using '#align metric.cthickening_eq_Inter_thickening Metric.cthickening_eq_iInter_thickeningₓ'. -/
+theorem cthickening_eq_iInter_thickening {δ : ℝ} (δ_nn : 0 ≤ δ) (E : Set α) :
cthickening δ E = ⋂ (ε : ℝ) (h : δ < ε), thickening ε E :=
by
apply cthickening_eq_Inter_thickening' δ_nn (Ioi δ) rfl.subset
simp_rw [inter_eq_right_iff_subset.mpr Ioc_subset_Ioi_self]
exact fun _ hε => nonempty_Ioc.mpr hε
-#align metric.cthickening_eq_Inter_thickening Metric.cthickening_eq_interᵢ_thickening
+#align metric.cthickening_eq_Inter_thickening Metric.cthickening_eq_iInter_thickening
-/- warning: metric.cthickening_eq_Inter_thickening'' -> Metric.cthickening_eq_interᵢ_thickening'' is a dubious translation:
+/- warning: metric.cthickening_eq_Inter_thickening'' -> Metric.cthickening_eq_iInter_thickening'' is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (δ : Real) (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α _inst_1 δ E) (Set.interᵢ.{u1, 1} α Real (fun (ε : Real) => Set.interᵢ.{u1, 0} α (LT.lt.{0} Real Real.hasLt (LinearOrder.max.{0} Real Real.linearOrder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) ε) (fun (h : LT.lt.{0} Real Real.hasLt (LinearOrder.max.{0} Real Real.linearOrder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) ε) => Metric.thickening.{u1} α _inst_1 ε E)))
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (δ : Real) (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α _inst_1 δ E) (Set.iInter.{u1, 1} α Real (fun (ε : Real) => Set.iInter.{u1, 0} α (LT.lt.{0} Real Real.hasLt (LinearOrder.max.{0} Real Real.linearOrder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) ε) (fun (h : LT.lt.{0} Real Real.hasLt (LinearOrder.max.{0} Real Real.linearOrder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) ε) => Metric.thickening.{u1} α _inst_1 ε E)))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (δ : Real) (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α _inst_1 δ E) (Set.interᵢ.{u1, 1} α Real (fun (ε : Real) => Set.interᵢ.{u1, 0} α (LT.lt.{0} Real Real.instLTReal (Max.max.{0} Real (LinearOrderedRing.toMax.{0} Real Real.instLinearOrderedRingReal) (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) ε) (fun (h : LT.lt.{0} Real Real.instLTReal (Max.max.{0} Real (LinearOrderedRing.toMax.{0} Real Real.instLinearOrderedRingReal) (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) ε) => Metric.thickening.{u1} α _inst_1 ε E)))
-Case conversion may be inaccurate. Consider using '#align metric.cthickening_eq_Inter_thickening'' Metric.cthickening_eq_interᵢ_thickening''ₓ'. -/
-theorem cthickening_eq_interᵢ_thickening'' (δ : ℝ) (E : Set α) :
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (δ : Real) (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α _inst_1 δ E) (Set.iInter.{u1, 1} α Real (fun (ε : Real) => Set.iInter.{u1, 0} α (LT.lt.{0} Real Real.instLTReal (Max.max.{0} Real (LinearOrderedRing.toMax.{0} Real Real.instLinearOrderedRingReal) (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) ε) (fun (h : LT.lt.{0} Real Real.instLTReal (Max.max.{0} Real (LinearOrderedRing.toMax.{0} Real Real.instLinearOrderedRingReal) (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) ε) => Metric.thickening.{u1} α _inst_1 ε E)))
+Case conversion may be inaccurate. Consider using '#align metric.cthickening_eq_Inter_thickening'' Metric.cthickening_eq_iInter_thickening''ₓ'. -/
+theorem cthickening_eq_iInter_thickening'' (δ : ℝ) (E : Set α) :
cthickening δ E = ⋂ (ε : ℝ) (h : max 0 δ < ε), thickening ε E :=
by
rw [← cthickening_max_zero, cthickening_eq_Inter_thickening]
exact le_max_left _ _
-#align metric.cthickening_eq_Inter_thickening'' Metric.cthickening_eq_interᵢ_thickening''
+#align metric.cthickening_eq_Inter_thickening'' Metric.cthickening_eq_iInter_thickening''
-/- warning: metric.closure_eq_Inter_cthickening' -> Metric.closure_eq_interᵢ_cthickening' is a dubious translation:
+/- warning: metric.closure_eq_Inter_cthickening' -> Metric.closure_eq_iInter_cthickening' is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (E : Set.{u1} α) (s : Set.{0} Real), (forall (ε : Real), (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) ε) -> (Set.Nonempty.{0} Real (Inter.inter.{0} (Set.{0} Real) (Set.hasInter.{0} Real) s (Set.Ioc.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) ε)))) -> (Eq.{succ u1} (Set.{u1} α) (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E) (Set.interᵢ.{u1, 1} α Real (fun (δ : Real) => Set.interᵢ.{u1, 0} α (Membership.Mem.{0, 0} Real (Set.{0} Real) (Set.hasMem.{0} Real) δ s) (fun (H : Membership.Mem.{0, 0} Real (Set.{0} Real) (Set.hasMem.{0} Real) δ s) => Metric.cthickening.{u1} α _inst_1 δ E))))
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (E : Set.{u1} α) (s : Set.{0} Real), (forall (ε : Real), (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) ε) -> (Set.Nonempty.{0} Real (Inter.inter.{0} (Set.{0} Real) (Set.hasInter.{0} Real) s (Set.Ioc.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) ε)))) -> (Eq.{succ u1} (Set.{u1} α) (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E) (Set.iInter.{u1, 1} α Real (fun (δ : Real) => Set.iInter.{u1, 0} α (Membership.Mem.{0, 0} Real (Set.{0} Real) (Set.hasMem.{0} Real) δ s) (fun (H : Membership.Mem.{0, 0} Real (Set.{0} Real) (Set.hasMem.{0} Real) δ s) => Metric.cthickening.{u1} α _inst_1 δ E))))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (E : Set.{u1} α) (s : Set.{0} Real), (forall (ε : Real), (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) ε) -> (Set.Nonempty.{0} Real (Inter.inter.{0} (Set.{0} Real) (Set.instInterSet.{0} Real) s (Set.Ioc.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) ε)))) -> (Eq.{succ u1} (Set.{u1} α) (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E) (Set.interᵢ.{u1, 1} α Real (fun (δ : Real) => Set.interᵢ.{u1, 0} α (Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) δ s) (fun (H : Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) δ s) => Metric.cthickening.{u1} α _inst_1 δ E))))
-Case conversion may be inaccurate. Consider using '#align metric.closure_eq_Inter_cthickening' Metric.closure_eq_interᵢ_cthickening'ₓ'. -/
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (E : Set.{u1} α) (s : Set.{0} Real), (forall (ε : Real), (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) ε) -> (Set.Nonempty.{0} Real (Inter.inter.{0} (Set.{0} Real) (Set.instInterSet.{0} Real) s (Set.Ioc.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) ε)))) -> (Eq.{succ u1} (Set.{u1} α) (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E) (Set.iInter.{u1, 1} α Real (fun (δ : Real) => Set.iInter.{u1, 0} α (Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) δ s) (fun (H : Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) δ s) => Metric.cthickening.{u1} α _inst_1 δ E))))
+Case conversion may be inaccurate. Consider using '#align metric.closure_eq_Inter_cthickening' Metric.closure_eq_iInter_cthickening'ₓ'. -/
/-- The closure of a set equals the intersection of its closed thickenings of positive radii
accumulating at zero. -/
-theorem closure_eq_interᵢ_cthickening' (E : Set α) (s : Set ℝ)
+theorem closure_eq_iInter_cthickening' (E : Set α) (s : Set ℝ)
(hs : ∀ ε, 0 < ε → (s ∩ Ioc 0 ε).Nonempty) : closure E = ⋂ δ ∈ s, cthickening δ E :=
by
by_cases hs₀ : s ⊆ Ioi 0
@@ -2300,50 +2300,50 @@ theorem closure_eq_interᵢ_cthickening' (E : Set α) (s : Set ℝ)
· exact subset_Inter₂ fun ε _ => closure_subset_cthickening ε E
· rw [← cthickening_of_nonpos δ_nonpos E]
exact bInter_subset_of_mem hδs
-#align metric.closure_eq_Inter_cthickening' Metric.closure_eq_interᵢ_cthickening'
+#align metric.closure_eq_Inter_cthickening' Metric.closure_eq_iInter_cthickening'
-/- warning: metric.closure_eq_Inter_cthickening -> Metric.closure_eq_interᵢ_cthickening is a dubious translation:
+/- warning: metric.closure_eq_Inter_cthickening -> Metric.closure_eq_iInter_cthickening is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E) (Set.interᵢ.{u1, 1} α Real (fun (δ : Real) => Set.interᵢ.{u1, 0} α (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) (fun (h : LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) => Metric.cthickening.{u1} α _inst_1 δ E)))
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E) (Set.iInter.{u1, 1} α Real (fun (δ : Real) => Set.iInter.{u1, 0} α (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) (fun (h : LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) => Metric.cthickening.{u1} α _inst_1 δ E)))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E) (Set.interᵢ.{u1, 1} α Real (fun (δ : Real) => Set.interᵢ.{u1, 0} α (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) (fun (h : LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) => Metric.cthickening.{u1} α _inst_1 δ E)))
-Case conversion may be inaccurate. Consider using '#align metric.closure_eq_Inter_cthickening Metric.closure_eq_interᵢ_cthickeningₓ'. -/
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E) (Set.iInter.{u1, 1} α Real (fun (δ : Real) => Set.iInter.{u1, 0} α (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) (fun (h : LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) => Metric.cthickening.{u1} α _inst_1 δ E)))
+Case conversion may be inaccurate. Consider using '#align metric.closure_eq_Inter_cthickening Metric.closure_eq_iInter_cthickeningₓ'. -/
/-- The closure of a set equals the intersection of its closed thickenings of positive radii. -/
-theorem closure_eq_interᵢ_cthickening (E : Set α) :
+theorem closure_eq_iInter_cthickening (E : Set α) :
closure E = ⋂ (δ : ℝ) (h : 0 < δ), cthickening δ E :=
by
rw [← cthickening_zero]
exact cthickening_eq_Inter_cthickening E
-#align metric.closure_eq_Inter_cthickening Metric.closure_eq_interᵢ_cthickening
+#align metric.closure_eq_Inter_cthickening Metric.closure_eq_iInter_cthickening
-/- warning: metric.closure_eq_Inter_thickening' -> Metric.closure_eq_interᵢ_thickening' is a dubious translation:
+/- warning: metric.closure_eq_Inter_thickening' -> Metric.closure_eq_iInter_thickening' is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (E : Set.{u1} α) (s : Set.{0} Real), (HasSubset.Subset.{0} (Set.{0} Real) (Set.hasSubset.{0} Real) s (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) -> (forall (ε : Real), (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) ε) -> (Set.Nonempty.{0} Real (Inter.inter.{0} (Set.{0} Real) (Set.hasInter.{0} Real) s (Set.Ioc.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) ε)))) -> (Eq.{succ u1} (Set.{u1} α) (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E) (Set.interᵢ.{u1, 1} α Real (fun (δ : Real) => Set.interᵢ.{u1, 0} α (Membership.Mem.{0, 0} Real (Set.{0} Real) (Set.hasMem.{0} Real) δ s) (fun (H : Membership.Mem.{0, 0} Real (Set.{0} Real) (Set.hasMem.{0} Real) δ s) => Metric.thickening.{u1} α _inst_1 δ E))))
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (E : Set.{u1} α) (s : Set.{0} Real), (HasSubset.Subset.{0} (Set.{0} Real) (Set.hasSubset.{0} Real) s (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) -> (forall (ε : Real), (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) ε) -> (Set.Nonempty.{0} Real (Inter.inter.{0} (Set.{0} Real) (Set.hasInter.{0} Real) s (Set.Ioc.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) ε)))) -> (Eq.{succ u1} (Set.{u1} α) (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E) (Set.iInter.{u1, 1} α Real (fun (δ : Real) => Set.iInter.{u1, 0} α (Membership.Mem.{0, 0} Real (Set.{0} Real) (Set.hasMem.{0} Real) δ s) (fun (H : Membership.Mem.{0, 0} Real (Set.{0} Real) (Set.hasMem.{0} Real) δ s) => Metric.thickening.{u1} α _inst_1 δ E))))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (E : Set.{u1} α) (s : Set.{0} Real), (HasSubset.Subset.{0} (Set.{0} Real) (Set.instHasSubsetSet.{0} Real) s (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) -> (forall (ε : Real), (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) ε) -> (Set.Nonempty.{0} Real (Inter.inter.{0} (Set.{0} Real) (Set.instInterSet.{0} Real) s (Set.Ioc.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) ε)))) -> (Eq.{succ u1} (Set.{u1} α) (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E) (Set.interᵢ.{u1, 1} α Real (fun (δ : Real) => Set.interᵢ.{u1, 0} α (Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) δ s) (fun (H : Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) δ s) => Metric.thickening.{u1} α _inst_1 δ E))))
-Case conversion may be inaccurate. Consider using '#align metric.closure_eq_Inter_thickening' Metric.closure_eq_interᵢ_thickening'ₓ'. -/
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (E : Set.{u1} α) (s : Set.{0} Real), (HasSubset.Subset.{0} (Set.{0} Real) (Set.instHasSubsetSet.{0} Real) s (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) -> (forall (ε : Real), (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) ε) -> (Set.Nonempty.{0} Real (Inter.inter.{0} (Set.{0} Real) (Set.instInterSet.{0} Real) s (Set.Ioc.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) ε)))) -> (Eq.{succ u1} (Set.{u1} α) (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E) (Set.iInter.{u1, 1} α Real (fun (δ : Real) => Set.iInter.{u1, 0} α (Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) δ s) (fun (H : Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) δ s) => Metric.thickening.{u1} α _inst_1 δ E))))
+Case conversion may be inaccurate. Consider using '#align metric.closure_eq_Inter_thickening' Metric.closure_eq_iInter_thickening'ₓ'. -/
/-- The closure of a set equals the intersection of its open thickenings of positive radii
accumulating at zero. -/
-theorem closure_eq_interᵢ_thickening' (E : Set α) (s : Set ℝ) (hs₀ : s ⊆ Ioi 0)
+theorem closure_eq_iInter_thickening' (E : Set α) (s : Set ℝ) (hs₀ : s ⊆ Ioi 0)
(hs : ∀ ε, 0 < ε → (s ∩ Ioc 0 ε).Nonempty) : closure E = ⋂ δ ∈ s, thickening δ E :=
by
rw [← cthickening_zero]
apply cthickening_eq_Inter_thickening' le_rfl _ hs₀ hs
-#align metric.closure_eq_Inter_thickening' Metric.closure_eq_interᵢ_thickening'
+#align metric.closure_eq_Inter_thickening' Metric.closure_eq_iInter_thickening'
-/- warning: metric.closure_eq_Inter_thickening -> Metric.closure_eq_interᵢ_thickening is a dubious translation:
+/- warning: metric.closure_eq_Inter_thickening -> Metric.closure_eq_iInter_thickening is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E) (Set.interᵢ.{u1, 1} α Real (fun (δ : Real) => Set.interᵢ.{u1, 0} α (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) (fun (h : LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) => Metric.thickening.{u1} α _inst_1 δ E)))
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E) (Set.iInter.{u1, 1} α Real (fun (δ : Real) => Set.iInter.{u1, 0} α (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) (fun (h : LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) => Metric.thickening.{u1} α _inst_1 δ E)))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E) (Set.interᵢ.{u1, 1} α Real (fun (δ : Real) => Set.interᵢ.{u1, 0} α (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) (fun (h : LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) => Metric.thickening.{u1} α _inst_1 δ E)))
-Case conversion may be inaccurate. Consider using '#align metric.closure_eq_Inter_thickening Metric.closure_eq_interᵢ_thickeningₓ'. -/
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E) (Set.iInter.{u1, 1} α Real (fun (δ : Real) => Set.iInter.{u1, 0} α (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) (fun (h : LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) => Metric.thickening.{u1} α _inst_1 δ E)))
+Case conversion may be inaccurate. Consider using '#align metric.closure_eq_Inter_thickening Metric.closure_eq_iInter_thickeningₓ'. -/
/-- The closure of a set equals the intersection of its (open) thickenings of positive radii. -/
-theorem closure_eq_interᵢ_thickening (E : Set α) :
+theorem closure_eq_iInter_thickening (E : Set α) :
closure E = ⋂ (δ : ℝ) (h : 0 < δ), thickening δ E :=
by
rw [← cthickening_zero]
exact cthickening_eq_Inter_thickening rfl.ge E
-#align metric.closure_eq_Inter_thickening Metric.closure_eq_interᵢ_thickening
+#align metric.closure_eq_Inter_thickening Metric.closure_eq_iInter_thickening
#print Metric.frontier_cthickening_subset /-
/-- The frontier of the closed thickening of a set is contained in an `inf_edist` level set. -/
@@ -2364,31 +2364,31 @@ theorem closedBall_subset_cthickening {α : Type _} [PseudoMetricSpace α] {x :
#align metric.closed_ball_subset_cthickening Metric.closedBall_subset_cthickening
-/
-/- warning: metric.cthickening_subset_Union_closed_ball_of_lt -> Metric.cthickening_subset_unionᵢ_closedBall_of_lt is a dubious translation:
+/- warning: metric.cthickening_subset_Union_closed_ball_of_lt -> Metric.cthickening_subset_iUnion_closedBall_of_lt is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_2 : PseudoMetricSpace.{u1} α] (E : Set.{u1} α) {δ : Real} {δ' : Real}, (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ') -> (LT.lt.{0} Real Real.hasLt δ δ') -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) (Metric.cthickening.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_2) δ E) (Set.unionᵢ.{u1, succ u1} α α (fun (x : α) => Set.unionᵢ.{u1, 0} α (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x E) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x E) => Metric.closedBall.{u1} α _inst_2 x δ'))))
+ forall {α : Type.{u1}} [_inst_2 : PseudoMetricSpace.{u1} α] (E : Set.{u1} α) {δ : Real} {δ' : Real}, (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ') -> (LT.lt.{0} Real Real.hasLt δ δ') -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) (Metric.cthickening.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_2) δ E) (Set.iUnion.{u1, succ u1} α α (fun (x : α) => Set.iUnion.{u1, 0} α (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x E) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x E) => Metric.closedBall.{u1} α _inst_2 x δ'))))
but is expected to have type
- forall {α : Type.{u1}} [_inst_2 : PseudoMetricSpace.{u1} α] (E : Set.{u1} α) {δ : Real} {δ' : Real}, (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ') -> (LT.lt.{0} Real Real.instLTReal δ δ') -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) (Metric.cthickening.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_2) δ E) (Set.unionᵢ.{u1, succ u1} α α (fun (x : α) => Set.unionᵢ.{u1, 0} α (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x E) (fun (H : Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x E) => Metric.closedBall.{u1} α _inst_2 x δ'))))
-Case conversion may be inaccurate. Consider using '#align metric.cthickening_subset_Union_closed_ball_of_lt Metric.cthickening_subset_unionᵢ_closedBall_of_ltₓ'. -/
-theorem cthickening_subset_unionᵢ_closedBall_of_lt {α : Type _} [PseudoMetricSpace α] (E : Set α)
+ forall {α : Type.{u1}} [_inst_2 : PseudoMetricSpace.{u1} α] (E : Set.{u1} α) {δ : Real} {δ' : Real}, (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ') -> (LT.lt.{0} Real Real.instLTReal δ δ') -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) (Metric.cthickening.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_2) δ E) (Set.iUnion.{u1, succ u1} α α (fun (x : α) => Set.iUnion.{u1, 0} α (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x E) (fun (H : Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x E) => Metric.closedBall.{u1} α _inst_2 x δ'))))
+Case conversion may be inaccurate. Consider using '#align metric.cthickening_subset_Union_closed_ball_of_lt Metric.cthickening_subset_iUnion_closedBall_of_ltₓ'. -/
+theorem cthickening_subset_iUnion_closedBall_of_lt {α : Type _} [PseudoMetricSpace α] (E : Set α)
{δ δ' : ℝ} (hδ₀ : 0 < δ') (hδδ' : δ < δ') : cthickening δ E ⊆ ⋃ x ∈ E, closedBall x δ' :=
by
refine' (cthickening_subset_thickening' hδ₀ hδδ' E).trans fun x hx => _
obtain ⟨y, hy₁, hy₂⟩ := mem_thickening_iff.mp hx
exact mem_Union₂.mpr ⟨y, hy₁, hy₂.le⟩
-#align metric.cthickening_subset_Union_closed_ball_of_lt Metric.cthickening_subset_unionᵢ_closedBall_of_lt
+#align metric.cthickening_subset_Union_closed_ball_of_lt Metric.cthickening_subset_iUnion_closedBall_of_lt
-/- warning: is_compact.cthickening_eq_bUnion_closed_ball -> IsCompact.cthickening_eq_bunionᵢ_closedBall is a dubious translation:
+/- warning: is_compact.cthickening_eq_bUnion_closed_ball -> IsCompact.cthickening_eq_biUnion_closedBall is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_2 : PseudoMetricSpace.{u1} α] {δ : Real} {E : Set.{u1} α}, (IsCompact.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_2)) E) -> (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) -> (Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_2) δ E) (Set.unionᵢ.{u1, succ u1} α α (fun (x : α) => Set.unionᵢ.{u1, 0} α (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x E) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x E) => Metric.closedBall.{u1} α _inst_2 x δ))))
+ forall {α : Type.{u1}} [_inst_2 : PseudoMetricSpace.{u1} α] {δ : Real} {E : Set.{u1} α}, (IsCompact.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_2)) E) -> (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) -> (Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_2) δ E) (Set.iUnion.{u1, succ u1} α α (fun (x : α) => Set.iUnion.{u1, 0} α (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x E) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x E) => Metric.closedBall.{u1} α _inst_2 x δ))))
but is expected to have type
- forall {α : Type.{u1}} [_inst_2 : PseudoMetricSpace.{u1} α] {δ : Real} {E : Set.{u1} α}, (IsCompact.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_2)) E) -> (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) -> (Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_2) δ E) (Set.unionᵢ.{u1, succ u1} α α (fun (x : α) => Set.unionᵢ.{u1, 0} α (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x E) (fun (H : Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x E) => Metric.closedBall.{u1} α _inst_2 x δ))))
-Case conversion may be inaccurate. Consider using '#align is_compact.cthickening_eq_bUnion_closed_ball IsCompact.cthickening_eq_bunionᵢ_closedBallₓ'. -/
+ forall {α : Type.{u1}} [_inst_2 : PseudoMetricSpace.{u1} α] {δ : Real} {E : Set.{u1} α}, (IsCompact.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_2)) E) -> (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) -> (Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_2) δ E) (Set.iUnion.{u1, succ u1} α α (fun (x : α) => Set.iUnion.{u1, 0} α (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x E) (fun (H : Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x E) => Metric.closedBall.{u1} α _inst_2 x δ))))
+Case conversion may be inaccurate. Consider using '#align is_compact.cthickening_eq_bUnion_closed_ball IsCompact.cthickening_eq_biUnion_closedBallₓ'. -/
/-- The closed thickening of a compact set `E` is the union of the balls `closed_ball x δ` over
`x ∈ E`.
See also `metric.cthickening_eq_bUnion_closed_ball`. -/
-theorem IsCompact.cthickening_eq_bunionᵢ_closedBall {α : Type _} [PseudoMetricSpace α] {δ : ℝ}
+theorem IsCompact.cthickening_eq_biUnion_closedBall {α : Type _} [PseudoMetricSpace α] {δ : ℝ}
{E : Set α} (hE : IsCompact E) (hδ : 0 ≤ δ) : cthickening δ E = ⋃ x ∈ E, closedBall x δ :=
by
rcases eq_empty_or_nonempty E with (rfl | hne)
@@ -2401,15 +2401,15 @@ theorem IsCompact.cthickening_eq_bunionᵢ_closedBall {α : Type _} [PseudoMetri
rw [edist_dist] at D1
exact (ENNReal.ofReal_le_ofReal_iff hδ).1 D1
exact mem_bUnion yE D2
-#align is_compact.cthickening_eq_bUnion_closed_ball IsCompact.cthickening_eq_bunionᵢ_closedBall
+#align is_compact.cthickening_eq_bUnion_closed_ball IsCompact.cthickening_eq_biUnion_closedBall
-/- warning: metric.cthickening_eq_bUnion_closed_ball -> Metric.cthickening_eq_bunionᵢ_closedBall is a dubious translation:
+/- warning: metric.cthickening_eq_bUnion_closed_ball -> Metric.cthickening_eq_biUnion_closedBall is a dubious translation:
lean 3 declaration is
- forall {δ : Real} {α : Type.{u1}} [_inst_2 : PseudoMetricSpace.{u1} α] [_inst_3 : ProperSpace.{u1} α _inst_2] (E : Set.{u1} α), (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) -> (Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_2) δ E) (Set.unionᵢ.{u1, succ u1} α α (fun (x : α) => Set.unionᵢ.{u1, 0} α (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_2)) E)) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_2)) E)) => Metric.closedBall.{u1} α _inst_2 x δ))))
+ forall {δ : Real} {α : Type.{u1}} [_inst_2 : PseudoMetricSpace.{u1} α] [_inst_3 : ProperSpace.{u1} α _inst_2] (E : Set.{u1} α), (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) -> (Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_2) δ E) (Set.iUnion.{u1, succ u1} α α (fun (x : α) => Set.iUnion.{u1, 0} α (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_2)) E)) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_2)) E)) => Metric.closedBall.{u1} α _inst_2 x δ))))
but is expected to have type
- forall {δ : Real} {α : Type.{u1}} [_inst_2 : PseudoMetricSpace.{u1} α] [_inst_3 : ProperSpace.{u1} α _inst_2] (E : Set.{u1} α), (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) -> (Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_2) δ E) (Set.unionᵢ.{u1, succ u1} α α (fun (x : α) => Set.unionᵢ.{u1, 0} α (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_2)) E)) (fun (H : Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_2)) E)) => Metric.closedBall.{u1} α _inst_2 x δ))))
-Case conversion may be inaccurate. Consider using '#align metric.cthickening_eq_bUnion_closed_ball Metric.cthickening_eq_bunionᵢ_closedBallₓ'. -/
-theorem cthickening_eq_bunionᵢ_closedBall {α : Type _} [PseudoMetricSpace α] [ProperSpace α]
+ forall {δ : Real} {α : Type.{u1}} [_inst_2 : PseudoMetricSpace.{u1} α] [_inst_3 : ProperSpace.{u1} α _inst_2] (E : Set.{u1} α), (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) -> (Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_2) δ E) (Set.iUnion.{u1, succ u1} α α (fun (x : α) => Set.iUnion.{u1, 0} α (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_2)) E)) (fun (H : Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_2)) E)) => Metric.closedBall.{u1} α _inst_2 x δ))))
+Case conversion may be inaccurate. Consider using '#align metric.cthickening_eq_bUnion_closed_ball Metric.cthickening_eq_biUnion_closedBallₓ'. -/
+theorem cthickening_eq_biUnion_closedBall {α : Type _} [PseudoMetricSpace α] [ProperSpace α]
(E : Set α) (hδ : 0 ≤ δ) : cthickening δ E = ⋃ x ∈ closure E, closedBall x δ :=
by
rcases eq_empty_or_nonempty E with (rfl | hne)
@@ -2423,19 +2423,19 @@ theorem cthickening_eq_bunionᵢ_closedBall {α : Type _} [PseudoMetricSpace α]
(ENNReal.ofReal_le_ofReal_iff hδ).mp
(((congr_arg ENNReal.ofReal hy.symm).le.trans ENNReal.ofReal_toReal_le).trans hx)
exact mem_bUnion yE hy
-#align metric.cthickening_eq_bUnion_closed_ball Metric.cthickening_eq_bunionᵢ_closedBall
+#align metric.cthickening_eq_bUnion_closed_ball Metric.cthickening_eq_biUnion_closedBall
-/- warning: is_closed.cthickening_eq_bUnion_closed_ball -> IsClosed.cthickening_eq_bunionᵢ_closedBall is a dubious translation:
+/- warning: is_closed.cthickening_eq_bUnion_closed_ball -> IsClosed.cthickening_eq_biUnion_closedBall is a dubious translation:
lean 3 declaration is
- forall {δ : Real} {α : Type.{u1}} [_inst_2 : PseudoMetricSpace.{u1} α] [_inst_3 : ProperSpace.{u1} α _inst_2] {E : Set.{u1} α}, (IsClosed.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_2)) E) -> (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) -> (Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_2) δ E) (Set.unionᵢ.{u1, succ u1} α α (fun (x : α) => Set.unionᵢ.{u1, 0} α (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x E) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x E) => Metric.closedBall.{u1} α _inst_2 x δ))))
+ forall {δ : Real} {α : Type.{u1}} [_inst_2 : PseudoMetricSpace.{u1} α] [_inst_3 : ProperSpace.{u1} α _inst_2] {E : Set.{u1} α}, (IsClosed.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_2)) E) -> (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) -> (Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_2) δ E) (Set.iUnion.{u1, succ u1} α α (fun (x : α) => Set.iUnion.{u1, 0} α (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x E) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x E) => Metric.closedBall.{u1} α _inst_2 x δ))))
but is expected to have type
- forall {δ : Real} {α : Type.{u1}} [_inst_2 : PseudoMetricSpace.{u1} α] [_inst_3 : ProperSpace.{u1} α _inst_2] {E : Set.{u1} α}, (IsClosed.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_2)) E) -> (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) -> (Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_2) δ E) (Set.unionᵢ.{u1, succ u1} α α (fun (x : α) => Set.unionᵢ.{u1, 0} α (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x E) (fun (H : Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x E) => Metric.closedBall.{u1} α _inst_2 x δ))))
-Case conversion may be inaccurate. Consider using '#align is_closed.cthickening_eq_bUnion_closed_ball IsClosed.cthickening_eq_bunionᵢ_closedBallₓ'. -/
-theorem IsClosed.cthickening_eq_bunionᵢ_closedBall {α : Type _} [PseudoMetricSpace α]
+ forall {δ : Real} {α : Type.{u1}} [_inst_2 : PseudoMetricSpace.{u1} α] [_inst_3 : ProperSpace.{u1} α _inst_2] {E : Set.{u1} α}, (IsClosed.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_2)) E) -> (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) -> (Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_2) δ E) (Set.iUnion.{u1, succ u1} α α (fun (x : α) => Set.iUnion.{u1, 0} α (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x E) (fun (H : Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x E) => Metric.closedBall.{u1} α _inst_2 x δ))))
+Case conversion may be inaccurate. Consider using '#align is_closed.cthickening_eq_bUnion_closed_ball IsClosed.cthickening_eq_biUnion_closedBallₓ'. -/
+theorem IsClosed.cthickening_eq_biUnion_closedBall {α : Type _} [PseudoMetricSpace α]
[ProperSpace α] {E : Set α} (hE : IsClosed E) (hδ : 0 ≤ δ) :
cthickening δ E = ⋃ x ∈ E, closedBall x δ := by
rw [cthickening_eq_bUnion_closed_ball E hδ, hE.closure_eq]
-#align is_closed.cthickening_eq_bUnion_closed_ball IsClosed.cthickening_eq_bunionᵢ_closedBall
+#align is_closed.cthickening_eq_bUnion_closed_ball IsClosed.cthickening_eq_biUnion_closedBall
/- warning: metric.inf_edist_le_inf_edist_cthickening_add -> Metric.infEdist_le_infEdist_cthickening_add is a dubious translation:
lean 3 declaration is
mathlib commit https://github.com/leanprover-community/mathlib/commit/cc5dd6244981976cc9da7afc4eee5682b037a013
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Sébastien Gouëzel
! This file was ported from Lean 3 source module topology.metric_space.hausdorff_distance
-! leanprover-community/mathlib commit 19cb3751e5e9b3d97adb51023949c50c13b5fdfd
+! leanprover-community/mathlib commit c1686dff26eaecf4efd4edd141ebf78de309ae80
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -747,6 +747,20 @@ def infDist (x : α) (s : Set α) : ℝ :=
#align metric.inf_dist Metric.infDist
-/
+/- warning: metric.inf_dist_eq_infi -> Metric.infDist_eq_infᵢ is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α}, Eq.{1} Real (Metric.infDist.{u1} α _inst_1 x s) (infᵢ.{0, succ u1} Real Real.hasInf (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) (fun (y : coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) => Dist.dist.{u1} α (PseudoMetricSpace.toHasDist.{u1} α _inst_1) x ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) α (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) α (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) α (coeBase.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s) α (coeSubtype.{succ u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s))))) y)))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α}, Eq.{1} Real (Metric.infDist.{u1} α _inst_1 x s) (infᵢ.{0, succ u1} Real Real.instInfSetReal (Set.Elem.{u1} α s) (fun (y : Set.Elem.{u1} α s) => Dist.dist.{u1} α (PseudoMetricSpace.toDist.{u1} α _inst_1) x (Subtype.val.{succ u1} α (fun (x : α) => Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) y)))
+Case conversion may be inaccurate. Consider using '#align metric.inf_dist_eq_infi Metric.infDist_eq_infᵢₓ'. -/
+theorem infDist_eq_infᵢ : infDist x s = ⨅ y : s, dist x y :=
+ by
+ rw [inf_dist, inf_edist, infᵢ_subtype', ENNReal.toReal_infᵢ]
+ · simp only [dist_edist]
+ rfl
+ · exact fun _ => edist_ne_top _ _
+#align metric.inf_dist_eq_infi Metric.infDist_eq_infᵢ
+
/- warning: metric.inf_dist_nonneg -> Metric.infDist_nonneg is a dubious translation:
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α}, LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) (Metric.infDist.{u1} α _inst_1 x s)
mathlib commit https://github.com/leanprover-community/mathlib/commit/284fdd2962e67d2932fa3a79ce19fcf92d38e228
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Sébastien Gouëzel
! This file was ported from Lean 3 source module topology.metric_space.hausdorff_distance
-! leanprover-community/mathlib commit 57ac39bd365c2f80589a700f9fbb664d3a1a30c2
+! leanprover-community/mathlib commit 19cb3751e5e9b3d97adb51023949c50c13b5fdfd
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -15,6 +15,9 @@ import Mathbin.Topology.Instances.Ennreal
/-!
# Hausdorff distance
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
The Hausdorff distance on subsets of a metric (or emetric) space.
Given two subsets `s` and `t` of a metric space, their Hausdorff distance is the smallest `d`
mathlib commit https://github.com/leanprover-community/mathlib/commit/5ec62c8106221a3f9160e4e4fcc3eed79fe213e9
@@ -1651,15 +1651,15 @@ theorem ball_subset_thickening {x : X} {E : Set X} (hx : x ∈ E) (δ : ℝ) :
#align metric.ball_subset_thickening Metric.ball_subset_thickening
-/
-#print Metric.thickening_eq_bUnion_ball /-
+#print Metric.thickening_eq_bunionᵢ_ball /-
/-- The (open) `δ`-thickening `thickening δ E` of a subset `E` in a metric space equals the
union of balls of radius `δ` centered at points of `E`. -/
-theorem thickening_eq_bUnion_ball {δ : ℝ} {E : Set X} : thickening δ E = ⋃ x ∈ E, ball x δ :=
+theorem thickening_eq_bunionᵢ_ball {δ : ℝ} {E : Set X} : thickening δ E = ⋃ x ∈ E, ball x δ :=
by
ext x
rw [mem_Union₂]
exact mem_thickening_iff
-#align metric.thickening_eq_bUnion_ball Metric.thickening_eq_bUnion_ball
+#align metric.thickening_eq_bUnion_ball Metric.thickening_eq_bunionᵢ_ball
-/
#print Metric.Bounded.thickening /-
@@ -2361,17 +2361,17 @@ theorem cthickening_subset_unionᵢ_closedBall_of_lt {α : Type _} [PseudoMetric
exact mem_Union₂.mpr ⟨y, hy₁, hy₂.le⟩
#align metric.cthickening_subset_Union_closed_ball_of_lt Metric.cthickening_subset_unionᵢ_closedBall_of_lt
-/- warning: is_compact.cthickening_eq_bUnion_closed_ball -> IsCompact.cthickening_eq_bUnion_closedBall is a dubious translation:
+/- warning: is_compact.cthickening_eq_bUnion_closed_ball -> IsCompact.cthickening_eq_bunionᵢ_closedBall is a dubious translation:
lean 3 declaration is
forall {α : Type.{u1}} [_inst_2 : PseudoMetricSpace.{u1} α] {δ : Real} {E : Set.{u1} α}, (IsCompact.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_2)) E) -> (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) -> (Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_2) δ E) (Set.unionᵢ.{u1, succ u1} α α (fun (x : α) => Set.unionᵢ.{u1, 0} α (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x E) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x E) => Metric.closedBall.{u1} α _inst_2 x δ))))
but is expected to have type
forall {α : Type.{u1}} [_inst_2 : PseudoMetricSpace.{u1} α] {δ : Real} {E : Set.{u1} α}, (IsCompact.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_2)) E) -> (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) -> (Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_2) δ E) (Set.unionᵢ.{u1, succ u1} α α (fun (x : α) => Set.unionᵢ.{u1, 0} α (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x E) (fun (H : Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x E) => Metric.closedBall.{u1} α _inst_2 x δ))))
-Case conversion may be inaccurate. Consider using '#align is_compact.cthickening_eq_bUnion_closed_ball IsCompact.cthickening_eq_bUnion_closedBallₓ'. -/
+Case conversion may be inaccurate. Consider using '#align is_compact.cthickening_eq_bUnion_closed_ball IsCompact.cthickening_eq_bunionᵢ_closedBallₓ'. -/
/-- The closed thickening of a compact set `E` is the union of the balls `closed_ball x δ` over
`x ∈ E`.
See also `metric.cthickening_eq_bUnion_closed_ball`. -/
-theorem IsCompact.cthickening_eq_bUnion_closedBall {α : Type _} [PseudoMetricSpace α] {δ : ℝ}
+theorem IsCompact.cthickening_eq_bunionᵢ_closedBall {α : Type _} [PseudoMetricSpace α] {δ : ℝ}
{E : Set α} (hE : IsCompact E) (hδ : 0 ≤ δ) : cthickening δ E = ⋃ x ∈ E, closedBall x δ :=
by
rcases eq_empty_or_nonempty E with (rfl | hne)
@@ -2384,7 +2384,7 @@ theorem IsCompact.cthickening_eq_bUnion_closedBall {α : Type _} [PseudoMetricSp
rw [edist_dist] at D1
exact (ENNReal.ofReal_le_ofReal_iff hδ).1 D1
exact mem_bUnion yE D2
-#align is_compact.cthickening_eq_bUnion_closed_ball IsCompact.cthickening_eq_bUnion_closedBall
+#align is_compact.cthickening_eq_bUnion_closed_ball IsCompact.cthickening_eq_bunionᵢ_closedBall
/- warning: metric.cthickening_eq_bUnion_closed_ball -> Metric.cthickening_eq_bunionᵢ_closedBall is a dubious translation:
lean 3 declaration is
mathlib commit https://github.com/leanprover-community/mathlib/commit/5ec62c8106221a3f9160e4e4fcc3eed79fe213e9
@@ -52,57 +52,111 @@ variable [PseudoEMetricSpace α] [PseudoEMetricSpace β] {x y : α} {s t : Set
/-! ### Distance of a point to a set as a function into `ℝ≥0∞`. -/
+#print EMetric.infEdist /-
/-- The minimal edistance of a point to a set -/
def infEdist (x : α) (s : Set α) : ℝ≥0∞ :=
⨅ y ∈ s, edist x y
-#align emetric.inf_edist Emetric.infEdist
+#align emetric.inf_edist EMetric.infEdist
+-/
+/- warning: emetric.inf_edist_empty -> EMetric.infEdist_empty is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α}, Eq.{1} ENNReal (EMetric.infEdist.{u1} α _inst_1 x (EmptyCollection.emptyCollection.{u1} (Set.{u1} α) (Set.hasEmptyc.{u1} α))) (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder)))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α}, Eq.{1} ENNReal (EMetric.infEdist.{u1} α _inst_1 x (EmptyCollection.emptyCollection.{u1} (Set.{u1} α) (Set.instEmptyCollectionSet.{u1} α))) (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal)))
+Case conversion may be inaccurate. Consider using '#align emetric.inf_edist_empty EMetric.infEdist_emptyₓ'. -/
@[simp]
theorem infEdist_empty : infEdist x ∅ = ∞ :=
infᵢ_emptyset
-#align emetric.inf_edist_empty Emetric.infEdist_empty
-
+#align emetric.inf_edist_empty EMetric.infEdist_empty
+
+/- warning: emetric.le_inf_edist -> EMetric.le_infEdist is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {s : Set.{u1} α} {d : ENNReal}, Iff (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) d (EMetric.infEdist.{u1} α _inst_1 x s)) (forall (y : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) -> (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) d (EDist.edist.{u1} α (PseudoEMetricSpace.toHasEdist.{u1} α _inst_1) x y)))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {s : Set.{u1} α} {d : ENNReal}, Iff (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) d (EMetric.infEdist.{u1} α _inst_1 x s)) (forall (y : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y s) -> (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) d (EDist.edist.{u1} α (PseudoEMetricSpace.toEDist.{u1} α _inst_1) x y)))
+Case conversion may be inaccurate. Consider using '#align emetric.le_inf_edist EMetric.le_infEdistₓ'. -/
theorem le_infEdist {d} : d ≤ infEdist x s ↔ ∀ y ∈ s, d ≤ edist x y := by
simp only [inf_edist, le_infᵢ_iff]
-#align emetric.le_inf_edist Emetric.le_infEdist
+#align emetric.le_inf_edist EMetric.le_infEdist
+#print EMetric.infEdist_union /-
/-- The edist to a union is the minimum of the edists -/
@[simp]
theorem infEdist_union : infEdist x (s ∪ t) = infEdist x s ⊓ infEdist x t :=
infᵢ_union
-#align emetric.inf_edist_union Emetric.infEdist_union
+#align emetric.inf_edist_union EMetric.infEdist_union
+-/
+/- warning: emetric.inf_edist_Union -> EMetric.infEdist_unionᵢ is a dubious translation:
+lean 3 declaration is
+ forall {ι : Sort.{u2}} {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (f : ι -> (Set.{u1} α)) (x : α), Eq.{1} ENNReal (EMetric.infEdist.{u1} α _inst_1 x (Set.unionᵢ.{u1, u2} α ι (fun (i : ι) => f i))) (infᵢ.{0, u2} ENNReal (ConditionallyCompleteLattice.toHasInf.{0} ENNReal (CompleteLattice.toConditionallyCompleteLattice.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) ι (fun (i : ι) => EMetric.infEdist.{u1} α _inst_1 x (f i)))
+but is expected to have type
+ forall {ι : Sort.{u1}} {α : Type.{u2}} [_inst_1 : PseudoEMetricSpace.{u2} α] (f : ι -> (Set.{u2} α)) (x : α), Eq.{1} ENNReal (EMetric.infEdist.{u2} α _inst_1 x (Set.unionᵢ.{u2, u1} α ι (fun (i : ι) => f i))) (infᵢ.{0, u1} ENNReal (ConditionallyCompleteLattice.toInfSet.{0} ENNReal (ConditionallyCompleteLinearOrder.toConditionallyCompleteLattice.{0} ENNReal (ConditionallyCompleteLinearOrderBot.toConditionallyCompleteLinearOrder.{0} ENNReal (CompleteLinearOrder.toConditionallyCompleteLinearOrderBot.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal)))) ι (fun (i : ι) => EMetric.infEdist.{u2} α _inst_1 x (f i)))
+Case conversion may be inaccurate. Consider using '#align emetric.inf_edist_Union EMetric.infEdist_unionᵢₓ'. -/
@[simp]
theorem infEdist_unionᵢ (f : ι → Set α) (x : α) : infEdist x (⋃ i, f i) = ⨅ i, infEdist x (f i) :=
infᵢ_unionᵢ f _
-#align emetric.inf_edist_Union Emetric.infEdist_unionᵢ
+#align emetric.inf_edist_Union EMetric.infEdist_unionᵢ
+#print EMetric.infEdist_singleton /-
/-- The edist to a singleton is the edistance to the single point of this singleton -/
@[simp]
theorem infEdist_singleton : infEdist x {y} = edist x y :=
infᵢ_singleton
-#align emetric.inf_edist_singleton Emetric.infEdist_singleton
+#align emetric.inf_edist_singleton EMetric.infEdist_singleton
+-/
+/- warning: emetric.inf_edist_le_edist_of_mem -> EMetric.infEdist_le_edist_of_mem is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {y : α} {s : Set.{u1} α}, (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) -> (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.infEdist.{u1} α _inst_1 x s) (EDist.edist.{u1} α (PseudoEMetricSpace.toHasEdist.{u1} α _inst_1) x y))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {y : α} {s : Set.{u1} α}, (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y s) -> (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.infEdist.{u1} α _inst_1 x s) (EDist.edist.{u1} α (PseudoEMetricSpace.toEDist.{u1} α _inst_1) x y))
+Case conversion may be inaccurate. Consider using '#align emetric.inf_edist_le_edist_of_mem EMetric.infEdist_le_edist_of_memₓ'. -/
/-- The edist to a set is bounded above by the edist to any of its points -/
theorem infEdist_le_edist_of_mem (h : y ∈ s) : infEdist x s ≤ edist x y :=
infᵢ₂_le _ h
-#align emetric.inf_edist_le_edist_of_mem Emetric.infEdist_le_edist_of_mem
-
+#align emetric.inf_edist_le_edist_of_mem EMetric.infEdist_le_edist_of_mem
+
+/- warning: emetric.inf_edist_zero_of_mem -> EMetric.infEdist_zero_of_mem is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {s : Set.{u1} α}, (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) -> (Eq.{1} ENNReal (EMetric.infEdist.{u1} α _inst_1 x s) (OfNat.ofNat.{0} ENNReal 0 (OfNat.mk.{0} ENNReal 0 (Zero.zero.{0} ENNReal ENNReal.hasZero))))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {s : Set.{u1} α}, (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) -> (Eq.{1} ENNReal (EMetric.infEdist.{u1} α _inst_1 x s) (OfNat.ofNat.{0} ENNReal 0 (Zero.toOfNat0.{0} ENNReal instENNRealZero)))
+Case conversion may be inaccurate. Consider using '#align emetric.inf_edist_zero_of_mem EMetric.infEdist_zero_of_memₓ'. -/
/-- If a point `x` belongs to `s`, then its edist to `s` vanishes -/
theorem infEdist_zero_of_mem (h : x ∈ s) : infEdist x s = 0 :=
nonpos_iff_eq_zero.1 <| @edist_self _ _ x ▸ infEdist_le_edist_of_mem h
-#align emetric.inf_edist_zero_of_mem Emetric.infEdist_zero_of_mem
-
+#align emetric.inf_edist_zero_of_mem EMetric.infEdist_zero_of_mem
+
+/- warning: emetric.inf_edist_anti -> EMetric.infEdist_anti is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {s : Set.{u1} α} {t : Set.{u1} α}, (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) s t) -> (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.infEdist.{u1} α _inst_1 x t) (EMetric.infEdist.{u1} α _inst_1 x s))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {s : Set.{u1} α} {t : Set.{u1} α}, (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) s t) -> (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.infEdist.{u1} α _inst_1 x t) (EMetric.infEdist.{u1} α _inst_1 x s))
+Case conversion may be inaccurate. Consider using '#align emetric.inf_edist_anti EMetric.infEdist_antiₓ'. -/
/-- The edist is antitone with respect to inclusion. -/
theorem infEdist_anti (h : s ⊆ t) : infEdist x t ≤ infEdist x s :=
infᵢ_le_infᵢ_of_subset h
-#align emetric.inf_edist_anti Emetric.infEdist_anti
-
+#align emetric.inf_edist_anti EMetric.infEdist_anti
+
+/- warning: emetric.inf_edist_lt_iff -> EMetric.infEdist_lt_iff is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {s : Set.{u1} α} {r : ENNReal}, Iff (LT.lt.{0} ENNReal (Preorder.toLT.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.infEdist.{u1} α _inst_1 x s) r) (Exists.{succ u1} α (fun (y : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) => LT.lt.{0} ENNReal (Preorder.toLT.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EDist.edist.{u1} α (PseudoEMetricSpace.toHasEdist.{u1} α _inst_1) x y) r)))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {s : Set.{u1} α} {r : ENNReal}, Iff (LT.lt.{0} ENNReal (Preorder.toLT.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.infEdist.{u1} α _inst_1 x s) r) (Exists.{succ u1} α (fun (y : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y s) (LT.lt.{0} ENNReal (Preorder.toLT.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EDist.edist.{u1} α (PseudoEMetricSpace.toEDist.{u1} α _inst_1) x y) r)))
+Case conversion may be inaccurate. Consider using '#align emetric.inf_edist_lt_iff EMetric.infEdist_lt_iffₓ'. -/
/-- The edist to a set is `< r` iff there exists a point in the set at edistance `< r` -/
theorem infEdist_lt_iff {r : ℝ≥0∞} : infEdist x s < r ↔ ∃ y ∈ s, edist x y < r := by
simp_rw [inf_edist, infᵢ_lt_iff]
-#align emetric.inf_edist_lt_iff Emetric.infEdist_lt_iff
-
+#align emetric.inf_edist_lt_iff EMetric.infEdist_lt_iff
+
+/- warning: emetric.inf_edist_le_inf_edist_add_edist -> EMetric.infEdist_le_infEdist_add_edist is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {y : α} {s : Set.{u1} α}, LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.infEdist.{u1} α _inst_1 x s) (HAdd.hAdd.{0, 0, 0} ENNReal ENNReal ENNReal (instHAdd.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring)))))))) (EMetric.infEdist.{u1} α _inst_1 y s) (EDist.edist.{u1} α (PseudoEMetricSpace.toHasEdist.{u1} α _inst_1) x y))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {y : α} {s : Set.{u1} α}, LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.infEdist.{u1} α _inst_1 x s) (HAdd.hAdd.{0, 0, 0} ENNReal ENNReal ENNReal (instHAdd.{0} ENNReal (Distrib.toAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal)))))))) (EMetric.infEdist.{u1} α _inst_1 y s) (EDist.edist.{u1} α (PseudoEMetricSpace.toEDist.{u1} α _inst_1) x y))
+Case conversion may be inaccurate. Consider using '#align emetric.inf_edist_le_inf_edist_add_edist EMetric.infEdist_le_infEdist_add_edistₓ'. -/
/-- The edist of `x` to `s` is bounded by the sum of the edist of `y` to `s` and
the edist from `x` to `y` -/
theorem infEdist_le_infEdist_add_edist : infEdist x s ≤ infEdist y s + edist x y :=
@@ -111,14 +165,26 @@ theorem infEdist_le_infEdist_add_edist : infEdist x s ≤ infEdist y s + edist x
infᵢ₂_mono fun z hz => (edist_triangle _ _ _).trans_eq (add_comm _ _)
_ = (⨅ z ∈ s, edist y z) + edist x y := by simp only [ENNReal.infᵢ_add]
-#align emetric.inf_edist_le_inf_edist_add_edist Emetric.infEdist_le_infEdist_add_edist
-
+#align emetric.inf_edist_le_inf_edist_add_edist EMetric.infEdist_le_infEdist_add_edist
+
+/- warning: emetric.inf_edist_le_edist_add_inf_edist -> EMetric.infEdist_le_edist_add_infEdist is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {y : α} {s : Set.{u1} α}, LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.infEdist.{u1} α _inst_1 x s) (HAdd.hAdd.{0, 0, 0} ENNReal ENNReal ENNReal (instHAdd.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring)))))))) (EDist.edist.{u1} α (PseudoEMetricSpace.toHasEdist.{u1} α _inst_1) x y) (EMetric.infEdist.{u1} α _inst_1 y s))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {y : α} {s : Set.{u1} α}, LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.infEdist.{u1} α _inst_1 x s) (HAdd.hAdd.{0, 0, 0} ENNReal ENNReal ENNReal (instHAdd.{0} ENNReal (Distrib.toAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal)))))))) (EDist.edist.{u1} α (PseudoEMetricSpace.toEDist.{u1} α _inst_1) x y) (EMetric.infEdist.{u1} α _inst_1 y s))
+Case conversion may be inaccurate. Consider using '#align emetric.inf_edist_le_edist_add_inf_edist EMetric.infEdist_le_edist_add_infEdistₓ'. -/
theorem infEdist_le_edist_add_infEdist : infEdist x s ≤ edist x y + infEdist y s :=
by
rw [add_comm]
exact inf_edist_le_inf_edist_add_edist
-#align emetric.inf_edist_le_edist_add_inf_edist Emetric.infEdist_le_edist_add_infEdist
-
+#align emetric.inf_edist_le_edist_add_inf_edist EMetric.infEdist_le_edist_add_infEdist
+
+/- warning: emetric.edist_le_inf_edist_add_ediam -> EMetric.edist_le_infEdist_add_ediam is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {y : α} {s : Set.{u1} α}, (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) -> (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EDist.edist.{u1} α (PseudoEMetricSpace.toHasEdist.{u1} α _inst_1) x y) (HAdd.hAdd.{0, 0, 0} ENNReal ENNReal ENNReal (instHAdd.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring)))))))) (EMetric.infEdist.{u1} α _inst_1 x s) (EMetric.diam.{u1} α _inst_1 s)))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {y : α} {s : Set.{u1} α}, (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y s) -> (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EDist.edist.{u1} α (PseudoEMetricSpace.toEDist.{u1} α _inst_1) x y) (HAdd.hAdd.{0, 0, 0} ENNReal ENNReal ENNReal (instHAdd.{0} ENNReal (Distrib.toAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal)))))))) (EMetric.infEdist.{u1} α _inst_1 x s) (EMetric.diam.{u1} α _inst_1 s)))
+Case conversion may be inaccurate. Consider using '#align emetric.edist_le_inf_edist_add_ediam EMetric.edist_le_infEdist_add_ediamₓ'. -/
theorem edist_le_infEdist_add_ediam (hy : y ∈ s) : edist x y ≤ infEdist x s + diam s :=
by
simp_rw [inf_edist, ENNReal.infᵢ_add]
@@ -127,15 +193,22 @@ theorem edist_le_infEdist_add_ediam (hy : y ∈ s) : edist x y ≤ infEdist x s
edist x y ≤ edist x i + edist i y := edist_triangle _ _ _
_ ≤ edist x i + diam s := add_le_add le_rfl (edist_le_diam_of_mem hi hy)
-#align emetric.edist_le_inf_edist_add_ediam Emetric.edist_le_infEdist_add_ediam
-
+#align emetric.edist_le_inf_edist_add_ediam EMetric.edist_le_infEdist_add_ediam
+
+/- warning: emetric.continuous_inf_edist -> EMetric.continuous_infEdist is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α}, Continuous.{u1, 0} α ENNReal (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) ENNReal.topologicalSpace (fun (x : α) => EMetric.infEdist.{u1} α _inst_1 x s)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α}, Continuous.{u1, 0} α ENNReal (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) ENNReal.instTopologicalSpaceENNReal (fun (x : α) => EMetric.infEdist.{u1} α _inst_1 x s)
+Case conversion may be inaccurate. Consider using '#align emetric.continuous_inf_edist EMetric.continuous_infEdistₓ'. -/
/-- The edist to a set depends continuously on the point -/
@[continuity]
theorem continuous_infEdist : Continuous fun x => infEdist x s :=
continuous_of_le_add_edist 1 (by simp) <| by
simp only [one_mul, inf_edist_le_inf_edist_add_edist, forall₂_true_iff]
-#align emetric.continuous_inf_edist Emetric.continuous_infEdist
+#align emetric.continuous_inf_edist EMetric.continuous_infEdist
+#print EMetric.infEdist_closure /-
/-- The edist to a set and to its closure coincide -/
theorem infEdist_closure : infEdist x (closure s) = infEdist x s :=
by
@@ -154,42 +227,79 @@ theorem infEdist_closure : infEdist x (closure s) = infEdist x s :=
_ ≤ inf_edist x (closure s) + ε / 2 + ε / 2 := (add_le_add (le_of_lt hy) (le_of_lt dyz))
_ = inf_edist x (closure s) + ↑ε := by rw [add_assoc, ENNReal.add_halves]
-#align emetric.inf_edist_closure Emetric.infEdist_closure
+#align emetric.inf_edist_closure EMetric.infEdist_closure
+-/
+/- warning: emetric.mem_closure_iff_inf_edist_zero -> EMetric.mem_closure_iff_infEdist_zero is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {s : Set.{u1} α}, Iff (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) s)) (Eq.{1} ENNReal (EMetric.infEdist.{u1} α _inst_1 x s) (OfNat.ofNat.{0} ENNReal 0 (OfNat.mk.{0} ENNReal 0 (Zero.zero.{0} ENNReal ENNReal.hasZero))))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {s : Set.{u1} α}, Iff (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) s)) (Eq.{1} ENNReal (EMetric.infEdist.{u1} α _inst_1 x s) (OfNat.ofNat.{0} ENNReal 0 (Zero.toOfNat0.{0} ENNReal instENNRealZero)))
+Case conversion may be inaccurate. Consider using '#align emetric.mem_closure_iff_inf_edist_zero EMetric.mem_closure_iff_infEdist_zeroₓ'. -/
/-- A point belongs to the closure of `s` iff its infimum edistance to this set vanishes -/
theorem mem_closure_iff_infEdist_zero : x ∈ closure s ↔ infEdist x s = 0 :=
⟨fun h => by
rw [← inf_edist_closure]
exact inf_edist_zero_of_mem h, fun h =>
EMetric.mem_closure_iff.2 fun ε εpos => infEdist_lt_iff.mp <| by rwa [h]⟩
-#align emetric.mem_closure_iff_inf_edist_zero Emetric.mem_closure_iff_infEdist_zero
-
+#align emetric.mem_closure_iff_inf_edist_zero EMetric.mem_closure_iff_infEdist_zero
+
+/- warning: emetric.mem_iff_inf_edist_zero_of_closed -> EMetric.mem_iff_infEdist_zero_of_closed is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {s : Set.{u1} α}, (IsClosed.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) s) -> (Iff (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) (Eq.{1} ENNReal (EMetric.infEdist.{u1} α _inst_1 x s) (OfNat.ofNat.{0} ENNReal 0 (OfNat.mk.{0} ENNReal 0 (Zero.zero.{0} ENNReal ENNReal.hasZero)))))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {s : Set.{u1} α}, (IsClosed.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) s) -> (Iff (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) (Eq.{1} ENNReal (EMetric.infEdist.{u1} α _inst_1 x s) (OfNat.ofNat.{0} ENNReal 0 (Zero.toOfNat0.{0} ENNReal instENNRealZero))))
+Case conversion may be inaccurate. Consider using '#align emetric.mem_iff_inf_edist_zero_of_closed EMetric.mem_iff_infEdist_zero_of_closedₓ'. -/
/-- Given a closed set `s`, a point belongs to `s` iff its infimum edistance to this set vanishes -/
theorem mem_iff_infEdist_zero_of_closed (h : IsClosed s) : x ∈ s ↔ infEdist x s = 0 :=
by
convert← mem_closure_iff_inf_edist_zero
exact h.closure_eq
-#align emetric.mem_iff_inf_edist_zero_of_closed Emetric.mem_iff_infEdist_zero_of_closed
-
+#align emetric.mem_iff_inf_edist_zero_of_closed EMetric.mem_iff_infEdist_zero_of_closed
+
+/- warning: emetric.inf_edist_pos_iff_not_mem_closure -> EMetric.infEdist_pos_iff_not_mem_closure is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {E : Set.{u1} α}, Iff (LT.lt.{0} ENNReal (Preorder.toLT.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 0 (OfNat.mk.{0} ENNReal 0 (Zero.zero.{0} ENNReal ENNReal.hasZero))) (EMetric.infEdist.{u1} α _inst_1 x E)) (Not (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E)))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {E : Set.{u1} α}, Iff (LT.lt.{0} ENNReal (Preorder.toLT.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 0 (Zero.toOfNat0.{0} ENNReal instENNRealZero)) (EMetric.infEdist.{u1} α _inst_1 x E)) (Not (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E)))
+Case conversion may be inaccurate. Consider using '#align emetric.inf_edist_pos_iff_not_mem_closure EMetric.infEdist_pos_iff_not_mem_closureₓ'. -/
/-- The infimum edistance of a point to a set is positive if and only if the point is not in the
closure of the set. -/
theorem infEdist_pos_iff_not_mem_closure {x : α} {E : Set α} : 0 < infEdist x E ↔ x ∉ closure E :=
by rw [mem_closure_iff_inf_edist_zero, pos_iff_ne_zero]
-#align emetric.inf_edist_pos_iff_not_mem_closure Emetric.infEdist_pos_iff_not_mem_closure
-
+#align emetric.inf_edist_pos_iff_not_mem_closure EMetric.infEdist_pos_iff_not_mem_closure
+
+/- warning: emetric.inf_edist_closure_pos_iff_not_mem_closure -> EMetric.infEdist_closure_pos_iff_not_mem_closure is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {E : Set.{u1} α}, Iff (LT.lt.{0} ENNReal (Preorder.toLT.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 0 (OfNat.mk.{0} ENNReal 0 (Zero.zero.{0} ENNReal ENNReal.hasZero))) (EMetric.infEdist.{u1} α _inst_1 x (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E))) (Not (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E)))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {E : Set.{u1} α}, Iff (LT.lt.{0} ENNReal (Preorder.toLT.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 0 (Zero.toOfNat0.{0} ENNReal instENNRealZero)) (EMetric.infEdist.{u1} α _inst_1 x (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E))) (Not (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E)))
+Case conversion may be inaccurate. Consider using '#align emetric.inf_edist_closure_pos_iff_not_mem_closure EMetric.infEdist_closure_pos_iff_not_mem_closureₓ'. -/
theorem infEdist_closure_pos_iff_not_mem_closure {x : α} {E : Set α} :
0 < infEdist x (closure E) ↔ x ∉ closure E := by
rw [inf_edist_closure, inf_edist_pos_iff_not_mem_closure]
-#align emetric.inf_edist_closure_pos_iff_not_mem_closure Emetric.infEdist_closure_pos_iff_not_mem_closure
-
+#align emetric.inf_edist_closure_pos_iff_not_mem_closure EMetric.infEdist_closure_pos_iff_not_mem_closure
+
+/- warning: emetric.exists_real_pos_lt_inf_edist_of_not_mem_closure -> EMetric.exists_real_pos_lt_infEdist_of_not_mem_closure is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {E : Set.{u1} α}, (Not (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E))) -> (Exists.{1} Real (fun (ε : Real) => And (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) ε) (LT.lt.{0} ENNReal (Preorder.toLT.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (ENNReal.ofReal ε) (EMetric.infEdist.{u1} α _inst_1 x E))))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {E : Set.{u1} α}, (Not (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E))) -> (Exists.{1} Real (fun (ε : Real) => And (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) ε) (LT.lt.{0} ENNReal (Preorder.toLT.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (ENNReal.ofReal ε) (EMetric.infEdist.{u1} α _inst_1 x E))))
+Case conversion may be inaccurate. Consider using '#align emetric.exists_real_pos_lt_inf_edist_of_not_mem_closure EMetric.exists_real_pos_lt_infEdist_of_not_mem_closureₓ'. -/
theorem exists_real_pos_lt_infEdist_of_not_mem_closure {x : α} {E : Set α} (h : x ∉ closure E) :
∃ ε : ℝ, 0 < ε ∧ ENNReal.ofReal ε < infEdist x E :=
by
rw [← inf_edist_pos_iff_not_mem_closure, ENNReal.lt_iff_exists_real_btwn] at h
rcases h with ⟨ε, ⟨_, ⟨ε_pos, ε_lt⟩⟩⟩
exact ⟨ε, ⟨ennreal.of_real_pos.mp ε_pos, ε_lt⟩⟩
-#align emetric.exists_real_pos_lt_inf_edist_of_not_mem_closure Emetric.exists_real_pos_lt_infEdist_of_not_mem_closure
-
+#align emetric.exists_real_pos_lt_inf_edist_of_not_mem_closure EMetric.exists_real_pos_lt_infEdist_of_not_mem_closure
+
+/- warning: emetric.disjoint_closed_ball_of_lt_inf_edist -> EMetric.disjoint_closedBall_of_lt_infEdist is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {s : Set.{u1} α} {r : ENNReal}, (LT.lt.{0} ENNReal (Preorder.toLT.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) r (EMetric.infEdist.{u1} α _inst_1 x s)) -> (Disjoint.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} (Set.{u1} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α))) (EMetric.closedBall.{u1} α _inst_1 x r) s)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {s : Set.{u1} α} {r : ENNReal}, (LT.lt.{0} ENNReal (Preorder.toLT.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) r (EMetric.infEdist.{u1} α _inst_1 x s)) -> (Disjoint.{u1} (Set.{u1} α) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) (BoundedOrder.toOrderBot.{u1} (Set.{u1} α) (Preorder.toLE.{u1} (Set.{u1} α) (PartialOrder.toPreorder.{u1} (Set.{u1} α) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))))) (CompleteLattice.toBoundedOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) (EMetric.closedBall.{u1} α _inst_1 x r) s)
+Case conversion may be inaccurate. Consider using '#align emetric.disjoint_closed_ball_of_lt_inf_edist EMetric.disjoint_closedBall_of_lt_infEdistₓ'. -/
theorem disjoint_closedBall_of_lt_infEdist {r : ℝ≥0∞} (h : r < infEdist x s) :
Disjoint (closedBall x r) s := by
rw [disjoint_left]
@@ -200,13 +310,21 @@ theorem disjoint_closedBall_of_lt_infEdist {r : ℝ≥0∞} (h : r < infEdist x
_ ≤ r := by rwa [mem_closed_ball, edist_comm] at hy
_ < inf_edist x s := h
-#align emetric.disjoint_closed_ball_of_lt_inf_edist Emetric.disjoint_closedBall_of_lt_infEdist
+#align emetric.disjoint_closed_ball_of_lt_inf_edist EMetric.disjoint_closedBall_of_lt_infEdist
+#print EMetric.infEdist_image /-
/-- The infimum edistance is invariant under isometries -/
theorem infEdist_image (hΦ : Isometry Φ) : infEdist (Φ x) (Φ '' t) = infEdist x t := by
simp only [inf_edist, infᵢ_image, hΦ.edist_eq]
-#align emetric.inf_edist_image Emetric.infEdist_image
+#align emetric.inf_edist_image EMetric.infEdist_image
+-/
+/- warning: is_open.exists_Union_is_closed -> IsOpen.exists_unionᵢ_isClosed is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {U : Set.{u1} α}, (IsOpen.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) U) -> (Exists.{succ u1} (Nat -> (Set.{u1} α)) (fun (F : Nat -> (Set.{u1} α)) => And (forall (n : Nat), IsClosed.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) (F n)) (And (forall (n : Nat), HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) (F n) U) (And (Eq.{succ u1} (Set.{u1} α) (Set.unionᵢ.{u1, 1} α Nat (fun (n : Nat) => F n)) U) (Monotone.{0, u1} Nat (Set.{u1} α) (PartialOrder.toPreorder.{0} Nat (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring))) (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α))))))) F)))))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {U : Set.{u1} α}, (IsOpen.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) U) -> (Exists.{succ u1} (Nat -> (Set.{u1} α)) (fun (F : Nat -> (Set.{u1} α)) => And (forall (n : Nat), IsClosed.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) (F n)) (And (forall (n : Nat), HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) (F n) U) (And (Eq.{succ u1} (Set.{u1} α) (Set.unionᵢ.{u1, 1} α Nat (fun (n : Nat) => F n)) U) (Monotone.{0, u1} Nat (Set.{u1} α) (PartialOrder.toPreorder.{0} Nat (StrictOrderedSemiring.toPartialOrder.{0} Nat Nat.strictOrderedSemiring)) (PartialOrder.toPreorder.{u1} (Set.{u1} α) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) F)))))
+Case conversion may be inaccurate. Consider using '#align is_open.exists_Union_is_closed IsOpen.exists_unionᵢ_isClosedₓ'. -/
theorem IsOpen.exists_unionᵢ_isClosed {U : Set α} (hU : IsOpen U) :
∃ F : ℕ → Set α, (∀ n, IsClosed (F n)) ∧ (∀ n, F n ⊆ U) ∧ (⋃ n, F n) = U ∧ Monotone F :=
by
@@ -234,6 +352,12 @@ theorem IsOpen.exists_unionᵢ_isClosed {U : Set α} (hU : IsOpen U) :
exact ⟨n, hn.le⟩
#align is_open.exists_Union_is_closed IsOpen.exists_unionᵢ_isClosed
+/- warning: is_compact.exists_inf_edist_eq_edist -> IsCompact.exists_infEdist_eq_edist is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α}, (IsCompact.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) s) -> (Set.Nonempty.{u1} α s) -> (forall (x : α), Exists.{succ u1} α (fun (y : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) => Eq.{1} ENNReal (EMetric.infEdist.{u1} α _inst_1 x s) (EDist.edist.{u1} α (PseudoEMetricSpace.toHasEdist.{u1} α _inst_1) x y))))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α}, (IsCompact.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) s) -> (Set.Nonempty.{u1} α s) -> (forall (x : α), Exists.{succ u1} α (fun (y : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y s) (Eq.{1} ENNReal (EMetric.infEdist.{u1} α _inst_1 x s) (EDist.edist.{u1} α (PseudoEMetricSpace.toEDist.{u1} α _inst_1) x y))))
+Case conversion may be inaccurate. Consider using '#align is_compact.exists_inf_edist_eq_edist IsCompact.exists_infEdist_eq_edistₓ'. -/
theorem IsCompact.exists_infEdist_eq_edist (hs : IsCompact s) (hne : s.Nonempty) (x : α) :
∃ y ∈ s, infEdist x s = edist x y :=
by
@@ -243,6 +367,12 @@ theorem IsCompact.exists_infEdist_eq_edist (hs : IsCompact s) (hne : s.Nonempty)
exact ⟨y, ys, le_antisymm (inf_edist_le_edist_of_mem ys) (by rwa [le_inf_edist])⟩
#align is_compact.exists_inf_edist_eq_edist IsCompact.exists_infEdist_eq_edist
+/- warning: emetric.exists_pos_forall_lt_edist -> EMetric.exists_pos_forall_lt_edist is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (IsCompact.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) s) -> (IsClosed.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) t) -> (Disjoint.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} (Set.{u1} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α))) s t) -> (Exists.{1} NNReal (fun (r : NNReal) => And (LT.lt.{0} NNReal (Preorder.toLT.{0} NNReal (PartialOrder.toPreorder.{0} NNReal (OrderedCancelAddCommMonoid.toPartialOrder.{0} NNReal (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} NNReal NNReal.strictOrderedSemiring)))) (OfNat.ofNat.{0} NNReal 0 (OfNat.mk.{0} NNReal 0 (Zero.zero.{0} NNReal (MulZeroClass.toHasZero.{0} NNReal (NonUnitalNonAssocSemiring.toMulZeroClass.{0} NNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} NNReal (Semiring.toNonAssocSemiring.{0} NNReal NNReal.semiring))))))) r) (forall (x : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) -> (forall (y : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y t) -> (LT.lt.{0} ENNReal (Preorder.toLT.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) NNReal ENNReal (HasLiftT.mk.{1, 1} NNReal ENNReal (CoeTCₓ.coe.{1, 1} NNReal ENNReal (coeBase.{1, 1} NNReal ENNReal ENNReal.hasCoe))) r) (EDist.edist.{u1} α (PseudoEMetricSpace.toHasEdist.{u1} α _inst_1) x y))))))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (IsCompact.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) s) -> (IsClosed.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) t) -> (Disjoint.{u1} (Set.{u1} α) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) (BoundedOrder.toOrderBot.{u1} (Set.{u1} α) (Preorder.toLE.{u1} (Set.{u1} α) (PartialOrder.toPreorder.{u1} (Set.{u1} α) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))))) (CompleteLattice.toBoundedOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) s t) -> (Exists.{1} NNReal (fun (r : NNReal) => And (LT.lt.{0} NNReal (Preorder.toLT.{0} NNReal (PartialOrder.toPreorder.{0} NNReal (StrictOrderedSemiring.toPartialOrder.{0} NNReal instNNRealStrictOrderedSemiring))) (OfNat.ofNat.{0} NNReal 0 (Zero.toOfNat0.{0} NNReal instNNRealZero)) r) (forall (x : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) -> (forall (y : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y t) -> (LT.lt.{0} ENNReal (Preorder.toLT.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (ENNReal.some r) (EDist.edist.{u1} α (PseudoEMetricSpace.toEDist.{u1} α _inst_1) x y))))))
+Case conversion may be inaccurate. Consider using '#align emetric.exists_pos_forall_lt_edist EMetric.exists_pos_forall_lt_edistₓ'. -/
theorem exists_pos_forall_lt_edist (hs : IsCompact s) (ht : IsClosed t) (hst : Disjoint s t) :
∃ r : ℝ≥0, 0 < r ∧ ∀ x ∈ s, ∀ y ∈ t, (r : ℝ≥0∞) < edist x y :=
by
@@ -255,41 +385,63 @@ theorem exists_pos_forall_lt_edist (hs : IsCompact s) (ht : IsClosed t) (hst : D
pos_iff_ne_zero.2 fun H => hst.le_bot ⟨hx, (mem_iff_inf_edist_zero_of_closed ht).mpr H⟩
rcases ENNReal.lt_iff_exists_nnreal_btwn.1 this with ⟨r, h₀, hr⟩
exact ⟨r, ennreal.coe_pos.mp h₀, fun y hy z hz => hr.trans_le <| le_inf_edist.1 (h y hy) z hz⟩
-#align emetric.exists_pos_forall_lt_edist Emetric.exists_pos_forall_lt_edist
+#align emetric.exists_pos_forall_lt_edist EMetric.exists_pos_forall_lt_edist
end InfEdist
/-! ### The Hausdorff distance as a function into `ℝ≥0∞`. -/
+#print EMetric.hausdorffEdist /-
--section
/-- The Hausdorff edistance between two sets is the smallest `r` such that each set
is contained in the `r`-neighborhood of the other one -/
irreducible_def hausdorffEdist {α : Type u} [PseudoEMetricSpace α] (s t : Set α) : ℝ≥0∞ :=
(⨆ x ∈ s, infEdist x t) ⊔ ⨆ y ∈ t, infEdist y s
-#align emetric.Hausdorff_edist Emetric.hausdorffEdist
+#align emetric.Hausdorff_edist EMetric.hausdorffEdist
+-/
+/- warning: emetric.Hausdorff_edist_def -> EMetric.hausdorffEdist_def is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (s : Set.{u1} α) (t : Set.{u1} α), Eq.{1} ENNReal (EMetric.hausdorffEdist.{u1} α _inst_1 s t) (Sup.sup.{0} ENNReal (SemilatticeSup.toHasSup.{0} ENNReal ENNReal.semilatticeSup) (supᵢ.{0, succ u1} ENNReal (ConditionallyCompleteLattice.toHasSup.{0} ENNReal (CompleteLattice.toConditionallyCompleteLattice.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) α (fun (x : α) => supᵢ.{0, 0} ENNReal (ConditionallyCompleteLattice.toHasSup.{0} ENNReal (CompleteLattice.toConditionallyCompleteLattice.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) => EMetric.infEdist.{u1} α _inst_1 x t))) (supᵢ.{0, succ u1} ENNReal (ConditionallyCompleteLattice.toHasSup.{0} ENNReal (CompleteLattice.toConditionallyCompleteLattice.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) α (fun (y : α) => supᵢ.{0, 0} ENNReal (ConditionallyCompleteLattice.toHasSup.{0} ENNReal (CompleteLattice.toConditionallyCompleteLattice.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y t) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y t) => EMetric.infEdist.{u1} α _inst_1 y s))))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (s : Set.{u1} α) (t : Set.{u1} α), Eq.{1} ENNReal (EMetric.hausdorffEdist.{u1} α _inst_1 s t) (Sup.sup.{0} ENNReal (SemilatticeSup.toSup.{0} ENNReal instENNRealSemilatticeSup) (supᵢ.{0, succ u1} ENNReal (ConditionallyCompleteLattice.toSupSet.{0} ENNReal (ConditionallyCompleteLinearOrder.toConditionallyCompleteLattice.{0} ENNReal (ConditionallyCompleteLinearOrderBot.toConditionallyCompleteLinearOrder.{0} ENNReal (CompleteLinearOrder.toConditionallyCompleteLinearOrderBot.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal)))) α (fun (x : α) => supᵢ.{0, 0} ENNReal (ConditionallyCompleteLattice.toSupSet.{0} ENNReal (ConditionallyCompleteLinearOrder.toConditionallyCompleteLattice.{0} ENNReal (ConditionallyCompleteLinearOrderBot.toConditionallyCompleteLinearOrder.{0} ENNReal (CompleteLinearOrder.toConditionallyCompleteLinearOrderBot.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal)))) (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) (fun (H : Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) => EMetric.infEdist.{u1} α _inst_1 x t))) (supᵢ.{0, succ u1} ENNReal (ConditionallyCompleteLattice.toSupSet.{0} ENNReal (ConditionallyCompleteLinearOrder.toConditionallyCompleteLattice.{0} ENNReal (ConditionallyCompleteLinearOrderBot.toConditionallyCompleteLinearOrder.{0} ENNReal (CompleteLinearOrder.toConditionallyCompleteLinearOrderBot.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal)))) α (fun (y : α) => supᵢ.{0, 0} ENNReal (ConditionallyCompleteLattice.toSupSet.{0} ENNReal (ConditionallyCompleteLinearOrder.toConditionallyCompleteLattice.{0} ENNReal (ConditionallyCompleteLinearOrderBot.toConditionallyCompleteLinearOrder.{0} ENNReal (CompleteLinearOrder.toConditionallyCompleteLinearOrderBot.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal)))) (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y t) (fun (H : Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y t) => EMetric.infEdist.{u1} α _inst_1 y s))))
+Case conversion may be inaccurate. Consider using '#align emetric.Hausdorff_edist_def EMetric.hausdorffEdist_defₓ'. -/
theorem hausdorffEdist_def {α : Type u} [PseudoEMetricSpace α] (s t : Set α) :
hausdorffEdist s t = (⨆ x ∈ s, infEdist x t) ⊔ ⨆ y ∈ t, infEdist y s := by rw [Hausdorff_edist]
-#align emetric.Hausdorff_edist_def Emetric.hausdorffEdist_def
+#align emetric.Hausdorff_edist_def EMetric.hausdorffEdist_def
section HausdorffEdist
variable [PseudoEMetricSpace α] [PseudoEMetricSpace β] {x y : α} {s t u : Set α} {Φ : α → β}
+/- warning: emetric.Hausdorff_edist_self -> EMetric.hausdorffEdist_self is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α}, Eq.{1} ENNReal (EMetric.hausdorffEdist.{u1} α _inst_1 s s) (OfNat.ofNat.{0} ENNReal 0 (OfNat.mk.{0} ENNReal 0 (Zero.zero.{0} ENNReal ENNReal.hasZero)))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α}, Eq.{1} ENNReal (EMetric.hausdorffEdist.{u1} α _inst_1 s s) (OfNat.ofNat.{0} ENNReal 0 (Zero.toOfNat0.{0} ENNReal instENNRealZero))
+Case conversion may be inaccurate. Consider using '#align emetric.Hausdorff_edist_self EMetric.hausdorffEdist_selfₓ'. -/
/-- The Hausdorff edistance of a set to itself vanishes -/
@[simp]
theorem hausdorffEdist_self : hausdorffEdist s s = 0 :=
by
simp only [Hausdorff_edist_def, sup_idem, ENNReal.supᵢ_eq_zero]
exact fun x hx => inf_edist_zero_of_mem hx
-#align emetric.Hausdorff_edist_self Emetric.hausdorffEdist_self
+#align emetric.Hausdorff_edist_self EMetric.hausdorffEdist_self
+#print EMetric.hausdorffEdist_comm /-
/-- The Haudorff edistances of `s` to `t` and of `t` to `s` coincide -/
theorem hausdorffEdist_comm : hausdorffEdist s t = hausdorffEdist t s := by
unfold Hausdorff_edist <;> apply sup_comm
-#align emetric.Hausdorff_edist_comm Emetric.hausdorffEdist_comm
+#align emetric.Hausdorff_edist_comm EMetric.hausdorffEdist_comm
+-/
+/- warning: emetric.Hausdorff_edist_le_of_inf_edist -> EMetric.hausdorffEdist_le_of_infEdist is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α} {r : ENNReal}, (forall (x : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) -> (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.infEdist.{u1} α _inst_1 x t) r)) -> (forall (x : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x t) -> (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.infEdist.{u1} α _inst_1 x s) r)) -> (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.hausdorffEdist.{u1} α _inst_1 s t) r)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α} {r : ENNReal}, (forall (x : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) -> (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.infEdist.{u1} α _inst_1 x t) r)) -> (forall (x : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x t) -> (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.infEdist.{u1} α _inst_1 x s) r)) -> (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.hausdorffEdist.{u1} α _inst_1 s t) r)
+Case conversion may be inaccurate. Consider using '#align emetric.Hausdorff_edist_le_of_inf_edist EMetric.hausdorffEdist_le_of_infEdistₓ'. -/
/-- Bounding the Hausdorff edistance by bounding the edistance of any point
in each set to the other set -/
theorem hausdorffEdist_le_of_infEdist {r : ℝ≥0∞} (H1 : ∀ x ∈ s, infEdist x t ≤ r)
@@ -297,8 +449,14 @@ theorem hausdorffEdist_le_of_infEdist {r : ℝ≥0∞} (H1 : ∀ x ∈ s, infEdi
by
simp only [Hausdorff_edist, sup_le_iff, supᵢ_le_iff]
exact ⟨H1, H2⟩
-#align emetric.Hausdorff_edist_le_of_inf_edist Emetric.hausdorffEdist_le_of_infEdist
-
+#align emetric.Hausdorff_edist_le_of_inf_edist EMetric.hausdorffEdist_le_of_infEdist
+
+/- warning: emetric.Hausdorff_edist_le_of_mem_edist -> EMetric.hausdorffEdist_le_of_mem_edist is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α} {r : ENNReal}, (forall (x : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) -> (Exists.{succ u1} α (fun (y : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y t) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y t) => LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EDist.edist.{u1} α (PseudoEMetricSpace.toHasEdist.{u1} α _inst_1) x y) r)))) -> (forall (x : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x t) -> (Exists.{succ u1} α (fun (y : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) => LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EDist.edist.{u1} α (PseudoEMetricSpace.toHasEdist.{u1} α _inst_1) x y) r)))) -> (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.hausdorffEdist.{u1} α _inst_1 s t) r)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α} {r : ENNReal}, (forall (x : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) -> (Exists.{succ u1} α (fun (y : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y t) (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EDist.edist.{u1} α (PseudoEMetricSpace.toEDist.{u1} α _inst_1) x y) r)))) -> (forall (x : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x t) -> (Exists.{succ u1} α (fun (y : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y s) (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EDist.edist.{u1} α (PseudoEMetricSpace.toEDist.{u1} α _inst_1) x y) r)))) -> (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.hausdorffEdist.{u1} α _inst_1 s t) r)
+Case conversion may be inaccurate. Consider using '#align emetric.Hausdorff_edist_le_of_mem_edist EMetric.hausdorffEdist_le_of_mem_edistₓ'. -/
/-- Bounding the Hausdorff edistance by exhibiting, for any point in each set,
another point in the other set at controlled distance -/
theorem hausdorffEdist_le_of_mem_edist {r : ℝ≥0∞} (H1 : ∀ x ∈ s, ∃ y ∈ t, edist x y ≤ r)
@@ -311,16 +469,28 @@ theorem hausdorffEdist_le_of_mem_edist {r : ℝ≥0∞} (H1 : ∀ x ∈ s, ∃ y
· intro x xt
rcases H2 x xt with ⟨y, ys, hy⟩
exact le_trans (inf_edist_le_edist_of_mem ys) hy
-#align emetric.Hausdorff_edist_le_of_mem_edist Emetric.hausdorffEdist_le_of_mem_edist
-
+#align emetric.Hausdorff_edist_le_of_mem_edist EMetric.hausdorffEdist_le_of_mem_edist
+
+/- warning: emetric.inf_edist_le_Hausdorff_edist_of_mem -> EMetric.infEdist_le_hausdorffEdist_of_mem is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {s : Set.{u1} α} {t : Set.{u1} α}, (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) -> (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.infEdist.{u1} α _inst_1 x t) (EMetric.hausdorffEdist.{u1} α _inst_1 s t))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {s : Set.{u1} α} {t : Set.{u1} α}, (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) -> (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.infEdist.{u1} α _inst_1 x t) (EMetric.hausdorffEdist.{u1} α _inst_1 s t))
+Case conversion may be inaccurate. Consider using '#align emetric.inf_edist_le_Hausdorff_edist_of_mem EMetric.infEdist_le_hausdorffEdist_of_memₓ'. -/
/-- The distance to a set is controlled by the Hausdorff distance -/
theorem infEdist_le_hausdorffEdist_of_mem (h : x ∈ s) : infEdist x t ≤ hausdorffEdist s t :=
by
rw [Hausdorff_edist_def]
refine' le_trans _ le_sup_left
exact le_supᵢ₂ x h
-#align emetric.inf_edist_le_Hausdorff_edist_of_mem Emetric.infEdist_le_hausdorffEdist_of_mem
-
+#align emetric.inf_edist_le_Hausdorff_edist_of_mem EMetric.infEdist_le_hausdorffEdist_of_mem
+
+/- warning: emetric.exists_edist_lt_of_Hausdorff_edist_lt -> EMetric.exists_edist_lt_of_hausdorffEdist_lt is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {s : Set.{u1} α} {t : Set.{u1} α} {r : ENNReal}, (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) -> (LT.lt.{0} ENNReal (Preorder.toLT.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.hausdorffEdist.{u1} α _inst_1 s t) r) -> (Exists.{succ u1} α (fun (y : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y t) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y t) => LT.lt.{0} ENNReal (Preorder.toLT.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EDist.edist.{u1} α (PseudoEMetricSpace.toHasEdist.{u1} α _inst_1) x y) r)))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {s : Set.{u1} α} {t : Set.{u1} α} {r : ENNReal}, (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) -> (LT.lt.{0} ENNReal (Preorder.toLT.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.hausdorffEdist.{u1} α _inst_1 s t) r) -> (Exists.{succ u1} α (fun (y : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y t) (LT.lt.{0} ENNReal (Preorder.toLT.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EDist.edist.{u1} α (PseudoEMetricSpace.toEDist.{u1} α _inst_1) x y) r)))
+Case conversion may be inaccurate. Consider using '#align emetric.exists_edist_lt_of_Hausdorff_edist_lt EMetric.exists_edist_lt_of_hausdorffEdist_ltₓ'. -/
/-- If the Hausdorff distance is `<r`, then any point in one of the sets has
a corresponding point at distance `<r` in the other set -/
theorem exists_edist_lt_of_hausdorffEdist_lt {r : ℝ≥0∞} (h : x ∈ s) (H : hausdorffEdist s t < r) :
@@ -330,8 +500,14 @@ theorem exists_edist_lt_of_hausdorffEdist_lt {r : ℝ≥0∞} (h : x ∈ s) (H :
infEdist x t ≤ hausdorffEdist s t := infEdist_le_hausdorffEdist_of_mem h
_ < r := H
-#align emetric.exists_edist_lt_of_Hausdorff_edist_lt Emetric.exists_edist_lt_of_hausdorffEdist_lt
-
+#align emetric.exists_edist_lt_of_Hausdorff_edist_lt EMetric.exists_edist_lt_of_hausdorffEdist_lt
+
+/- warning: emetric.inf_edist_le_inf_edist_add_Hausdorff_edist -> EMetric.infEdist_le_infEdist_add_hausdorffEdist is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {s : Set.{u1} α} {t : Set.{u1} α}, LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.infEdist.{u1} α _inst_1 x t) (HAdd.hAdd.{0, 0, 0} ENNReal ENNReal ENNReal (instHAdd.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring)))))))) (EMetric.infEdist.{u1} α _inst_1 x s) (EMetric.hausdorffEdist.{u1} α _inst_1 s t))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {x : α} {s : Set.{u1} α} {t : Set.{u1} α}, LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.infEdist.{u1} α _inst_1 x t) (HAdd.hAdd.{0, 0, 0} ENNReal ENNReal ENNReal (instHAdd.{0} ENNReal (Distrib.toAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal)))))))) (EMetric.infEdist.{u1} α _inst_1 x s) (EMetric.hausdorffEdist.{u1} α _inst_1 s t))
+Case conversion may be inaccurate. Consider using '#align emetric.inf_edist_le_inf_edist_add_Hausdorff_edist EMetric.infEdist_le_infEdist_add_hausdorffEdistₓ'. -/
/-- The distance from `x` to `s` or `t` is controlled in terms of the Hausdorff distance
between `s` and `t` -/
theorem infEdist_le_infEdist_add_hausdorffEdist :
@@ -354,14 +530,22 @@ theorem infEdist_le_infEdist_add_hausdorffEdist :
_ = inf_edist x s + Hausdorff_edist s t + ε := by
simp [ENNReal.add_halves, add_comm, add_left_comm]
-#align emetric.inf_edist_le_inf_edist_add_Hausdorff_edist Emetric.infEdist_le_infEdist_add_hausdorffEdist
+#align emetric.inf_edist_le_inf_edist_add_Hausdorff_edist EMetric.infEdist_le_infEdist_add_hausdorffEdist
+#print EMetric.hausdorffEdist_image /-
/-- The Hausdorff edistance is invariant under eisometries -/
theorem hausdorffEdist_image (h : Isometry Φ) :
hausdorffEdist (Φ '' s) (Φ '' t) = hausdorffEdist s t := by
simp only [Hausdorff_edist_def, supᵢ_image, inf_edist_image h]
-#align emetric.Hausdorff_edist_image Emetric.hausdorffEdist_image
+#align emetric.Hausdorff_edist_image EMetric.hausdorffEdist_image
+-/
+/- warning: emetric.Hausdorff_edist_le_ediam -> EMetric.hausdorffEdist_le_ediam is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (Set.Nonempty.{u1} α s) -> (Set.Nonempty.{u1} α t) -> (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.hausdorffEdist.{u1} α _inst_1 s t) (EMetric.diam.{u1} α _inst_1 (Union.union.{u1} (Set.{u1} α) (Set.hasUnion.{u1} α) s t)))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (Set.Nonempty.{u1} α s) -> (Set.Nonempty.{u1} α t) -> (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.hausdorffEdist.{u1} α _inst_1 s t) (EMetric.diam.{u1} α _inst_1 (Union.union.{u1} (Set.{u1} α) (Set.instUnionSet.{u1} α) s t)))
+Case conversion may be inaccurate. Consider using '#align emetric.Hausdorff_edist_le_ediam EMetric.hausdorffEdist_le_ediamₓ'. -/
/-- The Hausdorff distance is controlled by the diameter of the union -/
theorem hausdorffEdist_le_ediam (hs : s.Nonempty) (ht : t.Nonempty) :
hausdorffEdist s t ≤ diam (s ∪ t) :=
@@ -373,8 +557,14 @@ theorem hausdorffEdist_le_ediam (hs : s.Nonempty) (ht : t.Nonempty) :
exact ⟨y, yt, edist_le_diam_of_mem (subset_union_left _ _ hz) (subset_union_right _ _ yt)⟩
· intro z hz
exact ⟨x, xs, edist_le_diam_of_mem (subset_union_right _ _ hz) (subset_union_left _ _ xs)⟩
-#align emetric.Hausdorff_edist_le_ediam Emetric.hausdorffEdist_le_ediam
-
+#align emetric.Hausdorff_edist_le_ediam EMetric.hausdorffEdist_le_ediam
+
+/- warning: emetric.Hausdorff_edist_triangle -> EMetric.hausdorffEdist_triangle is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α} {u : Set.{u1} α}, LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.hausdorffEdist.{u1} α _inst_1 s u) (HAdd.hAdd.{0, 0, 0} ENNReal ENNReal ENNReal (instHAdd.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring)))))))) (EMetric.hausdorffEdist.{u1} α _inst_1 s t) (EMetric.hausdorffEdist.{u1} α _inst_1 t u))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α} {u : Set.{u1} α}, LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.hausdorffEdist.{u1} α _inst_1 s u) (HAdd.hAdd.{0, 0, 0} ENNReal ENNReal ENNReal (instHAdd.{0} ENNReal (Distrib.toAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal)))))))) (EMetric.hausdorffEdist.{u1} α _inst_1 s t) (EMetric.hausdorffEdist.{u1} α _inst_1 t u))
+Case conversion may be inaccurate. Consider using '#align emetric.Hausdorff_edist_triangle EMetric.hausdorffEdist_triangleₓ'. -/
/-- The Hausdorff distance satisfies the triangular inequality -/
theorem hausdorffEdist_triangle : hausdorffEdist s u ≤ hausdorffEdist s t + hausdorffEdist t u :=
by
@@ -398,8 +588,14 @@ theorem hausdorffEdist_triangle : hausdorffEdist s u ≤ hausdorffEdist s t + ha
(add_le_add_right (inf_edist_le_Hausdorff_edist_of_mem xu) _)
_ = Hausdorff_edist s t + Hausdorff_edist t u := by simp [Hausdorff_edist_comm, add_comm]
-#align emetric.Hausdorff_edist_triangle Emetric.hausdorffEdist_triangle
-
+#align emetric.Hausdorff_edist_triangle EMetric.hausdorffEdist_triangle
+
+/- warning: emetric.Hausdorff_edist_zero_iff_closure_eq_closure -> EMetric.hausdorffEdist_zero_iff_closure_eq_closure is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, Iff (Eq.{1} ENNReal (EMetric.hausdorffEdist.{u1} α _inst_1 s t) (OfNat.ofNat.{0} ENNReal 0 (OfNat.mk.{0} ENNReal 0 (Zero.zero.{0} ENNReal ENNReal.hasZero)))) (Eq.{succ u1} (Set.{u1} α) (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) s) (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) t))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, Iff (Eq.{1} ENNReal (EMetric.hausdorffEdist.{u1} α _inst_1 s t) (OfNat.ofNat.{0} ENNReal 0 (Zero.toOfNat0.{0} ENNReal instENNRealZero))) (Eq.{succ u1} (Set.{u1} α) (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) s) (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) t))
+Case conversion may be inaccurate. Consider using '#align emetric.Hausdorff_edist_zero_iff_closure_eq_closure EMetric.hausdorffEdist_zero_iff_closure_eq_closureₓ'. -/
/-- Two sets are at zero Hausdorff edistance if and only if they have the same closure -/
theorem hausdorffEdist_zero_iff_closure_eq_closure :
hausdorffEdist s t = 0 ↔ closure s = closure t :=
@@ -413,14 +609,21 @@ theorem hausdorffEdist_zero_iff_closure_eq_closure :
(closure_minimal h.2 isClosed_closure),
fun h => ⟨h ▸ subset_closure, h.symm ▸ subset_closure⟩⟩
-#align emetric.Hausdorff_edist_zero_iff_closure_eq_closure Emetric.hausdorffEdist_zero_iff_closure_eq_closure
-
+#align emetric.Hausdorff_edist_zero_iff_closure_eq_closure EMetric.hausdorffEdist_zero_iff_closure_eq_closure
+
+/- warning: emetric.Hausdorff_edist_self_closure -> EMetric.hausdorffEdist_self_closure is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α}, Eq.{1} ENNReal (EMetric.hausdorffEdist.{u1} α _inst_1 s (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) s)) (OfNat.ofNat.{0} ENNReal 0 (OfNat.mk.{0} ENNReal 0 (Zero.zero.{0} ENNReal ENNReal.hasZero)))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α}, Eq.{1} ENNReal (EMetric.hausdorffEdist.{u1} α _inst_1 s (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) s)) (OfNat.ofNat.{0} ENNReal 0 (Zero.toOfNat0.{0} ENNReal instENNRealZero))
+Case conversion may be inaccurate. Consider using '#align emetric.Hausdorff_edist_self_closure EMetric.hausdorffEdist_self_closureₓ'. -/
/-- The Hausdorff edistance between a set and its closure vanishes -/
@[simp]
theorem hausdorffEdist_self_closure : hausdorffEdist s (closure s) = 0 := by
rw [Hausdorff_edist_zero_iff_closure_eq_closure, closure_closure]
-#align emetric.Hausdorff_edist_self_closure Emetric.hausdorffEdist_self_closure
+#align emetric.Hausdorff_edist_self_closure EMetric.hausdorffEdist_self_closure
+#print EMetric.hausdorffEdist_closure₁ /-
/-- Replacing a set by its closure does not change the Hausdorff edistance. -/
@[simp]
theorem hausdorffEdist_closure₁ : hausdorffEdist (closure s) t = hausdorffEdist s t :=
@@ -436,40 +639,69 @@ theorem hausdorffEdist_closure₁ : hausdorffEdist (closure s) t = hausdorffEdis
_ ≤ Hausdorff_edist s (closure s) + Hausdorff_edist (closure s) t := Hausdorff_edist_triangle
_ = Hausdorff_edist (closure s) t := by simp
-#align emetric.Hausdorff_edist_closure₁ Emetric.hausdorffEdist_closure₁
+#align emetric.Hausdorff_edist_closure₁ EMetric.hausdorffEdist_closure₁
+-/
+#print EMetric.hausdorffEdist_closure₂ /-
/-- Replacing a set by its closure does not change the Hausdorff edistance. -/
@[simp]
theorem hausdorffEdist_closure₂ : hausdorffEdist s (closure t) = hausdorffEdist s t := by
simp [@Hausdorff_edist_comm _ _ s _]
-#align emetric.Hausdorff_edist_closure₂ Emetric.hausdorffEdist_closure₂
+#align emetric.Hausdorff_edist_closure₂ EMetric.hausdorffEdist_closure₂
+-/
+#print EMetric.hausdorffEdist_closure /-
/-- The Hausdorff edistance between sets or their closures is the same -/
@[simp]
theorem hausdorffEdist_closure : hausdorffEdist (closure s) (closure t) = hausdorffEdist s t := by
simp
-#align emetric.Hausdorff_edist_closure Emetric.hausdorffEdist_closure
+#align emetric.Hausdorff_edist_closure EMetric.hausdorffEdist_closure
+-/
+/- warning: emetric.Hausdorff_edist_zero_iff_eq_of_closed -> EMetric.hausdorffEdist_zero_iff_eq_of_closed is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (IsClosed.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) s) -> (IsClosed.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) t) -> (Iff (Eq.{1} ENNReal (EMetric.hausdorffEdist.{u1} α _inst_1 s t) (OfNat.ofNat.{0} ENNReal 0 (OfNat.mk.{0} ENNReal 0 (Zero.zero.{0} ENNReal ENNReal.hasZero)))) (Eq.{succ u1} (Set.{u1} α) s t))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (IsClosed.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) s) -> (IsClosed.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) t) -> (Iff (Eq.{1} ENNReal (EMetric.hausdorffEdist.{u1} α _inst_1 s t) (OfNat.ofNat.{0} ENNReal 0 (Zero.toOfNat0.{0} ENNReal instENNRealZero))) (Eq.{succ u1} (Set.{u1} α) s t))
+Case conversion may be inaccurate. Consider using '#align emetric.Hausdorff_edist_zero_iff_eq_of_closed EMetric.hausdorffEdist_zero_iff_eq_of_closedₓ'. -/
/-- Two closed sets are at zero Hausdorff edistance if and only if they coincide -/
theorem hausdorffEdist_zero_iff_eq_of_closed (hs : IsClosed s) (ht : IsClosed t) :
hausdorffEdist s t = 0 ↔ s = t := by
rw [Hausdorff_edist_zero_iff_closure_eq_closure, hs.closure_eq, ht.closure_eq]
-#align emetric.Hausdorff_edist_zero_iff_eq_of_closed Emetric.hausdorffEdist_zero_iff_eq_of_closed
-
+#align emetric.Hausdorff_edist_zero_iff_eq_of_closed EMetric.hausdorffEdist_zero_iff_eq_of_closed
+
+/- warning: emetric.Hausdorff_edist_empty -> EMetric.hausdorffEdist_empty is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α}, (Set.Nonempty.{u1} α s) -> (Eq.{1} ENNReal (EMetric.hausdorffEdist.{u1} α _inst_1 s (EmptyCollection.emptyCollection.{u1} (Set.{u1} α) (Set.hasEmptyc.{u1} α))) (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α}, (Set.Nonempty.{u1} α s) -> (Eq.{1} ENNReal (EMetric.hausdorffEdist.{u1} α _inst_1 s (EmptyCollection.emptyCollection.{u1} (Set.{u1} α) (Set.instEmptyCollectionSet.{u1} α))) (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))
+Case conversion may be inaccurate. Consider using '#align emetric.Hausdorff_edist_empty EMetric.hausdorffEdist_emptyₓ'. -/
/-- The Haudorff edistance to the empty set is infinite -/
theorem hausdorffEdist_empty (ne : s.Nonempty) : hausdorffEdist s ∅ = ∞ :=
by
rcases Ne with ⟨x, xs⟩
have : inf_edist x ∅ ≤ Hausdorff_edist s ∅ := inf_edist_le_Hausdorff_edist_of_mem xs
simpa using this
-#align emetric.Hausdorff_edist_empty Emetric.hausdorffEdist_empty
-
+#align emetric.Hausdorff_edist_empty EMetric.hausdorffEdist_empty
+
+/- warning: emetric.nonempty_of_Hausdorff_edist_ne_top -> EMetric.nonempty_of_hausdorffEdist_ne_top is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (Set.Nonempty.{u1} α s) -> (Ne.{1} ENNReal (EMetric.hausdorffEdist.{u1} α _inst_1 s t) (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder)))) -> (Set.Nonempty.{u1} α t)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (Set.Nonempty.{u1} α s) -> (Ne.{1} ENNReal (EMetric.hausdorffEdist.{u1} α _inst_1 s t) (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal)))) -> (Set.Nonempty.{u1} α t)
+Case conversion may be inaccurate. Consider using '#align emetric.nonempty_of_Hausdorff_edist_ne_top EMetric.nonempty_of_hausdorffEdist_ne_topₓ'. -/
/-- If a set is at finite Hausdorff edistance of a nonempty set, it is nonempty -/
theorem nonempty_of_hausdorffEdist_ne_top (hs : s.Nonempty) (fin : hausdorffEdist s t ≠ ⊤) :
t.Nonempty :=
t.eq_empty_or_nonempty.elim (fun ht => (Fin <| ht.symm ▸ hausdorffEdist_empty hs).elim) id
-#align emetric.nonempty_of_Hausdorff_edist_ne_top Emetric.nonempty_of_hausdorffEdist_ne_top
-
+#align emetric.nonempty_of_Hausdorff_edist_ne_top EMetric.nonempty_of_hausdorffEdist_ne_top
+
+/- warning: emetric.empty_or_nonempty_of_Hausdorff_edist_ne_top -> EMetric.empty_or_nonempty_of_hausdorffEdist_ne_top is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (Ne.{1} ENNReal (EMetric.hausdorffEdist.{u1} α _inst_1 s t) (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder)))) -> (Or (And (Eq.{succ u1} (Set.{u1} α) s (EmptyCollection.emptyCollection.{u1} (Set.{u1} α) (Set.hasEmptyc.{u1} α))) (Eq.{succ u1} (Set.{u1} α) t (EmptyCollection.emptyCollection.{u1} (Set.{u1} α) (Set.hasEmptyc.{u1} α)))) (And (Set.Nonempty.{u1} α s) (Set.Nonempty.{u1} α t)))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (Ne.{1} ENNReal (EMetric.hausdorffEdist.{u1} α _inst_1 s t) (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal)))) -> (Or (And (Eq.{succ u1} (Set.{u1} α) s (EmptyCollection.emptyCollection.{u1} (Set.{u1} α) (Set.instEmptyCollectionSet.{u1} α))) (Eq.{succ u1} (Set.{u1} α) t (EmptyCollection.emptyCollection.{u1} (Set.{u1} α) (Set.instEmptyCollectionSet.{u1} α)))) (And (Set.Nonempty.{u1} α s) (Set.Nonempty.{u1} α t)))
+Case conversion may be inaccurate. Consider using '#align emetric.empty_or_nonempty_of_Hausdorff_edist_ne_top EMetric.empty_or_nonempty_of_hausdorffEdist_ne_topₓ'. -/
theorem empty_or_nonempty_of_hausdorffEdist_ne_top (fin : hausdorffEdist s t ≠ ⊤) :
s = ∅ ∧ t = ∅ ∨ s.Nonempty ∧ t.Nonempty :=
by
@@ -479,7 +711,7 @@ theorem empty_or_nonempty_of_hausdorffEdist_ne_top (fin : hausdorffEdist s t ≠
· rw [Hausdorff_edist_comm] at fin
exact Or.inr ⟨nonempty_of_Hausdorff_edist_ne_top ht Fin, ht⟩
· exact Or.inr ⟨hs, nonempty_of_Hausdorff_edist_ne_top hs Fin⟩
-#align emetric.empty_or_nonempty_of_Hausdorff_edist_ne_top Emetric.empty_or_nonempty_of_hausdorffEdist_ne_top
+#align emetric.empty_or_nonempty_of_Hausdorff_edist_ne_top EMetric.empty_or_nonempty_of_hausdorffEdist_ne_top
end HausdorffEdist
@@ -505,21 +737,41 @@ open Emetric
/-! ### Distance of a point to a set as a function into `ℝ`. -/
+#print Metric.infDist /-
/-- The minimal distance of a point to a set -/
def infDist (x : α) (s : Set α) : ℝ :=
ENNReal.toReal (infEdist x s)
#align metric.inf_dist Metric.infDist
+-/
+/- warning: metric.inf_dist_nonneg -> Metric.infDist_nonneg is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α}, LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) (Metric.infDist.{u1} α _inst_1 x s)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α}, LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) (Metric.infDist.{u1} α _inst_1 x s)
+Case conversion may be inaccurate. Consider using '#align metric.inf_dist_nonneg Metric.infDist_nonnegₓ'. -/
/-- the minimal distance is always nonnegative -/
theorem infDist_nonneg : 0 ≤ infDist x s := by simp [inf_dist]
#align metric.inf_dist_nonneg Metric.infDist_nonneg
+/- warning: metric.inf_dist_empty -> Metric.infDist_empty is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {x : α}, Eq.{1} Real (Metric.infDist.{u1} α _inst_1 x (EmptyCollection.emptyCollection.{u1} (Set.{u1} α) (Set.hasEmptyc.{u1} α))) (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {x : α}, Eq.{1} Real (Metric.infDist.{u1} α _inst_1 x (EmptyCollection.emptyCollection.{u1} (Set.{u1} α) (Set.instEmptyCollectionSet.{u1} α))) (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))
+Case conversion may be inaccurate. Consider using '#align metric.inf_dist_empty Metric.infDist_emptyₓ'. -/
/-- the minimal distance to the empty set is 0 (if you want to have the more reasonable
value ∞ instead, use `inf_edist`, which takes values in ℝ≥0∞) -/
@[simp]
theorem infDist_empty : infDist x ∅ = 0 := by simp [inf_dist]
#align metric.inf_dist_empty Metric.infDist_empty
+/- warning: metric.inf_edist_ne_top -> Metric.infEdist_ne_top is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α}, (Set.Nonempty.{u1} α s) -> (Ne.{1} ENNReal (EMetric.infEdist.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) x s) (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α}, (Set.Nonempty.{u1} α s) -> (Ne.{1} ENNReal (EMetric.infEdist.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) x s) (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))
+Case conversion may be inaccurate. Consider using '#align metric.inf_edist_ne_top Metric.infEdist_ne_topₓ'. -/
/-- In a metric space, the minimal edistance to a nonempty set is finite -/
theorem infEdist_ne_top (h : s.Nonempty) : infEdist x s ≠ ⊤ :=
by
@@ -531,16 +783,30 @@ theorem infEdist_ne_top (h : s.Nonempty) : infEdist x s ≠ ⊤ :=
#align metric.inf_edist_ne_top Metric.infEdist_ne_top
+/- warning: metric.inf_dist_zero_of_mem -> Metric.infDist_zero_of_mem is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α}, (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) -> (Eq.{1} Real (Metric.infDist.{u1} α _inst_1 x s) (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α}, (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) -> (Eq.{1} Real (Metric.infDist.{u1} α _inst_1 x s) (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))
+Case conversion may be inaccurate. Consider using '#align metric.inf_dist_zero_of_mem Metric.infDist_zero_of_memₓ'. -/
/-- The minimal distance of a point to a set containing it vanishes -/
theorem infDist_zero_of_mem (h : x ∈ s) : infDist x s = 0 := by
simp [inf_edist_zero_of_mem h, inf_dist]
#align metric.inf_dist_zero_of_mem Metric.infDist_zero_of_mem
+#print Metric.infDist_singleton /-
/-- The minimal distance to a singleton is the distance to the unique point in this singleton -/
@[simp]
theorem infDist_singleton : infDist x {y} = dist x y := by simp [inf_dist, inf_edist, dist_edist]
#align metric.inf_dist_singleton Metric.infDist_singleton
+-/
+/- warning: metric.inf_dist_le_dist_of_mem -> Metric.infDist_le_dist_of_mem is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α} {y : α}, (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) -> (LE.le.{0} Real Real.hasLe (Metric.infDist.{u1} α _inst_1 x s) (Dist.dist.{u1} α (PseudoMetricSpace.toHasDist.{u1} α _inst_1) x y))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α} {y : α}, (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y s) -> (LE.le.{0} Real Real.instLEReal (Metric.infDist.{u1} α _inst_1 x s) (Dist.dist.{u1} α (PseudoMetricSpace.toDist.{u1} α _inst_1) x y))
+Case conversion may be inaccurate. Consider using '#align metric.inf_dist_le_dist_of_mem Metric.infDist_le_dist_of_memₓ'. -/
/-- The minimal distance to a set is bounded by the distance to any point in this set -/
theorem infDist_le_dist_of_mem (h : y ∈ s) : infDist x s ≤ dist x y :=
by
@@ -548,6 +814,12 @@ theorem infDist_le_dist_of_mem (h : y ∈ s) : infDist x s ≤ dist x y :=
exact inf_edist_le_edist_of_mem h
#align metric.inf_dist_le_dist_of_mem Metric.infDist_le_dist_of_mem
+/- warning: metric.inf_dist_le_inf_dist_of_subset -> Metric.infDist_le_infDist_of_subset is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α} {x : α}, (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) s t) -> (Set.Nonempty.{u1} α s) -> (LE.le.{0} Real Real.hasLe (Metric.infDist.{u1} α _inst_1 x t) (Metric.infDist.{u1} α _inst_1 x s))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α} {x : α}, (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) s t) -> (Set.Nonempty.{u1} α s) -> (LE.le.{0} Real Real.instLEReal (Metric.infDist.{u1} α _inst_1 x t) (Metric.infDist.{u1} α _inst_1 x s))
+Case conversion may be inaccurate. Consider using '#align metric.inf_dist_le_inf_dist_of_subset Metric.infDist_le_infDist_of_subsetₓ'. -/
/-- The minimal distance is monotonous with respect to inclusion -/
theorem infDist_le_infDist_of_subset (h : s ⊆ t) (hs : s.Nonempty) : infDist x t ≤ infDist x s :=
by
@@ -556,12 +828,24 @@ theorem infDist_le_infDist_of_subset (h : s ⊆ t) (hs : s.Nonempty) : infDist x
exact inf_edist_anti h
#align metric.inf_dist_le_inf_dist_of_subset Metric.infDist_le_infDist_of_subset
+/- warning: metric.inf_dist_lt_iff -> Metric.infDist_lt_iff is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α} {r : Real}, (Set.Nonempty.{u1} α s) -> (Iff (LT.lt.{0} Real Real.hasLt (Metric.infDist.{u1} α _inst_1 x s) r) (Exists.{succ u1} α (fun (y : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) => LT.lt.{0} Real Real.hasLt (Dist.dist.{u1} α (PseudoMetricSpace.toHasDist.{u1} α _inst_1) x y) r))))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α} {r : Real}, (Set.Nonempty.{u1} α s) -> (Iff (LT.lt.{0} Real Real.instLTReal (Metric.infDist.{u1} α _inst_1 x s) r) (Exists.{succ u1} α (fun (y : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y s) (LT.lt.{0} Real Real.instLTReal (Dist.dist.{u1} α (PseudoMetricSpace.toDist.{u1} α _inst_1) x y) r))))
+Case conversion may be inaccurate. Consider using '#align metric.inf_dist_lt_iff Metric.infDist_lt_iffₓ'. -/
/-- The minimal distance to a set is `< r` iff there exists a point in this set at distance `< r` -/
theorem infDist_lt_iff {r : ℝ} (hs : s.Nonempty) : infDist x s < r ↔ ∃ y ∈ s, dist x y < r := by
simp_rw [inf_dist, ← ENNReal.lt_ofReal_iff_toReal_lt (inf_edist_ne_top hs), inf_edist_lt_iff,
ENNReal.lt_ofReal_iff_toReal_lt (edist_ne_top _ _), ← dist_edist]
#align metric.inf_dist_lt_iff Metric.infDist_lt_iff
+/- warning: metric.inf_dist_le_inf_dist_add_dist -> Metric.infDist_le_infDist_add_dist is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α} {y : α}, LE.le.{0} Real Real.hasLe (Metric.infDist.{u1} α _inst_1 x s) (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.hasAdd) (Metric.infDist.{u1} α _inst_1 y s) (Dist.dist.{u1} α (PseudoMetricSpace.toHasDist.{u1} α _inst_1) x y))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α} {y : α}, LE.le.{0} Real Real.instLEReal (Metric.infDist.{u1} α _inst_1 x s) (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.instAddReal) (Metric.infDist.{u1} α _inst_1 y s) (Dist.dist.{u1} α (PseudoMetricSpace.toDist.{u1} α _inst_1) x y))
+Case conversion may be inaccurate. Consider using '#align metric.inf_dist_le_inf_dist_add_dist Metric.infDist_le_infDist_add_distₓ'. -/
/-- The minimal distance from `x` to `s` is bounded by the distance from `y` to `s`, modulo
the distance between `x` and `y` -/
theorem infDist_le_infDist_add_dist : infDist x s ≤ infDist y s + dist x y :=
@@ -575,10 +859,22 @@ theorem infDist_le_infDist_add_dist : infDist x s ≤ infDist y s + dist x y :=
· simp [ENNReal.add_eq_top, inf_edist_ne_top hs, edist_ne_top]
#align metric.inf_dist_le_inf_dist_add_dist Metric.infDist_le_infDist_add_dist
+/- warning: metric.not_mem_of_dist_lt_inf_dist -> Metric.not_mem_of_dist_lt_infDist is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α} {y : α}, (LT.lt.{0} Real Real.hasLt (Dist.dist.{u1} α (PseudoMetricSpace.toHasDist.{u1} α _inst_1) x y) (Metric.infDist.{u1} α _inst_1 x s)) -> (Not (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α} {y : α}, (LT.lt.{0} Real Real.instLTReal (Dist.dist.{u1} α (PseudoMetricSpace.toDist.{u1} α _inst_1) x y) (Metric.infDist.{u1} α _inst_1 x s)) -> (Not (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y s))
+Case conversion may be inaccurate. Consider using '#align metric.not_mem_of_dist_lt_inf_dist Metric.not_mem_of_dist_lt_infDistₓ'. -/
theorem not_mem_of_dist_lt_infDist (h : dist x y < infDist x s) : y ∉ s := fun hy =>
h.not_le <| infDist_le_dist_of_mem hy
#align metric.not_mem_of_dist_lt_inf_dist Metric.not_mem_of_dist_lt_infDist
+/- warning: metric.disjoint_ball_inf_dist -> Metric.disjoint_ball_infDist is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α}, Disjoint.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} (Set.{u1} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α))) (Metric.ball.{u1} α _inst_1 x (Metric.infDist.{u1} α _inst_1 x s)) s
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α}, Disjoint.{u1} (Set.{u1} α) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) (BoundedOrder.toOrderBot.{u1} (Set.{u1} α) (Preorder.toLE.{u1} (Set.{u1} α) (PartialOrder.toPreorder.{u1} (Set.{u1} α) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))))) (CompleteLattice.toBoundedOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) (Metric.ball.{u1} α _inst_1 x (Metric.infDist.{u1} α _inst_1 x s)) s
+Case conversion may be inaccurate. Consider using '#align metric.disjoint_ball_inf_dist Metric.disjoint_ball_infDistₓ'. -/
theorem disjoint_ball_infDist : Disjoint (ball x (infDist x s)) s :=
disjoint_left.2 fun y hy =>
not_mem_of_dist_lt_infDist <|
@@ -588,19 +884,39 @@ theorem disjoint_ball_infDist : Disjoint (ball x (infDist x s)) s :=
#align metric.disjoint_ball_inf_dist Metric.disjoint_ball_infDist
+/- warning: metric.ball_inf_dist_subset_compl -> Metric.ball_infDist_subset_compl is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α}, HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) (Metric.ball.{u1} α _inst_1 x (Metric.infDist.{u1} α _inst_1 x s)) (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)) s)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α}, HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) (Metric.ball.{u1} α _inst_1 x (Metric.infDist.{u1} α _inst_1 x s)) (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.instBooleanAlgebraSet.{u1} α)) s)
+Case conversion may be inaccurate. Consider using '#align metric.ball_inf_dist_subset_compl Metric.ball_infDist_subset_complₓ'. -/
theorem ball_infDist_subset_compl : ball x (infDist x s) ⊆ sᶜ :=
disjoint_ball_infDist.subset_compl_right
#align metric.ball_inf_dist_subset_compl Metric.ball_infDist_subset_compl
+#print Metric.ball_infDist_compl_subset /-
theorem ball_infDist_compl_subset : ball x (infDist x (sᶜ)) ⊆ s :=
ball_infDist_subset_compl.trans (compl_compl s).Subset
#align metric.ball_inf_dist_compl_subset Metric.ball_infDist_compl_subset
+-/
+/- warning: metric.disjoint_closed_ball_of_lt_inf_dist -> Metric.disjoint_closedBall_of_lt_infDist is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α} {r : Real}, (LT.lt.{0} Real Real.hasLt r (Metric.infDist.{u1} α _inst_1 x s)) -> (Disjoint.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} (Set.{u1} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α))) (Metric.closedBall.{u1} α _inst_1 x r) s)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α} {r : Real}, (LT.lt.{0} Real Real.instLTReal r (Metric.infDist.{u1} α _inst_1 x s)) -> (Disjoint.{u1} (Set.{u1} α) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) (BoundedOrder.toOrderBot.{u1} (Set.{u1} α) (Preorder.toLE.{u1} (Set.{u1} α) (PartialOrder.toPreorder.{u1} (Set.{u1} α) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))))) (CompleteLattice.toBoundedOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) (Metric.closedBall.{u1} α _inst_1 x r) s)
+Case conversion may be inaccurate. Consider using '#align metric.disjoint_closed_ball_of_lt_inf_dist Metric.disjoint_closedBall_of_lt_infDistₓ'. -/
theorem disjoint_closedBall_of_lt_infDist {r : ℝ} (h : r < infDist x s) :
Disjoint (closedBall x r) s :=
disjoint_ball_infDist.mono_left <| closedBall_subset_ball h
#align metric.disjoint_closed_ball_of_lt_inf_dist Metric.disjoint_closedBall_of_lt_infDist
+/- warning: metric.dist_le_inf_dist_add_diam -> Metric.dist_le_infDist_add_diam is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α} {y : α}, (Metric.Bounded.{u1} α _inst_1 s) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) -> (LE.le.{0} Real Real.hasLe (Dist.dist.{u1} α (PseudoMetricSpace.toHasDist.{u1} α _inst_1) x y) (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.hasAdd) (Metric.infDist.{u1} α _inst_1 x s) (Metric.diam.{u1} α _inst_1 s)))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α} {y : α}, (Metric.Bounded.{u1} α _inst_1 s) -> (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y s) -> (LE.le.{0} Real Real.instLEReal (Dist.dist.{u1} α (PseudoMetricSpace.toDist.{u1} α _inst_1) x y) (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.instAddReal) (Metric.infDist.{u1} α _inst_1 x s) (Metric.diam.{u1} α _inst_1 s)))
+Case conversion may be inaccurate. Consider using '#align metric.dist_le_inf_dist_add_diam Metric.dist_le_infDist_add_diamₓ'. -/
theorem dist_le_infDist_add_diam (hs : Bounded s) (hy : y ∈ s) : dist x y ≤ infDist x s + diam s :=
by
have A : inf_edist x s ≠ ∞ := inf_edist_ne_top ⟨y, hy⟩
@@ -615,29 +931,43 @@ theorem dist_le_infDist_add_diam (hs : Bounded s) (hy : y ∈ s) : dist x y ≤
variable (s)
+#print Metric.lipschitz_infDist_pt /-
/-- The minimal distance to a set is Lipschitz in point with constant 1 -/
theorem lipschitz_infDist_pt : LipschitzWith 1 fun x => infDist x s :=
LipschitzWith.of_le_add fun x y => infDist_le_infDist_add_dist
#align metric.lipschitz_inf_dist_pt Metric.lipschitz_infDist_pt
+-/
+#print Metric.uniformContinuous_infDist_pt /-
/-- The minimal distance to a set is uniformly continuous in point -/
theorem uniformContinuous_infDist_pt : UniformContinuous fun x => infDist x s :=
(lipschitz_infDist_pt s).UniformContinuous
#align metric.uniform_continuous_inf_dist_pt Metric.uniformContinuous_infDist_pt
+-/
+#print Metric.continuous_infDist_pt /-
/-- The minimal distance to a set is continuous in point -/
@[continuity]
theorem continuous_infDist_pt : Continuous fun x => infDist x s :=
(uniformContinuous_infDist_pt s).Continuous
#align metric.continuous_inf_dist_pt Metric.continuous_infDist_pt
+-/
variable {s}
+#print Metric.infDist_closure /-
/-- The minimal distance to a set and its closure coincide -/
-theorem infDist_eq_closure : infDist x (closure s) = infDist x s := by
+theorem infDist_closure : infDist x (closure s) = infDist x s := by
simp [inf_dist, inf_edist_closure]
-#align metric.inf_dist_eq_closure Metric.infDist_eq_closure
+#align metric.inf_dist_eq_closure Metric.infDist_closure
+-/
+/- warning: metric.inf_dist_zero_of_mem_closure -> Metric.infDist_zero_of_mem_closure is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α}, (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1)) s)) -> (Eq.{1} Real (Metric.infDist.{u1} α _inst_1 x s) (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α}, (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1)) s)) -> (Eq.{1} Real (Metric.infDist.{u1} α _inst_1 x s) (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))
+Case conversion may be inaccurate. Consider using '#align metric.inf_dist_zero_of_mem_closure Metric.infDist_zero_of_mem_closureₓ'. -/
/-- If a point belongs to the closure of `s`, then its infimum distance to `s` equals zero.
The converse is true provided that `s` is nonempty, see `mem_closure_iff_inf_dist_zero`. -/
theorem infDist_zero_of_mem_closure (hx : x ∈ closure s) : infDist x s = 0 :=
@@ -646,16 +976,34 @@ theorem infDist_zero_of_mem_closure (hx : x ∈ closure s) : infDist x s = 0 :=
exact inf_dist_zero_of_mem hx
#align metric.inf_dist_zero_of_mem_closure Metric.infDist_zero_of_mem_closure
+/- warning: metric.mem_closure_iff_inf_dist_zero -> Metric.mem_closure_iff_infDist_zero is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α}, (Set.Nonempty.{u1} α s) -> (Iff (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1)) s)) (Eq.{1} Real (Metric.infDist.{u1} α _inst_1 x s) (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α}, (Set.Nonempty.{u1} α s) -> (Iff (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1)) s)) (Eq.{1} Real (Metric.infDist.{u1} α _inst_1 x s) (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))))
+Case conversion may be inaccurate. Consider using '#align metric.mem_closure_iff_inf_dist_zero Metric.mem_closure_iff_infDist_zeroₓ'. -/
/-- A point belongs to the closure of `s` iff its infimum distance to this set vanishes -/
theorem mem_closure_iff_infDist_zero (h : s.Nonempty) : x ∈ closure s ↔ infDist x s = 0 := by
simp [mem_closure_iff_inf_edist_zero, inf_dist, ENNReal.toReal_eq_zero_iff, inf_edist_ne_top h]
#align metric.mem_closure_iff_inf_dist_zero Metric.mem_closure_iff_infDist_zero
+/- warning: is_closed.mem_iff_inf_dist_zero -> IsClosed.mem_iff_infDist_zero is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α}, (IsClosed.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1)) s) -> (Set.Nonempty.{u1} α s) -> (Iff (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) (Eq.{1} Real (Metric.infDist.{u1} α _inst_1 x s) (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α}, (IsClosed.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1)) s) -> (Set.Nonempty.{u1} α s) -> (Iff (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) (Eq.{1} Real (Metric.infDist.{u1} α _inst_1 x s) (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))))
+Case conversion may be inaccurate. Consider using '#align is_closed.mem_iff_inf_dist_zero IsClosed.mem_iff_infDist_zeroₓ'. -/
/-- Given a closed set `s`, a point belongs to `s` iff its infimum distance to this set vanishes -/
theorem IsClosed.mem_iff_infDist_zero (h : IsClosed s) (hs : s.Nonempty) :
x ∈ s ↔ infDist x s = 0 := by rw [← mem_closure_iff_inf_dist_zero hs, h.closure_eq]
#align is_closed.mem_iff_inf_dist_zero IsClosed.mem_iff_infDist_zero
+/- warning: is_closed.not_mem_iff_inf_dist_pos -> IsClosed.not_mem_iff_infDist_pos is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α}, (IsClosed.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1)) s) -> (Set.Nonempty.{u1} α s) -> (Iff (Not (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s)) (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) (Metric.infDist.{u1} α _inst_1 x s)))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α}, (IsClosed.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1)) s) -> (Set.Nonempty.{u1} α s) -> (Iff (Not (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s)) (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) (Metric.infDist.{u1} α _inst_1 x s)))
+Case conversion may be inaccurate. Consider using '#align is_closed.not_mem_iff_inf_dist_pos IsClosed.not_mem_iff_infDist_posₓ'. -/
/-- Given a closed set `s`, a point belongs to `s` iff its infimum distance to this set vanishes -/
theorem IsClosed.not_mem_iff_infDist_pos (h : IsClosed s) (hs : s.Nonempty) :
x ∉ s ↔ 0 < infDist x s := by
@@ -664,11 +1012,14 @@ theorem IsClosed.not_mem_iff_infDist_pos (h : IsClosed s) (hs : s.Nonempty) :
simp [h.mem_iff_inf_dist_zero hs, le_antisymm_iff, inf_dist_nonneg]
#align is_closed.not_mem_iff_inf_dist_pos IsClosed.not_mem_iff_infDist_pos
+#print Metric.infDist_image /-
/-- The infimum distance is invariant under isometries -/
theorem infDist_image (hΦ : Isometry Φ) : infDist (Φ x) (Φ '' t) = infDist x t := by
simp [inf_dist, inf_edist_image hΦ]
#align metric.inf_dist_image Metric.infDist_image
+-/
+#print Metric.infDist_inter_closedBall_of_mem /-
theorem infDist_inter_closedBall_of_mem (h : y ∈ s) :
infDist x (s ∩ closedBall x (dist y x)) = infDist x s :=
by
@@ -681,13 +1032,26 @@ theorem infDist_inter_closedBall_of_mem (h : y ∈ s) :
· rw [dist_comm z, dist_comm y] at hlt
exact (hlt.trans hz).not_le (inf_dist_le_dist_of_mem h)
#align metric.inf_dist_inter_closed_ball_of_mem Metric.infDist_inter_closedBall_of_mem
+-/
+/- warning: is_compact.exists_inf_dist_eq_dist -> IsCompact.exists_infDist_eq_dist is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α}, (IsCompact.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1)) s) -> (Set.Nonempty.{u1} α s) -> (forall (x : α), Exists.{succ u1} α (fun (y : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) => Eq.{1} Real (Metric.infDist.{u1} α _inst_1 x s) (Dist.dist.{u1} α (PseudoMetricSpace.toHasDist.{u1} α _inst_1) x y))))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α}, (IsCompact.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1)) s) -> (Set.Nonempty.{u1} α s) -> (forall (x : α), Exists.{succ u1} α (fun (y : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y s) (Eq.{1} Real (Metric.infDist.{u1} α _inst_1 x s) (Dist.dist.{u1} α (PseudoMetricSpace.toDist.{u1} α _inst_1) x y))))
+Case conversion may be inaccurate. Consider using '#align is_compact.exists_inf_dist_eq_dist IsCompact.exists_infDist_eq_distₓ'. -/
theorem IsCompact.exists_infDist_eq_dist (h : IsCompact s) (hne : s.Nonempty) (x : α) :
∃ y ∈ s, infDist x s = dist x y :=
let ⟨y, hys, hy⟩ := h.exists_infEdist_eq_edist hne x
⟨y, hys, by rw [inf_dist, dist_edist, hy]⟩
#align is_compact.exists_inf_dist_eq_dist IsCompact.exists_infDist_eq_dist
+/- warning: is_closed.exists_inf_dist_eq_dist -> IsClosed.exists_infDist_eq_dist is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} [_inst_3 : ProperSpace.{u1} α _inst_1], (IsClosed.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1)) s) -> (Set.Nonempty.{u1} α s) -> (forall (x : α), Exists.{succ u1} α (fun (y : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) => Eq.{1} Real (Metric.infDist.{u1} α _inst_1 x s) (Dist.dist.{u1} α (PseudoMetricSpace.toHasDist.{u1} α _inst_1) x y))))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} [_inst_3 : ProperSpace.{u1} α _inst_1], (IsClosed.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1)) s) -> (Set.Nonempty.{u1} α s) -> (forall (x : α), Exists.{succ u1} α (fun (y : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y s) (Eq.{1} Real (Metric.infDist.{u1} α _inst_1 x s) (Dist.dist.{u1} α (PseudoMetricSpace.toDist.{u1} α _inst_1) x y))))
+Case conversion may be inaccurate. Consider using '#align is_closed.exists_inf_dist_eq_dist IsClosed.exists_infDist_eq_distₓ'. -/
theorem IsClosed.exists_infDist_eq_dist [ProperSpace α] (h : IsClosed s) (hne : s.Nonempty)
(x : α) : ∃ y ∈ s, infDist x s = dist x y :=
by
@@ -701,6 +1065,12 @@ theorem IsClosed.exists_infDist_eq_dist [ProperSpace α] (h : IsClosed s) (hne :
exact ⟨y, hys, hyd⟩
#align is_closed.exists_inf_dist_eq_dist IsClosed.exists_infDist_eq_dist
+/- warning: metric.exists_mem_closure_inf_dist_eq_dist -> Metric.exists_mem_closure_infDist_eq_dist is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} [_inst_3 : ProperSpace.{u1} α _inst_1], (Set.Nonempty.{u1} α s) -> (forall (x : α), Exists.{succ u1} α (fun (y : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1)) s)) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1)) s)) => Eq.{1} Real (Metric.infDist.{u1} α _inst_1 x s) (Dist.dist.{u1} α (PseudoMetricSpace.toHasDist.{u1} α _inst_1) x y))))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} [_inst_3 : ProperSpace.{u1} α _inst_1], (Set.Nonempty.{u1} α s) -> (forall (x : α), Exists.{succ u1} α (fun (y : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1)) s)) (Eq.{1} Real (Metric.infDist.{u1} α _inst_1 x s) (Dist.dist.{u1} α (PseudoMetricSpace.toDist.{u1} α _inst_1) x y))))
+Case conversion may be inaccurate. Consider using '#align metric.exists_mem_closure_inf_dist_eq_dist Metric.exists_mem_closure_infDist_eq_distₓ'. -/
theorem exists_mem_closure_infDist_eq_dist [ProperSpace α] (hne : s.Nonempty) (x : α) :
∃ y ∈ closure s, infDist x s = dist x y := by
simpa only [inf_dist_eq_closure] using is_closed_closure.exists_inf_dist_eq_dist hne.closure x
@@ -709,26 +1079,52 @@ theorem exists_mem_closure_infDist_eq_dist [ProperSpace α] (hne : s.Nonempty) (
/-! ### Distance of a point to a set as a function into `ℝ≥0`. -/
+#print Metric.infNndist /-
/-- The minimal distance of a point to a set as a `ℝ≥0` -/
def infNndist (x : α) (s : Set α) : ℝ≥0 :=
ENNReal.toNNReal (infEdist x s)
#align metric.inf_nndist Metric.infNndist
+-/
+/- warning: metric.coe_inf_nndist -> Metric.coe_infNndist is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α}, Eq.{1} Real ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) NNReal Real (HasLiftT.mk.{1, 1} NNReal Real (CoeTCₓ.coe.{1, 1} NNReal Real (coeBase.{1, 1} NNReal Real NNReal.Real.hasCoe))) (Metric.infNndist.{u1} α _inst_1 x s)) (Metric.infDist.{u1} α _inst_1 x s)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {x : α}, Eq.{1} Real (NNReal.toReal (Metric.infNndist.{u1} α _inst_1 x s)) (Metric.infDist.{u1} α _inst_1 x s)
+Case conversion may be inaccurate. Consider using '#align metric.coe_inf_nndist Metric.coe_infNndistₓ'. -/
@[simp]
theorem coe_infNndist : (infNndist x s : ℝ) = infDist x s :=
rfl
#align metric.coe_inf_nndist Metric.coe_infNndist
+/- warning: metric.lipschitz_inf_nndist_pt -> Metric.lipschitz_infNndist_pt is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] (s : Set.{u1} α), LipschitzWith.{u1, 0} α NNReal (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) (PseudoMetricSpace.toPseudoEMetricSpace.{0} NNReal NNReal.pseudoMetricSpace) (OfNat.ofNat.{0} NNReal 1 (OfNat.mk.{0} NNReal 1 (One.one.{0} NNReal (AddMonoidWithOne.toOne.{0} NNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} NNReal (NonAssocSemiring.toAddCommMonoidWithOne.{0} NNReal (Semiring.toNonAssocSemiring.{0} NNReal NNReal.semiring))))))) (fun (x : α) => Metric.infNndist.{u1} α _inst_1 x s)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] (s : Set.{u1} α), LipschitzWith.{u1, 0} α NNReal (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) (EMetricSpace.toPseudoEMetricSpace.{0} NNReal (MetricSpace.toEMetricSpace.{0} NNReal instMetricSpaceNNReal)) (OfNat.ofNat.{0} NNReal 1 (One.toOfNat1.{0} NNReal instNNRealOne)) (fun (x : α) => Metric.infNndist.{u1} α _inst_1 x s)
+Case conversion may be inaccurate. Consider using '#align metric.lipschitz_inf_nndist_pt Metric.lipschitz_infNndist_ptₓ'. -/
/-- The minimal distance to a set (as `ℝ≥0`) is Lipschitz in point with constant 1 -/
theorem lipschitz_infNndist_pt (s : Set α) : LipschitzWith 1 fun x => infNndist x s :=
LipschitzWith.of_le_add fun x y => infDist_le_infDist_add_dist
#align metric.lipschitz_inf_nndist_pt Metric.lipschitz_infNndist_pt
+/- warning: metric.uniform_continuous_inf_nndist_pt -> Metric.uniformContinuous_infNndist_pt is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] (s : Set.{u1} α), UniformContinuous.{u1, 0} α NNReal (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1) (PseudoMetricSpace.toUniformSpace.{0} NNReal NNReal.pseudoMetricSpace) (fun (x : α) => Metric.infNndist.{u1} α _inst_1 x s)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] (s : Set.{u1} α), UniformContinuous.{u1, 0} α NNReal (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1) (PseudoMetricSpace.toUniformSpace.{0} NNReal instPseudoMetricSpaceNNReal) (fun (x : α) => Metric.infNndist.{u1} α _inst_1 x s)
+Case conversion may be inaccurate. Consider using '#align metric.uniform_continuous_inf_nndist_pt Metric.uniformContinuous_infNndist_ptₓ'. -/
/-- The minimal distance to a set (as `ℝ≥0`) is uniformly continuous in point -/
theorem uniformContinuous_infNndist_pt (s : Set α) : UniformContinuous fun x => infNndist x s :=
(lipschitz_infNndist_pt s).UniformContinuous
#align metric.uniform_continuous_inf_nndist_pt Metric.uniformContinuous_infNndist_pt
+/- warning: metric.continuous_inf_nndist_pt -> Metric.continuous_infNndist_pt is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] (s : Set.{u1} α), Continuous.{u1, 0} α NNReal (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1)) NNReal.topologicalSpace (fun (x : α) => Metric.infNndist.{u1} α _inst_1 x s)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] (s : Set.{u1} α), Continuous.{u1, 0} α NNReal (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1)) NNReal.instTopologicalSpaceNNReal (fun (x : α) => Metric.infNndist.{u1} α _inst_1 x s)
+Case conversion may be inaccurate. Consider using '#align metric.continuous_inf_nndist_pt Metric.continuous_infNndist_ptₓ'. -/
/-- The minimal distance to a set (as `ℝ≥0`) is continuous in point -/
theorem continuous_infNndist_pt (s : Set α) : Continuous fun x => infNndist x s :=
(uniformContinuous_infNndist_pt s).Continuous
@@ -737,17 +1133,31 @@ theorem continuous_infNndist_pt (s : Set α) : Continuous fun x => infNndist x s
/-! ### The Hausdorff distance as a function into `ℝ`. -/
+#print Metric.hausdorffDist /-
/-- The Hausdorff distance between two sets is the smallest nonnegative `r` such that each set is
included in the `r`-neighborhood of the other. If there is no such `r`, it is defined to
be `0`, arbitrarily -/
def hausdorffDist (s t : Set α) : ℝ :=
ENNReal.toReal (hausdorffEdist s t)
#align metric.Hausdorff_dist Metric.hausdorffDist
+-/
+/- warning: metric.Hausdorff_dist_nonneg -> Metric.hausdorffDist_nonneg is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) (Metric.hausdorffDist.{u1} α _inst_1 s t)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) (Metric.hausdorffDist.{u1} α _inst_1 s t)
+Case conversion may be inaccurate. Consider using '#align metric.Hausdorff_dist_nonneg Metric.hausdorffDist_nonnegₓ'. -/
/-- The Hausdorff distance is nonnegative -/
theorem hausdorffDist_nonneg : 0 ≤ hausdorffDist s t := by simp [Hausdorff_dist]
#align metric.Hausdorff_dist_nonneg Metric.hausdorffDist_nonneg
+/- warning: metric.Hausdorff_edist_ne_top_of_nonempty_of_bounded -> Metric.hausdorffEdist_ne_top_of_nonempty_of_bounded is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (Set.Nonempty.{u1} α s) -> (Set.Nonempty.{u1} α t) -> (Metric.Bounded.{u1} α _inst_1 s) -> (Metric.Bounded.{u1} α _inst_1 t) -> (Ne.{1} ENNReal (EMetric.hausdorffEdist.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) s t) (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (Set.Nonempty.{u1} α s) -> (Set.Nonempty.{u1} α t) -> (Metric.Bounded.{u1} α _inst_1 s) -> (Metric.Bounded.{u1} α _inst_1 t) -> (Ne.{1} ENNReal (EMetric.hausdorffEdist.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) s t) (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))
+Case conversion may be inaccurate. Consider using '#align metric.Hausdorff_edist_ne_top_of_nonempty_of_bounded Metric.hausdorffEdist_ne_top_of_nonempty_of_boundedₓ'. -/
/-- If two sets are nonempty and bounded in a metric space, they are at finite Hausdorff
edistance. -/
theorem hausdorffEdist_ne_top_of_nonempty_of_bounded (hs : s.Nonempty) (ht : t.Nonempty)
@@ -773,16 +1183,30 @@ theorem hausdorffEdist_ne_top_of_nonempty_of_bounded (hs : s.Nonempty) (ht : t.N
exact ne_top_of_le_ne_top ENNReal.ofReal_ne_top this
#align metric.Hausdorff_edist_ne_top_of_nonempty_of_bounded Metric.hausdorffEdist_ne_top_of_nonempty_of_bounded
+/- warning: metric.Hausdorff_dist_self_zero -> Metric.hausdorffDist_self_zero is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α}, Eq.{1} Real (Metric.hausdorffDist.{u1} α _inst_1 s s) (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α}, Eq.{1} Real (Metric.hausdorffDist.{u1} α _inst_1 s s) (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))
+Case conversion may be inaccurate. Consider using '#align metric.Hausdorff_dist_self_zero Metric.hausdorffDist_self_zeroₓ'. -/
/-- The Hausdorff distance between a set and itself is zero -/
@[simp]
theorem hausdorffDist_self_zero : hausdorffDist s s = 0 := by simp [Hausdorff_dist]
#align metric.Hausdorff_dist_self_zero Metric.hausdorffDist_self_zero
+#print Metric.hausdorffDist_comm /-
/-- The Hausdorff distance from `s` to `t` and from `t` to `s` coincide -/
theorem hausdorffDist_comm : hausdorffDist s t = hausdorffDist t s := by
simp [Hausdorff_dist, Hausdorff_edist_comm]
#align metric.Hausdorff_dist_comm Metric.hausdorffDist_comm
+-/
+/- warning: metric.Hausdorff_dist_empty -> Metric.hausdorffDist_empty is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α}, Eq.{1} Real (Metric.hausdorffDist.{u1} α _inst_1 s (EmptyCollection.emptyCollection.{u1} (Set.{u1} α) (Set.hasEmptyc.{u1} α))) (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α}, Eq.{1} Real (Metric.hausdorffDist.{u1} α _inst_1 s (EmptyCollection.emptyCollection.{u1} (Set.{u1} α) (Set.instEmptyCollectionSet.{u1} α))) (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))
+Case conversion may be inaccurate. Consider using '#align metric.Hausdorff_dist_empty Metric.hausdorffDist_emptyₓ'. -/
/-- The Hausdorff distance to the empty set vanishes (if you want to have the more reasonable
value ∞ instead, use `Hausdorff_edist`, which takes values in ℝ≥0∞) -/
@[simp]
@@ -793,12 +1217,24 @@ theorem hausdorffDist_empty : hausdorffDist s ∅ = 0 :=
· simp [Hausdorff_dist, Hausdorff_edist_empty h]
#align metric.Hausdorff_dist_empty Metric.hausdorffDist_empty
+/- warning: metric.Hausdorff_dist_empty' -> Metric.hausdorffDist_empty' is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α}, Eq.{1} Real (Metric.hausdorffDist.{u1} α _inst_1 (EmptyCollection.emptyCollection.{u1} (Set.{u1} α) (Set.hasEmptyc.{u1} α)) s) (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α}, Eq.{1} Real (Metric.hausdorffDist.{u1} α _inst_1 (EmptyCollection.emptyCollection.{u1} (Set.{u1} α) (Set.instEmptyCollectionSet.{u1} α)) s) (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))
+Case conversion may be inaccurate. Consider using '#align metric.Hausdorff_dist_empty' Metric.hausdorffDist_empty'ₓ'. -/
/-- The Hausdorff distance to the empty set vanishes (if you want to have the more reasonable
value ∞ instead, use `Hausdorff_edist`, which takes values in ℝ≥0∞) -/
@[simp]
theorem hausdorffDist_empty' : hausdorffDist ∅ s = 0 := by simp [Hausdorff_dist_comm]
#align metric.Hausdorff_dist_empty' Metric.hausdorffDist_empty'
+/- warning: metric.Hausdorff_dist_le_of_inf_dist -> Metric.hausdorffDist_le_of_infDist is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α} {r : Real}, (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) r) -> (forall (x : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) -> (LE.le.{0} Real Real.hasLe (Metric.infDist.{u1} α _inst_1 x t) r)) -> (forall (x : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x t) -> (LE.le.{0} Real Real.hasLe (Metric.infDist.{u1} α _inst_1 x s) r)) -> (LE.le.{0} Real Real.hasLe (Metric.hausdorffDist.{u1} α _inst_1 s t) r)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α} {r : Real}, (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) r) -> (forall (x : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) -> (LE.le.{0} Real Real.instLEReal (Metric.infDist.{u1} α _inst_1 x t) r)) -> (forall (x : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x t) -> (LE.le.{0} Real Real.instLEReal (Metric.infDist.{u1} α _inst_1 x s) r)) -> (LE.le.{0} Real Real.instLEReal (Metric.hausdorffDist.{u1} α _inst_1 s t) r)
+Case conversion may be inaccurate. Consider using '#align metric.Hausdorff_dist_le_of_inf_dist Metric.hausdorffDist_le_of_infDistₓ'. -/
/-- Bounding the Hausdorff distance by bounding the distance of any point
in each set to the other set -/
theorem hausdorffDist_le_of_infDist {r : ℝ} (hr : 0 ≤ r) (H1 : ∀ x ∈ s, infDist x t ≤ r)
@@ -825,6 +1261,12 @@ theorem hausdorffDist_le_of_infDist {r : ℝ} (hr : 0 ≤ r) (H1 : ∀ x ∈ s,
ENNReal.toReal_le_toReal h1 ENNReal.ofReal_ne_top]
#align metric.Hausdorff_dist_le_of_inf_dist Metric.hausdorffDist_le_of_infDist
+/- warning: metric.Hausdorff_dist_le_of_mem_dist -> Metric.hausdorffDist_le_of_mem_dist is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α} {r : Real}, (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) r) -> (forall (x : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) -> (Exists.{succ u1} α (fun (y : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y t) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y t) => LE.le.{0} Real Real.hasLe (Dist.dist.{u1} α (PseudoMetricSpace.toHasDist.{u1} α _inst_1) x y) r)))) -> (forall (x : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x t) -> (Exists.{succ u1} α (fun (y : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y s) => LE.le.{0} Real Real.hasLe (Dist.dist.{u1} α (PseudoMetricSpace.toHasDist.{u1} α _inst_1) x y) r)))) -> (LE.le.{0} Real Real.hasLe (Metric.hausdorffDist.{u1} α _inst_1 s t) r)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α} {r : Real}, (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) r) -> (forall (x : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) -> (Exists.{succ u1} α (fun (y : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y t) (LE.le.{0} Real Real.instLEReal (Dist.dist.{u1} α (PseudoMetricSpace.toDist.{u1} α _inst_1) x y) r)))) -> (forall (x : α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x t) -> (Exists.{succ u1} α (fun (y : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y s) (LE.le.{0} Real Real.instLEReal (Dist.dist.{u1} α (PseudoMetricSpace.toDist.{u1} α _inst_1) x y) r)))) -> (LE.le.{0} Real Real.instLEReal (Metric.hausdorffDist.{u1} α _inst_1 s t) r)
+Case conversion may be inaccurate. Consider using '#align metric.Hausdorff_dist_le_of_mem_dist Metric.hausdorffDist_le_of_mem_distₓ'. -/
/-- Bounding the Hausdorff distance by exhibiting, for any point in each set,
another point in the other set at controlled distance -/
theorem hausdorffDist_le_of_mem_dist {r : ℝ} (hr : 0 ≤ r) (H1 : ∀ x ∈ s, ∃ y ∈ t, dist x y ≤ r)
@@ -839,6 +1281,12 @@ theorem hausdorffDist_le_of_mem_dist {r : ℝ} (hr : 0 ≤ r) (H1 : ∀ x ∈ s,
exact le_trans (inf_dist_le_dist_of_mem ys) hy
#align metric.Hausdorff_dist_le_of_mem_dist Metric.hausdorffDist_le_of_mem_dist
+/- warning: metric.Hausdorff_dist_le_diam -> Metric.hausdorffDist_le_diam is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (Set.Nonempty.{u1} α s) -> (Metric.Bounded.{u1} α _inst_1 s) -> (Set.Nonempty.{u1} α t) -> (Metric.Bounded.{u1} α _inst_1 t) -> (LE.le.{0} Real Real.hasLe (Metric.hausdorffDist.{u1} α _inst_1 s t) (Metric.diam.{u1} α _inst_1 (Union.union.{u1} (Set.{u1} α) (Set.hasUnion.{u1} α) s t)))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (Set.Nonempty.{u1} α s) -> (Metric.Bounded.{u1} α _inst_1 s) -> (Set.Nonempty.{u1} α t) -> (Metric.Bounded.{u1} α _inst_1 t) -> (LE.le.{0} Real Real.instLEReal (Metric.hausdorffDist.{u1} α _inst_1 s t) (Metric.diam.{u1} α _inst_1 (Union.union.{u1} (Set.{u1} α) (Set.instUnionSet.{u1} α) s t)))
+Case conversion may be inaccurate. Consider using '#align metric.Hausdorff_dist_le_diam Metric.hausdorffDist_le_diamₓ'. -/
/-- The Hausdorff distance is controlled by the diameter of the union -/
theorem hausdorffDist_le_diam (hs : s.Nonempty) (bs : Bounded s) (ht : t.Nonempty)
(bt : Bounded t) : hausdorffDist s t ≤ diam (s ∪ t) :=
@@ -858,6 +1306,12 @@ theorem hausdorffDist_le_diam (hs : s.Nonempty) (bs : Bounded s) (ht : t.Nonempt
(subset_union_left _ _ xs)⟩
#align metric.Hausdorff_dist_le_diam Metric.hausdorffDist_le_diam
+/- warning: metric.inf_dist_le_Hausdorff_dist_of_mem -> Metric.infDist_le_hausdorffDist_of_mem is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α} {x : α}, (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) -> (Ne.{1} ENNReal (EMetric.hausdorffEdist.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) s t) (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder)))) -> (LE.le.{0} Real Real.hasLe (Metric.infDist.{u1} α _inst_1 x t) (Metric.hausdorffDist.{u1} α _inst_1 s t))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α} {x : α}, (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) -> (Ne.{1} ENNReal (EMetric.hausdorffEdist.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) s t) (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal)))) -> (LE.le.{0} Real Real.instLEReal (Metric.infDist.{u1} α _inst_1 x t) (Metric.hausdorffDist.{u1} α _inst_1 s t))
+Case conversion may be inaccurate. Consider using '#align metric.inf_dist_le_Hausdorff_dist_of_mem Metric.infDist_le_hausdorffDist_of_memₓ'. -/
/-- The distance to a set is controlled by the Hausdorff distance -/
theorem infDist_le_hausdorffDist_of_mem (hx : x ∈ s) (fin : hausdorffEdist s t ≠ ⊤) :
infDist x t ≤ hausdorffDist s t :=
@@ -867,6 +1321,12 @@ theorem infDist_le_hausdorffDist_of_mem (hx : x ∈ s) (fin : hausdorffEdist s t
exact inf_edist_le_Hausdorff_edist_of_mem hx
#align metric.inf_dist_le_Hausdorff_dist_of_mem Metric.infDist_le_hausdorffDist_of_mem
+/- warning: metric.exists_dist_lt_of_Hausdorff_dist_lt -> Metric.exists_dist_lt_of_hausdorffDist_lt is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α} {x : α} {r : Real}, (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) -> (LT.lt.{0} Real Real.hasLt (Metric.hausdorffDist.{u1} α _inst_1 s t) r) -> (Ne.{1} ENNReal (EMetric.hausdorffEdist.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) s t) (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder)))) -> (Exists.{succ u1} α (fun (y : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y t) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y t) => LT.lt.{0} Real Real.hasLt (Dist.dist.{u1} α (PseudoMetricSpace.toHasDist.{u1} α _inst_1) x y) r)))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α} {x : α} {r : Real}, (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) -> (LT.lt.{0} Real Real.instLTReal (Metric.hausdorffDist.{u1} α _inst_1 s t) r) -> (Ne.{1} ENNReal (EMetric.hausdorffEdist.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) s t) (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal)))) -> (Exists.{succ u1} α (fun (y : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y t) (LT.lt.{0} Real Real.instLTReal (Dist.dist.{u1} α (PseudoMetricSpace.toDist.{u1} α _inst_1) x y) r)))
+Case conversion may be inaccurate. Consider using '#align metric.exists_dist_lt_of_Hausdorff_dist_lt Metric.exists_dist_lt_of_hausdorffDist_ltₓ'. -/
/-- If the Hausdorff distance is `<r`, then any point in one of the sets is at distance
`<r` of a point in the other set -/
theorem exists_dist_lt_of_hausdorffDist_lt {r : ℝ} (h : x ∈ s) (H : hausdorffDist s t < r)
@@ -881,6 +1341,12 @@ theorem exists_dist_lt_of_hausdorffDist_lt {r : ℝ} (h : x ∈ s) (H : hausdorf
exact ⟨y, hy, yr⟩
#align metric.exists_dist_lt_of_Hausdorff_dist_lt Metric.exists_dist_lt_of_hausdorffDist_lt
+/- warning: metric.exists_dist_lt_of_Hausdorff_dist_lt' -> Metric.exists_dist_lt_of_hausdorffDist_lt' is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α} {y : α} {r : Real}, (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y t) -> (LT.lt.{0} Real Real.hasLt (Metric.hausdorffDist.{u1} α _inst_1 s t) r) -> (Ne.{1} ENNReal (EMetric.hausdorffEdist.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) s t) (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder)))) -> (Exists.{succ u1} α (fun (x : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) => LT.lt.{0} Real Real.hasLt (Dist.dist.{u1} α (PseudoMetricSpace.toHasDist.{u1} α _inst_1) x y) r)))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α} {y : α} {r : Real}, (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y t) -> (LT.lt.{0} Real Real.instLTReal (Metric.hausdorffDist.{u1} α _inst_1 s t) r) -> (Ne.{1} ENNReal (EMetric.hausdorffEdist.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) s t) (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal)))) -> (Exists.{succ u1} α (fun (x : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s) (LT.lt.{0} Real Real.instLTReal (Dist.dist.{u1} α (PseudoMetricSpace.toDist.{u1} α _inst_1) x y) r)))
+Case conversion may be inaccurate. Consider using '#align metric.exists_dist_lt_of_Hausdorff_dist_lt' Metric.exists_dist_lt_of_hausdorffDist_lt'ₓ'. -/
/-- If the Hausdorff distance is `<r`, then any point in one of the sets is at distance
`<r` of a point in the other set -/
theorem exists_dist_lt_of_hausdorffDist_lt' {r : ℝ} (h : y ∈ t) (H : hausdorffDist s t < r)
@@ -891,6 +1357,12 @@ theorem exists_dist_lt_of_hausdorffDist_lt' {r : ℝ} (h : y ∈ t) (H : hausdor
simpa [dist_comm] using exists_dist_lt_of_Hausdorff_dist_lt h H Fin
#align metric.exists_dist_lt_of_Hausdorff_dist_lt' Metric.exists_dist_lt_of_hausdorffDist_lt'
+/- warning: metric.inf_dist_le_inf_dist_add_Hausdorff_dist -> Metric.infDist_le_infDist_add_hausdorffDist is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α} {x : α}, (Ne.{1} ENNReal (EMetric.hausdorffEdist.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) s t) (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder)))) -> (LE.le.{0} Real Real.hasLe (Metric.infDist.{u1} α _inst_1 x t) (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.hasAdd) (Metric.infDist.{u1} α _inst_1 x s) (Metric.hausdorffDist.{u1} α _inst_1 s t)))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α} {x : α}, (Ne.{1} ENNReal (EMetric.hausdorffEdist.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) s t) (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal)))) -> (LE.le.{0} Real Real.instLEReal (Metric.infDist.{u1} α _inst_1 x t) (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.instAddReal) (Metric.infDist.{u1} α _inst_1 x s) (Metric.hausdorffDist.{u1} α _inst_1 s t)))
+Case conversion may be inaccurate. Consider using '#align metric.inf_dist_le_inf_dist_add_Hausdorff_dist Metric.infDist_le_infDist_add_hausdorffDistₓ'. -/
/-- The infimum distance to `s` and `t` are the same, up to the Hausdorff distance
between `s` and `t` -/
theorem infDist_le_infDist_add_hausdorffDist (fin : hausdorffEdist s t ≠ ⊤) :
@@ -904,12 +1376,20 @@ theorem infDist_le_infDist_add_hausdorffDist (fin : hausdorffEdist s t ≠ ⊤)
· exact ENNReal.add_ne_top.2 ⟨inf_edist_ne_top hs, Fin⟩
#align metric.inf_dist_le_inf_dist_add_Hausdorff_dist Metric.infDist_le_infDist_add_hausdorffDist
+#print Metric.hausdorffDist_image /-
/-- The Hausdorff distance is invariant under isometries -/
theorem hausdorffDist_image (h : Isometry Φ) :
hausdorffDist (Φ '' s) (Φ '' t) = hausdorffDist s t := by
simp [Hausdorff_dist, Hausdorff_edist_image h]
#align metric.Hausdorff_dist_image Metric.hausdorffDist_image
+-/
+/- warning: metric.Hausdorff_dist_triangle -> Metric.hausdorffDist_triangle is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α} {u : Set.{u1} α}, (Ne.{1} ENNReal (EMetric.hausdorffEdist.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) s t) (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder)))) -> (LE.le.{0} Real Real.hasLe (Metric.hausdorffDist.{u1} α _inst_1 s u) (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.hasAdd) (Metric.hausdorffDist.{u1} α _inst_1 s t) (Metric.hausdorffDist.{u1} α _inst_1 t u)))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α} {u : Set.{u1} α}, (Ne.{1} ENNReal (EMetric.hausdorffEdist.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) s t) (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal)))) -> (LE.le.{0} Real Real.instLEReal (Metric.hausdorffDist.{u1} α _inst_1 s u) (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.instAddReal) (Metric.hausdorffDist.{u1} α _inst_1 s t) (Metric.hausdorffDist.{u1} α _inst_1 t u)))
+Case conversion may be inaccurate. Consider using '#align metric.Hausdorff_dist_triangle Metric.hausdorffDist_triangleₓ'. -/
/-- The Hausdorff distance satisfies the triangular inequality -/
theorem hausdorffDist_triangle (fin : hausdorffEdist s t ≠ ⊤) :
hausdorffDist s u ≤ hausdorffDist s t + hausdorffDist t u :=
@@ -933,6 +1413,12 @@ theorem hausdorffDist_triangle (fin : hausdorffEdist s t ≠ ⊤) :
· simp [ENNReal.add_eq_top, lt_top_iff_ne_top.1 Dtu, Fin]
#align metric.Hausdorff_dist_triangle Metric.hausdorffDist_triangle
+/- warning: metric.Hausdorff_dist_triangle' -> Metric.hausdorffDist_triangle' is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α} {u : Set.{u1} α}, (Ne.{1} ENNReal (EMetric.hausdorffEdist.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) t u) (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder)))) -> (LE.le.{0} Real Real.hasLe (Metric.hausdorffDist.{u1} α _inst_1 s u) (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.hasAdd) (Metric.hausdorffDist.{u1} α _inst_1 s t) (Metric.hausdorffDist.{u1} α _inst_1 t u)))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α} {u : Set.{u1} α}, (Ne.{1} ENNReal (EMetric.hausdorffEdist.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) t u) (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal)))) -> (LE.le.{0} Real Real.instLEReal (Metric.hausdorffDist.{u1} α _inst_1 s u) (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.instAddReal) (Metric.hausdorffDist.{u1} α _inst_1 s t) (Metric.hausdorffDist.{u1} α _inst_1 t u)))
+Case conversion may be inaccurate. Consider using '#align metric.Hausdorff_dist_triangle' Metric.hausdorffDist_triangle'ₓ'. -/
/-- The Hausdorff distance satisfies the triangular inequality -/
theorem hausdorffDist_triangle' (fin : hausdorffEdist t u ≠ ⊤) :
hausdorffDist s u ≤ hausdorffDist s t + hausdorffDist t u :=
@@ -943,29 +1429,47 @@ theorem hausdorffDist_triangle' (fin : hausdorffEdist t u ≠ ⊤) :
simpa [add_comm, Hausdorff_dist_comm] using I
#align metric.Hausdorff_dist_triangle' Metric.hausdorffDist_triangle'
+/- warning: metric.Hausdorff_dist_self_closure -> Metric.hausdorffDist_self_closure is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α}, Eq.{1} Real (Metric.hausdorffDist.{u1} α _inst_1 s (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1)) s)) (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α}, Eq.{1} Real (Metric.hausdorffDist.{u1} α _inst_1 s (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1)) s)) (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))
+Case conversion may be inaccurate. Consider using '#align metric.Hausdorff_dist_self_closure Metric.hausdorffDist_self_closureₓ'. -/
/-- The Hausdorff distance between a set and its closure vanish -/
@[simp]
theorem hausdorffDist_self_closure : hausdorffDist s (closure s) = 0 := by simp [Hausdorff_dist]
#align metric.Hausdorff_dist_self_closure Metric.hausdorffDist_self_closure
+#print Metric.hausdorffDist_closure₁ /-
/-- Replacing a set by its closure does not change the Hausdorff distance. -/
@[simp]
theorem hausdorffDist_closure₁ : hausdorffDist (closure s) t = hausdorffDist s t := by
simp [Hausdorff_dist]
#align metric.Hausdorff_dist_closure₁ Metric.hausdorffDist_closure₁
+-/
+#print Metric.hausdorffDist_closure₂ /-
/-- Replacing a set by its closure does not change the Hausdorff distance. -/
@[simp]
theorem hausdorffDist_closure₂ : hausdorffDist s (closure t) = hausdorffDist s t := by
simp [Hausdorff_dist]
#align metric.Hausdorff_dist_closure₂ Metric.hausdorffDist_closure₂
+-/
+#print Metric.hausdorffDist_closure /-
/-- The Hausdorff distance between two sets and their closures coincide -/
@[simp]
theorem hausdorffDist_closure : hausdorffDist (closure s) (closure t) = hausdorffDist s t := by
simp [Hausdorff_dist]
#align metric.Hausdorff_dist_closure Metric.hausdorffDist_closure
+-/
+/- warning: metric.Hausdorff_dist_zero_iff_closure_eq_closure -> Metric.hausdorffDist_zero_iff_closure_eq_closure is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (Ne.{1} ENNReal (EMetric.hausdorffEdist.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) s t) (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder)))) -> (Iff (Eq.{1} Real (Metric.hausdorffDist.{u1} α _inst_1 s t) (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))) (Eq.{succ u1} (Set.{u1} α) (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1)) s) (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1)) t)))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (Ne.{1} ENNReal (EMetric.hausdorffEdist.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) s t) (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal)))) -> (Iff (Eq.{1} Real (Metric.hausdorffDist.{u1} α _inst_1 s t) (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))) (Eq.{succ u1} (Set.{u1} α) (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1)) s) (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1)) t)))
+Case conversion may be inaccurate. Consider using '#align metric.Hausdorff_dist_zero_iff_closure_eq_closure Metric.hausdorffDist_zero_iff_closure_eq_closureₓ'. -/
/-- Two sets are at zero Hausdorff distance if and only if they have the same closures -/
theorem hausdorffDist_zero_iff_closure_eq_closure (fin : hausdorffEdist s t ≠ ⊤) :
hausdorffDist s t = 0 ↔ closure s = closure t := by
@@ -973,6 +1477,12 @@ theorem hausdorffDist_zero_iff_closure_eq_closure (fin : hausdorffEdist s t ≠
ENNReal.toReal_eq_zero_iff, Fin]
#align metric.Hausdorff_dist_zero_iff_closure_eq_closure Metric.hausdorffDist_zero_iff_closure_eq_closure
+/- warning: is_closed.Hausdorff_dist_zero_iff_eq -> IsClosed.hausdorffDist_zero_iff_eq is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (IsClosed.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1)) s) -> (IsClosed.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1)) t) -> (Ne.{1} ENNReal (EMetric.hausdorffEdist.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) s t) (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder)))) -> (Iff (Eq.{1} Real (Metric.hausdorffDist.{u1} α _inst_1 s t) (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))) (Eq.{succ u1} (Set.{u1} α) s t))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (IsClosed.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1)) s) -> (IsClosed.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_1)) t) -> (Ne.{1} ENNReal (EMetric.hausdorffEdist.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_1) s t) (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal)))) -> (Iff (Eq.{1} Real (Metric.hausdorffDist.{u1} α _inst_1 s t) (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))) (Eq.{succ u1} (Set.{u1} α) s t))
+Case conversion may be inaccurate. Consider using '#align is_closed.Hausdorff_dist_zero_iff_eq IsClosed.hausdorffDist_zero_iff_eqₓ'. -/
/-- Two closed sets are at zero Hausdorff distance if and only if they coincide -/
theorem IsClosed.hausdorffDist_zero_iff_eq (hs : IsClosed s) (ht : IsClosed t)
(fin : hausdorffEdist s t ≠ ⊤) : hausdorffDist s t = 0 ↔ s = t := by
@@ -989,37 +1499,67 @@ variable [PseudoEMetricSpace α] {δ : ℝ} {s : Set α} {x : α}
open Emetric
+#print Metric.thickening /-
/-- The (open) `δ`-thickening `thickening δ E` of a subset `E` in a pseudo emetric space consists
of those points that are at distance less than `δ` from some point of `E`. -/
def thickening (δ : ℝ) (E : Set α) : Set α :=
{ x : α | infEdist x E < ENNReal.ofReal δ }
#align metric.thickening Metric.thickening
+-/
+/- warning: metric.mem_thickening_iff_inf_edist_lt -> Metric.mem_thickening_iff_infEdist_lt is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real} {s : Set.{u1} α} {x : α}, Iff (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (Metric.thickening.{u1} α _inst_1 δ s)) (LT.lt.{0} ENNReal (Preorder.toLT.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.infEdist.{u1} α _inst_1 x s) (ENNReal.ofReal δ))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real} {s : Set.{u1} α} {x : α}, Iff (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x (Metric.thickening.{u1} α _inst_1 δ s)) (LT.lt.{0} ENNReal (Preorder.toLT.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.infEdist.{u1} α _inst_1 x s) (ENNReal.ofReal δ))
+Case conversion may be inaccurate. Consider using '#align metric.mem_thickening_iff_inf_edist_lt Metric.mem_thickening_iff_infEdist_ltₓ'. -/
theorem mem_thickening_iff_infEdist_lt : x ∈ thickening δ s ↔ infEdist x s < ENNReal.ofReal δ :=
Iff.rfl
#align metric.mem_thickening_iff_inf_edist_lt Metric.mem_thickening_iff_infEdist_lt
+/- warning: metric.thickening_eq_preimage_inf_edist -> Metric.thickening_eq_preimage_infEdist is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (δ : Real) (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Metric.thickening.{u1} α _inst_1 δ E) (Set.preimage.{u1, 0} α ENNReal (fun (x : α) => EMetric.infEdist.{u1} α _inst_1 x E) (Set.Iio.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder)))) (ENNReal.ofReal δ)))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (δ : Real) (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Metric.thickening.{u1} α _inst_1 δ E) (Set.preimage.{u1, 0} α ENNReal (fun (x : α) => EMetric.infEdist.{u1} α _inst_1 x E) (Set.Iio.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal)))) (ENNReal.ofReal δ)))
+Case conversion may be inaccurate. Consider using '#align metric.thickening_eq_preimage_inf_edist Metric.thickening_eq_preimage_infEdistₓ'. -/
/-- The (open) thickening equals the preimage of an open interval under `inf_edist`. -/
theorem thickening_eq_preimage_infEdist (δ : ℝ) (E : Set α) :
thickening δ E = (fun x => infEdist x E) ⁻¹' Iio (ENNReal.ofReal δ) :=
rfl
#align metric.thickening_eq_preimage_inf_edist Metric.thickening_eq_preimage_infEdist
+#print Metric.isOpen_thickening /-
/-- The (open) thickening is an open set. -/
theorem isOpen_thickening {δ : ℝ} {E : Set α} : IsOpen (thickening δ E) :=
Continuous.isOpen_preimage continuous_infEdist _ isOpen_Iio
#align metric.is_open_thickening Metric.isOpen_thickening
+-/
+#print Metric.thickening_empty /-
/-- The (open) thickening of the empty set is empty. -/
@[simp]
theorem thickening_empty (δ : ℝ) : thickening δ (∅ : Set α) = ∅ := by
simp only [thickening, set_of_false, inf_edist_empty, not_top_lt]
#align metric.thickening_empty Metric.thickening_empty
+-/
+/- warning: metric.thickening_of_nonpos -> Metric.thickening_of_nonpos is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real}, (LE.le.{0} Real Real.hasLe δ (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))) -> (forall (s : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Metric.thickening.{u1} α _inst_1 δ s) (EmptyCollection.emptyCollection.{u1} (Set.{u1} α) (Set.hasEmptyc.{u1} α)))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real}, (LE.le.{0} Real Real.instLEReal δ (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))) -> (forall (s : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Metric.thickening.{u1} α _inst_1 δ s) (EmptyCollection.emptyCollection.{u1} (Set.{u1} α) (Set.instEmptyCollectionSet.{u1} α)))
+Case conversion may be inaccurate. Consider using '#align metric.thickening_of_nonpos Metric.thickening_of_nonposₓ'. -/
theorem thickening_of_nonpos (hδ : δ ≤ 0) (s : Set α) : thickening δ s = ∅ :=
eq_empty_of_forall_not_mem fun x => ((ENNReal.ofReal_of_nonpos hδ).trans_le bot_le).not_lt
#align metric.thickening_of_nonpos Metric.thickening_of_nonpos
+/- warning: metric.thickening_mono -> Metric.thickening_mono is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ₁ : Real} {δ₂ : Real}, (LE.le.{0} Real Real.hasLe δ₁ δ₂) -> (forall (E : Set.{u1} α), HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) (Metric.thickening.{u1} α _inst_1 δ₁ E) (Metric.thickening.{u1} α _inst_1 δ₂ E))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ₁ : Real} {δ₂ : Real}, (LE.le.{0} Real Real.instLEReal δ₁ δ₂) -> (forall (E : Set.{u1} α), HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) (Metric.thickening.{u1} α _inst_1 δ₁ E) (Metric.thickening.{u1} α _inst_1 δ₂ E))
+Case conversion may be inaccurate. Consider using '#align metric.thickening_mono Metric.thickening_monoₓ'. -/
/-- The (open) thickening `thickening δ E` of a fixed subset `E` is an increasing function of the
thickening radius `δ`. -/
theorem thickening_mono {δ₁ δ₂ : ℝ} (hle : δ₁ ≤ δ₂) (E : Set α) :
@@ -1027,23 +1567,39 @@ theorem thickening_mono {δ₁ δ₂ : ℝ} (hle : δ₁ ≤ δ₂) (E : Set α)
preimage_mono (Iio_subset_Iio (ENNReal.ofReal_le_ofReal hle))
#align metric.thickening_mono Metric.thickening_mono
+#print Metric.thickening_subset_of_subset /-
/-- The (open) thickening `thickening δ E` with a fixed thickening radius `δ` is
an increasing function of the subset `E`. -/
theorem thickening_subset_of_subset (δ : ℝ) {E₁ E₂ : Set α} (h : E₁ ⊆ E₂) :
thickening δ E₁ ⊆ thickening δ E₂ := fun _ hx => lt_of_le_of_lt (infEdist_anti h) hx
#align metric.thickening_subset_of_subset Metric.thickening_subset_of_subset
+-/
+/- warning: metric.mem_thickening_iff_exists_edist_lt -> Metric.mem_thickening_iff_exists_edist_lt is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real} (E : Set.{u1} α) (x : α), Iff (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (Metric.thickening.{u1} α _inst_1 δ E)) (Exists.{succ u1} α (fun (z : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) z E) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) z E) => LT.lt.{0} ENNReal (Preorder.toLT.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EDist.edist.{u1} α (PseudoEMetricSpace.toHasEdist.{u1} α _inst_1) x z) (ENNReal.ofReal δ))))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real} (E : Set.{u1} α) (x : α), Iff (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x (Metric.thickening.{u1} α _inst_1 δ E)) (Exists.{succ u1} α (fun (z : α) => And (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) z E) (LT.lt.{0} ENNReal (Preorder.toLT.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EDist.edist.{u1} α (PseudoEMetricSpace.toEDist.{u1} α _inst_1) x z) (ENNReal.ofReal δ))))
+Case conversion may be inaccurate. Consider using '#align metric.mem_thickening_iff_exists_edist_lt Metric.mem_thickening_iff_exists_edist_ltₓ'. -/
theorem mem_thickening_iff_exists_edist_lt {δ : ℝ} (E : Set α) (x : α) :
x ∈ thickening δ E ↔ ∃ z ∈ E, edist x z < ENNReal.ofReal δ :=
infEdist_lt_iff
#align metric.mem_thickening_iff_exists_edist_lt Metric.mem_thickening_iff_exists_edist_lt
+#print Metric.frontier_thickening_subset /-
/-- The frontier of the (open) thickening of a set is contained in an `inf_edist` level set. -/
theorem frontier_thickening_subset (E : Set α) {δ : ℝ} :
frontier (thickening δ E) ⊆ { x : α | infEdist x E = ENNReal.ofReal δ } :=
frontier_lt_subset_eq continuous_infEdist continuous_const
#align metric.frontier_thickening_subset Metric.frontier_thickening_subset
+-/
+/- warning: metric.frontier_thickening_disjoint -> Metric.frontier_thickening_disjoint is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (A : Set.{u1} α), Pairwise.{0} Real (Function.onFun.{1, succ u1, 1} Real (Set.{u1} α) Prop (Disjoint.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} (Set.{u1} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)))) (fun (r : Real) => frontier.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) (Metric.thickening.{u1} α _inst_1 r A)))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (A : Set.{u1} α), Pairwise.{0} Real (Function.onFun.{1, succ u1, 1} Real (Set.{u1} α) Prop (Disjoint.{u1} (Set.{u1} α) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) (BoundedOrder.toOrderBot.{u1} (Set.{u1} α) (Preorder.toLE.{u1} (Set.{u1} α) (PartialOrder.toPreorder.{u1} (Set.{u1} α) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))))) (CompleteLattice.toBoundedOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (fun (r : Real) => frontier.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) (Metric.thickening.{u1} α _inst_1 r A)))
+Case conversion may be inaccurate. Consider using '#align metric.frontier_thickening_disjoint Metric.frontier_thickening_disjointₓ'. -/
theorem frontier_thickening_disjoint (A : Set α) :
Pairwise (Disjoint on fun r : ℝ => frontier (thickening r A)) :=
by
@@ -1059,6 +1615,12 @@ theorem frontier_thickening_disjoint (A : Set α) :
variable {X : Type u} [PseudoMetricSpace X]
+/- warning: metric.mem_thickening_iff -> Metric.mem_thickening_iff is a dubious translation:
+lean 3 declaration is
+ forall {δ : Real} {X : Type.{u1}} [_inst_2 : PseudoMetricSpace.{u1} X] {E : Set.{u1} X} {x : X}, Iff (Membership.Mem.{u1, u1} X (Set.{u1} X) (Set.hasMem.{u1} X) x (Metric.thickening.{u1} X (PseudoMetricSpace.toPseudoEMetricSpace.{u1} X _inst_2) δ E)) (Exists.{succ u1} X (fun (z : X) => Exists.{0} (Membership.Mem.{u1, u1} X (Set.{u1} X) (Set.hasMem.{u1} X) z E) (fun (H : Membership.Mem.{u1, u1} X (Set.{u1} X) (Set.hasMem.{u1} X) z E) => LT.lt.{0} Real Real.hasLt (Dist.dist.{u1} X (PseudoMetricSpace.toHasDist.{u1} X _inst_2) x z) δ)))
+but is expected to have type
+ forall {δ : Real} {X : Type.{u1}} [_inst_2 : PseudoMetricSpace.{u1} X] {E : Set.{u1} X} {x : X}, Iff (Membership.mem.{u1, u1} X (Set.{u1} X) (Set.instMembershipSet.{u1} X) x (Metric.thickening.{u1} X (PseudoMetricSpace.toPseudoEMetricSpace.{u1} X _inst_2) δ E)) (Exists.{succ u1} X (fun (z : X) => And (Membership.mem.{u1, u1} X (Set.{u1} X) (Set.instMembershipSet.{u1} X) z E) (LT.lt.{0} Real Real.instLTReal (Dist.dist.{u1} X (PseudoMetricSpace.toDist.{u1} X _inst_2) x z) δ)))
+Case conversion may be inaccurate. Consider using '#align metric.mem_thickening_iff Metric.mem_thickening_iffₓ'. -/
/-- A point in a metric space belongs to the (open) `δ`-thickening of a subset `E` if and only if
it is at distance less than `δ` from some point of `E`. -/
theorem mem_thickening_iff {E : Set X} {x : X} : x ∈ thickening δ E ↔ ∃ z ∈ E, dist x z < δ :=
@@ -1073,18 +1635,23 @@ theorem mem_thickening_iff {E : Set X} {x : X} : x ∈ thickening δ E ↔ ∃ z
simp_rw [mem_thickening_iff_exists_edist_lt, key_iff]
#align metric.mem_thickening_iff Metric.mem_thickening_iff
+#print Metric.thickening_singleton /-
@[simp]
theorem thickening_singleton (δ : ℝ) (x : X) : thickening δ ({x} : Set X) = ball x δ :=
by
ext
simp [mem_thickening_iff]
#align metric.thickening_singleton Metric.thickening_singleton
+-/
+#print Metric.ball_subset_thickening /-
theorem ball_subset_thickening {x : X} {E : Set X} (hx : x ∈ E) (δ : ℝ) :
ball x δ ⊆ thickening δ E :=
Subset.trans (by simp) (thickening_subset_of_subset δ <| singleton_subset_iff.mpr hx)
#align metric.ball_subset_thickening Metric.ball_subset_thickening
+-/
+#print Metric.thickening_eq_bUnion_ball /-
/-- The (open) `δ`-thickening `thickening δ E` of a subset `E` in a metric space equals the
union of balls of radius `δ` centered at points of `E`. -/
theorem thickening_eq_bUnion_ball {δ : ℝ} {E : Set X} : thickening δ E = ⋃ x ∈ E, ball x δ :=
@@ -1093,7 +1660,9 @@ theorem thickening_eq_bUnion_ball {δ : ℝ} {E : Set X} : thickening δ E = ⋃
rw [mem_Union₂]
exact mem_thickening_iff
#align metric.thickening_eq_bUnion_ball Metric.thickening_eq_bUnion_ball
+-/
+#print Metric.Bounded.thickening /-
theorem Bounded.thickening {δ : ℝ} {E : Set X} (h : Bounded E) : Bounded (thickening δ E) :=
by
refine' bounded_iff_mem_bounded.2 fun x hx => _
@@ -1108,6 +1677,7 @@ theorem Bounded.thickening {δ : ℝ} {E : Set X} (h : Bounded E) : Bounded (thi
_ ≤ R + δ := add_le_add (hR zE) hz.le
#align metric.bounded.thickening Metric.Bounded.thickening
+-/
end Thickening
@@ -1118,22 +1688,42 @@ variable [PseudoEMetricSpace α] {δ ε : ℝ} {s t : Set α} {x : α}
open Emetric
+#print Metric.cthickening /-
/-- The closed `δ`-thickening `cthickening δ E` of a subset `E` in a pseudo emetric space consists
of those points that are at infimum distance at most `δ` from `E`. -/
def cthickening (δ : ℝ) (E : Set α) : Set α :=
{ x : α | infEdist x E ≤ ENNReal.ofReal δ }
#align metric.cthickening Metric.cthickening
+-/
+/- warning: metric.mem_cthickening_iff -> Metric.mem_cthickening_iff is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real} {s : Set.{u1} α} {x : α}, Iff (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (Metric.cthickening.{u1} α _inst_1 δ s)) (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.infEdist.{u1} α _inst_1 x s) (ENNReal.ofReal δ))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real} {s : Set.{u1} α} {x : α}, Iff (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x (Metric.cthickening.{u1} α _inst_1 δ s)) (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.infEdist.{u1} α _inst_1 x s) (ENNReal.ofReal δ))
+Case conversion may be inaccurate. Consider using '#align metric.mem_cthickening_iff Metric.mem_cthickening_iffₓ'. -/
@[simp]
theorem mem_cthickening_iff : x ∈ cthickening δ s ↔ infEdist x s ≤ ENNReal.ofReal δ :=
Iff.rfl
#align metric.mem_cthickening_iff Metric.mem_cthickening_iff
+/- warning: metric.mem_cthickening_of_edist_le -> Metric.mem_cthickening_of_edist_le is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (x : α) (y : α) (δ : Real) (E : Set.{u1} α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y E) -> (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EDist.edist.{u1} α (PseudoEMetricSpace.toHasEdist.{u1} α _inst_1) x y) (ENNReal.ofReal δ)) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (Metric.cthickening.{u1} α _inst_1 δ E))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (x : α) (y : α) (δ : Real) (E : Set.{u1} α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y E) -> (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EDist.edist.{u1} α (PseudoEMetricSpace.toEDist.{u1} α _inst_1) x y) (ENNReal.ofReal δ)) -> (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x (Metric.cthickening.{u1} α _inst_1 δ E))
+Case conversion may be inaccurate. Consider using '#align metric.mem_cthickening_of_edist_le Metric.mem_cthickening_of_edist_leₓ'. -/
theorem mem_cthickening_of_edist_le (x y : α) (δ : ℝ) (E : Set α) (h : y ∈ E)
(h' : edist x y ≤ ENNReal.ofReal δ) : x ∈ cthickening δ E :=
(infEdist_le_edist_of_mem h).trans h'
#align metric.mem_cthickening_of_edist_le Metric.mem_cthickening_of_edist_le
+/- warning: metric.mem_cthickening_of_dist_le -> Metric.mem_cthickening_of_dist_le is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_2 : PseudoMetricSpace.{u1} α] (x : α) (y : α) (δ : Real) (E : Set.{u1} α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) y E) -> (LE.le.{0} Real Real.hasLe (Dist.dist.{u1} α (PseudoMetricSpace.toHasDist.{u1} α _inst_2) x y) δ) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (Metric.cthickening.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_2) δ E))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_2 : PseudoMetricSpace.{u1} α] (x : α) (y : α) (δ : Real) (E : Set.{u1} α), (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) y E) -> (LE.le.{0} Real Real.instLEReal (Dist.dist.{u1} α (PseudoMetricSpace.toDist.{u1} α _inst_2) x y) δ) -> (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x (Metric.cthickening.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_2) δ E))
+Case conversion may be inaccurate. Consider using '#align metric.mem_cthickening_of_dist_le Metric.mem_cthickening_of_dist_leₓ'. -/
theorem mem_cthickening_of_dist_le {α : Type _} [PseudoMetricSpace α] (x y : α) (δ : ℝ) (E : Set α)
(h : y ∈ E) (h' : dist x y ≤ δ) : x ∈ cthickening δ E :=
by
@@ -1142,38 +1732,72 @@ theorem mem_cthickening_of_dist_le {α : Type _} [PseudoMetricSpace α] (x y :
exact ENNReal.ofReal_le_ofReal h'
#align metric.mem_cthickening_of_dist_le Metric.mem_cthickening_of_dist_le
+/- warning: metric.cthickening_eq_preimage_inf_edist -> Metric.cthickening_eq_preimage_infEdist is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (δ : Real) (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α _inst_1 δ E) (Set.preimage.{u1, 0} α ENNReal (fun (x : α) => EMetric.infEdist.{u1} α _inst_1 x E) (Set.Iic.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder)))) (ENNReal.ofReal δ)))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (δ : Real) (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α _inst_1 δ E) (Set.preimage.{u1, 0} α ENNReal (fun (x : α) => EMetric.infEdist.{u1} α _inst_1 x E) (Set.Iic.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal)))) (ENNReal.ofReal δ)))
+Case conversion may be inaccurate. Consider using '#align metric.cthickening_eq_preimage_inf_edist Metric.cthickening_eq_preimage_infEdistₓ'. -/
theorem cthickening_eq_preimage_infEdist (δ : ℝ) (E : Set α) :
cthickening δ E = (fun x => infEdist x E) ⁻¹' Iic (ENNReal.ofReal δ) :=
rfl
#align metric.cthickening_eq_preimage_inf_edist Metric.cthickening_eq_preimage_infEdist
+#print Metric.isClosed_cthickening /-
/-- The closed thickening is a closed set. -/
theorem isClosed_cthickening {δ : ℝ} {E : Set α} : IsClosed (cthickening δ E) :=
IsClosed.preimage continuous_infEdist isClosed_Iic
#align metric.is_closed_cthickening Metric.isClosed_cthickening
+-/
+#print Metric.cthickening_empty /-
/-- The closed thickening of the empty set is empty. -/
@[simp]
theorem cthickening_empty (δ : ℝ) : cthickening δ (∅ : Set α) = ∅ := by
simp only [cthickening, ENNReal.ofReal_ne_top, set_of_false, inf_edist_empty, top_le_iff]
#align metric.cthickening_empty Metric.cthickening_empty
+-/
+/- warning: metric.cthickening_of_nonpos -> Metric.cthickening_of_nonpos is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real}, (LE.le.{0} Real Real.hasLe δ (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))) -> (forall (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α _inst_1 δ E) (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real}, (LE.le.{0} Real Real.instLEReal δ (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))) -> (forall (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α _inst_1 δ E) (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E))
+Case conversion may be inaccurate. Consider using '#align metric.cthickening_of_nonpos Metric.cthickening_of_nonposₓ'. -/
theorem cthickening_of_nonpos {δ : ℝ} (hδ : δ ≤ 0) (E : Set α) : cthickening δ E = closure E :=
by
ext x
simp [mem_closure_iff_inf_edist_zero, cthickening, ENNReal.ofReal_eq_zero.2 hδ]
#align metric.cthickening_of_nonpos Metric.cthickening_of_nonpos
+/- warning: metric.cthickening_zero -> Metric.cthickening_zero is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α _inst_1 (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) E) (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α _inst_1 (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) E) (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E)
+Case conversion may be inaccurate. Consider using '#align metric.cthickening_zero Metric.cthickening_zeroₓ'. -/
/-- The closed thickening with radius zero is the closure of the set. -/
@[simp]
theorem cthickening_zero (E : Set α) : cthickening 0 E = closure E :=
cthickening_of_nonpos le_rfl E
#align metric.cthickening_zero Metric.cthickening_zero
+/- warning: metric.cthickening_max_zero -> Metric.cthickening_max_zero is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (δ : Real) (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α _inst_1 (LinearOrder.max.{0} Real Real.linearOrder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) E) (Metric.cthickening.{u1} α _inst_1 δ E)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (δ : Real) (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α _inst_1 (Max.max.{0} Real (LinearOrderedRing.toMax.{0} Real Real.instLinearOrderedRingReal) (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) E) (Metric.cthickening.{u1} α _inst_1 δ E)
+Case conversion may be inaccurate. Consider using '#align metric.cthickening_max_zero Metric.cthickening_max_zeroₓ'. -/
theorem cthickening_max_zero (δ : ℝ) (E : Set α) : cthickening (max 0 δ) E = cthickening δ E := by
cases le_total δ 0 <;> simp [cthickening_of_nonpos, *]
#align metric.cthickening_max_zero Metric.cthickening_max_zero
+/- warning: metric.cthickening_mono -> Metric.cthickening_mono is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ₁ : Real} {δ₂ : Real}, (LE.le.{0} Real Real.hasLe δ₁ δ₂) -> (forall (E : Set.{u1} α), HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) (Metric.cthickening.{u1} α _inst_1 δ₁ E) (Metric.cthickening.{u1} α _inst_1 δ₂ E))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ₁ : Real} {δ₂ : Real}, (LE.le.{0} Real Real.instLEReal δ₁ δ₂) -> (forall (E : Set.{u1} α), HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) (Metric.cthickening.{u1} α _inst_1 δ₁ E) (Metric.cthickening.{u1} α _inst_1 δ₂ E))
+Case conversion may be inaccurate. Consider using '#align metric.cthickening_mono Metric.cthickening_monoₓ'. -/
/-- The closed thickening `cthickening δ E` of a fixed subset `E` is an increasing function of
the thickening radius `δ`. -/
theorem cthickening_mono {δ₁ δ₂ : ℝ} (hle : δ₁ ≤ δ₂) (E : Set α) :
@@ -1181,6 +1805,12 @@ theorem cthickening_mono {δ₁ δ₂ : ℝ} (hle : δ₁ ≤ δ₂) (E : Set α
preimage_mono (Iic_subset_Iic.mpr (ENNReal.ofReal_le_ofReal hle))
#align metric.cthickening_mono Metric.cthickening_mono
+/- warning: metric.cthickening_singleton -> Metric.cthickening_singleton is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_2 : PseudoMetricSpace.{u1} α] (x : α) {δ : Real}, (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) -> (Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_2) δ (Singleton.singleton.{u1, u1} α (Set.{u1} α) (Set.hasSingleton.{u1} α) x)) (Metric.closedBall.{u1} α _inst_2 x δ))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_2 : PseudoMetricSpace.{u1} α] (x : α) {δ : Real}, (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) -> (Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_2) δ (Singleton.singleton.{u1, u1} α (Set.{u1} α) (Set.instSingletonSet.{u1} α) x)) (Metric.closedBall.{u1} α _inst_2 x δ))
+Case conversion may be inaccurate. Consider using '#align metric.cthickening_singleton Metric.cthickening_singletonₓ'. -/
@[simp]
theorem cthickening_singleton {α : Type _} [PseudoMetricSpace α] (x : α) {δ : ℝ} (hδ : 0 ≤ δ) :
cthickening δ ({x} : Set α) = closedBall x δ :=
@@ -1189,6 +1819,7 @@ theorem cthickening_singleton {α : Type _} [PseudoMetricSpace α] (x : α) {δ
simp [cthickening, edist_dist, ENNReal.ofReal_le_ofReal_iff hδ]
#align metric.cthickening_singleton Metric.cthickening_singleton
+#print Metric.closedBall_subset_cthickening_singleton /-
theorem closedBall_subset_cthickening_singleton {α : Type _} [PseudoMetricSpace α] (x : α) (δ : ℝ) :
closedBall x δ ⊆ cthickening δ ({x} : Set α) :=
by
@@ -1196,18 +1827,33 @@ theorem closedBall_subset_cthickening_singleton {α : Type _} [PseudoMetricSpace
· simp only [closed_ball_eq_empty.mpr hδ, empty_subset]
· simp only [cthickening_singleton x hδ]
#align metric.closed_ball_subset_cthickening_singleton Metric.closedBall_subset_cthickening_singleton
+-/
+#print Metric.cthickening_subset_of_subset /-
/-- The closed thickening `cthickening δ E` with a fixed thickening radius `δ` is
an increasing function of the subset `E`. -/
theorem cthickening_subset_of_subset (δ : ℝ) {E₁ E₂ : Set α} (h : E₁ ⊆ E₂) :
cthickening δ E₁ ⊆ cthickening δ E₂ := fun _ hx => le_trans (infEdist_anti h) hx
#align metric.cthickening_subset_of_subset Metric.cthickening_subset_of_subset
+-/
+/- warning: metric.cthickening_subset_thickening -> Metric.cthickening_subset_thickening is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ₁ : NNReal} {δ₂ : Real}, (LT.lt.{0} Real Real.hasLt ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) NNReal Real (HasLiftT.mk.{1, 1} NNReal Real (CoeTCₓ.coe.{1, 1} NNReal Real (coeBase.{1, 1} NNReal Real NNReal.Real.hasCoe))) δ₁) δ₂) -> (forall (E : Set.{u1} α), HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) (Metric.cthickening.{u1} α _inst_1 ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) NNReal Real (HasLiftT.mk.{1, 1} NNReal Real (CoeTCₓ.coe.{1, 1} NNReal Real (coeBase.{1, 1} NNReal Real NNReal.Real.hasCoe))) δ₁) E) (Metric.thickening.{u1} α _inst_1 δ₂ E))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ₁ : NNReal} {δ₂ : Real}, (LT.lt.{0} Real Real.instLTReal (NNReal.toReal δ₁) δ₂) -> (forall (E : Set.{u1} α), HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) (Metric.cthickening.{u1} α _inst_1 (NNReal.toReal δ₁) E) (Metric.thickening.{u1} α _inst_1 δ₂ E))
+Case conversion may be inaccurate. Consider using '#align metric.cthickening_subset_thickening Metric.cthickening_subset_thickeningₓ'. -/
theorem cthickening_subset_thickening {δ₁ : ℝ≥0} {δ₂ : ℝ} (hlt : (δ₁ : ℝ) < δ₂) (E : Set α) :
cthickening δ₁ E ⊆ thickening δ₂ E := fun _ hx =>
lt_of_le_of_lt hx ((ENNReal.ofReal_lt_ofReal_iff (lt_of_le_of_lt δ₁.Prop hlt)).mpr hlt)
#align metric.cthickening_subset_thickening Metric.cthickening_subset_thickening
+/- warning: metric.cthickening_subset_thickening' -> Metric.cthickening_subset_thickening' is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ₁ : Real} {δ₂ : Real}, (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ₂) -> (LT.lt.{0} Real Real.hasLt δ₁ δ₂) -> (forall (E : Set.{u1} α), HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) (Metric.cthickening.{u1} α _inst_1 δ₁ E) (Metric.thickening.{u1} α _inst_1 δ₂ E))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ₁ : Real} {δ₂ : Real}, (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ₂) -> (LT.lt.{0} Real Real.instLTReal δ₁ δ₂) -> (forall (E : Set.{u1} α), HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) (Metric.cthickening.{u1} α _inst_1 δ₁ E) (Metric.thickening.{u1} α _inst_1 δ₂ E))
+Case conversion may be inaccurate. Consider using '#align metric.cthickening_subset_thickening' Metric.cthickening_subset_thickening'ₓ'. -/
/-- The closed thickening `cthickening δ₁ E` is contained in the open thickening `thickening δ₂ E`
if the radius of the latter is positive and larger. -/
theorem cthickening_subset_thickening' {δ₁ δ₂ : ℝ} (δ₂_pos : 0 < δ₂) (hlt : δ₁ < δ₂) (E : Set α) :
@@ -1215,6 +1861,7 @@ theorem cthickening_subset_thickening' {δ₁ δ₂ : ℝ} (δ₂_pos : 0 < δ
lt_of_le_of_lt hx ((ENNReal.ofReal_lt_ofReal_iff δ₂_pos).mpr hlt)
#align metric.cthickening_subset_thickening' Metric.cthickening_subset_thickening'
+#print Metric.thickening_subset_cthickening /-
/-- The open thickening `thickening δ E` is contained in the closed thickening `cthickening δ E`
with the same radius. -/
theorem thickening_subset_cthickening (δ : ℝ) (E : Set α) : thickening δ E ⊆ cthickening δ E :=
@@ -1223,12 +1870,20 @@ theorem thickening_subset_cthickening (δ : ℝ) (E : Set α) : thickening δ E
rw [thickening, mem_set_of_eq] at hx
exact hx.le
#align metric.thickening_subset_cthickening Metric.thickening_subset_cthickening
+-/
+/- warning: metric.thickening_subset_cthickening_of_le -> Metric.thickening_subset_cthickening_of_le is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ₁ : Real} {δ₂ : Real}, (LE.le.{0} Real Real.hasLe δ₁ δ₂) -> (forall (E : Set.{u1} α), HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) (Metric.thickening.{u1} α _inst_1 δ₁ E) (Metric.cthickening.{u1} α _inst_1 δ₂ E))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ₁ : Real} {δ₂ : Real}, (LE.le.{0} Real Real.instLEReal δ₁ δ₂) -> (forall (E : Set.{u1} α), HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) (Metric.thickening.{u1} α _inst_1 δ₁ E) (Metric.cthickening.{u1} α _inst_1 δ₂ E))
+Case conversion may be inaccurate. Consider using '#align metric.thickening_subset_cthickening_of_le Metric.thickening_subset_cthickening_of_leₓ'. -/
theorem thickening_subset_cthickening_of_le {δ₁ δ₂ : ℝ} (hle : δ₁ ≤ δ₂) (E : Set α) :
thickening δ₁ E ⊆ cthickening δ₂ E :=
(thickening_subset_cthickening δ₁ E).trans (cthickening_mono hle E)
#align metric.thickening_subset_cthickening_of_le Metric.thickening_subset_cthickening_of_le
+#print Metric.Bounded.cthickening /-
theorem Bounded.cthickening {α : Type _} [PseudoMetricSpace α] {δ : ℝ} {E : Set α} (h : Bounded E) :
Bounded (cthickening δ E) :=
by
@@ -1238,25 +1893,38 @@ theorem Bounded.cthickening {α : Type _} [PseudoMetricSpace α] {δ : ℝ} {E :
cthickening_subset_thickening' (zero_lt_one.trans_le (le_max_right _ _))
((lt_add_one _).trans_le (le_max_left _ _)) _
#align metric.bounded.cthickening Metric.Bounded.cthickening
+-/
+#print Metric.thickening_subset_interior_cthickening /-
theorem thickening_subset_interior_cthickening (δ : ℝ) (E : Set α) :
thickening δ E ⊆ interior (cthickening δ E) :=
(subset_interior_iff_isOpen.mpr isOpen_thickening).trans
(interior_mono (thickening_subset_cthickening δ E))
#align metric.thickening_subset_interior_cthickening Metric.thickening_subset_interior_cthickening
+-/
+#print Metric.closure_thickening_subset_cthickening /-
theorem closure_thickening_subset_cthickening (δ : ℝ) (E : Set α) :
closure (thickening δ E) ⊆ cthickening δ E :=
(closure_mono (thickening_subset_cthickening δ E)).trans isClosed_cthickening.closure_subset
#align metric.closure_thickening_subset_cthickening Metric.closure_thickening_subset_cthickening
+-/
+#print Metric.closure_subset_cthickening /-
/-- The closed thickening of a set contains the closure of the set. -/
theorem closure_subset_cthickening (δ : ℝ) (E : Set α) : closure E ⊆ cthickening δ E :=
by
rw [← cthickening_of_nonpos (min_le_right δ 0)]
exact cthickening_mono (min_le_left δ 0) E
#align metric.closure_subset_cthickening Metric.closure_subset_cthickening
+-/
+/- warning: metric.closure_subset_thickening -> Metric.closure_subset_thickening is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real}, (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) -> (forall (E : Set.{u1} α), HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E) (Metric.thickening.{u1} α _inst_1 δ E))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real}, (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) -> (forall (E : Set.{u1} α), HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E) (Metric.thickening.{u1} α _inst_1 δ E))
+Case conversion may be inaccurate. Consider using '#align metric.closure_subset_thickening Metric.closure_subset_thickeningₓ'. -/
/-- The (open) thickening of a set contains the closure of the set. -/
theorem closure_subset_thickening {δ : ℝ} (δ_pos : 0 < δ) (E : Set α) :
closure E ⊆ thickening δ E := by
@@ -1264,42 +1932,78 @@ theorem closure_subset_thickening {δ : ℝ} (δ_pos : 0 < δ) (E : Set α) :
exact cthickening_subset_thickening' δ_pos δ_pos E
#align metric.closure_subset_thickening Metric.closure_subset_thickening
+/- warning: metric.self_subset_thickening -> Metric.self_subset_thickening is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real}, (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) -> (forall (E : Set.{u1} α), HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) E (Metric.thickening.{u1} α _inst_1 δ E))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real}, (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) -> (forall (E : Set.{u1} α), HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) E (Metric.thickening.{u1} α _inst_1 δ E))
+Case conversion may be inaccurate. Consider using '#align metric.self_subset_thickening Metric.self_subset_thickeningₓ'. -/
/-- A set is contained in its own (open) thickening. -/
theorem self_subset_thickening {δ : ℝ} (δ_pos : 0 < δ) (E : Set α) : E ⊆ thickening δ E :=
(@subset_closure _ _ E).trans (closure_subset_thickening δ_pos E)
#align metric.self_subset_thickening Metric.self_subset_thickening
+#print Metric.self_subset_cthickening /-
/-- A set is contained in its own closed thickening. -/
theorem self_subset_cthickening {δ : ℝ} (E : Set α) : E ⊆ cthickening δ E :=
subset_closure.trans (closure_subset_cthickening δ E)
#align metric.self_subset_cthickening Metric.self_subset_cthickening
+-/
+/- warning: metric.thickening_mem_nhds_set -> Metric.thickening_mem_nhdsSet is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (E : Set.{u1} α) {δ : Real}, (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) -> (Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) (Metric.thickening.{u1} α _inst_1 δ E) (nhdsSet.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (E : Set.{u1} α) {δ : Real}, (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) -> (Membership.mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (instMembershipSetFilter.{u1} α) (Metric.thickening.{u1} α _inst_1 δ E) (nhdsSet.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E))
+Case conversion may be inaccurate. Consider using '#align metric.thickening_mem_nhds_set Metric.thickening_mem_nhdsSetₓ'. -/
theorem thickening_mem_nhdsSet (E : Set α) {δ : ℝ} (hδ : 0 < δ) : thickening δ E ∈ 𝓝ˢ E :=
isOpen_thickening.mem_nhdsSet.2 <| self_subset_thickening hδ E
#align metric.thickening_mem_nhds_set Metric.thickening_mem_nhdsSet
+/- warning: metric.cthickening_mem_nhds_set -> Metric.cthickening_mem_nhdsSet is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (E : Set.{u1} α) {δ : Real}, (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) -> (Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) (Metric.cthickening.{u1} α _inst_1 δ E) (nhdsSet.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (E : Set.{u1} α) {δ : Real}, (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) -> (Membership.mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (instMembershipSetFilter.{u1} α) (Metric.cthickening.{u1} α _inst_1 δ E) (nhdsSet.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E))
+Case conversion may be inaccurate. Consider using '#align metric.cthickening_mem_nhds_set Metric.cthickening_mem_nhdsSetₓ'. -/
theorem cthickening_mem_nhdsSet (E : Set α) {δ : ℝ} (hδ : 0 < δ) : cthickening δ E ∈ 𝓝ˢ E :=
mem_of_superset (thickening_mem_nhdsSet E hδ) (thickening_subset_cthickening _ _)
#align metric.cthickening_mem_nhds_set Metric.cthickening_mem_nhdsSet
+#print Metric.thickening_union /-
@[simp]
theorem thickening_union (δ : ℝ) (s t : Set α) :
thickening δ (s ∪ t) = thickening δ s ∪ thickening δ t := by
simp_rw [thickening, inf_edist_union, inf_eq_min, min_lt_iff, set_of_or]
#align metric.thickening_union Metric.thickening_union
+-/
+#print Metric.cthickening_union /-
@[simp]
theorem cthickening_union (δ : ℝ) (s t : Set α) :
cthickening δ (s ∪ t) = cthickening δ s ∪ cthickening δ t := by
simp_rw [cthickening, inf_edist_union, inf_eq_min, min_le_iff, set_of_or]
#align metric.cthickening_union Metric.cthickening_union
+-/
+/- warning: metric.thickening_Union -> Metric.thickening_unionᵢ is a dubious translation:
+lean 3 declaration is
+ forall {ι : Sort.{u2}} {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (δ : Real) (f : ι -> (Set.{u1} α)), Eq.{succ u1} (Set.{u1} α) (Metric.thickening.{u1} α _inst_1 δ (Set.unionᵢ.{u1, u2} α ι (fun (i : ι) => f i))) (Set.unionᵢ.{u1, u2} α ι (fun (i : ι) => Metric.thickening.{u1} α _inst_1 δ (f i)))
+but is expected to have type
+ forall {ι : Sort.{u1}} {α : Type.{u2}} [_inst_1 : PseudoEMetricSpace.{u2} α] (δ : Real) (f : ι -> (Set.{u2} α)), Eq.{succ u2} (Set.{u2} α) (Metric.thickening.{u2} α _inst_1 δ (Set.unionᵢ.{u2, u1} α ι (fun (i : ι) => f i))) (Set.unionᵢ.{u2, u1} α ι (fun (i : ι) => Metric.thickening.{u2} α _inst_1 δ (f i)))
+Case conversion may be inaccurate. Consider using '#align metric.thickening_Union Metric.thickening_unionᵢₓ'. -/
@[simp]
theorem thickening_unionᵢ (δ : ℝ) (f : ι → Set α) :
thickening δ (⋃ i, f i) = ⋃ i, thickening δ (f i) := by
simp_rw [thickening, inf_edist_Union, infᵢ_lt_iff, set_of_exists]
#align metric.thickening_Union Metric.thickening_unionᵢ
+/- warning: metric.ediam_cthickening_le -> Metric.ediam_cthickening_le is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} (ε : NNReal), LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.diam.{u1} α _inst_1 (Metric.cthickening.{u1} α _inst_1 ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) NNReal Real (HasLiftT.mk.{1, 1} NNReal Real (CoeTCₓ.coe.{1, 1} NNReal Real (coeBase.{1, 1} NNReal Real NNReal.Real.hasCoe))) ε) s)) (HAdd.hAdd.{0, 0, 0} ENNReal ENNReal ENNReal (instHAdd.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring)))))))) (EMetric.diam.{u1} α _inst_1 s) (HMul.hMul.{0, 0, 0} ENNReal ENNReal ENNReal (instHMul.{0} ENNReal (Distrib.toHasMul.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring)))))))) (OfNat.ofNat.{0} ENNReal 2 (OfNat.mk.{0} ENNReal 2 (bit0.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring))))))) (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne)))))) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) NNReal ENNReal (HasLiftT.mk.{1, 1} NNReal ENNReal (CoeTCₓ.coe.{1, 1} NNReal ENNReal (coeBase.{1, 1} NNReal ENNReal ENNReal.hasCoe))) ε)))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} (ε : NNReal), LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.diam.{u1} α _inst_1 (Metric.cthickening.{u1} α _inst_1 (NNReal.toReal ε) s)) (HAdd.hAdd.{0, 0, 0} ENNReal ENNReal ENNReal (instHAdd.{0} ENNReal (Distrib.toAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal)))))))) (EMetric.diam.{u1} α _inst_1 s) (HMul.hMul.{0, 0, 0} ENNReal ENNReal ENNReal (instHMul.{0} ENNReal (CanonicallyOrderedCommSemiring.toMul.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal)) (OfNat.ofNat.{0} ENNReal 2 (instOfNat.{0} ENNReal 2 (CanonicallyOrderedCommSemiring.toNatCast.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal) (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))))) (ENNReal.some ε)))
+Case conversion may be inaccurate. Consider using '#align metric.ediam_cthickening_le Metric.ediam_cthickening_leₓ'. -/
theorem ediam_cthickening_le (ε : ℝ≥0) : EMetric.diam (cthickening ε s) ≤ EMetric.diam s + 2 * ε :=
by
refine' diam_le fun x hx y hy => ENNReal.le_of_forall_pos_le_add fun δ hδ _ => _
@@ -1322,10 +2026,22 @@ theorem ediam_cthickening_le (ε : ℝ≥0) : EMetric.diam (cthickening ε s)
abel
#align metric.ediam_cthickening_le Metric.ediam_cthickening_le
+/- warning: metric.ediam_thickening_le -> Metric.ediam_thickening_le is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} (ε : NNReal), LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.diam.{u1} α _inst_1 (Metric.thickening.{u1} α _inst_1 ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) NNReal Real (HasLiftT.mk.{1, 1} NNReal Real (CoeTCₓ.coe.{1, 1} NNReal Real (coeBase.{1, 1} NNReal Real NNReal.Real.hasCoe))) ε) s)) (HAdd.hAdd.{0, 0, 0} ENNReal ENNReal ENNReal (instHAdd.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring)))))))) (EMetric.diam.{u1} α _inst_1 s) (HMul.hMul.{0, 0, 0} ENNReal ENNReal ENNReal (instHMul.{0} ENNReal (Distrib.toHasMul.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring)))))))) (OfNat.ofNat.{0} ENNReal 2 (OfNat.mk.{0} ENNReal 2 (bit0.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring))))))) (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne)))))) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) NNReal ENNReal (HasLiftT.mk.{1, 1} NNReal ENNReal (CoeTCₓ.coe.{1, 1} NNReal ENNReal (coeBase.{1, 1} NNReal ENNReal ENNReal.hasCoe))) ε)))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} (ε : NNReal), LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.diam.{u1} α _inst_1 (Metric.thickening.{u1} α _inst_1 (NNReal.toReal ε) s)) (HAdd.hAdd.{0, 0, 0} ENNReal ENNReal ENNReal (instHAdd.{0} ENNReal (Distrib.toAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal)))))))) (EMetric.diam.{u1} α _inst_1 s) (HMul.hMul.{0, 0, 0} ENNReal ENNReal ENNReal (instHMul.{0} ENNReal (CanonicallyOrderedCommSemiring.toMul.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal)) (OfNat.ofNat.{0} ENNReal 2 (instOfNat.{0} ENNReal 2 (CanonicallyOrderedCommSemiring.toNatCast.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal) (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))))) (ENNReal.some ε)))
+Case conversion may be inaccurate. Consider using '#align metric.ediam_thickening_le Metric.ediam_thickening_leₓ'. -/
theorem ediam_thickening_le (ε : ℝ≥0) : EMetric.diam (thickening ε s) ≤ EMetric.diam s + 2 * ε :=
(EMetric.diam_mono <| thickening_subset_cthickening _ _).trans <| ediam_cthickening_le _
#align metric.ediam_thickening_le Metric.ediam_thickening_le
+/- warning: metric.diam_cthickening_le -> Metric.diam_cthickening_le is a dubious translation:
+lean 3 declaration is
+ forall {ε : Real} {α : Type.{u1}} [_inst_2 : PseudoMetricSpace.{u1} α] (s : Set.{u1} α), (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) ε) -> (LE.le.{0} Real Real.hasLe (Metric.diam.{u1} α _inst_2 (Metric.cthickening.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_2) ε s)) (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.hasAdd) (Metric.diam.{u1} α _inst_2 s) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) (OfNat.ofNat.{0} Real 2 (OfNat.mk.{0} Real 2 (bit0.{0} Real Real.hasAdd (One.one.{0} Real Real.hasOne)))) ε)))
+but is expected to have type
+ forall {ε : Real} {α : Type.{u1}} [_inst_2 : PseudoMetricSpace.{u1} α] (s : Set.{u1} α), (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) ε) -> (LE.le.{0} Real Real.instLEReal (Metric.diam.{u1} α _inst_2 (Metric.cthickening.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_2) ε s)) (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.instAddReal) (Metric.diam.{u1} α _inst_2 s) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) (OfNat.ofNat.{0} Real 2 (instOfNat.{0} Real 2 Real.natCast (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))))) ε)))
+Case conversion may be inaccurate. Consider using '#align metric.diam_cthickening_le Metric.diam_cthickening_leₓ'. -/
theorem diam_cthickening_le {α : Type _} [PseudoMetricSpace α] (s : Set α) (hε : 0 ≤ ε) :
diam (cthickening ε s) ≤ diam s + 2 * ε :=
by
@@ -1342,6 +2058,12 @@ theorem diam_cthickening_le {α : Type _} [PseudoMetricSpace α] (s : Set α) (h
positivity
#align metric.diam_cthickening_le Metric.diam_cthickening_le
+/- warning: metric.diam_thickening_le -> Metric.diam_thickening_le is a dubious translation:
+lean 3 declaration is
+ forall {ε : Real} {α : Type.{u1}} [_inst_2 : PseudoMetricSpace.{u1} α] (s : Set.{u1} α), (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) ε) -> (LE.le.{0} Real Real.hasLe (Metric.diam.{u1} α _inst_2 (Metric.thickening.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_2) ε s)) (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.hasAdd) (Metric.diam.{u1} α _inst_2 s) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) (OfNat.ofNat.{0} Real 2 (OfNat.mk.{0} Real 2 (bit0.{0} Real Real.hasAdd (One.one.{0} Real Real.hasOne)))) ε)))
+but is expected to have type
+ forall {ε : Real} {α : Type.{u1}} [_inst_2 : PseudoMetricSpace.{u1} α] (s : Set.{u1} α), (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) ε) -> (LE.le.{0} Real Real.instLEReal (Metric.diam.{u1} α _inst_2 (Metric.thickening.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_2) ε s)) (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.instAddReal) (Metric.diam.{u1} α _inst_2 s) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) (OfNat.ofNat.{0} Real 2 (instOfNat.{0} Real 2 Real.natCast (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))))) ε)))
+Case conversion may be inaccurate. Consider using '#align metric.diam_thickening_le Metric.diam_thickening_leₓ'. -/
theorem diam_thickening_le {α : Type _} [PseudoMetricSpace α] (s : Set α) (hε : 0 ≤ ε) :
diam (thickening ε s) ≤ diam s + 2 * ε :=
by
@@ -1356,18 +2078,28 @@ theorem diam_thickening_le {α : Type _} [PseudoMetricSpace α] (s : Set α) (h
positivity
#align metric.diam_thickening_le Metric.diam_thickening_le
+#print Metric.thickening_closure /-
@[simp]
theorem thickening_closure : thickening δ (closure s) = thickening δ s := by
simp_rw [thickening, inf_edist_closure]
#align metric.thickening_closure Metric.thickening_closure
+-/
+#print Metric.cthickening_closure /-
@[simp]
theorem cthickening_closure : cthickening δ (closure s) = cthickening δ s := by
simp_rw [cthickening, inf_edist_closure]
#align metric.cthickening_closure Metric.cthickening_closure
+-/
open ENNReal
+/- warning: disjoint.exists_thickenings -> Disjoint.exists_thickenings is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (Disjoint.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} (Set.{u1} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α))) s t) -> (IsCompact.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) s) -> (IsClosed.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) t) -> (Exists.{1} Real (fun (δ : Real) => And (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) (Disjoint.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} (Set.{u1} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α))) (Metric.thickening.{u1} α _inst_1 δ s) (Metric.thickening.{u1} α _inst_1 δ t))))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (Disjoint.{u1} (Set.{u1} α) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) (BoundedOrder.toOrderBot.{u1} (Set.{u1} α) (Preorder.toLE.{u1} (Set.{u1} α) (PartialOrder.toPreorder.{u1} (Set.{u1} α) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))))) (CompleteLattice.toBoundedOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) s t) -> (IsCompact.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) s) -> (IsClosed.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) t) -> (Exists.{1} Real (fun (δ : Real) => And (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) (Disjoint.{u1} (Set.{u1} α) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) (BoundedOrder.toOrderBot.{u1} (Set.{u1} α) (Preorder.toLE.{u1} (Set.{u1} α) (PartialOrder.toPreorder.{u1} (Set.{u1} α) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))))) (CompleteLattice.toBoundedOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) (Metric.thickening.{u1} α _inst_1 δ s) (Metric.thickening.{u1} α _inst_1 δ t))))
+Case conversion may be inaccurate. Consider using '#align disjoint.exists_thickenings Disjoint.exists_thickeningsₓ'. -/
theorem Disjoint.exists_thickenings (hst : Disjoint s t) (hs : IsCompact s) (ht : IsClosed t) :
∃ δ, 0 < δ ∧ Disjoint (thickening δ s) (thickening δ t) :=
by
@@ -1387,6 +2119,12 @@ theorem Disjoint.exists_thickenings (hst : Disjoint s t) (hs : IsCompact s) (ht
#align disjoint.exists_thickenings Disjoint.exists_thickenings
+/- warning: disjoint.exists_cthickenings -> Disjoint.exists_cthickenings is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (Disjoint.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} (Set.{u1} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α))) s t) -> (IsCompact.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) s) -> (IsClosed.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) t) -> (Exists.{1} Real (fun (δ : Real) => And (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) (Disjoint.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} (Set.{u1} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α))) (Metric.cthickening.{u1} α _inst_1 δ s) (Metric.cthickening.{u1} α _inst_1 δ t))))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (Disjoint.{u1} (Set.{u1} α) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) (BoundedOrder.toOrderBot.{u1} (Set.{u1} α) (Preorder.toLE.{u1} (Set.{u1} α) (PartialOrder.toPreorder.{u1} (Set.{u1} α) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))))) (CompleteLattice.toBoundedOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) s t) -> (IsCompact.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) s) -> (IsClosed.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) t) -> (Exists.{1} Real (fun (δ : Real) => And (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) (Disjoint.{u1} (Set.{u1} α) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) (BoundedOrder.toOrderBot.{u1} (Set.{u1} α) (Preorder.toLE.{u1} (Set.{u1} α) (PartialOrder.toPreorder.{u1} (Set.{u1} α) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))))) (CompleteLattice.toBoundedOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) (Metric.cthickening.{u1} α _inst_1 δ s) (Metric.cthickening.{u1} α _inst_1 δ t))))
+Case conversion may be inaccurate. Consider using '#align disjoint.exists_cthickenings Disjoint.exists_cthickeningsₓ'. -/
theorem Disjoint.exists_cthickenings (hst : Disjoint s t) (hs : IsCompact s) (ht : IsClosed t) :
∃ δ, 0 < δ ∧ Disjoint (cthickening δ s) (cthickening δ t) :=
by
@@ -1395,30 +2133,60 @@ theorem Disjoint.exists_cthickenings (hst : Disjoint s t) (hs : IsCompact s) (ht
exact cthickening_subset_thickening' hδ (half_lt_self hδ) _
#align disjoint.exists_cthickenings Disjoint.exists_cthickenings
+/- warning: is_compact.exists_cthickening_subset_open -> IsCompact.exists_cthickening_subset_open is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (IsCompact.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) s) -> (IsOpen.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) t) -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) s t) -> (Exists.{1} Real (fun (δ : Real) => And (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) (Metric.cthickening.{u1} α _inst_1 δ s) t)))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (IsCompact.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) s) -> (IsOpen.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) t) -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) s t) -> (Exists.{1} Real (fun (δ : Real) => And (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) (Metric.cthickening.{u1} α _inst_1 δ s) t)))
+Case conversion may be inaccurate. Consider using '#align is_compact.exists_cthickening_subset_open IsCompact.exists_cthickening_subset_openₓ'. -/
theorem IsCompact.exists_cthickening_subset_open (hs : IsCompact s) (ht : IsOpen t) (hst : s ⊆ t) :
∃ δ, 0 < δ ∧ cthickening δ s ⊆ t :=
(hst.disjoint_compl_right.exists_cthickenings hs ht.isClosed_compl).imp fun δ h =>
⟨h.1, disjoint_compl_right_iff_subset.1 <| h.2.mono_right <| self_subset_cthickening _⟩
#align is_compact.exists_cthickening_subset_open IsCompact.exists_cthickening_subset_open
+/- warning: is_compact.exists_thickening_subset_open -> IsCompact.exists_thickening_subset_open is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (IsCompact.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) s) -> (IsOpen.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) t) -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) s t) -> (Exists.{1} Real (fun (δ : Real) => And (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) (Metric.thickening.{u1} α _inst_1 δ s) t)))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α}, (IsCompact.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) s) -> (IsOpen.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) t) -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) s t) -> (Exists.{1} Real (fun (δ : Real) => And (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) (Metric.thickening.{u1} α _inst_1 δ s) t)))
+Case conversion may be inaccurate. Consider using '#align is_compact.exists_thickening_subset_open IsCompact.exists_thickening_subset_openₓ'. -/
theorem IsCompact.exists_thickening_subset_open (hs : IsCompact s) (ht : IsOpen t) (hst : s ⊆ t) :
∃ δ, 0 < δ ∧ thickening δ s ⊆ t :=
let ⟨δ, h₀, hδ⟩ := hs.exists_cthickening_subset_open ht hst
⟨δ, h₀, (thickening_subset_cthickening _ _).trans hδ⟩
#align is_compact.exists_thickening_subset_open IsCompact.exists_thickening_subset_open
+/- warning: metric.has_basis_nhds_set_thickening -> Metric.hasBasis_nhdsSet_thickening is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {K : Set.{u1} α}, (IsCompact.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) K) -> (Filter.HasBasis.{u1, 1} α Real (nhdsSet.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) K) (fun (δ : Real) => LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) (fun (δ : Real) => Metric.thickening.{u1} α _inst_1 δ K))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {K : Set.{u1} α}, (IsCompact.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) K) -> (Filter.HasBasis.{u1, 1} α Real (nhdsSet.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) K) (fun (δ : Real) => LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) (fun (δ : Real) => Metric.thickening.{u1} α _inst_1 δ K))
+Case conversion may be inaccurate. Consider using '#align metric.has_basis_nhds_set_thickening Metric.hasBasis_nhdsSet_thickeningₓ'. -/
theorem hasBasis_nhdsSet_thickening {K : Set α} (hK : IsCompact K) :
(𝓝ˢ K).HasBasis (fun δ : ℝ => 0 < δ) fun δ => thickening δ K :=
(hasBasis_nhdsSet K).to_has_basis' (fun U hU => hK.exists_thickening_subset_open hU.1 hU.2)
fun _ => thickening_mem_nhdsSet K
#align metric.has_basis_nhds_set_thickening Metric.hasBasis_nhdsSet_thickening
+/- warning: metric.has_basis_nhds_set_cthickening -> Metric.hasBasis_nhdsSet_cthickening is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {K : Set.{u1} α}, (IsCompact.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) K) -> (Filter.HasBasis.{u1, 1} α Real (nhdsSet.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) K) (fun (δ : Real) => LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) (fun (δ : Real) => Metric.cthickening.{u1} α _inst_1 δ K))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {K : Set.{u1} α}, (IsCompact.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) K) -> (Filter.HasBasis.{u1, 1} α Real (nhdsSet.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) K) (fun (δ : Real) => LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) (fun (δ : Real) => Metric.cthickening.{u1} α _inst_1 δ K))
+Case conversion may be inaccurate. Consider using '#align metric.has_basis_nhds_set_cthickening Metric.hasBasis_nhdsSet_cthickeningₓ'. -/
theorem hasBasis_nhdsSet_cthickening {K : Set α} (hK : IsCompact K) :
(𝓝ˢ K).HasBasis (fun δ : ℝ => 0 < δ) fun δ => cthickening δ K :=
(hasBasis_nhdsSet K).to_has_basis' (fun U hU => hK.exists_cthickening_subset_open hU.1 hU.2)
fun _ => cthickening_mem_nhdsSet K
#align metric.has_basis_nhds_set_cthickening Metric.hasBasis_nhdsSet_cthickening
+/- warning: metric.cthickening_eq_Inter_cthickening' -> Metric.cthickening_eq_interᵢ_cthickening' is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real} (s : Set.{0} Real), (HasSubset.Subset.{0} (Set.{0} Real) (Set.hasSubset.{0} Real) s (Set.Ioi.{0} Real Real.preorder δ)) -> (forall (ε : Real), (LT.lt.{0} Real Real.hasLt δ ε) -> (Set.Nonempty.{0} Real (Inter.inter.{0} (Set.{0} Real) (Set.hasInter.{0} Real) s (Set.Ioc.{0} Real Real.preorder δ ε)))) -> (forall (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α _inst_1 δ E) (Set.interᵢ.{u1, 1} α Real (fun (ε : Real) => Set.interᵢ.{u1, 0} α (Membership.Mem.{0, 0} Real (Set.{0} Real) (Set.hasMem.{0} Real) ε s) (fun (H : Membership.Mem.{0, 0} Real (Set.{0} Real) (Set.hasMem.{0} Real) ε s) => Metric.cthickening.{u1} α _inst_1 ε E))))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real} (s : Set.{0} Real), (HasSubset.Subset.{0} (Set.{0} Real) (Set.instHasSubsetSet.{0} Real) s (Set.Ioi.{0} Real Real.instPreorderReal δ)) -> (forall (ε : Real), (LT.lt.{0} Real Real.instLTReal δ ε) -> (Set.Nonempty.{0} Real (Inter.inter.{0} (Set.{0} Real) (Set.instInterSet.{0} Real) s (Set.Ioc.{0} Real Real.instPreorderReal δ ε)))) -> (forall (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α _inst_1 δ E) (Set.interᵢ.{u1, 1} α Real (fun (ε : Real) => Set.interᵢ.{u1, 0} α (Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) ε s) (fun (H : Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) ε s) => Metric.cthickening.{u1} α _inst_1 ε E))))
+Case conversion may be inaccurate. Consider using '#align metric.cthickening_eq_Inter_cthickening' Metric.cthickening_eq_interᵢ_cthickening'ₓ'. -/
theorem cthickening_eq_interᵢ_cthickening' {δ : ℝ} (s : Set ℝ) (hsδ : s ⊆ Ioi δ)
(hs : ∀ ε, δ < ε → (s ∩ Ioc δ ε).Nonempty) (E : Set α) :
cthickening δ E = ⋂ ε ∈ s, cthickening ε E :=
@@ -1436,6 +2204,12 @@ theorem cthickening_eq_interᵢ_cthickening' {δ : ℝ} (s : Set ℝ) (hsδ : s
exact ENNReal.ofReal_add_le
#align metric.cthickening_eq_Inter_cthickening' Metric.cthickening_eq_interᵢ_cthickening'
+/- warning: metric.cthickening_eq_Inter_cthickening -> Metric.cthickening_eq_interᵢ_cthickening is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real} (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α _inst_1 δ E) (Set.interᵢ.{u1, 1} α Real (fun (ε : Real) => Set.interᵢ.{u1, 0} α (LT.lt.{0} Real Real.hasLt δ ε) (fun (h : LT.lt.{0} Real Real.hasLt δ ε) => Metric.cthickening.{u1} α _inst_1 ε E)))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real} (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α _inst_1 δ E) (Set.interᵢ.{u1, 1} α Real (fun (ε : Real) => Set.interᵢ.{u1, 0} α (LT.lt.{0} Real Real.instLTReal δ ε) (fun (h : LT.lt.{0} Real Real.instLTReal δ ε) => Metric.cthickening.{u1} α _inst_1 ε E)))
+Case conversion may be inaccurate. Consider using '#align metric.cthickening_eq_Inter_cthickening Metric.cthickening_eq_interᵢ_cthickeningₓ'. -/
theorem cthickening_eq_interᵢ_cthickening {δ : ℝ} (E : Set α) :
cthickening δ E = ⋂ (ε : ℝ) (h : δ < ε), cthickening ε E :=
by
@@ -1444,6 +2218,12 @@ theorem cthickening_eq_interᵢ_cthickening {δ : ℝ} (E : Set α) :
exact fun _ hε => nonempty_Ioc.mpr hε
#align metric.cthickening_eq_Inter_cthickening Metric.cthickening_eq_interᵢ_cthickening
+/- warning: metric.cthickening_eq_Inter_thickening' -> Metric.cthickening_eq_interᵢ_thickening' is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real}, (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) -> (forall (s : Set.{0} Real), (HasSubset.Subset.{0} (Set.{0} Real) (Set.hasSubset.{0} Real) s (Set.Ioi.{0} Real Real.preorder δ)) -> (forall (ε : Real), (LT.lt.{0} Real Real.hasLt δ ε) -> (Set.Nonempty.{0} Real (Inter.inter.{0} (Set.{0} Real) (Set.hasInter.{0} Real) s (Set.Ioc.{0} Real Real.preorder δ ε)))) -> (forall (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α _inst_1 δ E) (Set.interᵢ.{u1, 1} α Real (fun (ε : Real) => Set.interᵢ.{u1, 0} α (Membership.Mem.{0, 0} Real (Set.{0} Real) (Set.hasMem.{0} Real) ε s) (fun (H : Membership.Mem.{0, 0} Real (Set.{0} Real) (Set.hasMem.{0} Real) ε s) => Metric.thickening.{u1} α _inst_1 ε E)))))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real}, (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) -> (forall (s : Set.{0} Real), (HasSubset.Subset.{0} (Set.{0} Real) (Set.instHasSubsetSet.{0} Real) s (Set.Ioi.{0} Real Real.instPreorderReal δ)) -> (forall (ε : Real), (LT.lt.{0} Real Real.instLTReal δ ε) -> (Set.Nonempty.{0} Real (Inter.inter.{0} (Set.{0} Real) (Set.instInterSet.{0} Real) s (Set.Ioc.{0} Real Real.instPreorderReal δ ε)))) -> (forall (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α _inst_1 δ E) (Set.interᵢ.{u1, 1} α Real (fun (ε : Real) => Set.interᵢ.{u1, 0} α (Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) ε s) (fun (H : Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) ε s) => Metric.thickening.{u1} α _inst_1 ε E)))))
+Case conversion may be inaccurate. Consider using '#align metric.cthickening_eq_Inter_thickening' Metric.cthickening_eq_interᵢ_thickening'ₓ'. -/
theorem cthickening_eq_interᵢ_thickening' {δ : ℝ} (δ_nn : 0 ≤ δ) (s : Set ℝ) (hsδ : s ⊆ Ioi δ)
(hs : ∀ ε, δ < ε → (s ∩ Ioc δ ε).Nonempty) (E : Set α) :
cthickening δ E = ⋂ ε ∈ s, thickening ε E :=
@@ -1456,6 +2236,12 @@ theorem cthickening_eq_interᵢ_thickening' {δ : ℝ} (δ_nn : 0 ≤ δ) (s : S
exact Inter₂_mono fun ε hε => thickening_subset_cthickening ε E
#align metric.cthickening_eq_Inter_thickening' Metric.cthickening_eq_interᵢ_thickening'
+/- warning: metric.cthickening_eq_Inter_thickening -> Metric.cthickening_eq_interᵢ_thickening is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real}, (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) -> (forall (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α _inst_1 δ E) (Set.interᵢ.{u1, 1} α Real (fun (ε : Real) => Set.interᵢ.{u1, 0} α (LT.lt.{0} Real Real.hasLt δ ε) (fun (h : LT.lt.{0} Real Real.hasLt δ ε) => Metric.thickening.{u1} α _inst_1 ε E))))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real}, (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) -> (forall (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α _inst_1 δ E) (Set.interᵢ.{u1, 1} α Real (fun (ε : Real) => Set.interᵢ.{u1, 0} α (LT.lt.{0} Real Real.instLTReal δ ε) (fun (h : LT.lt.{0} Real Real.instLTReal δ ε) => Metric.thickening.{u1} α _inst_1 ε E))))
+Case conversion may be inaccurate. Consider using '#align metric.cthickening_eq_Inter_thickening Metric.cthickening_eq_interᵢ_thickeningₓ'. -/
theorem cthickening_eq_interᵢ_thickening {δ : ℝ} (δ_nn : 0 ≤ δ) (E : Set α) :
cthickening δ E = ⋂ (ε : ℝ) (h : δ < ε), thickening ε E :=
by
@@ -1464,6 +2250,12 @@ theorem cthickening_eq_interᵢ_thickening {δ : ℝ} (δ_nn : 0 ≤ δ) (E : Se
exact fun _ hε => nonempty_Ioc.mpr hε
#align metric.cthickening_eq_Inter_thickening Metric.cthickening_eq_interᵢ_thickening
+/- warning: metric.cthickening_eq_Inter_thickening'' -> Metric.cthickening_eq_interᵢ_thickening'' is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (δ : Real) (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α _inst_1 δ E) (Set.interᵢ.{u1, 1} α Real (fun (ε : Real) => Set.interᵢ.{u1, 0} α (LT.lt.{0} Real Real.hasLt (LinearOrder.max.{0} Real Real.linearOrder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) ε) (fun (h : LT.lt.{0} Real Real.hasLt (LinearOrder.max.{0} Real Real.linearOrder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) ε) => Metric.thickening.{u1} α _inst_1 ε E)))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (δ : Real) (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α _inst_1 δ E) (Set.interᵢ.{u1, 1} α Real (fun (ε : Real) => Set.interᵢ.{u1, 0} α (LT.lt.{0} Real Real.instLTReal (Max.max.{0} Real (LinearOrderedRing.toMax.{0} Real Real.instLinearOrderedRingReal) (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) ε) (fun (h : LT.lt.{0} Real Real.instLTReal (Max.max.{0} Real (LinearOrderedRing.toMax.{0} Real Real.instLinearOrderedRingReal) (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) ε) => Metric.thickening.{u1} α _inst_1 ε E)))
+Case conversion may be inaccurate. Consider using '#align metric.cthickening_eq_Inter_thickening'' Metric.cthickening_eq_interᵢ_thickening''ₓ'. -/
theorem cthickening_eq_interᵢ_thickening'' (δ : ℝ) (E : Set α) :
cthickening δ E = ⋂ (ε : ℝ) (h : max 0 δ < ε), thickening ε E :=
by
@@ -1471,6 +2263,12 @@ theorem cthickening_eq_interᵢ_thickening'' (δ : ℝ) (E : Set α) :
exact le_max_left _ _
#align metric.cthickening_eq_Inter_thickening'' Metric.cthickening_eq_interᵢ_thickening''
+/- warning: metric.closure_eq_Inter_cthickening' -> Metric.closure_eq_interᵢ_cthickening' is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (E : Set.{u1} α) (s : Set.{0} Real), (forall (ε : Real), (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) ε) -> (Set.Nonempty.{0} Real (Inter.inter.{0} (Set.{0} Real) (Set.hasInter.{0} Real) s (Set.Ioc.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) ε)))) -> (Eq.{succ u1} (Set.{u1} α) (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E) (Set.interᵢ.{u1, 1} α Real (fun (δ : Real) => Set.interᵢ.{u1, 0} α (Membership.Mem.{0, 0} Real (Set.{0} Real) (Set.hasMem.{0} Real) δ s) (fun (H : Membership.Mem.{0, 0} Real (Set.{0} Real) (Set.hasMem.{0} Real) δ s) => Metric.cthickening.{u1} α _inst_1 δ E))))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (E : Set.{u1} α) (s : Set.{0} Real), (forall (ε : Real), (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) ε) -> (Set.Nonempty.{0} Real (Inter.inter.{0} (Set.{0} Real) (Set.instInterSet.{0} Real) s (Set.Ioc.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) ε)))) -> (Eq.{succ u1} (Set.{u1} α) (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E) (Set.interᵢ.{u1, 1} α Real (fun (δ : Real) => Set.interᵢ.{u1, 0} α (Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) δ s) (fun (H : Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) δ s) => Metric.cthickening.{u1} α _inst_1 δ E))))
+Case conversion may be inaccurate. Consider using '#align metric.closure_eq_Inter_cthickening' Metric.closure_eq_interᵢ_cthickening'ₓ'. -/
/-- The closure of a set equals the intersection of its closed thickenings of positive radii
accumulating at zero. -/
theorem closure_eq_interᵢ_cthickening' (E : Set α) (s : Set ℝ)
@@ -1487,6 +2285,12 @@ theorem closure_eq_interᵢ_cthickening' (E : Set α) (s : Set ℝ)
exact bInter_subset_of_mem hδs
#align metric.closure_eq_Inter_cthickening' Metric.closure_eq_interᵢ_cthickening'
+/- warning: metric.closure_eq_Inter_cthickening -> Metric.closure_eq_interᵢ_cthickening is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E) (Set.interᵢ.{u1, 1} α Real (fun (δ : Real) => Set.interᵢ.{u1, 0} α (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) (fun (h : LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) => Metric.cthickening.{u1} α _inst_1 δ E)))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E) (Set.interᵢ.{u1, 1} α Real (fun (δ : Real) => Set.interᵢ.{u1, 0} α (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) (fun (h : LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) => Metric.cthickening.{u1} α _inst_1 δ E)))
+Case conversion may be inaccurate. Consider using '#align metric.closure_eq_Inter_cthickening Metric.closure_eq_interᵢ_cthickeningₓ'. -/
/-- The closure of a set equals the intersection of its closed thickenings of positive radii. -/
theorem closure_eq_interᵢ_cthickening (E : Set α) :
closure E = ⋂ (δ : ℝ) (h : 0 < δ), cthickening δ E :=
@@ -1495,6 +2299,12 @@ theorem closure_eq_interᵢ_cthickening (E : Set α) :
exact cthickening_eq_Inter_cthickening E
#align metric.closure_eq_Inter_cthickening Metric.closure_eq_interᵢ_cthickening
+/- warning: metric.closure_eq_Inter_thickening' -> Metric.closure_eq_interᵢ_thickening' is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (E : Set.{u1} α) (s : Set.{0} Real), (HasSubset.Subset.{0} (Set.{0} Real) (Set.hasSubset.{0} Real) s (Set.Ioi.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))) -> (forall (ε : Real), (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) ε) -> (Set.Nonempty.{0} Real (Inter.inter.{0} (Set.{0} Real) (Set.hasInter.{0} Real) s (Set.Ioc.{0} Real Real.preorder (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) ε)))) -> (Eq.{succ u1} (Set.{u1} α) (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E) (Set.interᵢ.{u1, 1} α Real (fun (δ : Real) => Set.interᵢ.{u1, 0} α (Membership.Mem.{0, 0} Real (Set.{0} Real) (Set.hasMem.{0} Real) δ s) (fun (H : Membership.Mem.{0, 0} Real (Set.{0} Real) (Set.hasMem.{0} Real) δ s) => Metric.thickening.{u1} α _inst_1 δ E))))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (E : Set.{u1} α) (s : Set.{0} Real), (HasSubset.Subset.{0} (Set.{0} Real) (Set.instHasSubsetSet.{0} Real) s (Set.Ioi.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)))) -> (forall (ε : Real), (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) ε) -> (Set.Nonempty.{0} Real (Inter.inter.{0} (Set.{0} Real) (Set.instInterSet.{0} Real) s (Set.Ioc.{0} Real Real.instPreorderReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) ε)))) -> (Eq.{succ u1} (Set.{u1} α) (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E) (Set.interᵢ.{u1, 1} α Real (fun (δ : Real) => Set.interᵢ.{u1, 0} α (Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) δ s) (fun (H : Membership.mem.{0, 0} Real (Set.{0} Real) (Set.instMembershipSet.{0} Real) δ s) => Metric.thickening.{u1} α _inst_1 δ E))))
+Case conversion may be inaccurate. Consider using '#align metric.closure_eq_Inter_thickening' Metric.closure_eq_interᵢ_thickening'ₓ'. -/
/-- The closure of a set equals the intersection of its open thickenings of positive radii
accumulating at zero. -/
theorem closure_eq_interᵢ_thickening' (E : Set α) (s : Set ℝ) (hs₀ : s ⊆ Ioi 0)
@@ -1504,6 +2314,12 @@ theorem closure_eq_interᵢ_thickening' (E : Set α) (s : Set ℝ) (hs₀ : s
apply cthickening_eq_Inter_thickening' le_rfl _ hs₀ hs
#align metric.closure_eq_Inter_thickening' Metric.closure_eq_interᵢ_thickening'
+/- warning: metric.closure_eq_Inter_thickening -> Metric.closure_eq_interᵢ_thickening is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E) (Set.interᵢ.{u1, 1} α Real (fun (δ : Real) => Set.interᵢ.{u1, 0} α (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) (fun (h : LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) => Metric.thickening.{u1} α _inst_1 δ E)))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (E : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) E) (Set.interᵢ.{u1, 1} α Real (fun (δ : Real) => Set.interᵢ.{u1, 0} α (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) (fun (h : LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) => Metric.thickening.{u1} α _inst_1 δ E)))
+Case conversion may be inaccurate. Consider using '#align metric.closure_eq_Inter_thickening Metric.closure_eq_interᵢ_thickeningₓ'. -/
/-- The closure of a set equals the intersection of its (open) thickenings of positive radii. -/
theorem closure_eq_interᵢ_thickening (E : Set α) :
closure E = ⋂ (δ : ℝ) (h : 0 < δ), thickening δ E :=
@@ -1512,12 +2328,15 @@ theorem closure_eq_interᵢ_thickening (E : Set α) :
exact cthickening_eq_Inter_thickening rfl.ge E
#align metric.closure_eq_Inter_thickening Metric.closure_eq_interᵢ_thickening
+#print Metric.frontier_cthickening_subset /-
/-- The frontier of the closed thickening of a set is contained in an `inf_edist` level set. -/
theorem frontier_cthickening_subset (E : Set α) {δ : ℝ} :
frontier (cthickening δ E) ⊆ { x : α | infEdist x E = ENNReal.ofReal δ } :=
frontier_le_subset_eq continuous_infEdist continuous_const
#align metric.frontier_cthickening_subset Metric.frontier_cthickening_subset
+-/
+#print Metric.closedBall_subset_cthickening /-
/-- The closed ball of radius `δ` centered at a point of `E` is included in the closed
thickening of `E`. -/
theorem closedBall_subset_cthickening {α : Type _} [PseudoMetricSpace α] {x : α} {E : Set α}
@@ -1526,7 +2345,14 @@ theorem closedBall_subset_cthickening {α : Type _} [PseudoMetricSpace α] {x :
refine' (closed_ball_subset_cthickening_singleton _ _).trans (cthickening_subset_of_subset _ _)
simpa using hx
#align metric.closed_ball_subset_cthickening Metric.closedBall_subset_cthickening
+-/
+/- warning: metric.cthickening_subset_Union_closed_ball_of_lt -> Metric.cthickening_subset_unionᵢ_closedBall_of_lt is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_2 : PseudoMetricSpace.{u1} α] (E : Set.{u1} α) {δ : Real} {δ' : Real}, (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ') -> (LT.lt.{0} Real Real.hasLt δ δ') -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) (Metric.cthickening.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_2) δ E) (Set.unionᵢ.{u1, succ u1} α α (fun (x : α) => Set.unionᵢ.{u1, 0} α (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x E) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x E) => Metric.closedBall.{u1} α _inst_2 x δ'))))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_2 : PseudoMetricSpace.{u1} α] (E : Set.{u1} α) {δ : Real} {δ' : Real}, (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ') -> (LT.lt.{0} Real Real.instLTReal δ δ') -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) (Metric.cthickening.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_2) δ E) (Set.unionᵢ.{u1, succ u1} α α (fun (x : α) => Set.unionᵢ.{u1, 0} α (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x E) (fun (H : Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x E) => Metric.closedBall.{u1} α _inst_2 x δ'))))
+Case conversion may be inaccurate. Consider using '#align metric.cthickening_subset_Union_closed_ball_of_lt Metric.cthickening_subset_unionᵢ_closedBall_of_ltₓ'. -/
theorem cthickening_subset_unionᵢ_closedBall_of_lt {α : Type _} [PseudoMetricSpace α] (E : Set α)
{δ δ' : ℝ} (hδ₀ : 0 < δ') (hδδ' : δ < δ') : cthickening δ E ⊆ ⋃ x ∈ E, closedBall x δ' :=
by
@@ -1535,6 +2361,12 @@ theorem cthickening_subset_unionᵢ_closedBall_of_lt {α : Type _} [PseudoMetric
exact mem_Union₂.mpr ⟨y, hy₁, hy₂.le⟩
#align metric.cthickening_subset_Union_closed_ball_of_lt Metric.cthickening_subset_unionᵢ_closedBall_of_lt
+/- warning: is_compact.cthickening_eq_bUnion_closed_ball -> IsCompact.cthickening_eq_bUnion_closedBall is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_2 : PseudoMetricSpace.{u1} α] {δ : Real} {E : Set.{u1} α}, (IsCompact.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_2)) E) -> (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) -> (Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_2) δ E) (Set.unionᵢ.{u1, succ u1} α α (fun (x : α) => Set.unionᵢ.{u1, 0} α (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x E) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x E) => Metric.closedBall.{u1} α _inst_2 x δ))))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_2 : PseudoMetricSpace.{u1} α] {δ : Real} {E : Set.{u1} α}, (IsCompact.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_2)) E) -> (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) -> (Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_2) δ E) (Set.unionᵢ.{u1, succ u1} α α (fun (x : α) => Set.unionᵢ.{u1, 0} α (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x E) (fun (H : Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x E) => Metric.closedBall.{u1} α _inst_2 x δ))))
+Case conversion may be inaccurate. Consider using '#align is_compact.cthickening_eq_bUnion_closed_ball IsCompact.cthickening_eq_bUnion_closedBallₓ'. -/
/-- The closed thickening of a compact set `E` is the union of the balls `closed_ball x δ` over
`x ∈ E`.
@@ -1554,7 +2386,13 @@ theorem IsCompact.cthickening_eq_bUnion_closedBall {α : Type _} [PseudoMetricSp
exact mem_bUnion yE D2
#align is_compact.cthickening_eq_bUnion_closed_ball IsCompact.cthickening_eq_bUnion_closedBall
-theorem cthickening_eq_bUnion_closedBall {α : Type _} [PseudoMetricSpace α] [ProperSpace α]
+/- warning: metric.cthickening_eq_bUnion_closed_ball -> Metric.cthickening_eq_bunionᵢ_closedBall is a dubious translation:
+lean 3 declaration is
+ forall {δ : Real} {α : Type.{u1}} [_inst_2 : PseudoMetricSpace.{u1} α] [_inst_3 : ProperSpace.{u1} α _inst_2] (E : Set.{u1} α), (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) -> (Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_2) δ E) (Set.unionᵢ.{u1, succ u1} α α (fun (x : α) => Set.unionᵢ.{u1, 0} α (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_2)) E)) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_2)) E)) => Metric.closedBall.{u1} α _inst_2 x δ))))
+but is expected to have type
+ forall {δ : Real} {α : Type.{u1}} [_inst_2 : PseudoMetricSpace.{u1} α] [_inst_3 : ProperSpace.{u1} α _inst_2] (E : Set.{u1} α), (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) -> (Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_2) δ E) (Set.unionᵢ.{u1, succ u1} α α (fun (x : α) => Set.unionᵢ.{u1, 0} α (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_2)) E)) (fun (H : Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x (closure.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_2)) E)) => Metric.closedBall.{u1} α _inst_2 x δ))))
+Case conversion may be inaccurate. Consider using '#align metric.cthickening_eq_bUnion_closed_ball Metric.cthickening_eq_bunionᵢ_closedBallₓ'. -/
+theorem cthickening_eq_bunionᵢ_closedBall {α : Type _} [PseudoMetricSpace α] [ProperSpace α]
(E : Set α) (hδ : 0 ≤ δ) : cthickening δ E = ⋃ x ∈ closure E, closedBall x δ :=
by
rcases eq_empty_or_nonempty E with (rfl | hne)
@@ -1568,13 +2406,26 @@ theorem cthickening_eq_bUnion_closedBall {α : Type _} [PseudoMetricSpace α] [P
(ENNReal.ofReal_le_ofReal_iff hδ).mp
(((congr_arg ENNReal.ofReal hy.symm).le.trans ENNReal.ofReal_toReal_le).trans hx)
exact mem_bUnion yE hy
-#align metric.cthickening_eq_bUnion_closed_ball Metric.cthickening_eq_bUnion_closedBall
-
-theorem IsClosed.cthickening_eq_bUnion_closedBall {α : Type _} [PseudoMetricSpace α] [ProperSpace α]
- {E : Set α} (hE : IsClosed E) (hδ : 0 ≤ δ) : cthickening δ E = ⋃ x ∈ E, closedBall x δ := by
+#align metric.cthickening_eq_bUnion_closed_ball Metric.cthickening_eq_bunionᵢ_closedBall
+
+/- warning: is_closed.cthickening_eq_bUnion_closed_ball -> IsClosed.cthickening_eq_bunionᵢ_closedBall is a dubious translation:
+lean 3 declaration is
+ forall {δ : Real} {α : Type.{u1}} [_inst_2 : PseudoMetricSpace.{u1} α] [_inst_3 : ProperSpace.{u1} α _inst_2] {E : Set.{u1} α}, (IsClosed.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_2)) E) -> (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) -> (Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_2) δ E) (Set.unionᵢ.{u1, succ u1} α α (fun (x : α) => Set.unionᵢ.{u1, 0} α (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x E) (fun (H : Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x E) => Metric.closedBall.{u1} α _inst_2 x δ))))
+but is expected to have type
+ forall {δ : Real} {α : Type.{u1}} [_inst_2 : PseudoMetricSpace.{u1} α] [_inst_3 : ProperSpace.{u1} α _inst_2] {E : Set.{u1} α}, (IsClosed.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoMetricSpace.toUniformSpace.{u1} α _inst_2)) E) -> (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) -> (Eq.{succ u1} (Set.{u1} α) (Metric.cthickening.{u1} α (PseudoMetricSpace.toPseudoEMetricSpace.{u1} α _inst_2) δ E) (Set.unionᵢ.{u1, succ u1} α α (fun (x : α) => Set.unionᵢ.{u1, 0} α (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x E) (fun (H : Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x E) => Metric.closedBall.{u1} α _inst_2 x δ))))
+Case conversion may be inaccurate. Consider using '#align is_closed.cthickening_eq_bUnion_closed_ball IsClosed.cthickening_eq_bunionᵢ_closedBallₓ'. -/
+theorem IsClosed.cthickening_eq_bunionᵢ_closedBall {α : Type _} [PseudoMetricSpace α]
+ [ProperSpace α] {E : Set α} (hE : IsClosed E) (hδ : 0 ≤ δ) :
+ cthickening δ E = ⋃ x ∈ E, closedBall x δ := by
rw [cthickening_eq_bUnion_closed_ball E hδ, hE.closure_eq]
-#align is_closed.cthickening_eq_bUnion_closed_ball IsClosed.cthickening_eq_bUnion_closedBall
-
+#align is_closed.cthickening_eq_bUnion_closed_ball IsClosed.cthickening_eq_bunionᵢ_closedBall
+
+/- warning: metric.inf_edist_le_inf_edist_cthickening_add -> Metric.infEdist_le_infEdist_cthickening_add is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real} {s : Set.{u1} α} {x : α}, LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.infEdist.{u1} α _inst_1 x s) (HAdd.hAdd.{0, 0, 0} ENNReal ENNReal ENNReal (instHAdd.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring)))))))) (EMetric.infEdist.{u1} α _inst_1 x (Metric.cthickening.{u1} α _inst_1 δ s)) (ENNReal.ofReal δ))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real} {s : Set.{u1} α} {x : α}, LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.infEdist.{u1} α _inst_1 x s) (HAdd.hAdd.{0, 0, 0} ENNReal ENNReal ENNReal (instHAdd.{0} ENNReal (Distrib.toAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal)))))))) (EMetric.infEdist.{u1} α _inst_1 x (Metric.cthickening.{u1} α _inst_1 δ s)) (ENNReal.ofReal δ))
+Case conversion may be inaccurate. Consider using '#align metric.inf_edist_le_inf_edist_cthickening_add Metric.infEdist_le_infEdist_cthickening_addₓ'. -/
/-- For the equality, see `inf_edist_cthickening`. -/
theorem infEdist_le_infEdist_cthickening_add :
infEdist x s ≤ infEdist x (cthickening δ s) + ENNReal.ofReal δ :=
@@ -1588,6 +2439,12 @@ theorem infEdist_le_infEdist_cthickening_add :
(tsub_add_cancel_of_le <| le_self_add.trans (lt_tsub_iff_left.1 hxy).le).le)
#align metric.inf_edist_le_inf_edist_cthickening_add Metric.infEdist_le_infEdist_cthickening_add
+/- warning: metric.inf_edist_le_inf_edist_thickening_add -> Metric.infEdist_le_infEdist_thickening_add is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real} {s : Set.{u1} α} {x : α}, LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (EMetric.infEdist.{u1} α _inst_1 x s) (HAdd.hAdd.{0, 0, 0} ENNReal ENNReal ENNReal (instHAdd.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring)))))))) (EMetric.infEdist.{u1} α _inst_1 x (Metric.thickening.{u1} α _inst_1 δ s)) (ENNReal.ofReal δ))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real} {s : Set.{u1} α} {x : α}, LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (EMetric.infEdist.{u1} α _inst_1 x s) (HAdd.hAdd.{0, 0, 0} ENNReal ENNReal ENNReal (instHAdd.{0} ENNReal (Distrib.toAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal)))))))) (EMetric.infEdist.{u1} α _inst_1 x (Metric.thickening.{u1} α _inst_1 δ s)) (ENNReal.ofReal δ))
+Case conversion may be inaccurate. Consider using '#align metric.inf_edist_le_inf_edist_thickening_add Metric.infEdist_le_infEdist_thickening_addₓ'. -/
/-- For the equality, see `inf_edist_thickening`. -/
theorem infEdist_le_infEdist_thickening_add :
infEdist x s ≤ infEdist x (thickening δ s) + ENNReal.ofReal δ :=
@@ -1595,6 +2452,12 @@ theorem infEdist_le_infEdist_thickening_add :
add_le_add_right (infEdist_anti <| thickening_subset_cthickening _ _) _
#align metric.inf_edist_le_inf_edist_thickening_add Metric.infEdist_le_infEdist_thickening_add
+/- warning: metric.thickening_thickening_subset -> Metric.thickening_thickening_subset is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (ε : Real) (δ : Real) (s : Set.{u1} α), HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) (Metric.thickening.{u1} α _inst_1 ε (Metric.thickening.{u1} α _inst_1 δ s)) (Metric.thickening.{u1} α _inst_1 (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.hasAdd) ε δ) s)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (ε : Real) (δ : Real) (s : Set.{u1} α), HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) (Metric.thickening.{u1} α _inst_1 ε (Metric.thickening.{u1} α _inst_1 δ s)) (Metric.thickening.{u1} α _inst_1 (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.instAddReal) ε δ) s)
+Case conversion may be inaccurate. Consider using '#align metric.thickening_thickening_subset Metric.thickening_thickening_subsetₓ'. -/
/-- For the equality, see `thickening_thickening`. -/
@[simp]
theorem thickening_thickening_subset (ε δ : ℝ) (s : Set α) :
@@ -1610,6 +2473,12 @@ theorem thickening_thickening_subset (ε δ : ℝ) (s : Set α) :
⟨z, hz, (edist_triangle _ _ _).trans_lt <| ENNReal.add_lt_add hx hy⟩
#align metric.thickening_thickening_subset Metric.thickening_thickening_subset
+/- warning: metric.thickening_cthickening_subset -> Metric.thickening_cthickening_subset is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real} (ε : Real), (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) -> (forall (s : Set.{u1} α), HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) (Metric.thickening.{u1} α _inst_1 ε (Metric.cthickening.{u1} α _inst_1 δ s)) (Metric.thickening.{u1} α _inst_1 (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.hasAdd) ε δ) s))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real} (ε : Real), (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) -> (forall (s : Set.{u1} α), HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) (Metric.thickening.{u1} α _inst_1 ε (Metric.cthickening.{u1} α _inst_1 δ s)) (Metric.thickening.{u1} α _inst_1 (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.instAddReal) ε δ) s))
+Case conversion may be inaccurate. Consider using '#align metric.thickening_cthickening_subset Metric.thickening_cthickening_subsetₓ'. -/
/-- For the equality, see `thickening_cthickening`. -/
@[simp]
theorem thickening_cthickening_subset (ε : ℝ) (hδ : 0 ≤ δ) (s : Set α) :
@@ -1626,6 +2495,12 @@ theorem thickening_cthickening_subset (ε : ℝ) (hδ : 0 ≤ δ) (s : Set α) :
(ENNReal.add_lt_add_of_lt_of_le (hy.trans_lt ENNReal.ofReal_lt_top).Ne hxy hy)
#align metric.thickening_cthickening_subset Metric.thickening_cthickening_subset
+/- warning: metric.cthickening_thickening_subset -> Metric.cthickening_thickening_subset is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {ε : Real}, (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) ε) -> (forall (δ : Real) (s : Set.{u1} α), HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) (Metric.cthickening.{u1} α _inst_1 ε (Metric.thickening.{u1} α _inst_1 δ s)) (Metric.cthickening.{u1} α _inst_1 (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.hasAdd) ε δ) s))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {ε : Real}, (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) ε) -> (forall (δ : Real) (s : Set.{u1} α), HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) (Metric.cthickening.{u1} α _inst_1 ε (Metric.thickening.{u1} α _inst_1 δ s)) (Metric.cthickening.{u1} α _inst_1 (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.instAddReal) ε δ) s))
+Case conversion may be inaccurate. Consider using '#align metric.cthickening_thickening_subset Metric.cthickening_thickening_subsetₓ'. -/
/-- For the equality, see `cthickening_thickening`. -/
@[simp]
theorem cthickening_thickening_subset (hε : 0 ≤ ε) (δ : ℝ) (s : Set α) :
@@ -1638,6 +2513,12 @@ theorem cthickening_thickening_subset (hε : 0 ≤ ε) (δ : ℝ) (s : Set α) :
exact fun hx => inf_edist_le_inf_edist_thickening_add.trans (add_le_add_right hx _)
#align metric.cthickening_thickening_subset Metric.cthickening_thickening_subset
+/- warning: metric.cthickening_cthickening_subset -> Metric.cthickening_cthickening_subset is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real} {ε : Real}, (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) ε) -> (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) δ) -> (forall (s : Set.{u1} α), HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) (Metric.cthickening.{u1} α _inst_1 ε (Metric.cthickening.{u1} α _inst_1 δ s)) (Metric.cthickening.{u1} α _inst_1 (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.hasAdd) ε δ) s))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] {δ : Real} {ε : Real}, (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) ε) -> (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) δ) -> (forall (s : Set.{u1} α), HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) (Metric.cthickening.{u1} α _inst_1 ε (Metric.cthickening.{u1} α _inst_1 δ s)) (Metric.cthickening.{u1} α _inst_1 (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.instAddReal) ε δ) s))
+Case conversion may be inaccurate. Consider using '#align metric.cthickening_cthickening_subset Metric.cthickening_cthickening_subsetₓ'. -/
/-- For the equality, see `cthickening_cthickening`. -/
@[simp]
theorem cthickening_cthickening_subset (hε : 0 ≤ ε) (hδ : 0 ≤ δ) (s : Set α) :
@@ -1648,6 +2529,12 @@ theorem cthickening_cthickening_subset (hε : 0 ≤ ε) (hδ : 0 ≤ δ) (s : Se
exact fun hx => inf_edist_le_inf_edist_cthickening_add.trans (add_le_add_right hx _)
#align metric.cthickening_cthickening_subset Metric.cthickening_cthickening_subset
+/- warning: metric.frontier_cthickening_disjoint -> Metric.frontier_cthickening_disjoint is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (A : Set.{u1} α), Pairwise.{0} NNReal (Function.onFun.{1, succ u1, 1} NNReal (Set.{u1} α) Prop (Disjoint.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} (Set.{u1} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)))) (fun (r : NNReal) => frontier.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) (Metric.cthickening.{u1} α _inst_1 ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) NNReal Real (HasLiftT.mk.{1, 1} NNReal Real (CoeTCₓ.coe.{1, 1} NNReal Real (coeBase.{1, 1} NNReal Real NNReal.Real.hasCoe))) r) A)))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : PseudoEMetricSpace.{u1} α] (A : Set.{u1} α), Pairwise.{0} NNReal (Function.onFun.{1, succ u1, 1} NNReal (Set.{u1} α) Prop (Disjoint.{u1} (Set.{u1} α) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) (BoundedOrder.toOrderBot.{u1} (Set.{u1} α) (Preorder.toLE.{u1} (Set.{u1} α) (PartialOrder.toPreorder.{u1} (Set.{u1} α) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))))) (CompleteLattice.toBoundedOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α))))))) (fun (r : NNReal) => frontier.{u1} α (UniformSpace.toTopologicalSpace.{u1} α (PseudoEMetricSpace.toUniformSpace.{u1} α _inst_1)) (Metric.cthickening.{u1} α _inst_1 (NNReal.toReal r) A)))
+Case conversion may be inaccurate. Consider using '#align metric.frontier_cthickening_disjoint Metric.frontier_cthickening_disjointₓ'. -/
theorem frontier_cthickening_disjoint (A : Set α) :
Pairwise (Disjoint on fun r : ℝ≥0 => frontier (cthickening r A)) := fun r₁ r₂ hr =>
((disjoint_singleton.2 <| by simpa).Preimage _).mono (frontier_cthickening_subset _)
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce7e9d53d4bbc38065db3b595cd5bd73c323bc1d
@@ -167,7 +167,7 @@ theorem mem_closure_iff_infEdist_zero : x ∈ closure s ↔ infEdist x s = 0 :=
/-- Given a closed set `s`, a point belongs to `s` iff its infimum edistance to this set vanishes -/
theorem mem_iff_infEdist_zero_of_closed (h : IsClosed s) : x ∈ s ↔ infEdist x s = 0 :=
by
- convert ← mem_closure_iff_inf_edist_zero
+ convert← mem_closure_iff_inf_edist_zero
exact h.closure_eq
#align emetric.mem_iff_inf_edist_zero_of_closed Emetric.mem_iff_infEdist_zero_of_closed
mathlib commit https://github.com/leanprover-community/mathlib/commit/195fcd60ff2bfe392543bceb0ec2adcdb472db4c
@@ -47,7 +47,7 @@ namespace Emetric
section InfEdist
-variable [PseudoEmetricSpace α] [PseudoEmetricSpace β] {x y : α} {s t : Set α} {Φ : α → β}
+variable [PseudoEMetricSpace α] [PseudoEMetricSpace β] {x y : α} {s t : Set α} {Φ : α → β}
/-! ### Distance of a point to a set as a function into `ℝ≥0∞`. -/
@@ -146,7 +146,7 @@ theorem infEdist_closure : infEdist x (closure s) = infEdist x s :=
ENNReal.lt_add_right h.ne ε0.ne'
rcases inf_edist_lt_iff.mp this with ⟨y, ycs, hy⟩
-- y : α, ycs : y ∈ closure s, hy : edist x y < inf_edist x (closure s) + ↑ε / 2
- rcases Emetric.mem_closure_iff.1 ycs (ε / 2) ε0 with ⟨z, zs, dyz⟩
+ rcases EMetric.mem_closure_iff.1 ycs (ε / 2) ε0 with ⟨z, zs, dyz⟩
-- z : α, zs : z ∈ s, dyz : edist y z < ↑ε / 2
calc
inf_edist x s ≤ edist x z := inf_edist_le_edist_of_mem zs
@@ -161,7 +161,7 @@ theorem mem_closure_iff_infEdist_zero : x ∈ closure s ↔ infEdist x s = 0 :=
⟨fun h => by
rw [← inf_edist_closure]
exact inf_edist_zero_of_mem h, fun h =>
- Emetric.mem_closure_iff.2 fun ε εpos => infEdist_lt_iff.mp <| by rwa [h]⟩
+ EMetric.mem_closure_iff.2 fun ε εpos => infEdist_lt_iff.mp <| by rwa [h]⟩
#align emetric.mem_closure_iff_inf_edist_zero Emetric.mem_closure_iff_infEdist_zero
/-- Given a closed set `s`, a point belongs to `s` iff its infimum edistance to this set vanishes -/
@@ -265,17 +265,17 @@ end InfEdist
--section
/-- The Hausdorff edistance between two sets is the smallest `r` such that each set
is contained in the `r`-neighborhood of the other one -/
-irreducible_def hausdorffEdist {α : Type u} [PseudoEmetricSpace α] (s t : Set α) : ℝ≥0∞ :=
+irreducible_def hausdorffEdist {α : Type u} [PseudoEMetricSpace α] (s t : Set α) : ℝ≥0∞ :=
(⨆ x ∈ s, infEdist x t) ⊔ ⨆ y ∈ t, infEdist y s
#align emetric.Hausdorff_edist Emetric.hausdorffEdist
-theorem hausdorffEdist_def {α : Type u} [PseudoEmetricSpace α] (s t : Set α) :
+theorem hausdorffEdist_def {α : Type u} [PseudoEMetricSpace α] (s t : Set α) :
hausdorffEdist s t = (⨆ x ∈ s, infEdist x t) ⊔ ⨆ y ∈ t, infEdist y s := by rw [Hausdorff_edist]
#align emetric.Hausdorff_edist_def Emetric.hausdorffEdist_def
section HausdorffEdist
-variable [PseudoEmetricSpace α] [PseudoEmetricSpace β] {x y : α} {s t u : Set α} {Φ : α → β}
+variable [PseudoEMetricSpace α] [PseudoEMetricSpace β] {x y : α} {s t u : Set α} {Φ : α → β}
/-- The Hausdorff edistance of a set to itself vanishes -/
@[simp]
@@ -604,7 +604,7 @@ theorem disjoint_closedBall_of_lt_infDist {r : ℝ} (h : r < infDist x s) :
theorem dist_le_infDist_add_diam (hs : Bounded s) (hy : y ∈ s) : dist x y ≤ infDist x s + diam s :=
by
have A : inf_edist x s ≠ ∞ := inf_edist_ne_top ⟨y, hy⟩
- have B : Emetric.diam s ≠ ∞ := hs.ediam_ne_top
+ have B : EMetric.diam s ≠ ∞ := hs.ediam_ne_top
rw [inf_dist, diam, ← ENNReal.toReal_add A B, dist_edist]
apply (ENNReal.toReal_le_toReal _ _).2
· exact edist_le_inf_edist_add_ediam hy
@@ -985,7 +985,7 @@ end
--section
section Thickening
-variable [PseudoEmetricSpace α] {δ : ℝ} {s : Set α} {x : α}
+variable [PseudoEMetricSpace α] {δ : ℝ} {s : Set α} {x : α}
open Emetric
@@ -1114,7 +1114,7 @@ end Thickening
--section
section Cthickening
-variable [PseudoEmetricSpace α] {δ ε : ℝ} {s t : Set α} {x : α}
+variable [PseudoEMetricSpace α] {δ ε : ℝ} {s t : Set α} {x : α}
open Emetric
@@ -1300,7 +1300,7 @@ theorem thickening_unionᵢ (δ : ℝ) (f : ι → Set α) :
simp_rw [thickening, inf_edist_Union, infᵢ_lt_iff, set_of_exists]
#align metric.thickening_Union Metric.thickening_unionᵢ
-theorem ediam_cthickening_le (ε : ℝ≥0) : Emetric.diam (cthickening ε s) ≤ Emetric.diam s + 2 * ε :=
+theorem ediam_cthickening_le (ε : ℝ≥0) : EMetric.diam (cthickening ε s) ≤ EMetric.diam s + 2 * ε :=
by
refine' diam_le fun x hx y hy => ENNReal.le_of_forall_pos_le_add fun δ hδ _ => _
rw [mem_cthickening_iff, ENNReal.ofReal_coe_nnreal] at hx hy
@@ -1322,8 +1322,8 @@ theorem ediam_cthickening_le (ε : ℝ≥0) : Emetric.diam (cthickening ε s)
abel
#align metric.ediam_cthickening_le Metric.ediam_cthickening_le
-theorem ediam_thickening_le (ε : ℝ≥0) : Emetric.diam (thickening ε s) ≤ Emetric.diam s + 2 * ε :=
- (Emetric.diam_mono <| thickening_subset_cthickening _ _).trans <| ediam_cthickening_le _
+theorem ediam_thickening_le (ε : ℝ≥0) : EMetric.diam (thickening ε s) ≤ EMetric.diam s + 2 * ε :=
+ (EMetric.diam_mono <| thickening_subset_cthickening _ _).trans <| ediam_cthickening_le _
#align metric.ediam_thickening_le Metric.ediam_thickening_le
theorem diam_cthickening_le {α : Type _} [PseudoMetricSpace α] (s : Set α) (hε : 0 ≤ ε) :
mathlib commit https://github.com/leanprover-community/mathlib/commit/4c586d291f189eecb9d00581aeb3dd998ac34442
@@ -150,8 +150,8 @@ theorem infEdist_closure : infEdist x (closure s) = infEdist x s :=
-- z : α, zs : z ∈ s, dyz : edist y z < ↑ε / 2
calc
inf_edist x s ≤ edist x z := inf_edist_le_edist_of_mem zs
- _ ≤ edist x y + edist y z := edist_triangle _ _ _
- _ ≤ inf_edist x (closure s) + ε / 2 + ε / 2 := add_le_add (le_of_lt hy) (le_of_lt dyz)
+ _ ≤ edist x y + edist y z := (edist_triangle _ _ _)
+ _ ≤ inf_edist x (closure s) + ε / 2 + ε / 2 := (add_le_add (le_of_lt hy) (le_of_lt dyz))
_ = inf_edist x (closure s) + ↑ε := by rw [add_assoc, ENNReal.add_halves]
#align emetric.inf_edist_closure Emetric.infEdist_closure
@@ -349,8 +349,8 @@ theorem infEdist_le_infEdist_add_hausdorffEdist :
-- z : α, zt : z ∈ t, dyz : edist y z < Hausdorff_edist s t + ↑ε / 2
calc
inf_edist x t ≤ edist x z := inf_edist_le_edist_of_mem zt
- _ ≤ edist x y + edist y z := edist_triangle _ _ _
- _ ≤ inf_edist x s + ε / 2 + (Hausdorff_edist s t + ε / 2) := add_le_add dxy.le dyz.le
+ _ ≤ edist x y + edist y z := (edist_triangle _ _ _)
+ _ ≤ inf_edist x s + ε / 2 + (Hausdorff_edist s t + ε / 2) := (add_le_add dxy.le dyz.le)
_ = inf_edist x s + Hausdorff_edist s t + ε := by
simp [ENNReal.add_halves, add_comm, add_left_comm]
@@ -395,7 +395,7 @@ theorem hausdorffEdist_triangle : hausdorffEdist s u ≤ hausdorffEdist s t + ha
inf_edist x s ≤ inf_edist x t + Hausdorff_edist t s :=
inf_edist_le_inf_edist_add_Hausdorff_edist
_ ≤ Hausdorff_edist u t + Hausdorff_edist t s :=
- add_le_add_right (inf_edist_le_Hausdorff_edist_of_mem xu) _
+ (add_le_add_right (inf_edist_le_Hausdorff_edist_of_mem xu) _)
_ = Hausdorff_edist s t + Hausdorff_edist t u := by simp [Hausdorff_edist_comm, add_comm]
#align emetric.Hausdorff_edist_triangle Emetric.hausdorffEdist_triangle
@@ -1382,7 +1382,7 @@ theorem Disjoint.exists_thickenings (hst : Disjoint s t) (hs : IsCompact s) (ht
refine' (h x hx y hy).not_le _
calc
edist x y ≤ edist z x + edist z y := edist_triangle_left _ _ _
- _ ≤ ↑(r / 2) + ↑(r / 2) := add_le_add hzx.le hzy.le
+ _ ≤ ↑(r / 2) + ↑(r / 2) := (add_le_add hzx.le hzy.le)
_ = r := by rw [← ENNReal.coe_add, add_halves]
#align disjoint.exists_thickenings Disjoint.exists_thickenings
mathlib commit https://github.com/leanprover-community/mathlib/commit/9da1b3534b65d9661eb8f42443598a92bbb49211
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Sébastien Gouëzel
! This file was ported from Lean 3 source module topology.metric_space.hausdorff_distance
-! leanprover-community/mathlib commit afdb4fa3b32d41106a4a09b371ce549ad7958abd
+! leanprover-community/mathlib commit 57ac39bd365c2f80589a700f9fbb664d3a1a30c2
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -210,7 +210,7 @@ theorem infEdist_image (hΦ : Isometry Φ) : infEdist (Φ x) (Φ '' t) = infEdis
theorem IsOpen.exists_unionᵢ_isClosed {U : Set α} (hU : IsOpen U) :
∃ F : ℕ → Set α, (∀ n, IsClosed (F n)) ∧ (∀ n, F n ⊆ U) ∧ (⋃ n, F n) = U ∧ Monotone F :=
by
- obtain ⟨a, a_pos, a_lt_one⟩ : ∃ a : ℝ≥0∞, 0 < a ∧ a < 1 := exists_between ENNReal.zero_lt_one
+ obtain ⟨a, a_pos, a_lt_one⟩ : ∃ a : ℝ≥0∞, 0 < a ∧ a < 1 := exists_between zero_lt_one
let F := fun n : ℕ => (fun x => inf_edist x (Uᶜ)) ⁻¹' Ici (a ^ n)
have F_subset : ∀ n, F n ⊆ U := by
intro n x hx
@@ -221,7 +221,7 @@ theorem IsOpen.exists_unionᵢ_isClosed {U : Set α} (hU : IsOpen U) :
show Monotone F
· intro m n hmn x hx
simp only [mem_Ici, mem_preimage] at hx⊢
- apply le_trans (ENNReal.pow_le_pow_of_le_one a_lt_one.le hmn) hx
+ apply le_trans (pow_le_pow_of_le_one' a_lt_one.le hmn) hx
show (⋃ n, F n) = U
· refine' subset.antisymm (by simp only [Union_subset_iff, F_subset, forall_const]) fun x hx => _
have : ¬x ∈ Uᶜ := by simpa using hx
@@ -1318,8 +1318,7 @@ theorem ediam_cthickening_le (ε : ℝ≥0) : Emetric.diam (cthickening ε s)
add_le_add hyy'.le <| edist_le_diam_of_mem hy' hx').trans_eq
_)
-- Now we're done, but `ring` won't do it because we're on `ennreal` :(
- rw [← add_assoc, ← two_mul, mul_add,
- ENNReal.mul_div_cancel' ENNReal.two_ne_zero ENNReal.two_ne_top]
+ rw [← add_assoc, ← two_mul, mul_add, ENNReal.mul_div_cancel' two_ne_zero ENNReal.two_ne_top]
abel
#align metric.ediam_cthickening_le Metric.ediam_cthickening_le
mathlib commit https://github.com/leanprover-community/mathlib/commit/eb0cb4511aaef0da2462207b67358a0e1fe1e2ee
@@ -35,7 +35,7 @@ This files introduces:
noncomputable section
-open Classical NNReal Ennreal Topology
+open Classical NNReal ENNReal Topology
universe u v w
@@ -109,7 +109,7 @@ theorem infEdist_le_infEdist_add_edist : infEdist x s ≤ infEdist y s + edist x
calc
(⨅ z ∈ s, edist x z) ≤ ⨅ z ∈ s, edist y z + edist x y :=
infᵢ₂_mono fun z hz => (edist_triangle _ _ _).trans_eq (add_comm _ _)
- _ = (⨅ z ∈ s, edist y z) + edist x y := by simp only [Ennreal.infᵢ_add]
+ _ = (⨅ z ∈ s, edist y z) + edist x y := by simp only [ENNReal.infᵢ_add]
#align emetric.inf_edist_le_inf_edist_add_edist Emetric.infEdist_le_infEdist_add_edist
@@ -121,7 +121,7 @@ theorem infEdist_le_edist_add_infEdist : infEdist x s ≤ edist x y + infEdist y
theorem edist_le_infEdist_add_ediam (hy : y ∈ s) : edist x y ≤ infEdist x s + diam s :=
by
- simp_rw [inf_edist, Ennreal.infᵢ_add]
+ simp_rw [inf_edist, ENNReal.infᵢ_add]
refine' le_infᵢ fun i => le_infᵢ fun hi => _
calc
edist x y ≤ edist x i + edist i y := edist_triangle _ _ _
@@ -140,10 +140,10 @@ theorem continuous_infEdist : Continuous fun x => infEdist x s :=
theorem infEdist_closure : infEdist x (closure s) = infEdist x s :=
by
refine' le_antisymm (inf_edist_anti subset_closure) _
- refine' Ennreal.le_of_forall_pos_le_add fun ε εpos h => _
+ refine' ENNReal.le_of_forall_pos_le_add fun ε εpos h => _
have ε0 : 0 < (ε / 2 : ℝ≥0∞) := by simpa [pos_iff_ne_zero] using εpos
have : inf_edist x (closure s) < inf_edist x (closure s) + ε / 2 :=
- Ennreal.lt_add_right h.ne ε0.ne'
+ ENNReal.lt_add_right h.ne ε0.ne'
rcases inf_edist_lt_iff.mp this with ⟨y, ycs, hy⟩
-- y : α, ycs : y ∈ closure s, hy : edist x y < inf_edist x (closure s) + ↑ε / 2
rcases Emetric.mem_closure_iff.1 ycs (ε / 2) ε0 with ⟨z, zs, dyz⟩
@@ -152,7 +152,7 @@ theorem infEdist_closure : infEdist x (closure s) = infEdist x s :=
inf_edist x s ≤ edist x z := inf_edist_le_edist_of_mem zs
_ ≤ edist x y + edist y z := edist_triangle _ _ _
_ ≤ inf_edist x (closure s) + ε / 2 + ε / 2 := add_le_add (le_of_lt hy) (le_of_lt dyz)
- _ = inf_edist x (closure s) + ↑ε := by rw [add_assoc, Ennreal.add_halves]
+ _ = inf_edist x (closure s) + ↑ε := by rw [add_assoc, ENNReal.add_halves]
#align emetric.inf_edist_closure Emetric.infEdist_closure
@@ -183,9 +183,9 @@ theorem infEdist_closure_pos_iff_not_mem_closure {x : α} {E : Set α} :
#align emetric.inf_edist_closure_pos_iff_not_mem_closure Emetric.infEdist_closure_pos_iff_not_mem_closure
theorem exists_real_pos_lt_infEdist_of_not_mem_closure {x : α} {E : Set α} (h : x ∉ closure E) :
- ∃ ε : ℝ, 0 < ε ∧ Ennreal.ofReal ε < infEdist x E :=
+ ∃ ε : ℝ, 0 < ε ∧ ENNReal.ofReal ε < infEdist x E :=
by
- rw [← inf_edist_pos_iff_not_mem_closure, Ennreal.lt_iff_exists_real_btwn] at h
+ rw [← inf_edist_pos_iff_not_mem_closure, ENNReal.lt_iff_exists_real_btwn] at h
rcases h with ⟨ε, ⟨_, ⟨ε_pos, ε_lt⟩⟩⟩
exact ⟨ε, ⟨ennreal.of_real_pos.mp ε_pos, ε_lt⟩⟩
#align emetric.exists_real_pos_lt_inf_edist_of_not_mem_closure Emetric.exists_real_pos_lt_infEdist_of_not_mem_closure
@@ -210,25 +210,25 @@ theorem infEdist_image (hΦ : Isometry Φ) : infEdist (Φ x) (Φ '' t) = infEdis
theorem IsOpen.exists_unionᵢ_isClosed {U : Set α} (hU : IsOpen U) :
∃ F : ℕ → Set α, (∀ n, IsClosed (F n)) ∧ (∀ n, F n ⊆ U) ∧ (⋃ n, F n) = U ∧ Monotone F :=
by
- obtain ⟨a, a_pos, a_lt_one⟩ : ∃ a : ℝ≥0∞, 0 < a ∧ a < 1 := exists_between Ennreal.zero_lt_one
+ obtain ⟨a, a_pos, a_lt_one⟩ : ∃ a : ℝ≥0∞, 0 < a ∧ a < 1 := exists_between ENNReal.zero_lt_one
let F := fun n : ℕ => (fun x => inf_edist x (Uᶜ)) ⁻¹' Ici (a ^ n)
have F_subset : ∀ n, F n ⊆ U := by
intro n x hx
- have : inf_edist x (Uᶜ) ≠ 0 := ((Ennreal.pow_pos a_pos _).trans_le hx).ne'
+ have : inf_edist x (Uᶜ) ≠ 0 := ((ENNReal.pow_pos a_pos _).trans_le hx).ne'
contrapose! this
exact inf_edist_zero_of_mem this
refine' ⟨F, fun n => IsClosed.preimage continuous_inf_edist isClosed_Ici, F_subset, _, _⟩
show Monotone F
· intro m n hmn x hx
simp only [mem_Ici, mem_preimage] at hx⊢
- apply le_trans (Ennreal.pow_le_pow_of_le_one a_lt_one.le hmn) hx
+ apply le_trans (ENNReal.pow_le_pow_of_le_one a_lt_one.le hmn) hx
show (⋃ n, F n) = U
· refine' subset.antisymm (by simp only [Union_subset_iff, F_subset, forall_const]) fun x hx => _
have : ¬x ∈ Uᶜ := by simpa using hx
rw [mem_iff_inf_edist_zero_of_closed hU.is_closed_compl] at this
have B : 0 < inf_edist x (Uᶜ) := by simpa [pos_iff_ne_zero] using this
have : Filter.Tendsto (fun n => a ^ n) at_top (𝓝 0) :=
- Ennreal.tendsto_pow_atTop_nhds_0_of_lt_1 a_lt_one
+ ENNReal.tendsto_pow_atTop_nhds_0_of_lt_1 a_lt_one
rcases((tendsto_order.1 this).2 _ B).exists with ⟨n, hn⟩
simp only [mem_Union, mem_Ici, mem_preimage]
exact ⟨n, hn.le⟩
@@ -253,7 +253,7 @@ theorem exists_pos_forall_lt_edist (hs : IsCompact s) (ht : IsClosed t) (hst : D
hs.exists_forall_le hne continuous_inf_edist.continuous_on
have : 0 < inf_edist x t :=
pos_iff_ne_zero.2 fun H => hst.le_bot ⟨hx, (mem_iff_inf_edist_zero_of_closed ht).mpr H⟩
- rcases Ennreal.lt_iff_exists_nNReal_btwn.1 this with ⟨r, h₀, hr⟩
+ rcases ENNReal.lt_iff_exists_nnreal_btwn.1 this with ⟨r, h₀, hr⟩
exact ⟨r, ennreal.coe_pos.mp h₀, fun y hy z hz => hr.trans_le <| le_inf_edist.1 (h y hy) z hz⟩
#align emetric.exists_pos_forall_lt_edist Emetric.exists_pos_forall_lt_edist
@@ -281,7 +281,7 @@ variable [PseudoEmetricSpace α] [PseudoEmetricSpace β] {x y : α} {s t u : Set
@[simp]
theorem hausdorffEdist_self : hausdorffEdist s s = 0 :=
by
- simp only [Hausdorff_edist_def, sup_idem, Ennreal.supᵢ_eq_zero]
+ simp only [Hausdorff_edist_def, sup_idem, ENNReal.supᵢ_eq_zero]
exact fun x hx => inf_edist_zero_of_mem hx
#align emetric.Hausdorff_edist_self Emetric.hausdorffEdist_self
@@ -336,15 +336,15 @@ theorem exists_edist_lt_of_hausdorffEdist_lt {r : ℝ≥0∞} (h : x ∈ s) (H :
between `s` and `t` -/
theorem infEdist_le_infEdist_add_hausdorffEdist :
infEdist x t ≤ infEdist x s + hausdorffEdist s t :=
- Ennreal.le_of_forall_pos_le_add fun ε εpos h =>
+ ENNReal.le_of_forall_pos_le_add fun ε εpos h =>
by
have ε0 : (ε / 2 : ℝ≥0∞) ≠ 0 := by simpa [pos_iff_ne_zero] using εpos
have : inf_edist x s < inf_edist x s + ε / 2 :=
- Ennreal.lt_add_right (Ennreal.add_lt_top.1 h).1.Ne ε0
+ ENNReal.lt_add_right (ENNReal.add_lt_top.1 h).1.Ne ε0
rcases inf_edist_lt_iff.mp this with ⟨y, ys, dxy⟩
-- y : α, ys : y ∈ s, dxy : edist x y < inf_edist x s + ↑ε / 2
have : Hausdorff_edist s t < Hausdorff_edist s t + ε / 2 :=
- Ennreal.lt_add_right (Ennreal.add_lt_top.1 h).2.Ne ε0
+ ENNReal.lt_add_right (ENNReal.add_lt_top.1 h).2.Ne ε0
rcases exists_edist_lt_of_Hausdorff_edist_lt ys this with ⟨z, zt, dyz⟩
-- z : α, zt : z ∈ t, dyz : edist y z < Hausdorff_edist s t + ↑ε / 2
calc
@@ -352,7 +352,7 @@ theorem infEdist_le_infEdist_add_hausdorffEdist :
_ ≤ edist x y + edist y z := edist_triangle _ _ _
_ ≤ inf_edist x s + ε / 2 + (Hausdorff_edist s t + ε / 2) := add_le_add dxy.le dyz.le
_ = inf_edist x s + Hausdorff_edist s t + ε := by
- simp [Ennreal.add_halves, add_comm, add_left_comm]
+ simp [ENNReal.add_halves, add_comm, add_left_comm]
#align emetric.inf_edist_le_inf_edist_add_Hausdorff_edist Emetric.infEdist_le_infEdist_add_hausdorffEdist
@@ -405,7 +405,7 @@ theorem hausdorffEdist_zero_iff_closure_eq_closure :
hausdorffEdist s t = 0 ↔ closure s = closure t :=
calc
hausdorffEdist s t = 0 ↔ s ⊆ closure t ∧ t ⊆ closure s := by
- simp only [Hausdorff_edist_def, Ennreal.sup_eq_zero, Ennreal.supᵢ_eq_zero, ←
+ simp only [Hausdorff_edist_def, ENNReal.sup_eq_zero, ENNReal.supᵢ_eq_zero, ←
mem_closure_iff_inf_edist_zero, subset_def]
_ ↔ closure s = closure t :=
⟨fun h =>
@@ -507,7 +507,7 @@ open Emetric
/-- The minimal distance of a point to a set -/
def infDist (x : α) (s : Set α) : ℝ :=
- Ennreal.toReal (infEdist x s)
+ ENNReal.toReal (infEdist x s)
#align metric.inf_dist Metric.infDist
/-- the minimal distance is always nonnegative -/
@@ -544,7 +544,7 @@ theorem infDist_singleton : infDist x {y} = dist x y := by simp [inf_dist, inf_e
/-- The minimal distance to a set is bounded by the distance to any point in this set -/
theorem infDist_le_dist_of_mem (h : y ∈ s) : infDist x s ≤ dist x y :=
by
- rw [dist_edist, inf_dist, Ennreal.toReal_le_toReal (inf_edist_ne_top ⟨_, h⟩) (edist_ne_top _ _)]
+ rw [dist_edist, inf_dist, ENNReal.toReal_le_toReal (inf_edist_ne_top ⟨_, h⟩) (edist_ne_top _ _)]
exact inf_edist_le_edist_of_mem h
#align metric.inf_dist_le_dist_of_mem Metric.infDist_le_dist_of_mem
@@ -552,14 +552,14 @@ theorem infDist_le_dist_of_mem (h : y ∈ s) : infDist x s ≤ dist x y :=
theorem infDist_le_infDist_of_subset (h : s ⊆ t) (hs : s.Nonempty) : infDist x t ≤ infDist x s :=
by
have ht : t.nonempty := hs.mono h
- rw [inf_dist, inf_dist, Ennreal.toReal_le_toReal (inf_edist_ne_top ht) (inf_edist_ne_top hs)]
+ rw [inf_dist, inf_dist, ENNReal.toReal_le_toReal (inf_edist_ne_top ht) (inf_edist_ne_top hs)]
exact inf_edist_anti h
#align metric.inf_dist_le_inf_dist_of_subset Metric.infDist_le_infDist_of_subset
/-- The minimal distance to a set is `< r` iff there exists a point in this set at distance `< r` -/
theorem infDist_lt_iff {r : ℝ} (hs : s.Nonempty) : infDist x s < r ↔ ∃ y ∈ s, dist x y < r := by
- simp_rw [inf_dist, ← Ennreal.lt_ofReal_iff_toReal_lt (inf_edist_ne_top hs), inf_edist_lt_iff,
- Ennreal.lt_ofReal_iff_toReal_lt (edist_ne_top _ _), ← dist_edist]
+ simp_rw [inf_dist, ← ENNReal.lt_ofReal_iff_toReal_lt (inf_edist_ne_top hs), inf_edist_lt_iff,
+ ENNReal.lt_ofReal_iff_toReal_lt (edist_ne_top _ _), ← dist_edist]
#align metric.inf_dist_lt_iff Metric.infDist_lt_iff
/-- The minimal distance from `x` to `s` is bounded by the distance from `y` to `s`, modulo
@@ -569,10 +569,10 @@ theorem infDist_le_infDist_add_dist : infDist x s ≤ infDist y s + dist x y :=
cases' s.eq_empty_or_nonempty with hs hs
· simp [hs, dist_nonneg]
· rw [inf_dist, inf_dist, dist_edist, ←
- Ennreal.toReal_add (inf_edist_ne_top hs) (edist_ne_top _ _),
- Ennreal.toReal_le_toReal (inf_edist_ne_top hs)]
+ ENNReal.toReal_add (inf_edist_ne_top hs) (edist_ne_top _ _),
+ ENNReal.toReal_le_toReal (inf_edist_ne_top hs)]
· exact inf_edist_le_inf_edist_add_edist
- · simp [Ennreal.add_eq_top, inf_edist_ne_top hs, edist_ne_top]
+ · simp [ENNReal.add_eq_top, inf_edist_ne_top hs, edist_ne_top]
#align metric.inf_dist_le_inf_dist_add_dist Metric.infDist_le_infDist_add_dist
theorem not_mem_of_dist_lt_infDist (h : dist x y < infDist x s) : y ∉ s := fun hy =>
@@ -605,12 +605,12 @@ theorem dist_le_infDist_add_diam (hs : Bounded s) (hy : y ∈ s) : dist x y ≤
by
have A : inf_edist x s ≠ ∞ := inf_edist_ne_top ⟨y, hy⟩
have B : Emetric.diam s ≠ ∞ := hs.ediam_ne_top
- rw [inf_dist, diam, ← Ennreal.toReal_add A B, dist_edist]
- apply (Ennreal.toReal_le_toReal _ _).2
+ rw [inf_dist, diam, ← ENNReal.toReal_add A B, dist_edist]
+ apply (ENNReal.toReal_le_toReal _ _).2
· exact edist_le_inf_edist_add_ediam hy
· rw [edist_dist]
- exact Ennreal.ofReal_ne_top
- · exact Ennreal.add_ne_top.2 ⟨A, B⟩
+ exact ENNReal.ofReal_ne_top
+ · exact ENNReal.add_ne_top.2 ⟨A, B⟩
#align metric.dist_le_inf_dist_add_diam Metric.dist_le_infDist_add_diam
variable (s)
@@ -648,7 +648,7 @@ theorem infDist_zero_of_mem_closure (hx : x ∈ closure s) : infDist x s = 0 :=
/-- A point belongs to the closure of `s` iff its infimum distance to this set vanishes -/
theorem mem_closure_iff_infDist_zero (h : s.Nonempty) : x ∈ closure s ↔ infDist x s = 0 := by
- simp [mem_closure_iff_inf_edist_zero, inf_dist, Ennreal.toReal_eq_zero_iff, inf_edist_ne_top h]
+ simp [mem_closure_iff_inf_edist_zero, inf_dist, ENNReal.toReal_eq_zero_iff, inf_edist_ne_top h]
#align metric.mem_closure_iff_inf_dist_zero Metric.mem_closure_iff_infDist_zero
/-- Given a closed set `s`, a point belongs to `s` iff its infimum distance to this set vanishes -/
@@ -711,7 +711,7 @@ theorem exists_mem_closure_infDist_eq_dist [ProperSpace α] (hne : s.Nonempty) (
/-- The minimal distance of a point to a set as a `ℝ≥0` -/
def infNndist (x : α) (s : Set α) : ℝ≥0 :=
- Ennreal.toNnreal (infEdist x s)
+ ENNReal.toNNReal (infEdist x s)
#align metric.inf_nndist Metric.infNndist
@[simp]
@@ -741,7 +741,7 @@ theorem continuous_infNndist_pt (s : Set α) : Continuous fun x => infNndist x s
included in the `r`-neighborhood of the other. If there is no such `r`, it is defined to
be `0`, arbitrarily -/
def hausdorffDist (s t : Set α) : ℝ :=
- Ennreal.toReal (hausdorffEdist s t)
+ ENNReal.toReal (hausdorffEdist s t)
#align metric.Hausdorff_dist Metric.hausdorffDist
/-- The Hausdorff distance is nonnegative -/
@@ -757,20 +757,20 @@ theorem hausdorffEdist_ne_top_of_nonempty_of_bounded (hs : s.Nonempty) (ht : t.N
rcases ht with ⟨ct, hct⟩
rcases(bounded_iff_subset_ball ct).1 bs with ⟨rs, hrs⟩
rcases(bounded_iff_subset_ball cs).1 bt with ⟨rt, hrt⟩
- have : Hausdorff_edist s t ≤ Ennreal.ofReal (max rs rt) :=
+ have : Hausdorff_edist s t ≤ ENNReal.ofReal (max rs rt) :=
by
apply Hausdorff_edist_le_of_mem_edist
· intro x xs
exists ct, hct
have : dist x ct ≤ max rs rt := le_trans (hrs xs) (le_max_left _ _)
- rwa [edist_dist, Ennreal.ofReal_le_ofReal_iff]
+ rwa [edist_dist, ENNReal.ofReal_le_ofReal_iff]
exact le_trans dist_nonneg this
· intro x xt
exists cs, hcs
have : dist x cs ≤ max rs rt := le_trans (hrt xt) (le_max_right _ _)
- rwa [edist_dist, Ennreal.ofReal_le_ofReal_iff]
+ rwa [edist_dist, ENNReal.ofReal_le_ofReal_iff]
exact le_trans dist_nonneg this
- exact ne_top_of_le_ne_top Ennreal.ofReal_ne_top this
+ exact ne_top_of_le_ne_top ENNReal.ofReal_ne_top this
#align metric.Hausdorff_edist_ne_top_of_nonempty_of_bounded Metric.hausdorffEdist_ne_top_of_nonempty_of_bounded
/-- The Hausdorff distance between a set and itself is zero -/
@@ -805,24 +805,24 @@ theorem hausdorffDist_le_of_infDist {r : ℝ} (hr : 0 ≤ r) (H1 : ∀ x ∈ s,
(H2 : ∀ x ∈ t, infDist x s ≤ r) : hausdorffDist s t ≤ r :=
by
by_cases h1 : Hausdorff_edist s t = ⊤
- · rwa [Hausdorff_dist, h1, Ennreal.top_toReal]
+ · rwa [Hausdorff_dist, h1, ENNReal.top_toReal]
cases' s.eq_empty_or_nonempty with hs hs
· rwa [hs, Hausdorff_dist_empty']
cases' t.eq_empty_or_nonempty with ht ht
· rwa [ht, Hausdorff_dist_empty]
- have : Hausdorff_edist s t ≤ Ennreal.ofReal r :=
+ have : Hausdorff_edist s t ≤ ENNReal.ofReal r :=
by
apply Hausdorff_edist_le_of_inf_edist _ _
· intro x hx
have I := H1 x hx
- rwa [inf_dist, ← Ennreal.toReal_ofReal hr,
- Ennreal.toReal_le_toReal (inf_edist_ne_top ht) Ennreal.ofReal_ne_top] at I
+ rwa [inf_dist, ← ENNReal.toReal_ofReal hr,
+ ENNReal.toReal_le_toReal (inf_edist_ne_top ht) ENNReal.ofReal_ne_top] at I
· intro x hx
have I := H2 x hx
- rwa [inf_dist, ← Ennreal.toReal_ofReal hr,
- Ennreal.toReal_le_toReal (inf_edist_ne_top hs) Ennreal.ofReal_ne_top] at I
- rwa [Hausdorff_dist, ← Ennreal.toReal_ofReal hr,
- Ennreal.toReal_le_toReal h1 Ennreal.ofReal_ne_top]
+ rwa [inf_dist, ← ENNReal.toReal_ofReal hr,
+ ENNReal.toReal_le_toReal (inf_edist_ne_top hs) ENNReal.ofReal_ne_top] at I
+ rwa [Hausdorff_dist, ← ENNReal.toReal_ofReal hr,
+ ENNReal.toReal_le_toReal h1 ENNReal.ofReal_ne_top]
#align metric.Hausdorff_dist_le_of_inf_dist Metric.hausdorffDist_le_of_infDist
/-- Bounding the Hausdorff distance by exhibiting, for any point in each set,
@@ -863,7 +863,7 @@ theorem infDist_le_hausdorffDist_of_mem (hx : x ∈ s) (fin : hausdorffEdist s t
infDist x t ≤ hausdorffDist s t :=
by
have ht : t.nonempty := nonempty_of_Hausdorff_edist_ne_top ⟨x, hx⟩ Fin
- rw [Hausdorff_dist, inf_dist, Ennreal.toReal_le_toReal (inf_edist_ne_top ht) Fin]
+ rw [Hausdorff_dist, inf_dist, ENNReal.toReal_le_toReal (inf_edist_ne_top ht) Fin]
exact inf_edist_le_Hausdorff_edist_of_mem hx
#align metric.inf_dist_le_Hausdorff_dist_of_mem Metric.infDist_le_hausdorffDist_of_mem
@@ -873,11 +873,11 @@ theorem exists_dist_lt_of_hausdorffDist_lt {r : ℝ} (h : x ∈ s) (H : hausdorf
(fin : hausdorffEdist s t ≠ ⊤) : ∃ y ∈ t, dist x y < r :=
by
have r0 : 0 < r := lt_of_le_of_lt Hausdorff_dist_nonneg H
- have : Hausdorff_edist s t < Ennreal.ofReal r := by
- rwa [Hausdorff_dist, ← Ennreal.toReal_ofReal (le_of_lt r0),
- Ennreal.toReal_lt_toReal Fin Ennreal.ofReal_ne_top] at H
+ have : Hausdorff_edist s t < ENNReal.ofReal r := by
+ rwa [Hausdorff_dist, ← ENNReal.toReal_ofReal (le_of_lt r0),
+ ENNReal.toReal_lt_toReal Fin ENNReal.ofReal_ne_top] at H
rcases exists_edist_lt_of_Hausdorff_edist_lt h this with ⟨y, hy, yr⟩
- rw [edist_dist, Ennreal.ofReal_lt_ofReal_iff r0] at yr
+ rw [edist_dist, ENNReal.ofReal_lt_ofReal_iff r0] at yr
exact ⟨y, hy, yr⟩
#align metric.exists_dist_lt_of_Hausdorff_dist_lt Metric.exists_dist_lt_of_hausdorffDist_lt
@@ -898,10 +898,10 @@ theorem infDist_le_infDist_add_hausdorffDist (fin : hausdorffEdist s t ≠ ⊤)
by
rcases empty_or_nonempty_of_Hausdorff_edist_ne_top Fin with (⟨hs, ht⟩ | ⟨hs, ht⟩)
· simp only [hs, ht, Hausdorff_dist_empty, inf_dist_empty, zero_add]
- rw [inf_dist, inf_dist, Hausdorff_dist, ← Ennreal.toReal_add (inf_edist_ne_top hs) Fin,
- Ennreal.toReal_le_toReal (inf_edist_ne_top ht)]
+ rw [inf_dist, inf_dist, Hausdorff_dist, ← ENNReal.toReal_add (inf_edist_ne_top hs) Fin,
+ ENNReal.toReal_le_toReal (inf_edist_ne_top ht)]
· exact inf_edist_le_inf_edist_add_Hausdorff_edist
- · exact Ennreal.add_ne_top.2 ⟨inf_edist_ne_top hs, Fin⟩
+ · exact ENNReal.add_ne_top.2 ⟨inf_edist_ne_top hs, Fin⟩
#align metric.inf_dist_le_inf_dist_add_Hausdorff_dist Metric.infDist_le_infDist_add_hausdorffDist
/-- The Hausdorff distance is invariant under isometries -/
@@ -927,10 +927,10 @@ theorem hausdorffDist_triangle (fin : hausdorffEdist s t ≠ ⊤) :
_ = Hausdorff_edist s t + Hausdorff_edist s u := by simp [Hausdorff_edist_comm]
_ < ⊤ := lt_top_iff_ne_top.mpr <| ennreal.add_ne_top.mpr ⟨Fin, h⟩
- rw [Hausdorff_dist, Hausdorff_dist, Hausdorff_dist, ← Ennreal.toReal_add Fin Dtu.ne,
- Ennreal.toReal_le_toReal h]
+ rw [Hausdorff_dist, Hausdorff_dist, Hausdorff_dist, ← ENNReal.toReal_add Fin Dtu.ne,
+ ENNReal.toReal_le_toReal h]
· exact Hausdorff_edist_triangle
- · simp [Ennreal.add_eq_top, lt_top_iff_ne_top.1 Dtu, Fin]
+ · simp [ENNReal.add_eq_top, lt_top_iff_ne_top.1 Dtu, Fin]
#align metric.Hausdorff_dist_triangle Metric.hausdorffDist_triangle
/-- The Hausdorff distance satisfies the triangular inequality -/
@@ -970,13 +970,13 @@ theorem hausdorffDist_closure : hausdorffDist (closure s) (closure t) = hausdorf
theorem hausdorffDist_zero_iff_closure_eq_closure (fin : hausdorffEdist s t ≠ ⊤) :
hausdorffDist s t = 0 ↔ closure s = closure t := by
simp [Hausdorff_edist_zero_iff_closure_eq_closure.symm, Hausdorff_dist,
- Ennreal.toReal_eq_zero_iff, Fin]
+ ENNReal.toReal_eq_zero_iff, Fin]
#align metric.Hausdorff_dist_zero_iff_closure_eq_closure Metric.hausdorffDist_zero_iff_closure_eq_closure
/-- Two closed sets are at zero Hausdorff distance if and only if they coincide -/
theorem IsClosed.hausdorffDist_zero_iff_eq (hs : IsClosed s) (ht : IsClosed t)
(fin : hausdorffEdist s t ≠ ⊤) : hausdorffDist s t = 0 ↔ s = t := by
- simp [← Hausdorff_edist_zero_iff_eq_of_closed hs ht, Hausdorff_dist, Ennreal.toReal_eq_zero_iff,
+ simp [← Hausdorff_edist_zero_iff_eq_of_closed hs ht, Hausdorff_dist, ENNReal.toReal_eq_zero_iff,
Fin]
#align is_closed.Hausdorff_dist_zero_iff_eq IsClosed.hausdorffDist_zero_iff_eq
@@ -992,16 +992,16 @@ open Emetric
/-- The (open) `δ`-thickening `thickening δ E` of a subset `E` in a pseudo emetric space consists
of those points that are at distance less than `δ` from some point of `E`. -/
def thickening (δ : ℝ) (E : Set α) : Set α :=
- { x : α | infEdist x E < Ennreal.ofReal δ }
+ { x : α | infEdist x E < ENNReal.ofReal δ }
#align metric.thickening Metric.thickening
-theorem mem_thickening_iff_infEdist_lt : x ∈ thickening δ s ↔ infEdist x s < Ennreal.ofReal δ :=
+theorem mem_thickening_iff_infEdist_lt : x ∈ thickening δ s ↔ infEdist x s < ENNReal.ofReal δ :=
Iff.rfl
#align metric.mem_thickening_iff_inf_edist_lt Metric.mem_thickening_iff_infEdist_lt
/-- The (open) thickening equals the preimage of an open interval under `inf_edist`. -/
theorem thickening_eq_preimage_infEdist (δ : ℝ) (E : Set α) :
- thickening δ E = (fun x => infEdist x E) ⁻¹' Iio (Ennreal.ofReal δ) :=
+ thickening δ E = (fun x => infEdist x E) ⁻¹' Iio (ENNReal.ofReal δ) :=
rfl
#align metric.thickening_eq_preimage_inf_edist Metric.thickening_eq_preimage_infEdist
@@ -1017,14 +1017,14 @@ theorem thickening_empty (δ : ℝ) : thickening δ (∅ : Set α) = ∅ := by
#align metric.thickening_empty Metric.thickening_empty
theorem thickening_of_nonpos (hδ : δ ≤ 0) (s : Set α) : thickening δ s = ∅ :=
- eq_empty_of_forall_not_mem fun x => ((Ennreal.ofReal_of_nonpos hδ).trans_le bot_le).not_lt
+ eq_empty_of_forall_not_mem fun x => ((ENNReal.ofReal_of_nonpos hδ).trans_le bot_le).not_lt
#align metric.thickening_of_nonpos Metric.thickening_of_nonpos
/-- The (open) thickening `thickening δ E` of a fixed subset `E` is an increasing function of the
thickening radius `δ`. -/
theorem thickening_mono {δ₁ δ₂ : ℝ} (hle : δ₁ ≤ δ₂) (E : Set α) :
thickening δ₁ E ⊆ thickening δ₂ E :=
- preimage_mono (Iio_subset_Iio (Ennreal.ofReal_le_ofReal hle))
+ preimage_mono (Iio_subset_Iio (ENNReal.ofReal_le_ofReal hle))
#align metric.thickening_mono Metric.thickening_mono
/-- The (open) thickening `thickening δ E` with a fixed thickening radius `δ` is
@@ -1034,13 +1034,13 @@ theorem thickening_subset_of_subset (δ : ℝ) {E₁ E₂ : Set α} (h : E₁
#align metric.thickening_subset_of_subset Metric.thickening_subset_of_subset
theorem mem_thickening_iff_exists_edist_lt {δ : ℝ} (E : Set α) (x : α) :
- x ∈ thickening δ E ↔ ∃ z ∈ E, edist x z < Ennreal.ofReal δ :=
+ x ∈ thickening δ E ↔ ∃ z ∈ E, edist x z < ENNReal.ofReal δ :=
infEdist_lt_iff
#align metric.mem_thickening_iff_exists_edist_lt Metric.mem_thickening_iff_exists_edist_lt
/-- The frontier of the (open) thickening of a set is contained in an `inf_edist` level set. -/
theorem frontier_thickening_subset (E : Set α) {δ : ℝ} :
- frontier (thickening δ E) ⊆ { x : α | infEdist x E = Ennreal.ofReal δ } :=
+ frontier (thickening δ E) ⊆ { x : α | infEdist x E = ENNReal.ofReal δ } :=
frontier_lt_subset_eq continuous_infEdist continuous_const
#align metric.frontier_thickening_subset Metric.frontier_thickening_subset
@@ -1053,8 +1053,8 @@ theorem frontier_thickening_disjoint (A : Set α) :
refine'
((disjoint_singleton.2 fun h => hr.ne _).Preimage _).mono (frontier_thickening_subset _)
(frontier_thickening_subset _)
- apply_fun Ennreal.toReal at h
- rwa [Ennreal.toReal_ofReal h₁, Ennreal.toReal_ofReal (h₁.trans hr.le)] at h
+ apply_fun ENNReal.toReal at h
+ rwa [ENNReal.toReal_ofReal h₁, ENNReal.toReal_ofReal (h₁.trans hr.le)] at h
#align metric.frontier_thickening_disjoint Metric.frontier_thickening_disjoint
variable {X : Type u} [PseudoMetricSpace X]
@@ -1063,13 +1063,13 @@ variable {X : Type u} [PseudoMetricSpace X]
it is at distance less than `δ` from some point of `E`. -/
theorem mem_thickening_iff {E : Set X} {x : X} : x ∈ thickening δ E ↔ ∃ z ∈ E, dist x z < δ :=
by
- have key_iff : ∀ z : X, edist x z < Ennreal.ofReal δ ↔ dist x z < δ :=
+ have key_iff : ∀ z : X, edist x z < ENNReal.ofReal δ ↔ dist x z < δ :=
by
intro z
rw [dist_edist]
- have d_lt_top : edist x z < ∞ := by simp only [edist_dist, Ennreal.ofReal_lt_top]
- have key := @Ennreal.ofReal_lt_ofReal_iff_of_nonneg (edist x z).toReal δ Ennreal.toReal_nonneg
- rwa [Ennreal.ofReal_toReal d_lt_top.ne] at key
+ have d_lt_top : edist x z < ∞ := by simp only [edist_dist, ENNReal.ofReal_lt_top]
+ have key := @ENNReal.ofReal_lt_ofReal_iff_of_nonneg (edist x z).toReal δ ENNReal.toReal_nonneg
+ rwa [ENNReal.ofReal_toReal d_lt_top.ne] at key
simp_rw [mem_thickening_iff_exists_edist_lt, key_iff]
#align metric.mem_thickening_iff Metric.mem_thickening_iff
@@ -1121,16 +1121,16 @@ open Emetric
/-- The closed `δ`-thickening `cthickening δ E` of a subset `E` in a pseudo emetric space consists
of those points that are at infimum distance at most `δ` from `E`. -/
def cthickening (δ : ℝ) (E : Set α) : Set α :=
- { x : α | infEdist x E ≤ Ennreal.ofReal δ }
+ { x : α | infEdist x E ≤ ENNReal.ofReal δ }
#align metric.cthickening Metric.cthickening
@[simp]
-theorem mem_cthickening_iff : x ∈ cthickening δ s ↔ infEdist x s ≤ Ennreal.ofReal δ :=
+theorem mem_cthickening_iff : x ∈ cthickening δ s ↔ infEdist x s ≤ ENNReal.ofReal δ :=
Iff.rfl
#align metric.mem_cthickening_iff Metric.mem_cthickening_iff
theorem mem_cthickening_of_edist_le (x y : α) (δ : ℝ) (E : Set α) (h : y ∈ E)
- (h' : edist x y ≤ Ennreal.ofReal δ) : x ∈ cthickening δ E :=
+ (h' : edist x y ≤ ENNReal.ofReal δ) : x ∈ cthickening δ E :=
(infEdist_le_edist_of_mem h).trans h'
#align metric.mem_cthickening_of_edist_le Metric.mem_cthickening_of_edist_le
@@ -1139,11 +1139,11 @@ theorem mem_cthickening_of_dist_le {α : Type _} [PseudoMetricSpace α] (x y :
by
apply mem_cthickening_of_edist_le x y δ E h
rw [edist_dist]
- exact Ennreal.ofReal_le_ofReal h'
+ exact ENNReal.ofReal_le_ofReal h'
#align metric.mem_cthickening_of_dist_le Metric.mem_cthickening_of_dist_le
theorem cthickening_eq_preimage_infEdist (δ : ℝ) (E : Set α) :
- cthickening δ E = (fun x => infEdist x E) ⁻¹' Iic (Ennreal.ofReal δ) :=
+ cthickening δ E = (fun x => infEdist x E) ⁻¹' Iic (ENNReal.ofReal δ) :=
rfl
#align metric.cthickening_eq_preimage_inf_edist Metric.cthickening_eq_preimage_infEdist
@@ -1155,13 +1155,13 @@ theorem isClosed_cthickening {δ : ℝ} {E : Set α} : IsClosed (cthickening δ
/-- The closed thickening of the empty set is empty. -/
@[simp]
theorem cthickening_empty (δ : ℝ) : cthickening δ (∅ : Set α) = ∅ := by
- simp only [cthickening, Ennreal.ofReal_ne_top, set_of_false, inf_edist_empty, top_le_iff]
+ simp only [cthickening, ENNReal.ofReal_ne_top, set_of_false, inf_edist_empty, top_le_iff]
#align metric.cthickening_empty Metric.cthickening_empty
theorem cthickening_of_nonpos {δ : ℝ} (hδ : δ ≤ 0) (E : Set α) : cthickening δ E = closure E :=
by
ext x
- simp [mem_closure_iff_inf_edist_zero, cthickening, Ennreal.ofReal_eq_zero.2 hδ]
+ simp [mem_closure_iff_inf_edist_zero, cthickening, ENNReal.ofReal_eq_zero.2 hδ]
#align metric.cthickening_of_nonpos Metric.cthickening_of_nonpos
/-- The closed thickening with radius zero is the closure of the set. -/
@@ -1178,7 +1178,7 @@ theorem cthickening_max_zero (δ : ℝ) (E : Set α) : cthickening (max 0 δ) E
the thickening radius `δ`. -/
theorem cthickening_mono {δ₁ δ₂ : ℝ} (hle : δ₁ ≤ δ₂) (E : Set α) :
cthickening δ₁ E ⊆ cthickening δ₂ E :=
- preimage_mono (Iic_subset_Iic.mpr (Ennreal.ofReal_le_ofReal hle))
+ preimage_mono (Iic_subset_Iic.mpr (ENNReal.ofReal_le_ofReal hle))
#align metric.cthickening_mono Metric.cthickening_mono
@[simp]
@@ -1186,7 +1186,7 @@ theorem cthickening_singleton {α : Type _} [PseudoMetricSpace α] (x : α) {δ
cthickening δ ({x} : Set α) = closedBall x δ :=
by
ext y
- simp [cthickening, edist_dist, Ennreal.ofReal_le_ofReal_iff hδ]
+ simp [cthickening, edist_dist, ENNReal.ofReal_le_ofReal_iff hδ]
#align metric.cthickening_singleton Metric.cthickening_singleton
theorem closedBall_subset_cthickening_singleton {α : Type _} [PseudoMetricSpace α] (x : α) (δ : ℝ) :
@@ -1205,14 +1205,14 @@ theorem cthickening_subset_of_subset (δ : ℝ) {E₁ E₂ : Set α} (h : E₁
theorem cthickening_subset_thickening {δ₁ : ℝ≥0} {δ₂ : ℝ} (hlt : (δ₁ : ℝ) < δ₂) (E : Set α) :
cthickening δ₁ E ⊆ thickening δ₂ E := fun _ hx =>
- lt_of_le_of_lt hx ((Ennreal.ofReal_lt_ofReal_iff (lt_of_le_of_lt δ₁.Prop hlt)).mpr hlt)
+ lt_of_le_of_lt hx ((ENNReal.ofReal_lt_ofReal_iff (lt_of_le_of_lt δ₁.Prop hlt)).mpr hlt)
#align metric.cthickening_subset_thickening Metric.cthickening_subset_thickening
/-- The closed thickening `cthickening δ₁ E` is contained in the open thickening `thickening δ₂ E`
if the radius of the latter is positive and larger. -/
theorem cthickening_subset_thickening' {δ₁ δ₂ : ℝ} (δ₂_pos : 0 < δ₂) (hlt : δ₁ < δ₂) (E : Set α) :
cthickening δ₁ E ⊆ thickening δ₂ E := fun _ hx =>
- lt_of_le_of_lt hx ((Ennreal.ofReal_lt_ofReal_iff δ₂_pos).mpr hlt)
+ lt_of_le_of_lt hx ((ENNReal.ofReal_lt_ofReal_iff δ₂_pos).mpr hlt)
#align metric.cthickening_subset_thickening' Metric.cthickening_subset_thickening'
/-- The open thickening `thickening δ E` is contained in the closed thickening `cthickening δ E`
@@ -1302,10 +1302,10 @@ theorem thickening_unionᵢ (δ : ℝ) (f : ι → Set α) :
theorem ediam_cthickening_le (ε : ℝ≥0) : Emetric.diam (cthickening ε s) ≤ Emetric.diam s + 2 * ε :=
by
- refine' diam_le fun x hx y hy => Ennreal.le_of_forall_pos_le_add fun δ hδ _ => _
- rw [mem_cthickening_iff, Ennreal.ofReal_coe_nNReal] at hx hy
- have hε : (ε : ℝ≥0∞) < ε + ↑(δ / 2) := Ennreal.coe_lt_coe.2 (lt_add_of_pos_right _ <| half_pos hδ)
- rw [Ennreal.coe_div two_ne_zero, Ennreal.coe_two] at hε
+ refine' diam_le fun x hx y hy => ENNReal.le_of_forall_pos_le_add fun δ hδ _ => _
+ rw [mem_cthickening_iff, ENNReal.ofReal_coe_nnreal] at hx hy
+ have hε : (ε : ℝ≥0∞) < ε + ↑(δ / 2) := ENNReal.coe_lt_coe.2 (lt_add_of_pos_right _ <| half_pos hδ)
+ rw [ENNReal.coe_div two_ne_zero, ENNReal.coe_two] at hε
replace hx := hx.trans_lt hε
replace hy := hy.trans_lt hε
rw [inf_edist_lt_iff] at hx hy
@@ -1319,7 +1319,7 @@ theorem ediam_cthickening_le (ε : ℝ≥0) : Emetric.diam (cthickening ε s)
_)
-- Now we're done, but `ring` won't do it because we're on `ennreal` :(
rw [← add_assoc, ← two_mul, mul_add,
- Ennreal.mul_div_cancel' Ennreal.two_ne_zero Ennreal.two_ne_top]
+ ENNReal.mul_div_cancel' ENNReal.two_ne_zero ENNReal.two_ne_top]
abel
#align metric.ediam_cthickening_le Metric.ediam_cthickening_le
@@ -1333,12 +1333,12 @@ theorem diam_cthickening_le {α : Type _} [PseudoMetricSpace α] (s : Set α) (h
by_cases hs : bounded (cthickening ε s)
· replace hs := hs.mono (self_subset_cthickening _)
lift ε to ℝ≥0 using hε
- have : (2 : ℝ≥0∞) * ε ≠ ⊤ := by simp [Ennreal.mul_eq_top]
+ have : (2 : ℝ≥0∞) * ε ≠ ⊤ := by simp [ENNReal.mul_eq_top]
refine'
- (Ennreal.toReal_mono (Ennreal.add_ne_top.2 ⟨hs.ediam_ne_top, this⟩) <|
+ (ENNReal.toReal_mono (ENNReal.add_ne_top.2 ⟨hs.ediam_ne_top, this⟩) <|
ediam_cthickening_le ε).trans_eq
_
- simp [Ennreal.toReal_add hs.ediam_ne_top this, diam]
+ simp [ENNReal.toReal_add hs.ediam_ne_top this, diam]
· rw [diam_eq_zero_of_unbounded hs]
positivity
#align metric.diam_cthickening_le Metric.diam_cthickening_le
@@ -1367,7 +1367,7 @@ theorem cthickening_closure : cthickening δ (closure s) = cthickening δ s := b
simp_rw [cthickening, inf_edist_closure]
#align metric.cthickening_closure Metric.cthickening_closure
-open Ennreal
+open ENNReal
theorem Disjoint.exists_thickenings (hst : Disjoint s t) (hs : IsCompact s) (ht : IsClosed t) :
∃ δ, 0 < δ ∧ Disjoint (thickening δ s) (thickening δ t) :=
@@ -1377,14 +1377,14 @@ theorem Disjoint.exists_thickenings (hst : Disjoint s t) (hs : IsCompact s) (ht
rw [disjoint_iff_inf_le]
rintro z ⟨hzs, hzt⟩
rw [mem_thickening_iff_exists_edist_lt] at hzs hzt
- rw [← NNReal.coe_two, ← NNReal.coe_div, Ennreal.ofReal_coe_nNReal] at hzs hzt
+ rw [← NNReal.coe_two, ← NNReal.coe_div, ENNReal.ofReal_coe_nnreal] at hzs hzt
obtain ⟨x, hx, hzx⟩ := hzs
obtain ⟨y, hy, hzy⟩ := hzt
refine' (h x hx y hy).not_le _
calc
edist x y ≤ edist z x + edist z y := edist_triangle_left _ _ _
_ ≤ ↑(r / 2) + ↑(r / 2) := add_le_add hzx.le hzy.le
- _ = r := by rw [← Ennreal.coe_add, add_halves]
+ _ = r := by rw [← ENNReal.coe_add, add_halves]
#align disjoint.exists_thickenings Disjoint.exists_thickenings
@@ -1429,12 +1429,12 @@ theorem cthickening_eq_interᵢ_cthickening' {δ : ℝ} (s : Set ℝ) (hsδ : s
· unfold thickening cthickening
intro x hx
simp only [mem_Inter, mem_set_of_eq] at *
- apply Ennreal.le_of_forall_pos_le_add
+ apply ENNReal.le_of_forall_pos_le_add
intro η η_pos _
rcases hs (δ + η) (lt_add_of_pos_right _ (nnreal.coe_pos.mpr η_pos)) with ⟨ε, ⟨hsε, hε⟩⟩
- apply ((hx ε hsε).trans (Ennreal.ofReal_le_ofReal hε.2)).trans
- rw [Ennreal.coe_nNReal_eq η]
- exact Ennreal.ofReal_add_le
+ apply ((hx ε hsε).trans (ENNReal.ofReal_le_ofReal hε.2)).trans
+ rw [ENNReal.coe_nnreal_eq η]
+ exact ENNReal.ofReal_add_le
#align metric.cthickening_eq_Inter_cthickening' Metric.cthickening_eq_interᵢ_cthickening'
theorem cthickening_eq_interᵢ_cthickening {δ : ℝ} (E : Set α) :
@@ -1515,7 +1515,7 @@ theorem closure_eq_interᵢ_thickening (E : Set α) :
/-- The frontier of the closed thickening of a set is contained in an `inf_edist` level set. -/
theorem frontier_cthickening_subset (E : Set α) {δ : ℝ} :
- frontier (cthickening δ E) ⊆ { x : α | infEdist x E = Ennreal.ofReal δ } :=
+ frontier (cthickening δ E) ⊆ { x : α | infEdist x E = ENNReal.ofReal δ } :=
frontier_le_subset_eq continuous_infEdist continuous_const
#align metric.frontier_cthickening_subset Metric.frontier_cthickening_subset
@@ -1548,10 +1548,10 @@ theorem IsCompact.cthickening_eq_bUnion_closedBall {α : Type _} [PseudoMetricSp
refine'
subset.antisymm (fun x hx => _) (Union₂_subset fun x hx => closed_ball_subset_cthickening hx _)
obtain ⟨y, yE, hy⟩ : ∃ y ∈ E, inf_edist x E = edist x y := hE.exists_inf_edist_eq_edist hne _
- have D1 : edist x y ≤ Ennreal.ofReal δ := (le_of_eq hy.symm).trans hx
+ have D1 : edist x y ≤ ENNReal.ofReal δ := (le_of_eq hy.symm).trans hx
have D2 : dist x y ≤ δ := by
rw [edist_dist] at D1
- exact (Ennreal.ofReal_le_ofReal_iff hδ).1 D1
+ exact (ENNReal.ofReal_le_ofReal_iff hδ).1 D1
exact mem_bUnion yE D2
#align is_compact.cthickening_eq_bUnion_closed_ball IsCompact.cthickening_eq_bUnion_closedBall
@@ -1566,8 +1566,8 @@ theorem cthickening_eq_bUnion_closedBall {α : Type _} [PseudoMetricSpace α] [P
obtain ⟨y, yE, hy⟩ : ∃ y ∈ closure E, inf_dist x (closure E) = dist x y :=
is_closed_closure.exists_inf_dist_eq_dist (closure_nonempty_iff.mpr hne) x
replace hy : dist x y ≤ δ :=
- (Ennreal.ofReal_le_ofReal_iff hδ).mp
- (((congr_arg Ennreal.ofReal hy.symm).le.trans Ennreal.ofReal_toReal_le).trans hx)
+ (ENNReal.ofReal_le_ofReal_iff hδ).mp
+ (((congr_arg ENNReal.ofReal hy.symm).le.trans ENNReal.ofReal_toReal_le).trans hx)
exact mem_bUnion yE hy
#align metric.cthickening_eq_bUnion_closed_ball Metric.cthickening_eq_bUnion_closedBall
@@ -1578,20 +1578,20 @@ theorem IsClosed.cthickening_eq_bUnion_closedBall {α : Type _} [PseudoMetricSpa
/-- For the equality, see `inf_edist_cthickening`. -/
theorem infEdist_le_infEdist_cthickening_add :
- infEdist x s ≤ infEdist x (cthickening δ s) + Ennreal.ofReal δ :=
+ infEdist x s ≤ infEdist x (cthickening δ s) + ENNReal.ofReal δ :=
by
refine' le_of_forall_lt' fun r h => _
simp_rw [← lt_tsub_iff_right, inf_edist_lt_iff, mem_cthickening_iff] at h
obtain ⟨y, hy, hxy⟩ := h
exact
inf_edist_le_edist_add_inf_edist.trans_lt
- ((Ennreal.add_lt_add_of_lt_of_le (hy.trans_lt Ennreal.ofReal_lt_top).Ne hxy hy).trans_le
+ ((ENNReal.add_lt_add_of_lt_of_le (hy.trans_lt ENNReal.ofReal_lt_top).Ne hxy hy).trans_le
(tsub_add_cancel_of_le <| le_self_add.trans (lt_tsub_iff_left.1 hxy).le).le)
#align metric.inf_edist_le_inf_edist_cthickening_add Metric.infEdist_le_infEdist_cthickening_add
/-- For the equality, see `inf_edist_thickening`. -/
theorem infEdist_le_infEdist_thickening_add :
- infEdist x s ≤ infEdist x (thickening δ s) + Ennreal.ofReal δ :=
+ infEdist x s ≤ infEdist x (thickening δ s) + ENNReal.ofReal δ :=
infEdist_le_infEdist_cthickening_add.trans <|
add_le_add_right (infEdist_anti <| thickening_subset_cthickening _ _) _
#align metric.inf_edist_le_inf_edist_thickening_add Metric.infEdist_le_infEdist_thickening_add
@@ -1606,9 +1606,9 @@ theorem thickening_thickening_subset (ε δ : ℝ) (s : Set α) :
obtain hδ | hδ := le_total δ 0
· simp only [thickening_of_nonpos hδ, thickening_empty, empty_subset]
intro x
- simp_rw [mem_thickening_iff_exists_edist_lt, Ennreal.ofReal_add hε hδ]
+ simp_rw [mem_thickening_iff_exists_edist_lt, ENNReal.ofReal_add hε hδ]
exact fun ⟨y, ⟨z, hz, hy⟩, hx⟩ =>
- ⟨z, hz, (edist_triangle _ _ _).trans_lt <| Ennreal.add_lt_add hx hy⟩
+ ⟨z, hz, (edist_triangle _ _ _).trans_lt <| ENNReal.add_lt_add hx hy⟩
#align metric.thickening_thickening_subset Metric.thickening_thickening_subset
/-- For the equality, see `thickening_cthickening`. -/
@@ -1620,11 +1620,11 @@ theorem thickening_cthickening_subset (ε : ℝ) (hδ : 0 ≤ δ) (s : Set α) :
· simp only [thickening_of_nonpos hε, empty_subset]
intro x
simp_rw [mem_thickening_iff_exists_edist_lt, mem_cthickening_iff, ← inf_edist_lt_iff,
- Ennreal.ofReal_add hε hδ]
+ ENNReal.ofReal_add hε hδ]
rintro ⟨y, hy, hxy⟩
exact
inf_edist_le_edist_add_inf_edist.trans_lt
- (Ennreal.add_lt_add_of_lt_of_le (hy.trans_lt Ennreal.ofReal_lt_top).Ne hxy hy)
+ (ENNReal.add_lt_add_of_lt_of_le (hy.trans_lt ENNReal.ofReal_lt_top).Ne hxy hy)
#align metric.thickening_cthickening_subset Metric.thickening_cthickening_subset
/-- For the equality, see `cthickening_thickening`. -/
@@ -1635,7 +1635,7 @@ theorem cthickening_thickening_subset (hε : 0 ≤ ε) (δ : ℝ) (s : Set α) :
obtain hδ | hδ := le_total δ 0
· simp only [thickening_of_nonpos hδ, cthickening_empty, empty_subset]
intro x
- simp_rw [mem_cthickening_iff, Ennreal.ofReal_add hε hδ]
+ simp_rw [mem_cthickening_iff, ENNReal.ofReal_add hε hδ]
exact fun hx => inf_edist_le_inf_edist_thickening_add.trans (add_le_add_right hx _)
#align metric.cthickening_thickening_subset Metric.cthickening_thickening_subset
@@ -1645,7 +1645,7 @@ theorem cthickening_cthickening_subset (hε : 0 ≤ ε) (hδ : 0 ≤ δ) (s : Se
cthickening ε (cthickening δ s) ⊆ cthickening (ε + δ) s :=
by
intro x
- simp_rw [mem_cthickening_iff, Ennreal.ofReal_add hε hδ]
+ simp_rw [mem_cthickening_iff, ENNReal.ofReal_add hε hδ]
exact fun hx => inf_edist_le_inf_edist_cthickening_add.trans (add_le_add_right hx _)
#align metric.cthickening_cthickening_subset Metric.cthickening_cthickening_subset
mathlib commit https://github.com/leanprover-community/mathlib/commit/271bf175e6c51b8d31d6c0107b7bb4a967c7277e
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Sébastien Gouëzel
! This file was ported from Lean 3 source module topology.metric_space.hausdorff_distance
-! leanprover-community/mathlib commit f2ce6086713c78a7f880485f7917ea547a215982
+! leanprover-community/mathlib commit afdb4fa3b32d41106a4a09b371ce549ad7958abd
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -1332,10 +1332,11 @@ theorem diam_cthickening_le {α : Type _} [PseudoMetricSpace α] (s : Set α) (h
by
by_cases hs : bounded (cthickening ε s)
· replace hs := hs.mono (self_subset_cthickening _)
- have : (2 : ℝ≥0∞) * @coe ℝ≥0 _ _ ⟨ε, hε⟩ ≠ ⊤ := by simp
+ lift ε to ℝ≥0 using hε
+ have : (2 : ℝ≥0∞) * ε ≠ ⊤ := by simp [Ennreal.mul_eq_top]
refine'
(Ennreal.toReal_mono (Ennreal.add_ne_top.2 ⟨hs.ediam_ne_top, this⟩) <|
- ediam_cthickening_le ⟨ε, hε⟩).trans_eq
+ ediam_cthickening_le ε).trans_eq
_
simp [Ennreal.toReal_add hs.ediam_ne_top this, diam]
· rw [diam_eq_zero_of_unbounded hs]
@@ -1383,7 +1384,7 @@ theorem Disjoint.exists_thickenings (hst : Disjoint s t) (hs : IsCompact s) (ht
calc
edist x y ≤ edist z x + edist z y := edist_triangle_left _ _ _
_ ≤ ↑(r / 2) + ↑(r / 2) := add_le_add hzx.le hzy.le
- _ = r := by rw [← Ennreal.coe_add, NNReal.add_halves]
+ _ = r := by rw [← Ennreal.coe_add, add_halves]
#align disjoint.exists_thickenings Disjoint.exists_thickenings
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
@@ -427,7 +427,7 @@ theorem _root_.Disjoint.exists_thickenings (hst : Disjoint s t) (hs : IsCompact
refine' (h x hx y hy).not_le _
calc
edist x y ≤ edist z x + edist z y := edist_triangle_left _ _ _
- _ ≤ ↑(r / 2) + ↑(r / 2) := (add_le_add hzx.le hzy.le)
+ _ ≤ ↑(r / 2) + ↑(r / 2) := add_le_add hzx.le hzy.le
_ = r := by rw [← ENNReal.coe_add, add_halves]
#align disjoint.exists_thickenings Disjoint.exists_thickenings
@@ -159,8 +159,8 @@ theorem infEdist_closure : infEdist x (closure s) = infEdist x s := by
obtain ⟨z : α, zs : z ∈ s, dyz : edist y z < ↑ε / 2⟩ := EMetric.mem_closure_iff.1 ycs (ε / 2) ε0
calc
infEdist x s ≤ edist x z := infEdist_le_edist_of_mem zs
- _ ≤ edist x y + edist y z := (edist_triangle _ _ _)
- _ ≤ infEdist x (closure s) + ε / 2 + ε / 2 := (add_le_add (le_of_lt hy) (le_of_lt dyz))
+ _ ≤ edist x y + edist y z := edist_triangle _ _ _
+ _ ≤ infEdist x (closure s) + ε / 2 + ε / 2 := add_le_add (le_of_lt hy) (le_of_lt dyz)
_ = infEdist x (closure s) + ↑ε := by rw [add_assoc, ENNReal.add_halves]
#align emetric.inf_edist_closure EMetric.infEdist_closure
@@ -627,7 +627,7 @@ theorem continuousAt_inv_infDist_pt (h : x ∉ closure s) :
rcases s.eq_empty_or_nonempty with (rfl | hs)
· simp only [infDist_empty, continuousAt_const]
· refine (continuous_infDist_pt s).continuousAt.inv₀ ?_
- rwa [Ne.def, ← mem_closure_iff_infDist_zero hs]
+ rwa [Ne, ← mem_closure_iff_infDist_zero hs]
/-- The infimum distance is invariant under isometries. -/
theorem infDist_image (hΦ : Isometry Φ) : infDist (Φ x) (Φ '' t) = infDist x t := by
@@ -506,7 +506,7 @@ theorem infEdist_ne_top (h : s.Nonempty) : infEdist x s ≠ ⊤ := by
exact ne_top_of_le_ne_top (edist_ne_top _ _) (infEdist_le_edist_of_mem hy)
#align metric.inf_edist_ne_top Metric.infEdist_ne_top
--- Porting note: new lemma;
+-- Porting note (#10756): new lemma;
-- Porting note (#11215): TODO: make it a `simp` lemma
theorem infEdist_eq_top_iff : infEdist x s = ∞ ↔ s = ∅ := by
rcases s.eq_empty_or_nonempty with rfl | hs <;> simp [*, Nonempty.ne_empty, infEdist_ne_top]
@@ -154,10 +154,9 @@ theorem infEdist_closure : infEdist x (closure s) = infEdist x s := by
have ε0 : 0 < (ε / 2 : ℝ≥0∞) := by simpa [pos_iff_ne_zero] using εpos
have : infEdist x (closure s) < infEdist x (closure s) + ε / 2 :=
ENNReal.lt_add_right h.ne ε0.ne'
- rcases infEdist_lt_iff.mp this with ⟨y, ycs, hy⟩
- -- y : α, ycs : y ∈ closure s, hy : edist x y < infEdist x (closure s) + ↑ε / 2
- rcases EMetric.mem_closure_iff.1 ycs (ε / 2) ε0 with ⟨z, zs, dyz⟩
- -- z : α, zs : z ∈ s, dyz : edist y z < ↑ε / 2
+ obtain ⟨y : α, ycs : y ∈ closure s, hy : edist x y < infEdist x (closure s) + ↑ε / 2⟩ :=
+ infEdist_lt_iff.mp this
+ obtain ⟨z : α, zs : z ∈ s, dyz : edist y z < ↑ε / 2⟩ := EMetric.mem_closure_iff.1 ycs (ε / 2) ε0
calc
infEdist x s ≤ edist x z := infEdist_le_edist_of_mem zs
_ ≤ edist x y + edist y z := (edist_triangle _ _ _)
@@ -339,16 +338,15 @@ theorem infEdist_le_infEdist_add_hausdorffEdist :
have ε0 : (ε / 2 : ℝ≥0∞) ≠ 0 := by simpa [pos_iff_ne_zero] using εpos
have : infEdist x s < infEdist x s + ε / 2 :=
ENNReal.lt_add_right (ENNReal.add_lt_top.1 h).1.ne ε0
- rcases infEdist_lt_iff.mp this with ⟨y, ys, dxy⟩
- -- y : α, ys : y ∈ s, dxy : edist x y < infEdist x s + ↑ε / 2
+ obtain ⟨y : α, ys : y ∈ s, dxy : edist x y < infEdist x s + ↑ε / 2⟩ := infEdist_lt_iff.mp this
have : hausdorffEdist s t < hausdorffEdist s t + ε / 2 :=
ENNReal.lt_add_right (ENNReal.add_lt_top.1 h).2.ne ε0
- rcases exists_edist_lt_of_hausdorffEdist_lt ys this with ⟨z, zt, dyz⟩
- -- z : α, zt : z ∈ t, dyz : edist y z < Hausdorff_edist s t + ↑ε / 2
+ obtain ⟨z : α, zt : z ∈ t, dyz : edist y z < hausdorffEdist s t + ↑ε / 2⟩ :=
+ exists_edist_lt_of_hausdorffEdist_lt ys this
calc
infEdist x t ≤ edist x z := infEdist_le_edist_of_mem zt
- _ ≤ edist x y + edist y z := (edist_triangle _ _ _)
- _ ≤ infEdist x s + ε / 2 + (hausdorffEdist s t + ε / 2) := (add_le_add dxy.le dyz.le)
+ _ ≤ edist x y + edist y z := edist_triangle _ _ _
+ _ ≤ infEdist x s + ε / 2 + (hausdorffEdist s t + ε / 2) := add_le_add dxy.le dyz.le
_ = infEdist x s + hausdorffEdist s t + ε := by
simp [ENNReal.add_halves, add_comm, add_left_comm]
#align emetric.inf_edist_le_inf_edist_add_Hausdorff_edist EMetric.infEdist_le_infEdist_add_hausdorffEdist
@@ -124,7 +124,7 @@ theorem frontier_thickening_disjoint (A : Set α) :
variable {X : Type u} [PseudoMetricSpace X]
--- Porting note: new lemma
+-- Porting note (#10756): new lemma
theorem mem_thickening_iff_infDist_lt {E : Set X} {x : X} (h : E.Nonempty) :
x ∈ thickening δ E ↔ infDist x E < δ :=
lt_ofReal_iff_toReal_lt (infEdist_ne_top h)
@@ -623,7 +623,7 @@ theorem _root_.IsClosed.not_mem_iff_infDist_pos (h : IsClosed s) (hs : s.Nonempt
simp [h.mem_iff_infDist_zero hs, infDist_nonneg.gt_iff_ne]
#align is_closed.not_mem_iff_inf_dist_pos IsClosed.not_mem_iff_infDist_pos
--- Porting note: new lemma
+-- Porting note (#10756): new lemma
theorem continuousAt_inv_infDist_pt (h : x ∉ closure s) :
ContinuousAt (fun x ↦ (infDist x s)⁻¹) x := by
rcases s.eq_empty_or_nonempty with (rfl | hs)
@@ -508,7 +508,8 @@ theorem infEdist_ne_top (h : s.Nonempty) : infEdist x s ≠ ⊤ := by
exact ne_top_of_le_ne_top (edist_ne_top _ _) (infEdist_le_edist_of_mem hy)
#align metric.inf_edist_ne_top Metric.infEdist_ne_top
--- Porting note: new lemma; todo: make it a `simp` lemma
+-- Porting note: new lemma;
+-- Porting note (#11215): TODO: make it a `simp` lemma
theorem infEdist_eq_top_iff : infEdist x s = ∞ ↔ s = ∅ := by
rcases s.eq_empty_or_nonempty with rfl | hs <;> simp [*, Nonempty.ne_empty, infEdist_ne_top]
Homogenises porting notes via capitalisation and addition of whitespace.
It makes the following changes:
@@ -124,7 +124,7 @@ theorem frontier_thickening_disjoint (A : Set α) :
variable {X : Type u} [PseudoMetricSpace X]
--- porting note: new lemma
+-- Porting note: new lemma
theorem mem_thickening_iff_infDist_lt {E : Set X} {x : X} (h : E.Nonempty) :
x ∈ thickening δ E ↔ infDist x E < δ :=
lt_ofReal_iff_toReal_lt (infEdist_ne_top h)
Homogenises porting notes via capitalisation and addition of whitespace.
It makes the following changes:
@@ -508,7 +508,7 @@ theorem infEdist_ne_top (h : s.Nonempty) : infEdist x s ≠ ⊤ := by
exact ne_top_of_le_ne_top (edist_ne_top _ _) (infEdist_le_edist_of_mem hy)
#align metric.inf_edist_ne_top Metric.infEdist_ne_top
--- porting note: new lemma; todo: make it a `simp` lemma
+-- Porting note: new lemma; todo: make it a `simp` lemma
theorem infEdist_eq_top_iff : infEdist x s = ∞ ↔ s = ∅ := by
rcases s.eq_empty_or_nonempty with rfl | hs <;> simp [*, Nonempty.ne_empty, infEdist_ne_top]
@@ -622,7 +622,7 @@ theorem _root_.IsClosed.not_mem_iff_infDist_pos (h : IsClosed s) (hs : s.Nonempt
simp [h.mem_iff_infDist_zero hs, infDist_nonneg.gt_iff_ne]
#align is_closed.not_mem_iff_inf_dist_pos IsClosed.not_mem_iff_infDist_pos
--- porting note: new lemma
+-- Porting note: new lemma
theorem continuousAt_inv_infDist_pt (h : x ∉ closure s) :
ContinuousAt (fun x ↦ (infDist x s)⁻¹) x := by
rcases s.eq_empty_or_nonempty with (rfl | hs)
@@ -242,7 +242,7 @@ theorem _root_.IsOpen.exists_iUnion_isClosed {U : Set α} (hU : IsOpen U) :
exact ⟨n, hn.le⟩
show Monotone F
· intro m n hmn x hx
- simp only [mem_Ici, mem_preimage] at hx ⊢
+ simp only [F, mem_Ici, mem_preimage] at hx ⊢
apply le_trans (pow_le_pow_right_of_le_one' a_lt_one.le hmn) hx
#align is_open.exists_Union_is_closed IsOpen.exists_iUnion_isClosed
@@ -425,7 +425,7 @@ theorem hausdorffEdist_closure₂ : hausdorffEdist s (closure t) = hausdorffEdis
#align emetric.Hausdorff_edist_closure₂ EMetric.hausdorffEdist_closure₂
/-- The Hausdorff edistance between sets or their closures is the same. -/
--- @[simp] -- Porting note: simp can prove this
+-- @[simp] -- Porting note (#10618): simp can prove this
theorem hausdorffEdist_closure : hausdorffEdist (closure s) (closure t) = hausdorffEdist s t := by
simp
#align emetric.Hausdorff_edist_closure EMetric.hausdorffEdist_closure
@@ -885,7 +885,7 @@ theorem hausdorffDist_closure₂ : hausdorffDist s (closure t) = hausdorffDist s
#align metric.Hausdorff_dist_closure₂ Metric.hausdorffDist_closure₂
/-- The Hausdorff distances between two sets and their closures coincide. -/
--- @[simp] -- Porting note: simp can prove this
+-- @[simp] -- Porting note (#10618): simp can prove this
theorem hausdorffDist_closure : hausdorffDist (closure s) (closure t) = hausdorffDist s t := by
simp [hausdorffDist]
#align metric.Hausdorff_dist_closure Metric.hausdorffDist_closure
The file was becoming a bit large (1550 lines). Split in two files of about 900 and 700 lines: the first file contains more basic material, the second file contains all material related to thickenings.
Extend the module docstrings by mentioning the main results in this file.
The file was becoming a bit large (1550 lines). Split in two files of about 900 and 700 lines: the first file contains more basic material, the second file contains all material related to thickenings.
Extend the module docstrings by mentioning the main results in this file.
@@ -5,7 +5,6 @@ Authors: Sébastien Gouëzel
-/
import Mathlib.Analysis.SpecificLimits.Basic
import Mathlib.Topology.MetricSpace.IsometricSMul
-import Mathlib.Topology.Instances.ENNReal
#align_import topology.metric_space.hausdorff_distance from "leanprover-community/mathlib"@"bc91ed7093bf098d253401e69df601fc33dde156"
@@ -26,15 +25,35 @@ This files introduces:
* `EMetric.hausdorffEdist s t`, the Hausdorff edistance of two sets in an emetric space
* Versions of these notions on metric spaces, called respectively `Metric.infDist`
and `Metric.hausdorffDist`
-* `Metric.thickening δ s`, the open thickening by radius `δ` of a set `s` in a pseudo emetric space.
-* `Metric.cthickening δ s`, the closed thickening by radius `δ` of a set `s` in a pseudo emetric
- space.
+
+## Main results
+* `infEdist_closure`: the edistance to a set and its closure coincide
+* `EMetric.mem_closure_iff_infEdist_zero`: a point `x` belongs to the closure of `s` iff
+ `infEdist x s = 0`
+* `IsCompact.exists_infEdist_eq_edist`: if `s` is compact and non-empty, there exists a point `y`
+ which attains this edistance
+* `IsOpen.exists_iUnion_isClosed`: every open set `U` can be written as the increasing union
+ of countably many closed subsets of `U`
+
+* `hausdorffEdist_closure`: replacing a set by its closure does not change the Hausdorff edistance
+* `hausdorffEdist_zero_iff_closure_eq_closure`: two sets have Hausdorff edistance zero
+ iff their closures coincide
+* the Hausdorff edistance is symmetric and satisfies the triangle inequality
+* in particular, closed sets in an emetric space are an emetric space
+ (this is shown in `EMetricSpace.closeds.emetricspace`)
+
+* versions of these notions on metric spaces
+* `hausdorffEdist_ne_top_of_nonempty_of_bounded`: if two sets in a metric space
+ are nonempty and bounded in a metric space, they are at finite Hausdorff edistance.
+
+## Tags
+metric space, Hausdorff distance
-/
noncomputable section
-open Classical NNReal ENNReal Topology Set Function TopologicalSpace Filter Pointwise Bornology
+open NNReal ENNReal Topology Set Filter Pointwise Bornology
universe u v w
@@ -887,657 +906,4 @@ theorem _root_.IsClosed.hausdorffDist_zero_iff_eq (hs : IsClosed s) (ht : IsClos
end
---section
-section Thickening
-
-variable [PseudoEMetricSpace α] {δ : ℝ} {s : Set α} {x : α}
-
-open EMetric
-
-/-- The (open) `δ`-thickening `Metric.thickening δ E` of a subset `E` in a pseudo emetric space
-consists of those points that are at distance less than `δ` from some point of `E`. -/
-def thickening (δ : ℝ) (E : Set α) : Set α :=
- { x : α | infEdist x E < ENNReal.ofReal δ }
-#align metric.thickening Metric.thickening
-
-theorem mem_thickening_iff_infEdist_lt : x ∈ thickening δ s ↔ infEdist x s < ENNReal.ofReal δ :=
- Iff.rfl
-#align metric.mem_thickening_iff_inf_edist_lt Metric.mem_thickening_iff_infEdist_lt
-
-/-- An exterior point of a subset `E` (i.e., a point outside the closure of `E`) is not in the
-(open) `δ`-thickening of `E` for small enough positive `δ`. -/
-lemma eventually_not_mem_thickening_of_infEdist_pos {E : Set α} {x : α} (h : x ∉ closure E) :
- ∀ᶠ δ in 𝓝 (0 : ℝ), x ∉ Metric.thickening δ E := by
- obtain ⟨ε, ⟨ε_pos, ε_lt⟩⟩ := exists_real_pos_lt_infEdist_of_not_mem_closure h
- filter_upwards [eventually_lt_nhds ε_pos] with δ hδ
- simp only [thickening, mem_setOf_eq, not_lt]
- exact (ENNReal.ofReal_le_ofReal hδ.le).trans ε_lt.le
-
-/-- The (open) thickening equals the preimage of an open interval under `EMetric.infEdist`. -/
-theorem thickening_eq_preimage_infEdist (δ : ℝ) (E : Set α) :
- thickening δ E = (infEdist · E) ⁻¹' Iio (ENNReal.ofReal δ) :=
- rfl
-#align metric.thickening_eq_preimage_inf_edist Metric.thickening_eq_preimage_infEdist
-
-/-- The (open) thickening is an open set. -/
-theorem isOpen_thickening {δ : ℝ} {E : Set α} : IsOpen (thickening δ E) :=
- Continuous.isOpen_preimage continuous_infEdist _ isOpen_Iio
-#align metric.is_open_thickening Metric.isOpen_thickening
-
-/-- The (open) thickening of the empty set is empty. -/
-@[simp]
-theorem thickening_empty (δ : ℝ) : thickening δ (∅ : Set α) = ∅ := by
- simp only [thickening, setOf_false, infEdist_empty, not_top_lt]
-#align metric.thickening_empty Metric.thickening_empty
-
-theorem thickening_of_nonpos (hδ : δ ≤ 0) (s : Set α) : thickening δ s = ∅ :=
- eq_empty_of_forall_not_mem fun _ => ((ENNReal.ofReal_of_nonpos hδ).trans_le bot_le).not_lt
-#align metric.thickening_of_nonpos Metric.thickening_of_nonpos
-
-/-- The (open) thickening `Metric.thickening δ E` of a fixed subset `E` is an increasing function of
-the thickening radius `δ`. -/
-theorem thickening_mono {δ₁ δ₂ : ℝ} (hle : δ₁ ≤ δ₂) (E : Set α) :
- thickening δ₁ E ⊆ thickening δ₂ E :=
- preimage_mono (Iio_subset_Iio (ENNReal.ofReal_le_ofReal hle))
-#align metric.thickening_mono Metric.thickening_mono
-
-/-- The (open) thickening `Metric.thickening δ E` with a fixed thickening radius `δ` is
-an increasing function of the subset `E`. -/
-theorem thickening_subset_of_subset (δ : ℝ) {E₁ E₂ : Set α} (h : E₁ ⊆ E₂) :
- thickening δ E₁ ⊆ thickening δ E₂ := fun _ hx => lt_of_le_of_lt (infEdist_anti h) hx
-#align metric.thickening_subset_of_subset Metric.thickening_subset_of_subset
-
-theorem mem_thickening_iff_exists_edist_lt {δ : ℝ} (E : Set α) (x : α) :
- x ∈ thickening δ E ↔ ∃ z ∈ E, edist x z < ENNReal.ofReal δ :=
- infEdist_lt_iff
-#align metric.mem_thickening_iff_exists_edist_lt Metric.mem_thickening_iff_exists_edist_lt
-
-/-- The frontier of the (open) thickening of a set is contained in an `EMetric.infEdist` level
-set. -/
-theorem frontier_thickening_subset (E : Set α) {δ : ℝ} :
- frontier (thickening δ E) ⊆ { x : α | infEdist x E = ENNReal.ofReal δ } :=
- frontier_lt_subset_eq continuous_infEdist continuous_const
-#align metric.frontier_thickening_subset Metric.frontier_thickening_subset
-
-theorem frontier_thickening_disjoint (A : Set α) :
- Pairwise (Disjoint on fun r : ℝ => frontier (thickening r A)) := by
- refine' (pairwise_disjoint_on _).2 fun r₁ r₂ hr => _
- rcases le_total r₁ 0 with h₁ | h₁
- · simp [thickening_of_nonpos h₁]
- refine' ((disjoint_singleton.2 fun h => hr.ne _).preimage _).mono (frontier_thickening_subset _)
- (frontier_thickening_subset _)
- apply_fun ENNReal.toReal at h
- rwa [ENNReal.toReal_ofReal h₁, ENNReal.toReal_ofReal (h₁.trans hr.le)] at h
-#align metric.frontier_thickening_disjoint Metric.frontier_thickening_disjoint
-
-variable {X : Type u} [PseudoMetricSpace X]
-
--- porting note: new lemma
-theorem mem_thickening_iff_infDist_lt {E : Set X} {x : X} (h : E.Nonempty) :
- x ∈ thickening δ E ↔ infDist x E < δ :=
- lt_ofReal_iff_toReal_lt (infEdist_ne_top h)
-
-/-- A point in a metric space belongs to the (open) `δ`-thickening of a subset `E` if and only if
-it is at distance less than `δ` from some point of `E`. -/
-theorem mem_thickening_iff {E : Set X} {x : X} : x ∈ thickening δ E ↔ ∃ z ∈ E, dist x z < δ := by
- have key_iff : ∀ z : X, edist x z < ENNReal.ofReal δ ↔ dist x z < δ := fun z ↦ by
- rw [dist_edist, lt_ofReal_iff_toReal_lt (edist_ne_top _ _)]
- simp_rw [mem_thickening_iff_exists_edist_lt, key_iff]
-#align metric.mem_thickening_iff Metric.mem_thickening_iff
-
-@[simp]
-theorem thickening_singleton (δ : ℝ) (x : X) : thickening δ ({x} : Set X) = ball x δ := by
- ext
- simp [mem_thickening_iff]
-#align metric.thickening_singleton Metric.thickening_singleton
-
-theorem ball_subset_thickening {x : X} {E : Set X} (hx : x ∈ E) (δ : ℝ) :
- ball x δ ⊆ thickening δ E :=
- Subset.trans (by simp [Subset.rfl]) (thickening_subset_of_subset δ <| singleton_subset_iff.mpr hx)
-#align metric.ball_subset_thickening Metric.ball_subset_thickening
-
-/-- The (open) `δ`-thickening `Metric.thickening δ E` of a subset `E` in a metric space equals the
-union of balls of radius `δ` centered at points of `E`. -/
-theorem thickening_eq_biUnion_ball {δ : ℝ} {E : Set X} : thickening δ E = ⋃ x ∈ E, ball x δ := by
- ext x
- simp only [mem_iUnion₂, exists_prop]
- exact mem_thickening_iff
-#align metric.thickening_eq_bUnion_ball Metric.thickening_eq_biUnion_ball
-
-protected theorem _root_.Bornology.IsBounded.thickening {δ : ℝ} {E : Set X} (h : IsBounded E) :
- IsBounded (thickening δ E) := by
- rcases E.eq_empty_or_nonempty with rfl | ⟨x, hx⟩
- · simp
- · refine (isBounded_iff_subset_closedBall x).2 ⟨δ + diam E, fun y hy ↦ ?_⟩
- calc
- dist y x ≤ infDist y E + diam E := dist_le_infDist_add_diam (x := y) h hx
- _ ≤ δ + diam E := add_le_add_right ((mem_thickening_iff_infDist_lt ⟨x, hx⟩).1 hy).le _
-#align metric.bounded.thickening Bornology.IsBounded.thickening
-
-end Thickening
-
---section
-section Cthickening
-
-variable [PseudoEMetricSpace α] {δ ε : ℝ} {s t : Set α} {x : α}
-
-open EMetric
-
-/-- The closed `δ`-thickening `Metric.cthickening δ E` of a subset `E` in a pseudo emetric space
-consists of those points that are at infimum distance at most `δ` from `E`. -/
-def cthickening (δ : ℝ) (E : Set α) : Set α :=
- { x : α | infEdist x E ≤ ENNReal.ofReal δ }
-#align metric.cthickening Metric.cthickening
-
-@[simp]
-theorem mem_cthickening_iff : x ∈ cthickening δ s ↔ infEdist x s ≤ ENNReal.ofReal δ :=
- Iff.rfl
-#align metric.mem_cthickening_iff Metric.mem_cthickening_iff
-
-/-- An exterior point of a subset `E` (i.e., a point outside the closure of `E`) is not in the
-closed `δ`-thickening of `E` for small enough positive `δ`. -/
-lemma eventually_not_mem_cthickening_of_infEdist_pos {E : Set α} {x : α} (h : x ∉ closure E) :
- ∀ᶠ δ in 𝓝 (0 : ℝ), x ∉ Metric.cthickening δ E := by
- obtain ⟨ε, ⟨ε_pos, ε_lt⟩⟩ := exists_real_pos_lt_infEdist_of_not_mem_closure h
- filter_upwards [eventually_lt_nhds ε_pos] with δ hδ
- simp only [cthickening, mem_setOf_eq, not_le]
- exact ((ofReal_lt_ofReal_iff ε_pos).mpr hδ).trans ε_lt
-
-theorem mem_cthickening_of_edist_le (x y : α) (δ : ℝ) (E : Set α) (h : y ∈ E)
- (h' : edist x y ≤ ENNReal.ofReal δ) : x ∈ cthickening δ E :=
- (infEdist_le_edist_of_mem h).trans h'
-#align metric.mem_cthickening_of_edist_le Metric.mem_cthickening_of_edist_le
-
-theorem mem_cthickening_of_dist_le {α : Type*} [PseudoMetricSpace α] (x y : α) (δ : ℝ) (E : Set α)
- (h : y ∈ E) (h' : dist x y ≤ δ) : x ∈ cthickening δ E := by
- apply mem_cthickening_of_edist_le x y δ E h
- rw [edist_dist]
- exact ENNReal.ofReal_le_ofReal h'
-#align metric.mem_cthickening_of_dist_le Metric.mem_cthickening_of_dist_le
-
-theorem cthickening_eq_preimage_infEdist (δ : ℝ) (E : Set α) :
- cthickening δ E = (fun x => infEdist x E) ⁻¹' Iic (ENNReal.ofReal δ) :=
- rfl
-#align metric.cthickening_eq_preimage_inf_edist Metric.cthickening_eq_preimage_infEdist
-
-/-- The closed thickening is a closed set. -/
-theorem isClosed_cthickening {δ : ℝ} {E : Set α} : IsClosed (cthickening δ E) :=
- IsClosed.preimage continuous_infEdist isClosed_Iic
-#align metric.is_closed_cthickening Metric.isClosed_cthickening
-
-/-- The closed thickening of the empty set is empty. -/
-@[simp]
-theorem cthickening_empty (δ : ℝ) : cthickening δ (∅ : Set α) = ∅ := by
- simp only [cthickening, ENNReal.ofReal_ne_top, setOf_false, infEdist_empty, top_le_iff]
-#align metric.cthickening_empty Metric.cthickening_empty
-
-theorem cthickening_of_nonpos {δ : ℝ} (hδ : δ ≤ 0) (E : Set α) : cthickening δ E = closure E := by
- ext x
- simp [mem_closure_iff_infEdist_zero, cthickening, ENNReal.ofReal_eq_zero.2 hδ]
-#align metric.cthickening_of_nonpos Metric.cthickening_of_nonpos
-
-/-- The closed thickening with radius zero is the closure of the set. -/
-@[simp]
-theorem cthickening_zero (E : Set α) : cthickening 0 E = closure E :=
- cthickening_of_nonpos le_rfl E
-#align metric.cthickening_zero Metric.cthickening_zero
-
-theorem cthickening_max_zero (δ : ℝ) (E : Set α) : cthickening (max 0 δ) E = cthickening δ E := by
- cases le_total δ 0 <;> simp [cthickening_of_nonpos, *]
-#align metric.cthickening_max_zero Metric.cthickening_max_zero
-
-/-- The closed thickening `Metric.cthickening δ E` of a fixed subset `E` is an increasing function
-of the thickening radius `δ`. -/
-theorem cthickening_mono {δ₁ δ₂ : ℝ} (hle : δ₁ ≤ δ₂) (E : Set α) :
- cthickening δ₁ E ⊆ cthickening δ₂ E :=
- preimage_mono (Iic_subset_Iic.mpr (ENNReal.ofReal_le_ofReal hle))
-#align metric.cthickening_mono Metric.cthickening_mono
-
-@[simp]
-theorem cthickening_singleton {α : Type*} [PseudoMetricSpace α] (x : α) {δ : ℝ} (hδ : 0 ≤ δ) :
- cthickening δ ({x} : Set α) = closedBall x δ := by
- ext y
- simp [cthickening, edist_dist, ENNReal.ofReal_le_ofReal_iff hδ]
-#align metric.cthickening_singleton Metric.cthickening_singleton
-
-theorem closedBall_subset_cthickening_singleton {α : Type*} [PseudoMetricSpace α] (x : α) (δ : ℝ) :
- closedBall x δ ⊆ cthickening δ ({x} : Set α) := by
- rcases lt_or_le δ 0 with (hδ | hδ)
- · simp only [closedBall_eq_empty.mpr hδ, empty_subset]
- · simp only [cthickening_singleton x hδ, Subset.rfl]
-#align metric.closed_ball_subset_cthickening_singleton Metric.closedBall_subset_cthickening_singleton
-
-/-- The closed thickening `Metric.cthickening δ E` with a fixed thickening radius `δ` is
-an increasing function of the subset `E`. -/
-theorem cthickening_subset_of_subset (δ : ℝ) {E₁ E₂ : Set α} (h : E₁ ⊆ E₂) :
- cthickening δ E₁ ⊆ cthickening δ E₂ := fun _ hx => le_trans (infEdist_anti h) hx
-#align metric.cthickening_subset_of_subset Metric.cthickening_subset_of_subset
-
-theorem cthickening_subset_thickening {δ₁ : ℝ≥0} {δ₂ : ℝ} (hlt : (δ₁ : ℝ) < δ₂) (E : Set α) :
- cthickening δ₁ E ⊆ thickening δ₂ E := fun _ hx =>
- hx.out.trans_lt ((ENNReal.ofReal_lt_ofReal_iff (lt_of_le_of_lt δ₁.prop hlt)).mpr hlt)
-#align metric.cthickening_subset_thickening Metric.cthickening_subset_thickening
-
-/-- The closed thickening `Metric.cthickening δ₁ E` is contained in the open thickening
-`Metric.thickening δ₂ E` if the radius of the latter is positive and larger. -/
-theorem cthickening_subset_thickening' {δ₁ δ₂ : ℝ} (δ₂_pos : 0 < δ₂) (hlt : δ₁ < δ₂) (E : Set α) :
- cthickening δ₁ E ⊆ thickening δ₂ E := fun _ hx =>
- lt_of_le_of_lt hx.out ((ENNReal.ofReal_lt_ofReal_iff δ₂_pos).mpr hlt)
-#align metric.cthickening_subset_thickening' Metric.cthickening_subset_thickening'
-
-/-- The open thickening `Metric.thickening δ E` is contained in the closed thickening
-`Metric.cthickening δ E` with the same radius. -/
-theorem thickening_subset_cthickening (δ : ℝ) (E : Set α) : thickening δ E ⊆ cthickening δ E := by
- intro x hx
- rw [thickening, mem_setOf_eq] at hx
- exact hx.le
-#align metric.thickening_subset_cthickening Metric.thickening_subset_cthickening
-
-theorem thickening_subset_cthickening_of_le {δ₁ δ₂ : ℝ} (hle : δ₁ ≤ δ₂) (E : Set α) :
- thickening δ₁ E ⊆ cthickening δ₂ E :=
- (thickening_subset_cthickening δ₁ E).trans (cthickening_mono hle E)
-#align metric.thickening_subset_cthickening_of_le Metric.thickening_subset_cthickening_of_le
-
-theorem _root_.Bornology.IsBounded.cthickening {α : Type*} [PseudoMetricSpace α] {δ : ℝ} {E : Set α}
- (h : IsBounded E) : IsBounded (cthickening δ E) := by
- have : IsBounded (thickening (max (δ + 1) 1) E) := h.thickening
- apply this.subset
- exact cthickening_subset_thickening' (zero_lt_one.trans_le (le_max_right _ _))
- ((lt_add_one _).trans_le (le_max_left _ _)) _
-#align metric.bounded.cthickening Bornology.IsBounded.cthickening
-
-protected theorem _root_.IsCompact.cthickening
- {α : Type*} [PseudoMetricSpace α] [ProperSpace α] {s : Set α}
- (hs : IsCompact s) {r : ℝ} : IsCompact (cthickening r s) :=
- isCompact_of_isClosed_isBounded isClosed_cthickening hs.isBounded.cthickening
-
-theorem thickening_subset_interior_cthickening (δ : ℝ) (E : Set α) :
- thickening δ E ⊆ interior (cthickening δ E) :=
- (subset_interior_iff_isOpen.mpr isOpen_thickening).trans
- (interior_mono (thickening_subset_cthickening δ E))
-#align metric.thickening_subset_interior_cthickening Metric.thickening_subset_interior_cthickening
-
-theorem closure_thickening_subset_cthickening (δ : ℝ) (E : Set α) :
- closure (thickening δ E) ⊆ cthickening δ E :=
- (closure_mono (thickening_subset_cthickening δ E)).trans isClosed_cthickening.closure_subset
-#align metric.closure_thickening_subset_cthickening Metric.closure_thickening_subset_cthickening
-
-/-- The closed thickening of a set contains the closure of the set. -/
-theorem closure_subset_cthickening (δ : ℝ) (E : Set α) : closure E ⊆ cthickening δ E := by
- rw [← cthickening_of_nonpos (min_le_right δ 0)]
- exact cthickening_mono (min_le_left δ 0) E
-#align metric.closure_subset_cthickening Metric.closure_subset_cthickening
-
-/-- The (open) thickening of a set contains the closure of the set. -/
-theorem closure_subset_thickening {δ : ℝ} (δ_pos : 0 < δ) (E : Set α) :
- closure E ⊆ thickening δ E := by
- rw [← cthickening_zero]
- exact cthickening_subset_thickening' δ_pos δ_pos E
-#align metric.closure_subset_thickening Metric.closure_subset_thickening
-
-/-- A set is contained in its own (open) thickening. -/
-theorem self_subset_thickening {δ : ℝ} (δ_pos : 0 < δ) (E : Set α) : E ⊆ thickening δ E :=
- (@subset_closure _ E).trans (closure_subset_thickening δ_pos E)
-#align metric.self_subset_thickening Metric.self_subset_thickening
-
-/-- A set is contained in its own closed thickening. -/
-theorem self_subset_cthickening {δ : ℝ} (E : Set α) : E ⊆ cthickening δ E :=
- subset_closure.trans (closure_subset_cthickening δ E)
-#align metric.self_subset_cthickening Metric.self_subset_cthickening
-
-theorem thickening_mem_nhdsSet (E : Set α) {δ : ℝ} (hδ : 0 < δ) : thickening δ E ∈ 𝓝ˢ E :=
- isOpen_thickening.mem_nhdsSet.2 <| self_subset_thickening hδ E
-#align metric.thickening_mem_nhds_set Metric.thickening_mem_nhdsSet
-
-theorem cthickening_mem_nhdsSet (E : Set α) {δ : ℝ} (hδ : 0 < δ) : cthickening δ E ∈ 𝓝ˢ E :=
- mem_of_superset (thickening_mem_nhdsSet E hδ) (thickening_subset_cthickening _ _)
-#align metric.cthickening_mem_nhds_set Metric.cthickening_mem_nhdsSet
-
-@[simp]
-theorem thickening_union (δ : ℝ) (s t : Set α) :
- thickening δ (s ∪ t) = thickening δ s ∪ thickening δ t := by
- simp_rw [thickening, infEdist_union, inf_eq_min, min_lt_iff, setOf_or]
-#align metric.thickening_union Metric.thickening_union
-
-@[simp]
-theorem cthickening_union (δ : ℝ) (s t : Set α) :
- cthickening δ (s ∪ t) = cthickening δ s ∪ cthickening δ t := by
- simp_rw [cthickening, infEdist_union, inf_eq_min, min_le_iff, setOf_or]
-#align metric.cthickening_union Metric.cthickening_union
-
-@[simp]
-theorem thickening_iUnion (δ : ℝ) (f : ι → Set α) :
- thickening δ (⋃ i, f i) = ⋃ i, thickening δ (f i) := by
- simp_rw [thickening, infEdist_iUnion, iInf_lt_iff, setOf_exists]
-#align metric.thickening_Union Metric.thickening_iUnion
-
-theorem ediam_cthickening_le (ε : ℝ≥0) :
- EMetric.diam (cthickening ε s) ≤ EMetric.diam s + 2 * ε := by
- refine' diam_le fun x hx y hy => ENNReal.le_of_forall_pos_le_add fun δ hδ _ => _
- rw [mem_cthickening_iff, ENNReal.ofReal_coe_nnreal] at hx hy
- have hε : (ε : ℝ≥0∞) < ε + δ := ENNReal.coe_lt_coe.2 (lt_add_of_pos_right _ hδ)
- replace hx := hx.trans_lt hε
- obtain ⟨x', hx', hxx'⟩ := infEdist_lt_iff.mp hx
- calc
- edist x y ≤ edist x x' + edist y x' := edist_triangle_right _ _ _
- _ ≤ ε + δ + (infEdist y s + EMetric.diam s) :=
- add_le_add hxx'.le (edist_le_infEdist_add_ediam hx')
- _ ≤ ε + δ + (ε + EMetric.diam s) := add_le_add_left (add_le_add_right hy _) _
- _ = _ := by rw [two_mul]; ac_rfl
-#align metric.ediam_cthickening_le Metric.ediam_cthickening_le
-
-theorem ediam_thickening_le (ε : ℝ≥0) : EMetric.diam (thickening ε s) ≤ EMetric.diam s + 2 * ε :=
- (EMetric.diam_mono <| thickening_subset_cthickening _ _).trans <| ediam_cthickening_le _
-#align metric.ediam_thickening_le Metric.ediam_thickening_le
-
-theorem diam_cthickening_le {α : Type*} [PseudoMetricSpace α] (s : Set α) (hε : 0 ≤ ε) :
- diam (cthickening ε s) ≤ diam s + 2 * ε := by
- lift ε to ℝ≥0 using hε
- refine (toReal_le_add' (ediam_cthickening_le _) ?_ ?_).trans_eq ?_
- · exact fun h ↦ top_unique <| h ▸ EMetric.diam_mono (self_subset_cthickening _)
- · simp [mul_eq_top]
- · simp [diam]
-#align metric.diam_cthickening_le Metric.diam_cthickening_le
-
-theorem diam_thickening_le {α : Type*} [PseudoMetricSpace α] (s : Set α) (hε : 0 ≤ ε) :
- diam (thickening ε s) ≤ diam s + 2 * ε := by
- by_cases hs : IsBounded s
- · exact (diam_mono (thickening_subset_cthickening _ _) hs.cthickening).trans
- (diam_cthickening_le _ hε)
- obtain rfl | hε := hε.eq_or_lt
- · simp [thickening_of_nonpos, diam_nonneg]
- · rw [diam_eq_zero_of_unbounded (mt (IsBounded.subset · <| self_subset_thickening hε _) hs)]
- positivity
-#align metric.diam_thickening_le Metric.diam_thickening_le
-
-@[simp]
-theorem thickening_closure : thickening δ (closure s) = thickening δ s := by
- simp_rw [thickening, infEdist_closure]
-#align metric.thickening_closure Metric.thickening_closure
-
-@[simp]
-theorem cthickening_closure : cthickening δ (closure s) = cthickening δ s := by
- simp_rw [cthickening, infEdist_closure]
-#align metric.cthickening_closure Metric.cthickening_closure
-
-open ENNReal
-
-theorem _root_.Disjoint.exists_thickenings (hst : Disjoint s t) (hs : IsCompact s)
- (ht : IsClosed t) :
- ∃ δ, 0 < δ ∧ Disjoint (thickening δ s) (thickening δ t) := by
- obtain ⟨r, hr, h⟩ := exists_pos_forall_lt_edist hs ht hst
- refine' ⟨r / 2, half_pos (NNReal.coe_pos.2 hr), _⟩
- rw [disjoint_iff_inf_le]
- rintro z ⟨hzs, hzt⟩
- rw [mem_thickening_iff_exists_edist_lt] at hzs hzt
- rw [← NNReal.coe_two, ← NNReal.coe_div, ENNReal.ofReal_coe_nnreal] at hzs hzt
- obtain ⟨x, hx, hzx⟩ := hzs
- obtain ⟨y, hy, hzy⟩ := hzt
- refine' (h x hx y hy).not_le _
- calc
- edist x y ≤ edist z x + edist z y := edist_triangle_left _ _ _
- _ ≤ ↑(r / 2) + ↑(r / 2) := (add_le_add hzx.le hzy.le)
- _ = r := by rw [← ENNReal.coe_add, add_halves]
-#align disjoint.exists_thickenings Disjoint.exists_thickenings
-
-theorem _root_.Disjoint.exists_cthickenings (hst : Disjoint s t) (hs : IsCompact s)
- (ht : IsClosed t) :
- ∃ δ, 0 < δ ∧ Disjoint (cthickening δ s) (cthickening δ t) := by
- obtain ⟨δ, hδ, h⟩ := hst.exists_thickenings hs ht
- refine' ⟨δ / 2, half_pos hδ, h.mono _ _⟩ <;>
- exact cthickening_subset_thickening' hδ (half_lt_self hδ) _
-#align disjoint.exists_cthickenings Disjoint.exists_cthickenings
-
-theorem _root_.IsCompact.exists_cthickening_subset_open (hs : IsCompact s) (ht : IsOpen t)
- (hst : s ⊆ t) :
- ∃ δ, 0 < δ ∧ cthickening δ s ⊆ t :=
- (hst.disjoint_compl_right.exists_cthickenings hs ht.isClosed_compl).imp fun _ h =>
- ⟨h.1, disjoint_compl_right_iff_subset.1 <| h.2.mono_right <| self_subset_cthickening _⟩
-#align is_compact.exists_cthickening_subset_open IsCompact.exists_cthickening_subset_open
-
-theorem _root_.IsCompact.exists_isCompact_cthickening [LocallyCompactSpace α] (hs : IsCompact s) :
- ∃ δ, 0 < δ ∧ IsCompact (cthickening δ s) := by
- rcases exists_compact_superset hs with ⟨K, K_compact, hK⟩
- rcases hs.exists_cthickening_subset_open isOpen_interior hK with ⟨δ, δpos, hδ⟩
- refine ⟨δ, δpos, ?_⟩
- exact K_compact.of_isClosed_subset isClosed_cthickening (hδ.trans interior_subset)
-
-theorem _root_.IsCompact.exists_thickening_subset_open (hs : IsCompact s) (ht : IsOpen t)
- (hst : s ⊆ t) : ∃ δ, 0 < δ ∧ thickening δ s ⊆ t :=
- let ⟨δ, h₀, hδ⟩ := hs.exists_cthickening_subset_open ht hst
- ⟨δ, h₀, (thickening_subset_cthickening _ _).trans hδ⟩
-#align is_compact.exists_thickening_subset_open IsCompact.exists_thickening_subset_open
-
-theorem hasBasis_nhdsSet_thickening {K : Set α} (hK : IsCompact K) :
- (𝓝ˢ K).HasBasis (fun δ : ℝ => 0 < δ) fun δ => thickening δ K :=
- (hasBasis_nhdsSet K).to_hasBasis' (fun _U hU => hK.exists_thickening_subset_open hU.1 hU.2)
- fun _ => thickening_mem_nhdsSet K
-#align metric.has_basis_nhds_set_thickening Metric.hasBasis_nhdsSet_thickening
-
-theorem hasBasis_nhdsSet_cthickening {K : Set α} (hK : IsCompact K) :
- (𝓝ˢ K).HasBasis (fun δ : ℝ => 0 < δ) fun δ => cthickening δ K :=
- (hasBasis_nhdsSet K).to_hasBasis' (fun _U hU => hK.exists_cthickening_subset_open hU.1 hU.2)
- fun _ => cthickening_mem_nhdsSet K
-#align metric.has_basis_nhds_set_cthickening Metric.hasBasis_nhdsSet_cthickening
-
-theorem cthickening_eq_iInter_cthickening' {δ : ℝ} (s : Set ℝ) (hsδ : s ⊆ Ioi δ)
- (hs : ∀ ε, δ < ε → (s ∩ Ioc δ ε).Nonempty) (E : Set α) :
- cthickening δ E = ⋂ ε ∈ s, cthickening ε E := by
- apply Subset.antisymm
- · exact subset_iInter₂ fun _ hε => cthickening_mono (le_of_lt (hsδ hε)) E
- · unfold cthickening
- intro x hx
- simp only [mem_iInter, mem_setOf_eq] at *
- apply ENNReal.le_of_forall_pos_le_add
- intro η η_pos _
- rcases hs (δ + η) (lt_add_of_pos_right _ (NNReal.coe_pos.mpr η_pos)) with ⟨ε, ⟨hsε, hε⟩⟩
- apply ((hx ε hsε).trans (ENNReal.ofReal_le_ofReal hε.2)).trans
- rw [ENNReal.coe_nnreal_eq η]
- exact ENNReal.ofReal_add_le
-#align metric.cthickening_eq_Inter_cthickening' Metric.cthickening_eq_iInter_cthickening'
-
-theorem cthickening_eq_iInter_cthickening {δ : ℝ} (E : Set α) :
- cthickening δ E = ⋂ (ε : ℝ) (_ : δ < ε), cthickening ε E := by
- apply cthickening_eq_iInter_cthickening' (Ioi δ) rfl.subset
- simp_rw [inter_eq_right.mpr Ioc_subset_Ioi_self]
- exact fun _ hε => nonempty_Ioc.mpr hε
-#align metric.cthickening_eq_Inter_cthickening Metric.cthickening_eq_iInter_cthickening
-
-theorem cthickening_eq_iInter_thickening' {δ : ℝ} (δ_nn : 0 ≤ δ) (s : Set ℝ) (hsδ : s ⊆ Ioi δ)
- (hs : ∀ ε, δ < ε → (s ∩ Ioc δ ε).Nonempty) (E : Set α) :
- cthickening δ E = ⋂ ε ∈ s, thickening ε E := by
- refine' (subset_iInter₂ fun ε hε => _).antisymm _
- · obtain ⟨ε', -, hε'⟩ := hs ε (hsδ hε)
- have ss := cthickening_subset_thickening' (lt_of_le_of_lt δ_nn hε'.1) hε'.1 E
- exact ss.trans (thickening_mono hε'.2 E)
- · rw [cthickening_eq_iInter_cthickening' s hsδ hs E]
- exact iInter₂_mono fun ε _ => thickening_subset_cthickening ε E
-#align metric.cthickening_eq_Inter_thickening' Metric.cthickening_eq_iInter_thickening'
-
-theorem cthickening_eq_iInter_thickening {δ : ℝ} (δ_nn : 0 ≤ δ) (E : Set α) :
- cthickening δ E = ⋂ (ε : ℝ) (_ : δ < ε), thickening ε E := by
- apply cthickening_eq_iInter_thickening' δ_nn (Ioi δ) rfl.subset
- simp_rw [inter_eq_right.mpr Ioc_subset_Ioi_self]
- exact fun _ hε => nonempty_Ioc.mpr hε
-#align metric.cthickening_eq_Inter_thickening Metric.cthickening_eq_iInter_thickening
-
-theorem cthickening_eq_iInter_thickening'' (δ : ℝ) (E : Set α) :
- cthickening δ E = ⋂ (ε : ℝ) (_ : max 0 δ < ε), thickening ε E := by
- rw [← cthickening_max_zero, cthickening_eq_iInter_thickening]
- exact le_max_left _ _
-#align metric.cthickening_eq_Inter_thickening'' Metric.cthickening_eq_iInter_thickening''
-
-/-- The closure of a set equals the intersection of its closed thickenings of positive radii
-accumulating at zero. -/
-theorem closure_eq_iInter_cthickening' (E : Set α) (s : Set ℝ)
- (hs : ∀ ε, 0 < ε → (s ∩ Ioc 0 ε).Nonempty) : closure E = ⋂ δ ∈ s, cthickening δ E := by
- by_cases hs₀ : s ⊆ Ioi 0
- · rw [← cthickening_zero]
- apply cthickening_eq_iInter_cthickening' _ hs₀ hs
- obtain ⟨δ, hδs, δ_nonpos⟩ := not_subset.mp hs₀
- rw [Set.mem_Ioi, not_lt] at δ_nonpos
- apply Subset.antisymm
- · exact subset_iInter₂ fun ε _ => closure_subset_cthickening ε E
- · rw [← cthickening_of_nonpos δ_nonpos E]
- exact biInter_subset_of_mem hδs
-#align metric.closure_eq_Inter_cthickening' Metric.closure_eq_iInter_cthickening'
-
-/-- The closure of a set equals the intersection of its closed thickenings of positive radii. -/
-theorem closure_eq_iInter_cthickening (E : Set α) :
- closure E = ⋂ (δ : ℝ) (_ : 0 < δ), cthickening δ E := by
- rw [← cthickening_zero]
- exact cthickening_eq_iInter_cthickening E
-#align metric.closure_eq_Inter_cthickening Metric.closure_eq_iInter_cthickening
-
-/-- The closure of a set equals the intersection of its open thickenings of positive radii
-accumulating at zero. -/
-theorem closure_eq_iInter_thickening' (E : Set α) (s : Set ℝ) (hs₀ : s ⊆ Ioi 0)
- (hs : ∀ ε, 0 < ε → (s ∩ Ioc 0 ε).Nonempty) : closure E = ⋂ δ ∈ s, thickening δ E := by
- rw [← cthickening_zero]
- apply cthickening_eq_iInter_thickening' le_rfl _ hs₀ hs
-#align metric.closure_eq_Inter_thickening' Metric.closure_eq_iInter_thickening'
-
-/-- The closure of a set equals the intersection of its (open) thickenings of positive radii. -/
-theorem closure_eq_iInter_thickening (E : Set α) :
- closure E = ⋂ (δ : ℝ) (_ : 0 < δ), thickening δ E := by
- rw [← cthickening_zero]
- exact cthickening_eq_iInter_thickening rfl.ge E
-#align metric.closure_eq_Inter_thickening Metric.closure_eq_iInter_thickening
-
-/-- The frontier of the closed thickening of a set is contained in an `EMetric.infEdist` level
-set. -/
-theorem frontier_cthickening_subset (E : Set α) {δ : ℝ} :
- frontier (cthickening δ E) ⊆ { x : α | infEdist x E = ENNReal.ofReal δ } :=
- frontier_le_subset_eq continuous_infEdist continuous_const
-#align metric.frontier_cthickening_subset Metric.frontier_cthickening_subset
-
-/-- The closed ball of radius `δ` centered at a point of `E` is included in the closed
-thickening of `E`. -/
-theorem closedBall_subset_cthickening {α : Type*} [PseudoMetricSpace α] {x : α} {E : Set α}
- (hx : x ∈ E) (δ : ℝ) : closedBall x δ ⊆ cthickening δ E := by
- refine' (closedBall_subset_cthickening_singleton _ _).trans (cthickening_subset_of_subset _ _)
- simpa using hx
-#align metric.closed_ball_subset_cthickening Metric.closedBall_subset_cthickening
-
-theorem cthickening_subset_iUnion_closedBall_of_lt {α : Type*} [PseudoMetricSpace α] (E : Set α)
- {δ δ' : ℝ} (hδ₀ : 0 < δ') (hδδ' : δ < δ') : cthickening δ E ⊆ ⋃ x ∈ E, closedBall x δ' := by
- refine' (cthickening_subset_thickening' hδ₀ hδδ' E).trans fun x hx => _
- obtain ⟨y, hy₁, hy₂⟩ := mem_thickening_iff.mp hx
- exact mem_iUnion₂.mpr ⟨y, hy₁, hy₂.le⟩
-#align metric.cthickening_subset_Union_closed_ball_of_lt Metric.cthickening_subset_iUnion_closedBall_of_lt
-
-/-- The closed thickening of a compact set `E` is the union of the balls `Metric.closedBall x δ`
-over `x ∈ E`.
-
-See also `Metric.cthickening_eq_biUnion_closedBall`. -/
-theorem _root_.IsCompact.cthickening_eq_biUnion_closedBall {α : Type*} [PseudoMetricSpace α]
- {δ : ℝ} {E : Set α} (hE : IsCompact E) (hδ : 0 ≤ δ) :
- cthickening δ E = ⋃ x ∈ E, closedBall x δ := by
- rcases eq_empty_or_nonempty E with (rfl | hne)
- · simp only [cthickening_empty, biUnion_empty]
- refine Subset.antisymm (fun x hx ↦ ?_)
- (iUnion₂_subset fun x hx ↦ closedBall_subset_cthickening hx _)
- obtain ⟨y, yE, hy⟩ : ∃ y ∈ E, infEdist x E = edist x y := hE.exists_infEdist_eq_edist hne _
- have D1 : edist x y ≤ ENNReal.ofReal δ := (le_of_eq hy.symm).trans hx
- have D2 : dist x y ≤ δ := by
- rw [edist_dist] at D1
- exact (ENNReal.ofReal_le_ofReal_iff hδ).1 D1
- exact mem_biUnion yE D2
-#align is_compact.cthickening_eq_bUnion_closed_ball IsCompact.cthickening_eq_biUnion_closedBall
-
-theorem cthickening_eq_biUnion_closedBall {α : Type*} [PseudoMetricSpace α] [ProperSpace α]
- (E : Set α) (hδ : 0 ≤ δ) : cthickening δ E = ⋃ x ∈ closure E, closedBall x δ := by
- rcases eq_empty_or_nonempty E with (rfl | hne)
- · simp only [cthickening_empty, biUnion_empty, closure_empty]
- rw [← cthickening_closure]
- refine Subset.antisymm (fun x hx ↦ ?_)
- (iUnion₂_subset fun x hx ↦ closedBall_subset_cthickening hx _)
- obtain ⟨y, yE, hy⟩ : ∃ y ∈ closure E, infDist x (closure E) = dist x y :=
- isClosed_closure.exists_infDist_eq_dist (closure_nonempty_iff.mpr hne) x
- replace hy : dist x y ≤ δ :=
- (ENNReal.ofReal_le_ofReal_iff hδ).mp
- (((congr_arg ENNReal.ofReal hy.symm).le.trans ENNReal.ofReal_toReal_le).trans hx)
- exact mem_biUnion yE hy
-#align metric.cthickening_eq_bUnion_closed_ball Metric.cthickening_eq_biUnion_closedBall
-
-nonrec theorem _root_.IsClosed.cthickening_eq_biUnion_closedBall {α : Type*} [PseudoMetricSpace α]
- [ProperSpace α] {E : Set α} (hE : IsClosed E) (hδ : 0 ≤ δ) :
- cthickening δ E = ⋃ x ∈ E, closedBall x δ := by
- rw [cthickening_eq_biUnion_closedBall E hδ, hE.closure_eq]
-#align is_closed.cthickening_eq_bUnion_closed_ball IsClosed.cthickening_eq_biUnion_closedBall
-
-/-- For the equality, see `infEdist_cthickening`. -/
-theorem infEdist_le_infEdist_cthickening_add :
- infEdist x s ≤ infEdist x (cthickening δ s) + ENNReal.ofReal δ := by
- refine' le_of_forall_lt' fun r h => _
- simp_rw [← lt_tsub_iff_right, infEdist_lt_iff, mem_cthickening_iff] at h
- obtain ⟨y, hy, hxy⟩ := h
- exact infEdist_le_edist_add_infEdist.trans_lt
- ((ENNReal.add_lt_add_of_lt_of_le (hy.trans_lt ENNReal.ofReal_lt_top).ne hxy hy).trans_eq
- (tsub_add_cancel_of_le <| le_self_add.trans (lt_tsub_iff_left.1 hxy).le))
-#align metric.inf_edist_le_inf_edist_cthickening_add Metric.infEdist_le_infEdist_cthickening_add
-
-/-- For the equality, see `infEdist_thickening`. -/
-theorem infEdist_le_infEdist_thickening_add :
- infEdist x s ≤ infEdist x (thickening δ s) + ENNReal.ofReal δ :=
- infEdist_le_infEdist_cthickening_add.trans <|
- add_le_add_right (infEdist_anti <| thickening_subset_cthickening _ _) _
-#align metric.inf_edist_le_inf_edist_thickening_add Metric.infEdist_le_infEdist_thickening_add
-
-/-- For the equality, see `thickening_thickening`. -/
-@[simp]
-theorem thickening_thickening_subset (ε δ : ℝ) (s : Set α) :
- thickening ε (thickening δ s) ⊆ thickening (ε + δ) s := by
- obtain hε | hε := le_total ε 0
- · simp only [thickening_of_nonpos hε, empty_subset]
- obtain hδ | hδ := le_total δ 0
- · simp only [thickening_of_nonpos hδ, thickening_empty, empty_subset]
- intro x
- simp_rw [mem_thickening_iff_exists_edist_lt, ENNReal.ofReal_add hε hδ]
- exact fun ⟨y, ⟨z, hz, hy⟩, hx⟩ =>
- ⟨z, hz, (edist_triangle _ _ _).trans_lt <| ENNReal.add_lt_add hx hy⟩
-#align metric.thickening_thickening_subset Metric.thickening_thickening_subset
-
-/-- For the equality, see `thickening_cthickening`. -/
-@[simp]
-theorem thickening_cthickening_subset (ε : ℝ) (hδ : 0 ≤ δ) (s : Set α) :
- thickening ε (cthickening δ s) ⊆ thickening (ε + δ) s := by
- obtain hε | hε := le_total ε 0
- · simp only [thickening_of_nonpos hε, empty_subset]
- intro x
- simp_rw [mem_thickening_iff_exists_edist_lt, mem_cthickening_iff, ← infEdist_lt_iff,
- ENNReal.ofReal_add hε hδ]
- rintro ⟨y, hy, hxy⟩
- exact infEdist_le_edist_add_infEdist.trans_lt
- (ENNReal.add_lt_add_of_lt_of_le (hy.trans_lt ENNReal.ofReal_lt_top).ne hxy hy)
-#align metric.thickening_cthickening_subset Metric.thickening_cthickening_subset
-
-/-- For the equality, see `cthickening_thickening`. -/
-@[simp]
-theorem cthickening_thickening_subset (hε : 0 ≤ ε) (δ : ℝ) (s : Set α) :
- cthickening ε (thickening δ s) ⊆ cthickening (ε + δ) s := by
- obtain hδ | hδ := le_total δ 0
- · simp only [thickening_of_nonpos hδ, cthickening_empty, empty_subset]
- intro x
- simp_rw [mem_cthickening_iff, ENNReal.ofReal_add hε hδ]
- exact fun hx => infEdist_le_infEdist_thickening_add.trans (add_le_add_right hx _)
-#align metric.cthickening_thickening_subset Metric.cthickening_thickening_subset
-
-/-- For the equality, see `cthickening_cthickening`. -/
-@[simp]
-theorem cthickening_cthickening_subset (hε : 0 ≤ ε) (hδ : 0 ≤ δ) (s : Set α) :
- cthickening ε (cthickening δ s) ⊆ cthickening (ε + δ) s := by
- intro x
- simp_rw [mem_cthickening_iff, ENNReal.ofReal_add hε hδ]
- exact fun hx => infEdist_le_infEdist_cthickening_add.trans (add_le_add_right hx _)
-#align metric.cthickening_cthickening_subset Metric.cthickening_cthickening_subset
-
-theorem frontier_cthickening_disjoint (A : Set α) :
- Pairwise (Disjoint on fun r : ℝ≥0 => frontier (cthickening r A)) := fun r₁ r₂ hr =>
- ((disjoint_singleton.2 <| by simpa).preimage _).mono (frontier_cthickening_subset _)
- (frontier_cthickening_subset _)
-#align metric.frontier_cthickening_disjoint Metric.frontier_cthickening_disjoint
-
-end Cthickening
-
end Metric
@@ -217,7 +217,7 @@ theorem _root_.IsOpen.exists_iUnion_isClosed {U : Set α} (hU : IsOpen U) :
rw [mem_iff_infEdist_zero_of_closed hU.isClosed_compl] at this
have B : 0 < infEdist x Uᶜ := by simpa [pos_iff_ne_zero] using this
have : Filter.Tendsto (fun n => a ^ n) atTop (𝓝 0) :=
- ENNReal.tendsto_pow_atTop_nhds_0_of_lt_1 a_lt_one
+ ENNReal.tendsto_pow_atTop_nhds_zero_of_lt_one a_lt_one
rcases ((tendsto_order.1 this).2 _ B).exists with ⟨n, hn⟩
simp only [mem_iUnion, mem_Ici, mem_preimage]
exact ⟨n, hn.le⟩
Co-authored-by: sgouezel <sebastien.gouezel@univ-rennes1.fr> Co-authored-by: Yury G. Kudryashov <urkud@urkud.name>
@@ -1177,7 +1177,7 @@ theorem closure_subset_thickening {δ : ℝ} (δ_pos : 0 < δ) (E : Set α) :
/-- A set is contained in its own (open) thickening. -/
theorem self_subset_thickening {δ : ℝ} (δ_pos : 0 < δ) (E : Set α) : E ⊆ thickening δ E :=
- (@subset_closure _ _ E).trans (closure_subset_thickening δ_pos E)
+ (@subset_closure _ E).trans (closure_subset_thickening δ_pos E)
#align metric.self_subset_thickening Metric.self_subset_thickening
/-- A set is contained in its own closed thickening. -/
@@ -263,14 +263,14 @@ section HausdorffEdist
variable [PseudoEMetricSpace α] [PseudoEMetricSpace β] {x y : α} {s t u : Set α} {Φ : α → β}
-/-- The Hausdorff edistance of a set to itself vanishes -/
+/-- The Hausdorff edistance of a set to itself vanishes. -/
@[simp]
theorem hausdorffEdist_self : hausdorffEdist s s = 0 := by
simp only [hausdorffEdist_def, sup_idem, ENNReal.iSup_eq_zero]
exact fun x hx => infEdist_zero_of_mem hx
#align emetric.Hausdorff_edist_self EMetric.hausdorffEdist_self
-/-- The Haudorff edistances of `s` to `t` and of `t` to `s` coincide -/
+/-- The Haudorff edistances of `s` to `t` and of `t` to `s` coincide. -/
theorem hausdorffEdist_comm : hausdorffEdist s t = hausdorffEdist t s := by
simp only [hausdorffEdist_def]; apply sup_comm
set_option linter.uppercaseLean3 false in
@@ -295,7 +295,7 @@ theorem hausdorffEdist_le_of_mem_edist {r : ℝ≥0∞} (H1 : ∀ x ∈ s, ∃ y
exact le_trans (infEdist_le_edist_of_mem ys) hy
#align emetric.Hausdorff_edist_le_of_mem_edist EMetric.hausdorffEdist_le_of_mem_edist
-/-- The distance to a set is controlled by the Hausdorff distance -/
+/-- The distance to a set is controlled by the Hausdorff distance. -/
theorem infEdist_le_hausdorffEdist_of_mem (h : x ∈ s) : infEdist x t ≤ hausdorffEdist s t := by
rw [hausdorffEdist_def]
refine le_trans ?_ le_sup_left
@@ -303,7 +303,7 @@ theorem infEdist_le_hausdorffEdist_of_mem (h : x ∈ s) : infEdist x t ≤ hausd
#align emetric.inf_edist_le_Hausdorff_edist_of_mem EMetric.infEdist_le_hausdorffEdist_of_mem
/-- If the Hausdorff distance is `< r`, then any point in one of the sets has
-a corresponding point at distance `< r` in the other set -/
+a corresponding point at distance `< r` in the other set. -/
theorem exists_edist_lt_of_hausdorffEdist_lt {r : ℝ≥0∞} (h : x ∈ s) (H : hausdorffEdist s t < r) :
∃ y ∈ t, edist x y < r :=
infEdist_lt_iff.mp <|
@@ -313,7 +313,7 @@ theorem exists_edist_lt_of_hausdorffEdist_lt {r : ℝ≥0∞} (h : x ∈ s) (H :
#align emetric.exists_edist_lt_of_Hausdorff_edist_lt EMetric.exists_edist_lt_of_hausdorffEdist_lt
/-- The distance from `x` to `s` or `t` is controlled in terms of the Hausdorff distance
-between `s` and `t` -/
+between `s` and `t`. -/
theorem infEdist_le_infEdist_add_hausdorffEdist :
infEdist x t ≤ infEdist x s + hausdorffEdist s t :=
ENNReal.le_of_forall_pos_le_add fun ε εpos h => by
@@ -334,13 +334,13 @@ theorem infEdist_le_infEdist_add_hausdorffEdist :
simp [ENNReal.add_halves, add_comm, add_left_comm]
#align emetric.inf_edist_le_inf_edist_add_Hausdorff_edist EMetric.infEdist_le_infEdist_add_hausdorffEdist
-/-- The Hausdorff edistance is invariant under eisometries -/
+/-- The Hausdorff edistance is invariant under isometries. -/
theorem hausdorffEdist_image (h : Isometry Φ) :
hausdorffEdist (Φ '' s) (Φ '' t) = hausdorffEdist s t := by
simp only [hausdorffEdist_def, iSup_image, infEdist_image h]
#align emetric.Hausdorff_edist_image EMetric.hausdorffEdist_image
-/-- The Hausdorff distance is controlled by the diameter of the union -/
+/-- The Hausdorff distance is controlled by the diameter of the union. -/
theorem hausdorffEdist_le_ediam (hs : s.Nonempty) (ht : t.Nonempty) :
hausdorffEdist s t ≤ diam (s ∪ t) := by
rcases hs with ⟨x, xs⟩
@@ -352,7 +352,7 @@ theorem hausdorffEdist_le_ediam (hs : s.Nonempty) (ht : t.Nonempty) :
exact ⟨x, xs, edist_le_diam_of_mem (subset_union_right _ _ hz) (subset_union_left _ _ xs)⟩
#align emetric.Hausdorff_edist_le_ediam EMetric.hausdorffEdist_le_ediam
-/-- The Hausdorff distance satisfies the triangular inequality -/
+/-- The Hausdorff distance satisfies the triangle inequality. -/
theorem hausdorffEdist_triangle : hausdorffEdist s u ≤ hausdorffEdist s t + hausdorffEdist t u := by
rw [hausdorffEdist_def]
simp only [sup_le_iff, iSup_le_iff]
@@ -374,14 +374,14 @@ theorem hausdorffEdist_triangle : hausdorffEdist s u ≤ hausdorffEdist s t + ha
_ = hausdorffEdist s t + hausdorffEdist t u := by simp [hausdorffEdist_comm, add_comm]
#align emetric.Hausdorff_edist_triangle EMetric.hausdorffEdist_triangle
-/-- Two sets are at zero Hausdorff edistance if and only if they have the same closure -/
+/-- Two sets are at zero Hausdorff edistance if and only if they have the same closure. -/
theorem hausdorffEdist_zero_iff_closure_eq_closure :
hausdorffEdist s t = 0 ↔ closure s = closure t := by
simp only [hausdorffEdist_def, ENNReal.sup_eq_zero, ENNReal.iSup_eq_zero, ← subset_def,
← mem_closure_iff_infEdist_zero, subset_antisymm_iff, isClosed_closure.closure_subset_iff]
#align emetric.Hausdorff_edist_zero_iff_closure_eq_closure EMetric.hausdorffEdist_zero_iff_closure_eq_closure
-/-- The Hausdorff edistance between a set and its closure vanishes -/
+/-- The Hausdorff edistance between a set and its closure vanishes. -/
@[simp]
theorem hausdorffEdist_self_closure : hausdorffEdist s (closure s) = 0 := by
rw [hausdorffEdist_zero_iff_closure_eq_closure, closure_closure]
@@ -405,26 +405,26 @@ theorem hausdorffEdist_closure₂ : hausdorffEdist s (closure t) = hausdorffEdis
simp [@hausdorffEdist_comm _ _ s _]
#align emetric.Hausdorff_edist_closure₂ EMetric.hausdorffEdist_closure₂
-/-- The Hausdorff edistance between sets or their closures is the same -/
+/-- The Hausdorff edistance between sets or their closures is the same. -/
-- @[simp] -- Porting note: simp can prove this
theorem hausdorffEdist_closure : hausdorffEdist (closure s) (closure t) = hausdorffEdist s t := by
simp
#align emetric.Hausdorff_edist_closure EMetric.hausdorffEdist_closure
-/-- Two closed sets are at zero Hausdorff edistance if and only if they coincide -/
+/-- Two closed sets are at zero Hausdorff edistance if and only if they coincide. -/
theorem hausdorffEdist_zero_iff_eq_of_closed (hs : IsClosed s) (ht : IsClosed t) :
hausdorffEdist s t = 0 ↔ s = t := by
rw [hausdorffEdist_zero_iff_closure_eq_closure, hs.closure_eq, ht.closure_eq]
#align emetric.Hausdorff_edist_zero_iff_eq_of_closed EMetric.hausdorffEdist_zero_iff_eq_of_closed
-/-- The Haudorff edistance to the empty set is infinite -/
+/-- The Haudorff edistance to the empty set is infinite. -/
theorem hausdorffEdist_empty (ne : s.Nonempty) : hausdorffEdist s ∅ = ∞ := by
rcases ne with ⟨x, xs⟩
have : infEdist x ∅ ≤ hausdorffEdist s ∅ := infEdist_le_hausdorffEdist_of_mem xs
simpa using this
#align emetric.Hausdorff_edist_empty EMetric.hausdorffEdist_empty
-/-- If a set is at finite Hausdorff edistance of a nonempty set, it is nonempty -/
+/-- If a set is at finite Hausdorff edistance of a nonempty set, it is nonempty. -/
theorem nonempty_of_hausdorffEdist_ne_top (hs : s.Nonempty) (fin : hausdorffEdist s t ≠ ⊤) :
t.Nonempty :=
t.eq_empty_or_nonempty.resolve_left fun ht ↦ fin (ht.symm ▸ hausdorffEdist_empty hs)
@@ -493,35 +493,35 @@ theorem infEdist_ne_top (h : s.Nonempty) : infEdist x s ≠ ⊤ := by
theorem infEdist_eq_top_iff : infEdist x s = ∞ ↔ s = ∅ := by
rcases s.eq_empty_or_nonempty with rfl | hs <;> simp [*, Nonempty.ne_empty, infEdist_ne_top]
-/-- The minimal distance of a point to a set containing it vanishes -/
+/-- The minimal distance of a point to a set containing it vanishes. -/
theorem infDist_zero_of_mem (h : x ∈ s) : infDist x s = 0 := by
simp [infEdist_zero_of_mem h, infDist]
#align metric.inf_dist_zero_of_mem Metric.infDist_zero_of_mem
-/-- The minimal distance to a singleton is the distance to the unique point in this singleton -/
+/-- The minimal distance to a singleton is the distance to the unique point in this singleton. -/
@[simp]
theorem infDist_singleton : infDist x {y} = dist x y := by simp [infDist, dist_edist]
#align metric.inf_dist_singleton Metric.infDist_singleton
-/-- The minimal distance to a set is bounded by the distance to any point in this set -/
+/-- The minimal distance to a set is bounded by the distance to any point in this set. -/
theorem infDist_le_dist_of_mem (h : y ∈ s) : infDist x s ≤ dist x y := by
rw [dist_edist, infDist]
exact ENNReal.toReal_mono (edist_ne_top _ _) (infEdist_le_edist_of_mem h)
#align metric.inf_dist_le_dist_of_mem Metric.infDist_le_dist_of_mem
-/-- The minimal distance is monotonous with respect to inclusion -/
+/-- The minimal distance is monotone with respect to inclusion. -/
theorem infDist_le_infDist_of_subset (h : s ⊆ t) (hs : s.Nonempty) : infDist x t ≤ infDist x s :=
ENNReal.toReal_mono (infEdist_ne_top hs) (infEdist_anti h)
#align metric.inf_dist_le_inf_dist_of_subset Metric.infDist_le_infDist_of_subset
-/-- The minimal distance to a set is `< r` iff there exists a point in this set at distance `< r` -/
+/-- The minimal distance to a set `s` is `< r` iff there exists a point in `s` at distance `< r`. -/
theorem infDist_lt_iff {r : ℝ} (hs : s.Nonempty) : infDist x s < r ↔ ∃ y ∈ s, dist x y < r := by
simp_rw [infDist, ← ENNReal.lt_ofReal_iff_toReal_lt (infEdist_ne_top hs), infEdist_lt_iff,
ENNReal.lt_ofReal_iff_toReal_lt (edist_ne_top _ _), ← dist_edist]
#align metric.inf_dist_lt_iff Metric.infDist_lt_iff
/-- The minimal distance from `x` to `s` is bounded by the distance from `y` to `s`, modulo
-the distance between `x` and `y` -/
+the distance between `x` and `y`. -/
theorem infDist_le_infDist_add_dist : infDist x s ≤ infDist y s + dist x y := by
rw [infDist, infDist, dist_edist]
refine ENNReal.toReal_le_add' infEdist_le_infEdist_add_edist ?_ (flip absurd (edist_ne_top _ _))
@@ -575,7 +575,7 @@ theorem continuous_infDist_pt : Continuous (infDist · s) :=
variable {s}
-/-- The minimal distance to a set and its closure coincide -/
+/-- The minimal distances to a set and its closure coincide. -/
theorem infDist_closure : infDist x (closure s) = infDist x s := by
simp [infDist, infEdist_closure]
#align metric.inf_dist_eq_closure Metric.infDist_closure
@@ -587,7 +587,7 @@ theorem infDist_zero_of_mem_closure (hx : x ∈ closure s) : infDist x s = 0 :=
exact infDist_zero_of_mem hx
#align metric.inf_dist_zero_of_mem_closure Metric.infDist_zero_of_mem_closure
-/-- A point belongs to the closure of `s` iff its infimum distance to this set vanishes -/
+/-- A point belongs to the closure of `s` iff its infimum distance to this set vanishes. -/
theorem mem_closure_iff_infDist_zero (h : s.Nonempty) : x ∈ closure s ↔ infDist x s = 0 := by
simp [mem_closure_iff_infEdist_zero, infDist, ENNReal.toReal_eq_zero_iff, infEdist_ne_top h]
#align metric.mem_closure_iff_inf_dist_zero Metric.mem_closure_iff_infDist_zero
@@ -597,7 +597,7 @@ theorem _root_.IsClosed.mem_iff_infDist_zero (h : IsClosed s) (hs : s.Nonempty)
x ∈ s ↔ infDist x s = 0 := by rw [← mem_closure_iff_infDist_zero hs, h.closure_eq]
#align is_closed.mem_iff_inf_dist_zero IsClosed.mem_iff_infDist_zero
-/-- Given a closed set `s`, a point belongs to `s` iff its infimum distance to this set vanishes -/
+/-- Given a closed set `s`, a point belongs to `s` iff its infimum distance to this set vanishes. -/
theorem _root_.IsClosed.not_mem_iff_infDist_pos (h : IsClosed s) (hs : s.Nonempty) :
x ∉ s ↔ 0 < infDist x s := by
simp [h.mem_iff_infDist_zero hs, infDist_nonneg.gt_iff_ne]
@@ -611,7 +611,7 @@ theorem continuousAt_inv_infDist_pt (h : x ∉ closure s) :
· refine (continuous_infDist_pt s).continuousAt.inv₀ ?_
rwa [Ne.def, ← mem_closure_iff_infDist_zero hs]
-/-- The infimum distance is invariant under isometries -/
+/-- The infimum distance is invariant under isometries. -/
theorem infDist_image (hΦ : Isometry Φ) : infDist (Φ x) (Φ '' t) = infDist x t := by
simp [infDist, infEdist_image hΦ]
#align metric.inf_dist_image Metric.infDist_image
@@ -681,12 +681,12 @@ theorem continuous_infNndist_pt (s : Set α) : Continuous fun x => infNndist x s
/-- The Hausdorff distance between two sets is the smallest nonnegative `r` such that each set is
included in the `r`-neighborhood of the other. If there is no such `r`, it is defined to
-be `0`, arbitrarily -/
+be `0`, arbitrarily. -/
def hausdorffDist (s t : Set α) : ℝ :=
ENNReal.toReal (hausdorffEdist s t)
#align metric.Hausdorff_dist Metric.hausdorffDist
-/-- The Hausdorff distance is nonnegative -/
+/-- The Hausdorff distance is nonnegative. -/
theorem hausdorffDist_nonneg : 0 ≤ hausdorffDist s t := by simp [hausdorffDist]
#align metric.Hausdorff_dist_nonneg Metric.hausdorffDist_nonneg
@@ -713,18 +713,18 @@ theorem hausdorffEdist_ne_top_of_nonempty_of_bounded (hs : s.Nonempty) (ht : t.N
exact ne_top_of_le_ne_top ENNReal.ofReal_ne_top this
#align metric.Hausdorff_edist_ne_top_of_nonempty_of_bounded Metric.hausdorffEdist_ne_top_of_nonempty_of_bounded
-/-- The Hausdorff distance between a set and itself is zero -/
+/-- The Hausdorff distance between a set and itself is zero. -/
@[simp]
theorem hausdorffDist_self_zero : hausdorffDist s s = 0 := by simp [hausdorffDist]
#align metric.Hausdorff_dist_self_zero Metric.hausdorffDist_self_zero
-/-- The Hausdorff distance from `s` to `t` and from `t` to `s` coincide -/
+/-- The Hausdorff distances from `s` to `t` and from `t` to `s` coincide. -/
theorem hausdorffDist_comm : hausdorffDist s t = hausdorffDist t s := by
simp [hausdorffDist, hausdorffEdist_comm]
#align metric.Hausdorff_dist_comm Metric.hausdorffDist_comm
/-- The Hausdorff distance to the empty set vanishes (if you want to have the more reasonable
-value ∞ instead, use `EMetric.hausdorffEdist`, which takes values in ℝ≥0∞) -/
+value `∞` instead, use `EMetric.hausdorffEdist`, which takes values in `ℝ≥0∞`). -/
@[simp]
theorem hausdorffDist_empty : hausdorffDist s ∅ = 0 := by
rcases s.eq_empty_or_nonempty with h | h
@@ -733,7 +733,7 @@ theorem hausdorffDist_empty : hausdorffDist s ∅ = 0 := by
#align metric.Hausdorff_dist_empty Metric.hausdorffDist_empty
/-- The Hausdorff distance to the empty set vanishes (if you want to have the more reasonable
-value `∞` instead, use `EMetric.hausdorffEdist`, which takes values in `ℝ≥0∞`) -/
+value `∞` instead, use `EMetric.hausdorffEdist`, which takes values in `ℝ≥0∞`). -/
@[simp]
theorem hausdorffDist_empty' : hausdorffDist ∅ s = 0 := by simp [hausdorffDist_comm]
#align metric.Hausdorff_dist_empty' Metric.hausdorffDist_empty'
@@ -775,7 +775,7 @@ theorem hausdorffDist_le_of_mem_dist {r : ℝ} (hr : 0 ≤ r) (H1 : ∀ x ∈ s,
exact le_trans (infDist_le_dist_of_mem ys) hy
#align metric.Hausdorff_dist_le_of_mem_dist Metric.hausdorffDist_le_of_mem_dist
-/-- The Hausdorff distance is controlled by the diameter of the union -/
+/-- The Hausdorff distance is controlled by the diameter of the union. -/
theorem hausdorffDist_le_diam (hs : s.Nonempty) (bs : IsBounded s) (ht : t.Nonempty)
(bt : IsBounded t) : hausdorffDist s t ≤ diam (s ∪ t) := by
rcases hs with ⟨x, xs⟩
@@ -787,14 +787,14 @@ theorem hausdorffDist_le_diam (hs : s.Nonempty) (bs : IsBounded s) (ht : t.Nonem
(subset_union_left _ _ xs)⟩
#align metric.Hausdorff_dist_le_diam Metric.hausdorffDist_le_diam
-/-- The distance to a set is controlled by the Hausdorff distance -/
+/-- The distance to a set is controlled by the Hausdorff distance. -/
theorem infDist_le_hausdorffDist_of_mem (hx : x ∈ s) (fin : hausdorffEdist s t ≠ ⊤) :
infDist x t ≤ hausdorffDist s t :=
toReal_mono fin (infEdist_le_hausdorffEdist_of_mem hx)
#align metric.inf_dist_le_Hausdorff_dist_of_mem Metric.infDist_le_hausdorffDist_of_mem
-/-- If the Hausdorff distance is `< r`, then any point in one of the sets is at distance
-`< r` of a point in the other set -/
+/-- If the Hausdorff distance is `< r`, any point in one of the sets is at distance
+`< r` of a point in the other set. -/
theorem exists_dist_lt_of_hausdorffDist_lt {r : ℝ} (h : x ∈ s) (H : hausdorffDist s t < r)
(fin : hausdorffEdist s t ≠ ⊤) : ∃ y ∈ t, dist x y < r := by
have r0 : 0 < r := lt_of_le_of_lt hausdorffDist_nonneg H
@@ -806,8 +806,8 @@ theorem exists_dist_lt_of_hausdorffDist_lt {r : ℝ} (h : x ∈ s) (H : hausdorf
exact ⟨y, hy, yr⟩
#align metric.exists_dist_lt_of_Hausdorff_dist_lt Metric.exists_dist_lt_of_hausdorffDist_lt
-/-- If the Hausdorff distance is `< r`, then any point in one of the sets is at distance
-`< r` of a point in the other set -/
+/-- If the Hausdorff distance is `< r`, any point in one of the sets is at distance
+`< r` of a point in the other set. -/
theorem exists_dist_lt_of_hausdorffDist_lt' {r : ℝ} (h : y ∈ t) (H : hausdorffDist s t < r)
(fin : hausdorffEdist s t ≠ ⊤) : ∃ x ∈ s, dist x y < r := by
rw [hausdorffDist_comm] at H
@@ -825,13 +825,13 @@ theorem infDist_le_infDist_add_hausdorffDist (fin : hausdorffEdist s t ≠ ⊤)
exact mt (nonempty_of_hausdorffEdist_ne_top · fin) h
#align metric.inf_dist_le_inf_dist_add_Hausdorff_dist Metric.infDist_le_infDist_add_hausdorffDist
-/-- The Hausdorff distance is invariant under isometries -/
+/-- The Hausdorff distance is invariant under isometries. -/
theorem hausdorffDist_image (h : Isometry Φ) :
hausdorffDist (Φ '' s) (Φ '' t) = hausdorffDist s t := by
simp [hausdorffDist, hausdorffEdist_image h]
#align metric.Hausdorff_dist_image Metric.hausdorffDist_image
-/-- The Hausdorff distance satisfies the triangular inequality -/
+/-- The Hausdorff distance satisfies the triangle inequality. -/
theorem hausdorffDist_triangle (fin : hausdorffEdist s t ≠ ⊤) :
hausdorffDist s u ≤ hausdorffDist s t + hausdorffDist t u := by
refine toReal_le_add' hausdorffEdist_triangle (flip absurd fin) (not_imp_not.1 fun h ↦ ?_)
@@ -839,7 +839,7 @@ theorem hausdorffDist_triangle (fin : hausdorffEdist s t ≠ ⊤) :
exact ne_top_of_le_ne_top (add_ne_top.2 ⟨fin, h⟩) hausdorffEdist_triangle
#align metric.Hausdorff_dist_triangle Metric.hausdorffDist_triangle
-/-- The Hausdorff distance satisfies the triangular inequality -/
+/-- The Hausdorff distance satisfies the triangle inequality. -/
theorem hausdorffDist_triangle' (fin : hausdorffEdist t u ≠ ⊤) :
hausdorffDist s u ≤ hausdorffDist s t + hausdorffDist t u := by
rw [hausdorffEdist_comm] at fin
@@ -848,7 +848,7 @@ theorem hausdorffDist_triangle' (fin : hausdorffEdist t u ≠ ⊤) :
simpa [add_comm, hausdorffDist_comm] using I
#align metric.Hausdorff_dist_triangle' Metric.hausdorffDist_triangle'
-/-- The Hausdorff distance between a set and its closure vanish -/
+/-- The Hausdorff distance between a set and its closure vanishes. -/
@[simp]
theorem hausdorffDist_self_closure : hausdorffDist s (closure s) = 0 := by simp [hausdorffDist]
#align metric.Hausdorff_dist_self_closure Metric.hausdorffDist_self_closure
@@ -865,20 +865,20 @@ theorem hausdorffDist_closure₂ : hausdorffDist s (closure t) = hausdorffDist s
simp [hausdorffDist]
#align metric.Hausdorff_dist_closure₂ Metric.hausdorffDist_closure₂
-/-- The Hausdorff distance between two sets and their closures coincide -/
+/-- The Hausdorff distances between two sets and their closures coincide. -/
-- @[simp] -- Porting note: simp can prove this
theorem hausdorffDist_closure : hausdorffDist (closure s) (closure t) = hausdorffDist s t := by
simp [hausdorffDist]
#align metric.Hausdorff_dist_closure Metric.hausdorffDist_closure
-/-- Two sets are at zero Hausdorff distance if and only if they have the same closures -/
+/-- Two sets are at zero Hausdorff distance if and only if they have the same closures. -/
theorem hausdorffDist_zero_iff_closure_eq_closure (fin : hausdorffEdist s t ≠ ⊤) :
hausdorffDist s t = 0 ↔ closure s = closure t := by
simp [← hausdorffEdist_zero_iff_closure_eq_closure, hausdorffDist,
ENNReal.toReal_eq_zero_iff, fin]
#align metric.Hausdorff_dist_zero_iff_closure_eq_closure Metric.hausdorffDist_zero_iff_closure_eq_closure
-/-- Two closed sets are at zero Hausdorff distance if and only if they coincide -/
+/-- Two closed sets are at zero Hausdorff distance if and only if they coincide. -/
theorem _root_.IsClosed.hausdorffDist_zero_iff_eq (hs : IsClosed s) (ht : IsClosed t)
(fin : hausdorffEdist s t ≠ ⊤) : hausdorffDist s t = 0 ↔ s = t := by
simp [← hausdorffEdist_zero_iff_eq_of_closed hs ht, hausdorffDist, ENNReal.toReal_eq_zero_iff,
cases'
(#9171)
I literally went through and regex'd some uses of cases'
, replacing them with rcases
; this is meant to be a low effort PR as I hope that tools can do this in the future.
rcases
is an easier replacement than cases
, though with better tools we could in future do a second pass converting simple rcases
added here (and existing ones) to cases
.
@@ -432,8 +432,8 @@ theorem nonempty_of_hausdorffEdist_ne_top (hs : s.Nonempty) (fin : hausdorffEdis
theorem empty_or_nonempty_of_hausdorffEdist_ne_top (fin : hausdorffEdist s t ≠ ⊤) :
(s = ∅ ∧ t = ∅) ∨ (s.Nonempty ∧ t.Nonempty) := by
- cases' s.eq_empty_or_nonempty with hs hs
- · cases' t.eq_empty_or_nonempty with ht ht
+ rcases s.eq_empty_or_nonempty with hs | hs
+ · rcases t.eq_empty_or_nonempty with ht | ht
· exact Or.inl ⟨hs, ht⟩
· rw [hausdorffEdist_comm] at fin
exact Or.inr ⟨nonempty_of_hausdorffEdist_ne_top ht fin, ht⟩
@@ -622,7 +622,7 @@ theorem infDist_inter_closedBall_of_mem (h : y ∈ s) :
refine le_antisymm ?_ (infDist_le_infDist_of_subset (inter_subset_left _ _) ⟨y, h⟩)
refine' not_lt.1 fun hlt => _
rcases (infDist_lt_iff ⟨y, h.1⟩).mp hlt with ⟨z, hzs, hz⟩
- cases' le_or_lt (dist z x) (dist y x) with hle hlt
+ rcases le_or_lt (dist z x) (dist y x) with hle | hlt
· exact hz.not_le (infDist_le_dist_of_mem ⟨hzs, hle⟩)
· rw [dist_comm z, dist_comm y] at hlt
exact (hlt.trans hz).not_le (infDist_le_dist_of_mem h)
@@ -727,7 +727,7 @@ theorem hausdorffDist_comm : hausdorffDist s t = hausdorffDist t s := by
value ∞ instead, use `EMetric.hausdorffEdist`, which takes values in ℝ≥0∞) -/
@[simp]
theorem hausdorffDist_empty : hausdorffDist s ∅ = 0 := by
- cases' s.eq_empty_or_nonempty with h h
+ rcases s.eq_empty_or_nonempty with h | h
· simp [h]
· simp [hausdorffDist, hausdorffEdist_empty h]
#align metric.Hausdorff_dist_empty Metric.hausdorffDist_empty
@@ -744,9 +744,9 @@ theorem hausdorffDist_le_of_infDist {r : ℝ} (hr : 0 ≤ r) (H1 : ∀ x ∈ s,
(H2 : ∀ x ∈ t, infDist x s ≤ r) : hausdorffDist s t ≤ r := by
by_cases h1 : hausdorffEdist s t = ⊤
· rwa [hausdorffDist, h1, ENNReal.top_toReal]
- cases' s.eq_empty_or_nonempty with hs hs
+ rcases s.eq_empty_or_nonempty with hs | hs
· rwa [hs, hausdorffDist_empty']
- cases' t.eq_empty_or_nonempty with ht ht
+ rcases t.eq_empty_or_nonempty with ht | ht
· rwa [ht, hausdorffDist_empty]
have : hausdorffEdist s t ≤ ENNReal.ofReal r := by
apply hausdorffEdist_le_of_infEdist _ _
@@ -962,7 +962,7 @@ theorem frontier_thickening_subset (E : Set α) {δ : ℝ} :
theorem frontier_thickening_disjoint (A : Set α) :
Pairwise (Disjoint on fun r : ℝ => frontier (thickening r A)) := by
refine' (pairwise_disjoint_on _).2 fun r₁ r₂ hr => _
- cases' le_total r₁ 0 with h₁ h₁
+ rcases le_total r₁ 0 with h₁ | h₁
· simp [thickening_of_nonpos h₁]
refine' ((disjoint_singleton.2 fun h => hr.ne _).preimage _).mono (frontier_thickening_subset _)
(frontier_thickening_subset _)
The names for lemmas about monotonicity of (a ^ ·)
and (· ^ n)
were a mess. This PR tidies up everything related by following the naming convention for (a * ·)
and (· * b)
. Namely, (a ^ ·)
is pow_right
and (· ^ n)
is pow_left
in lemma names. All lemma renames follow the corresponding multiplication lemma names closely.
Algebra.GroupPower.Order
pow_mono
→ pow_right_mono
pow_le_pow
→ pow_le_pow_right
pow_le_pow_of_le_left
→ pow_le_pow_left
pow_lt_pow_of_lt_left
→ pow_lt_pow_left
strictMonoOn_pow
→ pow_left_strictMonoOn
pow_strictMono_right
→ pow_right_strictMono
pow_lt_pow
→ pow_lt_pow_right
pow_lt_pow_iff
→ pow_lt_pow_iff_right
pow_le_pow_iff
→ pow_le_pow_iff_right
self_lt_pow
→ lt_self_pow
strictAnti_pow
→ pow_right_strictAnti
pow_lt_pow_iff_of_lt_one
→ pow_lt_pow_iff_right_of_lt_one
pow_lt_pow_of_lt_one
→ pow_lt_pow_right_of_lt_one
lt_of_pow_lt_pow
→ lt_of_pow_lt_pow_left
le_of_pow_le_pow
→ le_of_pow_le_pow_left
pow_lt_pow₀
→ pow_lt_pow_right₀
Algebra.GroupPower.CovariantClass
pow_le_pow_of_le_left'
→ pow_le_pow_left'
nsmul_le_nsmul_of_le_right
→ nsmul_le_nsmul_right
pow_lt_pow'
→ pow_lt_pow_right'
nsmul_lt_nsmul
→ nsmul_lt_nsmul_left
pow_strictMono_left
→ pow_right_strictMono'
nsmul_strictMono_right
→ nsmul_left_strictMono
StrictMono.pow_right'
→ StrictMono.pow_const
StrictMono.nsmul_left
→ StrictMono.const_nsmul
pow_strictMono_right'
→ pow_left_strictMono
nsmul_strictMono_left
→ nsmul_right_strictMono
Monotone.pow_right
→ Monotone.pow_const
Monotone.nsmul_left
→ Monotone.const_nsmul
lt_of_pow_lt_pow'
→ lt_of_pow_lt_pow_left'
lt_of_nsmul_lt_nsmul
→ lt_of_nsmul_lt_nsmul_right
pow_le_pow'
→ pow_le_pow_right'
nsmul_le_nsmul
→ nsmul_le_nsmul_left
pow_le_pow_of_le_one'
→ pow_le_pow_right_of_le_one'
nsmul_le_nsmul_of_nonpos
→ nsmul_le_nsmul_left_of_nonpos
le_of_pow_le_pow'
→ le_of_pow_le_pow_left'
le_of_nsmul_le_nsmul'
→ le_of_nsmul_le_nsmul_right'
pow_le_pow_iff'
→ pow_le_pow_iff_right'
nsmul_le_nsmul_iff
→ nsmul_le_nsmul_iff_left
pow_lt_pow_iff'
→ pow_lt_pow_iff_right'
nsmul_lt_nsmul_iff
→ nsmul_lt_nsmul_iff_left
Data.Nat.Pow
Nat.pow_lt_pow_of_lt_left
→ Nat.pow_lt_pow_left
Nat.pow_le_iff_le_left
→ Nat.pow_le_pow_iff_left
Nat.pow_lt_iff_lt_left
→ Nat.pow_lt_pow_iff_left
pow_le_pow_iff_left
pow_lt_pow_iff_left
pow_right_injective
pow_right_inj
Nat.pow_le_pow_left
to have the correct name since Nat.pow_le_pow_of_le_left
is in Std.Nat.pow_le_pow_right
to have the correct name since Nat.pow_le_pow_of_le_right
is in Std.self_le_pow
was a duplicate of le_self_pow
.Nat.pow_lt_pow_of_lt_right
is defeq to pow_lt_pow_right
.Nat.pow_right_strictMono
is defeq to pow_right_strictMono
.Nat.pow_le_iff_le_right
is defeq to pow_le_pow_iff_right
.Nat.pow_lt_iff_lt_right
is defeq to pow_lt_pow_iff_right
.0 < n
or 1 ≤ n
to n ≠ 0
.Nat
lemmas have been protected
.@@ -224,7 +224,7 @@ theorem _root_.IsOpen.exists_iUnion_isClosed {U : Set α} (hU : IsOpen U) :
show Monotone F
· intro m n hmn x hx
simp only [mem_Ici, mem_preimage] at hx ⊢
- apply le_trans (pow_le_pow_of_le_one' a_lt_one.le hmn) hx
+ apply le_trans (pow_le_pow_right_of_le_one' a_lt_one.le hmn) hx
#align is_open.exists_Union_is_closed IsOpen.exists_iUnion_isClosed
theorem _root_.IsCompact.exists_infEdist_eq_edist (hs : IsCompact s) (hne : s.Nonempty) (x : α) :
@@ -162,8 +162,9 @@ theorem mem_iff_infEdist_zero_of_closed (h : IsClosed s) : x ∈ s ↔ infEdist
/-- The infimum edistance of a point to a set is positive if and only if the point is not in the
closure of the set. -/
-theorem infEdist_pos_iff_not_mem_closure {x : α} {E : Set α} : 0 < infEdist x E ↔ x ∉ closure E :=
- by rw [mem_closure_iff_infEdist_zero, pos_iff_ne_zero]
+theorem infEdist_pos_iff_not_mem_closure {x : α} {E : Set α} :
+ 0 < infEdist x E ↔ x ∉ closure E := by
+ rw [mem_closure_iff_infEdist_zero, pos_iff_ne_zero]
#align emetric.inf_edist_pos_iff_not_mem_closure EMetric.infEdist_pos_iff_not_mem_closure
theorem infEdist_closure_pos_iff_not_mem_closure {x : α} {E : Set α} :
rcases
, convert
and congrm
(#7725)
Replace rcases(
with rcases (
. Same thing for convert(
and congrm(
. No other change.
@@ -217,7 +217,7 @@ theorem _root_.IsOpen.exists_iUnion_isClosed {U : Set α} (hU : IsOpen U) :
have B : 0 < infEdist x Uᶜ := by simpa [pos_iff_ne_zero] using this
have : Filter.Tendsto (fun n => a ^ n) atTop (𝓝 0) :=
ENNReal.tendsto_pow_atTop_nhds_0_of_lt_1 a_lt_one
- rcases((tendsto_order.1 this).2 _ B).exists with ⟨n, hn⟩
+ rcases ((tendsto_order.1 this).2 _ B).exists with ⟨n, hn⟩
simp only [mem_iUnion, mem_Ici, mem_preimage]
exact ⟨n, hn.le⟩
show Monotone F
Set
/Finset
lemmas match lattice lemma names (#7378)
Rename union_eq_left_iff_subset
to union_eq_left
to match sup_eq_left
. Similarly for the right
and inter
versions.
@@ -1338,7 +1338,7 @@ theorem cthickening_eq_iInter_cthickening' {δ : ℝ} (s : Set ℝ) (hsδ : s
theorem cthickening_eq_iInter_cthickening {δ : ℝ} (E : Set α) :
cthickening δ E = ⋂ (ε : ℝ) (_ : δ < ε), cthickening ε E := by
apply cthickening_eq_iInter_cthickening' (Ioi δ) rfl.subset
- simp_rw [inter_eq_right_iff_subset.mpr Ioc_subset_Ioi_self]
+ simp_rw [inter_eq_right.mpr Ioc_subset_Ioi_self]
exact fun _ hε => nonempty_Ioc.mpr hε
#align metric.cthickening_eq_Inter_cthickening Metric.cthickening_eq_iInter_cthickening
@@ -1356,7 +1356,7 @@ theorem cthickening_eq_iInter_thickening' {δ : ℝ} (δ_nn : 0 ≤ δ) (s : Set
theorem cthickening_eq_iInter_thickening {δ : ℝ} (δ_nn : 0 ≤ δ) (E : Set α) :
cthickening δ E = ⋂ (ε : ℝ) (_ : δ < ε), thickening ε E := by
apply cthickening_eq_iInter_thickening' δ_nn (Ioi δ) rfl.subset
- simp_rw [inter_eq_right_iff_subset.mpr Ioc_subset_Ioi_self]
+ simp_rw [inter_eq_right.mpr Ioc_subset_Ioi_self]
exact fun _ hε => nonempty_Ioc.mpr hε
#align metric.cthickening_eq_Inter_thickening Metric.cthickening_eq_iInter_thickening
@@ -1299,7 +1299,7 @@ theorem _root_.IsCompact.exists_isCompact_cthickening [LocallyCompactSpace α] (
rcases exists_compact_superset hs with ⟨K, K_compact, hK⟩
rcases hs.exists_cthickening_subset_open isOpen_interior hK with ⟨δ, δpos, hδ⟩
refine ⟨δ, δpos, ?_⟩
- exact isCompact_of_isClosed_subset K_compact isClosed_cthickening (hδ.trans interior_subset)
+ exact K_compact.of_isClosed_subset isClosed_cthickening (hδ.trans interior_subset)
theorem _root_.IsCompact.exists_thickening_subset_open (hs : IsCompact s) (ht : IsOpen t)
(hst : s ⊆ t) : ∃ δ, 0 < δ ∧ thickening δ s ⊆ t :=
Metric.Bounded
(#7240)
Use Bornology.IsBounded
instead.
@@ -34,7 +34,7 @@ This files introduces:
noncomputable section
-open Classical NNReal ENNReal Topology Set Function TopologicalSpace Filter Pointwise
+open Classical NNReal ENNReal Topology Set Function TopologicalSpace Filter Pointwise Bornology
universe u v w
@@ -548,7 +548,7 @@ theorem disjoint_closedBall_of_lt_infDist {r : ℝ} (h : r < infDist x s) :
disjoint_ball_infDist.mono_left <| closedBall_subset_ball h
#align metric.disjoint_closed_ball_of_lt_inf_dist Metric.disjoint_closedBall_of_lt_infDist
-theorem dist_le_infDist_add_diam (hs : Bounded s) (hy : y ∈ s) :
+theorem dist_le_infDist_add_diam (hs : IsBounded s) (hy : y ∈ s) :
dist x y ≤ infDist x s + diam s := by
rw [infDist, diam, dist_edist]
exact toReal_le_add (edist_le_infEdist_add_ediam hy) (infEdist_ne_top ⟨y, hy⟩) hs.ediam_ne_top
@@ -692,11 +692,11 @@ theorem hausdorffDist_nonneg : 0 ≤ hausdorffDist s t := by simp [hausdorffDist
/-- If two sets are nonempty and bounded in a metric space, they are at finite Hausdorff
edistance. -/
theorem hausdorffEdist_ne_top_of_nonempty_of_bounded (hs : s.Nonempty) (ht : t.Nonempty)
- (bs : Bounded s) (bt : Bounded t) : hausdorffEdist s t ≠ ⊤ := by
+ (bs : IsBounded s) (bt : IsBounded t) : hausdorffEdist s t ≠ ⊤ := by
rcases hs with ⟨cs, hcs⟩
rcases ht with ⟨ct, hct⟩
- rcases(bounded_iff_subset_ball ct).1 bs with ⟨rs, hrs⟩
- rcases(bounded_iff_subset_ball cs).1 bt with ⟨rt, hrt⟩
+ rcases bs.subset_closedBall ct with ⟨rs, hrs⟩
+ rcases bt.subset_closedBall cs with ⟨rt, hrt⟩
have : hausdorffEdist s t ≤ ENNReal.ofReal (max rs rt) := by
apply hausdorffEdist_le_of_mem_edist
· intro x xs
@@ -775,17 +775,15 @@ theorem hausdorffDist_le_of_mem_dist {r : ℝ} (hr : 0 ≤ r) (H1 : ∀ x ∈ s,
#align metric.Hausdorff_dist_le_of_mem_dist Metric.hausdorffDist_le_of_mem_dist
/-- The Hausdorff distance is controlled by the diameter of the union -/
-theorem hausdorffDist_le_diam (hs : s.Nonempty) (bs : Bounded s) (ht : t.Nonempty)
- (bt : Bounded t) : hausdorffDist s t ≤ diam (s ∪ t) := by
+theorem hausdorffDist_le_diam (hs : s.Nonempty) (bs : IsBounded s) (ht : t.Nonempty)
+ (bt : IsBounded t) : hausdorffDist s t ≤ diam (s ∪ t) := by
rcases hs with ⟨x, xs⟩
rcases ht with ⟨y, yt⟩
refine hausdorffDist_le_of_mem_dist diam_nonneg ?_ ?_
- · exact fun z hz => ⟨y, yt,
- dist_le_diam_of_mem (bounded_union.2 ⟨bs, bt⟩) (subset_union_left _ _ hz)
- (subset_union_right _ _ yt)⟩
- · exact fun z hz => ⟨x, xs,
- dist_le_diam_of_mem (bounded_union.2 ⟨bs, bt⟩) (subset_union_right _ _ hz)
- (subset_union_left _ _ xs)⟩
+ · exact fun z hz => ⟨y, yt, dist_le_diam_of_mem (bs.union bt) (subset_union_left _ _ hz)
+ (subset_union_right _ _ yt)⟩
+ · exact fun z hz => ⟨x, xs, dist_le_diam_of_mem (bs.union bt) (subset_union_right _ _ hz)
+ (subset_union_left _ _ xs)⟩
#align metric.Hausdorff_dist_le_diam Metric.hausdorffDist_le_diam
/-- The distance to a set is controlled by the Hausdorff distance -/
@@ -1005,15 +1003,15 @@ theorem thickening_eq_biUnion_ball {δ : ℝ} {E : Set X} : thickening δ E =
exact mem_thickening_iff
#align metric.thickening_eq_bUnion_ball Metric.thickening_eq_biUnion_ball
-protected theorem Bounded.thickening {δ : ℝ} {E : Set X} (h : Bounded E) :
- Bounded (thickening δ E) := by
+protected theorem _root_.Bornology.IsBounded.thickening {δ : ℝ} {E : Set X} (h : IsBounded E) :
+ IsBounded (thickening δ E) := by
rcases E.eq_empty_or_nonempty with rfl | ⟨x, hx⟩
· simp
- · refine (bounded_iff_subset_ball x).2 ⟨δ + diam E, fun y hy ↦ ?_⟩
+ · refine (isBounded_iff_subset_closedBall x).2 ⟨δ + diam E, fun y hy ↦ ?_⟩
calc
dist y x ≤ infDist y E + diam E := dist_le_infDist_add_diam (x := y) h hx
_ ≤ δ + diam E := add_le_add_right ((mem_thickening_iff_infDist_lt ⟨x, hx⟩).1 hy).le _
-#align metric.bounded.thickening Metric.Bounded.thickening
+#align metric.bounded.thickening Bornology.IsBounded.thickening
end Thickening
@@ -1139,18 +1137,18 @@ theorem thickening_subset_cthickening_of_le {δ₁ δ₂ : ℝ} (hle : δ₁ ≤
(thickening_subset_cthickening δ₁ E).trans (cthickening_mono hle E)
#align metric.thickening_subset_cthickening_of_le Metric.thickening_subset_cthickening_of_le
-theorem Bounded.cthickening {α : Type*} [PseudoMetricSpace α] {δ : ℝ} {E : Set α} (h : Bounded E) :
- Bounded (cthickening δ E) := by
- have : Bounded (thickening (max (δ + 1) 1) E) := h.thickening
- apply Bounded.mono _ this
+theorem _root_.Bornology.IsBounded.cthickening {α : Type*} [PseudoMetricSpace α] {δ : ℝ} {E : Set α}
+ (h : IsBounded E) : IsBounded (cthickening δ E) := by
+ have : IsBounded (thickening (max (δ + 1) 1) E) := h.thickening
+ apply this.subset
exact cthickening_subset_thickening' (zero_lt_one.trans_le (le_max_right _ _))
((lt_add_one _).trans_le (le_max_left _ _)) _
-#align metric.bounded.cthickening Metric.Bounded.cthickening
+#align metric.bounded.cthickening Bornology.IsBounded.cthickening
protected theorem _root_.IsCompact.cthickening
{α : Type*} [PseudoMetricSpace α] [ProperSpace α] {s : Set α}
(hs : IsCompact s) {r : ℝ} : IsCompact (cthickening r s) :=
- isCompact_of_isClosed_bounded isClosed_cthickening hs.bounded.cthickening
+ isCompact_of_isClosed_isBounded isClosed_cthickening hs.isBounded.cthickening
theorem thickening_subset_interior_cthickening (δ : ℝ) (E : Set α) :
thickening δ E ⊆ interior (cthickening δ E) :=
@@ -1242,12 +1240,12 @@ theorem diam_cthickening_le {α : Type*} [PseudoMetricSpace α] (s : Set α) (h
theorem diam_thickening_le {α : Type*} [PseudoMetricSpace α] (s : Set α) (hε : 0 ≤ ε) :
diam (thickening ε s) ≤ diam s + 2 * ε := by
- by_cases hs : Bounded s
+ by_cases hs : IsBounded s
· exact (diam_mono (thickening_subset_cthickening _ _) hs.cthickening).trans
(diam_cthickening_le _ hε)
obtain rfl | hε := hε.eq_or_lt
· simp [thickening_of_nonpos, diam_nonneg]
- · rw [diam_eq_zero_of_unbounded (mt (Bounded.mono <| self_subset_thickening hε _) hs)]
+ · rw [diam_eq_zero_of_unbounded (mt (IsBounded.subset · <| self_subset_thickening hε _) hs)]
positivity
#align metric.diam_thickening_le Metric.diam_thickening_le
@@ -1311,13 +1311,13 @@ theorem _root_.IsCompact.exists_thickening_subset_open (hs : IsCompact s) (ht :
theorem hasBasis_nhdsSet_thickening {K : Set α} (hK : IsCompact K) :
(𝓝ˢ K).HasBasis (fun δ : ℝ => 0 < δ) fun δ => thickening δ K :=
- (hasBasis_nhdsSet K).to_has_basis' (fun _U hU => hK.exists_thickening_subset_open hU.1 hU.2)
+ (hasBasis_nhdsSet K).to_hasBasis' (fun _U hU => hK.exists_thickening_subset_open hU.1 hU.2)
fun _ => thickening_mem_nhdsSet K
#align metric.has_basis_nhds_set_thickening Metric.hasBasis_nhdsSet_thickening
theorem hasBasis_nhdsSet_cthickening {K : Set α} (hK : IsCompact K) :
(𝓝ˢ K).HasBasis (fun δ : ℝ => 0 < δ) fun δ => cthickening δ K :=
- (hasBasis_nhdsSet K).to_has_basis' (fun _U hU => hK.exists_cthickening_subset_open hU.1 hU.2)
+ (hasBasis_nhdsSet K).to_hasBasis' (fun _U hU => hK.exists_cthickening_subset_open hU.1 hU.2)
fun _ => cthickening_mem_nhdsSet K
#align metric.has_basis_nhds_set_cthickening Metric.hasBasis_nhdsSet_cthickening
@@ -1147,6 +1147,11 @@ theorem Bounded.cthickening {α : Type*} [PseudoMetricSpace α] {δ : ℝ} {E :
((lt_add_one _).trans_le (le_max_left _ _)) _
#align metric.bounded.cthickening Metric.Bounded.cthickening
+protected theorem _root_.IsCompact.cthickening
+ {α : Type*} [PseudoMetricSpace α] [ProperSpace α] {s : Set α}
+ (hs : IsCompact s) {r : ℝ} : IsCompact (cthickening r s) :=
+ isCompact_of_isClosed_bounded isClosed_cthickening hs.bounded.cthickening
+
theorem thickening_subset_interior_cthickening (δ : ℝ) (E : Set α) :
thickening δ E ⊆ interior (cthickening δ E) :=
(subset_interior_iff_isOpen.mpr isOpen_thickening).trans
We first prove this on real manifolds and then deduce it for vector spaces to avoid duplication.
@@ -1291,6 +1291,13 @@ theorem _root_.IsCompact.exists_cthickening_subset_open (hs : IsCompact s) (ht :
⟨h.1, disjoint_compl_right_iff_subset.1 <| h.2.mono_right <| self_subset_cthickening _⟩
#align is_compact.exists_cthickening_subset_open IsCompact.exists_cthickening_subset_open
+theorem _root_.IsCompact.exists_isCompact_cthickening [LocallyCompactSpace α] (hs : IsCompact s) :
+ ∃ δ, 0 < δ ∧ IsCompact (cthickening δ s) := by
+ rcases exists_compact_superset hs with ⟨K, K_compact, hK⟩
+ rcases hs.exists_cthickening_subset_open isOpen_interior hK with ⟨δ, δpos, hδ⟩
+ refine ⟨δ, δpos, ?_⟩
+ exact isCompact_of_isClosed_subset K_compact isClosed_cthickening (hδ.trans interior_subset)
+
theorem _root_.IsCompact.exists_thickening_subset_open (hs : IsCompact s) (ht : IsOpen t)
(hst : s ⊆ t) : ∃ δ, 0 < δ ∧ thickening δ s ⊆ t :=
let ⟨δ, h₀, hδ⟩ := hs.exists_cthickening_subset_open ht hst
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -38,7 +38,7 @@ open Classical NNReal ENNReal Topology Set Function TopologicalSpace Filter Poin
universe u v w
-variable {ι : Sort _} {α : Type u} {β : Type v}
+variable {ι : Sort*} {α : Type u} {β : Type v}
namespace EMetric
@@ -1049,7 +1049,7 @@ theorem mem_cthickening_of_edist_le (x y : α) (δ : ℝ) (E : Set α) (h : y
(infEdist_le_edist_of_mem h).trans h'
#align metric.mem_cthickening_of_edist_le Metric.mem_cthickening_of_edist_le
-theorem mem_cthickening_of_dist_le {α : Type _} [PseudoMetricSpace α] (x y : α) (δ : ℝ) (E : Set α)
+theorem mem_cthickening_of_dist_le {α : Type*} [PseudoMetricSpace α] (x y : α) (δ : ℝ) (E : Set α)
(h : y ∈ E) (h' : dist x y ≤ δ) : x ∈ cthickening δ E := by
apply mem_cthickening_of_edist_le x y δ E h
rw [edist_dist]
@@ -1095,13 +1095,13 @@ theorem cthickening_mono {δ₁ δ₂ : ℝ} (hle : δ₁ ≤ δ₂) (E : Set α
#align metric.cthickening_mono Metric.cthickening_mono
@[simp]
-theorem cthickening_singleton {α : Type _} [PseudoMetricSpace α] (x : α) {δ : ℝ} (hδ : 0 ≤ δ) :
+theorem cthickening_singleton {α : Type*} [PseudoMetricSpace α] (x : α) {δ : ℝ} (hδ : 0 ≤ δ) :
cthickening δ ({x} : Set α) = closedBall x δ := by
ext y
simp [cthickening, edist_dist, ENNReal.ofReal_le_ofReal_iff hδ]
#align metric.cthickening_singleton Metric.cthickening_singleton
-theorem closedBall_subset_cthickening_singleton {α : Type _} [PseudoMetricSpace α] (x : α) (δ : ℝ) :
+theorem closedBall_subset_cthickening_singleton {α : Type*} [PseudoMetricSpace α] (x : α) (δ : ℝ) :
closedBall x δ ⊆ cthickening δ ({x} : Set α) := by
rcases lt_or_le δ 0 with (hδ | hδ)
· simp only [closedBall_eq_empty.mpr hδ, empty_subset]
@@ -1139,7 +1139,7 @@ theorem thickening_subset_cthickening_of_le {δ₁ δ₂ : ℝ} (hle : δ₁ ≤
(thickening_subset_cthickening δ₁ E).trans (cthickening_mono hle E)
#align metric.thickening_subset_cthickening_of_le Metric.thickening_subset_cthickening_of_le
-theorem Bounded.cthickening {α : Type _} [PseudoMetricSpace α] {δ : ℝ} {E : Set α} (h : Bounded E) :
+theorem Bounded.cthickening {α : Type*} [PseudoMetricSpace α] {δ : ℝ} {E : Set α} (h : Bounded E) :
Bounded (cthickening δ E) := by
have : Bounded (thickening (max (δ + 1) 1) E) := h.thickening
apply Bounded.mono _ this
@@ -1226,7 +1226,7 @@ theorem ediam_thickening_le (ε : ℝ≥0) : EMetric.diam (thickening ε s) ≤
(EMetric.diam_mono <| thickening_subset_cthickening _ _).trans <| ediam_cthickening_le _
#align metric.ediam_thickening_le Metric.ediam_thickening_le
-theorem diam_cthickening_le {α : Type _} [PseudoMetricSpace α] (s : Set α) (hε : 0 ≤ ε) :
+theorem diam_cthickening_le {α : Type*} [PseudoMetricSpace α] (s : Set α) (hε : 0 ≤ ε) :
diam (cthickening ε s) ≤ diam s + 2 * ε := by
lift ε to ℝ≥0 using hε
refine (toReal_le_add' (ediam_cthickening_le _) ?_ ?_).trans_eq ?_
@@ -1235,7 +1235,7 @@ theorem diam_cthickening_le {α : Type _} [PseudoMetricSpace α] (s : Set α) (h
· simp [diam]
#align metric.diam_cthickening_le Metric.diam_cthickening_le
-theorem diam_thickening_le {α : Type _} [PseudoMetricSpace α] (s : Set α) (hε : 0 ≤ ε) :
+theorem diam_thickening_le {α : Type*} [PseudoMetricSpace α] (s : Set α) (hε : 0 ≤ ε) :
diam (thickening ε s) ≤ diam s + 2 * ε := by
by_cases hs : Bounded s
· exact (diam_mono (thickening_subset_cthickening _ _) hs.cthickening).trans
@@ -1402,13 +1402,13 @@ theorem frontier_cthickening_subset (E : Set α) {δ : ℝ} :
/-- The closed ball of radius `δ` centered at a point of `E` is included in the closed
thickening of `E`. -/
-theorem closedBall_subset_cthickening {α : Type _} [PseudoMetricSpace α] {x : α} {E : Set α}
+theorem closedBall_subset_cthickening {α : Type*} [PseudoMetricSpace α] {x : α} {E : Set α}
(hx : x ∈ E) (δ : ℝ) : closedBall x δ ⊆ cthickening δ E := by
refine' (closedBall_subset_cthickening_singleton _ _).trans (cthickening_subset_of_subset _ _)
simpa using hx
#align metric.closed_ball_subset_cthickening Metric.closedBall_subset_cthickening
-theorem cthickening_subset_iUnion_closedBall_of_lt {α : Type _} [PseudoMetricSpace α] (E : Set α)
+theorem cthickening_subset_iUnion_closedBall_of_lt {α : Type*} [PseudoMetricSpace α] (E : Set α)
{δ δ' : ℝ} (hδ₀ : 0 < δ') (hδδ' : δ < δ') : cthickening δ E ⊆ ⋃ x ∈ E, closedBall x δ' := by
refine' (cthickening_subset_thickening' hδ₀ hδδ' E).trans fun x hx => _
obtain ⟨y, hy₁, hy₂⟩ := mem_thickening_iff.mp hx
@@ -1419,7 +1419,7 @@ theorem cthickening_subset_iUnion_closedBall_of_lt {α : Type _} [PseudoMetricSp
over `x ∈ E`.
See also `Metric.cthickening_eq_biUnion_closedBall`. -/
-theorem _root_.IsCompact.cthickening_eq_biUnion_closedBall {α : Type _} [PseudoMetricSpace α]
+theorem _root_.IsCompact.cthickening_eq_biUnion_closedBall {α : Type*} [PseudoMetricSpace α]
{δ : ℝ} {E : Set α} (hE : IsCompact E) (hδ : 0 ≤ δ) :
cthickening δ E = ⋃ x ∈ E, closedBall x δ := by
rcases eq_empty_or_nonempty E with (rfl | hne)
@@ -1434,7 +1434,7 @@ theorem _root_.IsCompact.cthickening_eq_biUnion_closedBall {α : Type _} [Pseudo
exact mem_biUnion yE D2
#align is_compact.cthickening_eq_bUnion_closed_ball IsCompact.cthickening_eq_biUnion_closedBall
-theorem cthickening_eq_biUnion_closedBall {α : Type _} [PseudoMetricSpace α] [ProperSpace α]
+theorem cthickening_eq_biUnion_closedBall {α : Type*} [PseudoMetricSpace α] [ProperSpace α]
(E : Set α) (hδ : 0 ≤ δ) : cthickening δ E = ⋃ x ∈ closure E, closedBall x δ := by
rcases eq_empty_or_nonempty E with (rfl | hne)
· simp only [cthickening_empty, biUnion_empty, closure_empty]
@@ -1449,7 +1449,7 @@ theorem cthickening_eq_biUnion_closedBall {α : Type _} [PseudoMetricSpace α] [
exact mem_biUnion yE hy
#align metric.cthickening_eq_bUnion_closed_ball Metric.cthickening_eq_biUnion_closedBall
-nonrec theorem _root_.IsClosed.cthickening_eq_biUnion_closedBall {α : Type _} [PseudoMetricSpace α]
+nonrec theorem _root_.IsClosed.cthickening_eq_biUnion_closedBall {α : Type*} [PseudoMetricSpace α]
[ProperSpace α] {E : Set α} (hE : IsClosed E) (hδ : 0 ≤ δ) :
cthickening δ E = ⋃ x ∈ E, closedBall x δ := by
rw [cthickening_eq_biUnion_closedBall E hδ, hE.closure_eq]
Add lemmas tendsto_indicator_thickening_indicator_closure
and tendsto_indicator_cthickening_indicator_closure
.
Co-authored-by: @sgouezel and @urkud
Co-authored-by: kkytola <39528102+kkytola@users.noreply.github.com>
@@ -905,6 +905,15 @@ theorem mem_thickening_iff_infEdist_lt : x ∈ thickening δ s ↔ infEdist x s
Iff.rfl
#align metric.mem_thickening_iff_inf_edist_lt Metric.mem_thickening_iff_infEdist_lt
+/-- An exterior point of a subset `E` (i.e., a point outside the closure of `E`) is not in the
+(open) `δ`-thickening of `E` for small enough positive `δ`. -/
+lemma eventually_not_mem_thickening_of_infEdist_pos {E : Set α} {x : α} (h : x ∉ closure E) :
+ ∀ᶠ δ in 𝓝 (0 : ℝ), x ∉ Metric.thickening δ E := by
+ obtain ⟨ε, ⟨ε_pos, ε_lt⟩⟩ := exists_real_pos_lt_infEdist_of_not_mem_closure h
+ filter_upwards [eventually_lt_nhds ε_pos] with δ hδ
+ simp only [thickening, mem_setOf_eq, not_lt]
+ exact (ENNReal.ofReal_le_ofReal hδ.le).trans ε_lt.le
+
/-- The (open) thickening equals the preimage of an open interval under `EMetric.infEdist`. -/
theorem thickening_eq_preimage_infEdist (δ : ℝ) (E : Set α) :
thickening δ E = (infEdist · E) ⁻¹' Iio (ENNReal.ofReal δ) :=
@@ -1026,6 +1035,15 @@ theorem mem_cthickening_iff : x ∈ cthickening δ s ↔ infEdist x s ≤ ENNRea
Iff.rfl
#align metric.mem_cthickening_iff Metric.mem_cthickening_iff
+/-- An exterior point of a subset `E` (i.e., a point outside the closure of `E`) is not in the
+closed `δ`-thickening of `E` for small enough positive `δ`. -/
+lemma eventually_not_mem_cthickening_of_infEdist_pos {E : Set α} {x : α} (h : x ∉ closure E) :
+ ∀ᶠ δ in 𝓝 (0 : ℝ), x ∉ Metric.cthickening δ E := by
+ obtain ⟨ε, ⟨ε_pos, ε_lt⟩⟩ := exists_real_pos_lt_infEdist_of_not_mem_closure h
+ filter_upwards [eventually_lt_nhds ε_pos] with δ hδ
+ simp only [cthickening, mem_setOf_eq, not_le]
+ exact ((ofReal_lt_ofReal_iff ε_pos).mpr hδ).trans ε_lt
+
theorem mem_cthickening_of_edist_le (x y : α) (δ : ℝ) (E : Set α) (h : y ∈ E)
(h' : edist x y ≤ ENNReal.ofReal δ) : x ∈ cthickening δ E :=
(infEdist_le_edist_of_mem h).trans h'
@@ -2,16 +2,13 @@
Copyright (c) 2019 Sébastien Gouëzel. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Sébastien Gouëzel
-
-! This file was ported from Lean 3 source module topology.metric_space.hausdorff_distance
-! leanprover-community/mathlib commit bc91ed7093bf098d253401e69df601fc33dde156
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.Analysis.SpecificLimits.Basic
import Mathlib.Topology.MetricSpace.IsometricSMul
import Mathlib.Topology.Instances.ENNReal
+#align_import topology.metric_space.hausdorff_distance from "leanprover-community/mathlib"@"bc91ed7093bf098d253401e69df601fc33dde156"
+
/-!
# Hausdorff distance
@@ -139,9 +139,9 @@ theorem infEdist_closure : infEdist x (closure s) = infEdist x s := by
have : infEdist x (closure s) < infEdist x (closure s) + ε / 2 :=
ENNReal.lt_add_right h.ne ε0.ne'
rcases infEdist_lt_iff.mp this with ⟨y, ycs, hy⟩
- -- y : α, ycs : y ∈ closure s, hy : edist x y < infEdist x (closure s) + ↑ε / 2
+ -- y : α, ycs : y ∈ closure s, hy : edist x y < infEdist x (closure s) + ↑ε / 2
rcases EMetric.mem_closure_iff.1 ycs (ε / 2) ε0 with ⟨z, zs, dyz⟩
- -- z : α, zs : z ∈ s, dyz : edist y z < ↑ε / 2
+ -- z : α, zs : z ∈ s, dyz : edist y z < ↑ε / 2
calc
infEdist x s ≤ edist x z := infEdist_le_edist_of_mem zs
_ ≤ edist x y + edist y z := (edist_triangle _ _ _)
@@ -323,11 +323,11 @@ theorem infEdist_le_infEdist_add_hausdorffEdist :
have : infEdist x s < infEdist x s + ε / 2 :=
ENNReal.lt_add_right (ENNReal.add_lt_top.1 h).1.ne ε0
rcases infEdist_lt_iff.mp this with ⟨y, ys, dxy⟩
- -- y : α, ys : y ∈ s, dxy : edist x y < infEdist x s + ↑ε / 2
+ -- y : α, ys : y ∈ s, dxy : edist x y < infEdist x s + ↑ε / 2
have : hausdorffEdist s t < hausdorffEdist s t + ε / 2 :=
ENNReal.lt_add_right (ENNReal.add_lt_top.1 h).2.ne ε0
rcases exists_edist_lt_of_hausdorffEdist_lt ys this with ⟨z, zt, dyz⟩
- -- z : α, zt : z ∈ t, dyz : edist y z < Hausdorff_edist s t + ↑ε / 2
+ -- z : α, zt : z ∈ t, dyz : edist y z < Hausdorff_edist s t + ↑ε / 2
calc
infEdist x t ≤ edist x z := infEdist_le_edist_of_mem zt
_ ≤ edist x y + edist y z := (edist_triangle _ _ _)
@@ -106,7 +106,7 @@ theorem infEdist_lt_iff {r : ℝ≥0∞} : infEdist x s < r ↔ ∃ y ∈ s, edi
the edist from `x` to `y` -/
theorem infEdist_le_infEdist_add_edist : infEdist x s ≤ infEdist y s + edist x y :=
calc
- (⨅ z ∈ s, edist x z) ≤ ⨅ z ∈ s, edist y z + edist x y :=
+ ⨅ z ∈ s, edist x z ≤ ⨅ z ∈ s, edist y z + edist x y :=
iInf₂_mono fun z _ => (edist_triangle _ _ _).trans_eq (add_comm _ _)
_ = (⨅ z ∈ s, edist y z) + edist x y := by simp only [ENNReal.iInf_add]
#align emetric.inf_edist_le_inf_edist_add_edist EMetric.infEdist_le_infEdist_add_edist
@@ -205,7 +205,7 @@ theorem infEdist_smul {M} [SMul M α] [IsometricSMul M α] (c : M) (x : α) (s :
#align emetric.inf_edist_vadd EMetric.infEdist_vadd
theorem _root_.IsOpen.exists_iUnion_isClosed {U : Set α} (hU : IsOpen U) :
- ∃ F : ℕ → Set α, (∀ n, IsClosed (F n)) ∧ (∀ n, F n ⊆ U) ∧ (⋃ n, F n) = U ∧ Monotone F := by
+ ∃ F : ℕ → Set α, (∀ n, IsClosed (F n)) ∧ (∀ n, F n ⊆ U) ∧ ⋃ n, F n = U ∧ Monotone F := by
obtain ⟨a, a_pos, a_lt_one⟩ : ∃ a : ℝ≥0∞, 0 < a ∧ a < 1 := exists_between zero_lt_one
let F := fun n : ℕ => (fun x => infEdist x Uᶜ) ⁻¹' Ici (a ^ n)
have F_subset : ∀ n, F n ⊆ U := fun n x hx ↦ by
@@ -213,7 +213,7 @@ theorem _root_.IsOpen.exists_iUnion_isClosed {U : Set α} (hU : IsOpen U) :
have : infEdist x Uᶜ ≠ 0 := ((ENNReal.pow_pos a_pos _).trans_le hx).ne'
exact this (infEdist_zero_of_mem h)
refine ⟨F, fun n => IsClosed.preimage continuous_infEdist isClosed_Ici, F_subset, ?_, ?_⟩
- show (⋃ n, F n) = U
+ show ⋃ n, F n = U
· refine' Subset.antisymm (by simp only [iUnion_subset_iff, F_subset, forall_const]) fun x hx => _
have : ¬x ∈ Uᶜ := by simpa using hx
rw [mem_iff_infEdist_zero_of_closed hU.isClosed_compl] at this
@@ -207,17 +207,17 @@ theorem infEdist_smul {M} [SMul M α] [IsometricSMul M α] (c : M) (x : α) (s :
theorem _root_.IsOpen.exists_iUnion_isClosed {U : Set α} (hU : IsOpen U) :
∃ F : ℕ → Set α, (∀ n, IsClosed (F n)) ∧ (∀ n, F n ⊆ U) ∧ (⋃ n, F n) = U ∧ Monotone F := by
obtain ⟨a, a_pos, a_lt_one⟩ : ∃ a : ℝ≥0∞, 0 < a ∧ a < 1 := exists_between zero_lt_one
- let F := fun n : ℕ => (fun x => infEdist x (Uᶜ)) ⁻¹' Ici (a ^ n)
+ let F := fun n : ℕ => (fun x => infEdist x Uᶜ) ⁻¹' Ici (a ^ n)
have F_subset : ∀ n, F n ⊆ U := fun n x hx ↦ by
by_contra h
- have : infEdist x (Uᶜ) ≠ 0 := ((ENNReal.pow_pos a_pos _).trans_le hx).ne'
+ have : infEdist x Uᶜ ≠ 0 := ((ENNReal.pow_pos a_pos _).trans_le hx).ne'
exact this (infEdist_zero_of_mem h)
refine ⟨F, fun n => IsClosed.preimage continuous_infEdist isClosed_Ici, F_subset, ?_, ?_⟩
show (⋃ n, F n) = U
· refine' Subset.antisymm (by simp only [iUnion_subset_iff, F_subset, forall_const]) fun x hx => _
have : ¬x ∈ Uᶜ := by simpa using hx
rw [mem_iff_infEdist_zero_of_closed hU.isClosed_compl] at this
- have B : 0 < infEdist x (Uᶜ) := by simpa [pos_iff_ne_zero] using this
+ have B : 0 < infEdist x Uᶜ := by simpa [pos_iff_ne_zero] using this
have : Filter.Tendsto (fun n => a ^ n) atTop (𝓝 0) :=
ENNReal.tendsto_pow_atTop_nhds_0_of_lt_1 a_lt_one
rcases((tendsto_order.1 this).2 _ B).exists with ⟨n, hn⟩
@@ -542,7 +542,7 @@ theorem ball_infDist_subset_compl : ball x (infDist x s) ⊆ sᶜ :=
(disjoint_ball_infDist (s := s)).subset_compl_right
#align metric.ball_inf_dist_subset_compl Metric.ball_infDist_subset_compl
-theorem ball_infDist_compl_subset : ball x (infDist x (sᶜ)) ⊆ s :=
+theorem ball_infDist_compl_subset : ball x (infDist x sᶜ) ⊆ s :=
ball_infDist_subset_compl.trans_eq (compl_compl s)
#align metric.ball_inf_dist_compl_subset Metric.ball_infDist_compl_subset
at
and goals (#5387)
Changes are of the form
some_tactic at h⊢
-> some_tactic at h ⊢
some_tactic at h
-> some_tactic at h
@@ -225,7 +225,7 @@ theorem _root_.IsOpen.exists_iUnion_isClosed {U : Set α} (hU : IsOpen U) :
exact ⟨n, hn.le⟩
show Monotone F
· intro m n hmn x hx
- simp only [mem_Ici, mem_preimage] at hx⊢
+ simp only [mem_Ici, mem_preimage] at hx ⊢
apply le_trans (pow_le_pow_of_le_one' a_lt_one.le hmn) hx
#align is_open.exists_Union_is_closed IsOpen.exists_iUnion_isClosed
@@ -1311,7 +1311,7 @@ theorem cthickening_eq_iInter_cthickening' {δ : ℝ} (s : Set ℝ) (hsδ : s
#align metric.cthickening_eq_Inter_cthickening' Metric.cthickening_eq_iInter_cthickening'
theorem cthickening_eq_iInter_cthickening {δ : ℝ} (E : Set α) :
- cthickening δ E = ⋂ (ε : ℝ) (_h : δ < ε), cthickening ε E := by
+ cthickening δ E = ⋂ (ε : ℝ) (_ : δ < ε), cthickening ε E := by
apply cthickening_eq_iInter_cthickening' (Ioi δ) rfl.subset
simp_rw [inter_eq_right_iff_subset.mpr Ioc_subset_Ioi_self]
exact fun _ hε => nonempty_Ioc.mpr hε
@@ -1329,14 +1329,14 @@ theorem cthickening_eq_iInter_thickening' {δ : ℝ} (δ_nn : 0 ≤ δ) (s : Set
#align metric.cthickening_eq_Inter_thickening' Metric.cthickening_eq_iInter_thickening'
theorem cthickening_eq_iInter_thickening {δ : ℝ} (δ_nn : 0 ≤ δ) (E : Set α) :
- cthickening δ E = ⋂ (ε : ℝ) (_h : δ < ε), thickening ε E := by
+ cthickening δ E = ⋂ (ε : ℝ) (_ : δ < ε), thickening ε E := by
apply cthickening_eq_iInter_thickening' δ_nn (Ioi δ) rfl.subset
simp_rw [inter_eq_right_iff_subset.mpr Ioc_subset_Ioi_self]
exact fun _ hε => nonempty_Ioc.mpr hε
#align metric.cthickening_eq_Inter_thickening Metric.cthickening_eq_iInter_thickening
theorem cthickening_eq_iInter_thickening'' (δ : ℝ) (E : Set α) :
- cthickening δ E = ⋂ (ε : ℝ) (_h : max 0 δ < ε), thickening ε E := by
+ cthickening δ E = ⋂ (ε : ℝ) (_ : max 0 δ < ε), thickening ε E := by
rw [← cthickening_max_zero, cthickening_eq_iInter_thickening]
exact le_max_left _ _
#align metric.cthickening_eq_Inter_thickening'' Metric.cthickening_eq_iInter_thickening''
@@ -1358,7 +1358,7 @@ theorem closure_eq_iInter_cthickening' (E : Set α) (s : Set ℝ)
/-- The closure of a set equals the intersection of its closed thickenings of positive radii. -/
theorem closure_eq_iInter_cthickening (E : Set α) :
- closure E = ⋂ (δ : ℝ) (_h : 0 < δ), cthickening δ E := by
+ closure E = ⋂ (δ : ℝ) (_ : 0 < δ), cthickening δ E := by
rw [← cthickening_zero]
exact cthickening_eq_iInter_cthickening E
#align metric.closure_eq_Inter_cthickening Metric.closure_eq_iInter_cthickening
@@ -1373,7 +1373,7 @@ theorem closure_eq_iInter_thickening' (E : Set α) (s : Set ℝ) (hs₀ : s ⊆
/-- The closure of a set equals the intersection of its (open) thickenings of positive radii. -/
theorem closure_eq_iInter_thickening (E : Set α) :
- closure E = ⋂ (δ : ℝ) (_h : 0 < δ), thickening δ E := by
+ closure E = ⋂ (δ : ℝ) (_ : 0 < δ), thickening δ E := by
rw [← cthickening_zero]
exact cthickening_eq_iInter_thickening rfl.ge E
#align metric.closure_eq_Inter_thickening Metric.closure_eq_iInter_thickening
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Sébastien Gouëzel
! This file was ported from Lean 3 source module topology.metric_space.hausdorff_distance
-! leanprover-community/mathlib commit c1686dff26eaecf4efd4edd141ebf78de309ae80
+! leanprover-community/mathlib commit bc91ed7093bf098d253401e69df601fc33dde156
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
Forward-port of leanprover-community/mathlib#18990
Original title: feat(analysis/normed_space/basic): scaling a set scales its diameter, translating it leaves it unchanged
@@ -9,7 +9,7 @@ Authors: Sébastien Gouëzel
! if you have ported upstream changes.
-/
import Mathlib.Analysis.SpecificLimits.Basic
-import Mathlib.Topology.MetricSpace.Isometry
+import Mathlib.Topology.MetricSpace.IsometricSMul
import Mathlib.Topology.Instances.ENNReal
/-!
@@ -37,7 +37,7 @@ This files introduces:
noncomputable section
-open Classical NNReal ENNReal Topology Set Function TopologicalSpace Filter
+open Classical NNReal ENNReal Topology Set Function TopologicalSpace Filter Pointwise
universe u v w
@@ -197,6 +197,13 @@ theorem infEdist_image (hΦ : Isometry Φ) : infEdist (Φ x) (Φ '' t) = infEdis
simp only [infEdist, iInf_image, hΦ.edist_eq]
#align emetric.inf_edist_image EMetric.infEdist_image
+@[to_additive (attr := simp)]
+theorem infEdist_smul {M} [SMul M α] [IsometricSMul M α] (c : M) (x : α) (s : Set α) :
+ infEdist (c • x) (c • s) = infEdist x s :=
+ infEdist_image (isometry_smul _ _)
+#align emetric.inf_edist_smul EMetric.infEdist_smul
+#align emetric.inf_edist_vadd EMetric.infEdist_vadd
+
theorem _root_.IsOpen.exists_iUnion_isClosed {U : Set α} (hU : IsOpen U) :
∃ F : ℕ → Set α, (∀ n, IsClosed (F n)) ∧ (∀ n, F n ⊆ U) ∧ (⋃ n, F n) = U ∧ Monotone F := by
obtain ⟨a, a_pos, a_lt_one⟩ : ∃ a : ℝ≥0∞, 0 < a ∧ a < 1 := exists_between zero_lt_one
Positivity extensions for NonnegHomClass
(this includes AbsoluteValue
and Seminorm
), IsAbsoluteValue
, norm, the NNReal
-to-Real
coercion, factorials, square roots, distance (in a metric space), and diameter.
I tried to do these "properly" using Qq but I hit various errors I couldn't fix -- see https://leanprover.zulipchat.com/#narrow/stream/287929-mathlib4/topic/Qq.20doesn't.20know.20that.20two.20things.20have.20the.20same.20type for some examples.
cc @dwrensha
Co-authored-by: Floris van Doorn <fpvdoorn@gmail.com>
@@ -1221,8 +1221,7 @@ theorem diam_thickening_le {α : Type _} [PseudoMetricSpace α] (s : Set α) (h
obtain rfl | hε := hε.eq_or_lt
· simp [thickening_of_nonpos, diam_nonneg]
· rw [diam_eq_zero_of_unbounded (mt (Bounded.mono <| self_subset_thickening hε _) hs)]
- -- porting note: was `positivity`
- exact add_nonneg diam_nonneg (mul_nonneg zero_le_two hε.le)
+ positivity
#align metric.diam_thickening_le Metric.diam_thickening_le
@[simp]
Forward port leanprover-community/mathlib#18946.
Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Sébastien Gouëzel
! This file was ported from Lean 3 source module topology.metric_space.hausdorff_distance
-! leanprover-community/mathlib commit 57ac39bd365c2f80589a700f9fbb664d3a1a30c2
+! leanprover-community/mathlib commit c1686dff26eaecf4efd4edd141ebf78de309ae80
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -466,6 +466,7 @@ theorem infDist_eq_iInf : infDist x s = ⨅ y : s, dist x y := by
rw [infDist, infEdist, iInf_subtype', ENNReal.toReal_iInf]
· simp only [dist_edist]
· exact fun _ ↦ edist_ne_top _ _
+#align metric.inf_dist_eq_infi Metric.infDist_eq_iInf
/-- The minimal distance is always nonnegative -/
theorem infDist_nonneg : 0 ≤ infDist x s := toReal_nonneg
sSup
/iSup
(#3938)
As discussed on Zulip
supₛ
→ sSup
infₛ
→ sInf
supᵢ
→ iSup
infᵢ
→ iInf
bsupₛ
→ bsSup
binfₛ
→ bsInf
bsupᵢ
→ biSup
binfᵢ
→ biInf
csupₛ
→ csSup
cinfₛ
→ csInf
csupᵢ
→ ciSup
cinfᵢ
→ ciInf
unionₛ
→ sUnion
interₛ
→ sInter
unionᵢ
→ iUnion
interᵢ
→ iInter
bunionₛ
→ bsUnion
binterₛ
→ bsInter
bunionᵢ
→ biUnion
binterᵢ
→ biInter
Co-authored-by: Parcly Taxel <reddeloostw@gmail.com>
@@ -58,33 +58,33 @@ def infEdist (x : α) (s : Set α) : ℝ≥0∞ :=
@[simp]
theorem infEdist_empty : infEdist x ∅ = ∞ :=
- infᵢ_emptyset
+ iInf_emptyset
#align emetric.inf_edist_empty EMetric.infEdist_empty
theorem le_infEdist {d} : d ≤ infEdist x s ↔ ∀ y ∈ s, d ≤ edist x y := by
- simp only [infEdist, le_infᵢ_iff]
+ simp only [infEdist, le_iInf_iff]
#align emetric.le_inf_edist EMetric.le_infEdist
/-- The edist to a union is the minimum of the edists -/
@[simp]
theorem infEdist_union : infEdist x (s ∪ t) = infEdist x s ⊓ infEdist x t :=
- infᵢ_union
+ iInf_union
#align emetric.inf_edist_union EMetric.infEdist_union
@[simp]
-theorem infEdist_unionᵢ (f : ι → Set α) (x : α) : infEdist x (⋃ i, f i) = ⨅ i, infEdist x (f i) :=
- infᵢ_unionᵢ f _
-#align emetric.inf_edist_Union EMetric.infEdist_unionᵢ
+theorem infEdist_iUnion (f : ι → Set α) (x : α) : infEdist x (⋃ i, f i) = ⨅ i, infEdist x (f i) :=
+ iInf_iUnion f _
+#align emetric.inf_edist_Union EMetric.infEdist_iUnion
/-- The edist to a singleton is the edistance to the single point of this singleton -/
@[simp]
theorem infEdist_singleton : infEdist x {y} = edist x y :=
- infᵢ_singleton
+ iInf_singleton
#align emetric.inf_edist_singleton EMetric.infEdist_singleton
/-- The edist to a set is bounded above by the edist to any of its points -/
theorem infEdist_le_edist_of_mem (h : y ∈ s) : infEdist x s ≤ edist x y :=
- infᵢ₂_le y h
+ iInf₂_le y h
#align emetric.inf_edist_le_edist_of_mem EMetric.infEdist_le_edist_of_mem
/-- If a point `x` belongs to `s`, then its edist to `s` vanishes -/
@@ -94,12 +94,12 @@ theorem infEdist_zero_of_mem (h : x ∈ s) : infEdist x s = 0 :=
/-- The edist is antitone with respect to inclusion. -/
theorem infEdist_anti (h : s ⊆ t) : infEdist x t ≤ infEdist x s :=
- infᵢ_le_infᵢ_of_subset h
+ iInf_le_iInf_of_subset h
#align emetric.inf_edist_anti EMetric.infEdist_anti
/-- The edist to a set is `< r` iff there exists a point in the set at edistance `< r` -/
theorem infEdist_lt_iff {r : ℝ≥0∞} : infEdist x s < r ↔ ∃ y ∈ s, edist x y < r := by
- simp_rw [infEdist, infᵢ_lt_iff, exists_prop]
+ simp_rw [infEdist, iInf_lt_iff, exists_prop]
#align emetric.inf_edist_lt_iff EMetric.infEdist_lt_iff
/-- The edist of `x` to `s` is bounded by the sum of the edist of `y` to `s` and
@@ -107,8 +107,8 @@ the edist from `x` to `y` -/
theorem infEdist_le_infEdist_add_edist : infEdist x s ≤ infEdist y s + edist x y :=
calc
(⨅ z ∈ s, edist x z) ≤ ⨅ z ∈ s, edist y z + edist x y :=
- infᵢ₂_mono fun z _ => (edist_triangle _ _ _).trans_eq (add_comm _ _)
- _ = (⨅ z ∈ s, edist y z) + edist x y := by simp only [ENNReal.infᵢ_add]
+ iInf₂_mono fun z _ => (edist_triangle _ _ _).trans_eq (add_comm _ _)
+ _ = (⨅ z ∈ s, edist y z) + edist x y := by simp only [ENNReal.iInf_add]
#align emetric.inf_edist_le_inf_edist_add_edist EMetric.infEdist_le_infEdist_add_edist
theorem infEdist_le_edist_add_infEdist : infEdist x s ≤ edist x y + infEdist y s := by
@@ -117,8 +117,8 @@ theorem infEdist_le_edist_add_infEdist : infEdist x s ≤ edist x y + infEdist y
#align emetric.inf_edist_le_edist_add_inf_edist EMetric.infEdist_le_edist_add_infEdist
theorem edist_le_infEdist_add_ediam (hy : y ∈ s) : edist x y ≤ infEdist x s + diam s := by
- simp_rw [infEdist, ENNReal.infᵢ_add]
- refine le_infᵢ₂ fun i hi => ?_
+ simp_rw [infEdist, ENNReal.iInf_add]
+ refine le_iInf₂ fun i hi => ?_
calc
edist x y ≤ edist x i + edist i y := edist_triangle _ _ _
_ ≤ edist x i + diam s := add_le_add le_rfl (edist_le_diam_of_mem hi hy)
@@ -194,10 +194,10 @@ theorem disjoint_closedBall_of_lt_infEdist {r : ℝ≥0∞} (h : r < infEdist x
/-- The infimum edistance is invariant under isometries -/
theorem infEdist_image (hΦ : Isometry Φ) : infEdist (Φ x) (Φ '' t) = infEdist x t := by
- simp only [infEdist, infᵢ_image, hΦ.edist_eq]
+ simp only [infEdist, iInf_image, hΦ.edist_eq]
#align emetric.inf_edist_image EMetric.infEdist_image
-theorem _root_.IsOpen.exists_unionᵢ_isClosed {U : Set α} (hU : IsOpen U) :
+theorem _root_.IsOpen.exists_iUnion_isClosed {U : Set α} (hU : IsOpen U) :
∃ F : ℕ → Set α, (∀ n, IsClosed (F n)) ∧ (∀ n, F n ⊆ U) ∧ (⋃ n, F n) = U ∧ Monotone F := by
obtain ⟨a, a_pos, a_lt_one⟩ : ∃ a : ℝ≥0∞, 0 < a ∧ a < 1 := exists_between zero_lt_one
let F := fun n : ℕ => (fun x => infEdist x (Uᶜ)) ⁻¹' Ici (a ^ n)
@@ -207,20 +207,20 @@ theorem _root_.IsOpen.exists_unionᵢ_isClosed {U : Set α} (hU : IsOpen U) :
exact this (infEdist_zero_of_mem h)
refine ⟨F, fun n => IsClosed.preimage continuous_infEdist isClosed_Ici, F_subset, ?_, ?_⟩
show (⋃ n, F n) = U
- · refine' Subset.antisymm (by simp only [unionᵢ_subset_iff, F_subset, forall_const]) fun x hx => _
+ · refine' Subset.antisymm (by simp only [iUnion_subset_iff, F_subset, forall_const]) fun x hx => _
have : ¬x ∈ Uᶜ := by simpa using hx
rw [mem_iff_infEdist_zero_of_closed hU.isClosed_compl] at this
have B : 0 < infEdist x (Uᶜ) := by simpa [pos_iff_ne_zero] using this
have : Filter.Tendsto (fun n => a ^ n) atTop (𝓝 0) :=
ENNReal.tendsto_pow_atTop_nhds_0_of_lt_1 a_lt_one
rcases((tendsto_order.1 this).2 _ B).exists with ⟨n, hn⟩
- simp only [mem_unionᵢ, mem_Ici, mem_preimage]
+ simp only [mem_iUnion, mem_Ici, mem_preimage]
exact ⟨n, hn.le⟩
show Monotone F
· intro m n hmn x hx
simp only [mem_Ici, mem_preimage] at hx⊢
apply le_trans (pow_le_pow_of_le_one' a_lt_one.le hmn) hx
-#align is_open.exists_Union_is_closed IsOpen.exists_unionᵢ_isClosed
+#align is_open.exists_Union_is_closed IsOpen.exists_iUnion_isClosed
theorem _root_.IsCompact.exists_infEdist_eq_edist (hs : IsCompact s) (hne : s.Nonempty) (x : α) :
∃ y ∈ s, infEdist x s = edist x y := by
@@ -261,7 +261,7 @@ variable [PseudoEMetricSpace α] [PseudoEMetricSpace β] {x y : α} {s t u : Set
/-- The Hausdorff edistance of a set to itself vanishes -/
@[simp]
theorem hausdorffEdist_self : hausdorffEdist s s = 0 := by
- simp only [hausdorffEdist_def, sup_idem, ENNReal.supᵢ_eq_zero]
+ simp only [hausdorffEdist_def, sup_idem, ENNReal.iSup_eq_zero]
exact fun x hx => infEdist_zero_of_mem hx
#align emetric.Hausdorff_edist_self EMetric.hausdorffEdist_self
@@ -275,7 +275,7 @@ set_option linter.uppercaseLean3 false in
in each set to the other set -/
theorem hausdorffEdist_le_of_infEdist {r : ℝ≥0∞} (H1 : ∀ x ∈ s, infEdist x t ≤ r)
(H2 : ∀ x ∈ t, infEdist x s ≤ r) : hausdorffEdist s t ≤ r := by
- simp only [hausdorffEdist_def, sup_le_iff, supᵢ_le_iff]
+ simp only [hausdorffEdist_def, sup_le_iff, iSup_le_iff]
exact ⟨H1, H2⟩
#align emetric.Hausdorff_edist_le_of_inf_edist EMetric.hausdorffEdist_le_of_infEdist
@@ -294,7 +294,7 @@ theorem hausdorffEdist_le_of_mem_edist {r : ℝ≥0∞} (H1 : ∀ x ∈ s, ∃ y
theorem infEdist_le_hausdorffEdist_of_mem (h : x ∈ s) : infEdist x t ≤ hausdorffEdist s t := by
rw [hausdorffEdist_def]
refine le_trans ?_ le_sup_left
- exact le_supᵢ₂ (α := ℝ≥0∞) x h
+ exact le_iSup₂ (α := ℝ≥0∞) x h
#align emetric.inf_edist_le_Hausdorff_edist_of_mem EMetric.infEdist_le_hausdorffEdist_of_mem
/-- If the Hausdorff distance is `< r`, then any point in one of the sets has
@@ -332,7 +332,7 @@ theorem infEdist_le_infEdist_add_hausdorffEdist :
/-- The Hausdorff edistance is invariant under eisometries -/
theorem hausdorffEdist_image (h : Isometry Φ) :
hausdorffEdist (Φ '' s) (Φ '' t) = hausdorffEdist s t := by
- simp only [hausdorffEdist_def, supᵢ_image, infEdist_image h]
+ simp only [hausdorffEdist_def, iSup_image, infEdist_image h]
#align emetric.Hausdorff_edist_image EMetric.hausdorffEdist_image
/-- The Hausdorff distance is controlled by the diameter of the union -/
@@ -350,7 +350,7 @@ theorem hausdorffEdist_le_ediam (hs : s.Nonempty) (ht : t.Nonempty) :
/-- The Hausdorff distance satisfies the triangular inequality -/
theorem hausdorffEdist_triangle : hausdorffEdist s u ≤ hausdorffEdist s t + hausdorffEdist t u := by
rw [hausdorffEdist_def]
- simp only [sup_le_iff, supᵢ_le_iff]
+ simp only [sup_le_iff, iSup_le_iff]
constructor
· show ∀ x ∈ s, infEdist x u ≤ hausdorffEdist s t + hausdorffEdist t u
exact fun x xs =>
@@ -372,7 +372,7 @@ theorem hausdorffEdist_triangle : hausdorffEdist s u ≤ hausdorffEdist s t + ha
/-- Two sets are at zero Hausdorff edistance if and only if they have the same closure -/
theorem hausdorffEdist_zero_iff_closure_eq_closure :
hausdorffEdist s t = 0 ↔ closure s = closure t := by
- simp only [hausdorffEdist_def, ENNReal.sup_eq_zero, ENNReal.supᵢ_eq_zero, ← subset_def,
+ simp only [hausdorffEdist_def, ENNReal.sup_eq_zero, ENNReal.iSup_eq_zero, ← subset_def,
← mem_closure_iff_infEdist_zero, subset_antisymm_iff, isClosed_closure.closure_subset_iff]
#align emetric.Hausdorff_edist_zero_iff_closure_eq_closure EMetric.hausdorffEdist_zero_iff_closure_eq_closure
@@ -441,7 +441,7 @@ end HausdorffEdist
end EMetric
/-! Now, we turn to the same notions in metric spaces. To avoid the difficulties related to
-`infₛ` and `supₛ` on `ℝ` (which is only conditionally complete), we use the notions in `ℝ≥0∞`
+`sInf` and `sSup` on `ℝ` (which is only conditionally complete), we use the notions in `ℝ≥0∞`
formulated in terms of the edistance, and coerce them to `ℝ`.
Then their properties follow readily from the corresponding properties in `ℝ≥0∞`,
modulo some tedious rewriting of inequalities from one to the other. -/
@@ -462,8 +462,8 @@ def infDist (x : α) (s : Set α) : ℝ :=
ENNReal.toReal (infEdist x s)
#align metric.inf_dist Metric.infDist
-theorem infDist_eq_infᵢ : infDist x s = ⨅ y : s, dist x y := by
- rw [infDist, infEdist, infᵢ_subtype', ENNReal.toReal_infᵢ]
+theorem infDist_eq_iInf : infDist x s = ⨅ y : s, dist x y := by
+ rw [infDist, infEdist, iInf_subtype', ENNReal.toReal_iInf]
· simp only [dist_edist]
· exact fun _ ↦ edist_ne_top _ _
@@ -985,11 +985,11 @@ theorem ball_subset_thickening {x : X} {E : Set X} (hx : x ∈ E) (δ : ℝ) :
/-- The (open) `δ`-thickening `Metric.thickening δ E` of a subset `E` in a metric space equals the
union of balls of radius `δ` centered at points of `E`. -/
-theorem thickening_eq_bunionᵢ_ball {δ : ℝ} {E : Set X} : thickening δ E = ⋃ x ∈ E, ball x δ := by
+theorem thickening_eq_biUnion_ball {δ : ℝ} {E : Set X} : thickening δ E = ⋃ x ∈ E, ball x δ := by
ext x
- simp only [mem_unionᵢ₂, exists_prop]
+ simp only [mem_iUnion₂, exists_prop]
exact mem_thickening_iff
-#align metric.thickening_eq_bUnion_ball Metric.thickening_eq_bunionᵢ_ball
+#align metric.thickening_eq_bUnion_ball Metric.thickening_eq_biUnion_ball
protected theorem Bounded.thickening {δ : ℝ} {E : Set X} (h : Bounded E) :
Bounded (thickening δ E) := by
@@ -1179,10 +1179,10 @@ theorem cthickening_union (δ : ℝ) (s t : Set α) :
#align metric.cthickening_union Metric.cthickening_union
@[simp]
-theorem thickening_unionᵢ (δ : ℝ) (f : ι → Set α) :
+theorem thickening_iUnion (δ : ℝ) (f : ι → Set α) :
thickening δ (⋃ i, f i) = ⋃ i, thickening δ (f i) := by
- simp_rw [thickening, infEdist_unionᵢ, infᵢ_lt_iff, setOf_exists]
-#align metric.thickening_Union Metric.thickening_unionᵢ
+ simp_rw [thickening, infEdist_iUnion, iInf_lt_iff, setOf_exists]
+#align metric.thickening_Union Metric.thickening_iUnion
theorem ediam_cthickening_le (ε : ℝ≥0) :
EMetric.diam (cthickening ε s) ≤ EMetric.diam s + 2 * ε := by
@@ -1287,89 +1287,89 @@ theorem hasBasis_nhdsSet_cthickening {K : Set α} (hK : IsCompact K) :
fun _ => cthickening_mem_nhdsSet K
#align metric.has_basis_nhds_set_cthickening Metric.hasBasis_nhdsSet_cthickening
-theorem cthickening_eq_interᵢ_cthickening' {δ : ℝ} (s : Set ℝ) (hsδ : s ⊆ Ioi δ)
+theorem cthickening_eq_iInter_cthickening' {δ : ℝ} (s : Set ℝ) (hsδ : s ⊆ Ioi δ)
(hs : ∀ ε, δ < ε → (s ∩ Ioc δ ε).Nonempty) (E : Set α) :
cthickening δ E = ⋂ ε ∈ s, cthickening ε E := by
apply Subset.antisymm
- · exact subset_interᵢ₂ fun _ hε => cthickening_mono (le_of_lt (hsδ hε)) E
+ · exact subset_iInter₂ fun _ hε => cthickening_mono (le_of_lt (hsδ hε)) E
· unfold cthickening
intro x hx
- simp only [mem_interᵢ, mem_setOf_eq] at *
+ simp only [mem_iInter, mem_setOf_eq] at *
apply ENNReal.le_of_forall_pos_le_add
intro η η_pos _
rcases hs (δ + η) (lt_add_of_pos_right _ (NNReal.coe_pos.mpr η_pos)) with ⟨ε, ⟨hsε, hε⟩⟩
apply ((hx ε hsε).trans (ENNReal.ofReal_le_ofReal hε.2)).trans
rw [ENNReal.coe_nnreal_eq η]
exact ENNReal.ofReal_add_le
-#align metric.cthickening_eq_Inter_cthickening' Metric.cthickening_eq_interᵢ_cthickening'
+#align metric.cthickening_eq_Inter_cthickening' Metric.cthickening_eq_iInter_cthickening'
-theorem cthickening_eq_interᵢ_cthickening {δ : ℝ} (E : Set α) :
+theorem cthickening_eq_iInter_cthickening {δ : ℝ} (E : Set α) :
cthickening δ E = ⋂ (ε : ℝ) (_h : δ < ε), cthickening ε E := by
- apply cthickening_eq_interᵢ_cthickening' (Ioi δ) rfl.subset
+ apply cthickening_eq_iInter_cthickening' (Ioi δ) rfl.subset
simp_rw [inter_eq_right_iff_subset.mpr Ioc_subset_Ioi_self]
exact fun _ hε => nonempty_Ioc.mpr hε
-#align metric.cthickening_eq_Inter_cthickening Metric.cthickening_eq_interᵢ_cthickening
+#align metric.cthickening_eq_Inter_cthickening Metric.cthickening_eq_iInter_cthickening
-theorem cthickening_eq_interᵢ_thickening' {δ : ℝ} (δ_nn : 0 ≤ δ) (s : Set ℝ) (hsδ : s ⊆ Ioi δ)
+theorem cthickening_eq_iInter_thickening' {δ : ℝ} (δ_nn : 0 ≤ δ) (s : Set ℝ) (hsδ : s ⊆ Ioi δ)
(hs : ∀ ε, δ < ε → (s ∩ Ioc δ ε).Nonempty) (E : Set α) :
cthickening δ E = ⋂ ε ∈ s, thickening ε E := by
- refine' (subset_interᵢ₂ fun ε hε => _).antisymm _
+ refine' (subset_iInter₂ fun ε hε => _).antisymm _
· obtain ⟨ε', -, hε'⟩ := hs ε (hsδ hε)
have ss := cthickening_subset_thickening' (lt_of_le_of_lt δ_nn hε'.1) hε'.1 E
exact ss.trans (thickening_mono hε'.2 E)
- · rw [cthickening_eq_interᵢ_cthickening' s hsδ hs E]
- exact interᵢ₂_mono fun ε _ => thickening_subset_cthickening ε E
-#align metric.cthickening_eq_Inter_thickening' Metric.cthickening_eq_interᵢ_thickening'
+ · rw [cthickening_eq_iInter_cthickening' s hsδ hs E]
+ exact iInter₂_mono fun ε _ => thickening_subset_cthickening ε E
+#align metric.cthickening_eq_Inter_thickening' Metric.cthickening_eq_iInter_thickening'
-theorem cthickening_eq_interᵢ_thickening {δ : ℝ} (δ_nn : 0 ≤ δ) (E : Set α) :
+theorem cthickening_eq_iInter_thickening {δ : ℝ} (δ_nn : 0 ≤ δ) (E : Set α) :
cthickening δ E = ⋂ (ε : ℝ) (_h : δ < ε), thickening ε E := by
- apply cthickening_eq_interᵢ_thickening' δ_nn (Ioi δ) rfl.subset
+ apply cthickening_eq_iInter_thickening' δ_nn (Ioi δ) rfl.subset
simp_rw [inter_eq_right_iff_subset.mpr Ioc_subset_Ioi_self]
exact fun _ hε => nonempty_Ioc.mpr hε
-#align metric.cthickening_eq_Inter_thickening Metric.cthickening_eq_interᵢ_thickening
+#align metric.cthickening_eq_Inter_thickening Metric.cthickening_eq_iInter_thickening
-theorem cthickening_eq_interᵢ_thickening'' (δ : ℝ) (E : Set α) :
+theorem cthickening_eq_iInter_thickening'' (δ : ℝ) (E : Set α) :
cthickening δ E = ⋂ (ε : ℝ) (_h : max 0 δ < ε), thickening ε E := by
- rw [← cthickening_max_zero, cthickening_eq_interᵢ_thickening]
+ rw [← cthickening_max_zero, cthickening_eq_iInter_thickening]
exact le_max_left _ _
-#align metric.cthickening_eq_Inter_thickening'' Metric.cthickening_eq_interᵢ_thickening''
+#align metric.cthickening_eq_Inter_thickening'' Metric.cthickening_eq_iInter_thickening''
/-- The closure of a set equals the intersection of its closed thickenings of positive radii
accumulating at zero. -/
-theorem closure_eq_interᵢ_cthickening' (E : Set α) (s : Set ℝ)
+theorem closure_eq_iInter_cthickening' (E : Set α) (s : Set ℝ)
(hs : ∀ ε, 0 < ε → (s ∩ Ioc 0 ε).Nonempty) : closure E = ⋂ δ ∈ s, cthickening δ E := by
by_cases hs₀ : s ⊆ Ioi 0
· rw [← cthickening_zero]
- apply cthickening_eq_interᵢ_cthickening' _ hs₀ hs
+ apply cthickening_eq_iInter_cthickening' _ hs₀ hs
obtain ⟨δ, hδs, δ_nonpos⟩ := not_subset.mp hs₀
rw [Set.mem_Ioi, not_lt] at δ_nonpos
apply Subset.antisymm
- · exact subset_interᵢ₂ fun ε _ => closure_subset_cthickening ε E
+ · exact subset_iInter₂ fun ε _ => closure_subset_cthickening ε E
· rw [← cthickening_of_nonpos δ_nonpos E]
- exact binterᵢ_subset_of_mem hδs
-#align metric.closure_eq_Inter_cthickening' Metric.closure_eq_interᵢ_cthickening'
+ exact biInter_subset_of_mem hδs
+#align metric.closure_eq_Inter_cthickening' Metric.closure_eq_iInter_cthickening'
/-- The closure of a set equals the intersection of its closed thickenings of positive radii. -/
-theorem closure_eq_interᵢ_cthickening (E : Set α) :
+theorem closure_eq_iInter_cthickening (E : Set α) :
closure E = ⋂ (δ : ℝ) (_h : 0 < δ), cthickening δ E := by
rw [← cthickening_zero]
- exact cthickening_eq_interᵢ_cthickening E
-#align metric.closure_eq_Inter_cthickening Metric.closure_eq_interᵢ_cthickening
+ exact cthickening_eq_iInter_cthickening E
+#align metric.closure_eq_Inter_cthickening Metric.closure_eq_iInter_cthickening
/-- The closure of a set equals the intersection of its open thickenings of positive radii
accumulating at zero. -/
-theorem closure_eq_interᵢ_thickening' (E : Set α) (s : Set ℝ) (hs₀ : s ⊆ Ioi 0)
+theorem closure_eq_iInter_thickening' (E : Set α) (s : Set ℝ) (hs₀ : s ⊆ Ioi 0)
(hs : ∀ ε, 0 < ε → (s ∩ Ioc 0 ε).Nonempty) : closure E = ⋂ δ ∈ s, thickening δ E := by
rw [← cthickening_zero]
- apply cthickening_eq_interᵢ_thickening' le_rfl _ hs₀ hs
-#align metric.closure_eq_Inter_thickening' Metric.closure_eq_interᵢ_thickening'
+ apply cthickening_eq_iInter_thickening' le_rfl _ hs₀ hs
+#align metric.closure_eq_Inter_thickening' Metric.closure_eq_iInter_thickening'
/-- The closure of a set equals the intersection of its (open) thickenings of positive radii. -/
-theorem closure_eq_interᵢ_thickening (E : Set α) :
+theorem closure_eq_iInter_thickening (E : Set α) :
closure E = ⋂ (δ : ℝ) (_h : 0 < δ), thickening δ E := by
rw [← cthickening_zero]
- exact cthickening_eq_interᵢ_thickening rfl.ge E
-#align metric.closure_eq_Inter_thickening Metric.closure_eq_interᵢ_thickening
+ exact cthickening_eq_iInter_thickening rfl.ge E
+#align metric.closure_eq_Inter_thickening Metric.closure_eq_iInter_thickening
/-- The frontier of the closed thickening of a set is contained in an `EMetric.infEdist` level
set. -/
@@ -1386,52 +1386,52 @@ theorem closedBall_subset_cthickening {α : Type _} [PseudoMetricSpace α] {x :
simpa using hx
#align metric.closed_ball_subset_cthickening Metric.closedBall_subset_cthickening
-theorem cthickening_subset_unionᵢ_closedBall_of_lt {α : Type _} [PseudoMetricSpace α] (E : Set α)
+theorem cthickening_subset_iUnion_closedBall_of_lt {α : Type _} [PseudoMetricSpace α] (E : Set α)
{δ δ' : ℝ} (hδ₀ : 0 < δ') (hδδ' : δ < δ') : cthickening δ E ⊆ ⋃ x ∈ E, closedBall x δ' := by
refine' (cthickening_subset_thickening' hδ₀ hδδ' E).trans fun x hx => _
obtain ⟨y, hy₁, hy₂⟩ := mem_thickening_iff.mp hx
- exact mem_unionᵢ₂.mpr ⟨y, hy₁, hy₂.le⟩
-#align metric.cthickening_subset_Union_closed_ball_of_lt Metric.cthickening_subset_unionᵢ_closedBall_of_lt
+ exact mem_iUnion₂.mpr ⟨y, hy₁, hy₂.le⟩
+#align metric.cthickening_subset_Union_closed_ball_of_lt Metric.cthickening_subset_iUnion_closedBall_of_lt
/-- The closed thickening of a compact set `E` is the union of the balls `Metric.closedBall x δ`
over `x ∈ E`.
-See also `Metric.cthickening_eq_bunionᵢ_closedBall`. -/
-theorem _root_.IsCompact.cthickening_eq_bunionᵢ_closedBall {α : Type _} [PseudoMetricSpace α]
+See also `Metric.cthickening_eq_biUnion_closedBall`. -/
+theorem _root_.IsCompact.cthickening_eq_biUnion_closedBall {α : Type _} [PseudoMetricSpace α]
{δ : ℝ} {E : Set α} (hE : IsCompact E) (hδ : 0 ≤ δ) :
cthickening δ E = ⋃ x ∈ E, closedBall x δ := by
rcases eq_empty_or_nonempty E with (rfl | hne)
- · simp only [cthickening_empty, bunionᵢ_empty]
+ · simp only [cthickening_empty, biUnion_empty]
refine Subset.antisymm (fun x hx ↦ ?_)
- (unionᵢ₂_subset fun x hx ↦ closedBall_subset_cthickening hx _)
+ (iUnion₂_subset fun x hx ↦ closedBall_subset_cthickening hx _)
obtain ⟨y, yE, hy⟩ : ∃ y ∈ E, infEdist x E = edist x y := hE.exists_infEdist_eq_edist hne _
have D1 : edist x y ≤ ENNReal.ofReal δ := (le_of_eq hy.symm).trans hx
have D2 : dist x y ≤ δ := by
rw [edist_dist] at D1
exact (ENNReal.ofReal_le_ofReal_iff hδ).1 D1
- exact mem_bunionᵢ yE D2
-#align is_compact.cthickening_eq_bUnion_closed_ball IsCompact.cthickening_eq_bunionᵢ_closedBall
+ exact mem_biUnion yE D2
+#align is_compact.cthickening_eq_bUnion_closed_ball IsCompact.cthickening_eq_biUnion_closedBall
-theorem cthickening_eq_bunionᵢ_closedBall {α : Type _} [PseudoMetricSpace α] [ProperSpace α]
+theorem cthickening_eq_biUnion_closedBall {α : Type _} [PseudoMetricSpace α] [ProperSpace α]
(E : Set α) (hδ : 0 ≤ δ) : cthickening δ E = ⋃ x ∈ closure E, closedBall x δ := by
rcases eq_empty_or_nonempty E with (rfl | hne)
- · simp only [cthickening_empty, bunionᵢ_empty, closure_empty]
+ · simp only [cthickening_empty, biUnion_empty, closure_empty]
rw [← cthickening_closure]
refine Subset.antisymm (fun x hx ↦ ?_)
- (unionᵢ₂_subset fun x hx ↦ closedBall_subset_cthickening hx _)
+ (iUnion₂_subset fun x hx ↦ closedBall_subset_cthickening hx _)
obtain ⟨y, yE, hy⟩ : ∃ y ∈ closure E, infDist x (closure E) = dist x y :=
isClosed_closure.exists_infDist_eq_dist (closure_nonempty_iff.mpr hne) x
replace hy : dist x y ≤ δ :=
(ENNReal.ofReal_le_ofReal_iff hδ).mp
(((congr_arg ENNReal.ofReal hy.symm).le.trans ENNReal.ofReal_toReal_le).trans hx)
- exact mem_bunionᵢ yE hy
-#align metric.cthickening_eq_bUnion_closed_ball Metric.cthickening_eq_bunionᵢ_closedBall
+ exact mem_biUnion yE hy
+#align metric.cthickening_eq_bUnion_closed_ball Metric.cthickening_eq_biUnion_closedBall
-nonrec theorem _root_.IsClosed.cthickening_eq_bunionᵢ_closedBall {α : Type _} [PseudoMetricSpace α]
+nonrec theorem _root_.IsClosed.cthickening_eq_biUnion_closedBall {α : Type _} [PseudoMetricSpace α]
[ProperSpace α] {E : Set α} (hE : IsClosed E) (hδ : 0 ≤ δ) :
cthickening δ E = ⋃ x ∈ E, closedBall x δ := by
- rw [cthickening_eq_bunionᵢ_closedBall E hδ, hE.closure_eq]
-#align is_closed.cthickening_eq_bUnion_closed_ball IsClosed.cthickening_eq_bunionᵢ_closedBall
+ rw [cthickening_eq_biUnion_closedBall E hδ, hE.closure_eq]
+#align is_closed.cthickening_eq_bUnion_closed_ball IsClosed.cthickening_eq_biUnion_closedBall
/-- For the equality, see `infEdist_cthickening`. -/
theorem infEdist_le_infEdist_cthickening_add :
@@ -462,6 +462,11 @@ def infDist (x : α) (s : Set α) : ℝ :=
ENNReal.toReal (infEdist x s)
#align metric.inf_dist Metric.infDist
+theorem infDist_eq_infᵢ : infDist x s = ⨅ y : s, dist x y := by
+ rw [infDist, infEdist, infᵢ_subtype', ENNReal.toReal_infᵢ]
+ · simp only [dist_edist]
+ · exact fun _ ↦ edist_ne_top _ _
+
/-- The minimal distance is always nonnegative -/
theorem infDist_nonneg : 0 ≤ infDist x s := toReal_nonneg
#align metric.inf_dist_nonneg Metric.infDist_nonneg
@@ -153,7 +153,8 @@ theorem infEdist_closure : infEdist x (closure s) = infEdist x s := by
theorem mem_closure_iff_infEdist_zero : x ∈ closure s ↔ infEdist x s = 0 :=
⟨fun h => by
rw [← infEdist_closure]
- exact infEdist_zero_of_mem h, fun h =>
+ exact infEdist_zero_of_mem h,
+ fun h =>
EMetric.mem_closure_iff.2 fun ε εpos => infEdist_lt_iff.mp <| by rwa [h]⟩
#align emetric.mem_closure_iff_inf_edist_zero EMetric.mem_closure_iff_infEdist_zero
@@ -351,21 +352,21 @@ theorem hausdorffEdist_triangle : hausdorffEdist s u ≤ hausdorffEdist s t + ha
rw [hausdorffEdist_def]
simp only [sup_le_iff, supᵢ_le_iff]
constructor
- show ∀ x ∈ s, infEdist x u ≤ hausdorffEdist s t + hausdorffEdist t u
- exact fun x xs =>
- calc
- infEdist x u ≤ infEdist x t + hausdorffEdist t u :=
- infEdist_le_infEdist_add_hausdorffEdist
- _ ≤ hausdorffEdist s t + hausdorffEdist t u :=
- add_le_add_right (infEdist_le_hausdorffEdist_of_mem xs) _
- show ∀ x ∈ u, infEdist x s ≤ hausdorffEdist s t + hausdorffEdist t u
- exact fun x xu =>
- calc
- infEdist x s ≤ infEdist x t + hausdorffEdist t s :=
- infEdist_le_infEdist_add_hausdorffEdist
- _ ≤ hausdorffEdist u t + hausdorffEdist t s :=
- add_le_add_right (infEdist_le_hausdorffEdist_of_mem xu) _
- _ = hausdorffEdist s t + hausdorffEdist t u := by simp [hausdorffEdist_comm, add_comm]
+ · show ∀ x ∈ s, infEdist x u ≤ hausdorffEdist s t + hausdorffEdist t u
+ exact fun x xs =>
+ calc
+ infEdist x u ≤ infEdist x t + hausdorffEdist t u :=
+ infEdist_le_infEdist_add_hausdorffEdist
+ _ ≤ hausdorffEdist s t + hausdorffEdist t u :=
+ add_le_add_right (infEdist_le_hausdorffEdist_of_mem xs) _
+ · show ∀ x ∈ u, infEdist x s ≤ hausdorffEdist s t + hausdorffEdist t u
+ exact fun x xu =>
+ calc
+ infEdist x s ≤ infEdist x t + hausdorffEdist t s :=
+ infEdist_le_infEdist_add_hausdorffEdist
+ _ ≤ hausdorffEdist u t + hausdorffEdist t s :=
+ add_le_add_right (infEdist_le_hausdorffEdist_of_mem xu) _
+ _ = hausdorffEdist s t + hausdorffEdist t u := by simp [hausdorffEdist_comm, add_comm]
#align emetric.Hausdorff_edist_triangle EMetric.hausdorffEdist_triangle
/-- Two sets are at zero Hausdorff edistance if and only if they have the same closure -/
@@ -425,7 +426,7 @@ theorem nonempty_of_hausdorffEdist_ne_top (hs : s.Nonempty) (fin : hausdorffEdis
#align emetric.nonempty_of_Hausdorff_edist_ne_top EMetric.nonempty_of_hausdorffEdist_ne_top
theorem empty_or_nonempty_of_hausdorffEdist_ne_top (fin : hausdorffEdist s t ≠ ⊤) :
- s = ∅ ∧ t = ∅ ∨ s.Nonempty ∧ t.Nonempty := by
+ (s = ∅ ∧ t = ∅) ∨ (s.Nonempty ∧ t.Nonempty) := by
cases' s.eq_empty_or_nonempty with hs hs
· cases' t.eq_empty_or_nonempty with ht ht
· exact Or.inl ⟨hs, ht⟩
@@ -440,7 +441,7 @@ end HausdorffEdist
end EMetric
/-! Now, we turn to the same notions in metric spaces. To avoid the difficulties related to
-`Inf` and `Sup` on `ℝ` (which is only conditionally complete), we use the notions in `ℝ≥0∞`
+`infₛ` and `supₛ` on `ℝ` (which is only conditionally complete), we use the notions in `ℝ≥0∞`
formulated in terms of the edistance, and coerce them to `ℝ`.
Then their properties follow readily from the corresponding properties in `ℝ≥0∞`,
modulo some tedious rewriting of inequalities from one to the other. -/
@@ -591,6 +591,14 @@ theorem _root_.IsClosed.not_mem_iff_infDist_pos (h : IsClosed s) (hs : s.Nonempt
simp [h.mem_iff_infDist_zero hs, infDist_nonneg.gt_iff_ne]
#align is_closed.not_mem_iff_inf_dist_pos IsClosed.not_mem_iff_infDist_pos
+-- porting note: new lemma
+theorem continuousAt_inv_infDist_pt (h : x ∉ closure s) :
+ ContinuousAt (fun x ↦ (infDist x s)⁻¹) x := by
+ rcases s.eq_empty_or_nonempty with (rfl | hs)
+ · simp only [infDist_empty, continuousAt_const]
+ · refine (continuous_infDist_pt s).continuousAt.inv₀ ?_
+ rwa [Ne.def, ← mem_closure_iff_infDist_zero hs]
+
/-- The infimum distance is invariant under isometries -/
theorem infDist_image (hΦ : Isometry Φ) : infDist (Φ x) (Φ '' t) = infDist x t := by
simp [infDist, infEdist_image hΦ]
@@ -971,11 +971,11 @@ theorem ball_subset_thickening {x : X} {E : Set X} (hx : x ∈ E) (δ : ℝ) :
/-- The (open) `δ`-thickening `Metric.thickening δ E` of a subset `E` in a metric space equals the
union of balls of radius `δ` centered at points of `E`. -/
-theorem thickening_eq_bUnion_ball {δ : ℝ} {E : Set X} : thickening δ E = ⋃ x ∈ E, ball x δ := by
+theorem thickening_eq_bunionᵢ_ball {δ : ℝ} {E : Set X} : thickening δ E = ⋃ x ∈ E, ball x δ := by
ext x
simp only [mem_unionᵢ₂, exists_prop]
exact mem_thickening_iff
-#align metric.thickening_eq_bUnion_ball Metric.thickening_eq_bUnion_ball
+#align metric.thickening_eq_bUnion_ball Metric.thickening_eq_bunionᵢ_ball
protected theorem Bounded.thickening {δ : ℝ} {E : Set X} (h : Bounded E) :
Bounded (thickening δ E) := by
@@ -1383,8 +1383,9 @@ theorem cthickening_subset_unionᵢ_closedBall_of_lt {α : Type _} [PseudoMetric
over `x ∈ E`.
See also `Metric.cthickening_eq_bunionᵢ_closedBall`. -/
-theorem _root_.IsCompact.cthickening_eq_bUnion_closedBall {α : Type _} [PseudoMetricSpace α] {δ : ℝ}
- {E : Set α} (hE : IsCompact E) (hδ : 0 ≤ δ) : cthickening δ E = ⋃ x ∈ E, closedBall x δ := by
+theorem _root_.IsCompact.cthickening_eq_bunionᵢ_closedBall {α : Type _} [PseudoMetricSpace α]
+ {δ : ℝ} {E : Set α} (hE : IsCompact E) (hδ : 0 ≤ δ) :
+ cthickening δ E = ⋃ x ∈ E, closedBall x δ := by
rcases eq_empty_or_nonempty E with (rfl | hne)
· simp only [cthickening_empty, bunionᵢ_empty]
refine Subset.antisymm (fun x hx ↦ ?_)
@@ -1395,7 +1396,7 @@ theorem _root_.IsCompact.cthickening_eq_bUnion_closedBall {α : Type _} [PseudoM
rw [edist_dist] at D1
exact (ENNReal.ofReal_le_ofReal_iff hδ).1 D1
exact mem_bunionᵢ yE D2
-#align is_compact.cthickening_eq_bUnion_closed_ball IsCompact.cthickening_eq_bUnion_closedBall
+#align is_compact.cthickening_eq_bUnion_closed_ball IsCompact.cthickening_eq_bunionᵢ_closedBall
theorem cthickening_eq_bunionᵢ_closedBall {α : Type _} [PseudoMetricSpace α] [ProperSpace α]
(E : Set α) (hδ : 0 ≤ δ) : cthickening δ E = ⋃ x ∈ closure E, closedBall x δ := by
The unported dependencies are
algebra.order.module
init.core
algebra.order.monoid.cancel.defs
algebra.abs
algebra.group_power.lemmas
init.data.list.basic
algebra.order.monoid.cancel.basic
init.data.list.default
topology.subset_properties
init.logic
The following 1 dependencies have changed in mathlib3 since they were ported, which may complicate porting this file