Theorem: EMetric.infEdist_le_infEdist_add_hausdorffEdist
File: Mathlib/Topology/MetricSpace/HausdorffDistance.lean

tactic: have ε0 : (ε / 2 : ℝ≥0∞) ≠ 0 := by simpa [pos_iff_ne_zero] using εpos
state_before: ι : Sort ?u.38558
α : Type u
β : Type v
inst✝¹ : PseudoEMetricSpace α
inst✝ : PseudoEMetricSpace β
x y : α
s t u : Set α
Φ : α → β
ε : ℝ≥0
εpos : 0 < ε
h : infEdist x s + hausdorffEdist s t < ⊤
⊢ infEdist x t ≤ infEdist x s + hausdorffEdist s t + ↑ε

tactic: have : infEdist x s < infEdist x s + ε / 2 :=
  ENNReal.lt_add_right (ENNReal.add_lt_top.1 h).1.ne ε0
state_before: ι : Sort ?u.38558
α : Type u
β : Type v
inst✝¹ : PseudoEMetricSpace α
inst✝ : PseudoEMetricSpace β
x y : α
s t u : Set α
Φ : α → β
ε : ℝ≥0
εpos : 0 < ε
h : infEdist x s + hausdorffEdist s t < ⊤
ε0 : ↑ε / 2 ≠ 0
⊢ infEdist x t ≤ infEdist x s + hausdorffEdist s t + ↑ε

tactic: rcases infEdist_lt_iff.mp this with ⟨y, ys, dxy⟩
state_before: ι : Sort ?u.38558
α : Type u
β : Type v
inst✝¹ : PseudoEMetricSpace α
inst✝ : PseudoEMetricSpace β
x y : α
s t u : Set α
Φ : α → β
ε : ℝ≥0
εpos : 0 < ε
h : infEdist x s + hausdorffEdist s t < ⊤
ε0 : ↑ε / 2 ≠ 0
this : infEdist x s < infEdist x s + ↑ε / 2
⊢ infEdist x t ≤ infEdist x s + hausdorffEdist s t + ↑ε

tactic: have : hausdorffEdist s t < hausdorffEdist s t + ε / 2 :=
  ENNReal.lt_add_right (ENNReal.add_lt_top.1 h).2.ne ε0
state_before: case intro.intro
ι : Sort ?u.38558
α : Type u
β : Type v
inst✝¹ : PseudoEMetricSpace α
inst✝ : PseudoEMetricSpace β
x y✝ : α
s t u : Set α
Φ : α → β
ε : ℝ≥0
εpos : 0 < ε
h : infEdist x s + hausdorffEdist s t < ⊤
ε0 : ↑ε / 2 ≠ 0
this : infEdist x s < infEdist x s + ↑ε / 2
y : α
ys : y ∈ s
dxy : edist x y < infEdist x s + ↑ε / 2
⊢ infEdist x t ≤ infEdist x s + hausdorffEdist s t + ↑ε

tactic: rcases exists_edist_lt_of_hausdorffEdist_lt ys this with ⟨z, zt, dyz⟩
state_before: case intro.intro
ι : Sort ?u.38558
α : Type u
β : Type v
inst✝¹ : PseudoEMetricSpace α
inst✝ : PseudoEMetricSpace β
x y✝ : α
s t u : Set α
Φ : α → β
ε : ℝ≥0
εpos : 0 < ε
h : infEdist x s + hausdorffEdist s t < ⊤
ε0 : ↑ε / 2 ≠ 0
this✝ : infEdist x s < infEdist x s + ↑ε / 2
y : α
ys : y ∈ s
dxy : edist x y < infEdist x s + ↑ε / 2
this : hausdorffEdist s t < hausdorffEdist s t + ↑ε / 2
⊢ infEdist x t ≤ infEdist x s + hausdorffEdist s t + ↑ε

tactic: 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)
  _ = infEdist x s + hausdorffEdist s t + ε := by
    simp [ENNReal.add_halves, add_comm, add_left_comm]
state_before: case intro.intro.intro.intro
ι : Sort ?u.38558
α : Type u
β : Type v
inst✝¹ : PseudoEMetricSpace α
inst✝ : PseudoEMetricSpace β
x y✝ : α
s t u : Set α
Φ : α → β
ε : ℝ≥0
εpos : 0 < ε
h : infEdist x s + hausdorffEdist s t < ⊤
ε0 : ↑ε / 2 ≠ 0
this✝ : infEdist x s < infEdist x s + ↑ε / 2
y : α
ys : y ∈ s
dxy : edist x y < infEdist x s + ↑ε / 2
this : hausdorffEdist s t < hausdorffEdist s t + ↑ε / 2
z : α
zt : z ∈ t
dyz : edist y z < hausdorffEdist s t + ↑ε / 2
⊢ infEdist x t ≤ infEdist x s + hausdorffEdist s t + ↑ε

tactic: simpa [pos_iff_ne_zero] using εpos
state_before: ι : Sort ?u.38558
α : Type u
β : Type v
inst✝¹ : PseudoEMetricSpace α
inst✝ : PseudoEMetricSpace β
x y : α
s t u : Set α
Φ : α → β
ε : ℝ≥0
εpos : 0 < ε
h : infEdist x s + hausdorffEdist s t < ⊤
⊢ ↑ε / 2 ≠ 0

tactic: simp [ENNReal.add_halves, add_comm, add_left_comm]
state_before: ι : Sort ?u.38558
α : Type u
β : Type v
inst✝¹ : PseudoEMetricSpace α
inst✝ : PseudoEMetricSpace β
x y✝ : α
s t u : Set α
Φ : α → β
ε : ℝ≥0
εpos : 0 < ε
h : infEdist x s + hausdorffEdist s t < ⊤
ε0 : ↑ε / 2 ≠ 0
this✝ : infEdist x s < infEdist x s + ↑ε / 2
y : α
ys : y ∈ s
dxy : edist x y < infEdist x s + ↑ε / 2
this : hausdorffEdist s t < hausdorffEdist s t + ↑ε / 2
z : α
zt : z ∈ t
dyz : edist y z < hausdorffEdist s t + ↑ε / 2
⊢ infEdist x s + ↑ε / 2 + (hausdorffEdist s t + ↑ε / 2) = infEdist x s + hausdorffEdist s t + ↑ε