/-- **Hahn decomposition theorem** -/
theorem hahn_decomposition [IsFiniteMeasure μ] [IsFiniteMeasure ν] :
    ∃ s,
      MeasurableSet s ∧
        (∀ t, MeasurableSet t → t ⊆ s → ν t ≤ μ t) ∧ ∀ t, MeasurableSet t → t ⊆ sᶜ → μ t ≤ ν t := by
  let d : Set α → ℝ := fun s => ((μ s).toNNReal : ℝ) - (ν s).toNNReal
  let c : Set ℝ := d '' { s | MeasurableSet s }
  let γ : ℝ := sSup c
  have hμ : ∀ s, μ s ≠ ∞ := measure_ne_top μ
  have hν : ∀ s, ν s ≠ ∞ := measure_ne_top ν
  have to_nnreal_μ : ∀ s, ((μ s).toNNReal : ℝ≥0∞) = μ s := fun s => ENNReal.coe_toNNReal <| hμ _
  have to_nnreal_ν : ∀ s, ((ν s).toNNReal : ℝ≥0∞) = ν s := fun s => ENNReal.coe_toNNReal <| hν _
  have d_split : ∀ s t, MeasurableSet s → MeasurableSet t → d s = d (s \ t) + d (s ∩ t) := by
    intro s t _hs ht
    dsimp only
    rw [← measure_inter_add_diff s ht, ← measure_inter_add_diff s ht,
      ENNReal.toNNReal_add (hμ _) (hμ _), ENNReal.toNNReal_add (hν _) (hν _), NNReal.coe_add,
      NNReal.coe_add]
    simp only [sub_eq_add_neg, neg_add]
    abel
  have d_Union :
    ∀ s : ℕ → Set α, Monotone s → Tendsto (fun n => d (s n)) atTop (𝓝 (d (⋃ n, s n))) := by
    intro s hm
    refine' Tendsto.sub _ _ <;>
      refine' NNReal.tendsto_coe.2 <| (ENNReal.tendsto_toNNReal _).comp <| tendsto_measure_iUnion hm
    exact hμ _
    exact hν _
  have d_Inter :
    ∀ s : ℕ → Set α,
      (∀ n, MeasurableSet (s n)) →
        (∀ n m, n ≤ m → s m ⊆ s n) → Tendsto (fun n => d (s n)) atTop (𝓝 (d (⋂ n, s n))) := by
    intro s hs hm
    refine' Tendsto.sub _ _ <;>
      refine'
        NNReal.tendsto_coe.2 <|
          (ENNReal.tendsto_toNNReal <| _).comp <| tendsto_measure_iInter hs hm _
    

Proof state:
case refine'_1.refine'_1
α : Type u_1
inst✝² : MeasurableSpace α
μ ν : Measure α
inst✝¹ : IsFiniteMeasure μ
inst✝ : IsFiniteMeasure ν
d : Set α → ℝ := fun s => ↑(ENNReal.toNNReal (↑↑μ s)) - ↑(ENNReal.toNNReal (↑↑ν s))
c : Set ℝ := d '' {s | MeasurableSet s}
γ : ℝ := sSup c
hμ : ∀ (s : Set α), ↑↑μ s ≠ ⊤
hν : ∀ (s : Set α), ↑↑ν s ≠ ⊤
to_nnreal_μ : ∀ (s : Set α), ↑(ENNReal.toNNReal (↑↑μ s)) = ↑↑μ s
to_nnreal_ν : ∀ (s : Set α), ↑(ENNReal.toNNReal (↑↑ν s)) = ↑↑ν s
d_split : ∀ (s t : Set α), MeasurableSet s → MeasurableSet t → d s = d (s \ t) + d (s ∩ t)
d_Union : ∀ (s : ℕ → Set α), Monotone s → Tendsto (fun n => d (s n)) atTop (𝓝 (d (⋃ n, s n)))
s : ℕ → Set α
hs : ∀ (n : ℕ), MeasurableSet (s n)
hm : ∀ (n m : ℕ), n ≤ m → s m ⊆ s n
⊢ ↑↑μ (⋂ n, s n) ≠ ⊤
case refine'_1.refine'_2
α : Type u_1
inst✝² : MeasurableSpace α
μ ν : Measure α
inst✝¹ : IsFiniteMeasure μ
inst✝ : IsFiniteMeasure ν
d : Set α → ℝ := fun s => ↑(ENNReal.toNNReal (↑↑μ s)) - ↑(ENNReal.toNNReal (↑↑ν s))
c : Set ℝ := d '' {s | MeasurableSet s}
γ : ℝ := sSup c
hμ : ∀ (s : Set α), ↑↑μ s ≠ ⊤
hν : ∀ (s : Set α), ↑↑ν s ≠ ⊤
to_nnreal_μ : ∀ (s : Set α), ↑(ENNReal.toNNReal (↑↑μ s)) = ↑↑μ s
to_nnreal_ν : ∀ (s : Set α), ↑(ENNReal.toNNReal (↑↑ν s)) = ↑↑ν s
d_split : ∀ (s t : Set α), MeasurableSet s → MeasurableSet t → d s = d (s \ t) + d (s ∩ t)
d_Union : ∀ (s : ℕ → Set α), Monotone s → Tendsto (fun n => d (s n)) atTop (𝓝 (d (⋃ n, s n)))
s : ℕ → Set α
hs : ∀ (n : ℕ), MeasurableSet (s n)
hm : ∀ (n m : ℕ), n ≤ m → s m ⊆ s n
⊢ ∃ i, ↑↑μ (s i) ≠ ⊤
case refine'_2.refine'_1
α : Type u_1
inst✝² : MeasurableSpace α
μ ν : Measure α
inst✝¹ : IsFiniteMeasure μ
inst✝ : IsFiniteMeasure ν
d : Set α → ℝ := fun s => ↑(ENNReal.toNNReal (↑↑μ s)) - ↑(ENNReal.toNNReal (↑↑ν s))
c : Set ℝ := d '' {s | MeasurableSet s}
γ : ℝ := sSup c
hμ : ∀ (s : Set α), ↑↑μ s ≠ ⊤
hν : ∀ (s : Set α), ↑↑ν s ≠ ⊤
to_nnreal_μ : ∀ (s : Set α), ↑(ENNReal.toNNReal (↑↑μ s)) = ↑↑μ s
to_nnreal_ν : ∀ (s : Set α), ↑(ENNReal.toNNReal (↑↑ν s)) = ↑↑ν s
d_split : ∀ (s t : Set α), MeasurableSet s → MeasurableSet t → d s = d (s \ t) + d (s ∩ t)
d_Union : ∀ (s : ℕ → Set α), Monotone s → Tendsto (fun n => d (s n)) atTop (𝓝 (d (⋃ n, s n)))
s : ℕ → Set α
hs : ∀ (n : ℕ), MeasurableSet (s n)
hm : ∀ (n m : ℕ), n ≤ m → s m ⊆ s n
⊢ ↑↑ν (⋂ n, s n) ≠ ⊤
case refine'_2.refine'_2
α : Type u_1
inst✝² : MeasurableSpace α
μ ν : Measure α
inst✝¹ : IsFiniteMeasure μ
inst✝ : IsFiniteMeasure ν
d : Set α → ℝ := fun s => ↑(ENNReal.toNNReal (↑↑μ s)) - ↑(ENNReal.toNNReal (↑↑ν s))
c : Set ℝ := d '' {s | MeasurableSet s}
γ : ℝ := sSup c
hμ : ∀ (s : Set α), ↑↑μ s ≠ ⊤
hν : ∀ (s : Set α), ↑↑ν s ≠ ⊤
to_nnreal_μ : ∀ (s : Set α), ↑(ENNReal.toNNReal (↑↑μ s)) = ↑↑μ s
to_nnreal_ν : ∀ (s : Set α), ↑(ENNReal.toNNReal (↑↑ν s)) = ↑↑ν s
d_split : ∀ (s t : Set α), MeasurableSet s → MeasurableSet t → d s = d (s \ t) + d (s ∩ t)
d_Union : ∀ (s : ℕ → Set α), Monotone s → Tendsto (fun n => d (s n)) atTop (𝓝 (d (⋃ n, s n)))
s : ℕ → Set α
hs : ∀ (n : ℕ), MeasurableSet (s n)
hm : ∀ (n m : ℕ), n ≤ m → s m ⊆ s n
⊢ ∃ i, ↑↑ν (s i) ≠ ⊤

Next tactic:
exacts [hμ _, ⟨0, hμ _⟩, hν _, ⟨0, hν _⟩]