/-- Given a signed measure `s`, `s.toJordanDecomposition` is the Jordan decomposition `j`,
such that `s = j.toSignedMeasure`. This property is known as the Jordan decomposition
theorem, and is shown by
`MeasureTheory.SignedMeasure.toSignedMeasure_toJordanDecomposition`. -/
def toJordanDecomposition (s : SignedMeasure α) : JordanDecomposition α :=
  let i := choose s.exists_compl_positive_negative
  let hi := choose_spec s.exists_compl_positive_negative
  { posPart := s.toMeasureOfZeroLE i hi.1 hi.2.1
    negPart := s.toMeasureOfLEZero iᶜ hi.1.compl hi.2.2
    posPart_finite := inferInstance
    negPart_finite := inferInstance
    mutuallySingular := by
      refine' ⟨iᶜ, hi.1.compl, _, _⟩
      -- Porting note: added `← NNReal.eq_iff`
      · rw [toMeasureOfZeroLE_apply _ _ hi.1 hi.1.compl]; 

Proof state:
case refine'_1
α : Type u_1
β : Type u_2
inst✝² : MeasurableSpace α
s✝ : SignedMeasure α
μ ν : Measure α
inst✝¹ : IsFiniteMeasure μ
inst✝ : IsFiniteMeasure ν
s : SignedMeasure α
i : Set α :=
  choose
    (_ :
      ∃ i,
        MeasurableSet i ∧
          VectorMeasure.restrict 0 i ≤ VectorMeasure.restrict s i ∧
            VectorMeasure.restrict s iᶜ ≤ VectorMeasure.restrict 0 iᶜ)
hi : MeasurableSet
    (choose
      (_ :
        ∃ i,
          MeasurableSet i ∧
            VectorMeasure.restrict 0 i ≤ VectorMeasure.restrict s i ∧
              VectorMeasure.restrict s iᶜ ≤ VectorMeasure.restrict 0 iᶜ)) ∧
  VectorMeasure.restrict 0
        (choose
          (_ :
            ∃ i,
              MeasurableSet i ∧
                VectorMeasure.restrict 0 i ≤ VectorMeasure.restrict s i ∧
                  VectorMeasure.restrict s iᶜ ≤ VectorMeasure.restrict 0 iᶜ)) ≤
      VectorMeasure.restrict s
        (choose
          (_ :
            ∃ i,
              MeasurableSet i ∧
                VectorMeasure.restrict 0 i ≤ VectorMeasure.restrict s i ∧
                  VectorMeasure.restrict s iᶜ ≤ VectorMeasure.restrict 0 iᶜ)) ∧
    VectorMeasure.restrict s
        (choose
            (_ :
              ∃ i,
                MeasurableSet i ∧
                  VectorMeasure.restrict 0 i ≤ VectorMeasure.restrict s i ∧
                    VectorMeasure.restrict s iᶜ ≤ VectorMeasure.restrict 0 iᶜ))ᶜ ≤
      VectorMeasure.restrict 0
        (choose
            (_ :
              ∃ i,
                MeasurableSet i ∧
                  VectorMeasure.restrict 0 i ≤ VectorMeasure.restrict s i ∧
                    VectorMeasure.restrict s iᶜ ≤ VectorMeasure.restrict 0 iᶜ))ᶜ :=
  choose_spec (exists_compl_positive_negative s)
⊢ ↑{
        val :=
          ↑s
            (choose
                (_ :
                  ∃ i,
                    MeasurableSet i ∧
                      VectorMeasure.restrict 0 i ≤ VectorMeasure.restrict s i ∧
                        VectorMeasure.restrict s iᶜ ≤ VectorMeasure.restrict 0 iᶜ) ∩
              (choose
                  (_ :
                    ∃ i,
                      MeasurableSet i ∧
                        VectorMeasure.restrict 0 i ≤ VectorMeasure.restrict s i ∧
                          VectorMeasure.restrict s iᶜ ≤ VectorMeasure.restrict 0 iᶜ))ᶜ),
        property :=
          (_ :
            0 ≤
              ↑s
                (choose
                    (_ :
                      ∃ i,
                        MeasurableSet i ∧
                          VectorMeasure.restrict 0 i ≤ VectorMeasure.restrict s i ∧
                            VectorMeasure.restrict s iᶜ ≤ VectorMeasure.restrict 0 iᶜ) ∩
                  (choose
                      (_ :
                        ∃ i,
                          MeasurableSet i ∧
                            VectorMeasure.restrict 0 i ≤ VectorMeasure.restrict s i ∧
                              VectorMeasure.restrict s iᶜ ≤ VectorMeasure.restrict 0 iᶜ))ᶜ)) } =
    0

Next tactic:
simp [← NNReal.eq_iff]