l3lab/ntp-mathlib huggingface dataset:
theorem absolutelyContinuous_ennreal_iff (s : SignedMeasure α) (μ : VectorMeasure α ℝ≥0∞) :
    s ≪ᵥ μ ↔ s.totalVariation ≪ μ.ennrealToMeasure := by
  constructor <;> intro h
  · refine' Measure.AbsolutelyContinuous.mk fun S hS₁ hS₂ => _
    obtain ⟨i, hi₁, hi₂, hi₃, hpos, hneg⟩ := s.toJordanDecomposition_spec
    rw [totalVariation, Measure.add_apply, hpos, hneg, toMeasureOfZeroLE_apply _ _ _ hS₁,
      toMeasureOfLEZero_apply _ _ _ hS₁]
    rw [← VectorMeasure.AbsolutelyContinuous.ennrealToMeasure] at h
    -- Porting note: added `← NNReal.eq_iff`
    simp [h (measure_mono_null (i.inter_subset_right S) hS₂),
      h (measure_mono_null (iᶜ.inter_subset_right S) hS₂), ← NNReal.eq_iff]
  · refine' VectorMeasure.AbsolutelyContinuous.mk fun S hS₁ hS₂ => _
    rw [← VectorMeasure.ennrealToMeasure_apply hS₁] at hS₂
    

Proof state:
case mpr
α : Type u_1
β : Type u_2
inst✝ : MeasurableSpace α
s : SignedMeasure α
μ : VectorMeasure α ℝ≥0∞
h : totalVariation s ≪ VectorMeasure.ennrealToMeasure μ
S : Set α
hS₁ : MeasurableSet S
hS₂ : ↑↑(VectorMeasure.ennrealToMeasure μ) S = 0
⊢ ↑s S = 0

Next tactic:
exact null_of_totalVariation_zero s (h hS₂)
theorem totalVariation_absolutelyContinuous_iff (s : SignedMeasure α) (μ : Measure α) :
    s.totalVariation ≪ μ ↔
      s.toJordanDecomposition.posPart ≪ μ ∧ s.toJordanDecomposition.negPart ≪ μ := by
  

Proof state:
α : Type u_1
β : Type u_2
inst✝ : MeasurableSpace α
s : SignedMeasure α
μ : Measure α
⊢ totalVariation s ≪ μ ↔ (toJordanDecomposition s).posPart ≪ μ ∧ (toJordanDecomposition s).negPart ≪ μ

Next tactic:
constructor
theorem totalVariation_absolutelyContinuous_iff (s : SignedMeasure α) (μ : Measure α) :
    s.totalVariation ≪ μ ↔
      s.toJordanDecomposition.posPart ≪ μ ∧ s.toJordanDecomposition.negPart ≪ μ := by
  constructor <;> 

Proof state:
case mp
α : Type u_1
β : Type u_2
inst✝ : MeasurableSpace α
s : SignedMeasure α
μ : Measure α
⊢ totalVariation s ≪ μ → (toJordanDecomposition s).posPart ≪ μ ∧ (toJordanDecomposition s).negPart ≪ μ

Next tactic:
intro h
theorem totalVariation_absolutelyContinuous_iff (s : SignedMeasure α) (μ : Measure α) :
    s.totalVariation ≪ μ ↔
      s.toJordanDecomposition.posPart ≪ μ ∧ s.toJordanDecomposition.negPart ≪ μ := by
  constructor <;> 

Proof state:
case mpr
α : Type u_1
β : Type u_2
inst✝ : MeasurableSpace α
s : SignedMeasure α
μ : Measure α
⊢ (toJordanDecomposition s).posPart ≪ μ ∧ (toJordanDecomposition s).negPart ≪ μ → totalVariation s ≪ μ

Next tactic:
intro h
theorem totalVariation_absolutelyContinuous_iff (s : SignedMeasure α) (μ : Measure α) :
    s.totalVariation ≪ μ ↔
      s.toJordanDecomposition.posPart ≪ μ ∧ s.toJordanDecomposition.negPart ≪ μ := by
  constructor <;> intro h
  · 

Proof state:
case mp
α : Type u_1
β : Type u_2
inst✝ : MeasurableSpace α
s : SignedMeasure α
μ : Measure α
h : totalVariation s ≪ μ
⊢ (toJordanDecomposition s).posPart ≪ μ ∧ (toJordanDecomposition s).negPart ≪ μ

Next tactic:
constructor
theorem totalVariation_absolutelyContinuous_iff (s : SignedMeasure α) (μ : Measure α) :
    s.totalVariation ≪ μ ↔
      s.toJordanDecomposition.posPart ≪ μ ∧ s.toJordanDecomposition.negPart ≪ μ := by
  constructor <;> intro h
  · constructor
    

Proof state:
case mp.left
α : Type u_1
β : Type u_2
inst✝ : MeasurableSpace α
s : SignedMeasure α
μ : Measure α
h : totalVariation s ≪ μ
⊢ (toJordanDecomposition s).posPart ≪ μ
case mp.right
α : Type u_1
β : Type u_2
inst✝ : MeasurableSpace α
s : SignedMeasure α
μ : Measure α
h : totalVariation s ≪ μ
⊢ (toJordanDecomposition s).negPart ≪ μ

Next tactic:
all_goals
      refine' Measure.AbsolutelyContinuous.mk fun S _ hS₂ => _
      have := h hS₂
      rw [totalVariation, Measure.add_apply, add_eq_zero_iff] at this
theorem totalVariation_absolutelyContinuous_iff (s : SignedMeasure α) (μ : Measure α) :
    s.totalVariation ≪ μ ↔
      s.toJordanDecomposition.posPart ≪ μ ∧ s.toJordanDecomposition.negPart ≪ μ := by
  constructor <;> intro h
  · constructor
    all_goals
      

Proof state:
case mp.left
α : Type u_1
β : Type u_2
inst✝ : MeasurableSpace α
s : SignedMeasure α
μ : Measure α
h : totalVariation s ≪ μ
⊢ (toJordanDecomposition s).posPart ≪ μ

Next tactic:
refine' Measure.AbsolutelyContinuous.mk fun S _ hS₂ => _
theorem totalVariation_absolutelyContinuous_iff (s : SignedMeasure α) (μ : Measure α) :
    s.totalVariation ≪ μ ↔
      s.toJordanDecomposition.posPart ≪ μ ∧ s.toJordanDecomposition.negPart ≪ μ := by
  constructor <;> intro h
  · constructor
    all_goals
      refine' Measure.AbsolutelyContinuous.mk fun S _ hS₂ => _
      

Proof state:
case mp.left
α : Type u_1
β : Type u_2
inst✝ : MeasurableSpace α
s : SignedMeasure α
μ : Measure α
h : totalVariation s ≪ μ
S : Set α
x✝ : MeasurableSet S
hS₂ : ↑↑μ S = 0
⊢ ↑↑(toJordanDecomposition s).posPart S = 0

Next tactic:
have := h hS₂
theorem totalVariation_absolutelyContinuous_iff (s : SignedMeasure α) (μ : Measure α) :
    s.totalVariation ≪ μ ↔
      s.toJordanDecomposition.posPart ≪ μ ∧ s.toJordanDecomposition.negPart ≪ μ := by
  constructor <;> intro h
  · constructor
    all_goals
      refine' Measure.AbsolutelyContinuous.mk fun S _ hS₂ => _
      have := h hS₂
      

Proof state:
case mp.left
α : Type u_1
β : Type u_2
inst✝ : MeasurableSpace α
s : SignedMeasure α
μ : Measure α
h : totalVariation s ≪ μ
S : Set α
x✝ : MeasurableSet S
hS₂ : ↑↑μ S = 0
this : ↑↑(totalVariation s) S = 0
⊢ ↑↑(toJordanDecomposition s).posPart S = 0

Next tactic:
rw [totalVariation, Measure.add_apply, add_eq_zero_iff] at this
theorem totalVariation_absolutelyContinuous_iff (s : SignedMeasure α) (μ : Measure α) :
    s.totalVariation ≪ μ ↔
      s.toJordanDecomposition.posPart ≪ μ ∧ s.toJordanDecomposition.negPart ≪ μ := by
  constructor <;> intro h
  · constructor
    all_goals
      

Proof state:
case mp.right
α : Type u_1
β : Type u_2
inst✝ : MeasurableSpace α
s : SignedMeasure α
μ : Measure α
h : totalVariation s ≪ μ
⊢ (toJordanDecomposition s).negPart ≪ μ

Next tactic:
refine' Measure.AbsolutelyContinuous.mk fun S _ hS₂ => _
theorem totalVariation_absolutelyContinuous_iff (s : SignedMeasure α) (μ : Measure α) :
    s.totalVariation ≪ μ ↔
      s.toJordanDecomposition.posPart ≪ μ ∧ s.toJordanDecomposition.negPart ≪ μ := by
  constructor <;> intro h
  · constructor
    all_goals
      refine' Measure.AbsolutelyContinuous.mk fun S _ hS₂ => _
      

Proof state:
case mp.right
α : Type u_1
β : Type u_2
inst✝ : MeasurableSpace α
s : SignedMeasure α
μ : Measure α
h : totalVariation s ≪ μ
S : Set α
x✝ : MeasurableSet S
hS₂ : ↑↑μ S = 0
⊢ ↑↑(toJordanDecomposition s).negPart S = 0

Next tactic:
have := h hS₂
theorem totalVariation_absolutelyContinuous_iff (s : SignedMeasure α) (μ : Measure α) :
    s.totalVariation ≪ μ ↔
      s.toJordanDecomposition.posPart ≪ μ ∧ s.toJordanDecomposition.negPart ≪ μ := by
  constructor <;> intro h
  · constructor
    all_goals
      refine' Measure.AbsolutelyContinuous.mk fun S _ hS₂ => _
      have := h hS₂
      

Proof state:
case mp.right
α : Type u_1
β : Type u_2
inst✝ : MeasurableSpace α
s : SignedMeasure α
μ : Measure α
h : totalVariation s ≪ μ
S : Set α
x✝ : MeasurableSet S
hS₂ : ↑↑μ S = 0
this : ↑↑(totalVariation s) S = 0
⊢ ↑↑(toJordanDecomposition s).negPart S = 0

Next tactic:
rw [totalVariation, Measure.add_apply, add_eq_zero_iff] at this
theorem totalVariation_absolutelyContinuous_iff (s : SignedMeasure α) (μ : Measure α) :
    s.totalVariation ≪ μ ↔
      s.toJordanDecomposition.posPart ≪ μ ∧ s.toJordanDecomposition.negPart ≪ μ := by
  constructor <;> intro h
  · constructor
    all_goals
      refine' Measure.AbsolutelyContinuous.mk fun S _ hS₂ => _
      have := h hS₂
      rw [totalVariation, Measure.add_apply, add_eq_zero_iff] at this
    

Proof state:
case mp.left
α : Type u_1
β : Type u_2
inst✝ : MeasurableSpace α
s : SignedMeasure α
μ : Measure α
h : totalVariation s ≪ μ
S : Set α
x✝ : MeasurableSet S
hS₂ : ↑↑μ S = 0
this : ↑↑(toJordanDecomposition s).posPart S = 0 ∧ ↑↑(toJordanDecomposition s).negPart S = 0
⊢ ↑↑(toJordanDecomposition s).posPart S = 0
case mp.right
α : Type u_1
β : Type u_2
inst✝ : MeasurableSpace α
s : SignedMeasure α
μ : Measure α
h : totalVariation s ≪ μ
S : Set α
x✝ : MeasurableSet S
hS₂ : ↑↑μ S = 0
this : ↑↑(toJordanDecomposition s).posPart S = 0 ∧ ↑↑(toJordanDecomposition s).negPart S = 0
⊢ ↑↑(toJordanDecomposition s).negPart S = 0

Next tactic:
exacts [this.1, this.2]
theorem totalVariation_absolutelyContinuous_iff (s : SignedMeasure α) (μ : Measure α) :
    s.totalVariation ≪ μ ↔
      s.toJordanDecomposition.posPart ≪ μ ∧ s.toJordanDecomposition.negPart ≪ μ := by
  constructor <;> intro h
  · constructor
    all_goals
      refine' Measure.AbsolutelyContinuous.mk fun S _ hS₂ => _
      have := h hS₂
      rw [totalVariation, Measure.add_apply, add_eq_zero_iff] at this
    exacts [this.1, this.2]
  · 

Proof state:
case mpr
α : Type u_1
β : Type u_2
inst✝ : MeasurableSpace α
s : SignedMeasure α
μ : Measure α
h : (toJordanDecomposition s).posPart ≪ μ ∧ (toJordanDecomposition s).negPart ≪ μ
⊢ totalVariation s ≪ μ

Next tactic:
refine' Measure.AbsolutelyContinuous.mk fun S _ hS₂ => _
theorem totalVariation_absolutelyContinuous_iff (s : SignedMeasure α) (μ : Measure α) :
    s.totalVariation ≪ μ ↔
      s.toJordanDecomposition.posPart ≪ μ ∧ s.toJordanDecomposition.negPart ≪ μ := by
  constructor <;> intro h
  · constructor
    all_goals
      refine' Measure.AbsolutelyContinuous.mk fun S _ hS₂ => _
      have := h hS₂
      rw [totalVariation, Measure.add_apply, add_eq_zero_iff] at this
    exacts [this.1, this.2]
  · refine' Measure.AbsolutelyContinuous.mk fun S _ hS₂ => _
    

Proof state:
case mpr
α : Type u_1
β : Type u_2
inst✝ : MeasurableSpace α
s : SignedMeasure α
μ : Measure α
h : (toJordanDecomposition s).posPart ≪ μ ∧ (toJordanDecomposition s).negPart ≪ μ
S : Set α
x✝ : MeasurableSet S
hS₂ : ↑↑μ S = 0
⊢ ↑↑(totalVariation s) S = 0

Next tactic:
rw [totalVariation, Measure.add_apply, h.1 hS₂, h.2 hS₂, add_zero]
theorem mutuallySingular_iff (s t : SignedMeasure α) :
    s ⟂ᵥ t ↔ s.totalVariation ⟂ₘ t.totalVariation := by
  

Proof state:
α : Type u_1
β : Type u_2
inst✝ : MeasurableSpace α
s t : SignedMeasure α
⊢ s ⟂ᵥ t ↔ totalVariation s ⟂ₘ totalVariation t

Next tactic:
constructor
theorem mutuallySingular_iff (s t : SignedMeasure α) :
    s ⟂ᵥ t ↔ s.totalVariation ⟂ₘ t.totalVariation := by
  constructor
  · 

Proof state:
case mp
α : Type u_1
β : Type u_2
inst✝ : MeasurableSpace α
s t : SignedMeasure α
⊢ s ⟂ᵥ t → totalVariation s ⟂ₘ totalVariation t

Next tactic:
rintro ⟨u, hmeas, hu₁, hu₂⟩
theorem mutuallySingular_iff (s t : SignedMeasure α) :
    s ⟂ᵥ t ↔ s.totalVariation ⟂ₘ t.totalVariation := by
  constructor
  · rintro ⟨u, hmeas, hu₁, hu₂⟩
    

Proof state:
case mp.intro.intro.intro
α : Type u_1
β : Type u_2
inst✝ : MeasurableSpace α
s t : SignedMeasure α
u : Set α
hmeas : MeasurableSet u
hu₁ : ∀ t ⊆ u, ↑s t = 0
hu₂ : ∀ t_1 ⊆ uᶜ, ↑t t_1 = 0
⊢ totalVariation s ⟂ₘ totalVariation t

Next tactic:
obtain ⟨i, hi₁, hi₂, hi₃, hipos, hineg⟩ := s.toJordanDecomposition_spec
theorem mutuallySingular_iff (s t : SignedMeasure α) :
    s ⟂ᵥ t ↔ s.totalVariation ⟂ₘ t.totalVariation := by
  constructor
  · rintro ⟨u, hmeas, hu₁, hu₂⟩
    obtain ⟨i, hi₁, hi₂, hi₃, hipos, hineg⟩ := s.toJordanDecomposition_spec
    

Proof state:
case mp.intro.intro.intro.intro.intro.intro.intro.intro
α : Type u_1
β : Type u_2
inst✝ : MeasurableSpace α
s t : SignedMeasure α
u : Set α
hmeas : MeasurableSet u
hu₁ : ∀ t ⊆ u, ↑s t = 0
hu₂ : ∀ t_1 ⊆ uᶜ, ↑t t_1 = 0
i : Set α
hi₁ : MeasurableSet i
hi₂ : VectorMeasure.restrict 0 i ≤ VectorMeasure.restrict s i
hi₃ : VectorMeasure.restrict s iᶜ ≤ VectorMeasure.restrict 0 iᶜ
hipos : (toJordanDecomposition s).posPart = toMeasureOfZeroLE s i hi₁ hi₂
hineg : (toJordanDecomposition s).negPart = toMeasureOfLEZero s iᶜ (_ : MeasurableSet iᶜ) hi₃
⊢ totalVariation s ⟂ₘ totalVariation t

Next tactic:
obtain ⟨j, hj₁, hj₂, hj₃, hjpos, hjneg⟩ := t.toJordanDecomposition_spec
theorem mutuallySingular_iff (s t : SignedMeasure α) :
    s ⟂ᵥ t ↔ s.totalVariation ⟂ₘ t.totalVariation := by
  constructor
  · rintro ⟨u, hmeas, hu₁, hu₂⟩
    obtain ⟨i, hi₁, hi₂, hi₃, hipos, hineg⟩ := s.toJordanDecomposition_spec
    obtain ⟨j, hj₁, hj₂, hj₃, hjpos, hjneg⟩ := t.toJordanDecomposition_spec
    

Proof state:
case mp.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro
α : Type u_1
β : Type u_2
inst✝ : MeasurableSpace α
s t : SignedMeasure α
u : Set α
hmeas : MeasurableSet u
hu₁ : ∀ t ⊆ u, ↑s t = 0
hu₂ : ∀ t_1 ⊆ uᶜ, ↑t t_1 = 0
i : Set α
hi₁ : MeasurableSet i
hi₂ : VectorMeasure.restrict 0 i ≤ VectorMeasure.restrict s i
hi₃ : VectorMeasure.restrict s iᶜ ≤ VectorMeasure.restrict 0 iᶜ
hipos : (toJordanDecomposition s).posPart = toMeasureOfZeroLE s i hi₁ hi₂
hineg : (toJordanDecomposition s).negPart = toMeasureOfLEZero s iᶜ (_ : MeasurableSet iᶜ) hi₃
j : Set α
hj₁ : MeasurableSet j
hj₂ : VectorMeasure.restrict 0 j ≤ VectorMeasure.restrict t j
hj₃ : VectorMeasure.restrict t jᶜ ≤ VectorMeasure.restrict 0 jᶜ
hjpos : (toJordanDecomposition t).posPart = toMeasureOfZeroLE t j hj₁ hj₂
hjneg : (toJordanDecomposition t).negPart = toMeasureOfLEZero t jᶜ (_ : MeasurableSet jᶜ) hj₃
⊢ totalVariation s ⟂ₘ totalVariation t

Next tactic:
refine' ⟨u, hmeas, _, _⟩
theorem mutuallySingular_iff (s t : SignedMeasure α) :
    s ⟂ᵥ t ↔ s.totalVariation ⟂ₘ t.totalVariation := by
  constructor
  · rintro ⟨u, hmeas, hu₁, hu₂⟩
    obtain ⟨i, hi₁, hi₂, hi₃, hipos, hineg⟩ := s.toJordanDecomposition_spec
    obtain ⟨j, hj₁, hj₂, hj₃, hjpos, hjneg⟩ := t.toJordanDecomposition_spec
    refine' ⟨u, hmeas, _, _⟩
    · 

Proof state:
case mp.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.refine'_1
α : Type u_1
β : Type u_2
inst✝ : MeasurableSpace α
s t : SignedMeasure α
u : Set α
hmeas : MeasurableSet u
hu₁ : ∀ t ⊆ u, ↑s t = 0
hu₂ : ∀ t_1 ⊆ uᶜ, ↑t t_1 = 0
i : Set α
hi₁ : MeasurableSet i
hi₂ : VectorMeasure.restrict 0 i ≤ VectorMeasure.restrict s i
hi₃ : VectorMeasure.restrict s iᶜ ≤ VectorMeasure.restrict 0 iᶜ
hipos : (toJordanDecomposition s).posPart = toMeasureOfZeroLE s i hi₁ hi₂
hineg : (toJordanDecomposition s).negPart = toMeasureOfLEZero s iᶜ (_ : MeasurableSet iᶜ) hi₃
j : Set α
hj₁ : MeasurableSet j
hj₂ : VectorMeasure.restrict 0 j ≤ VectorMeasure.restrict t j
hj₃ : VectorMeasure.restrict t jᶜ ≤ VectorMeasure.restrict 0 jᶜ
hjpos : (toJordanDecomposition t).posPart = toMeasureOfZeroLE t j hj₁ hj₂
hjneg : (toJordanDecomposition t).negPart = toMeasureOfLEZero t jᶜ (_ : MeasurableSet jᶜ) hj₃
⊢ ↑↑(totalVariation s) u = 0

Next tactic:
rw [totalVariation, Measure.add_apply, hipos, hineg, toMeasureOfZeroLE_apply _ _ _ hmeas,
        toMeasureOfLEZero_apply _ _ _ hmeas]
theorem mutuallySingular_iff (s t : SignedMeasure α) :
    s ⟂ᵥ t ↔ s.totalVariation ⟂ₘ t.totalVariation := by
  constructor
  · rintro ⟨u, hmeas, hu₁, hu₂⟩
    obtain ⟨i, hi₁, hi₂, hi₃, hipos, hineg⟩ := s.toJordanDecomposition_spec
    obtain ⟨j, hj₁, hj₂, hj₃, hjpos, hjneg⟩ := t.toJordanDecomposition_spec
    refine' ⟨u, hmeas, _, _⟩
    · rw [totalVariation, Measure.add_apply, hipos, hineg, toMeasureOfZeroLE_apply _ _ _ hmeas,
        toMeasureOfLEZero_apply _ _ _ hmeas]
      -- Porting note: added `← NNReal.eq_iff`
      

Proof state:
case mp.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.refine'_1
α : Type u_1
β : Type u_2
inst✝ : MeasurableSpace α
s t : SignedMeasure α
u : Set α
hmeas : MeasurableSet u
hu₁ : ∀ t ⊆ u, ↑s t = 0
hu₂ : ∀ t_1 ⊆ uᶜ, ↑t t_1 = 0
i : Set α
hi₁ : MeasurableSet i
hi₂ : VectorMeasure.restrict 0 i ≤ VectorMeasure.restrict s i
hi₃ : VectorMeasure.restrict s iᶜ ≤ VectorMeasure.restrict 0 iᶜ
hipos : (toJordanDecomposition s).posPart = toMeasureOfZeroLE s i hi₁ hi₂
hineg : (toJordanDecomposition s).negPart = toMeasureOfLEZero s iᶜ (_ : MeasurableSet iᶜ) hi₃
j : Set α
hj₁ : MeasurableSet j
hj₂ : VectorMeasure.restrict 0 j ≤ VectorMeasure.restrict t j
hj₃ : VectorMeasure.restrict t jᶜ ≤ VectorMeasure.restrict 0 jᶜ
hjpos : (toJordanDecomposition t).posPart = toMeasureOfZeroLE t j hj₁ hj₂
hjneg : (toJordanDecomposition t).negPart = toMeasureOfLEZero t jᶜ (_ : MeasurableSet jᶜ) hj₃
⊢ ↑{ val := ↑s (i ∩ u), property := (_ : 0 ≤ ↑s (i ∩ u)) } +
      ↑{ val := -↑s (iᶜ ∩ u), property := (_ : 0 ≤ -↑s (iᶜ ∩ u)) } =
    0

Next tactic:
simp [hu₁ _ (Set.inter_subset_right _ _), ← NNReal.eq_iff]
theorem mutuallySingular_iff (s t : SignedMeasure α) :
    s ⟂ᵥ t ↔ s.totalVariation ⟂ₘ t.totalVariation := by
  constructor
  · rintro ⟨u, hmeas, hu₁, hu₂⟩
    obtain ⟨i, hi₁, hi₂, hi₃, hipos, hineg⟩ := s.toJordanDecomposition_spec
    obtain ⟨j, hj₁, hj₂, hj₃, hjpos, hjneg⟩ := t.toJordanDecomposition_spec
    refine' ⟨u, hmeas, _, _⟩
    · rw [totalVariation, Measure.add_apply, hipos, hineg, toMeasureOfZeroLE_apply _ _ _ hmeas,
        toMeasureOfLEZero_apply _ _ _ hmeas]
      -- Porting note: added `← NNReal.eq_iff`
      simp [hu₁ _ (Set.inter_subset_right _ _), ← NNReal.eq_iff]
    · 

Proof state:
case mp.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.refine'_2
α : Type u_1
β : Type u_2
inst✝ : MeasurableSpace α
s t : SignedMeasure α
u : Set α
hmeas : MeasurableSet u
hu₁ : ∀ t ⊆ u, ↑s t = 0
hu₂ : ∀ t_1 ⊆ uᶜ, ↑t t_1 = 0
i : Set α
hi₁ : MeasurableSet i
hi₂ : VectorMeasure.restrict 0 i ≤ VectorMeasure.restrict s i
hi₃ : VectorMeasure.restrict s iᶜ ≤ VectorMeasure.restrict 0 iᶜ
hipos : (toJordanDecomposition s).posPart = toMeasureOfZeroLE s i hi₁ hi₂
hineg : (toJordanDecomposition s).negPart = toMeasureOfLEZero s iᶜ (_ : MeasurableSet iᶜ) hi₃
j : Set α
hj₁ : MeasurableSet j
hj₂ : VectorMeasure.restrict 0 j ≤ VectorMeasure.restrict t j
hj₃ : VectorMeasure.restrict t jᶜ ≤ VectorMeasure.restrict 0 jᶜ
hjpos : (toJordanDecomposition t).posPart = toMeasureOfZeroLE t j hj₁ hj₂
hjneg : (toJordanDecomposition t).negPart = toMeasureOfLEZero t jᶜ (_ : MeasurableSet jᶜ) hj₃
⊢ ↑↑(totalVariation t) uᶜ = 0

Next tactic:
rw [totalVariation, Measure.add_apply, hjpos, hjneg,
        toMeasureOfZeroLE_apply _ _ _ hmeas.compl,
        toMeasureOfLEZero_apply _ _ _ hmeas.compl]
theorem mutuallySingular_iff (s t : SignedMeasure α) :
    s ⟂ᵥ t ↔ s.totalVariation ⟂ₘ t.totalVariation := by
  constructor
  · rintro ⟨u, hmeas, hu₁, hu₂⟩
    obtain ⟨i, hi₁, hi₂, hi₃, hipos, hineg⟩ := s.toJordanDecomposition_spec
    obtain ⟨j, hj₁, hj₂, hj₃, hjpos, hjneg⟩ := t.toJordanDecomposition_spec
    refine' ⟨u, hmeas, _, _⟩
    · rw [totalVariation, Measure.add_apply, hipos, hineg, toMeasureOfZeroLE_apply _ _ _ hmeas,
        toMeasureOfLEZero_apply _ _ _ hmeas]
      -- Porting note: added `← NNReal.eq_iff`
      simp [hu₁ _ (Set.inter_subset_right _ _), ← NNReal.eq_iff]
    · rw [totalVariation, Measure.add_apply, hjpos, hjneg,
        toMeasureOfZeroLE_apply _ _ _ hmeas.compl,
        toMeasureOfLEZero_apply _ _ _ hmeas.compl]
      -- Porting note: added `← NNReal.eq_iff`
      

Proof state:
case mp.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.refine'_2
α : Type u_1
β : Type u_2
inst✝ : MeasurableSpace α
s t : SignedMeasure α
u : Set α
hmeas : MeasurableSet u
hu₁ : ∀ t ⊆ u, ↑s t = 0
hu₂ : ∀ t_1 ⊆ uᶜ, ↑t t_1 = 0
i : Set α
hi₁ : MeasurableSet i
hi₂ : VectorMeasure.restrict 0 i ≤ VectorMeasure.restrict s i
hi₃ : VectorMeasure.restrict s iᶜ ≤ VectorMeasure.restrict 0 iᶜ
hipos : (toJordanDecomposition s).posPart = toMeasureOfZeroLE s i hi₁ hi₂
hineg : (toJordanDecomposition s).negPart = toMeasureOfLEZero s iᶜ (_ : MeasurableSet iᶜ) hi₃
j : Set α
hj₁ : MeasurableSet j
hj₂ : VectorMeasure.restrict 0 j ≤ VectorMeasure.restrict t j
hj₃ : VectorMeasure.restrict t jᶜ ≤ VectorMeasure.restrict 0 jᶜ
hjpos : (toJordanDecomposition t).posPart = toMeasureOfZeroLE t j hj₁ hj₂
hjneg : (toJordanDecomposition t).negPart = toMeasureOfLEZero t jᶜ (_ : MeasurableSet jᶜ) hj₃
⊢ ↑{ val := ↑t (j ∩ uᶜ), property := (_ : 0 ≤ ↑t (j ∩ uᶜ)) } +
      ↑{ val := -↑t (jᶜ ∩ uᶜ), property := (_ : 0 ≤ -↑t (jᶜ ∩ uᶜ)) } =
    0

Next tactic:
simp [hu₂ _ (Set.inter_subset_right _ _), ← NNReal.eq_iff]
theorem mutuallySingular_iff (s t : SignedMeasure α) :
    s ⟂ᵥ t ↔ s.totalVariation ⟂ₘ t.totalVariation := by
  constructor
  · rintro ⟨u, hmeas, hu₁, hu₂⟩
    obtain ⟨i, hi₁, hi₂, hi₃, hipos, hineg⟩ := s.toJordanDecomposition_spec
    obtain ⟨j, hj₁, hj₂, hj₃, hjpos, hjneg⟩ := t.toJordanDecomposition_spec
    refine' ⟨u, hmeas, _, _⟩
    · rw [totalVariation, Measure.add_apply, hipos, hineg, toMeasureOfZeroLE_apply _ _ _ hmeas,
        toMeasureOfLEZero_apply _ _ _ hmeas]
      -- Porting note: added `← NNReal.eq_iff`
      simp [hu₁ _ (Set.inter_subset_right _ _), ← NNReal.eq_iff]
    · rw [totalVariation, Measure.add_apply, hjpos, hjneg,
        toMeasureOfZeroLE_apply _ _ _ hmeas.compl,
        toMeasureOfLEZero_apply _ _ _ hmeas.compl]
      -- Porting note: added `← NNReal.eq_iff`
      simp [hu₂ _ (Set.inter_subset_right _ _), ← NNReal.eq_iff]
  · 

Proof state:
case mpr
α : Type u_1
β : Type u_2
inst✝ : MeasurableSpace α
s t : SignedMeasure α
⊢ totalVariation s ⟂ₘ totalVariation t → s ⟂ᵥ t

Next tactic:
rintro ⟨u, hmeas, hu₁, hu₂⟩
theorem mutuallySingular_iff (s t : SignedMeasure α) :
    s ⟂ᵥ t ↔ s.totalVariation ⟂ₘ t.totalVariation := by
  constructor
  · rintro ⟨u, hmeas, hu₁, hu₂⟩
    obtain ⟨i, hi₁, hi₂, hi₃, hipos, hineg⟩ := s.toJordanDecomposition_spec
    obtain ⟨j, hj₁, hj₂, hj₃, hjpos, hjneg⟩ := t.toJordanDecomposition_spec
    refine' ⟨u, hmeas, _, _⟩
    · rw [totalVariation, Measure.add_apply, hipos, hineg, toMeasureOfZeroLE_apply _ _ _ hmeas,
        toMeasureOfLEZero_apply _ _ _ hmeas]
      -- Porting note: added `← NNReal.eq_iff`
      simp [hu₁ _ (Set.inter_subset_right _ _), ← NNReal.eq_iff]
    · rw [totalVariation, Measure.add_apply, hjpos, hjneg,
        toMeasureOfZeroLE_apply _ _ _ hmeas.compl,
        toMeasureOfLEZero_apply _ _ _ hmeas.compl]
      -- Porting note: added `← NNReal.eq_iff`
      simp [hu₂ _ (Set.inter_subset_right _ _), ← NNReal.eq_iff]
  · rintro ⟨u, hmeas, hu₁, hu₂⟩
    

Proof state:
case mpr.intro.intro.intro
α : Type u_1
β : Type u_2
inst✝ : MeasurableSpace α
s t : SignedMeasure α
u : Set α
hmeas : MeasurableSet u
hu₁ : ↑↑(totalVariation s) u = 0
hu₂ : ↑↑(totalVariation t) uᶜ = 0
⊢ s ⟂ᵥ t

Next tactic:
exact
      ⟨u, hmeas, fun t htu => null_of_totalVariation_zero _ (measure_mono_null htu hu₁),
        fun t htv => null_of_totalVariation_zero _ (measure_mono_null htv hu₂)⟩
theorem mutuallySingular_ennreal_iff (s : SignedMeasure α) (μ : VectorMeasure α ℝ≥0∞) :
    s ⟂ᵥ μ ↔ s.totalVariation ⟂ₘ μ.ennrealToMeasure := by
  

Proof state:
α : Type u_1
β : Type u_2
inst✝ : MeasurableSpace α
s : SignedMeasure α
μ : VectorMeasure α ℝ≥0∞
⊢ s ⟂ᵥ μ ↔ totalVariation s ⟂ₘ VectorMeasure.ennrealToMeasure μ

Next tactic:
constructor
theorem mutuallySingular_ennreal_iff (s : SignedMeasure α) (μ : VectorMeasure α ℝ≥0∞) :
    s ⟂ᵥ μ ↔ s.totalVariation ⟂ₘ μ.ennrealToMeasure := by
  constructor
  · 

Proof state:
case mp
α : Type u_1
β : Type u_2
inst✝ : MeasurableSpace α
s : SignedMeasure α
μ : VectorMeasure α ℝ≥0∞
⊢ s ⟂ᵥ μ → totalVariation s ⟂ₘ VectorMeasure.ennrealToMeasure μ

Next tactic:
rintro ⟨u, hmeas, hu₁, hu₂⟩
theorem mutuallySingular_ennreal_iff (s : SignedMeasure α) (μ : VectorMeasure α ℝ≥0∞) :
    s ⟂ᵥ μ ↔ s.totalVariation ⟂ₘ μ.ennrealToMeasure := by
  constructor
  · rintro ⟨u, hmeas, hu₁, hu₂⟩
    

Proof state:
case mp.intro.intro.intro
α : Type u_1
β : Type u_2
inst✝ : MeasurableSpace α
s : SignedMeasure α
μ : VectorMeasure α ℝ≥0∞
u : Set α
hmeas : MeasurableSet u
hu₁ : ∀ t ⊆ u, ↑s t = 0
hu₂ : ∀ t ⊆ uᶜ, ↑μ t = 0
⊢ totalVariation s ⟂ₘ VectorMeasure.ennrealToMeasure μ

Next tactic:
obtain ⟨i, hi₁, hi₂, hi₃, hpos, hneg⟩ := s.toJordanDecomposition_spec