-- Mathlib/Topology/MetricSpace/Thickening.lean
theorem ediam_cthickening_le (ε : ℝ≥0) :
    EMetric.diam (cthickening ε s) ≤ EMetric.diam s + 2 * ε

Proof state:
α : Type u
inst✝ : PseudoEMetricSpace α
s : Set α
ε : ℝ≥0
x y : α
hy : infEdist y s ≤ ↑ε
δ : ℝ≥0
hδ : 0 < δ
x✝ : EMetric.diam s + 2 * ↑ε < ⊤
hε : ↑ε < ↑ε + ↑δ
hx : infEdist x s < ↑ε + ↑δ
⊢ edist x y ≤ EMetric.diam s + 2 * ↑ε + ↑δ

Tactic:
obtain ⟨x', hx', hxx'⟩ := infEdist_lt_iff.mp hx

Result:
case intro.intro
α : Type u
inst✝ : PseudoEMetricSpace α
s : Set α
ε : ℝ≥0
x y : α
hy : infEdist y s ≤ ↑ε
δ : ℝ≥0
hδ : 0 < δ
x✝ : EMetric.diam s + 2 * ↑ε < ⊤
hε : ↑ε < ↑ε + ↑δ
hx : infEdist x s < ↑ε + ↑δ
x' : α
hx' : x' ∈ s
hxx' : edist x x' < ↑ε + ↑δ
⊢ edist x y ≤ EMetric.diam s + 2 * ↑ε + ↑δ

Proof state:
α : Type u
inst✝ : PseudoEMetricSpace α
s : Set α
ε : ℝ≥0
x : α
hx : infEdist x s ≤ ↑ε
y : α
hy : infEdist y s ≤ ↑ε
δ : ℝ≥0
hδ : 0 < δ
x✝ : EMetric.diam s + 2 * ↑ε < ⊤
hε : ↑ε < ↑ε + ↑δ
⊢ edist x y ≤ EMetric.diam s + 2 * ↑ε + ↑δ

Tactic:
replace hx := hx.trans_lt hε

Result:
α : Type u
inst✝ : PseudoEMetricSpace α
s : Set α
ε : ℝ≥0
x y : α
hy : infEdist y s ≤ ↑ε
δ : ℝ≥0
hδ : 0 < δ
x✝ : EMetric.diam s + 2 * ↑ε < ⊤
hε : ↑ε < ↑ε + ↑δ
hx : infEdist x s < ↑ε + ↑δ
⊢ edist x y ≤ EMetric.diam s + 2 * ↑ε + ↑δ

Proof state:
α : Type u
inst✝ : PseudoEMetricSpace α
s : Set α
ε : ℝ≥0
⊢ EMetric.diam (cthickening (↑ε) s) ≤ EMetric.diam s + 2 * ↑ε

Tactic:
refine diam_le fun x hx y hy => ENNReal.le_of_forall_pos_le_add fun δ hδ _ => ?_

Result:
α : Type u
inst✝ : PseudoEMetricSpace α
s : Set α
ε : ℝ≥0
x : α
hx : x ∈ cthickening (↑ε) s
y : α
hy : y ∈ cthickening (↑ε) s
δ : ℝ≥0
hδ : 0 < δ
x✝ : EMetric.diam s + 2 * ↑ε < ⊤
⊢ edist x y ≤ EMetric.diam s + 2 * ↑ε + ↑δ

Proof state:
α : Type u
inst✝ : PseudoEMetricSpace α
s : Set α
ε : ℝ≥0
x : α
hx : infEdist x s ≤ ↑ε
y : α
hy : infEdist y s ≤ ↑ε
δ : ℝ≥0
hδ : 0 < δ
x✝ : EMetric.diam s + 2 * ↑ε < ⊤
⊢ edist x y ≤ EMetric.diam s + 2 * ↑ε + ↑δ

Tactic:
have hε : (ε : ℝ≥0∞) < ε + δ := ENNReal.coe_lt_coe.2 (lt_add_of_pos_right _ hδ)

Result:
α : Type u
inst✝ : PseudoEMetricSpace α
s : Set α
ε : ℝ≥0
x : α
hx : infEdist x s ≤ ↑ε
y : α
hy : infEdist y s ≤ ↑ε
δ : ℝ≥0
hδ : 0 < δ
x✝ : EMetric.diam s + 2 * ↑ε < ⊤
hε : ↑ε < ↑ε + ↑δ
⊢ edist x y ≤ EMetric.diam s + 2 * ↑ε + ↑δ

Proof state:
case intro.intro
α : Type u
inst✝ : PseudoEMetricSpace α
s : Set α
ε : ℝ≥0
x y : α
hy : infEdist y s ≤ ↑ε
δ : ℝ≥0
hδ : 0 < δ
x✝ : EMetric.diam s + 2 * ↑ε < ⊤
hε : ↑ε < ↑ε + ↑δ
hx : infEdist x s < ↑ε + ↑δ
x' : α
hx' : x' ∈ s
hxx' : edist x x' < ↑ε + ↑δ
⊢ edist x y ≤ EMetric.diam s + 2 * ↑ε + ↑δ

Tactic:
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

Result:
no goals

Proof state:
α : Type u
inst✝ : PseudoEMetricSpace α
s : Set α
ε : ℝ≥0
x : α
hx : x ∈ cthickening (↑ε) s
y : α
hy : y ∈ cthickening (↑ε) s
δ : ℝ≥0
hδ : 0 < δ
x✝ : EMetric.diam s + 2 * ↑ε < ⊤
⊢ edist x y ≤ EMetric.diam s + 2 * ↑ε + ↑δ

Tactic:
rw [mem_cthickening_iff, ENNReal.ofReal_coe_nnreal] at hx hy

Result:
α : Type u
inst✝ : PseudoEMetricSpace α
s : Set α
ε : ℝ≥0
x : α
hx : infEdist x s ≤ ↑ε
y : α
hy : infEdist y s ≤ ↑ε
δ : ℝ≥0
hδ : 0 < δ
x✝ : EMetric.diam s + 2 * ↑ε < ⊤
⊢ edist x y ≤ EMetric.diam s + 2 * ↑ε + ↑δ

Proof state:
α : Type u
inst✝ : PseudoEMetricSpace α
s : Set α
ε : ℝ≥0
x y : α
hy : infEdist y s ≤ ↑ε
δ : ℝ≥0
hδ : 0 < δ
x✝ : EMetric.diam s + 2 * ↑ε < ⊤
hε : ↑ε < ↑ε + ↑δ
hx : infEdist x s < ↑ε + ↑δ
x' : α
hx' : x' ∈ s
hxx' : edist x x' < ↑ε + ↑δ
⊢ ↑ε + ↑δ + (↑ε + EMetric.diam s) = EMetric.diam s + (↑ε + ↑ε) + ↑δ

Tactic:
ac_rfl

Result:
no goals

Proof state:
α : Type u
inst✝ : PseudoEMetricSpace α
s : Set α
ε : ℝ≥0
x y : α
hy : infEdist y s ≤ ↑ε
δ : ℝ≥0
hδ : 0 < δ
x✝ : EMetric.diam s + 2 * ↑ε < ⊤
hε : ↑ε < ↑ε + ↑δ
hx : infEdist x s < ↑ε + ↑δ
x' : α
hx' : x' ∈ s
hxx' : edist x x' < ↑ε + ↑δ
⊢ ↑ε + ↑δ + (↑ε + EMetric.diam s) = EMetric.diam s + 2 * ↑ε + ↑δ

Tactic:
rw [two_mul]

Result:
α : Type u
inst✝ : PseudoEMetricSpace α
s : Set α
ε : ℝ≥0
x y : α
hy : infEdist y s ≤ ↑ε
δ : ℝ≥0
hδ : 0 < δ
x✝ : EMetric.diam s + 2 * ↑ε < ⊤
hε : ↑ε < ↑ε + ↑δ
hx : infEdist x s < ↑ε + ↑δ
x' : α
hx' : x' ∈ s
hxx' : edist x x' < ↑ε + ↑δ
⊢ ↑ε + ↑δ + (↑ε + EMetric.diam s) = EMetric.diam s + (↑ε + ↑ε) + ↑δ