Theorem: Metric.hausdorffDist_le_of_infDist
File: Mathlib/Topology/MetricSpace/HausdorffDistance.lean

tactic: by_cases h1 : hausdorffEdist s t = ⊤
state_before: ι : Sort u_1
α : Type u
β : Type v
inst✝¹ : PseudoMetricSpace α
inst✝ : PseudoMetricSpace β
s t u : Set α
x y : α
Φ : α → β
r : ℝ
hr : 0 ≤ r
H1 : ∀ x ∈ s, infDist x t ≤ r
H2 : ∀ x ∈ t, infDist x s ≤ r
⊢ hausdorffDist s t ≤ r
state_after: case pos
ι : Sort u_1
α : Type u
β : Type v
inst✝¹ : PseudoMetricSpace α
inst✝ : PseudoMetricSpace β
s t u : Set α
x y : α
Φ : α → β
r : ℝ
hr : 0 ≤ r
H1 : ∀ x ∈ s, infDist x t ≤ r
H2 : ∀ x ∈ t, infDist x s ≤ r
h1 : hausdorffEdist s t = ⊤
⊢ hausdorffDist s t ≤ r

case neg
ι : Sort u_1
α : Type u
β : Type v
inst✝¹ : PseudoMetricSpace α
inst✝ : PseudoMetricSpace β
s t u : Set α
x y : α
Φ : α → β
r : ℝ
hr : 0 ≤ r
H1 : ∀ x ∈ s, infDist x t ≤ r
H2 : ∀ x ∈ t, infDist x s ≤ r
h1 : ¬hausdorffEdist s t = ⊤
⊢ hausdorffDist s t ≤ r

tactic: rcases s.eq_empty_or_nonempty with hs | hs
state_before: case neg
ι : Sort u_1
α : Type u
β : Type v
inst✝¹ : PseudoMetricSpace α
inst✝ : PseudoMetricSpace β
s t u : Set α
x y : α
Φ : α → β
r : ℝ
hr : 0 ≤ r
H1 : ∀ x ∈ s, infDist x t ≤ r
H2 : ∀ x ∈ t, infDist x s ≤ r
h1 : ¬hausdorffEdist s t = ⊤
⊢ hausdorffDist s t ≤ r
state_after: case neg.inl
ι : Sort u_1
α : Type u
β : Type v
inst✝¹ : PseudoMetricSpace α
inst✝ : PseudoMetricSpace β
s t u : Set α
x y : α
Φ : α → β
r : ℝ
hr : 0 ≤ r
H1 : ∀ x ∈ s, infDist x t ≤ r
H2 : ∀ x ∈ t, infDist x s ≤ r
h1 : ¬hausdorffEdist s t = ⊤
hs : s = ∅
⊢ hausdorffDist s t ≤ r

case neg.inr
ι : Sort u_1
α : Type u
β : Type v
inst✝¹ : PseudoMetricSpace α
inst✝ : PseudoMetricSpace β
s t u : Set α
x y : α
Φ : α → β
r : ℝ
hr : 0 ≤ r
H1 : ∀ x ∈ s, infDist x t ≤ r
H2 : ∀ x ∈ t, infDist x s ≤ r
h1 : ¬hausdorffEdist s t = ⊤
hs : s.Nonempty
⊢ hausdorffDist s t ≤ r

tactic: rcases t.eq_empty_or_nonempty with ht | ht
state_before: case neg.inr
ι : Sort u_1
α : Type u
β : Type v
inst✝¹ : PseudoMetricSpace α
inst✝ : PseudoMetricSpace β
s t u : Set α
x y : α
Φ : α → β
r : ℝ
hr : 0 ≤ r
H1 : ∀ x ∈ s, infDist x t ≤ r
H2 : ∀ x ∈ t, infDist x s ≤ r
h1 : ¬hausdorffEdist s t = ⊤
hs : s.Nonempty
⊢ hausdorffDist s t ≤ r
state_after: case neg.inr.inl
ι : Sort u_1
α : Type u
β : Type v
inst✝¹ : PseudoMetricSpace α
inst✝ : PseudoMetricSpace β
s t u : Set α
x y : α
Φ : α → β
r : ℝ
hr : 0 ≤ r
H1 : ∀ x ∈ s, infDist x t ≤ r
H2 : ∀ x ∈ t, infDist x s ≤ r
h1 : ¬hausdorffEdist s t = ⊤
hs : s.Nonempty
ht : t = ∅
⊢ hausdorffDist s t ≤ r

case neg.inr.inr
ι : Sort u_1
α : Type u
β : Type v
inst✝¹ : PseudoMetricSpace α
inst✝ : PseudoMetricSpace β
s t u : Set α
x y : α
Φ : α → β
r : ℝ
hr : 0 ≤ r
H1 : ∀ x ∈ s, infDist x t ≤ r
H2 : ∀ x ∈ t, infDist x s ≤ r
h1 : ¬hausdorffEdist s t = ⊤
hs : s.Nonempty
ht : t.Nonempty
⊢ hausdorffDist s t ≤ r

tactic: rwa [hausdorffDist, ← ENNReal.toReal_ofReal hr,
  ENNReal.toReal_le_toReal h1 ENNReal.ofReal_ne_top]
state_before: case neg.inr.inr
ι : Sort u_1
α : Type u
β : Type v
inst✝¹ : PseudoMetricSpace α
inst✝ : PseudoMetricSpace β
s t u : Set α
x y : α
Φ : α → β
r : ℝ
hr : 0 ≤ r
H1 : ∀ x ∈ s, infDist x t ≤ r
H2 : ∀ x ∈ t, infDist x s ≤ r
h1 : ¬hausdorffEdist s t = ⊤
hs : s.Nonempty
ht : t.Nonempty
this : hausdorffEdist s t ≤ ENNReal.ofReal r
⊢ hausdorffDist s t ≤ r
state_after: no goals

tactic: rwa [hausdorffDist, h1, ENNReal.top_toReal]
state_before: case pos
ι : Sort u_1
α : Type u
β : Type v
inst✝¹ : PseudoMetricSpace α
inst✝ : PseudoMetricSpace β
s t u : Set α
x y : α
Φ : α → β
r : ℝ
hr : 0 ≤ r
H1 : ∀ x ∈ s, infDist x t ≤ r
H2 : ∀ x ∈ t, infDist x s ≤ r
h1 : hausdorffEdist s t = ⊤
⊢ hausdorffDist s t ≤ r
state_after: no goals

tactic: rwa [hs, hausdorffDist_empty']
state_before: case neg.inl
ι : Sort u_1
α : Type u
β : Type v
inst✝¹ : PseudoMetricSpace α
inst✝ : PseudoMetricSpace β
s t u : Set α
x y : α
Φ : α → β
r : ℝ
hr : 0 ≤ r
H1 : ∀ x ∈ s, infDist x t ≤ r
H2 : ∀ x ∈ t, infDist x s ≤ r
h1 : ¬hausdorffEdist s t = ⊤
hs : s = ∅
⊢ hausdorffDist s t ≤ r
state_after: no goals

tactic: rwa [ht, hausdorffDist_empty]
state_before: case neg.inr.inl
ι : Sort u_1
α : Type u
β : Type v
inst✝¹ : PseudoMetricSpace α
inst✝ : PseudoMetricSpace β
s t u : Set α
x y : α
Φ : α → β
r : ℝ
hr : 0 ≤ r
H1 : ∀ x ∈ s, infDist x t ≤ r
H2 : ∀ x ∈ t, infDist x s ≤ r
h1 : ¬hausdorffEdist s t = ⊤
hs : s.Nonempty
ht : t = ∅
⊢ hausdorffDist s t ≤ r
state_after: no goals

tactic: apply hausdorffEdist_le_of_infEdist _ _
state_before: ι : Sort u_1
α : Type u
β : Type v
inst✝¹ : PseudoMetricSpace α
inst✝ : PseudoMetricSpace β
s t u : Set α
x y : α
Φ : α → β
r : ℝ
hr : 0 ≤ r
H1 : ∀ x ∈ s, infDist x t ≤ r
H2 : ∀ x ∈ t, infDist x s ≤ r
h1 : ¬hausdorffEdist s t = ⊤
hs : s.Nonempty
ht : t.Nonempty
⊢ hausdorffEdist s t ≤ ENNReal.ofReal r
state_after: ι : Sort u_1
α : Type u
β : Type v
inst✝¹ : PseudoMetricSpace α
inst✝ : PseudoMetricSpace β
s t u : Set α
x y : α
Φ : α → β
r : ℝ
hr : 0 ≤ r
H1 : ∀ x ∈ s, infDist x t ≤ r
H2 : ∀ x ∈ t, infDist x s ≤ r
h1 : ¬hausdorffEdist s t = ⊤
hs : s.Nonempty
ht : t.Nonempty
⊢ ∀ x ∈ s, infEdist x t ≤ ENNReal.ofReal r

ι : Sort u_1
α : Type u
β : Type v
inst✝¹ : PseudoMetricSpace α
inst✝ : PseudoMetricSpace β
s t u : Set α
x y : α
Φ : α → β
r : ℝ
hr : 0 ≤ r
H1 : ∀ x ∈ s, infDist x t ≤ r
H2 : ∀ x ∈ t, infDist x s ≤ r
h1 : ¬hausdorffEdist s t = ⊤
hs : s.Nonempty
ht : t.Nonempty
⊢ ∀ x ∈ t, infEdist x s ≤ ENNReal.ofReal r

tactic: intro x hx
state_before: ι : Sort u_1
α : Type u
β : Type v
inst✝¹ : PseudoMetricSpace α
inst✝ : PseudoMetricSpace β
s t u : Set α
x y : α
Φ : α → β
r : ℝ
hr : 0 ≤ r
H1 : ∀ x ∈ s, infDist x t ≤ r
H2 : ∀ x ∈ t, infDist x s ≤ r
h1 : ¬hausdorffEdist s t = ⊤
hs : s.Nonempty
ht : t.Nonempty
⊢ ∀ x ∈ s, infEdist x t ≤ ENNReal.ofReal r
state_after: ι : Sort u_1
α : Type u
β : Type v
inst✝¹ : PseudoMetricSpace α
inst✝ : PseudoMetricSpace β
s t u : Set α
x✝ y : α
Φ : α → β
r : ℝ
hr : 0 ≤ r
H1 : ∀ x ∈ s, infDist x t ≤ r
H2 : ∀ x ∈ t, infDist x s ≤ r
h1 : ¬hausdorffEdist s t = ⊤
hs : s.Nonempty
ht : t.Nonempty
x : α
hx : x ∈ s
⊢ infEdist x t ≤ ENNReal.ofReal r

tactic: have I := H1 x hx
state_before: ι : Sort u_1
α : Type u
β : Type v
inst✝¹ : PseudoMetricSpace α
inst✝ : PseudoMetricSpace β
s t u : Set α
x✝ y : α
Φ : α → β
r : ℝ
hr : 0 ≤ r
H1 : ∀ x ∈ s, infDist x t ≤ r
H2 : ∀ x ∈ t, infDist x s ≤ r
h1 : ¬hausdorffEdist s t = ⊤
hs : s.Nonempty
ht : t.Nonempty
x : α
hx : x ∈ s
⊢ infEdist x t ≤ ENNReal.ofReal r
state_after: ι : Sort u_1
α : Type u
β : Type v
inst✝¹ : PseudoMetricSpace α
inst✝ : PseudoMetricSpace β
s t u : Set α
x✝ y : α
Φ : α → β
r : ℝ
hr : 0 ≤ r
H1 : ∀ x ∈ s, infDist x t ≤ r
H2 : ∀ x ∈ t, infDist x s ≤ r
h1 : ¬hausdorffEdist s t = ⊤
hs : s.Nonempty
ht : t.Nonempty
x : α
hx : x ∈ s
I : infDist x t ≤ r
⊢ infEdist x t ≤ ENNReal.ofReal r

tactic: rwa [infDist, ← ENNReal.toReal_ofReal hr,
  ENNReal.toReal_le_toReal (infEdist_ne_top ht) ENNReal.ofReal_ne_top] at I
state_before: ι : Sort u_1
α : Type u
β : Type v
inst✝¹ : PseudoMetricSpace α
inst✝ : PseudoMetricSpace β
s t u : Set α
x✝ y : α
Φ : α → β
r : ℝ
hr : 0 ≤ r
H1 : ∀ x ∈ s, infDist x t ≤ r
H2 : ∀ x ∈ t, infDist x s ≤ r
h1 : ¬hausdorffEdist s t = ⊤
hs : s.Nonempty
ht : t.Nonempty
x : α
hx : x ∈ s
I : infDist x t ≤ r
⊢ infEdist x t ≤ ENNReal.ofReal r
state_after: no goals

tactic: intro x hx
state_before: ι : Sort u_1
α : Type u
β : Type v
inst✝¹ : PseudoMetricSpace α
inst✝ : PseudoMetricSpace β
s t u : Set α
x y : α
Φ : α → β
r : ℝ
hr : 0 ≤ r
H1 : ∀ x ∈ s, infDist x t ≤ r
H2 : ∀ x ∈ t, infDist x s ≤ r
h1 : ¬hausdorffEdist s t = ⊤
hs : s.Nonempty
ht : t.Nonempty
⊢ ∀ x ∈ t, infEdist x s ≤ ENNReal.ofReal r
state_after: ι : Sort u_1
α : Type u
β : Type v
inst✝¹ : PseudoMetricSpace α
inst✝ : PseudoMetricSpace β
s t u : Set α
x✝ y : α
Φ : α → β
r : ℝ
hr : 0 ≤ r
H1 : ∀ x ∈ s, infDist x t ≤ r
H2 : ∀ x ∈ t, infDist x s ≤ r
h1 : ¬hausdorffEdist s t = ⊤
hs : s.Nonempty
ht : t.Nonempty
x : α
hx : x ∈ t
⊢ infEdist x s ≤ ENNReal.ofReal r

tactic: have I := H2 x hx
state_before: ι : Sort u_1
α : Type u
β : Type v
inst✝¹ : PseudoMetricSpace α
inst✝ : PseudoMetricSpace β
s t u : Set α
x✝ y : α
Φ : α → β
r : ℝ
hr : 0 ≤ r
H1 : ∀ x ∈ s, infDist x t ≤ r
H2 : ∀ x ∈ t, infDist x s ≤ r
h1 : ¬hausdorffEdist s t = ⊤
hs : s.Nonempty
ht : t.Nonempty
x : α
hx : x ∈ t
⊢ infEdist x s ≤ ENNReal.ofReal r
state_after: ι : Sort u_1
α : Type u
β : Type v
inst✝¹ : PseudoMetricSpace α
inst✝ : PseudoMetricSpace β
s t u : Set α
x✝ y : α
Φ : α → β
r : ℝ
hr : 0 ≤ r
H1 : ∀ x ∈ s, infDist x t ≤ r
H2 : ∀ x ∈ t, infDist x s ≤ r
h1 : ¬hausdorffEdist s t = ⊤
hs : s.Nonempty
ht : t.Nonempty
x : α
hx : x ∈ t
I : infDist x s ≤ r
⊢ infEdist x s ≤ ENNReal.ofReal r

tactic: rwa [infDist, ← ENNReal.toReal_ofReal hr,
  ENNReal.toReal_le_toReal (infEdist_ne_top hs) ENNReal.ofReal_ne_top] at I
state_before: ι : Sort u_1
α : Type u
β : Type v
inst✝¹ : PseudoMetricSpace α
inst✝ : PseudoMetricSpace β
s t u : Set α
x✝ y : α
Φ : α → β
r : ℝ
hr : 0 ≤ r
H1 : ∀ x ∈ s, infDist x t ≤ r
H2 : ∀ x ∈ t, infDist x s ≤ r
h1 : ¬hausdorffEdist s t = ⊤
hs : s.Nonempty
ht : t.Nonempty
x : α
hx : x ∈ t
I : infDist x s ≤ r
⊢ infEdist x s ≤ ENNReal.ofReal r
state_after: no goals