Theorem: MeasureTheory.OuterMeasure.mkMetric'_isMetric
File: Mathlib/MeasureTheory/Measure/Hausdorff.lean

Proof steps:
state_before: ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m : Set X → ℝ≥0∞
⊢ (mkMetric' m).IsMetric
state_after: case intro.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m : Set X → ℝ≥0∞
s t : Set X
r : ℝ≥0∞
r0 : r ≠ 0
hr : ∀ x ∈ s, ∀ y ∈ t, r ≤ edist x y
⊢ (mkMetric' m) (s ∪ t) = (mkMetric' m) s + (mkMetric' m) t
tactic: rintro s t ⟨r, r0, hr⟩
state_before: case intro.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m : Set X → ℝ≥0∞
s t : Set X
r : ℝ≥0∞
r0 : r ≠ 0
hr : ∀ x ∈ s, ∀ y ∈ t, r ≤ edist x y
⊢ (mkMetric' m) (s ∪ t) = (mkMetric' m) s + (mkMetric' m) t
state_after: case intro.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m : Set X → ℝ≥0∞
s t : Set X
r : ℝ≥0∞
r0 : r ≠ 0
hr : ∀ x ∈ s, ∀ y ∈ t, r ≤ edist x y
⊢ (fun r => (mkMetric'.pre m r) (s ∪ t)) =ᶠ[𝓝[>] 0] fun x => (mkMetric'.pre m x) s + (mkMetric'.pre m x) t
tactic: refine tendsto_nhds_unique_of_eventuallyEq
    (mkMetric'.tendsto_pre _ _) ((mkMetric'.tendsto_pre _ _).add (mkMetric'.tendsto_pre _ _)) ?_
state_before: case intro.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m : Set X → ℝ≥0∞
s t : Set X
r : ℝ≥0∞
r0 : r ≠ 0
hr : ∀ x ∈ s, ∀ y ∈ t, r ≤ edist x y
⊢ (fun r => (mkMetric'.pre m r) (s ∪ t)) =ᶠ[𝓝[>] 0] fun x => (mkMetric'.pre m x) s + (mkMetric'.pre m x) t
state_after: case intro.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m : Set X → ℝ≥0∞
s t : Set X
r : ℝ≥0∞
r0 : 0 < r
hr : ∀ x ∈ s, ∀ y ∈ t, r ≤ edist x y
⊢ (fun r => (mkMetric'.pre m r) (s ∪ t)) =ᶠ[𝓝[>] 0] fun x => (mkMetric'.pre m x) s + (mkMetric'.pre m x) t
tactic: rw [← pos_iff_ne_zero] at r0
state_before: case intro.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m : Set X → ℝ≥0∞
s t : Set X
r : ℝ≥0∞
r0 : 0 < r
hr : ∀ x ∈ s, ∀ y ∈ t, r ≤ edist x y
⊢ (fun r => (mkMetric'.pre m r) (s ∪ t)) =ᶠ[𝓝[>] 0] fun x => (mkMetric'.pre m x) s + (mkMetric'.pre m x) t
state_after: case h
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m : Set X → ℝ≥0∞
s t : Set X
r : ℝ≥0∞
r0 : 0 < r
hr : ∀ x ∈ s, ∀ y ∈ t, r ≤ edist x y
⊢ ∀ a ∈ Ioo 0 r, (mkMetric'.pre m a) (s ∪ t) = (mkMetric'.pre m a) s + (mkMetric'.pre m a) t
tactic: filter_upwards [Ioo_mem_nhdsWithin_Ioi ⟨le_rfl, r0⟩]
state_before: case h
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m : Set X → ℝ≥0∞
s t : Set X
r : ℝ≥0∞
r0 : 0 < r
hr : ∀ x ∈ s, ∀ y ∈ t, r ≤ edist x y
⊢ ∀ a ∈ Ioo 0 r, (mkMetric'.pre m a) (s ∪ t) = (mkMetric'.pre m a) s + (mkMetric'.pre m a) t
state_after: case h.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m : Set X → ℝ≥0∞
s t : Set X
r : ℝ≥0∞
r0 : 0 < r
hr : ∀ x ∈ s, ∀ y ∈ t, r ≤ edist x y
ε : ℝ≥0∞
left✝ : 0 < ε
εr : ε < r
⊢ (mkMetric'.pre m ε) (s ∪ t) = (mkMetric'.pre m ε) s + (mkMetric'.pre m ε) t
tactic: rintro ε ⟨_, εr⟩
state_before: case h.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m : Set X → ℝ≥0∞
s t : Set X
r : ℝ≥0∞
r0 : 0 < r
hr : ∀ x ∈ s, ∀ y ∈ t, r ≤ edist x y
ε : ℝ≥0∞
left✝ : 0 < ε
εr : ε < r
⊢ (mkMetric'.pre m ε) (s ∪ t) = (mkMetric'.pre m ε) s + (mkMetric'.pre m ε) t
state_after: case h.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m : Set X → ℝ≥0∞
s t : Set X
r : ℝ≥0∞
r0 : 0 < r
hr : ∀ x ∈ s, ∀ y ∈ t, r ≤ edist x y
ε : ℝ≥0∞
left✝ : 0 < ε
εr : ε < r
⊢ ∀ (u : Set X), (s ∩ u).Nonempty → (t ∩ u).Nonempty → extend (fun s x => m s) u = ⊤
tactic: refine boundedBy_union_of_top_of_nonempty_inter ?_
state_before: case h.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m : Set X → ℝ≥0∞
s t : Set X
r : ℝ≥0∞
r0 : 0 < r
hr : ∀ x ∈ s, ∀ y ∈ t, r ≤ edist x y
ε : ℝ≥0∞
left✝ : 0 < ε
εr : ε < r
⊢ ∀ (u : Set X), (s ∩ u).Nonempty → (t ∩ u).Nonempty → extend (fun s x => m s) u = ⊤
state_after: case h.intro.intro.intro.intro.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m : Set X → ℝ≥0∞
s t : Set X
r : ℝ≥0∞
r0 : 0 < r
hr : ∀ x ∈ s, ∀ y ∈ t, r ≤ edist x y
ε : ℝ≥0∞
left✝ : 0 < ε
εr : ε < r
u : Set X
x : X
hxs : x ∈ s
hxu : x ∈ u
y : X
hyt : y ∈ t
hyu : y ∈ u
⊢ extend (fun s x => m s) u = ⊤
tactic: rintro u ⟨x, hxs, hxu⟩ ⟨y, hyt, hyu⟩
state_before: case h.intro.intro.intro.intro.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m : Set X → ℝ≥0∞
s t : Set X
r : ℝ≥0∞
r0 : 0 < r
hr : ∀ x ∈ s, ∀ y ∈ t, r ≤ edist x y
ε : ℝ≥0∞
left✝ : 0 < ε
εr : ε < r
u : Set X
x : X
hxs : x ∈ s
hxu : x ∈ u
y : X
hyt : y ∈ t
hyu : y ∈ u
⊢ extend (fun s x => m s) u = ⊤
state_after: case h.intro.intro.intro.intro.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m : Set X → ℝ≥0∞
s t : Set X
r : ℝ≥0∞
r0 : 0 < r
hr : ∀ x ∈ s, ∀ y ∈ t, r ≤ edist x y
ε : ℝ≥0∞
left✝ : 0 < ε
εr : ε < r
u : Set X
x : X
hxs : x ∈ s
hxu : x ∈ u
y : X
hyt : y ∈ t
hyu : y ∈ u
this : ε < diam u
⊢ extend (fun s x => m s) u = ⊤
tactic: have : ε < diam u := εr.trans_le ((hr x hxs y hyt).trans <| edist_le_diam_of_mem hxu hyu)
state_before: case h.intro.intro.intro.intro.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m : Set X → ℝ≥0∞
s t : Set X
r : ℝ≥0∞
r0 : 0 < r
hr : ∀ x ∈ s, ∀ y ∈ t, r ≤ edist x y
ε : ℝ≥0∞
left✝ : 0 < ε
εr : ε < r
u : Set X
x : X
hxs : x ∈ s
hxu : x ∈ u
y : X
hyt : y ∈ t
hyu : y ∈ u
this : ε < diam u
⊢ extend (fun s x => m s) u = ⊤
state_after: no goals
tactic: exact iInf_eq_top.2 fun h => (this.not_le h).elim