Theorem: MeasureTheory.sigmaFinite_bot_iff
File: Mathlib/MeasureTheory/Measure/MeasureSpace.lean

tactic: refine'
  ⟨fun h => ⟨_⟩, fun h => by
    haveI := h
    infer_instance⟩
state_before: α : Type u_1
β : Type ?u.760205
γ : Type ?u.760208
δ : Type ?u.760211
ι : Type ?u.760214
R : Type ?u.760217
R' : Type ?u.760220
m0 : MeasurableSpace α
inst✝¹ : MeasurableSpace β
inst✝ : MeasurableSpace γ
μ✝ μ₁ μ₂ μ₃ ν ν' ν₁ ν₂ : Measure α
s s' t : Set α
μ : Measure α
⊢ SigmaFinite μ ↔ IsFiniteMeasure μ

tactic: haveI : SigmaFinite μ := h
state_before: α : Type u_1
β : Type ?u.760205
γ : Type ?u.760208
δ : Type ?u.760211
ι : Type ?u.760214
R : Type ?u.760217
R' : Type ?u.760220
m0 : MeasurableSpace α
inst✝¹ : MeasurableSpace β
inst✝ : MeasurableSpace γ
μ✝ μ₁ μ₂ μ₃ ν ν' ν₁ ν₂ : Measure α
s s' t : Set α
μ : Measure α
h : SigmaFinite μ
⊢ ↑↑μ univ < ⊤

tactic: let s := spanningSets μ
state_before: α : Type u_1
β : Type ?u.760205
γ : Type ?u.760208
δ : Type ?u.760211
ι : Type ?u.760214
R : Type ?u.760217
R' : Type ?u.760220
m0 : MeasurableSpace α
inst✝¹ : MeasurableSpace β
inst✝ : MeasurableSpace γ
μ✝ μ₁ μ₂ μ₃ ν ν' ν₁ ν₂ : Measure α
s s' t : Set α
μ : Measure α
h this : SigmaFinite μ
⊢ ↑↑μ univ < ⊤

tactic: have hs_univ : (⋃ i, s i) = Set.univ := iUnion_spanningSets μ
state_before: α : Type u_1
β : Type ?u.760205
γ : Type ?u.760208
δ : Type ?u.760211
ι : Type ?u.760214
R : Type ?u.760217
R' : Type ?u.760220
m0 : MeasurableSpace α
inst✝¹ : MeasurableSpace β
inst✝ : MeasurableSpace γ
μ✝ μ₁ μ₂ μ₃ ν ν' ν₁ ν₂ : Measure α
s✝ s' t : Set α
μ : Measure α
h this : SigmaFinite μ
s : ℕ → Set α := spanningSets μ
⊢ ↑↑μ univ < ⊤

tactic: have hs_meas : ∀ i, MeasurableSet[⊥] (s i) := measurable_spanningSets μ
state_before: α : Type u_1
β : Type ?u.760205
γ : Type ?u.760208
δ : Type ?u.760211
ι : Type ?u.760214
R : Type ?u.760217
R' : Type ?u.760220
m0 : MeasurableSpace α
inst✝¹ : MeasurableSpace β
inst✝ : MeasurableSpace γ
μ✝ μ₁ μ₂ μ₃ ν ν' ν₁ ν₂ : Measure α
s✝ s' t : Set α
μ : Measure α
h this : SigmaFinite μ
s : ℕ → Set α := spanningSets μ
hs_univ : (⋃ (i : ℕ), s i) = univ
⊢ ↑↑μ univ < ⊤

tactic: simp_rw [MeasurableSpace.measurableSet_bot_iff] at hs_meas
state_before: α : Type u_1
β : Type ?u.760205
γ : Type ?u.760208
δ : Type ?u.760211
ι : Type ?u.760214
R : Type ?u.760217
R' : Type ?u.760220
m0 : MeasurableSpace α
inst✝¹ : MeasurableSpace β
inst✝ : MeasurableSpace γ
μ✝ μ₁ μ₂ μ₃ ν ν' ν₁ ν₂ : Measure α
s✝ s' t : Set α
μ : Measure α
h this : SigmaFinite μ
s : ℕ → Set α := spanningSets μ
hs_univ : (⋃ (i : ℕ), s i) = univ
hs_meas : ∀ (i : ℕ), MeasurableSet (s i)
⊢ ↑↑μ univ < ⊤

tactic: by_cases h_univ_empty : Set.univ = ∅
state_before: α : Type u_1
β : Type ?u.760205
γ : Type ?u.760208
δ : Type ?u.760211
ι : Type ?u.760214
R : Type ?u.760217
R' : Type ?u.760220
m0 : MeasurableSpace α
inst✝¹ : MeasurableSpace β
inst✝ : MeasurableSpace γ
μ✝ μ₁ μ₂ μ₃ ν ν' ν₁ ν₂ : Measure α
s✝ s' t : Set α
μ : Measure α
h this : SigmaFinite μ
s : ℕ → Set α := spanningSets μ
hs_univ : (⋃ (i : ℕ), s i) = univ
hs_meas : ∀ (i : ℕ), spanningSets μ i = ∅ ∨ spanningSets μ i = univ
⊢ ↑↑μ univ < ⊤

tactic: obtain ⟨i, hsi⟩ : ∃ i, s i = Set.univ := by
  by_contra h_not_univ
  push_neg  at h_not_univ
  have h_empty : ∀ i, s i = ∅ := by simpa [h_not_univ] using hs_meas
  simp [h_empty] at hs_univ
  exact h_univ_empty hs_univ.symm
state_before: case inr
α : Type u_1
β : Type ?u.760205
γ : Type ?u.760208
δ : Type ?u.760211
ι : Type ?u.760214
R : Type ?u.760217
R' : Type ?u.760220
m0 : MeasurableSpace α
inst✝¹ : MeasurableSpace β
inst✝ : MeasurableSpace γ
μ✝ μ₁ μ₂ μ₃ ν ν' ν₁ ν₂ : Measure α
s✝ s' t : Set α
μ : Measure α
h this : SigmaFinite μ
s : ℕ → Set α := spanningSets μ
hs_univ : (⋃ (i : ℕ), s i) = univ
hs_meas : ∀ (i : ℕ), spanningSets μ i = ∅ ∨ spanningSets μ i = univ
h_univ_empty : ¬univ = ∅
⊢ ↑↑μ univ < ⊤

tactic: rw [← hsi]
state_before: case inr.intro
α : Type u_1
β : Type ?u.760205
γ : Type ?u.760208
δ : Type ?u.760211
ι : Type ?u.760214
R : Type ?u.760217
R' : Type ?u.760220
m0 : MeasurableSpace α
inst✝¹ : MeasurableSpace β
inst✝ : MeasurableSpace γ
μ✝ μ₁ μ₂ μ₃ ν ν' ν₁ ν₂ : Measure α
s✝ s' t : Set α
μ : Measure α
h this : SigmaFinite μ
s : ℕ → Set α := spanningSets μ
hs_univ : (⋃ (i : ℕ), s i) = univ
hs_meas : ∀ (i : ℕ), spanningSets μ i = ∅ ∨ spanningSets μ i = univ
h_univ_empty : ¬univ = ∅
i : ℕ
hsi : s i = univ
⊢ ↑↑μ univ < ⊤

tactic: exact measure_spanningSets_lt_top μ i
state_before: case inr.intro
α : Type u_1
β : Type ?u.760205
γ : Type ?u.760208
δ : Type ?u.760211
ι : Type ?u.760214
R : Type ?u.760217
R' : Type ?u.760220
m0 : MeasurableSpace α
inst✝¹ : MeasurableSpace β
inst✝ : MeasurableSpace γ
μ✝ μ₁ μ₂ μ₃ ν ν' ν₁ ν₂ : Measure α
s✝ s' t : Set α
μ : Measure α
h this : SigmaFinite μ
s : ℕ → Set α := spanningSets μ
hs_univ : (⋃ (i : ℕ), s i) = univ
hs_meas : ∀ (i : ℕ), spanningSets μ i = ∅ ∨ spanningSets μ i = univ
h_univ_empty : ¬univ = ∅
i : ℕ
hsi : s i = univ
⊢ ↑↑μ (s i) < ⊤

tactic: haveI := h
state_before: α : Type u_1
β : Type ?u.760205
γ : Type ?u.760208
δ : Type ?u.760211
ι : Type ?u.760214
R : Type ?u.760217
R' : Type ?u.760220
m0 : MeasurableSpace α
inst✝¹ : MeasurableSpace β
inst✝ : MeasurableSpace γ
μ✝ μ₁ μ₂ μ₃ ν ν' ν₁ ν₂ : Measure α
s s' t : Set α
μ : Measure α
h : IsFiniteMeasure μ
⊢ SigmaFinite μ

tactic: infer_instance
state_before: α : Type u_1
β : Type ?u.760205
γ : Type ?u.760208
δ : Type ?u.760211
ι : Type ?u.760214
R : Type ?u.760217
R' : Type ?u.760220
m0 : MeasurableSpace α
inst✝¹ : MeasurableSpace β
inst✝ : MeasurableSpace γ
μ✝ μ₁ μ₂ μ₃ ν ν' ν₁ ν₂ : Measure α
s s' t : Set α
μ : Measure α
h this : IsFiniteMeasure μ
⊢ SigmaFinite μ

tactic: rw [h_univ_empty, @measure_empty α ⊥]
state_before: case inl
α : Type u_1
β : Type ?u.760205
γ : Type ?u.760208
δ : Type ?u.760211
ι : Type ?u.760214
R : Type ?u.760217
R' : Type ?u.760220
m0 : MeasurableSpace α
inst✝¹ : MeasurableSpace β
inst✝ : MeasurableSpace γ
μ✝ μ₁ μ₂ μ₃ ν ν' ν₁ ν₂ : Measure α
s✝ s' t : Set α
μ : Measure α
h this : SigmaFinite μ
s : ℕ → Set α := spanningSets μ
hs_univ : (⋃ (i : ℕ), s i) = univ
hs_meas : ∀ (i : ℕ), spanningSets μ i = ∅ ∨ spanningSets μ i = univ
h_univ_empty : univ = ∅
⊢ ↑↑μ univ < ⊤

tactic: exact ENNReal.zero_ne_top.lt_top
state_before: case inl
α : Type u_1
β : Type ?u.760205
γ : Type ?u.760208
δ : Type ?u.760211
ι : Type ?u.760214
R : Type ?u.760217
R' : Type ?u.760220
m0 : MeasurableSpace α
inst✝¹ : MeasurableSpace β
inst✝ : MeasurableSpace γ
μ✝ μ₁ μ₂ μ₃ ν ν' ν₁ ν₂ : Measure α
s✝ s' t : Set α
μ : Measure α
h this : SigmaFinite μ
s : ℕ → Set α := spanningSets μ
hs_univ : (⋃ (i : ℕ), s i) = univ
hs_meas : ∀ (i : ℕ), spanningSets μ i = ∅ ∨ spanningSets μ i = univ
h_univ_empty : univ = ∅
⊢ 0 < ⊤

tactic: by_contra h_not_univ
state_before: α : Type u_1
β : Type ?u.760205
γ : Type ?u.760208
δ : Type ?u.760211
ι : Type ?u.760214
R : Type ?u.760217
R' : Type ?u.760220
m0 : MeasurableSpace α
inst✝¹ : MeasurableSpace β
inst✝ : MeasurableSpace γ
μ✝ μ₁ μ₂ μ₃ ν ν' ν₁ ν₂ : Measure α
s✝ s' t : Set α
μ : Measure α
h this : SigmaFinite μ
s : ℕ → Set α := spanningSets μ
hs_univ : (⋃ (i : ℕ), s i) = univ
hs_meas : ∀ (i : ℕ), spanningSets μ i = ∅ ∨ spanningSets μ i = univ
h_univ_empty : ¬univ = ∅
⊢ ∃ i, s i = univ

tactic: push_neg  at h_not_univ
state_before: α : Type u_1
β : Type ?u.760205
γ : Type ?u.760208
δ : Type ?u.760211
ι : Type ?u.760214
R : Type ?u.760217
R' : Type ?u.760220
m0 : MeasurableSpace α
inst✝¹ : MeasurableSpace β
inst✝ : MeasurableSpace γ
μ✝ μ₁ μ₂ μ₃ ν ν' ν₁ ν₂ : Measure α
s✝ s' t : Set α
μ : Measure α
h this : SigmaFinite μ
s : ℕ → Set α := spanningSets μ
hs_univ : (⋃ (i : ℕ), s i) = univ
hs_meas : ∀ (i : ℕ), spanningSets μ i = ∅ ∨ spanningSets μ i = univ
h_univ_empty : ¬univ = ∅
h_not_univ : ¬∃ i, s i = univ
⊢ False

tactic: have h_empty : ∀ i, s i = ∅ := by simpa [h_not_univ] using hs_meas
state_before: α : Type u_1
β : Type ?u.760205
γ : Type ?u.760208
δ : Type ?u.760211
ι : Type ?u.760214
R : Type ?u.760217
R' : Type ?u.760220
m0 : MeasurableSpace α
inst✝¹ : MeasurableSpace β
inst✝ : MeasurableSpace γ
μ✝ μ₁ μ₂ μ₃ ν ν' ν₁ ν₂ : Measure α
s✝ s' t : Set α
μ : Measure α
h this : SigmaFinite μ
s : ℕ → Set α := spanningSets μ
hs_univ : (⋃ (i : ℕ), s i) = univ
hs_meas : ∀ (i : ℕ), spanningSets μ i = ∅ ∨ spanningSets μ i = univ
h_univ_empty : ¬univ = ∅
h_not_univ : ∀ (i : ℕ), spanningSets μ i ≠ univ
⊢ False

tactic: simp [h_empty] at hs_univ
state_before: α : Type u_1
β : Type ?u.760205
γ : Type ?u.760208
δ : Type ?u.760211
ι : Type ?u.760214
R : Type ?u.760217
R' : Type ?u.760220
m0 : MeasurableSpace α
inst✝¹ : MeasurableSpace β
inst✝ : MeasurableSpace γ
μ✝ μ₁ μ₂ μ₃ ν ν' ν₁ ν₂ : Measure α
s✝ s' t : Set α
μ : Measure α
h this : SigmaFinite μ
s : ℕ → Set α := spanningSets μ
hs_univ : (⋃ (i : ℕ), s i) = univ
hs_meas : ∀ (i : ℕ), spanningSets μ i = ∅ ∨ spanningSets μ i = univ
h_univ_empty : ¬univ = ∅
h_not_univ : ∀ (i : ℕ), spanningSets μ i ≠ univ
h_empty : ∀ (i : ℕ), s i = ∅
⊢ False

tactic: exact h_univ_empty hs_univ.symm
state_before: α : Type u_1
β : Type ?u.760205
γ : Type ?u.760208
δ : Type ?u.760211
ι : Type ?u.760214
R : Type ?u.760217
R' : Type ?u.760220
m0 : MeasurableSpace α
inst✝¹ : MeasurableSpace β
inst✝ : MeasurableSpace γ
μ✝ μ₁ μ₂ μ₃ ν ν' ν₁ ν₂ : Measure α
s✝ s' t : Set α
μ : Measure α
h this : SigmaFinite μ
s : ℕ → Set α := spanningSets μ
hs_meas : ∀ (i : ℕ), spanningSets μ i = ∅ ∨ spanningSets μ i = univ
h_univ_empty : ¬univ = ∅
h_not_univ : ∀ (i : ℕ), spanningSets μ i ≠ univ
h_empty : ∀ (i : ℕ), s i = ∅
hs_univ : ∅ = univ
⊢ False

tactic: simpa [h_not_univ] using hs_meas
state_before: α : Type u_1
β : Type ?u.760205
γ : Type ?u.760208
δ : Type ?u.760211
ι : Type ?u.760214
R : Type ?u.760217
R' : Type ?u.760220
m0 : MeasurableSpace α
inst✝¹ : MeasurableSpace β
inst✝ : MeasurableSpace γ
μ✝ μ₁ μ₂ μ₃ ν ν' ν₁ ν₂ : Measure α
s✝ s' t : Set α
μ : Measure α
h this : SigmaFinite μ
s : ℕ → Set α := spanningSets μ
hs_univ : (⋃ (i : ℕ), s i) = univ
hs_meas : ∀ (i : ℕ), spanningSets μ i = ∅ ∨ spanningSets μ i = univ
h_univ_empty : ¬univ = ∅
h_not_univ : ∀ (i : ℕ), spanningSets μ i ≠ univ
⊢ ∀ (i : ℕ), s i = ∅