/-- 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
      

Proof state:
α : 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)
⊢ toMeasureOfZeroLE s i
      (_ :
        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ᶜ))) ⟂ₘ
    toMeasureOfLEZero s iᶜ
      (_ :
        MeasurableSet
          (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ᶜ))ᶜ)

Next tactic:
refine' ⟨iᶜ, hi.1.compl, _, _⟩