Theorem: MeasurableEmbedding.sigmaFinite_map
File: Mathlib/MeasureTheory/Measure/Typeclasses.lean

tactic: refine ⟨fun n ↦ f '' (spanningSets μ n) ∪ (Set.range f)ᶜ, by simp, fun n ↦ ?_, ?_⟩
state_before: α : Type u_1
β : Type u_2
δ : Type u_3
ι : Type u_4
m0 : MeasurableSpace α
inst✝¹ : MeasurableSpace β
μ ν ν₁ ν₂ : Measure α
s t : Set α
f : α → β
hf : MeasurableEmbedding f
inst✝ : SigmaFinite μ
⊢ SigmaFinite (Measure.map f μ)
state_after: case refine_1
α : Type u_1
β : Type u_2
δ : Type u_3
ι : Type u_4
m0 : MeasurableSpace α
inst✝¹ : MeasurableSpace β
μ ν ν₁ ν₂ : Measure α
s t : Set α
f : α → β
hf : MeasurableEmbedding f
inst✝ : SigmaFinite μ
n : ℕ
⊢ (Measure.map f μ) ((fun n => f '' spanningSets μ n ∪ (range f)ᶜ) n) < ⊤

case refine_2
α : Type u_1
β : Type u_2
δ : Type u_3
ι : Type u_4
m0 : MeasurableSpace α
inst✝¹ : MeasurableSpace β
μ ν ν₁ ν₂ : Measure α
s t : Set α
f : α → β
hf : MeasurableEmbedding f
inst✝ : SigmaFinite μ
⊢ ⋃ i, (fun n => f '' spanningSets μ n ∪ (range f)ᶜ) i = univ

tactic: simp
state_before: α : Type u_1
β : Type u_2
δ : Type u_3
ι : Type u_4
m0 : MeasurableSpace α
inst✝¹ : MeasurableSpace β
μ ν ν₁ ν₂ : Measure α
s t : Set α
f : α → β
hf : MeasurableEmbedding f
inst✝ : SigmaFinite μ
⊢ ∀ (i : ℕ), (fun n => f '' spanningSets μ n ∪ (range f)ᶜ) i ∈ univ
state_after: no goals

tactic: rw [hf.map_apply, Set.preimage_union]
state_before: case refine_1
α : Type u_1
β : Type u_2
δ : Type u_3
ι : Type u_4
m0 : MeasurableSpace α
inst✝¹ : MeasurableSpace β
μ ν ν₁ ν₂ : Measure α
s t : Set α
f : α → β
hf : MeasurableEmbedding f
inst✝ : SigmaFinite μ
n : ℕ
⊢ (Measure.map f μ) ((fun n => f '' spanningSets μ n ∪ (range f)ᶜ) n) < ⊤
state_after: case refine_1
α : Type u_1
β : Type u_2
δ : Type u_3
ι : Type u_4
m0 : MeasurableSpace α
inst✝¹ : MeasurableSpace β
μ ν ν₁ ν₂ : Measure α
s t : Set α
f : α → β
hf : MeasurableEmbedding f
inst✝ : SigmaFinite μ
n : ℕ
⊢ μ (f ⁻¹' (f '' spanningSets μ n) ∪ f ⁻¹' (range f)ᶜ) < ⊤

tactic: simp only [Set.preimage_compl, Set.preimage_range, Set.compl_univ, Set.union_empty,
  Set.preimage_image_eq _ hf.injective]
state_before: case refine_1
α : Type u_1
β : Type u_2
δ : Type u_3
ι : Type u_4
m0 : MeasurableSpace α
inst✝¹ : MeasurableSpace β
μ ν ν₁ ν₂ : Measure α
s t : Set α
f : α → β
hf : MeasurableEmbedding f
inst✝ : SigmaFinite μ
n : ℕ
⊢ μ (f ⁻¹' (f '' spanningSets μ n) ∪ f ⁻¹' (range f)ᶜ) < ⊤
state_after: case refine_1
α : Type u_1
β : Type u_2
δ : Type u_3
ι : Type u_4
m0 : MeasurableSpace α
inst✝¹ : MeasurableSpace β
μ ν ν₁ ν₂ : Measure α
s t : Set α
f : α → β
hf : MeasurableEmbedding f
inst✝ : SigmaFinite μ
n : ℕ
⊢ μ (spanningSets μ n) < ⊤

tactic: exact measure_spanningSets_lt_top μ n
state_before: case refine_1
α : Type u_1
β : Type u_2
δ : Type u_3
ι : Type u_4
m0 : MeasurableSpace α
inst✝¹ : MeasurableSpace β
μ ν ν₁ ν₂ : Measure α
s t : Set α
f : α → β
hf : MeasurableEmbedding f
inst✝ : SigmaFinite μ
n : ℕ
⊢ μ (spanningSets μ n) < ⊤
state_after: no goals

tactic: rw [← Set.iUnion_union, ← Set.image_iUnion, iUnion_spanningSets,
  Set.image_univ, Set.union_compl_self]
state_before: case refine_2
α : Type u_1
β : Type u_2
δ : Type u_3
ι : Type u_4
m0 : MeasurableSpace α
inst✝¹ : MeasurableSpace β
μ ν ν₁ ν₂ : Measure α
s t : Set α
f : α → β
hf : MeasurableEmbedding f
inst✝ : SigmaFinite μ
⊢ ⋃ i, (fun n => f '' spanningSets μ n ∪ (range f)ᶜ) i = univ
state_after: no goals