Theorem: MeasureTheory.levyProkhorovDist_triangle
File: Mathlib/MeasureTheory/Measure/LevyProkhorovMetric.lean

tactic: have dμκ_finite := (levyProkhorovEDist_lt_top μ κ).ne
state_before: ι : Type u_1
Ω : Type u_2
inst✝⁵ : MeasurableSpace Ω
inst✝⁴ : PseudoEMetricSpace Ω
inst✝³ : OpensMeasurableSpace Ω
μ ν κ : Measure Ω
inst✝² : IsFiniteMeasure μ
inst✝¹ : IsFiniteMeasure ν
inst✝ : IsFiniteMeasure κ
⊢ levyProkhorovDist μ κ ≤ levyProkhorovDist μ ν + levyProkhorovDist ν κ
state_after: ι : Type u_1
Ω : Type u_2
inst✝⁵ : MeasurableSpace Ω
inst✝⁴ : PseudoEMetricSpace Ω
inst✝³ : OpensMeasurableSpace Ω
μ ν κ : Measure Ω
inst✝² : IsFiniteMeasure μ
inst✝¹ : IsFiniteMeasure ν
inst✝ : IsFiniteMeasure κ
dμκ_finite : levyProkhorovEDist μ κ ≠ ⊤
⊢ levyProkhorovDist μ κ ≤ levyProkhorovDist μ ν + levyProkhorovDist ν κ

tactic: have dμν_finite := (levyProkhorovEDist_lt_top μ ν).ne
state_before: ι : Type u_1
Ω : Type u_2
inst✝⁵ : MeasurableSpace Ω
inst✝⁴ : PseudoEMetricSpace Ω
inst✝³ : OpensMeasurableSpace Ω
μ ν κ : Measure Ω
inst✝² : IsFiniteMeasure μ
inst✝¹ : IsFiniteMeasure ν
inst✝ : IsFiniteMeasure κ
dμκ_finite : levyProkhorovEDist μ κ ≠ ⊤
⊢ levyProkhorovDist μ κ ≤ levyProkhorovDist μ ν + levyProkhorovDist ν κ
state_after: ι : Type u_1
Ω : Type u_2
inst✝⁵ : MeasurableSpace Ω
inst✝⁴ : PseudoEMetricSpace Ω
inst✝³ : OpensMeasurableSpace Ω
μ ν κ : Measure Ω
inst✝² : IsFiniteMeasure μ
inst✝¹ : IsFiniteMeasure ν
inst✝ : IsFiniteMeasure κ
dμκ_finite : levyProkhorovEDist μ κ ≠ ⊤
dμν_finite : levyProkhorovEDist μ ν ≠ ⊤
⊢ levyProkhorovDist μ κ ≤ levyProkhorovDist μ ν + levyProkhorovDist ν κ

tactic: have dνκ_finite := (levyProkhorovEDist_lt_top ν κ).ne
state_before: ι : Type u_1
Ω : Type u_2
inst✝⁵ : MeasurableSpace Ω
inst✝⁴ : PseudoEMetricSpace Ω
inst✝³ : OpensMeasurableSpace Ω
μ ν κ : Measure Ω
inst✝² : IsFiniteMeasure μ
inst✝¹ : IsFiniteMeasure ν
inst✝ : IsFiniteMeasure κ
dμκ_finite : levyProkhorovEDist μ κ ≠ ⊤
dμν_finite : levyProkhorovEDist μ ν ≠ ⊤
⊢ levyProkhorovDist μ κ ≤ levyProkhorovDist μ ν + levyProkhorovDist ν κ
state_after: ι : Type u_1
Ω : Type u_2
inst✝⁵ : MeasurableSpace Ω
inst✝⁴ : PseudoEMetricSpace Ω
inst✝³ : OpensMeasurableSpace Ω
μ ν κ : Measure Ω
inst✝² : IsFiniteMeasure μ
inst✝¹ : IsFiniteMeasure ν
inst✝ : IsFiniteMeasure κ
dμκ_finite : levyProkhorovEDist μ κ ≠ ⊤
dμν_finite : levyProkhorovEDist μ ν ≠ ⊤
dνκ_finite : levyProkhorovEDist ν κ ≠ ⊤
⊢ levyProkhorovDist μ κ ≤ levyProkhorovDist μ ν + levyProkhorovDist ν κ

tactic: convert (ENNReal.toReal_le_toReal (a := levyProkhorovEDist μ κ)
  (b := levyProkhorovEDist μ ν + levyProkhorovEDist ν κ)
  _ _).mpr <| levyProkhorovEDist_triangle μ ν κ
state_before: ι : Type u_1
Ω : Type u_2
inst✝⁵ : MeasurableSpace Ω
inst✝⁴ : PseudoEMetricSpace Ω
inst✝³ : OpensMeasurableSpace Ω
μ ν κ : Measure Ω
inst✝² : IsFiniteMeasure μ
inst✝¹ : IsFiniteMeasure ν
inst✝ : IsFiniteMeasure κ
dμκ_finite : levyProkhorovEDist μ κ ≠ ⊤
dμν_finite : levyProkhorovEDist μ ν ≠ ⊤
dνκ_finite : levyProkhorovEDist ν κ ≠ ⊤
⊢ levyProkhorovDist μ κ ≤ levyProkhorovDist μ ν + levyProkhorovDist ν κ
state_after: case h.e'_4
ι : Type u_1
Ω : Type u_2
inst✝⁵ : MeasurableSpace Ω
inst✝⁴ : PseudoEMetricSpace Ω
inst✝³ : OpensMeasurableSpace Ω
μ ν κ : Measure Ω
inst✝² : IsFiniteMeasure μ
inst✝¹ : IsFiniteMeasure ν
inst✝ : IsFiniteMeasure κ
dμκ_finite : levyProkhorovEDist μ κ ≠ ⊤
dμν_finite : levyProkhorovEDist μ ν ≠ ⊤
dνκ_finite : levyProkhorovEDist ν κ ≠ ⊤
⊢ levyProkhorovDist μ ν + levyProkhorovDist ν κ = (levyProkhorovEDist μ ν + levyProkhorovEDist ν κ).toReal

case convert_1
ι : Type u_1
Ω : Type u_2
inst✝⁵ : MeasurableSpace Ω
inst✝⁴ : PseudoEMetricSpace Ω
inst✝³ : OpensMeasurableSpace Ω
μ ν κ : Measure Ω
inst✝² : IsFiniteMeasure μ
inst✝¹ : IsFiniteMeasure ν
inst✝ : IsFiniteMeasure κ
dμκ_finite : levyProkhorovEDist μ κ ≠ ⊤
dμν_finite : levyProkhorovEDist μ ν ≠ ⊤
dνκ_finite : levyProkhorovEDist ν κ ≠ ⊤
⊢ levyProkhorovEDist μ κ ≠ ⊤

case convert_2
ι : Type u_1
Ω : Type u_2
inst✝⁵ : MeasurableSpace Ω
inst✝⁴ : PseudoEMetricSpace Ω
inst✝³ : OpensMeasurableSpace Ω
μ ν κ : Measure Ω
inst✝² : IsFiniteMeasure μ
inst✝¹ : IsFiniteMeasure ν
inst✝ : IsFiniteMeasure κ
dμκ_finite : levyProkhorovEDist μ κ ≠ ⊤
dμν_finite : levyProkhorovEDist μ ν ≠ ⊤
dνκ_finite : levyProkhorovEDist ν κ ≠ ⊤
⊢ levyProkhorovEDist μ ν + levyProkhorovEDist ν κ ≠ ⊤

tactic: simp only [levyProkhorovDist, ENNReal.toReal_add dμν_finite dνκ_finite]
state_before: case h.e'_4
ι : Type u_1
Ω : Type u_2
inst✝⁵ : MeasurableSpace Ω
inst✝⁴ : PseudoEMetricSpace Ω
inst✝³ : OpensMeasurableSpace Ω
μ ν κ : Measure Ω
inst✝² : IsFiniteMeasure μ
inst✝¹ : IsFiniteMeasure ν
inst✝ : IsFiniteMeasure κ
dμκ_finite : levyProkhorovEDist μ κ ≠ ⊤
dμν_finite : levyProkhorovEDist μ ν ≠ ⊤
dνκ_finite : levyProkhorovEDist ν κ ≠ ⊤
⊢ levyProkhorovDist μ ν + levyProkhorovDist ν κ = (levyProkhorovEDist μ ν + levyProkhorovEDist ν κ).toReal
state_after: no goals

tactic: exact dμκ_finite
state_before: case convert_1
ι : Type u_1
Ω : Type u_2
inst✝⁵ : MeasurableSpace Ω
inst✝⁴ : PseudoEMetricSpace Ω
inst✝³ : OpensMeasurableSpace Ω
μ ν κ : Measure Ω
inst✝² : IsFiniteMeasure μ
inst✝¹ : IsFiniteMeasure ν
inst✝ : IsFiniteMeasure κ
dμκ_finite : levyProkhorovEDist μ κ ≠ ⊤
dμν_finite : levyProkhorovEDist μ ν ≠ ⊤
dνκ_finite : levyProkhorovEDist ν κ ≠ ⊤
⊢ levyProkhorovEDist μ κ ≠ ⊤
state_after: no goals

tactic: exact ENNReal.add_ne_top.mpr ⟨dμν_finite, dνκ_finite⟩
state_before: case convert_2
ι : Type u_1
Ω : Type u_2
inst✝⁵ : MeasurableSpace Ω
inst✝⁴ : PseudoEMetricSpace Ω
inst✝³ : OpensMeasurableSpace Ω
μ ν κ : Measure Ω
inst✝² : IsFiniteMeasure μ
inst✝¹ : IsFiniteMeasure ν
inst✝ : IsFiniteMeasure κ
dμκ_finite : levyProkhorovEDist μ κ ≠ ⊤
dμν_finite : levyProkhorovEDist μ ν ≠ ⊤
dνκ_finite : levyProkhorovEDist ν κ ≠ ⊤
⊢ levyProkhorovEDist μ ν + levyProkhorovEDist ν κ ≠ ⊤
state_after: no goals