Theorem: MeasureTheory.analyticSet_range_of_polishSpace
File: Mathlib/MeasureTheory/Constructions/Polish.lean

tactic: cases isEmpty_or_nonempty β
state_before: α : Type u_1
ι : Type u_2
inst✝² : TopologicalSpace α
β : Type u_3
inst✝¹ : TopologicalSpace β
inst✝ : PolishSpace β
f : β → α
f_cont : Continuous f
⊢ AnalyticSet (range f)
state_after: case inl
α : Type u_1
ι : Type u_2
inst✝² : TopologicalSpace α
β : Type u_3
inst✝¹ : TopologicalSpace β
inst✝ : PolishSpace β
f : β → α
f_cont : Continuous f
h✝ : IsEmpty β
⊢ AnalyticSet (range f)

case inr
α : Type u_1
ι : Type u_2
inst✝² : TopologicalSpace α
β : Type u_3
inst✝¹ : TopologicalSpace β
inst✝ : PolishSpace β
f : β → α
f_cont : Continuous f
h✝ : Nonempty β
⊢ AnalyticSet (range f)

tactic: rw [range_eq_empty]
state_before: case inl
α : Type u_1
ι : Type u_2
inst✝² : TopologicalSpace α
β : Type u_3
inst✝¹ : TopologicalSpace β
inst✝ : PolishSpace β
f : β → α
f_cont : Continuous f
h✝ : IsEmpty β
⊢ AnalyticSet (range f)
state_after: case inl
α : Type u_1
ι : Type u_2
inst✝² : TopologicalSpace α
β : Type u_3
inst✝¹ : TopologicalSpace β
inst✝ : PolishSpace β
f : β → α
f_cont : Continuous f
h✝ : IsEmpty β
⊢ AnalyticSet ∅

tactic: exact analyticSet_empty
state_before: case inl
α : Type u_1
ι : Type u_2
inst✝² : TopologicalSpace α
β : Type u_3
inst✝¹ : TopologicalSpace β
inst✝ : PolishSpace β
f : β → α
f_cont : Continuous f
h✝ : IsEmpty β
⊢ AnalyticSet ∅
state_after: no goals

tactic: rw [AnalyticSet]
state_before: case inr
α : Type u_1
ι : Type u_2
inst✝² : TopologicalSpace α
β : Type u_3
inst✝¹ : TopologicalSpace β
inst✝ : PolishSpace β
f : β → α
f_cont : Continuous f
h✝ : Nonempty β
⊢ AnalyticSet (range f)
state_after: case inr
α : Type u_1
ι : Type u_2
inst✝² : TopologicalSpace α
β : Type u_3
inst✝¹ : TopologicalSpace β
inst✝ : PolishSpace β
f : β → α
f_cont : Continuous f
h✝ : Nonempty β
⊢ range f = ∅ ∨ ∃ f_1, Continuous f_1 ∧ range f_1 = range f

tactic: obtain ⟨g, g_cont, hg⟩ : ∃ g : (ℕ → ℕ) → β, Continuous g ∧ Surjective g :=
  exists_nat_nat_continuous_surjective β
state_before: case inr
α : Type u_1
ι : Type u_2
inst✝² : TopologicalSpace α
β : Type u_3
inst✝¹ : TopologicalSpace β
inst✝ : PolishSpace β
f : β → α
f_cont : Continuous f
h✝ : Nonempty β
⊢ range f = ∅ ∨ ∃ f_1, Continuous f_1 ∧ range f_1 = range f
state_after: case inr.intro.intro
α : Type u_1
ι : Type u_2
inst✝² : TopologicalSpace α
β : Type u_3
inst✝¹ : TopologicalSpace β
inst✝ : PolishSpace β
f : β → α
f_cont : Continuous f
h✝ : Nonempty β
g : (ℕ → ℕ) → β
g_cont : Continuous g
hg : Surjective g
⊢ range f = ∅ ∨ ∃ f_1, Continuous f_1 ∧ range f_1 = range f

tactic: refine Or.inr ⟨f ∘ g, f_cont.comp g_cont, ?_⟩
state_before: case inr.intro.intro
α : Type u_1
ι : Type u_2
inst✝² : TopologicalSpace α
β : Type u_3
inst✝¹ : TopologicalSpace β
inst✝ : PolishSpace β
f : β → α
f_cont : Continuous f
h✝ : Nonempty β
g : (ℕ → ℕ) → β
g_cont : Continuous g
hg : Surjective g
⊢ range f = ∅ ∨ ∃ f_1, Continuous f_1 ∧ range f_1 = range f
state_after: case inr.intro.intro
α : Type u_1
ι : Type u_2
inst✝² : TopologicalSpace α
β : Type u_3
inst✝¹ : TopologicalSpace β
inst✝ : PolishSpace β
f : β → α
f_cont : Continuous f
h✝ : Nonempty β
g : (ℕ → ℕ) → β
g_cont : Continuous g
hg : Surjective g
⊢ range (f ∘ g) = range f

tactic: rw [hg.range_comp]
state_before: case inr.intro.intro
α : Type u_1
ι : Type u_2
inst✝² : TopologicalSpace α
β : Type u_3
inst✝¹ : TopologicalSpace β
inst✝ : PolishSpace β
f : β → α
f_cont : Continuous f
h✝ : Nonempty β
g : (ℕ → ℕ) → β
g_cont : Continuous g
hg : Surjective g
⊢ range (f ∘ g) = range f
state_after: no goals