[GOAL]
α : Type u_1
inst✝ : TopologicalSpace α
ι : Type u_2
⊢ AnalyticSet ∅
[PROOFSTEP]
rw [AnalyticSet]
[GOAL]
α : Type u_1
inst✝ : TopologicalSpace α
ι : Type u_2
⊢ ∅ = ∅ ∨ ∃ f, Continuous f ∧ range f = ∅
[PROOFSTEP]
exact Or.inl rfl
[GOAL]
α : Type u_1
inst✝² : TopologicalSpace α
ι : Type u_2
β : Type u_3
inst✝¹ : TopologicalSpace β
inst✝ : PolishSpace β
f : β → α
f_cont : Continuous f
⊢ AnalyticSet (range f)
[PROOFSTEP]
cases isEmpty_or_nonempty β
[GOAL]
case inl
α : Type u_1
inst✝² : TopologicalSpace α
ι : Type u_2
β : Type u_3
inst✝¹ : TopologicalSpace β
inst✝ : PolishSpace β
f : β → α
f_cont : Continuous f
h✝ : IsEmpty β
⊢ AnalyticSet (range f)
[PROOFSTEP]
rw [range_eq_empty]
[GOAL]
case inl
α : Type u_1
inst✝² : TopologicalSpace α
ι : Type u_2
β : Type u_3
inst✝¹ : TopologicalSpace β
inst✝ : PolishSpace β
f : β → α
f_cont : Continuous f
h✝ : IsEmpty β
⊢ AnalyticSet ∅
[PROOFSTEP]
exact analyticSet_empty
[GOAL]
case inr
α : Type u_1
inst✝² : TopologicalSpace α
ι : Type u_2
β : Type u_3
inst✝¹ : TopologicalSpace β
inst✝ : PolishSpace β
f : β → α
f_cont : Continuous f
h✝ : Nonempty β
⊢ AnalyticSet (range f)
[PROOFSTEP]
rw [AnalyticSet]
[GOAL]
case inr
α : Type u_1
inst✝² : TopologicalSpace α
ι : Type u_2
β : 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
[PROOFSTEP]
obtain ⟨g, g_cont, hg⟩ : ∃ g : (ℕ → ℕ) → β, Continuous g ∧ Surjective g := exists_nat_nat_continuous_surjective β
[GOAL]
case inr.intro.intro
α : Type u_1
inst✝² : TopologicalSpace α
ι : Type u_2
β : 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
[PROOFSTEP]
refine' Or.inr ⟨f ∘ g, f_cont.comp g_cont, _⟩
[GOAL]
case inr.intro.intro
α : Type u_1
inst✝² : TopologicalSpace α
ι : Type u_2
β : 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
[PROOFSTEP]
rw [hg.range_comp]
[GOAL]
α : Type u_1
inst✝² : TopologicalSpace α
ι : Type u_2
β : Type u_3
inst✝¹ : TopologicalSpace β
inst✝ : PolishSpace β
s : Set β
hs : IsOpen s
f : β → α
f_cont : Continuous f
⊢ AnalyticSet (f '' s)
[PROOFSTEP]
rw [image_eq_range]
[GOAL]
α : Type u_1
inst✝² : TopologicalSpace α
ι : Type u_2
β : Type u_3
inst✝¹ : TopologicalSpace β
inst✝ : PolishSpace β
s : Set β
hs : IsOpen s
f : β → α
f_cont : Continuous f
⊢ AnalyticSet (range fun x => f ↑x)
[PROOFSTEP]
haveI : PolishSpace s := hs.polishSpace
[GOAL]
α : Type u_1
inst✝² : TopologicalSpace α
ι : Type u_2
β : Type u_3
inst✝¹ : TopologicalSpace β
inst✝ : PolishSpace β
s : Set β
hs : IsOpen s
f : β → α
f_cont : Continuous f
this : PolishSpace ↑s
⊢ AnalyticSet (range fun x => f ↑x)
[PROOFSTEP]
exact analyticSet_range_of_polishSpace (f_cont.comp continuous_subtype_val)
[GOAL]
α : Type u_1
inst✝ : TopologicalSpace α
ι : Type u_2
s : Set α
⊢ AnalyticSet s ↔ ∃ β h x f, Continuous f ∧ range f = s
[PROOFSTEP]
constructor
[GOAL]
case mp
α : Type u_1
inst✝ : TopologicalSpace α
ι : Type u_2
s : Set α
⊢ AnalyticSet s → ∃ β h x f, Continuous f ∧ range f = s
[PROOFSTEP]
intro h
[GOAL]
case mp
α : Type u_1
inst✝ : TopologicalSpace α
ι : Type u_2
s : Set α
h : AnalyticSet s
⊢ ∃ β h x f, Continuous f ∧ range f = s
[PROOFSTEP]
rw [AnalyticSet] at h
[GOAL]
case mp
α : Type u_1
inst✝ : TopologicalSpace α
ι : Type u_2
s : Set α
h : s = ∅ ∨ ∃ f, Continuous f ∧ range f = s
⊢ ∃ β h x f, Continuous f ∧ range f = s
[PROOFSTEP]
cases' h with h h
[GOAL]
case mp.inl
α : Type u_1
inst✝ : TopologicalSpace α
ι : Type u_2
s : Set α
h : s = ∅
⊢ ∃ β h x f, Continuous f ∧ range f = s
[PROOFSTEP]
refine' ⟨Empty, inferInstance, inferInstance, Empty.elim, continuous_bot, _⟩
[GOAL]
case mp.inl
α : Type u_1
inst✝ : TopologicalSpace α
ι : Type u_2
s : Set α
h : s = ∅
⊢ range Empty.elim = s
[PROOFSTEP]
rw [h]
[GOAL]
case mp.inl
α : Type u_1
inst✝ : TopologicalSpace α
ι : Type u_2
s : Set α
h : s = ∅
⊢ range Empty.elim = ∅
[PROOFSTEP]
exact range_eq_empty _
[GOAL]
case mp.inr
α : Type u_1
inst✝ : TopologicalSpace α
ι : Type u_2
s : Set α
h : ∃ f, Continuous f ∧ range f = s
⊢ ∃ β h x f, Continuous f ∧ range f = s
[PROOFSTEP]
exact ⟨ℕ → ℕ, inferInstance, inferInstance, h⟩
[GOAL]
case mpr
α : Type u_1
inst✝ : TopologicalSpace α
ι : Type u_2
s : Set α
⊢ (∃ β h x f, Continuous f ∧ range f = s) → AnalyticSet s
[PROOFSTEP]
rintro ⟨β, h, h', f, f_cont, f_range⟩
[GOAL]
case mpr.intro.intro.intro.intro.intro
α : Type u_1
inst✝ : TopologicalSpace α
ι : Type u_2
s : Set α
β : Type
h : TopologicalSpace β
h' : PolishSpace β
f : β → α
f_cont : Continuous f
f_range : range f = s
⊢ AnalyticSet s
[PROOFSTEP]
skip
[GOAL]
case mpr.intro.intro.intro.intro.intro
α : Type u_1
inst✝ : TopologicalSpace α
ι : Type u_2
s : Set α
β : Type
h : TopologicalSpace β
h' : PolishSpace β
f : β → α
f_cont : Continuous f
f_range : range f = s
⊢ AnalyticSet s
[PROOFSTEP]
rw [← f_range]
[GOAL]
case mpr.intro.intro.intro.intro.intro
α : Type u_1
inst✝ : TopologicalSpace α
ι : Type u_2
s : Set α
β : Type
h : TopologicalSpace β
h' : PolishSpace β
f : β → α
f_cont : Continuous f
f_range : range f = s
⊢ AnalyticSet (range f)
[PROOFSTEP]
exact analyticSet_range_of_polishSpace f_cont
[GOAL]
α : Type u_1
inst✝¹ : TopologicalSpace α
ι : Type u_2
β : Type u_3
inst✝ : TopologicalSpace β
s : Set α
hs : AnalyticSet s
f : α → β
hf : ContinuousOn f s
⊢ AnalyticSet (f '' s)
[PROOFSTEP]
rcases analyticSet_iff_exists_polishSpace_range.1 hs with ⟨γ, γtop, γpolish, g, g_cont, gs⟩
[GOAL]
case intro.intro.intro.intro.intro
α : Type u_1
inst✝¹ : TopologicalSpace α
ι : Type u_2
β : Type u_3
inst✝ : TopologicalSpace β
s : Set α
hs : AnalyticSet s
f : α → β
hf : ContinuousOn f s
γ : Type
γtop : TopologicalSpace γ
γpolish : PolishSpace γ
g : γ → α
g_cont : Continuous g
gs : range g = s
⊢ AnalyticSet (f '' s)
[PROOFSTEP]
skip
[GOAL]
case intro.intro.intro.intro.intro
α : Type u_1
inst✝¹ : TopologicalSpace α
ι : Type u_2
β : Type u_3
inst✝ : TopologicalSpace β
s : Set α
hs : AnalyticSet s
f : α → β
hf : ContinuousOn f s
γ : Type
γtop : TopologicalSpace γ
γpolish : PolishSpace γ
g : γ → α
g_cont : Continuous g
gs : range g = s
⊢ AnalyticSet (f '' s)
[PROOFSTEP]
have : f '' s = range (f ∘ g) := by rw [range_comp, gs]
[GOAL]
α : Type u_1
inst✝¹ : TopologicalSpace α
ι : Type u_2
β : Type u_3
inst✝ : TopologicalSpace β
s : Set α
hs : AnalyticSet s
f : α → β
hf : ContinuousOn f s
γ : Type
γtop : TopologicalSpace γ
γpolish : PolishSpace γ
g : γ → α
g_cont : Continuous g
gs : range g = s
⊢ f '' s = range (f ∘ g)
[PROOFSTEP]
rw [range_comp, gs]
[GOAL]
case intro.intro.intro.intro.intro
α : Type u_1
inst✝¹ : TopologicalSpace α
ι : Type u_2
β : Type u_3
inst✝ : TopologicalSpace β
s : Set α
hs : AnalyticSet s
f : α → β
hf : ContinuousOn f s
γ : Type
γtop : TopologicalSpace γ
γpolish : PolishSpace γ
g : γ → α
g_cont : Continuous g
gs : range g = s
this : f '' s = range (f ∘ g)
⊢ AnalyticSet (f '' s)
[PROOFSTEP]
rw [this]
[GOAL]
case intro.intro.intro.intro.intro
α : Type u_1
inst✝¹ : TopologicalSpace α
ι : Type u_2
β : Type u_3
inst✝ : TopologicalSpace β
s : Set α
hs : AnalyticSet s
f : α → β
hf : ContinuousOn f s
γ : Type
γtop : TopologicalSpace γ
γpolish : PolishSpace γ
g : γ → α
g_cont : Continuous g
gs : range g = s
this : f '' s = range (f ∘ g)
⊢ AnalyticSet (range (f ∘ g))
[PROOFSTEP]
apply analyticSet_range_of_polishSpace
[GOAL]
case intro.intro.intro.intro.intro.f_cont
α : Type u_1
inst✝¹ : TopologicalSpace α
ι : Type u_2
β : Type u_3
inst✝ : TopologicalSpace β
s : Set α
hs : AnalyticSet s
f : α → β
hf : ContinuousOn f s
γ : Type
γtop : TopologicalSpace γ
γpolish : PolishSpace γ
g : γ → α
g_cont : Continuous g
gs : range g = s
this : f '' s = range (f ∘ g)
⊢ Continuous (f ∘ g)
[PROOFSTEP]
apply hf.comp_continuous g_cont fun x => _
[GOAL]
α : Type u_1
inst✝¹ : TopologicalSpace α
ι : Type u_2
β : Type u_3
inst✝ : TopologicalSpace β
s : Set α
hs : AnalyticSet s
f : α → β
hf : ContinuousOn f s
γ : Type
γtop : TopologicalSpace γ
γpolish : PolishSpace γ
g : γ → α
g_cont : Continuous g
gs : range g = s
this : f '' s = range (f ∘ g)
⊢ ∀ (x : γ), g x ∈ s
[PROOFSTEP]
rw [← gs]
[GOAL]
α : Type u_1
inst✝¹ : TopologicalSpace α
ι : Type u_2
β : Type u_3
inst✝ : TopologicalSpace β
s : Set α
hs : AnalyticSet s
f : α → β
hf : ContinuousOn f s
γ : Type
γtop : TopologicalSpace γ
γpolish : PolishSpace γ
g : γ → α
g_cont : Continuous g
gs : range g = s
this : f '' s = range (f ∘ g)
⊢ ∀ (x : γ), g x ∈ range g
[PROOFSTEP]
exact mem_range_self
[GOAL]
α : Type u_1
inst✝² : TopologicalSpace α
ι : Type u_2
hι : Nonempty ι
inst✝¹ : Countable ι
inst✝ : T2Space α
s : ι → Set α
hs : ∀ (n : ι), AnalyticSet (s n)
⊢ AnalyticSet (⋂ (n : ι), s n)
[PROOFSTEP]
rcases hι with
  ⟨i₀⟩
    /- For the proof, write each `s n` as the continuous image under a map `f n` of a
        Polish space `β n`. The product space `γ = Π n, β n` is also Polish, and so is the subset
        `t` of sequences `x n` for which `f n (x n)` is independent of `n`. The set `t` is Polish, and
        the range of `x ↦ f 0 (x 0)` on `t` is exactly `⋂ n, s n`, so this set is analytic. -/
[GOAL]
case intro
α : Type u_1
inst✝² : TopologicalSpace α
ι : Type u_2
inst✝¹ : Countable ι
inst✝ : T2Space α
s : ι → Set α
hs : ∀ (n : ι), AnalyticSet (s n)
i₀ : ι
⊢ AnalyticSet (⋂ (n : ι), s n)
[PROOFSTEP]
choose β hβ h'β f f_cont f_range using fun n => analyticSet_iff_exists_polishSpace_range.1 (hs n)
[GOAL]
case intro
α : Type u_1
inst✝² : TopologicalSpace α
ι : Type u_2
inst✝¹ : Countable ι
inst✝ : T2Space α
s : ι → Set α
hs : ∀ (n : ι), AnalyticSet (s n)
i₀ : ι
β : ι → Type
hβ : (n : ι) → TopologicalSpace (β n)
h'β : ∀ (n : ι), PolishSpace (β n)
f : (n : ι) → β n → α
f_cont : ∀ (n : ι), Continuous (f n)
f_range : ∀ (n : ι), range (f n) = s n
⊢ AnalyticSet (⋂ (n : ι), s n)
[PROOFSTEP]
skip
[GOAL]
case intro
α : Type u_1
inst✝² : TopologicalSpace α
ι : Type u_2
inst✝¹ : Countable ι
inst✝ : T2Space α
s : ι → Set α
hs : ∀ (n : ι), AnalyticSet (s n)
i₀ : ι
β : ι → Type
hβ : (n : ι) → TopologicalSpace (β n)
h'β : ∀ (n : ι), PolishSpace (β n)
f : (n : ι) → β n → α
f_cont : ∀ (n : ι), Continuous (f n)
f_range : ∀ (n : ι), range (f n) = s n
⊢ AnalyticSet (⋂ (n : ι), s n)
[PROOFSTEP]
let γ := ∀ n, β n
[GOAL]
case intro
α : Type u_1
inst✝² : TopologicalSpace α
ι : Type u_2
inst✝¹ : Countable ι
inst✝ : T2Space α
s : ι → Set α
hs : ∀ (n : ι), AnalyticSet (s n)
i₀ : ι
β : ι → Type
hβ : (n : ι) → TopologicalSpace (β n)
h'β : ∀ (n : ι), PolishSpace (β n)
f : (n : ι) → β n → α
f_cont : ∀ (n : ι), Continuous (f n)
f_range : ∀ (n : ι), range (f n) = s n
γ : Type u_2 := (n : ι) → β n
⊢ AnalyticSet (⋂ (n : ι), s n)
[PROOFSTEP]
let t : Set γ := ⋂ n, {x | f n (x n) = f i₀ (x i₀)}
[GOAL]
case intro
α : Type u_1
inst✝² : TopologicalSpace α
ι : Type u_2
inst✝¹ : Countable ι
inst✝ : T2Space α
s : ι → Set α
hs : ∀ (n : ι), AnalyticSet (s n)
i₀ : ι
β : ι → Type
hβ : (n : ι) → TopologicalSpace (β n)
h'β : ∀ (n : ι), PolishSpace (β n)
f : (n : ι) → β n → α
f_cont : ∀ (n : ι), Continuous (f n)
f_range : ∀ (n : ι), range (f n) = s n
γ : Type u_2 := (n : ι) → β n
t : Set γ := ⋂ (n : ι), {x | f n (x n) = f i₀ (x i₀)}
⊢ AnalyticSet (⋂ (n : ι), s n)
[PROOFSTEP]
have t_closed : IsClosed t := by
  apply isClosed_iInter
  intro n
  exact isClosed_eq ((f_cont n).comp (continuous_apply n)) ((f_cont i₀).comp (continuous_apply i₀))
[GOAL]
α : Type u_1
inst✝² : TopologicalSpace α
ι : Type u_2
inst✝¹ : Countable ι
inst✝ : T2Space α
s : ι → Set α
hs : ∀ (n : ι), AnalyticSet (s n)
i₀ : ι
β : ι → Type
hβ : (n : ι) → TopologicalSpace (β n)
h'β : ∀ (n : ι), PolishSpace (β n)
f : (n : ι) → β n → α
f_cont : ∀ (n : ι), Continuous (f n)
f_range : ∀ (n : ι), range (f n) = s n
γ : Type u_2 := (n : ι) → β n
t : Set γ := ⋂ (n : ι), {x | f n (x n) = f i₀ (x i₀)}
⊢ IsClosed t
[PROOFSTEP]
apply isClosed_iInter
[GOAL]
case h
α : Type u_1
inst✝² : TopologicalSpace α
ι : Type u_2
inst✝¹ : Countable ι
inst✝ : T2Space α
s : ι → Set α
hs : ∀ (n : ι), AnalyticSet (s n)
i₀ : ι
β : ι → Type
hβ : (n : ι) → TopologicalSpace (β n)
h'β : ∀ (n : ι), PolishSpace (β n)
f : (n : ι) → β n → α
f_cont : ∀ (n : ι), Continuous (f n)
f_range : ∀ (n : ι), range (f n) = s n
γ : Type u_2 := (n : ι) → β n
t : Set γ := ⋂ (n : ι), {x | f n (x n) = f i₀ (x i₀)}
⊢ ∀ (i : ι), IsClosed {x | f i (x i) = f i₀ (x i₀)}
[PROOFSTEP]
intro n
[GOAL]
case h
α : Type u_1
inst✝² : TopologicalSpace α
ι : Type u_2
inst✝¹ : Countable ι
inst✝ : T2Space α
s : ι → Set α
hs : ∀ (n : ι), AnalyticSet (s n)
i₀ : ι
β : ι → Type
hβ : (n : ι) → TopologicalSpace (β n)
h'β : ∀ (n : ι), PolishSpace (β n)
f : (n : ι) → β n → α
f_cont : ∀ (n : ι), Continuous (f n)
f_range : ∀ (n : ι), range (f n) = s n
γ : Type u_2 := (n : ι) → β n
t : Set γ := ⋂ (n : ι), {x | f n (x n) = f i₀ (x i₀)}
n : ι
⊢ IsClosed {x | f n (x n) = f i₀ (x i₀)}
[PROOFSTEP]
exact isClosed_eq ((f_cont n).comp (continuous_apply n)) ((f_cont i₀).comp (continuous_apply i₀))
[GOAL]
case intro
α : Type u_1
inst✝² : TopologicalSpace α
ι : Type u_2
inst✝¹ : Countable ι
inst✝ : T2Space α
s : ι → Set α
hs : ∀ (n : ι), AnalyticSet (s n)
i₀ : ι
β : ι → Type
hβ : (n : ι) → TopologicalSpace (β n)
h'β : ∀ (n : ι), PolishSpace (β n)
f : (n : ι) → β n → α
f_cont : ∀ (n : ι), Continuous (f n)
f_range : ∀ (n : ι), range (f n) = s n
γ : Type u_2 := (n : ι) → β n
t : Set γ := ⋂ (n : ι), {x | f n (x n) = f i₀ (x i₀)}
t_closed : IsClosed t
⊢ AnalyticSet (⋂ (n : ι), s n)
[PROOFSTEP]
haveI : PolishSpace t := t_closed.polishSpace
[GOAL]
case intro
α : Type u_1
inst✝² : TopologicalSpace α
ι : Type u_2
inst✝¹ : Countable ι
inst✝ : T2Space α
s : ι → Set α
hs : ∀ (n : ι), AnalyticSet (s n)
i₀ : ι
β : ι → Type
hβ : (n : ι) → TopologicalSpace (β n)
h'β : ∀ (n : ι), PolishSpace (β n)
f : (n : ι) → β n → α
f_cont : ∀ (n : ι), Continuous (f n)
f_range : ∀ (n : ι), range (f n) = s n
γ : Type u_2 := (n : ι) → β n
t : Set γ := ⋂ (n : ι), {x | f n (x n) = f i₀ (x i₀)}
t_closed : IsClosed t
this : PolishSpace ↑t
⊢ AnalyticSet (⋂ (n : ι), s n)
[PROOFSTEP]
let F : t → α := fun x => f i₀ ((x : γ) i₀)
[GOAL]
case intro
α : Type u_1
inst✝² : TopologicalSpace α
ι : Type u_2
inst✝¹ : Countable ι
inst✝ : T2Space α
s : ι → Set α
hs : ∀ (n : ι), AnalyticSet (s n)
i₀ : ι
β : ι → Type
hβ : (n : ι) → TopologicalSpace (β n)
h'β : ∀ (n : ι), PolishSpace (β n)
f : (n : ι) → β n → α
f_cont : ∀ (n : ι), Continuous (f n)
f_range : ∀ (n : ι), range (f n) = s n
γ : Type u_2 := (n : ι) → β n
t : Set γ := ⋂ (n : ι), {x | f n (x n) = f i₀ (x i₀)}
t_closed : IsClosed t
this : PolishSpace ↑t
F : ↑t → α := fun x => f i₀ (↑x i₀)
⊢ AnalyticSet (⋂ (n : ι), s n)
[PROOFSTEP]
have F_cont : Continuous F := (f_cont i₀).comp ((continuous_apply i₀).comp continuous_subtype_val)
[GOAL]
case intro
α : Type u_1
inst✝² : TopologicalSpace α
ι : Type u_2
inst✝¹ : Countable ι
inst✝ : T2Space α
s : ι → Set α
hs : ∀ (n : ι), AnalyticSet (s n)
i₀ : ι
β : ι → Type
hβ : (n : ι) → TopologicalSpace (β n)
h'β : ∀ (n : ι), PolishSpace (β n)
f : (n : ι) → β n → α
f_cont : ∀ (n : ι), Continuous (f n)
f_range : ∀ (n : ι), range (f n) = s n
γ : Type u_2 := (n : ι) → β n
t : Set γ := ⋂ (n : ι), {x | f n (x n) = f i₀ (x i₀)}
t_closed : IsClosed t
this : PolishSpace ↑t
F : ↑t → α := fun x => f i₀ (↑x i₀)
F_cont : Continuous F
⊢ AnalyticSet (⋂ (n : ι), s n)
[PROOFSTEP]
have F_range : range F = ⋂ n : ι, s n := by
  apply Subset.antisymm
  · rintro y ⟨x, rfl⟩
    refine mem_iInter.2 fun n => ?_
    have : f n ((x : γ) n) = F x := (mem_iInter.1 x.2 n : _)
    rw [← this, ← f_range n]
    exact mem_range_self _
  · intro y hy
    have A : ∀ n, ∃ x : β n, f n x = y := by
      intro n
      rw [← mem_range, f_range n]
      exact mem_iInter.1 hy n
    choose x hx using A
    have xt : x ∈ t := by
      refine mem_iInter.2 fun n => ?_
      simp [hx]
    refine' ⟨⟨x, xt⟩, _⟩
    exact hx i₀
[GOAL]
α : Type u_1
inst✝² : TopologicalSpace α
ι : Type u_2
inst✝¹ : Countable ι
inst✝ : T2Space α
s : ι → Set α
hs : ∀ (n : ι), AnalyticSet (s n)
i₀ : ι
β : ι → Type
hβ : (n : ι) → TopologicalSpace (β n)
h'β : ∀ (n : ι), PolishSpace (β n)
f : (n : ι) → β n → α
f_cont : ∀ (n : ι), Continuous (f n)
f_range : ∀ (n : ι), range (f n) = s n
γ : Type u_2 := (n : ι) → β n
t : Set γ := ⋂ (n : ι), {x | f n (x n) = f i₀ (x i₀)}
t_closed : IsClosed t
this : PolishSpace ↑t
F : ↑t → α := fun x => f i₀ (↑x i₀)
F_cont : Continuous F
⊢ range F = ⋂ (n : ι), s n
[PROOFSTEP]
apply Subset.antisymm
[GOAL]
case h₁
α : Type u_1
inst✝² : TopologicalSpace α
ι : Type u_2
inst✝¹ : Countable ι
inst✝ : T2Space α
s : ι → Set α
hs : ∀ (n : ι), AnalyticSet (s n)
i₀ : ι
β : ι → Type
hβ : (n : ι) → TopologicalSpace (β n)
h'β : ∀ (n : ι), PolishSpace (β n)
f : (n : ι) → β n → α
f_cont : ∀ (n : ι), Continuous (f n)
f_range : ∀ (n : ι), range (f n) = s n
γ : Type u_2 := (n : ι) → β n
t : Set γ := ⋂ (n : ι), {x | f n (x n) = f i₀ (x i₀)}
t_closed : IsClosed t
this : PolishSpace ↑t
F : ↑t → α := fun x => f i₀ (↑x i₀)
F_cont : Continuous F
⊢ range F ⊆ ⋂ (n : ι), s n
[PROOFSTEP]
rintro y ⟨x, rfl⟩
[GOAL]
case h₁.intro
α : Type u_1
inst✝² : TopologicalSpace α
ι : Type u_2
inst✝¹ : Countable ι
inst✝ : T2Space α
s : ι → Set α
hs : ∀ (n : ι), AnalyticSet (s n)
i₀ : ι
β : ι → Type
hβ : (n : ι) → TopologicalSpace (β n)
h'β : ∀ (n : ι), PolishSpace (β n)
f : (n : ι) → β n → α
f_cont : ∀ (n : ι), Continuous (f n)
f_range : ∀ (n : ι), range (f n) = s n
γ : Type u_2 := (n : ι) → β n
t : Set γ := ⋂ (n : ι), {x | f n (x n) = f i₀ (x i₀)}
t_closed : IsClosed t
this : PolishSpace ↑t
F : ↑t → α := fun x => f i₀ (↑x i₀)
F_cont : Continuous F
x : ↑t
⊢ F x ∈ ⋂ (n : ι), s n
[PROOFSTEP]
refine mem_iInter.2 fun n => ?_
[GOAL]
case h₁.intro
α : Type u_1
inst✝² : TopologicalSpace α
ι : Type u_2
inst✝¹ : Countable ι
inst✝ : T2Space α
s : ι → Set α
hs : ∀ (n : ι), AnalyticSet (s n)
i₀ : ι
β : ι → Type
hβ : (n : ι) → TopologicalSpace (β n)
h'β : ∀ (n : ι), PolishSpace (β n)
f : (n : ι) → β n → α
f_cont : ∀ (n : ι), Continuous (f n)
f_range : ∀ (n : ι), range (f n) = s n
γ : Type u_2 := (n : ι) → β n
t : Set γ := ⋂ (n : ι), {x | f n (x n) = f i₀ (x i₀)}
t_closed : IsClosed t
this : PolishSpace ↑t
F : ↑t → α := fun x => f i₀ (↑x i₀)
F_cont : Continuous F
x : ↑t
n : ι
⊢ F x ∈ s n
[PROOFSTEP]
have : f n ((x : γ) n) = F x := (mem_iInter.1 x.2 n : _)
[GOAL]
case h₁.intro
α : Type u_1
inst✝² : TopologicalSpace α
ι : Type u_2
inst✝¹ : Countable ι
inst✝ : T2Space α
s : ι → Set α
hs : ∀ (n : ι), AnalyticSet (s n)
i₀ : ι
β : ι → Type
hβ : (n : ι) → TopologicalSpace (β n)
h'β : ∀ (n : ι), PolishSpace (β n)
f : (n : ι) → β n → α
f_cont : ∀ (n : ι), Continuous (f n)
f_range : ∀ (n : ι), range (f n) = s n
γ : Type u_2 := (n : ι) → β n
t : Set γ := ⋂ (n : ι), {x | f n (x n) = f i₀ (x i₀)}
t_closed : IsClosed t
this✝ : PolishSpace ↑t
F : ↑t → α := fun x => f i₀ (↑x i₀)
F_cont : Continuous F
x : ↑t
n : ι
this : f n (↑x n) = F x
⊢ F x ∈ s n
[PROOFSTEP]
rw [← this, ← f_range n]
[GOAL]
case h₁.intro
α : Type u_1
inst✝² : TopologicalSpace α
ι : Type u_2
inst✝¹ : Countable ι
inst✝ : T2Space α
s : ι → Set α
hs : ∀ (n : ι), AnalyticSet (s n)
i₀ : ι
β : ι → Type
hβ : (n : ι) → TopologicalSpace (β n)
h'β : ∀ (n : ι), PolishSpace (β n)
f : (n : ι) → β n → α
f_cont : ∀ (n : ι), Continuous (f n)
f_range : ∀ (n : ι), range (f n) = s n
γ : Type u_2 := (n : ι) → β n
t : Set γ := ⋂ (n : ι), {x | f n (x n) = f i₀ (x i₀)}
t_closed : IsClosed t
this✝ : PolishSpace ↑t
F : ↑t → α := fun x => f i₀ (↑x i₀)
F_cont : Continuous F
x : ↑t
n : ι
this : f n (↑x n) = F x
⊢ f n (↑x n) ∈ range (f n)
[PROOFSTEP]
exact mem_range_self _
[GOAL]
case h₂
α : Type u_1
inst✝² : TopologicalSpace α
ι : Type u_2
inst✝¹ : Countable ι
inst✝ : T2Space α
s : ι → Set α
hs : ∀ (n : ι), AnalyticSet (s n)
i₀ : ι
β : ι → Type
hβ : (n : ι) → TopologicalSpace (β n)
h'β : ∀ (n : ι), PolishSpace (β n)
f : (n : ι) → β n → α
f_cont : ∀ (n : ι), Continuous (f n)
f_range : ∀ (n : ι), range (f n) = s n
γ : Type u_2 := (n : ι) → β n
t : Set γ := ⋂ (n : ι), {x | f n (x n) = f i₀ (x i₀)}
t_closed : IsClosed t
this : PolishSpace ↑t
F : ↑t → α := fun x => f i₀ (↑x i₀)
F_cont : Continuous F
⊢ ⋂ (n : ι), s n ⊆ range F
[PROOFSTEP]
intro y hy
[GOAL]
case h₂
α : Type u_1
inst✝² : TopologicalSpace α
ι : Type u_2
inst✝¹ : Countable ι
inst✝ : T2Space α
s : ι → Set α
hs : ∀ (n : ι), AnalyticSet (s n)
i₀ : ι
β : ι → Type
hβ : (n : ι) → TopologicalSpace (β n)
h'β : ∀ (n : ι), PolishSpace (β n)
f : (n : ι) → β n → α
f_cont : ∀ (n : ι), Continuous (f n)
f_range : ∀ (n : ι), range (f n) = s n
γ : Type u_2 := (n : ι) → β n
t : Set γ := ⋂ (n : ι), {x | f n (x n) = f i₀ (x i₀)}
t_closed : IsClosed t
this : PolishSpace ↑t
F : ↑t → α := fun x => f i₀ (↑x i₀)
F_cont : Continuous F
y : α
hy : y ∈ ⋂ (n : ι), s n
⊢ y ∈ range F
[PROOFSTEP]
have A : ∀ n, ∃ x : β n, f n x = y := by
  intro n
  rw [← mem_range, f_range n]
  exact mem_iInter.1 hy n
[GOAL]
α : Type u_1
inst✝² : TopologicalSpace α
ι : Type u_2
inst✝¹ : Countable ι
inst✝ : T2Space α
s : ι → Set α
hs : ∀ (n : ι), AnalyticSet (s n)
i₀ : ι
β : ι → Type
hβ : (n : ι) → TopologicalSpace (β n)
h'β : ∀ (n : ι), PolishSpace (β n)
f : (n : ι) → β n → α
f_cont : ∀ (n : ι), Continuous (f n)
f_range : ∀ (n : ι), range (f n) = s n
γ : Type u_2 := (n : ι) → β n
t : Set γ := ⋂ (n : ι), {x | f n (x n) = f i₀ (x i₀)}
t_closed : IsClosed t
this : PolishSpace ↑t
F : ↑t → α := fun x => f i₀ (↑x i₀)
F_cont : Continuous F
y : α
hy : y ∈ ⋂ (n : ι), s n
⊢ ∀ (n : ι), ∃ x, f n x = y
[PROOFSTEP]
intro n
[GOAL]
α : Type u_1
inst✝² : TopologicalSpace α
ι : Type u_2
inst✝¹ : Countable ι
inst✝ : T2Space α
s : ι → Set α
hs : ∀ (n : ι), AnalyticSet (s n)
i₀ : ι
β : ι → Type
hβ : (n : ι) → TopologicalSpace (β n)
h'β : ∀ (n : ι), PolishSpace (β n)
f : (n : ι) → β n → α
f_cont : ∀ (n : ι), Continuous (f n)
f_range : ∀ (n : ι), range (f n) = s n
γ : Type u_2 := (n : ι) → β n
t : Set γ := ⋂ (n : ι), {x | f n (x n) = f i₀ (x i₀)}
t_closed : IsClosed t
this : PolishSpace ↑t
F : ↑t → α := fun x => f i₀ (↑x i₀)
F_cont : Continuous F
y : α
hy : y ∈ ⋂ (n : ι), s n
n : ι
⊢ ∃ x, f n x = y
[PROOFSTEP]
rw [← mem_range, f_range n]
[GOAL]
α : Type u_1
inst✝² : TopologicalSpace α
ι : Type u_2
inst✝¹ : Countable ι
inst✝ : T2Space α
s : ι → Set α
hs : ∀ (n : ι), AnalyticSet (s n)
i₀ : ι
β : ι → Type
hβ : (n : ι) → TopologicalSpace (β n)
h'β : ∀ (n : ι), PolishSpace (β n)
f : (n : ι) → β n → α
f_cont : ∀ (n : ι), Continuous (f n)
f_range : ∀ (n : ι), range (f n) = s n
γ : Type u_2 := (n : ι) → β n
t : Set γ := ⋂ (n : ι), {x | f n (x n) = f i₀ (x i₀)}
t_closed : IsClosed t
this : PolishSpace ↑t
F : ↑t → α := fun x => f i₀ (↑x i₀)
F_cont : Continuous F
y : α
hy : y ∈ ⋂ (n : ι), s n
n : ι
⊢ y ∈ s n
[PROOFSTEP]
exact mem_iInter.1 hy n
[GOAL]
case h₂
α : Type u_1
inst✝² : TopologicalSpace α
ι : Type u_2
inst✝¹ : Countable ι
inst✝ : T2Space α
s : ι → Set α
hs : ∀ (n : ι), AnalyticSet (s n)
i₀ : ι
β : ι → Type
hβ : (n : ι) → TopologicalSpace (β n)
h'β : ∀ (n : ι), PolishSpace (β n)
f : (n : ι) → β n → α
f_cont : ∀ (n : ι), Continuous (f n)
f_range : ∀ (n : ι), range (f n) = s n
γ : Type u_2 := (n : ι) → β n
t : Set γ := ⋂ (n : ι), {x | f n (x n) = f i₀ (x i₀)}
t_closed : IsClosed t
this : PolishSpace ↑t
F : ↑t → α := fun x => f i₀ (↑x i₀)
F_cont : Continuous F
y : α
hy : y ∈ ⋂ (n : ι), s n
A : ∀ (n : ι), ∃ x, f n x = y
⊢ y ∈ range F
[PROOFSTEP]
choose x hx using A
[GOAL]
case h₂
α : Type u_1
inst✝² : TopologicalSpace α
ι : Type u_2
inst✝¹ : Countable ι
inst✝ : T2Space α
s : ι → Set α
hs : ∀ (n : ι), AnalyticSet (s n)
i₀ : ι
β : ι → Type
hβ : (n : ι) → TopologicalSpace (β n)
h'β : ∀ (n : ι), PolishSpace (β n)
f : (n : ι) → β n → α
f_cont : ∀ (n : ι), Continuous (f n)
f_range : ∀ (n : ι), range (f n) = s n
γ : Type u_2 := (n : ι) → β n
t : Set γ := ⋂ (n : ι), {x | f n (x n) = f i₀ (x i₀)}
t_closed : IsClosed t
this : PolishSpace ↑t
F : ↑t → α := fun x => f i₀ (↑x i₀)
F_cont : Continuous F
y : α
hy : y ∈ ⋂ (n : ι), s n
x : (n : ι) → β n
hx : ∀ (n : ι), f n (x n) = y
⊢ y ∈ range F
[PROOFSTEP]
have xt : x ∈ t := by
  refine mem_iInter.2 fun n => ?_
  simp [hx]
[GOAL]
α : Type u_1
inst✝² : TopologicalSpace α
ι : Type u_2
inst✝¹ : Countable ι
inst✝ : T2Space α
s : ι → Set α
hs : ∀ (n : ι), AnalyticSet (s n)
i₀ : ι
β : ι → Type
hβ : (n : ι) → TopologicalSpace (β n)
h'β : ∀ (n : ι), PolishSpace (β n)
f : (n : ι) → β n → α
f_cont : ∀ (n : ι), Continuous (f n)
f_range : ∀ (n : ι), range (f n) = s n
γ : Type u_2 := (n : ι) → β n
t : Set γ := ⋂ (n : ι), {x | f n (x n) = f i₀ (x i₀)}
t_closed : IsClosed t
this : PolishSpace ↑t
F : ↑t → α := fun x => f i₀ (↑x i₀)
F_cont : Continuous F
y : α
hy : y ∈ ⋂ (n : ι), s n
x : (n : ι) → β n
hx : ∀ (n : ι), f n (x n) = y
⊢ x ∈ t
[PROOFSTEP]
refine mem_iInter.2 fun n => ?_
[GOAL]
α : Type u_1
inst✝² : TopologicalSpace α
ι : Type u_2
inst✝¹ : Countable ι
inst✝ : T2Space α
s : ι → Set α
hs : ∀ (n : ι), AnalyticSet (s n)
i₀ : ι
β : ι → Type
hβ : (n : ι) → TopologicalSpace (β n)
h'β : ∀ (n : ι), PolishSpace (β n)
f : (n : ι) → β n → α
f_cont : ∀ (n : ι), Continuous (f n)
f_range : ∀ (n : ι), range (f n) = s n
γ : Type u_2 := (n : ι) → β n
t : Set γ := ⋂ (n : ι), {x | f n (x n) = f i₀ (x i₀)}
t_closed : IsClosed t
this : PolishSpace ↑t
F : ↑t → α := fun x => f i₀ (↑x i₀)
F_cont : Continuous F
y : α
hy : y ∈ ⋂ (n : ι), s n
x : (n : ι) → β n
hx : ∀ (n : ι), f n (x n) = y
n : ι
⊢ x ∈ {x | f n (x n) = f i₀ (x i₀)}
[PROOFSTEP]
simp [hx]
[GOAL]
case h₂
α : Type u_1
inst✝² : TopologicalSpace α
ι : Type u_2
inst✝¹ : Countable ι
inst✝ : T2Space α
s : ι → Set α
hs : ∀ (n : ι), AnalyticSet (s n)
i₀ : ι
β : ι → Type
hβ : (n : ι) → TopologicalSpace (β n)
h'β : ∀ (n : ι), PolishSpace (β n)
f : (n : ι) → β n → α
f_cont : ∀ (n : ι), Continuous (f n)
f_range : ∀ (n : ι), range (f n) = s n
γ : Type u_2 := (n : ι) → β n
t : Set γ := ⋂ (n : ι), {x | f n (x n) = f i₀ (x i₀)}
t_closed : IsClosed t
this : PolishSpace ↑t
F : ↑t → α := fun x => f i₀ (↑x i₀)
F_cont : Continuous F
y : α
hy : y ∈ ⋂ (n : ι), s n
x : (n : ι) → β n
hx : ∀ (n : ι), f n (x n) = y
xt : x ∈ t
⊢ y ∈ range F
[PROOFSTEP]
refine' ⟨⟨x, xt⟩, _⟩
[GOAL]
case h₂
α : Type u_1
inst✝² : TopologicalSpace α
ι : Type u_2
inst✝¹ : Countable ι
inst✝ : T2Space α
s : ι → Set α
hs : ∀ (n : ι), AnalyticSet (s n)
i₀ : ι
β : ι → Type
hβ : (n : ι) → TopologicalSpace (β n)
h'β : ∀ (n : ι), PolishSpace (β n)
f : (n : ι) → β n → α
f_cont : ∀ (n : ι), Continuous (f n)
f_range : ∀ (n : ι), range (f n) = s n
γ : Type u_2 := (n : ι) → β n
t : Set γ := ⋂ (n : ι), {x | f n (x n) = f i₀ (x i₀)}
t_closed : IsClosed t
this : PolishSpace ↑t
F : ↑t → α := fun x => f i₀ (↑x i₀)
F_cont : Continuous F
y : α
hy : y ∈ ⋂ (n : ι), s n
x : (n : ι) → β n
hx : ∀ (n : ι), f n (x n) = y
xt : x ∈ t
⊢ F { val := x, property := xt } = y
[PROOFSTEP]
exact hx i₀
[GOAL]
case intro
α : Type u_1
inst✝² : TopologicalSpace α
ι : Type u_2
inst✝¹ : Countable ι
inst✝ : T2Space α
s : ι → Set α
hs : ∀ (n : ι), AnalyticSet (s n)
i₀ : ι
β : ι → Type
hβ : (n : ι) → TopologicalSpace (β n)
h'β : ∀ (n : ι), PolishSpace (β n)
f : (n : ι) → β n → α
f_cont : ∀ (n : ι), Continuous (f n)
f_range : ∀ (n : ι), range (f n) = s n
γ : Type u_2 := (n : ι) → β n
t : Set γ := ⋂ (n : ι), {x | f n (x n) = f i₀ (x i₀)}
t_closed : IsClosed t
this : PolishSpace ↑t
F : ↑t → α := fun x => f i₀ (↑x i₀)
F_cont : Continuous F
F_range : range F = ⋂ (n : ι), s n
⊢ AnalyticSet (⋂ (n : ι), s n)
[PROOFSTEP]
rw [← F_range]
[GOAL]
case intro
α : Type u_1
inst✝² : TopologicalSpace α
ι : Type u_2
inst✝¹ : Countable ι
inst✝ : T2Space α
s : ι → Set α
hs : ∀ (n : ι), AnalyticSet (s n)
i₀ : ι
β : ι → Type
hβ : (n : ι) → TopologicalSpace (β n)
h'β : ∀ (n : ι), PolishSpace (β n)
f : (n : ι) → β n → α
f_cont : ∀ (n : ι), Continuous (f n)
f_range : ∀ (n : ι), range (f n) = s n
γ : Type u_2 := (n : ι) → β n
t : Set γ := ⋂ (n : ι), {x | f n (x n) = f i₀ (x i₀)}
t_closed : IsClosed t
this : PolishSpace ↑t
F : ↑t → α := fun x => f i₀ (↑x i₀)
F_cont : Continuous F
F_range : range F = ⋂ (n : ι), s n
⊢ AnalyticSet (range F)
[PROOFSTEP]
exact analyticSet_range_of_polishSpace F_cont
[GOAL]
α : Type u_1
inst✝¹ : TopologicalSpace α
ι : Type u_2
inst✝ : Countable ι
s : ι → Set α
hs : ∀ (n : ι), AnalyticSet (s n)
⊢ AnalyticSet (⋃ (n : ι), s n)
[PROOFSTEP]
choose β hβ h'β f f_cont f_range using fun n => analyticSet_iff_exists_polishSpace_range.1 (hs n)
[GOAL]
α : Type u_1
inst✝¹ : TopologicalSpace α
ι : Type u_2
inst✝ : Countable ι
s : ι → Set α
hs : ∀ (n : ι), AnalyticSet (s n)
β : ι → Type
hβ : (n : ι) → TopologicalSpace (β n)
h'β : ∀ (n : ι), PolishSpace (β n)
f : (n : ι) → β n → α
f_cont : ∀ (n : ι), Continuous (f n)
f_range : ∀ (n : ι), range (f n) = s n
⊢ AnalyticSet (⋃ (n : ι), s n)
[PROOFSTEP]
skip
[GOAL]
α : Type u_1
inst✝¹ : TopologicalSpace α
ι : Type u_2
inst✝ : Countable ι
s : ι → Set α
hs : ∀ (n : ι), AnalyticSet (s n)
β : ι → Type
hβ : (n : ι) → TopologicalSpace (β n)
h'β : ∀ (n : ι), PolishSpace (β n)
f : (n : ι) → β n → α
f_cont : ∀ (n : ι), Continuous (f n)
f_range : ∀ (n : ι), range (f n) = s n
⊢ AnalyticSet (⋃ (n : ι), s n)
[PROOFSTEP]
let γ := Σ n, β n
[GOAL]
α : Type u_1
inst✝¹ : TopologicalSpace α
ι : Type u_2
inst✝ : Countable ι
s : ι → Set α
hs : ∀ (n : ι), AnalyticSet (s n)
β : ι → Type
hβ : (n : ι) → TopologicalSpace (β n)
h'β : ∀ (n : ι), PolishSpace (β n)
f : (n : ι) → β n → α
f_cont : ∀ (n : ι), Continuous (f n)
f_range : ∀ (n : ι), range (f n) = s n
γ : Type u_2 := (n : ι) × β n
⊢ AnalyticSet (⋃ (n : ι), s n)
[PROOFSTEP]
let F : γ → α := by
  rintro ⟨n, x⟩
  exact f n x
[GOAL]
α : Type u_1
inst✝¹ : TopologicalSpace α
ι : Type u_2
inst✝ : Countable ι
s : ι → Set α
hs : ∀ (n : ι), AnalyticSet (s n)
β : ι → Type
hβ : (n : ι) → TopologicalSpace (β n)
h'β : ∀ (n : ι), PolishSpace (β n)
f : (n : ι) → β n → α
f_cont : ∀ (n : ι), Continuous (f n)
f_range : ∀ (n : ι), range (f n) = s n
γ : Type u_2 := (n : ι) × β n
⊢ γ → α
[PROOFSTEP]
rintro ⟨n, x⟩
[GOAL]
case mk
α : Type u_1
inst✝¹ : TopologicalSpace α
ι : Type u_2
inst✝ : Countable ι
s : ι → Set α
hs : ∀ (n : ι), AnalyticSet (s n)
β : ι → Type
hβ : (n : ι) → TopologicalSpace (β n)
h'β : ∀ (n : ι), PolishSpace (β n)
f : (n : ι) → β n → α
f_cont : ∀ (n : ι), Continuous (f n)
f_range : ∀ (n : ι), range (f n) = s n
γ : Type u_2 := (n : ι) × β n
n : ι
x : β n
⊢ α
[PROOFSTEP]
exact f n x
[GOAL]
α : Type u_1
inst✝¹ : TopologicalSpace α
ι : Type u_2
inst✝ : Countable ι
s : ι → Set α
hs : ∀ (n : ι), AnalyticSet (s n)
β : ι → Type
hβ : (n : ι) → TopologicalSpace (β n)
h'β : ∀ (n : ι), PolishSpace (β n)
f : (n : ι) → β n → α
f_cont : ∀ (n : ι), Continuous (f n)
f_range : ∀ (n : ι), range (f n) = s n
γ : Type u_2 := (n : ι) × β n
F : γ → α := fun a => Sigma.casesOn a fun n x => f n x
⊢ AnalyticSet (⋃ (n : ι), s n)
[PROOFSTEP]
have F_cont : Continuous F := continuous_sigma f_cont
[GOAL]
α : Type u_1
inst✝¹ : TopologicalSpace α
ι : Type u_2
inst✝ : Countable ι
s : ι → Set α
hs : ∀ (n : ι), AnalyticSet (s n)
β : ι → Type
hβ : (n : ι) → TopologicalSpace (β n)
h'β : ∀ (n : ι), PolishSpace (β n)
f : (n : ι) → β n → α
f_cont : ∀ (n : ι), Continuous (f n)
f_range : ∀ (n : ι), range (f n) = s n
γ : Type u_2 := (n : ι) × β n
F : γ → α := fun a => Sigma.casesOn a fun n x => f n x
F_cont : Continuous F
⊢ AnalyticSet (⋃ (n : ι), s n)
[PROOFSTEP]
have F_range : range F = ⋃ n, s n := by
  rw [range_sigma_eq_iUnion_range]
  apply congr_arg
  ext1 n
  rw [← f_range n]
[GOAL]
α : Type u_1
inst✝¹ : TopologicalSpace α
ι : Type u_2
inst✝ : Countable ι
s : ι → Set α
hs : ∀ (n : ι), AnalyticSet (s n)
β : ι → Type
hβ : (n : ι) → TopologicalSpace (β n)
h'β : ∀ (n : ι), PolishSpace (β n)
f : (n : ι) → β n → α
f_cont : ∀ (n : ι), Continuous (f n)
f_range : ∀ (n : ι), range (f n) = s n
γ : Type u_2 := (n : ι) × β n
F : γ → α := fun a => Sigma.casesOn a fun n x => f n x
F_cont : Continuous F
⊢ range F = ⋃ (n : ι), s n
[PROOFSTEP]
rw [range_sigma_eq_iUnion_range]
[GOAL]
α : Type u_1
inst✝¹ : TopologicalSpace α
ι : Type u_2
inst✝ : Countable ι
s : ι → Set α
hs : ∀ (n : ι), AnalyticSet (s n)
β : ι → Type
hβ : (n : ι) → TopologicalSpace (β n)
h'β : ∀ (n : ι), PolishSpace (β n)
f : (n : ι) → β n → α
f_cont : ∀ (n : ι), Continuous (f n)
f_range : ∀ (n : ι), range (f n) = s n
γ : Type u_2 := (n : ι) × β n
F : γ → α := fun a => Sigma.casesOn a fun n x => f n x
F_cont : Continuous F
⊢ (⋃ (a : ι), range fun b => F { fst := a, snd := b }) = ⋃ (n : ι), s n
[PROOFSTEP]
apply congr_arg
[GOAL]
case h
α : Type u_1
inst✝¹ : TopologicalSpace α
ι : Type u_2
inst✝ : Countable ι
s : ι → Set α
hs : ∀ (n : ι), AnalyticSet (s n)
β : ι → Type
hβ : (n : ι) → TopologicalSpace (β n)
h'β : ∀ (n : ι), PolishSpace (β n)
f : (n : ι) → β n → α
f_cont : ∀ (n : ι), Continuous (f n)
f_range : ∀ (n : ι), range (f n) = s n
γ : Type u_2 := (n : ι) × β n
F : γ → α := fun a => Sigma.casesOn a fun n x => f n x
F_cont : Continuous F
⊢ (fun a => range fun b => F { fst := a, snd := b }) = fun n => s n
[PROOFSTEP]
ext1 n
[GOAL]
case h.h
α : Type u_1
inst✝¹ : TopologicalSpace α
ι : Type u_2
inst✝ : Countable ι
s : ι → Set α
hs : ∀ (n : ι), AnalyticSet (s n)
β : ι → Type
hβ : (n : ι) → TopologicalSpace (β n)
h'β : ∀ (n : ι), PolishSpace (β n)
f : (n : ι) → β n → α
f_cont : ∀ (n : ι), Continuous (f n)
f_range : ∀ (n : ι), range (f n) = s n
γ : Type u_2 := (n : ι) × β n
F : γ → α := fun a => Sigma.casesOn a fun n x => f n x
F_cont : Continuous F
n : ι
⊢ (range fun b => F { fst := n, snd := b }) = s n
[PROOFSTEP]
rw [← f_range n]
[GOAL]
α : Type u_1
inst✝¹ : TopologicalSpace α
ι : Type u_2
inst✝ : Countable ι
s : ι → Set α
hs : ∀ (n : ι), AnalyticSet (s n)
β : ι → Type
hβ : (n : ι) → TopologicalSpace (β n)
h'β : ∀ (n : ι), PolishSpace (β n)
f : (n : ι) → β n → α
f_cont : ∀ (n : ι), Continuous (f n)
f_range : ∀ (n : ι), range (f n) = s n
γ : Type u_2 := (n : ι) × β n
F : γ → α := fun a => Sigma.casesOn a fun n x => f n x
F_cont : Continuous F
F_range : range F = ⋃ (n : ι), s n
⊢ AnalyticSet (⋃ (n : ι), s n)
[PROOFSTEP]
rw [← F_range]
[GOAL]
α : Type u_1
inst✝¹ : TopologicalSpace α
ι : Type u_2
inst✝ : Countable ι
s : ι → Set α
hs : ∀ (n : ι), AnalyticSet (s n)
β : ι → Type
hβ : (n : ι) → TopologicalSpace (β n)
h'β : ∀ (n : ι), PolishSpace (β n)
f : (n : ι) → β n → α
f_cont : ∀ (n : ι), Continuous (f n)
f_range : ∀ (n : ι), range (f n) = s n
γ : Type u_2 := (n : ι) × β n
F : γ → α := fun a => Sigma.casesOn a fun n x => f n x
F_cont : Continuous F
F_range : range F = ⋃ (n : ι), s n
⊢ AnalyticSet (range F)
[PROOFSTEP]
exact analyticSet_range_of_polishSpace F_cont
[GOAL]
α : Type u_1
inst✝¹ : TopologicalSpace α
ι : Type u_2
inst✝ : PolishSpace α
s : Set α
hs : IsClosed s
⊢ AnalyticSet s
[PROOFSTEP]
haveI : PolishSpace s := hs.polishSpace
[GOAL]
α : Type u_1
inst✝¹ : TopologicalSpace α
ι : Type u_2
inst✝ : PolishSpace α
s : Set α
hs : IsClosed s
this : PolishSpace ↑s
⊢ AnalyticSet s
[PROOFSTEP]
rw [← @Subtype.range_val α s]
[GOAL]
α : Type u_1
inst✝¹ : TopologicalSpace α
ι : Type u_2
inst✝ : PolishSpace α
s : Set α
hs : IsClosed s
this : PolishSpace ↑s
⊢ AnalyticSet (range Subtype.val)
[PROOFSTEP]
exact analyticSet_range_of_polishSpace continuous_subtype_val
[GOAL]
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : PolishSpace α
inst✝¹ : MeasurableSpace α
inst✝ : BorelSpace α
s : Set α
hs : MeasurableSet s
⊢ IsClopenable s
[PROOFSTEP]
revert s
[GOAL]
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : PolishSpace α
inst✝¹ : MeasurableSpace α
inst✝ : BorelSpace α
⊢ ∀ {s : Set α}, MeasurableSet s → IsClopenable s
[PROOFSTEP]
apply MeasurableSet.induction_on_open
[GOAL]
case h_open
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : PolishSpace α
inst✝¹ : MeasurableSpace α
inst✝ : BorelSpace α
⊢ ∀ (U : Set α), IsOpen U → IsClopenable U
[PROOFSTEP]
exact fun u hu => hu.isClopenable
[GOAL]
case h_compl
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : PolishSpace α
inst✝¹ : MeasurableSpace α
inst✝ : BorelSpace α
⊢ ∀ (t : Set α), MeasurableSet t → IsClopenable t → IsClopenable tᶜ
[PROOFSTEP]
exact fun u _ h'u => h'u.compl
[GOAL]
case h_union
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : PolishSpace α
inst✝¹ : MeasurableSpace α
inst✝ : BorelSpace α
⊢ ∀ (f : ℕ → Set α),
    Pairwise (Disjoint on f) →
      (∀ (i : ℕ), MeasurableSet (f i)) → (∀ (i : ℕ), IsClopenable (f i)) → IsClopenable (⋃ (i : ℕ), f i)
[PROOFSTEP]
exact fun f _ _ hf => IsClopenable.iUnion hf
[GOAL]
α✝ : Type u_1
inst✝³ : TopologicalSpace α✝
ι : Type u_2
α : Type u_3
t : TopologicalSpace α
inst✝² : PolishSpace α
inst✝¹ : MeasurableSpace α
inst✝ : BorelSpace α
s : Set α
hs : MeasurableSet s
⊢ AnalyticSet s
[PROOFSTEP]
obtain ⟨t', t't, t'_polish, s_closed, _⟩ :
  ∃ t' : TopologicalSpace α, t' ≤ t ∧ @PolishSpace α t' ∧ IsClosed[t'] s ∧ IsOpen[t'] s := hs.isClopenable
[GOAL]
case intro.intro.intro.intro
α✝ : Type u_1
inst✝³ : TopologicalSpace α✝
ι : Type u_2
α : Type u_3
t : TopologicalSpace α
inst✝² : PolishSpace α
inst✝¹ : MeasurableSpace α
inst✝ : BorelSpace α
s : Set α
hs : MeasurableSet s
t' : TopologicalSpace α
t't : t' ≤ t
t'_polish : PolishSpace α
s_closed : IsClosed s
right✝ : IsOpen s
⊢ AnalyticSet s
[PROOFSTEP]
have A := @IsClosed.analyticSet α t' t'_polish s s_closed
[GOAL]
case intro.intro.intro.intro
α✝ : Type u_1
inst✝³ : TopologicalSpace α✝
ι : Type u_2
α : Type u_3
t : TopologicalSpace α
inst✝² : PolishSpace α
inst✝¹ : MeasurableSpace α
inst✝ : BorelSpace α
s : Set α
hs : MeasurableSet s
t' : TopologicalSpace α
t't : t' ≤ t
t'_polish : PolishSpace α
s_closed : IsClosed s
right✝ : IsOpen s
A : AnalyticSet s
⊢ AnalyticSet s
[PROOFSTEP]
convert @AnalyticSet.image_of_continuous α t' α t s A id (continuous_id_of_le t't)
[GOAL]
case h.e'_3
α✝ : Type u_1
inst✝³ : TopologicalSpace α✝
ι : Type u_2
α : Type u_3
t : TopologicalSpace α
inst✝² : PolishSpace α
inst✝¹ : MeasurableSpace α
inst✝ : BorelSpace α
s : Set α
hs : MeasurableSet s
t' : TopologicalSpace α
t't : t' ≤ t
t'_polish : PolishSpace α
s_closed : IsClosed s
right✝ : IsOpen s
A : AnalyticSet s
⊢ s = id '' s
[PROOFSTEP]
simp only [id.def, image_id']
[GOAL]
α✝ : Type u_1
inst✝⁶ : TopologicalSpace α✝
ι : Type u_2
α : Type u_3
β : Type u_4
t : TopologicalSpace α
inst✝⁵ : PolishSpace α
inst✝⁴ : MeasurableSpace α
inst✝³ : BorelSpace α
tβ : TopologicalSpace β
inst✝² : MeasurableSpace β
inst✝¹ : OpensMeasurableSpace β
f : α → β
inst✝ : SecondCountableTopology ↑(range f)
hf : Measurable f
⊢ ∃ t', t' ≤ t ∧ Continuous f ∧ PolishSpace α
[PROOFSTEP]
obtain ⟨b, b_count, -, hb⟩ : ∃ b : Set (Set (range f)), b.Countable ∧ ∅ ∉ b ∧ IsTopologicalBasis b :=
  exists_countable_basis (range f)
[GOAL]
case intro.intro.intro
α✝ : Type u_1
inst✝⁶ : TopologicalSpace α✝
ι : Type u_2
α : Type u_3
β : Type u_4
t : TopologicalSpace α
inst✝⁵ : PolishSpace α
inst✝⁴ : MeasurableSpace α
inst✝³ : BorelSpace α
tβ : TopologicalSpace β
inst✝² : MeasurableSpace β
inst✝¹ : OpensMeasurableSpace β
f : α → β
inst✝ : SecondCountableTopology ↑(range f)
hf : Measurable f
b : Set (Set ↑(range f))
b_count : Set.Countable b
hb : IsTopologicalBasis b
⊢ ∃ t', t' ≤ t ∧ Continuous f ∧ PolishSpace α
[PROOFSTEP]
haveI : Countable b := b_count.to_subtype
[GOAL]
case intro.intro.intro
α✝ : Type u_1
inst✝⁶ : TopologicalSpace α✝
ι : Type u_2
α : Type u_3
β : Type u_4
t : TopologicalSpace α
inst✝⁵ : PolishSpace α
inst✝⁴ : MeasurableSpace α
inst✝³ : BorelSpace α
tβ : TopologicalSpace β
inst✝² : MeasurableSpace β
inst✝¹ : OpensMeasurableSpace β
f : α → β
inst✝ : SecondCountableTopology ↑(range f)
hf : Measurable f
b : Set (Set ↑(range f))
b_count : Set.Countable b
hb : IsTopologicalBasis b
this : Countable ↑b
⊢ ∃ t', t' ≤ t ∧ Continuous f ∧ PolishSpace α
[PROOFSTEP]
have : ∀ s : b, IsClopenable (rangeFactorization f ⁻¹' s) := fun s ↦
  by
  apply MeasurableSet.isClopenable
  exact hf.subtype_mk (hb.isOpen s.2).measurableSet
[GOAL]
α✝ : Type u_1
inst✝⁶ : TopologicalSpace α✝
ι : Type u_2
α : Type u_3
β : Type u_4
t : TopologicalSpace α
inst✝⁵ : PolishSpace α
inst✝⁴ : MeasurableSpace α
inst✝³ : BorelSpace α
tβ : TopologicalSpace β
inst✝² : MeasurableSpace β
inst✝¹ : OpensMeasurableSpace β
f : α → β
inst✝ : SecondCountableTopology ↑(range f)
hf : Measurable f
b : Set (Set ↑(range f))
b_count : Set.Countable b
hb : IsTopologicalBasis b
this : Countable ↑b
s : ↑b
⊢ IsClopenable (rangeFactorization f ⁻¹' ↑s)
[PROOFSTEP]
apply MeasurableSet.isClopenable
[GOAL]
case hs
α✝ : Type u_1
inst✝⁶ : TopologicalSpace α✝
ι : Type u_2
α : Type u_3
β : Type u_4
t : TopologicalSpace α
inst✝⁵ : PolishSpace α
inst✝⁴ : MeasurableSpace α
inst✝³ : BorelSpace α
tβ : TopologicalSpace β
inst✝² : MeasurableSpace β
inst✝¹ : OpensMeasurableSpace β
f : α → β
inst✝ : SecondCountableTopology ↑(range f)
hf : Measurable f
b : Set (Set ↑(range f))
b_count : Set.Countable b
hb : IsTopologicalBasis b
this : Countable ↑b
s : ↑b
⊢ MeasurableSet (rangeFactorization f ⁻¹' ↑s)
[PROOFSTEP]
exact hf.subtype_mk (hb.isOpen s.2).measurableSet
[GOAL]
case intro.intro.intro
α✝ : Type u_1
inst✝⁶ : TopologicalSpace α✝
ι : Type u_2
α : Type u_3
β : Type u_4
t : TopologicalSpace α
inst✝⁵ : PolishSpace α
inst✝⁴ : MeasurableSpace α
inst✝³ : BorelSpace α
tβ : TopologicalSpace β
inst✝² : MeasurableSpace β
inst✝¹ : OpensMeasurableSpace β
f : α → β
inst✝ : SecondCountableTopology ↑(range f)
hf : Measurable f
b : Set (Set ↑(range f))
b_count : Set.Countable b
hb : IsTopologicalBasis b
this✝ : Countable ↑b
this : ∀ (s : ↑b), IsClopenable (rangeFactorization f ⁻¹' ↑s)
⊢ ∃ t', t' ≤ t ∧ Continuous f ∧ PolishSpace α
[PROOFSTEP]
choose T Tt Tpolish _ Topen using this
[GOAL]
case intro.intro.intro
α✝ : Type u_1
inst✝⁶ : TopologicalSpace α✝
ι : Type u_2
α : Type u_3
β : Type u_4
t : TopologicalSpace α
inst✝⁵ : PolishSpace α
inst✝⁴ : MeasurableSpace α
inst✝³ : BorelSpace α
tβ : TopologicalSpace β
inst✝² : MeasurableSpace β
inst✝¹ : OpensMeasurableSpace β
f : α → β
inst✝ : SecondCountableTopology ↑(range f)
hf : Measurable f
b : Set (Set ↑(range f))
b_count : Set.Countable b
hb : IsTopologicalBasis b
this : Countable ↑b
T : ↑b → TopologicalSpace α
Tt : ∀ (s : ↑b), T s ≤ t
Tpolish : ∀ (s : ↑b), PolishSpace α
h✝ : ∀ (s : ↑b), IsClosed (rangeFactorization f ⁻¹' ↑s)
Topen : ∀ (s : ↑b), IsOpen (rangeFactorization f ⁻¹' ↑s)
⊢ ∃ t', t' ≤ t ∧ Continuous f ∧ PolishSpace α
[PROOFSTEP]
obtain ⟨t', t'T, t't, t'_polish⟩ : ∃ t' : TopologicalSpace α, (∀ i, t' ≤ T i) ∧ t' ≤ t ∧ @PolishSpace α t' :=
  exists_polishSpace_forall_le T Tt Tpolish
[GOAL]
case intro.intro.intro.intro.intro.intro
α✝ : Type u_1
inst✝⁶ : TopologicalSpace α✝
ι : Type u_2
α : Type u_3
β : Type u_4
t : TopologicalSpace α
inst✝⁵ : PolishSpace α
inst✝⁴ : MeasurableSpace α
inst✝³ : BorelSpace α
tβ : TopologicalSpace β
inst✝² : MeasurableSpace β
inst✝¹ : OpensMeasurableSpace β
f : α → β
inst✝ : SecondCountableTopology ↑(range f)
hf : Measurable f
b : Set (Set ↑(range f))
b_count : Set.Countable b
hb : IsTopologicalBasis b
this : Countable ↑b
T : ↑b → TopologicalSpace α
Tt : ∀ (s : ↑b), T s ≤ t
Tpolish : ∀ (s : ↑b), PolishSpace α
h✝ : ∀ (s : ↑b), IsClosed (rangeFactorization f ⁻¹' ↑s)
Topen : ∀ (s : ↑b), IsOpen (rangeFactorization f ⁻¹' ↑s)
t' : TopologicalSpace α
t'T : ∀ (i : ↑b), t' ≤ T i
t't : t' ≤ t
t'_polish : PolishSpace α
⊢ ∃ t', t' ≤ t ∧ Continuous f ∧ PolishSpace α
[PROOFSTEP]
refine' ⟨t', t't, _, t'_polish⟩
[GOAL]
case intro.intro.intro.intro.intro.intro
α✝ : Type u_1
inst✝⁶ : TopologicalSpace α✝
ι : Type u_2
α : Type u_3
β : Type u_4
t : TopologicalSpace α
inst✝⁵ : PolishSpace α
inst✝⁴ : MeasurableSpace α
inst✝³ : BorelSpace α
tβ : TopologicalSpace β
inst✝² : MeasurableSpace β
inst✝¹ : OpensMeasurableSpace β
f : α → β
inst✝ : SecondCountableTopology ↑(range f)
hf : Measurable f
b : Set (Set ↑(range f))
b_count : Set.Countable b
hb : IsTopologicalBasis b
this : Countable ↑b
T : ↑b → TopologicalSpace α
Tt : ∀ (s : ↑b), T s ≤ t
Tpolish : ∀ (s : ↑b), PolishSpace α
h✝ : ∀ (s : ↑b), IsClosed (rangeFactorization f ⁻¹' ↑s)
Topen : ∀ (s : ↑b), IsOpen (rangeFactorization f ⁻¹' ↑s)
t' : TopologicalSpace α
t'T : ∀ (i : ↑b), t' ≤ T i
t't : t' ≤ t
t'_polish : PolishSpace α
⊢ Continuous f
[PROOFSTEP]
have : Continuous[t', _] (rangeFactorization f) := hb.continuous _ fun s hs => t'T ⟨s, hs⟩ _ (Topen ⟨s, hs⟩)
[GOAL]
case intro.intro.intro.intro.intro.intro
α✝ : Type u_1
inst✝⁶ : TopologicalSpace α✝
ι : Type u_2
α : Type u_3
β : Type u_4
t : TopologicalSpace α
inst✝⁵ : PolishSpace α
inst✝⁴ : MeasurableSpace α
inst✝³ : BorelSpace α
tβ : TopologicalSpace β
inst✝² : MeasurableSpace β
inst✝¹ : OpensMeasurableSpace β
f : α → β
inst✝ : SecondCountableTopology ↑(range f)
hf : Measurable f
b : Set (Set ↑(range f))
b_count : Set.Countable b
hb : IsTopologicalBasis b
this✝ : Countable ↑b
T : ↑b → TopologicalSpace α
Tt : ∀ (s : ↑b), T s ≤ t
Tpolish : ∀ (s : ↑b), PolishSpace α
h✝ : ∀ (s : ↑b), IsClosed (rangeFactorization f ⁻¹' ↑s)
Topen : ∀ (s : ↑b), IsOpen (rangeFactorization f ⁻¹' ↑s)
t' : TopologicalSpace α
t'T : ∀ (i : ↑b), t' ≤ T i
t't : t' ≤ t
t'_polish : PolishSpace α
this : Continuous (rangeFactorization f)
⊢ Continuous f
[PROOFSTEP]
exact continuous_subtype_val.comp this
[GOAL]
α : Type u_1
inst✝⁸ : TopologicalSpace α
ι : Type u_2
X : Type u_3
Y : Type u_4
inst✝⁷ : TopologicalSpace X
inst✝⁶ : PolishSpace X
inst✝⁵ : MeasurableSpace X
inst✝⁴ : BorelSpace X
inst✝³ : TopologicalSpace Y
inst✝² : MeasurableSpace Y
inst✝¹ : OpensMeasurableSpace Y
f : X → Y
inst✝ : SecondCountableTopology ↑(range f)
s : Set X
hs : MeasurableSet s
hf : Measurable f
⊢ AnalyticSet (f '' s)
[PROOFSTEP]
borelize X
[GOAL]
α : Type u_1
inst✝⁷ : TopologicalSpace α
ι : Type u_2
X : Type u_3
Y : Type u_4
inst✝⁶ : TopologicalSpace X
inst✝⁵ : PolishSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : MeasurableSpace Y
inst✝² : OpensMeasurableSpace Y
f : X → Y
inst✝¹ : SecondCountableTopology ↑(range f)
s : Set X
inst✝ : BorelSpace X
hs : MeasurableSet s
hf : Measurable f
this✝ : MeasurableSpace X := borel X
⊢ AnalyticSet (f '' s)
[PROOFSTEP]
rcases hf.exists_continuous with ⟨τ', hle, hfc, hτ'⟩
[GOAL]
case intro.intro.intro
α : Type u_1
inst✝⁷ : TopologicalSpace α
ι : Type u_2
X : Type u_3
Y : Type u_4
inst✝⁶ : TopologicalSpace X
inst✝⁵ : PolishSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : MeasurableSpace Y
inst✝² : OpensMeasurableSpace Y
f : X → Y
inst✝¹ : SecondCountableTopology ↑(range f)
s : Set X
inst✝ : BorelSpace X
hs : MeasurableSet s
hf : Measurable f
this✝ : MeasurableSpace X := borel X
τ' : TopologicalSpace X
hle : τ' ≤ inst✝⁶
hfc : Continuous f
hτ' : PolishSpace X
⊢ AnalyticSet (f '' s)
[PROOFSTEP]
letI m' : MeasurableSpace X := @borel _ τ'
[GOAL]
case intro.intro.intro
α : Type u_1
inst✝⁷ : TopologicalSpace α
ι : Type u_2
X : Type u_3
Y : Type u_4
inst✝⁶ : TopologicalSpace X
inst✝⁵ : PolishSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : MeasurableSpace Y
inst✝² : OpensMeasurableSpace Y
f : X → Y
inst✝¹ : SecondCountableTopology ↑(range f)
s : Set X
inst✝ : BorelSpace X
hs : MeasurableSet s
hf : Measurable f
this✝ : MeasurableSpace X := borel X
τ' : TopologicalSpace X
hle : τ' ≤ inst✝⁶
hfc : Continuous f
hτ' : PolishSpace X
m' : MeasurableSpace X := borel X
⊢ AnalyticSet (f '' s)
[PROOFSTEP]
haveI b' : BorelSpace X := ⟨rfl⟩
[GOAL]
case intro.intro.intro
α : Type u_1
inst✝⁷ : TopologicalSpace α
ι : Type u_2
X : Type u_3
Y : Type u_4
inst✝⁶ : TopologicalSpace X
inst✝⁵ : PolishSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : MeasurableSpace Y
inst✝² : OpensMeasurableSpace Y
f : X → Y
inst✝¹ : SecondCountableTopology ↑(range f)
s : Set X
inst✝ : BorelSpace X
hs : MeasurableSet s
hf : Measurable f
this✝ : MeasurableSpace X := borel X
τ' : TopologicalSpace X
hle : τ' ≤ inst✝⁶
hfc : Continuous f
hτ' : PolishSpace X
m' : MeasurableSpace X := borel X
b' : BorelSpace X
⊢ AnalyticSet (f '' s)
[PROOFSTEP]
have hle := borel_anti hle
[GOAL]
case intro.intro.intro
α : Type u_1
inst✝⁷ : TopologicalSpace α
ι : Type u_2
X : Type u_3
Y : Type u_4
inst✝⁶ : TopologicalSpace X
inst✝⁵ : PolishSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : MeasurableSpace Y
inst✝² : OpensMeasurableSpace Y
f : X → Y
inst✝¹ : SecondCountableTopology ↑(range f)
s : Set X
inst✝ : BorelSpace X
hs : MeasurableSet s
hf : Measurable f
this✝ : MeasurableSpace X := borel X
τ' : TopologicalSpace X
hle✝ : τ' ≤ inst✝⁶
hfc : Continuous f
hτ' : PolishSpace X
m' : MeasurableSpace X := borel X
b' : BorelSpace X
hle : borel X ≤ borel X
⊢ AnalyticSet (f '' s)
[PROOFSTEP]
exact (hle _ hs).analyticSet.image_of_continuous hfc
[GOAL]
α✝ : Type u_1
inst✝² : TopologicalSpace α✝
ι : Type u_2
inst✝¹ : Countable ι
α : Type u_3
inst✝ : MeasurableSpace α
s t : ι → Set α
h : ∀ (m n : ι), MeasurablySeparable (s m) (t n)
⊢ MeasurablySeparable (⋃ (n : ι), s n) (⋃ (m : ι), t m)
[PROOFSTEP]
choose u hsu htu hu using h
[GOAL]
α✝ : Type u_1
inst✝² : TopologicalSpace α✝
ι : Type u_2
inst✝¹ : Countable ι
α : Type u_3
inst✝ : MeasurableSpace α
s t : ι → Set α
u : ι → ι → Set α
hsu : ∀ (m n : ι), s m ⊆ u m n
htu : ∀ (m n : ι), Disjoint (t n) (u m n)
hu : ∀ (m n : ι), MeasurableSet (u m n)
⊢ MeasurablySeparable (⋃ (n : ι), s n) (⋃ (m : ι), t m)
[PROOFSTEP]
refine' ⟨⋃ m, ⋂ n, u m n, _, _, _⟩
[GOAL]
case refine'_1
α✝ : Type u_1
inst✝² : TopologicalSpace α✝
ι : Type u_2
inst✝¹ : Countable ι
α : Type u_3
inst✝ : MeasurableSpace α
s t : ι → Set α
u : ι → ι → Set α
hsu : ∀ (m n : ι), s m ⊆ u m n
htu : ∀ (m n : ι), Disjoint (t n) (u m n)
hu : ∀ (m n : ι), MeasurableSet (u m n)
⊢ ⋃ (n : ι), s n ⊆ ⋃ (m : ι), ⋂ (n : ι), u m n
[PROOFSTEP]
refine' iUnion_subset fun m => subset_iUnion_of_subset m _
[GOAL]
case refine'_1
α✝ : Type u_1
inst✝² : TopologicalSpace α✝
ι : Type u_2
inst✝¹ : Countable ι
α : Type u_3
inst✝ : MeasurableSpace α
s t : ι → Set α
u : ι → ι → Set α
hsu : ∀ (m n : ι), s m ⊆ u m n
htu : ∀ (m n : ι), Disjoint (t n) (u m n)
hu : ∀ (m n : ι), MeasurableSet (u m n)
m : ι
⊢ s m ⊆ ⋂ (n : ι), u m n
[PROOFSTEP]
exact subset_iInter fun n => hsu m n
[GOAL]
case refine'_2
α✝ : Type u_1
inst✝² : TopologicalSpace α✝
ι : Type u_2
inst✝¹ : Countable ι
α : Type u_3
inst✝ : MeasurableSpace α
s t : ι → Set α
u : ι → ι → Set α
hsu : ∀ (m n : ι), s m ⊆ u m n
htu : ∀ (m n : ι), Disjoint (t n) (u m n)
hu : ∀ (m n : ι), MeasurableSet (u m n)
⊢ Disjoint (⋃ (m : ι), t m) (⋃ (m : ι), ⋂ (n : ι), u m n)
[PROOFSTEP]
simp_rw [disjoint_iUnion_left, disjoint_iUnion_right]
[GOAL]
case refine'_2
α✝ : Type u_1
inst✝² : TopologicalSpace α✝
ι : Type u_2
inst✝¹ : Countable ι
α : Type u_3
inst✝ : MeasurableSpace α
s t : ι → Set α
u : ι → ι → Set α
hsu : ∀ (m n : ι), s m ⊆ u m n
htu : ∀ (m n : ι), Disjoint (t n) (u m n)
hu : ∀ (m n : ι), MeasurableSet (u m n)
⊢ ∀ (i i_1 : ι), Disjoint (t i) (⋂ (n : ι), u i_1 n)
[PROOFSTEP]
intro n m
[GOAL]
case refine'_2
α✝ : Type u_1
inst✝² : TopologicalSpace α✝
ι : Type u_2
inst✝¹ : Countable ι
α : Type u_3
inst✝ : MeasurableSpace α
s t : ι → Set α
u : ι → ι → Set α
hsu : ∀ (m n : ι), s m ⊆ u m n
htu : ∀ (m n : ι), Disjoint (t n) (u m n)
hu : ∀ (m n : ι), MeasurableSet (u m n)
n m : ι
⊢ Disjoint (t n) (⋂ (n : ι), u m n)
[PROOFSTEP]
apply Disjoint.mono_right _ (htu m n)
[GOAL]
α✝ : Type u_1
inst✝² : TopologicalSpace α✝
ι : Type u_2
inst✝¹ : Countable ι
α : Type u_3
inst✝ : MeasurableSpace α
s t : ι → Set α
u : ι → ι → Set α
hsu : ∀ (m n : ι), s m ⊆ u m n
htu : ∀ (m n : ι), Disjoint (t n) (u m n)
hu : ∀ (m n : ι), MeasurableSet (u m n)
n m : ι
⊢ ⋂ (n : ι), u m n ≤ u m n
[PROOFSTEP]
apply iInter_subset
[GOAL]
case refine'_3
α✝ : Type u_1
inst✝² : TopologicalSpace α✝
ι : Type u_2
inst✝¹ : Countable ι
α : Type u_3
inst✝ : MeasurableSpace α
s t : ι → Set α
u : ι → ι → Set α
hsu : ∀ (m n : ι), s m ⊆ u m n
htu : ∀ (m n : ι), Disjoint (t n) (u m n)
hu : ∀ (m n : ι), MeasurableSet (u m n)
⊢ MeasurableSet (⋃ (m : ι), ⋂ (n : ι), u m n)
[PROOFSTEP]
refine' MeasurableSet.iUnion fun m => _
[GOAL]
case refine'_3
α✝ : Type u_1
inst✝² : TopologicalSpace α✝
ι : Type u_2
inst✝¹ : Countable ι
α : Type u_3
inst✝ : MeasurableSpace α
s t : ι → Set α
u : ι → ι → Set α
hsu : ∀ (m n : ι), s m ⊆ u m n
htu : ∀ (m n : ι), Disjoint (t n) (u m n)
hu : ∀ (m n : ι), MeasurableSet (u m n)
m : ι
⊢ MeasurableSet (⋂ (n : ι), u m n)
[PROOFSTEP]
exact MeasurableSet.iInter fun n => hu m n
[GOAL]
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
⊢ MeasurablySeparable (range f) (range g)
[PROOFSTEP]
by_contra hfg
[GOAL]
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
⊢ False
[PROOFSTEP]
have I :
  ∀ n x y,
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1)) :=
  by
  intro n x y
  contrapose!
  intro H
  rw [← iUnion_cylinder_update x n, ← iUnion_cylinder_update y n, image_iUnion, image_iUnion]
  refine' MeasurablySeparable.iUnion fun i j => _
  exact
    H _ _ (update_mem_cylinder _ _ _)
      (update_mem_cylinder _ _ _)
        -- consider the set of pairs of cylinders of some length whose images are not Borel-separated
[GOAL]
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
⊢ ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
[PROOFSTEP]
intro n x y
[GOAL]
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
n : ℕ
x y : ℕ → ℕ
⊢ ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
    ∃ x' y',
      x' ∈ cylinder x n ∧ y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
[PROOFSTEP]
contrapose!
[GOAL]
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
n : ℕ
x y : ℕ → ℕ
⊢ (∀ (x' y' : ℕ → ℕ),
      x' ∈ cylinder x n →
        y' ∈ cylinder y n → MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))) →
    MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n)
[PROOFSTEP]
intro H
[GOAL]
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
n : ℕ
x y : ℕ → ℕ
H :
  ∀ (x' y' : ℕ → ℕ),
    x' ∈ cylinder x n → y' ∈ cylinder y n → MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
⊢ MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n)
[PROOFSTEP]
rw [← iUnion_cylinder_update x n, ← iUnion_cylinder_update y n, image_iUnion, image_iUnion]
[GOAL]
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
n : ℕ
x y : ℕ → ℕ
H :
  ∀ (x' y' : ℕ → ℕ),
    x' ∈ cylinder x n → y' ∈ cylinder y n → MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
⊢ MeasurablySeparable (⋃ (i : ℕ), f '' cylinder (update x n i) (n + 1))
    (⋃ (i : ℕ), g '' cylinder (update y n i) (n + 1))
[PROOFSTEP]
refine' MeasurablySeparable.iUnion fun i j => _
[GOAL]
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
n : ℕ
x y : ℕ → ℕ
H :
  ∀ (x' y' : ℕ → ℕ),
    x' ∈ cylinder x n → y' ∈ cylinder y n → MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
i j : ℕ
⊢ MeasurablySeparable (f '' cylinder (update x n i) (n + 1)) (g '' cylinder (update y n j) (n + 1))
[PROOFSTEP]
exact
  H _ _ (update_mem_cylinder _ _ _)
    (update_mem_cylinder _ _ _)
      -- consider the set of pairs of cylinders of some length whose images are not Borel-separated
[GOAL]
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
⊢ False
[PROOFSTEP]
let A :=
  { p : ℕ × (ℕ → ℕ) × (ℕ → ℕ) // ¬MeasurablySeparable (f '' cylinder p.2.1 p.1) (g '' cylinder p.2.2 p.1) }
    -- for each such pair, one can find longer cylinders whose images are not Borel-separated either
[GOAL]
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
⊢ False
[PROOFSTEP]
have : ∀ p : A, ∃ q : A, q.1.1 = p.1.1 + 1 ∧ q.1.2.1 ∈ cylinder p.1.2.1 p.1.1 ∧ q.1.2.2 ∈ cylinder p.1.2.2 p.1.1 :=
  by
  rintro ⟨⟨n, x, y⟩, hp⟩
  rcases I n x y hp with ⟨x', y', hx', hy', h'⟩
  exact ⟨⟨⟨n + 1, x', y'⟩, h'⟩, rfl, hx', hy'⟩
[GOAL]
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
⊢ ∀ (p : A),
    ∃ q,
      (↑q).fst = (↑p).fst + 1 ∧
        (↑q).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst ∧ (↑q).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
[PROOFSTEP]
rintro ⟨⟨n, x, y⟩, hp⟩
[GOAL]
case mk.mk.mk
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
n : ℕ
x y : ℕ → ℕ
hp :
  ¬MeasurablySeparable (f '' cylinder (n, x, y).snd.fst (n, x, y).fst) (g '' cylinder (n, x, y).snd.snd (n, x, y).fst)
⊢ ∃ q,
    (↑q).fst = (↑{ val := (n, x, y), property := hp }).fst + 1 ∧
      (↑q).snd.fst ∈
          cylinder (↑{ val := (n, x, y), property := hp }).snd.fst (↑{ val := (n, x, y), property := hp }).fst ∧
        (↑q).snd.snd ∈
          cylinder (↑{ val := (n, x, y), property := hp }).snd.snd (↑{ val := (n, x, y), property := hp }).fst
[PROOFSTEP]
rcases I n x y hp with ⟨x', y', hx', hy', h'⟩
[GOAL]
case mk.mk.mk.intro.intro.intro.intro
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
n : ℕ
x y : ℕ → ℕ
hp :
  ¬MeasurablySeparable (f '' cylinder (n, x, y).snd.fst (n, x, y).fst) (g '' cylinder (n, x, y).snd.snd (n, x, y).fst)
x' y' : ℕ → ℕ
hx' : x' ∈ cylinder x n
hy' : y' ∈ cylinder y n
h' : ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
⊢ ∃ q,
    (↑q).fst = (↑{ val := (n, x, y), property := hp }).fst + 1 ∧
      (↑q).snd.fst ∈
          cylinder (↑{ val := (n, x, y), property := hp }).snd.fst (↑{ val := (n, x, y), property := hp }).fst ∧
        (↑q).snd.snd ∈
          cylinder (↑{ val := (n, x, y), property := hp }).snd.snd (↑{ val := (n, x, y), property := hp }).fst
[PROOFSTEP]
exact ⟨⟨⟨n + 1, x', y'⟩, h'⟩, rfl, hx', hy'⟩
[GOAL]
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
this :
  ∀ (p : A),
    ∃ q,
      (↑q).fst = (↑p).fst + 1 ∧
        (↑q).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst ∧ (↑q).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
⊢ False
[PROOFSTEP]
choose F hFn hFx hFy using this
[GOAL]
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
⊢ False
[PROOFSTEP]
let p0 : A :=
  ⟨⟨0, fun _ => 0, fun _ => 0⟩, by simp [hfg]⟩
    -- construct inductively decreasing sequences of cylinders whose images are not separated
[GOAL]
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
⊢ ¬MeasurablySeparable (f '' cylinder (0, fun x => 0, fun x => 0).snd.fst (0, fun x => 0, fun x => 0).fst)
      (g '' cylinder (0, fun x => 0, fun x => 0).snd.snd (0, fun x => 0, fun x => 0).fst)
[PROOFSTEP]
simp [hfg]
[GOAL]
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
⊢ False
[PROOFSTEP]
let p : ℕ → A := fun n => F^[n] p0
[GOAL]
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
⊢ False
[PROOFSTEP]
have prec : ∀ n, p (n + 1) = F (p n) := fun n => by
  simp only [iterate_succ', Function.comp]
    -- check that at the `n`-th step we deal with cylinders of length `n`
[GOAL]
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
n : ℕ
⊢ p (n + 1) = F (p n)
[PROOFSTEP]
simp only [iterate_succ', Function.comp]
  -- check that at the `n`-th step we deal with cylinders of length `n`
[GOAL]
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
prec : ∀ (n : ℕ), p (n + 1) = F (p n)
⊢ False
[PROOFSTEP]
have pn_fst : ∀ n, (p n).1.1 = n := by
  intro n
  induction' n with n IH
  · rfl
  ·
    simp only [prec, hFn, IH]
      -- check that the cylinders we construct are indeed decreasing, by checking that the coordinates
        -- are stationary.
[GOAL]
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
prec : ∀ (n : ℕ), p (n + 1) = F (p n)
⊢ ∀ (n : ℕ), (↑(p n)).fst = n
[PROOFSTEP]
intro n
[GOAL]
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
prec : ∀ (n : ℕ), p (n + 1) = F (p n)
n : ℕ
⊢ (↑(p n)).fst = n
[PROOFSTEP]
induction' n with n IH
[GOAL]
case zero
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
prec : ∀ (n : ℕ), p (n + 1) = F (p n)
⊢ (↑(p Nat.zero)).fst = Nat.zero
[PROOFSTEP]
rfl
[GOAL]
case succ
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
prec : ∀ (n : ℕ), p (n + 1) = F (p n)
n : ℕ
IH : (↑(p n)).fst = n
⊢ (↑(p (Nat.succ n))).fst = Nat.succ n
[PROOFSTEP]
simp only [prec, hFn, IH]
  -- check that the cylinders we construct are indeed decreasing, by checking that the coordinates
    -- are stationary.
[GOAL]
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
prec : ∀ (n : ℕ), p (n + 1) = F (p n)
pn_fst : ∀ (n : ℕ), (↑(p n)).fst = n
⊢ False
[PROOFSTEP]
have Ix : ∀ m n, m + 1 ≤ n → (p n).1.2.1 m = (p (m + 1)).1.2.1 m :=
  by
  intro m
  apply Nat.le_induction
  · rfl
  intro n hmn IH
  have I : (F (p n)).val.snd.fst m = (p n).val.snd.fst m :=
    by
    apply hFx (p n) m
    rw [pn_fst]
    exact hmn
  rw [prec, I, IH]
[GOAL]
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
prec : ∀ (n : ℕ), p (n + 1) = F (p n)
pn_fst : ∀ (n : ℕ), (↑(p n)).fst = n
⊢ ∀ (m n : ℕ), m + 1 ≤ n → Prod.fst (↑(p n)).snd m = Prod.fst (↑(p (m + 1))).snd m
[PROOFSTEP]
intro m
[GOAL]
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
prec : ∀ (n : ℕ), p (n + 1) = F (p n)
pn_fst : ∀ (n : ℕ), (↑(p n)).fst = n
m : ℕ
⊢ ∀ (n : ℕ), m + 1 ≤ n → Prod.fst (↑(p n)).snd m = Prod.fst (↑(p (m + 1))).snd m
[PROOFSTEP]
apply Nat.le_induction
[GOAL]
case base
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
prec : ∀ (n : ℕ), p (n + 1) = F (p n)
pn_fst : ∀ (n : ℕ), (↑(p n)).fst = n
m : ℕ
⊢ Prod.fst (↑(p (m + 1))).snd m = Prod.fst (↑(p (m + 1))).snd m
[PROOFSTEP]
rfl
[GOAL]
case succ
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
prec : ∀ (n : ℕ), p (n + 1) = F (p n)
pn_fst : ∀ (n : ℕ), (↑(p n)).fst = n
m : ℕ
⊢ ∀ (n : ℕ),
    m + 1 ≤ n →
      Prod.fst (↑(p n)).snd m = Prod.fst (↑(p (m + 1))).snd m →
        Prod.fst (↑(p (n + 1))).snd m = Prod.fst (↑(p (m + 1))).snd m
[PROOFSTEP]
intro n hmn IH
[GOAL]
case succ
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
prec : ∀ (n : ℕ), p (n + 1) = F (p n)
pn_fst : ∀ (n : ℕ), (↑(p n)).fst = n
m n : ℕ
hmn : m + 1 ≤ n
IH : Prod.fst (↑(p n)).snd m = Prod.fst (↑(p (m + 1))).snd m
⊢ Prod.fst (↑(p (n + 1))).snd m = Prod.fst (↑(p (m + 1))).snd m
[PROOFSTEP]
have I : (F (p n)).val.snd.fst m = (p n).val.snd.fst m :=
  by
  apply hFx (p n) m
  rw [pn_fst]
  exact hmn
[GOAL]
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
prec : ∀ (n : ℕ), p (n + 1) = F (p n)
pn_fst : ∀ (n : ℕ), (↑(p n)).fst = n
m n : ℕ
hmn : m + 1 ≤ n
IH : Prod.fst (↑(p n)).snd m = Prod.fst (↑(p (m + 1))).snd m
⊢ Prod.fst (↑(F (p n))).snd m = Prod.fst (↑(p n)).snd m
[PROOFSTEP]
apply hFx (p n) m
[GOAL]
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
prec : ∀ (n : ℕ), p (n + 1) = F (p n)
pn_fst : ∀ (n : ℕ), (↑(p n)).fst = n
m n : ℕ
hmn : m + 1 ≤ n
IH : Prod.fst (↑(p n)).snd m = Prod.fst (↑(p (m + 1))).snd m
⊢ m < (↑(p n)).fst
[PROOFSTEP]
rw [pn_fst]
[GOAL]
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
prec : ∀ (n : ℕ), p (n + 1) = F (p n)
pn_fst : ∀ (n : ℕ), (↑(p n)).fst = n
m n : ℕ
hmn : m + 1 ≤ n
IH : Prod.fst (↑(p n)).snd m = Prod.fst (↑(p (m + 1))).snd m
⊢ m < n
[PROOFSTEP]
exact hmn
[GOAL]
case succ
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I✝ :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
prec : ∀ (n : ℕ), p (n + 1) = F (p n)
pn_fst : ∀ (n : ℕ), (↑(p n)).fst = n
m n : ℕ
hmn : m + 1 ≤ n
IH : Prod.fst (↑(p n)).snd m = Prod.fst (↑(p (m + 1))).snd m
I : Prod.fst (↑(F (p n))).snd m = Prod.fst (↑(p n)).snd m
⊢ Prod.fst (↑(p (n + 1))).snd m = Prod.fst (↑(p (m + 1))).snd m
[PROOFSTEP]
rw [prec, I, IH]
[GOAL]
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
prec : ∀ (n : ℕ), p (n + 1) = F (p n)
pn_fst : ∀ (n : ℕ), (↑(p n)).fst = n
Ix : ∀ (m n : ℕ), m + 1 ≤ n → Prod.fst (↑(p n)).snd m = Prod.fst (↑(p (m + 1))).snd m
⊢ False
[PROOFSTEP]
have Iy : ∀ m n, m + 1 ≤ n → (p n).1.2.2 m = (p (m + 1)).1.2.2 m :=
  by
  intro m
  apply Nat.le_induction
  · rfl
  intro n hmn IH
  have I : (F (p n)).val.snd.snd m = (p n).val.snd.snd m :=
    by
    apply hFy (p n) m
    rw [pn_fst]
    exact hmn
  rw [prec, I, IH]
    -- denote by `x` and `y` the limit points of these two sequences of cylinders.
[GOAL]
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
prec : ∀ (n : ℕ), p (n + 1) = F (p n)
pn_fst : ∀ (n : ℕ), (↑(p n)).fst = n
Ix : ∀ (m n : ℕ), m + 1 ≤ n → Prod.fst (↑(p n)).snd m = Prod.fst (↑(p (m + 1))).snd m
⊢ ∀ (m n : ℕ), m + 1 ≤ n → Prod.snd (↑(p n)).snd m = Prod.snd (↑(p (m + 1))).snd m
[PROOFSTEP]
intro m
[GOAL]
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
prec : ∀ (n : ℕ), p (n + 1) = F (p n)
pn_fst : ∀ (n : ℕ), (↑(p n)).fst = n
Ix : ∀ (m n : ℕ), m + 1 ≤ n → Prod.fst (↑(p n)).snd m = Prod.fst (↑(p (m + 1))).snd m
m : ℕ
⊢ ∀ (n : ℕ), m + 1 ≤ n → Prod.snd (↑(p n)).snd m = Prod.snd (↑(p (m + 1))).snd m
[PROOFSTEP]
apply Nat.le_induction
[GOAL]
case base
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
prec : ∀ (n : ℕ), p (n + 1) = F (p n)
pn_fst : ∀ (n : ℕ), (↑(p n)).fst = n
Ix : ∀ (m n : ℕ), m + 1 ≤ n → Prod.fst (↑(p n)).snd m = Prod.fst (↑(p (m + 1))).snd m
m : ℕ
⊢ Prod.snd (↑(p (m + 1))).snd m = Prod.snd (↑(p (m + 1))).snd m
[PROOFSTEP]
rfl
[GOAL]
case succ
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
prec : ∀ (n : ℕ), p (n + 1) = F (p n)
pn_fst : ∀ (n : ℕ), (↑(p n)).fst = n
Ix : ∀ (m n : ℕ), m + 1 ≤ n → Prod.fst (↑(p n)).snd m = Prod.fst (↑(p (m + 1))).snd m
m : ℕ
⊢ ∀ (n : ℕ),
    m + 1 ≤ n →
      Prod.snd (↑(p n)).snd m = Prod.snd (↑(p (m + 1))).snd m →
        Prod.snd (↑(p (n + 1))).snd m = Prod.snd (↑(p (m + 1))).snd m
[PROOFSTEP]
intro n hmn IH
[GOAL]
case succ
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
prec : ∀ (n : ℕ), p (n + 1) = F (p n)
pn_fst : ∀ (n : ℕ), (↑(p n)).fst = n
Ix : ∀ (m n : ℕ), m + 1 ≤ n → Prod.fst (↑(p n)).snd m = Prod.fst (↑(p (m + 1))).snd m
m n : ℕ
hmn : m + 1 ≤ n
IH : Prod.snd (↑(p n)).snd m = Prod.snd (↑(p (m + 1))).snd m
⊢ Prod.snd (↑(p (n + 1))).snd m = Prod.snd (↑(p (m + 1))).snd m
[PROOFSTEP]
have I : (F (p n)).val.snd.snd m = (p n).val.snd.snd m :=
  by
  apply hFy (p n) m
  rw [pn_fst]
  exact hmn
[GOAL]
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
prec : ∀ (n : ℕ), p (n + 1) = F (p n)
pn_fst : ∀ (n : ℕ), (↑(p n)).fst = n
Ix : ∀ (m n : ℕ), m + 1 ≤ n → Prod.fst (↑(p n)).snd m = Prod.fst (↑(p (m + 1))).snd m
m n : ℕ
hmn : m + 1 ≤ n
IH : Prod.snd (↑(p n)).snd m = Prod.snd (↑(p (m + 1))).snd m
⊢ Prod.snd (↑(F (p n))).snd m = Prod.snd (↑(p n)).snd m
[PROOFSTEP]
apply hFy (p n) m
[GOAL]
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
prec : ∀ (n : ℕ), p (n + 1) = F (p n)
pn_fst : ∀ (n : ℕ), (↑(p n)).fst = n
Ix : ∀ (m n : ℕ), m + 1 ≤ n → Prod.fst (↑(p n)).snd m = Prod.fst (↑(p (m + 1))).snd m
m n : ℕ
hmn : m + 1 ≤ n
IH : Prod.snd (↑(p n)).snd m = Prod.snd (↑(p (m + 1))).snd m
⊢ m < (↑(p n)).fst
[PROOFSTEP]
rw [pn_fst]
[GOAL]
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
prec : ∀ (n : ℕ), p (n + 1) = F (p n)
pn_fst : ∀ (n : ℕ), (↑(p n)).fst = n
Ix : ∀ (m n : ℕ), m + 1 ≤ n → Prod.fst (↑(p n)).snd m = Prod.fst (↑(p (m + 1))).snd m
m n : ℕ
hmn : m + 1 ≤ n
IH : Prod.snd (↑(p n)).snd m = Prod.snd (↑(p (m + 1))).snd m
⊢ m < n
[PROOFSTEP]
exact hmn
[GOAL]
case succ
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I✝ :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
prec : ∀ (n : ℕ), p (n + 1) = F (p n)
pn_fst : ∀ (n : ℕ), (↑(p n)).fst = n
Ix : ∀ (m n : ℕ), m + 1 ≤ n → Prod.fst (↑(p n)).snd m = Prod.fst (↑(p (m + 1))).snd m
m n : ℕ
hmn : m + 1 ≤ n
IH : Prod.snd (↑(p n)).snd m = Prod.snd (↑(p (m + 1))).snd m
I : Prod.snd (↑(F (p n))).snd m = Prod.snd (↑(p n)).snd m
⊢ Prod.snd (↑(p (n + 1))).snd m = Prod.snd (↑(p (m + 1))).snd m
[PROOFSTEP]
rw [prec, I, IH]
  -- denote by `x` and `y` the limit points of these two sequences of cylinders.
[GOAL]
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
prec : ∀ (n : ℕ), p (n + 1) = F (p n)
pn_fst : ∀ (n : ℕ), (↑(p n)).fst = n
Ix : ∀ (m n : ℕ), m + 1 ≤ n → Prod.fst (↑(p n)).snd m = Prod.fst (↑(p (m + 1))).snd m
Iy : ∀ (m n : ℕ), m + 1 ≤ n → Prod.snd (↑(p n)).snd m = Prod.snd (↑(p (m + 1))).snd m
⊢ False
[PROOFSTEP]
set x : ℕ → ℕ := fun n => (p (n + 1)).1.2.1 n with hx
[GOAL]
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
prec : ∀ (n : ℕ), p (n + 1) = F (p n)
pn_fst : ∀ (n : ℕ), (↑(p n)).fst = n
Ix : ∀ (m n : ℕ), m + 1 ≤ n → Prod.fst (↑(p n)).snd m = Prod.fst (↑(p (m + 1))).snd m
Iy : ∀ (m n : ℕ), m + 1 ≤ n → Prod.snd (↑(p n)).snd m = Prod.snd (↑(p (m + 1))).snd m
x : ℕ → ℕ := fun n => Prod.fst (↑(p (n + 1))).snd n
hx : x = fun n => Prod.fst (↑(p (n + 1))).snd n
⊢ False
[PROOFSTEP]
set y : ℕ → ℕ := fun n => (p (n + 1)).1.2.2 n with hy
[GOAL]
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
prec : ∀ (n : ℕ), p (n + 1) = F (p n)
pn_fst : ∀ (n : ℕ), (↑(p n)).fst = n
Ix : ∀ (m n : ℕ), m + 1 ≤ n → Prod.fst (↑(p n)).snd m = Prod.fst (↑(p (m + 1))).snd m
Iy : ∀ (m n : ℕ), m + 1 ≤ n → Prod.snd (↑(p n)).snd m = Prod.snd (↑(p (m + 1))).snd m
x : ℕ → ℕ := fun n => Prod.fst (↑(p (n + 1))).snd n
hx : x = fun n => Prod.fst (↑(p (n + 1))).snd n
y : ℕ → ℕ := fun n => Prod.snd (↑(p (n + 1))).snd n
hy : y = fun n => Prod.snd (↑(p (n + 1))).snd n
⊢ False
[PROOFSTEP]
have M : ∀ n, ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) :=
  by
  intro n
  convert (p n).2 using 3
  · rw [pn_fst, ← mem_cylinder_iff_eq, mem_cylinder_iff]
    intro i hi
    rw [hx]
    exact (Ix i n hi).symm
  · rw [pn_fst, ← mem_cylinder_iff_eq, mem_cylinder_iff]
    intro i hi
    rw [hy]
    exact (Iy i n hi).symm
[GOAL]
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
prec : ∀ (n : ℕ), p (n + 1) = F (p n)
pn_fst : ∀ (n : ℕ), (↑(p n)).fst = n
Ix : ∀ (m n : ℕ), m + 1 ≤ n → Prod.fst (↑(p n)).snd m = Prod.fst (↑(p (m + 1))).snd m
Iy : ∀ (m n : ℕ), m + 1 ≤ n → Prod.snd (↑(p n)).snd m = Prod.snd (↑(p (m + 1))).snd m
x : ℕ → ℕ := fun n => Prod.fst (↑(p (n + 1))).snd n
hx : x = fun n => Prod.fst (↑(p (n + 1))).snd n
y : ℕ → ℕ := fun n => Prod.snd (↑(p (n + 1))).snd n
hy : y = fun n => Prod.snd (↑(p (n + 1))).snd n
⊢ ∀ (n : ℕ), ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n)
[PROOFSTEP]
intro n
[GOAL]
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
prec : ∀ (n : ℕ), p (n + 1) = F (p n)
pn_fst : ∀ (n : ℕ), (↑(p n)).fst = n
Ix : ∀ (m n : ℕ), m + 1 ≤ n → Prod.fst (↑(p n)).snd m = Prod.fst (↑(p (m + 1))).snd m
Iy : ∀ (m n : ℕ), m + 1 ≤ n → Prod.snd (↑(p n)).snd m = Prod.snd (↑(p (m + 1))).snd m
x : ℕ → ℕ := fun n => Prod.fst (↑(p (n + 1))).snd n
hx : x = fun n => Prod.fst (↑(p (n + 1))).snd n
y : ℕ → ℕ := fun n => Prod.snd (↑(p (n + 1))).snd n
hy : y = fun n => Prod.snd (↑(p (n + 1))).snd n
n : ℕ
⊢ ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n)
[PROOFSTEP]
convert (p n).2 using 3
[GOAL]
case h.e'_1.h.e'_3.h.e'_4
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
prec : ∀ (n : ℕ), p (n + 1) = F (p n)
pn_fst : ∀ (n : ℕ), (↑(p n)).fst = n
Ix : ∀ (m n : ℕ), m + 1 ≤ n → Prod.fst (↑(p n)).snd m = Prod.fst (↑(p (m + 1))).snd m
Iy : ∀ (m n : ℕ), m + 1 ≤ n → Prod.snd (↑(p n)).snd m = Prod.snd (↑(p (m + 1))).snd m
x : ℕ → ℕ := fun n => Prod.fst (↑(p (n + 1))).snd n
hx : x = fun n => Prod.fst (↑(p (n + 1))).snd n
y : ℕ → ℕ := fun n => Prod.snd (↑(p (n + 1))).snd n
hy : y = fun n => Prod.snd (↑(p (n + 1))).snd n
n : ℕ
⊢ cylinder x n = cylinder (↑(p n)).snd.fst (↑(p n)).fst
[PROOFSTEP]
rw [pn_fst, ← mem_cylinder_iff_eq, mem_cylinder_iff]
[GOAL]
case h.e'_1.h.e'_3.h.e'_4
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
prec : ∀ (n : ℕ), p (n + 1) = F (p n)
pn_fst : ∀ (n : ℕ), (↑(p n)).fst = n
Ix : ∀ (m n : ℕ), m + 1 ≤ n → Prod.fst (↑(p n)).snd m = Prod.fst (↑(p (m + 1))).snd m
Iy : ∀ (m n : ℕ), m + 1 ≤ n → Prod.snd (↑(p n)).snd m = Prod.snd (↑(p (m + 1))).snd m
x : ℕ → ℕ := fun n => Prod.fst (↑(p (n + 1))).snd n
hx : x = fun n => Prod.fst (↑(p (n + 1))).snd n
y : ℕ → ℕ := fun n => Prod.snd (↑(p (n + 1))).snd n
hy : y = fun n => Prod.snd (↑(p (n + 1))).snd n
n : ℕ
⊢ ∀ (i : ℕ), i < n → x i = Prod.fst (↑(p n)).snd i
[PROOFSTEP]
intro i hi
[GOAL]
case h.e'_1.h.e'_3.h.e'_4
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
prec : ∀ (n : ℕ), p (n + 1) = F (p n)
pn_fst : ∀ (n : ℕ), (↑(p n)).fst = n
Ix : ∀ (m n : ℕ), m + 1 ≤ n → Prod.fst (↑(p n)).snd m = Prod.fst (↑(p (m + 1))).snd m
Iy : ∀ (m n : ℕ), m + 1 ≤ n → Prod.snd (↑(p n)).snd m = Prod.snd (↑(p (m + 1))).snd m
x : ℕ → ℕ := fun n => Prod.fst (↑(p (n + 1))).snd n
hx : x = fun n => Prod.fst (↑(p (n + 1))).snd n
y : ℕ → ℕ := fun n => Prod.snd (↑(p (n + 1))).snd n
hy : y = fun n => Prod.snd (↑(p (n + 1))).snd n
n i : ℕ
hi : i < n
⊢ x i = Prod.fst (↑(p n)).snd i
[PROOFSTEP]
rw [hx]
[GOAL]
case h.e'_1.h.e'_3.h.e'_4
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
prec : ∀ (n : ℕ), p (n + 1) = F (p n)
pn_fst : ∀ (n : ℕ), (↑(p n)).fst = n
Ix : ∀ (m n : ℕ), m + 1 ≤ n → Prod.fst (↑(p n)).snd m = Prod.fst (↑(p (m + 1))).snd m
Iy : ∀ (m n : ℕ), m + 1 ≤ n → Prod.snd (↑(p n)).snd m = Prod.snd (↑(p (m + 1))).snd m
x : ℕ → ℕ := fun n => Prod.fst (↑(p (n + 1))).snd n
hx : x = fun n => Prod.fst (↑(p (n + 1))).snd n
y : ℕ → ℕ := fun n => Prod.snd (↑(p (n + 1))).snd n
hy : y = fun n => Prod.snd (↑(p (n + 1))).snd n
n i : ℕ
hi : i < n
⊢ (fun n => Prod.fst (↑(p (n + 1))).snd n) i = Prod.fst (↑(p n)).snd i
[PROOFSTEP]
exact (Ix i n hi).symm
[GOAL]
case h.e'_1.h.e'_4.h.e'_4
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
prec : ∀ (n : ℕ), p (n + 1) = F (p n)
pn_fst : ∀ (n : ℕ), (↑(p n)).fst = n
Ix : ∀ (m n : ℕ), m + 1 ≤ n → Prod.fst (↑(p n)).snd m = Prod.fst (↑(p (m + 1))).snd m
Iy : ∀ (m n : ℕ), m + 1 ≤ n → Prod.snd (↑(p n)).snd m = Prod.snd (↑(p (m + 1))).snd m
x : ℕ → ℕ := fun n => Prod.fst (↑(p (n + 1))).snd n
hx : x = fun n => Prod.fst (↑(p (n + 1))).snd n
y : ℕ → ℕ := fun n => Prod.snd (↑(p (n + 1))).snd n
hy : y = fun n => Prod.snd (↑(p (n + 1))).snd n
n : ℕ
⊢ cylinder y n = cylinder (↑(p n)).snd.snd (↑(p n)).fst
[PROOFSTEP]
rw [pn_fst, ← mem_cylinder_iff_eq, mem_cylinder_iff]
[GOAL]
case h.e'_1.h.e'_4.h.e'_4
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
prec : ∀ (n : ℕ), p (n + 1) = F (p n)
pn_fst : ∀ (n : ℕ), (↑(p n)).fst = n
Ix : ∀ (m n : ℕ), m + 1 ≤ n → Prod.fst (↑(p n)).snd m = Prod.fst (↑(p (m + 1))).snd m
Iy : ∀ (m n : ℕ), m + 1 ≤ n → Prod.snd (↑(p n)).snd m = Prod.snd (↑(p (m + 1))).snd m
x : ℕ → ℕ := fun n => Prod.fst (↑(p (n + 1))).snd n
hx : x = fun n => Prod.fst (↑(p (n + 1))).snd n
y : ℕ → ℕ := fun n => Prod.snd (↑(p (n + 1))).snd n
hy : y = fun n => Prod.snd (↑(p (n + 1))).snd n
n : ℕ
⊢ ∀ (i : ℕ), i < n → y i = Prod.snd (↑(p n)).snd i
[PROOFSTEP]
intro i hi
[GOAL]
case h.e'_1.h.e'_4.h.e'_4
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
prec : ∀ (n : ℕ), p (n + 1) = F (p n)
pn_fst : ∀ (n : ℕ), (↑(p n)).fst = n
Ix : ∀ (m n : ℕ), m + 1 ≤ n → Prod.fst (↑(p n)).snd m = Prod.fst (↑(p (m + 1))).snd m
Iy : ∀ (m n : ℕ), m + 1 ≤ n → Prod.snd (↑(p n)).snd m = Prod.snd (↑(p (m + 1))).snd m
x : ℕ → ℕ := fun n => Prod.fst (↑(p (n + 1))).snd n
hx : x = fun n => Prod.fst (↑(p (n + 1))).snd n
y : ℕ → ℕ := fun n => Prod.snd (↑(p (n + 1))).snd n
hy : y = fun n => Prod.snd (↑(p (n + 1))).snd n
n i : ℕ
hi : i < n
⊢ y i = Prod.snd (↑(p n)).snd i
[PROOFSTEP]
rw [hy]
[GOAL]
case h.e'_1.h.e'_4.h.e'_4
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
prec : ∀ (n : ℕ), p (n + 1) = F (p n)
pn_fst : ∀ (n : ℕ), (↑(p n)).fst = n
Ix : ∀ (m n : ℕ), m + 1 ≤ n → Prod.fst (↑(p n)).snd m = Prod.fst (↑(p (m + 1))).snd m
Iy : ∀ (m n : ℕ), m + 1 ≤ n → Prod.snd (↑(p n)).snd m = Prod.snd (↑(p (m + 1))).snd m
x : ℕ → ℕ := fun n => Prod.fst (↑(p (n + 1))).snd n
hx : x = fun n => Prod.fst (↑(p (n + 1))).snd n
y : ℕ → ℕ := fun n => Prod.snd (↑(p (n + 1))).snd n
hy : y = fun n => Prod.snd (↑(p (n + 1))).snd n
n i : ℕ
hi : i < n
⊢ (fun n => Prod.snd (↑(p (n + 1))).snd n) i = Prod.snd (↑(p n)).snd i
[PROOFSTEP]
exact (Iy i n hi).symm
[GOAL]
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
prec : ∀ (n : ℕ), p (n + 1) = F (p n)
pn_fst : ∀ (n : ℕ), (↑(p n)).fst = n
Ix : ∀ (m n : ℕ), m + 1 ≤ n → Prod.fst (↑(p n)).snd m = Prod.fst (↑(p (m + 1))).snd m
Iy : ∀ (m n : ℕ), m + 1 ≤ n → Prod.snd (↑(p n)).snd m = Prod.snd (↑(p (m + 1))).snd m
x : ℕ → ℕ := fun n => Prod.fst (↑(p (n + 1))).snd n
hx : x = fun n => Prod.fst (↑(p (n + 1))).snd n
y : ℕ → ℕ := fun n => Prod.snd (↑(p (n + 1))).snd n
hy : y = fun n => Prod.snd (↑(p (n + 1))).snd n
M : ∀ (n : ℕ), ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n)
⊢ False
[PROOFSTEP]
obtain ⟨u, v, u_open, v_open, xu, yv, huv⟩ : ∃ u v : Set α, IsOpen u ∧ IsOpen v ∧ f x ∈ u ∧ g y ∈ v ∧ Disjoint u v :=
  by
  apply t2_separation
  exact disjoint_iff_forall_ne.1 h (mem_range_self _) (mem_range_self _)
[GOAL]
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
prec : ∀ (n : ℕ), p (n + 1) = F (p n)
pn_fst : ∀ (n : ℕ), (↑(p n)).fst = n
Ix : ∀ (m n : ℕ), m + 1 ≤ n → Prod.fst (↑(p n)).snd m = Prod.fst (↑(p (m + 1))).snd m
Iy : ∀ (m n : ℕ), m + 1 ≤ n → Prod.snd (↑(p n)).snd m = Prod.snd (↑(p (m + 1))).snd m
x : ℕ → ℕ := fun n => Prod.fst (↑(p (n + 1))).snd n
hx : x = fun n => Prod.fst (↑(p (n + 1))).snd n
y : ℕ → ℕ := fun n => Prod.snd (↑(p (n + 1))).snd n
hy : y = fun n => Prod.snd (↑(p (n + 1))).snd n
M : ∀ (n : ℕ), ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n)
⊢ ∃ u v, IsOpen u ∧ IsOpen v ∧ f x ∈ u ∧ g y ∈ v ∧ Disjoint u v
[PROOFSTEP]
apply t2_separation
[GOAL]
case h
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
prec : ∀ (n : ℕ), p (n + 1) = F (p n)
pn_fst : ∀ (n : ℕ), (↑(p n)).fst = n
Ix : ∀ (m n : ℕ), m + 1 ≤ n → Prod.fst (↑(p n)).snd m = Prod.fst (↑(p (m + 1))).snd m
Iy : ∀ (m n : ℕ), m + 1 ≤ n → Prod.snd (↑(p n)).snd m = Prod.snd (↑(p (m + 1))).snd m
x : ℕ → ℕ := fun n => Prod.fst (↑(p (n + 1))).snd n
hx : x = fun n => Prod.fst (↑(p (n + 1))).snd n
y : ℕ → ℕ := fun n => Prod.snd (↑(p (n + 1))).snd n
hy : y = fun n => Prod.snd (↑(p (n + 1))).snd n
M : ∀ (n : ℕ), ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n)
⊢ f x ≠ g y
[PROOFSTEP]
exact disjoint_iff_forall_ne.1 h (mem_range_self _) (mem_range_self _)
[GOAL]
case intro.intro.intro.intro.intro.intro
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
prec : ∀ (n : ℕ), p (n + 1) = F (p n)
pn_fst : ∀ (n : ℕ), (↑(p n)).fst = n
Ix : ∀ (m n : ℕ), m + 1 ≤ n → Prod.fst (↑(p n)).snd m = Prod.fst (↑(p (m + 1))).snd m
Iy : ∀ (m n : ℕ), m + 1 ≤ n → Prod.snd (↑(p n)).snd m = Prod.snd (↑(p (m + 1))).snd m
x : ℕ → ℕ := fun n => Prod.fst (↑(p (n + 1))).snd n
hx : x = fun n => Prod.fst (↑(p (n + 1))).snd n
y : ℕ → ℕ := fun n => Prod.snd (↑(p (n + 1))).snd n
hy : y = fun n => Prod.snd (↑(p (n + 1))).snd n
M : ∀ (n : ℕ), ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n)
u v : Set α
u_open : IsOpen u
v_open : IsOpen v
xu : f x ∈ u
yv : g y ∈ v
huv : Disjoint u v
⊢ False
[PROOFSTEP]
letI : MetricSpace (ℕ → ℕ) := metricSpaceNatNat
[GOAL]
case intro.intro.intro.intro.intro.intro
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
prec : ∀ (n : ℕ), p (n + 1) = F (p n)
pn_fst : ∀ (n : ℕ), (↑(p n)).fst = n
Ix : ∀ (m n : ℕ), m + 1 ≤ n → Prod.fst (↑(p n)).snd m = Prod.fst (↑(p (m + 1))).snd m
Iy : ∀ (m n : ℕ), m + 1 ≤ n → Prod.snd (↑(p n)).snd m = Prod.snd (↑(p (m + 1))).snd m
x : ℕ → ℕ := fun n => Prod.fst (↑(p (n + 1))).snd n
hx : x = fun n => Prod.fst (↑(p (n + 1))).snd n
y : ℕ → ℕ := fun n => Prod.snd (↑(p (n + 1))).snd n
hy : y = fun n => Prod.snd (↑(p (n + 1))).snd n
M : ∀ (n : ℕ), ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n)
u v : Set α
u_open : IsOpen u
v_open : IsOpen v
xu : f x ∈ u
yv : g y ∈ v
huv : Disjoint u v
this : MetricSpace (ℕ → ℕ) := metricSpaceNatNat
⊢ False
[PROOFSTEP]
obtain ⟨εx, εxpos, hεx⟩ : ∃ (εx : ℝ), εx > 0 ∧ Metric.ball x εx ⊆ f ⁻¹' u :=
  by
  apply Metric.mem_nhds_iff.1
  exact hf.continuousAt.preimage_mem_nhds (u_open.mem_nhds xu)
[GOAL]
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
prec : ∀ (n : ℕ), p (n + 1) = F (p n)
pn_fst : ∀ (n : ℕ), (↑(p n)).fst = n
Ix : ∀ (m n : ℕ), m + 1 ≤ n → Prod.fst (↑(p n)).snd m = Prod.fst (↑(p (m + 1))).snd m
Iy : ∀ (m n : ℕ), m + 1 ≤ n → Prod.snd (↑(p n)).snd m = Prod.snd (↑(p (m + 1))).snd m
x : ℕ → ℕ := fun n => Prod.fst (↑(p (n + 1))).snd n
hx : x = fun n => Prod.fst (↑(p (n + 1))).snd n
y : ℕ → ℕ := fun n => Prod.snd (↑(p (n + 1))).snd n
hy : y = fun n => Prod.snd (↑(p (n + 1))).snd n
M : ∀ (n : ℕ), ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n)
u v : Set α
u_open : IsOpen u
v_open : IsOpen v
xu : f x ∈ u
yv : g y ∈ v
huv : Disjoint u v
this : MetricSpace (ℕ → ℕ) := metricSpaceNatNat
⊢ ∃ εx, εx > 0 ∧ ball x εx ⊆ f ⁻¹' u
[PROOFSTEP]
apply Metric.mem_nhds_iff.1
[GOAL]
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
prec : ∀ (n : ℕ), p (n + 1) = F (p n)
pn_fst : ∀ (n : ℕ), (↑(p n)).fst = n
Ix : ∀ (m n : ℕ), m + 1 ≤ n → Prod.fst (↑(p n)).snd m = Prod.fst (↑(p (m + 1))).snd m
Iy : ∀ (m n : ℕ), m + 1 ≤ n → Prod.snd (↑(p n)).snd m = Prod.snd (↑(p (m + 1))).snd m
x : ℕ → ℕ := fun n => Prod.fst (↑(p (n + 1))).snd n
hx : x = fun n => Prod.fst (↑(p (n + 1))).snd n
y : ℕ → ℕ := fun n => Prod.snd (↑(p (n + 1))).snd n
hy : y = fun n => Prod.snd (↑(p (n + 1))).snd n
M : ∀ (n : ℕ), ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n)
u v : Set α
u_open : IsOpen u
v_open : IsOpen v
xu : f x ∈ u
yv : g y ∈ v
huv : Disjoint u v
this : MetricSpace (ℕ → ℕ) := metricSpaceNatNat
⊢ f ⁻¹' u ∈ 𝓝 x
[PROOFSTEP]
exact hf.continuousAt.preimage_mem_nhds (u_open.mem_nhds xu)
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
prec : ∀ (n : ℕ), p (n + 1) = F (p n)
pn_fst : ∀ (n : ℕ), (↑(p n)).fst = n
Ix : ∀ (m n : ℕ), m + 1 ≤ n → Prod.fst (↑(p n)).snd m = Prod.fst (↑(p (m + 1))).snd m
Iy : ∀ (m n : ℕ), m + 1 ≤ n → Prod.snd (↑(p n)).snd m = Prod.snd (↑(p (m + 1))).snd m
x : ℕ → ℕ := fun n => Prod.fst (↑(p (n + 1))).snd n
hx : x = fun n => Prod.fst (↑(p (n + 1))).snd n
y : ℕ → ℕ := fun n => Prod.snd (↑(p (n + 1))).snd n
hy : y = fun n => Prod.snd (↑(p (n + 1))).snd n
M : ∀ (n : ℕ), ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n)
u v : Set α
u_open : IsOpen u
v_open : IsOpen v
xu : f x ∈ u
yv : g y ∈ v
huv : Disjoint u v
this : MetricSpace (ℕ → ℕ) := metricSpaceNatNat
εx : ℝ
εxpos : εx > 0
hεx : ball x εx ⊆ f ⁻¹' u
⊢ False
[PROOFSTEP]
obtain ⟨εy, εypos, hεy⟩ : ∃ (εy : ℝ), εy > 0 ∧ Metric.ball y εy ⊆ g ⁻¹' v :=
  by
  apply Metric.mem_nhds_iff.1
  exact hg.continuousAt.preimage_mem_nhds (v_open.mem_nhds yv)
[GOAL]
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
prec : ∀ (n : ℕ), p (n + 1) = F (p n)
pn_fst : ∀ (n : ℕ), (↑(p n)).fst = n
Ix : ∀ (m n : ℕ), m + 1 ≤ n → Prod.fst (↑(p n)).snd m = Prod.fst (↑(p (m + 1))).snd m
Iy : ∀ (m n : ℕ), m + 1 ≤ n → Prod.snd (↑(p n)).snd m = Prod.snd (↑(p (m + 1))).snd m
x : ℕ → ℕ := fun n => Prod.fst (↑(p (n + 1))).snd n
hx : x = fun n => Prod.fst (↑(p (n + 1))).snd n
y : ℕ → ℕ := fun n => Prod.snd (↑(p (n + 1))).snd n
hy : y = fun n => Prod.snd (↑(p (n + 1))).snd n
M : ∀ (n : ℕ), ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n)
u v : Set α
u_open : IsOpen u
v_open : IsOpen v
xu : f x ∈ u
yv : g y ∈ v
huv : Disjoint u v
this : MetricSpace (ℕ → ℕ) := metricSpaceNatNat
εx : ℝ
εxpos : εx > 0
hεx : ball x εx ⊆ f ⁻¹' u
⊢ ∃ εy, εy > 0 ∧ ball y εy ⊆ g ⁻¹' v
[PROOFSTEP]
apply Metric.mem_nhds_iff.1
[GOAL]
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
prec : ∀ (n : ℕ), p (n + 1) = F (p n)
pn_fst : ∀ (n : ℕ), (↑(p n)).fst = n
Ix : ∀ (m n : ℕ), m + 1 ≤ n → Prod.fst (↑(p n)).snd m = Prod.fst (↑(p (m + 1))).snd m
Iy : ∀ (m n : ℕ), m + 1 ≤ n → Prod.snd (↑(p n)).snd m = Prod.snd (↑(p (m + 1))).snd m
x : ℕ → ℕ := fun n => Prod.fst (↑(p (n + 1))).snd n
hx : x = fun n => Prod.fst (↑(p (n + 1))).snd n
y : ℕ → ℕ := fun n => Prod.snd (↑(p (n + 1))).snd n
hy : y = fun n => Prod.snd (↑(p (n + 1))).snd n
M : ∀ (n : ℕ), ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n)
u v : Set α
u_open : IsOpen u
v_open : IsOpen v
xu : f x ∈ u
yv : g y ∈ v
huv : Disjoint u v
this : MetricSpace (ℕ → ℕ) := metricSpaceNatNat
εx : ℝ
εxpos : εx > 0
hεx : ball x εx ⊆ f ⁻¹' u
⊢ g ⁻¹' v ∈ 𝓝 y
[PROOFSTEP]
exact hg.continuousAt.preimage_mem_nhds (v_open.mem_nhds yv)
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro.intro.intro
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
prec : ∀ (n : ℕ), p (n + 1) = F (p n)
pn_fst : ∀ (n : ℕ), (↑(p n)).fst = n
Ix : ∀ (m n : ℕ), m + 1 ≤ n → Prod.fst (↑(p n)).snd m = Prod.fst (↑(p (m + 1))).snd m
Iy : ∀ (m n : ℕ), m + 1 ≤ n → Prod.snd (↑(p n)).snd m = Prod.snd (↑(p (m + 1))).snd m
x : ℕ → ℕ := fun n => Prod.fst (↑(p (n + 1))).snd n
hx : x = fun n => Prod.fst (↑(p (n + 1))).snd n
y : ℕ → ℕ := fun n => Prod.snd (↑(p (n + 1))).snd n
hy : y = fun n => Prod.snd (↑(p (n + 1))).snd n
M : ∀ (n : ℕ), ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n)
u v : Set α
u_open : IsOpen u
v_open : IsOpen v
xu : f x ∈ u
yv : g y ∈ v
huv : Disjoint u v
this : MetricSpace (ℕ → ℕ) := metricSpaceNatNat
εx : ℝ
εxpos : εx > 0
hεx : ball x εx ⊆ f ⁻¹' u
εy : ℝ
εypos : εy > 0
hεy : ball y εy ⊆ g ⁻¹' v
⊢ False
[PROOFSTEP]
obtain ⟨n, hn⟩ : ∃ n : ℕ, (1 / 2 : ℝ) ^ n < min εx εy :=
  exists_pow_lt_of_lt_one (lt_min εxpos εypos)
    (by norm_num)
      -- for large enough `n`, these open sets separate the images of long cylinders around `x` and `y`
[GOAL]
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
prec : ∀ (n : ℕ), p (n + 1) = F (p n)
pn_fst : ∀ (n : ℕ), (↑(p n)).fst = n
Ix : ∀ (m n : ℕ), m + 1 ≤ n → Prod.fst (↑(p n)).snd m = Prod.fst (↑(p (m + 1))).snd m
Iy : ∀ (m n : ℕ), m + 1 ≤ n → Prod.snd (↑(p n)).snd m = Prod.snd (↑(p (m + 1))).snd m
x : ℕ → ℕ := fun n => Prod.fst (↑(p (n + 1))).snd n
hx : x = fun n => Prod.fst (↑(p (n + 1))).snd n
y : ℕ → ℕ := fun n => Prod.snd (↑(p (n + 1))).snd n
hy : y = fun n => Prod.snd (↑(p (n + 1))).snd n
M : ∀ (n : ℕ), ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n)
u v : Set α
u_open : IsOpen u
v_open : IsOpen v
xu : f x ∈ u
yv : g y ∈ v
huv : Disjoint u v
this : MetricSpace (ℕ → ℕ) := metricSpaceNatNat
εx : ℝ
εxpos : εx > 0
hεx : ball x εx ⊆ f ⁻¹' u
εy : ℝ
εypos : εy > 0
hεy : ball y εy ⊆ g ⁻¹' v
⊢ 1 / 2 < 1
[PROOFSTEP]
norm_num
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
prec : ∀ (n : ℕ), p (n + 1) = F (p n)
pn_fst : ∀ (n : ℕ), (↑(p n)).fst = n
Ix : ∀ (m n : ℕ), m + 1 ≤ n → Prod.fst (↑(p n)).snd m = Prod.fst (↑(p (m + 1))).snd m
Iy : ∀ (m n : ℕ), m + 1 ≤ n → Prod.snd (↑(p n)).snd m = Prod.snd (↑(p (m + 1))).snd m
x : ℕ → ℕ := fun n => Prod.fst (↑(p (n + 1))).snd n
hx : x = fun n => Prod.fst (↑(p (n + 1))).snd n
y : ℕ → ℕ := fun n => Prod.snd (↑(p (n + 1))).snd n
hy : y = fun n => Prod.snd (↑(p (n + 1))).snd n
M : ∀ (n : ℕ), ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n)
u v : Set α
u_open : IsOpen u
v_open : IsOpen v
xu : f x ∈ u
yv : g y ∈ v
huv : Disjoint u v
this : MetricSpace (ℕ → ℕ) := metricSpaceNatNat
εx : ℝ
εxpos : εx > 0
hεx : ball x εx ⊆ f ⁻¹' u
εy : ℝ
εypos : εy > 0
hεy : ball y εy ⊆ g ⁻¹' v
n : ℕ
hn : (1 / 2) ^ n < min εx εy
⊢ False
[PROOFSTEP]
have B : MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) :=
  by
  refine' ⟨u, _, _, u_open.measurableSet⟩
  · rw [image_subset_iff]
    apply Subset.trans _ hεx
    intro z hz
    rw [mem_cylinder_iff_dist_le] at hz
    exact hz.trans_lt (hn.trans_le (min_le_left _ _))
  · refine' Disjoint.mono_left _ huv.symm
    change g '' cylinder y n ⊆ v
    rw [image_subset_iff]
    apply Subset.trans _ hεy
    intro z hz
    rw [mem_cylinder_iff_dist_le] at hz
    exact
      hz.trans_lt
        (hn.trans_le (min_le_right _ _))
          -- this is a contradiction.
[GOAL]
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
prec : ∀ (n : ℕ), p (n + 1) = F (p n)
pn_fst : ∀ (n : ℕ), (↑(p n)).fst = n
Ix : ∀ (m n : ℕ), m + 1 ≤ n → Prod.fst (↑(p n)).snd m = Prod.fst (↑(p (m + 1))).snd m
Iy : ∀ (m n : ℕ), m + 1 ≤ n → Prod.snd (↑(p n)).snd m = Prod.snd (↑(p (m + 1))).snd m
x : ℕ → ℕ := fun n => Prod.fst (↑(p (n + 1))).snd n
hx : x = fun n => Prod.fst (↑(p (n + 1))).snd n
y : ℕ → ℕ := fun n => Prod.snd (↑(p (n + 1))).snd n
hy : y = fun n => Prod.snd (↑(p (n + 1))).snd n
M : ∀ (n : ℕ), ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n)
u v : Set α
u_open : IsOpen u
v_open : IsOpen v
xu : f x ∈ u
yv : g y ∈ v
huv : Disjoint u v
this : MetricSpace (ℕ → ℕ) := metricSpaceNatNat
εx : ℝ
εxpos : εx > 0
hεx : ball x εx ⊆ f ⁻¹' u
εy : ℝ
εypos : εy > 0
hεy : ball y εy ⊆ g ⁻¹' v
n : ℕ
hn : (1 / 2) ^ n < min εx εy
⊢ MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n)
[PROOFSTEP]
refine' ⟨u, _, _, u_open.measurableSet⟩
[GOAL]
case refine'_1
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
prec : ∀ (n : ℕ), p (n + 1) = F (p n)
pn_fst : ∀ (n : ℕ), (↑(p n)).fst = n
Ix : ∀ (m n : ℕ), m + 1 ≤ n → Prod.fst (↑(p n)).snd m = Prod.fst (↑(p (m + 1))).snd m
Iy : ∀ (m n : ℕ), m + 1 ≤ n → Prod.snd (↑(p n)).snd m = Prod.snd (↑(p (m + 1))).snd m
x : ℕ → ℕ := fun n => Prod.fst (↑(p (n + 1))).snd n
hx : x = fun n => Prod.fst (↑(p (n + 1))).snd n
y : ℕ → ℕ := fun n => Prod.snd (↑(p (n + 1))).snd n
hy : y = fun n => Prod.snd (↑(p (n + 1))).snd n
M : ∀ (n : ℕ), ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n)
u v : Set α
u_open : IsOpen u
v_open : IsOpen v
xu : f x ∈ u
yv : g y ∈ v
huv : Disjoint u v
this : MetricSpace (ℕ → ℕ) := metricSpaceNatNat
εx : ℝ
εxpos : εx > 0
hεx : ball x εx ⊆ f ⁻¹' u
εy : ℝ
εypos : εy > 0
hεy : ball y εy ⊆ g ⁻¹' v
n : ℕ
hn : (1 / 2) ^ n < min εx εy
⊢ f '' cylinder x n ⊆ u
[PROOFSTEP]
rw [image_subset_iff]
[GOAL]
case refine'_1
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
prec : ∀ (n : ℕ), p (n + 1) = F (p n)
pn_fst : ∀ (n : ℕ), (↑(p n)).fst = n
Ix : ∀ (m n : ℕ), m + 1 ≤ n → Prod.fst (↑(p n)).snd m = Prod.fst (↑(p (m + 1))).snd m
Iy : ∀ (m n : ℕ), m + 1 ≤ n → Prod.snd (↑(p n)).snd m = Prod.snd (↑(p (m + 1))).snd m
x : ℕ → ℕ := fun n => Prod.fst (↑(p (n + 1))).snd n
hx : x = fun n => Prod.fst (↑(p (n + 1))).snd n
y : ℕ → ℕ := fun n => Prod.snd (↑(p (n + 1))).snd n
hy : y = fun n => Prod.snd (↑(p (n + 1))).snd n
M : ∀ (n : ℕ), ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n)
u v : Set α
u_open : IsOpen u
v_open : IsOpen v
xu : f x ∈ u
yv : g y ∈ v
huv : Disjoint u v
this : MetricSpace (ℕ → ℕ) := metricSpaceNatNat
εx : ℝ
εxpos : εx > 0
hεx : ball x εx ⊆ f ⁻¹' u
εy : ℝ
εypos : εy > 0
hεy : ball y εy ⊆ g ⁻¹' v
n : ℕ
hn : (1 / 2) ^ n < min εx εy
⊢ cylinder x n ⊆ f ⁻¹' u
[PROOFSTEP]
apply Subset.trans _ hεx
[GOAL]
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
prec : ∀ (n : ℕ), p (n + 1) = F (p n)
pn_fst : ∀ (n : ℕ), (↑(p n)).fst = n
Ix : ∀ (m n : ℕ), m + 1 ≤ n → Prod.fst (↑(p n)).snd m = Prod.fst (↑(p (m + 1))).snd m
Iy : ∀ (m n : ℕ), m + 1 ≤ n → Prod.snd (↑(p n)).snd m = Prod.snd (↑(p (m + 1))).snd m
x : ℕ → ℕ := fun n => Prod.fst (↑(p (n + 1))).snd n
hx : x = fun n => Prod.fst (↑(p (n + 1))).snd n
y : ℕ → ℕ := fun n => Prod.snd (↑(p (n + 1))).snd n
hy : y = fun n => Prod.snd (↑(p (n + 1))).snd n
M : ∀ (n : ℕ), ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n)
u v : Set α
u_open : IsOpen u
v_open : IsOpen v
xu : f x ∈ u
yv : g y ∈ v
huv : Disjoint u v
this : MetricSpace (ℕ → ℕ) := metricSpaceNatNat
εx : ℝ
εxpos : εx > 0
hεx : ball x εx ⊆ f ⁻¹' u
εy : ℝ
εypos : εy > 0
hεy : ball y εy ⊆ g ⁻¹' v
n : ℕ
hn : (1 / 2) ^ n < min εx εy
⊢ cylinder x n ⊆ ball x εx
[PROOFSTEP]
intro z hz
[GOAL]
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
prec : ∀ (n : ℕ), p (n + 1) = F (p n)
pn_fst : ∀ (n : ℕ), (↑(p n)).fst = n
Ix : ∀ (m n : ℕ), m + 1 ≤ n → Prod.fst (↑(p n)).snd m = Prod.fst (↑(p (m + 1))).snd m
Iy : ∀ (m n : ℕ), m + 1 ≤ n → Prod.snd (↑(p n)).snd m = Prod.snd (↑(p (m + 1))).snd m
x : ℕ → ℕ := fun n => Prod.fst (↑(p (n + 1))).snd n
hx : x = fun n => Prod.fst (↑(p (n + 1))).snd n
y : ℕ → ℕ := fun n => Prod.snd (↑(p (n + 1))).snd n
hy : y = fun n => Prod.snd (↑(p (n + 1))).snd n
M : ∀ (n : ℕ), ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n)
u v : Set α
u_open : IsOpen u
v_open : IsOpen v
xu : f x ∈ u
yv : g y ∈ v
huv : Disjoint u v
this : MetricSpace (ℕ → ℕ) := metricSpaceNatNat
εx : ℝ
εxpos : εx > 0
hεx : ball x εx ⊆ f ⁻¹' u
εy : ℝ
εypos : εy > 0
hεy : ball y εy ⊆ g ⁻¹' v
n : ℕ
hn : (1 / 2) ^ n < min εx εy
z : ℕ → ℕ
hz : z ∈ cylinder x n
⊢ z ∈ ball x εx
[PROOFSTEP]
rw [mem_cylinder_iff_dist_le] at hz
[GOAL]
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
prec : ∀ (n : ℕ), p (n + 1) = F (p n)
pn_fst : ∀ (n : ℕ), (↑(p n)).fst = n
Ix : ∀ (m n : ℕ), m + 1 ≤ n → Prod.fst (↑(p n)).snd m = Prod.fst (↑(p (m + 1))).snd m
Iy : ∀ (m n : ℕ), m + 1 ≤ n → Prod.snd (↑(p n)).snd m = Prod.snd (↑(p (m + 1))).snd m
x : ℕ → ℕ := fun n => Prod.fst (↑(p (n + 1))).snd n
hx : x = fun n => Prod.fst (↑(p (n + 1))).snd n
y : ℕ → ℕ := fun n => Prod.snd (↑(p (n + 1))).snd n
hy : y = fun n => Prod.snd (↑(p (n + 1))).snd n
M : ∀ (n : ℕ), ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n)
u v : Set α
u_open : IsOpen u
v_open : IsOpen v
xu : f x ∈ u
yv : g y ∈ v
huv : Disjoint u v
this : MetricSpace (ℕ → ℕ) := metricSpaceNatNat
εx : ℝ
εxpos : εx > 0
hεx : ball x εx ⊆ f ⁻¹' u
εy : ℝ
εypos : εy > 0
hεy : ball y εy ⊆ g ⁻¹' v
n : ℕ
hn : (1 / 2) ^ n < min εx εy
z : ℕ → ℕ
hz : dist z x ≤ (1 / 2) ^ n
⊢ z ∈ ball x εx
[PROOFSTEP]
exact hz.trans_lt (hn.trans_le (min_le_left _ _))
[GOAL]
case refine'_2
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
prec : ∀ (n : ℕ), p (n + 1) = F (p n)
pn_fst : ∀ (n : ℕ), (↑(p n)).fst = n
Ix : ∀ (m n : ℕ), m + 1 ≤ n → Prod.fst (↑(p n)).snd m = Prod.fst (↑(p (m + 1))).snd m
Iy : ∀ (m n : ℕ), m + 1 ≤ n → Prod.snd (↑(p n)).snd m = Prod.snd (↑(p (m + 1))).snd m
x : ℕ → ℕ := fun n => Prod.fst (↑(p (n + 1))).snd n
hx : x = fun n => Prod.fst (↑(p (n + 1))).snd n
y : ℕ → ℕ := fun n => Prod.snd (↑(p (n + 1))).snd n
hy : y = fun n => Prod.snd (↑(p (n + 1))).snd n
M : ∀ (n : ℕ), ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n)
u v : Set α
u_open : IsOpen u
v_open : IsOpen v
xu : f x ∈ u
yv : g y ∈ v
huv : Disjoint u v
this : MetricSpace (ℕ → ℕ) := metricSpaceNatNat
εx : ℝ
εxpos : εx > 0
hεx : ball x εx ⊆ f ⁻¹' u
εy : ℝ
εypos : εy > 0
hεy : ball y εy ⊆ g ⁻¹' v
n : ℕ
hn : (1 / 2) ^ n < min εx εy
⊢ Disjoint (g '' cylinder y n) u
[PROOFSTEP]
refine' Disjoint.mono_left _ huv.symm
[GOAL]
case refine'_2
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
prec : ∀ (n : ℕ), p (n + 1) = F (p n)
pn_fst : ∀ (n : ℕ), (↑(p n)).fst = n
Ix : ∀ (m n : ℕ), m + 1 ≤ n → Prod.fst (↑(p n)).snd m = Prod.fst (↑(p (m + 1))).snd m
Iy : ∀ (m n : ℕ), m + 1 ≤ n → Prod.snd (↑(p n)).snd m = Prod.snd (↑(p (m + 1))).snd m
x : ℕ → ℕ := fun n => Prod.fst (↑(p (n + 1))).snd n
hx : x = fun n => Prod.fst (↑(p (n + 1))).snd n
y : ℕ → ℕ := fun n => Prod.snd (↑(p (n + 1))).snd n
hy : y = fun n => Prod.snd (↑(p (n + 1))).snd n
M : ∀ (n : ℕ), ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n)
u v : Set α
u_open : IsOpen u
v_open : IsOpen v
xu : f x ∈ u
yv : g y ∈ v
huv : Disjoint u v
this : MetricSpace (ℕ → ℕ) := metricSpaceNatNat
εx : ℝ
εxpos : εx > 0
hεx : ball x εx ⊆ f ⁻¹' u
εy : ℝ
εypos : εy > 0
hεy : ball y εy ⊆ g ⁻¹' v
n : ℕ
hn : (1 / 2) ^ n < min εx εy
⊢ g '' cylinder y n ≤ v
[PROOFSTEP]
change g '' cylinder y n ⊆ v
[GOAL]
case refine'_2
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
prec : ∀ (n : ℕ), p (n + 1) = F (p n)
pn_fst : ∀ (n : ℕ), (↑(p n)).fst = n
Ix : ∀ (m n : ℕ), m + 1 ≤ n → Prod.fst (↑(p n)).snd m = Prod.fst (↑(p (m + 1))).snd m
Iy : ∀ (m n : ℕ), m + 1 ≤ n → Prod.snd (↑(p n)).snd m = Prod.snd (↑(p (m + 1))).snd m
x : ℕ → ℕ := fun n => Prod.fst (↑(p (n + 1))).snd n
hx : x = fun n => Prod.fst (↑(p (n + 1))).snd n
y : ℕ → ℕ := fun n => Prod.snd (↑(p (n + 1))).snd n
hy : y = fun n => Prod.snd (↑(p (n + 1))).snd n
M : ∀ (n : ℕ), ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n)
u v : Set α
u_open : IsOpen u
v_open : IsOpen v
xu : f x ∈ u
yv : g y ∈ v
huv : Disjoint u v
this : MetricSpace (ℕ → ℕ) := metricSpaceNatNat
εx : ℝ
εxpos : εx > 0
hεx : ball x εx ⊆ f ⁻¹' u
εy : ℝ
εypos : εy > 0
hεy : ball y εy ⊆ g ⁻¹' v
n : ℕ
hn : (1 / 2) ^ n < min εx εy
⊢ g '' cylinder y n ⊆ v
[PROOFSTEP]
rw [image_subset_iff]
[GOAL]
case refine'_2
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
prec : ∀ (n : ℕ), p (n + 1) = F (p n)
pn_fst : ∀ (n : ℕ), (↑(p n)).fst = n
Ix : ∀ (m n : ℕ), m + 1 ≤ n → Prod.fst (↑(p n)).snd m = Prod.fst (↑(p (m + 1))).snd m
Iy : ∀ (m n : ℕ), m + 1 ≤ n → Prod.snd (↑(p n)).snd m = Prod.snd (↑(p (m + 1))).snd m
x : ℕ → ℕ := fun n => Prod.fst (↑(p (n + 1))).snd n
hx : x = fun n => Prod.fst (↑(p (n + 1))).snd n
y : ℕ → ℕ := fun n => Prod.snd (↑(p (n + 1))).snd n
hy : y = fun n => Prod.snd (↑(p (n + 1))).snd n
M : ∀ (n : ℕ), ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n)
u v : Set α
u_open : IsOpen u
v_open : IsOpen v
xu : f x ∈ u
yv : g y ∈ v
huv : Disjoint u v
this : MetricSpace (ℕ → ℕ) := metricSpaceNatNat
εx : ℝ
εxpos : εx > 0
hεx : ball x εx ⊆ f ⁻¹' u
εy : ℝ
εypos : εy > 0
hεy : ball y εy ⊆ g ⁻¹' v
n : ℕ
hn : (1 / 2) ^ n < min εx εy
⊢ cylinder y n ⊆ g ⁻¹' v
[PROOFSTEP]
apply Subset.trans _ hεy
[GOAL]
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
prec : ∀ (n : ℕ), p (n + 1) = F (p n)
pn_fst : ∀ (n : ℕ), (↑(p n)).fst = n
Ix : ∀ (m n : ℕ), m + 1 ≤ n → Prod.fst (↑(p n)).snd m = Prod.fst (↑(p (m + 1))).snd m
Iy : ∀ (m n : ℕ), m + 1 ≤ n → Prod.snd (↑(p n)).snd m = Prod.snd (↑(p (m + 1))).snd m
x : ℕ → ℕ := fun n => Prod.fst (↑(p (n + 1))).snd n
hx : x = fun n => Prod.fst (↑(p (n + 1))).snd n
y : ℕ → ℕ := fun n => Prod.snd (↑(p (n + 1))).snd n
hy : y = fun n => Prod.snd (↑(p (n + 1))).snd n
M : ∀ (n : ℕ), ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n)
u v : Set α
u_open : IsOpen u
v_open : IsOpen v
xu : f x ∈ u
yv : g y ∈ v
huv : Disjoint u v
this : MetricSpace (ℕ → ℕ) := metricSpaceNatNat
εx : ℝ
εxpos : εx > 0
hεx : ball x εx ⊆ f ⁻¹' u
εy : ℝ
εypos : εy > 0
hεy : ball y εy ⊆ g ⁻¹' v
n : ℕ
hn : (1 / 2) ^ n < min εx εy
⊢ cylinder y n ⊆ ball y εy
[PROOFSTEP]
intro z hz
[GOAL]
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
prec : ∀ (n : ℕ), p (n + 1) = F (p n)
pn_fst : ∀ (n : ℕ), (↑(p n)).fst = n
Ix : ∀ (m n : ℕ), m + 1 ≤ n → Prod.fst (↑(p n)).snd m = Prod.fst (↑(p (m + 1))).snd m
Iy : ∀ (m n : ℕ), m + 1 ≤ n → Prod.snd (↑(p n)).snd m = Prod.snd (↑(p (m + 1))).snd m
x : ℕ → ℕ := fun n => Prod.fst (↑(p (n + 1))).snd n
hx : x = fun n => Prod.fst (↑(p (n + 1))).snd n
y : ℕ → ℕ := fun n => Prod.snd (↑(p (n + 1))).snd n
hy : y = fun n => Prod.snd (↑(p (n + 1))).snd n
M : ∀ (n : ℕ), ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n)
u v : Set α
u_open : IsOpen u
v_open : IsOpen v
xu : f x ∈ u
yv : g y ∈ v
huv : Disjoint u v
this : MetricSpace (ℕ → ℕ) := metricSpaceNatNat
εx : ℝ
εxpos : εx > 0
hεx : ball x εx ⊆ f ⁻¹' u
εy : ℝ
εypos : εy > 0
hεy : ball y εy ⊆ g ⁻¹' v
n : ℕ
hn : (1 / 2) ^ n < min εx εy
z : ℕ → ℕ
hz : z ∈ cylinder y n
⊢ z ∈ ball y εy
[PROOFSTEP]
rw [mem_cylinder_iff_dist_le] at hz
[GOAL]
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
prec : ∀ (n : ℕ), p (n + 1) = F (p n)
pn_fst : ∀ (n : ℕ), (↑(p n)).fst = n
Ix : ∀ (m n : ℕ), m + 1 ≤ n → Prod.fst (↑(p n)).snd m = Prod.fst (↑(p (m + 1))).snd m
Iy : ∀ (m n : ℕ), m + 1 ≤ n → Prod.snd (↑(p n)).snd m = Prod.snd (↑(p (m + 1))).snd m
x : ℕ → ℕ := fun n => Prod.fst (↑(p (n + 1))).snd n
hx : x = fun n => Prod.fst (↑(p (n + 1))).snd n
y : ℕ → ℕ := fun n => Prod.snd (↑(p (n + 1))).snd n
hy : y = fun n => Prod.snd (↑(p (n + 1))).snd n
M : ∀ (n : ℕ), ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n)
u v : Set α
u_open : IsOpen u
v_open : IsOpen v
xu : f x ∈ u
yv : g y ∈ v
huv : Disjoint u v
this : MetricSpace (ℕ → ℕ) := metricSpaceNatNat
εx : ℝ
εxpos : εx > 0
hεx : ball x εx ⊆ f ⁻¹' u
εy : ℝ
εypos : εy > 0
hεy : ball y εy ⊆ g ⁻¹' v
n : ℕ
hn : (1 / 2) ^ n < min εx εy
z : ℕ → ℕ
hz : dist z y ≤ (1 / 2) ^ n
⊢ z ∈ ball y εy
[PROOFSTEP]
exact
  hz.trans_lt
    (hn.trans_le (min_le_right _ _))
      -- this is a contradiction.
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f g : (ℕ → ℕ) → α
hf : Continuous f
hg : Continuous g
h : Disjoint (range f) (range g)
hfg : ¬MeasurablySeparable (range f) (range g)
I :
  ∀ (n : ℕ) (x y : ℕ → ℕ),
    ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n) →
      ∃ x' y',
        x' ∈ cylinder x n ∧
          y' ∈ cylinder y n ∧ ¬MeasurablySeparable (f '' cylinder x' (n + 1)) (g '' cylinder y' (n + 1))
A : Type := { p // ¬MeasurablySeparable (f '' cylinder p.snd.fst p.fst) (g '' cylinder p.snd.snd p.fst) }
F : A → A
hFn : ∀ (p : A), (↑(F p)).fst = (↑p).fst + 1
hFx : ∀ (p : A), (↑(F p)).snd.fst ∈ cylinder (↑p).snd.fst (↑p).fst
hFy : ∀ (p : A), (↑(F p)).snd.snd ∈ cylinder (↑p).snd.snd (↑p).fst
p0 : A :=
  { val := (0, fun x => 0, fun x => 0),
    property := (_ : ¬MeasurablySeparable (f '' cylinder (fun x => 0) 0) (g '' cylinder (fun x => 0) 0)) }
p : ℕ → A := fun n => F^[n] p0
prec : ∀ (n : ℕ), p (n + 1) = F (p n)
pn_fst : ∀ (n : ℕ), (↑(p n)).fst = n
Ix : ∀ (m n : ℕ), m + 1 ≤ n → Prod.fst (↑(p n)).snd m = Prod.fst (↑(p (m + 1))).snd m
Iy : ∀ (m n : ℕ), m + 1 ≤ n → Prod.snd (↑(p n)).snd m = Prod.snd (↑(p (m + 1))).snd m
x : ℕ → ℕ := fun n => Prod.fst (↑(p (n + 1))).snd n
hx : x = fun n => Prod.fst (↑(p (n + 1))).snd n
y : ℕ → ℕ := fun n => Prod.snd (↑(p (n + 1))).snd n
hy : y = fun n => Prod.snd (↑(p (n + 1))).snd n
M : ∀ (n : ℕ), ¬MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n)
u v : Set α
u_open : IsOpen u
v_open : IsOpen v
xu : f x ∈ u
yv : g y ∈ v
huv : Disjoint u v
this : MetricSpace (ℕ → ℕ) := metricSpaceNatNat
εx : ℝ
εxpos : εx > 0
hεx : ball x εx ⊆ f ⁻¹' u
εy : ℝ
εypos : εy > 0
hεy : ball y εy ⊆ g ⁻¹' v
n : ℕ
hn : (1 / 2) ^ n < min εx εy
B : MeasurablySeparable (f '' cylinder x n) (g '' cylinder y n)
⊢ False
[PROOFSTEP]
exact M n B
[GOAL]
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
s t : Set α
hs : AnalyticSet s
ht : AnalyticSet t
h : Disjoint s t
⊢ MeasurablySeparable s t
[PROOFSTEP]
rw [AnalyticSet] at hs ht
[GOAL]
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
s t : Set α
hs : s = ∅ ∨ ∃ f, Continuous f ∧ range f = s
ht : t = ∅ ∨ ∃ f, Continuous f ∧ range f = t
h : Disjoint s t
⊢ MeasurablySeparable s t
[PROOFSTEP]
rcases hs with (rfl | ⟨f, f_cont, rfl⟩)
[GOAL]
case inl
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
t : Set α
ht : t = ∅ ∨ ∃ f, Continuous f ∧ range f = t
h : Disjoint ∅ t
⊢ MeasurablySeparable ∅ t
[PROOFSTEP]
refine' ⟨∅, Subset.refl _, by simp, MeasurableSet.empty⟩
[GOAL]
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
t : Set α
ht : t = ∅ ∨ ∃ f, Continuous f ∧ range f = t
h : Disjoint ∅ t
⊢ Disjoint t ∅
[PROOFSTEP]
simp
[GOAL]
case inr.intro.intro
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
t : Set α
ht : t = ∅ ∨ ∃ f, Continuous f ∧ range f = t
f : (ℕ → ℕ) → α
f_cont : Continuous f
h : Disjoint (range f) t
⊢ MeasurablySeparable (range f) t
[PROOFSTEP]
rcases ht with (rfl | ⟨g, g_cont, rfl⟩)
[GOAL]
case inr.intro.intro.inl
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f : (ℕ → ℕ) → α
f_cont : Continuous f
h : Disjoint (range f) ∅
⊢ MeasurablySeparable (range f) ∅
[PROOFSTEP]
exact ⟨univ, subset_univ _, by simp, MeasurableSet.univ⟩
[GOAL]
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f : (ℕ → ℕ) → α
f_cont : Continuous f
h : Disjoint (range f) ∅
⊢ Disjoint ∅ univ
[PROOFSTEP]
simp
[GOAL]
case inr.intro.intro.inr.intro.intro
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f : (ℕ → ℕ) → α
f_cont : Continuous f
g : (ℕ → ℕ) → α
g_cont : Continuous g
h : Disjoint (range f) (range g)
⊢ MeasurablySeparable (range f) (range g)
[PROOFSTEP]
exact measurablySeparable_range_of_disjoint f_cont g_cont h
[GOAL]
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
s : Set α
hs : AnalyticSet s
hsc : AnalyticSet sᶜ
⊢ MeasurableSet s
[PROOFSTEP]
rcases hs.measurablySeparable hsc disjoint_compl_right with ⟨u, hsu, hdu, hmu⟩
[GOAL]
case intro.intro.intro
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
s : Set α
hs : AnalyticSet s
hsc : AnalyticSet sᶜ
u : Set α
hsu : s ⊆ u
hdu : Disjoint sᶜ u
hmu : MeasurableSet u
⊢ MeasurableSet s
[PROOFSTEP]
obtain rfl : s = u := hsu.antisymm (disjoint_compl_left_iff_subset.1 hdu)
[GOAL]
case intro.intro.intro
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
s : Set α
hs : AnalyticSet s
hsc : AnalyticSet sᶜ
hsu : s ⊆ s
hdu : Disjoint sᶜ s
hmu : MeasurableSet s
⊢ MeasurableSet s
[PROOFSTEP]
exact hmu
[GOAL]
α : Type u_1
inst✝¹⁰ : TopologicalSpace α
ι : Type u_2
X : Type u_3
Y : Type u_4
β : Type u_5
inst✝⁹ : TopologicalSpace X
inst✝⁸ : PolishSpace X
inst✝⁷ : MeasurableSpace X
inst✝⁶ : BorelSpace X
inst✝⁵ : TopologicalSpace Y
inst✝⁴ : T2Space Y
inst✝³ : MeasurableSpace Y
inst✝² : OpensMeasurableSpace Y
inst✝¹ : MeasurableSpace β
inst✝ : SecondCountableTopology Y
f : X → Y
hf : Measurable f
hsurj : Surjective f
s : Set Y
⊢ MeasurableSet (f ⁻¹' s) ↔ MeasurableSet s
[PROOFSTEP]
refine ⟨fun h => ?_, fun h => hf h⟩
[GOAL]
α : Type u_1
inst✝¹⁰ : TopologicalSpace α
ι : Type u_2
X : Type u_3
Y : Type u_4
β : Type u_5
inst✝⁹ : TopologicalSpace X
inst✝⁸ : PolishSpace X
inst✝⁷ : MeasurableSpace X
inst✝⁶ : BorelSpace X
inst✝⁵ : TopologicalSpace Y
inst✝⁴ : T2Space Y
inst✝³ : MeasurableSpace Y
inst✝² : OpensMeasurableSpace Y
inst✝¹ : MeasurableSpace β
inst✝ : SecondCountableTopology Y
f : X → Y
hf : Measurable f
hsurj : Surjective f
s : Set Y
h : MeasurableSet (f ⁻¹' s)
⊢ MeasurableSet s
[PROOFSTEP]
apply AnalyticSet.measurableSet_of_compl
[GOAL]
case hs
α : Type u_1
inst✝¹⁰ : TopologicalSpace α
ι : Type u_2
X : Type u_3
Y : Type u_4
β : Type u_5
inst✝⁹ : TopologicalSpace X
inst✝⁸ : PolishSpace X
inst✝⁷ : MeasurableSpace X
inst✝⁶ : BorelSpace X
inst✝⁵ : TopologicalSpace Y
inst✝⁴ : T2Space Y
inst✝³ : MeasurableSpace Y
inst✝² : OpensMeasurableSpace Y
inst✝¹ : MeasurableSpace β
inst✝ : SecondCountableTopology Y
f : X → Y
hf : Measurable f
hsurj : Surjective f
s : Set Y
h : MeasurableSet (f ⁻¹' s)
⊢ AnalyticSet s
[PROOFSTEP]
rw [← image_preimage_eq s hsurj]
[GOAL]
case hs
α : Type u_1
inst✝¹⁰ : TopologicalSpace α
ι : Type u_2
X : Type u_3
Y : Type u_4
β : Type u_5
inst✝⁹ : TopologicalSpace X
inst✝⁸ : PolishSpace X
inst✝⁷ : MeasurableSpace X
inst✝⁶ : BorelSpace X
inst✝⁵ : TopologicalSpace Y
inst✝⁴ : T2Space Y
inst✝³ : MeasurableSpace Y
inst✝² : OpensMeasurableSpace Y
inst✝¹ : MeasurableSpace β
inst✝ : SecondCountableTopology Y
f : X → Y
hf : Measurable f
hsurj : Surjective f
s : Set Y
h : MeasurableSet (f ⁻¹' s)
⊢ AnalyticSet (f '' (f ⁻¹' s))
[PROOFSTEP]
exact h.analyticSet_image hf
[GOAL]
case hsc
α : Type u_1
inst✝¹⁰ : TopologicalSpace α
ι : Type u_2
X : Type u_3
Y : Type u_4
β : Type u_5
inst✝⁹ : TopologicalSpace X
inst✝⁸ : PolishSpace X
inst✝⁷ : MeasurableSpace X
inst✝⁶ : BorelSpace X
inst✝⁵ : TopologicalSpace Y
inst✝⁴ : T2Space Y
inst✝³ : MeasurableSpace Y
inst✝² : OpensMeasurableSpace Y
inst✝¹ : MeasurableSpace β
inst✝ : SecondCountableTopology Y
f : X → Y
hf : Measurable f
hsurj : Surjective f
s : Set Y
h : MeasurableSet (f ⁻¹' s)
⊢ AnalyticSet sᶜ
[PROOFSTEP]
rw [← image_preimage_eq sᶜ hsurj]
[GOAL]
case hsc
α : Type u_1
inst✝¹⁰ : TopologicalSpace α
ι : Type u_2
X : Type u_3
Y : Type u_4
β : Type u_5
inst✝⁹ : TopologicalSpace X
inst✝⁸ : PolishSpace X
inst✝⁷ : MeasurableSpace X
inst✝⁶ : BorelSpace X
inst✝⁵ : TopologicalSpace Y
inst✝⁴ : T2Space Y
inst✝³ : MeasurableSpace Y
inst✝² : OpensMeasurableSpace Y
inst✝¹ : MeasurableSpace β
inst✝ : SecondCountableTopology Y
f : X → Y
hf : Measurable f
hsurj : Surjective f
s : Set Y
h : MeasurableSet (f ⁻¹' s)
⊢ AnalyticSet (f '' (f ⁻¹' sᶜ))
[PROOFSTEP]
exact h.compl.analyticSet_image hf
[GOAL]
α : Type u_1
inst✝¹⁰ : TopologicalSpace α
ι : Type u_2
X : Type u_3
Y : Type u_4
β : Type u_5
inst✝⁹ : TopologicalSpace X
inst✝⁸ : PolishSpace X
inst✝⁷ : MeasurableSpace X
inst✝⁶ : BorelSpace X
inst✝⁵ : TopologicalSpace Y
inst✝⁴ : T2Space Y
inst✝³ : MeasurableSpace Y
inst✝² : OpensMeasurableSpace Y
inst✝¹ : MeasurableSpace β
inst✝ : SecondCountableTopology Y
f : X → Y
hf : Measurable f
hsurj : Surjective f
⊢ MeasurableSpace.map f inst✝⁷ = borel Y
[PROOFSTEP]
have d := hf.mono le_rfl OpensMeasurableSpace.borel_le
[GOAL]
α : Type u_1
inst✝¹⁰ : TopologicalSpace α
ι : Type u_2
X : Type u_3
Y : Type u_4
β : Type u_5
inst✝⁹ : TopologicalSpace X
inst✝⁸ : PolishSpace X
inst✝⁷ : MeasurableSpace X
inst✝⁶ : BorelSpace X
inst✝⁵ : TopologicalSpace Y
inst✝⁴ : T2Space Y
inst✝³ : MeasurableSpace Y
inst✝² : OpensMeasurableSpace Y
inst✝¹ : MeasurableSpace β
inst✝ : SecondCountableTopology Y
f : X → Y
hf : Measurable f
hsurj : Surjective f
d : Measurable f
⊢ MeasurableSpace.map f inst✝⁷ = borel Y
[PROOFSTEP]
letI := borel Y
[GOAL]
α : Type u_1
inst✝¹⁰ : TopologicalSpace α
ι : Type u_2
X : Type u_3
Y : Type u_4
β : Type u_5
inst✝⁹ : TopologicalSpace X
inst✝⁸ : PolishSpace X
inst✝⁷ : MeasurableSpace X
inst✝⁶ : BorelSpace X
inst✝⁵ : TopologicalSpace Y
inst✝⁴ : T2Space Y
inst✝³ : MeasurableSpace Y
inst✝² : OpensMeasurableSpace Y
inst✝¹ : MeasurableSpace β
inst✝ : SecondCountableTopology Y
f : X → Y
hf : Measurable f
hsurj : Surjective f
d : Measurable f
this : MeasurableSpace Y := borel Y
⊢ MeasurableSpace.map f inst✝⁷ = borel Y
[PROOFSTEP]
haveI : BorelSpace Y := ⟨rfl⟩
[GOAL]
α : Type u_1
inst✝¹⁰ : TopologicalSpace α
ι : Type u_2
X : Type u_3
Y : Type u_4
β : Type u_5
inst✝⁹ : TopologicalSpace X
inst✝⁸ : PolishSpace X
inst✝⁷ : MeasurableSpace X
inst✝⁶ : BorelSpace X
inst✝⁵ : TopologicalSpace Y
inst✝⁴ : T2Space Y
inst✝³ : MeasurableSpace Y
inst✝² : OpensMeasurableSpace Y
inst✝¹ : MeasurableSpace β
inst✝ : SecondCountableTopology Y
f : X → Y
hf : Measurable f
hsurj : Surjective f
d : Measurable f
this✝ : MeasurableSpace Y := borel Y
this : BorelSpace Y
⊢ MeasurableSpace.map f inst✝⁷ = borel Y
[PROOFSTEP]
exact d.map_measurableSpace_eq hsurj
[GOAL]
α : Type u_1
inst✝¹⁰ : TopologicalSpace α
ι : Type u_2
X : Type u_3
Y : Type u_4
β : Type u_5
inst✝⁹ : TopologicalSpace X
inst✝⁸ : PolishSpace X
inst✝⁷ : MeasurableSpace X
inst✝⁶ : BorelSpace X
inst✝⁵ : TopologicalSpace Y
inst✝⁴ : T2Space Y
inst✝³ : MeasurableSpace Y
inst✝² : OpensMeasurableSpace Y
inst✝¹ : MeasurableSpace β
f : X → Y
inst✝ : SecondCountableTopology ↑(range f)
hf : Measurable f
hr : MeasurableSet (range f)
s : Set Y
⊢ MeasurableSet (f ⁻¹' s) ↔ MeasurableSet (s ∩ range f)
[PROOFSTEP]
rw [hf.measurableSet_preimage_iff_preimage_val, ← (MeasurableEmbedding.subtype_coe hr).measurableSet_image,
  Subtype.image_preimage_coe]
[GOAL]
α : Type u_1
inst✝⁷ : TopologicalSpace α
ι : Type u_2
X : Type u_3
Y : Type u_4
inst✝⁶ : TopologicalSpace X
inst✝⁵ : PolishSpace X
inst✝⁴ : MeasurableSpace X
inst✝³ : BorelSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : T2Space Y
inst✝ : SecondCountableTopology Y
f : X → Y
hf : Continuous f
hsurj : Surjective f
⊢ MeasurableSpace.map f inst✝⁴ = borel Y
[PROOFSTEP]
borelize Y
[GOAL]
α : Type u_1
inst✝⁷ : TopologicalSpace α
ι : Type u_2
X : Type u_3
Y : Type u_4
inst✝⁶ : TopologicalSpace X
inst✝⁵ : PolishSpace X
inst✝⁴ : MeasurableSpace X
inst✝³ : BorelSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : T2Space Y
inst✝ : SecondCountableTopology Y
f : X → Y
hf : Continuous f
hsurj : Surjective f
this✝¹ : MeasurableSpace Y := borel Y
this✝ : BorelSpace Y
⊢ MeasurableSpace.map f inst✝⁴ = borel Y
[PROOFSTEP]
exact hf.measurable.map_measurableSpace_eq hsurj
[GOAL]
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
X : Type u_3
Y : Type u_4
inst✝⁴ : TopologicalSpace X
inst✝³ : PolishSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : T2Space Y
inst✝ : SecondCountableTopology Y
f : X → Y
hf : Continuous f
hsurj : Surjective f
⊢ MeasurableSpace.map f (borel X) = borel Y
[PROOFSTEP]
borelize X
[GOAL]
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
X : Type u_3
Y : Type u_4
inst✝⁴ : TopologicalSpace X
inst✝³ : PolishSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : T2Space Y
inst✝ : SecondCountableTopology Y
f : X → Y
hf : Continuous f
hsurj : Surjective f
this✝¹ : MeasurableSpace X := borel X
this✝ : BorelSpace X
⊢ MeasurableSpace.map f (borel X) = borel Y
[PROOFSTEP]
exact hf.map_eq_borel hsurj
[GOAL]
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
⊢ MeasurableSet (range f)
[PROOFSTEP]
letI := upgradePolishSpace γ
[GOAL]
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this : UpgradedPolishSpace γ := upgradePolishSpace γ
⊢ MeasurableSet (range f)
[PROOFSTEP]
obtain ⟨b, b_count, b_nonempty, hb⟩ : ∃ b : Set (Set γ), b.Countable ∧ ∅ ∉ b ∧ IsTopologicalBasis b :=
  exists_countable_basis γ
[GOAL]
case intro.intro.intro
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
⊢ MeasurableSet (range f)
[PROOFSTEP]
haveI : Encodable b := b_count.toEncodable
[GOAL]
case intro.intro.intro
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this : Encodable ↑b
⊢ MeasurableSet (range f)
[PROOFSTEP]
let A :=
  { p : b × b // Disjoint (p.1 : Set γ) p.2 }
    -- for each pair of disjoint sets in the topological basis `b`, consider Borel sets separating
      -- their images, by injectivity of `f` and the Lusin separation theorem.
[GOAL]
case intro.intro.intro
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
⊢ MeasurableSet (range f)
[PROOFSTEP]
have : ∀ p : A, ∃ q : Set β, f '' (p.1.1 : Set γ) ⊆ q ∧ Disjoint (f '' (p.1.2 : Set γ)) q ∧ MeasurableSet q :=
  by
  intro p
  apply
    AnalyticSet.measurablySeparable ((hb.isOpen p.1.1.2).analyticSet_image f_cont)
      ((hb.isOpen p.1.2.2).analyticSet_image f_cont)
  exact Disjoint.image p.2 (f_inj.injOn univ) (subset_univ _) (subset_univ _)
[GOAL]
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
⊢ ∀ (p : A), ∃ q, f '' ↑(↑p).fst ⊆ q ∧ Disjoint (f '' ↑(↑p).snd) q ∧ MeasurableSet q
[PROOFSTEP]
intro p
[GOAL]
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
p : A
⊢ ∃ q, f '' ↑(↑p).fst ⊆ q ∧ Disjoint (f '' ↑(↑p).snd) q ∧ MeasurableSet q
[PROOFSTEP]
apply
  AnalyticSet.measurablySeparable ((hb.isOpen p.1.1.2).analyticSet_image f_cont)
    ((hb.isOpen p.1.2.2).analyticSet_image f_cont)
[GOAL]
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
p : A
⊢ Disjoint (f '' ↑(↑p).fst) (f '' ↑(↑p).snd)
[PROOFSTEP]
exact Disjoint.image p.2 (f_inj.injOn univ) (subset_univ _) (subset_univ _)
[GOAL]
case intro.intro.intro
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝¹ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this✝ : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
this : ∀ (p : A), ∃ q, f '' ↑(↑p).fst ⊆ q ∧ Disjoint (f '' ↑(↑p).snd) q ∧ MeasurableSet q
⊢ MeasurableSet (range f)
[PROOFSTEP]
choose q hq1 hq2 q_meas using this
[GOAL]
case intro.intro.intro
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
⊢ MeasurableSet (range f)
[PROOFSTEP]
let E : b → Set β := fun s => closure (f '' s) ∩ ⋂ (t : b) (ht : Disjoint s.1 t.1), q ⟨(s, t), ht⟩ \ q ⟨(t, s), ht.symm⟩
[GOAL]
case intro.intro.intro
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
⊢ MeasurableSet (range f)
[PROOFSTEP]
obtain ⟨u, u_anti, u_pos, u_lim⟩ : ∃ u : ℕ → ℝ, StrictAnti u ∧ (∀ n : ℕ, 0 < u n) ∧ Tendsto u atTop (𝓝 0) :=
  exists_seq_strictAnti_tendsto (0 : ℝ)
[GOAL]
case intro.intro.intro.intro.intro.intro
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
⊢ MeasurableSet (range f)
[PROOFSTEP]
let F : ℕ → Set β := fun n => ⋃ (s : b) (_ : Bounded s.1 ∧ diam s.1 ≤ u n), E s
[GOAL]
case intro.intro.intro.intro.intro.intro
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
⊢ MeasurableSet (range f)
[PROOFSTEP]
suffices range f = ⋂ n, F n
  by
  have E_meas : ∀ s : b, MeasurableSet (E s) := by
    intro b
    refine' isClosed_closure.measurableSet.inter _
    refine' MeasurableSet.iInter fun s => _
    exact MeasurableSet.iInter fun hs => (q_meas _).diff (q_meas _)
  have F_meas : ∀ n, MeasurableSet (F n) := by
    intro n
    refine' MeasurableSet.iUnion fun s => _
    exact MeasurableSet.iUnion fun _ => E_meas _
  rw [this]
  exact MeasurableSet.iInter fun n => F_meas n
[GOAL]
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝¹ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this✝ : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
this : range f = ⋂ (n : ℕ), F n
⊢ MeasurableSet (range f)
[PROOFSTEP]
have E_meas : ∀ s : b, MeasurableSet (E s) := by
  intro b
  refine' isClosed_closure.measurableSet.inter _
  refine' MeasurableSet.iInter fun s => _
  exact MeasurableSet.iInter fun hs => (q_meas _).diff (q_meas _)
[GOAL]
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝¹ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this✝ : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
this : range f = ⋂ (n : ℕ), F n
⊢ ∀ (s : ↑b), MeasurableSet (E s)
[PROOFSTEP]
intro b
[GOAL]
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝¹ : UpgradedPolishSpace γ := upgradePolishSpace γ
b✝ : Set (Set γ)
b_count : Set.Countable b✝
b_nonempty : ¬∅ ∈ b✝
hb : IsTopologicalBasis b✝
this✝ : Encodable ↑b✝
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b✝ → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b✝) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b✝) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
this : range f = ⋂ (n : ℕ), F n
b : ↑b✝
⊢ MeasurableSet (E b)
[PROOFSTEP]
refine' isClosed_closure.measurableSet.inter _
[GOAL]
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝¹ : UpgradedPolishSpace γ := upgradePolishSpace γ
b✝ : Set (Set γ)
b_count : Set.Countable b✝
b_nonempty : ¬∅ ∈ b✝
hb : IsTopologicalBasis b✝
this✝ : Encodable ↑b✝
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b✝ → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b✝) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b✝) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
this : range f = ⋂ (n : ℕ), F n
b : ↑b✝
⊢ MeasurableSet
    (⋂ (t : ↑b✝) (ht : Disjoint ↑b ↑t),
      q { val := (b, t), property := ht } \ q { val := (t, b), property := (_ : Disjoint ↑t ↑b) })
[PROOFSTEP]
refine' MeasurableSet.iInter fun s => _
[GOAL]
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝¹ : UpgradedPolishSpace γ := upgradePolishSpace γ
b✝ : Set (Set γ)
b_count : Set.Countable b✝
b_nonempty : ¬∅ ∈ b✝
hb : IsTopologicalBasis b✝
this✝ : Encodable ↑b✝
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b✝ → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b✝) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b✝) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
this : range f = ⋂ (n : ℕ), F n
b s : ↑b✝
⊢ MeasurableSet
    (⋂ (ht : Disjoint ↑b ↑s),
      q { val := (b, s), property := ht } \ q { val := (s, b), property := (_ : Disjoint ↑s ↑b) })
[PROOFSTEP]
exact MeasurableSet.iInter fun hs => (q_meas _).diff (q_meas _)
[GOAL]
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝¹ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this✝ : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
this : range f = ⋂ (n : ℕ), F n
E_meas : ∀ (s : ↑b), MeasurableSet (E s)
⊢ MeasurableSet (range f)
[PROOFSTEP]
have F_meas : ∀ n, MeasurableSet (F n) := by
  intro n
  refine' MeasurableSet.iUnion fun s => _
  exact MeasurableSet.iUnion fun _ => E_meas _
[GOAL]
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝¹ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this✝ : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
this : range f = ⋂ (n : ℕ), F n
E_meas : ∀ (s : ↑b), MeasurableSet (E s)
⊢ ∀ (n : ℕ), MeasurableSet (F n)
[PROOFSTEP]
intro n
[GOAL]
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝¹ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this✝ : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
this : range f = ⋂ (n : ℕ), F n
E_meas : ∀ (s : ↑b), MeasurableSet (E s)
n : ℕ
⊢ MeasurableSet (F n)
[PROOFSTEP]
refine' MeasurableSet.iUnion fun s => _
[GOAL]
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝¹ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this✝ : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
this : range f = ⋂ (n : ℕ), F n
E_meas : ∀ (s : ↑b), MeasurableSet (E s)
n : ℕ
s : ↑b
⊢ MeasurableSet (⋃ (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s)
[PROOFSTEP]
exact MeasurableSet.iUnion fun _ => E_meas _
[GOAL]
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝¹ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this✝ : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
this : range f = ⋂ (n : ℕ), F n
E_meas : ∀ (s : ↑b), MeasurableSet (E s)
F_meas : ∀ (n : ℕ), MeasurableSet (F n)
⊢ MeasurableSet (range f)
[PROOFSTEP]
rw [this]
[GOAL]
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝¹ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this✝ : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
this : range f = ⋂ (n : ℕ), F n
E_meas : ∀ (s : ↑b), MeasurableSet (E s)
F_meas : ∀ (n : ℕ), MeasurableSet (F n)
⊢ MeasurableSet (⋂ (n : ℕ), F n)
[PROOFSTEP]
exact MeasurableSet.iInter fun n => F_meas n
[GOAL]
case intro.intro.intro.intro.intro.intro
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
⊢ range f = ⋂ (n : ℕ), F n
[PROOFSTEP]
apply Subset.antisymm
[GOAL]
case intro.intro.intro.intro.intro.intro.h₁
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
⊢ range f ⊆ ⋂ (n : ℕ), F n
[PROOFSTEP]
rintro x ⟨y, rfl⟩
[GOAL]
case intro.intro.intro.intro.intro.intro.h₁.intro
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
y : γ
⊢ f y ∈ ⋂ (n : ℕ), F n
[PROOFSTEP]
refine mem_iInter.2 fun n => ?_
[GOAL]
case intro.intro.intro.intro.intro.intro.h₁.intro
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
y : γ
n : ℕ
⊢ f y ∈ F n
[PROOFSTEP]
obtain ⟨s, sb, ys, hs⟩ : ∃ (s : Set γ), s ∈ b ∧ y ∈ s ∧ s ⊆ ball y (u n / 2) :=
  by
  apply hb.mem_nhds_iff.1
  exact ball_mem_nhds _ (half_pos (u_pos n))
[GOAL]
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
y : γ
n : ℕ
⊢ ∃ s, s ∈ b ∧ y ∈ s ∧ s ⊆ ball y (u n / 2)
[PROOFSTEP]
apply hb.mem_nhds_iff.1
[GOAL]
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
y : γ
n : ℕ
⊢ ball y (u n / 2) ∈ 𝓝 y
[PROOFSTEP]
exact ball_mem_nhds _ (half_pos (u_pos n))
[GOAL]
case intro.intro.intro.intro.intro.intro.h₁.intro.intro.intro.intro
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
y : γ
n : ℕ
s : Set γ
sb : s ∈ b
ys : y ∈ s
hs : s ⊆ ball y (u n / 2)
⊢ f y ∈ F n
[PROOFSTEP]
have diam_s : diam s ≤ u n := by
  apply (diam_mono hs bounded_ball).trans
  convert diam_ball (x := y) (half_pos (u_pos n)).le
  ring
[GOAL]
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
y : γ
n : ℕ
s : Set γ
sb : s ∈ b
ys : y ∈ s
hs : s ⊆ ball y (u n / 2)
⊢ diam s ≤ u n
[PROOFSTEP]
apply (diam_mono hs bounded_ball).trans
[GOAL]
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
y : γ
n : ℕ
s : Set γ
sb : s ∈ b
ys : y ∈ s
hs : s ⊆ ball y (u n / 2)
⊢ diam (ball y (u n / 2)) ≤ u n
[PROOFSTEP]
convert diam_ball (x := y) (half_pos (u_pos n)).le
[GOAL]
case h.e'_4
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
y : γ
n : ℕ
s : Set γ
sb : s ∈ b
ys : y ∈ s
hs : s ⊆ ball y (u n / 2)
⊢ u n = 2 * (u n / 2)
[PROOFSTEP]
ring
[GOAL]
case intro.intro.intro.intro.intro.intro.h₁.intro.intro.intro.intro
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
y : γ
n : ℕ
s : Set γ
sb : s ∈ b
ys : y ∈ s
hs : s ⊆ ball y (u n / 2)
diam_s : diam s ≤ u n
⊢ f y ∈ F n
[PROOFSTEP]
refine' mem_iUnion.2 ⟨⟨s, sb⟩, _⟩
[GOAL]
case intro.intro.intro.intro.intro.intro.h₁.intro.intro.intro.intro
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
y : γ
n : ℕ
s : Set γ
sb : s ∈ b
ys : y ∈ s
hs : s ⊆ ball y (u n / 2)
diam_s : diam s ≤ u n
⊢ f y ∈
    ⋃ (_ : Metric.Bounded ↑{ val := s, property := sb } ∧ diam ↑{ val := s, property := sb } ≤ u n),
      E { val := s, property := sb }
[PROOFSTEP]
refine' mem_iUnion.2 ⟨⟨Metric.Bounded.mono hs bounded_ball, diam_s⟩, _⟩
[GOAL]
case intro.intro.intro.intro.intro.intro.h₁.intro.intro.intro.intro
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
y : γ
n : ℕ
s : Set γ
sb : s ∈ b
ys : y ∈ s
hs : s ⊆ ball y (u n / 2)
diam_s : diam s ≤ u n
⊢ f y ∈ E { val := s, property := sb }
[PROOFSTEP]
apply mem_inter (subset_closure (mem_image_of_mem _ ys))
[GOAL]
case intro.intro.intro.intro.intro.intro.h₁.intro.intro.intro.intro
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
y : γ
n : ℕ
s : Set γ
sb : s ∈ b
ys : y ∈ s
hs : s ⊆ ball y (u n / 2)
diam_s : diam s ≤ u n
⊢ f y ∈
    ⋂ (t : ↑b) (ht : Disjoint ↑{ val := s, property := sb } ↑t),
      q { val := ({ val := s, property := sb }, t), property := ht } \
        q { val := (t, { val := s, property := sb }), property := (_ : Disjoint ↑t ↑{ val := s, property := sb }) }
[PROOFSTEP]
refine' mem_iInter.2 fun t => mem_iInter.2 fun ht => ⟨_, _⟩
[GOAL]
case intro.intro.intro.intro.intro.intro.h₁.intro.intro.intro.intro.refine'_1
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
y : γ
n : ℕ
s : Set γ
sb : s ∈ b
ys : y ∈ s
hs : s ⊆ ball y (u n / 2)
diam_s : diam s ≤ u n
t : ↑b
ht : Disjoint ↑{ val := s, property := sb } ↑t
⊢ f y ∈ q { val := ({ val := s, property := sb }, t), property := ht }
[PROOFSTEP]
apply hq1
[GOAL]
case intro.intro.intro.intro.intro.intro.h₁.intro.intro.intro.intro.refine'_1.a
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
y : γ
n : ℕ
s : Set γ
sb : s ∈ b
ys : y ∈ s
hs : s ⊆ ball y (u n / 2)
diam_s : diam s ≤ u n
t : ↑b
ht : Disjoint ↑{ val := s, property := sb } ↑t
⊢ f y ∈ f '' ↑(↑{ val := ({ val := s, property := sb }, t), property := ht }).fst
[PROOFSTEP]
exact mem_image_of_mem _ ys
[GOAL]
case intro.intro.intro.intro.intro.intro.h₁.intro.intro.intro.intro.refine'_2
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
y : γ
n : ℕ
s : Set γ
sb : s ∈ b
ys : y ∈ s
hs : s ⊆ ball y (u n / 2)
diam_s : diam s ≤ u n
t : ↑b
ht : Disjoint ↑{ val := s, property := sb } ↑t
⊢ ¬f y ∈ q { val := (t, { val := s, property := sb }), property := (_ : Disjoint ↑t ↑{ val := s, property := sb }) }
[PROOFSTEP]
apply disjoint_left.1 (hq2 ⟨(t, ⟨s, sb⟩), ht.symm⟩)
[GOAL]
case intro.intro.intro.intro.intro.intro.h₁.intro.intro.intro.intro.refine'_2.a
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
y : γ
n : ℕ
s : Set γ
sb : s ∈ b
ys : y ∈ s
hs : s ⊆ ball y (u n / 2)
diam_s : diam s ≤ u n
t : ↑b
ht : Disjoint ↑{ val := s, property := sb } ↑t
⊢ f y ∈
    f ''
      ↑(↑{ val := (t, { val := s, property := sb }), property := (_ : Disjoint ↑t ↑{ val := s, property := sb }) }).snd
[PROOFSTEP]
exact mem_image_of_mem _ ys
[GOAL]
case intro.intro.intro.intro.intro.intro.h₂
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
⊢ ⋂ (n : ℕ), F n ⊆ range f
[PROOFSTEP]
intro x hx
[GOAL]
case intro.intro.intro.intro.intro.intro.h₂
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
x : β
hx : x ∈ ⋂ (n : ℕ), F n
⊢ x ∈ range f
[PROOFSTEP]
have C1 : ∀ n, ∃ (s : b) (_ : Bounded s.1 ∧ diam s.1 ≤ u n), x ∈ E s := fun n => by
  simpa only [mem_iUnion] using mem_iInter.1 hx n
[GOAL]
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
x : β
hx : x ∈ ⋂ (n : ℕ), F n
n : ℕ
⊢ ∃ s x_1, x ∈ E s
[PROOFSTEP]
simpa only [mem_iUnion] using mem_iInter.1 hx n
[GOAL]
case intro.intro.intro.intro.intro.intro.h₂
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
x : β
hx : x ∈ ⋂ (n : ℕ), F n
C1 : ∀ (n : ℕ), ∃ s x_1, x ∈ E s
⊢ x ∈ range f
[PROOFSTEP]
choose s hs hxs using C1
[GOAL]
case intro.intro.intro.intro.intro.intro.h₂
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
x : β
hx : x ∈ ⋂ (n : ℕ), F n
s : ℕ → ↑b
hs : ∀ (n : ℕ), Metric.Bounded ↑(s n) ∧ diam ↑(s n) ≤ u n
hxs : ∀ (n : ℕ), x ∈ E (s n)
⊢ x ∈ range f
[PROOFSTEP]
have C2 : ∀ n, (s n).1.Nonempty := by
  intro n
  rw [nonempty_iff_ne_empty]
  intro hn
  have := (s n).2
  rw [hn] at this
  exact b_nonempty this
[GOAL]
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
x : β
hx : x ∈ ⋂ (n : ℕ), F n
s : ℕ → ↑b
hs : ∀ (n : ℕ), Metric.Bounded ↑(s n) ∧ diam ↑(s n) ≤ u n
hxs : ∀ (n : ℕ), x ∈ E (s n)
⊢ ∀ (n : ℕ), Set.Nonempty ↑(s n)
[PROOFSTEP]
intro n
[GOAL]
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
x : β
hx : x ∈ ⋂ (n : ℕ), F n
s : ℕ → ↑b
hs : ∀ (n : ℕ), Metric.Bounded ↑(s n) ∧ diam ↑(s n) ≤ u n
hxs : ∀ (n : ℕ), x ∈ E (s n)
n : ℕ
⊢ Set.Nonempty ↑(s n)
[PROOFSTEP]
rw [nonempty_iff_ne_empty]
[GOAL]
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
x : β
hx : x ∈ ⋂ (n : ℕ), F n
s : ℕ → ↑b
hs : ∀ (n : ℕ), Metric.Bounded ↑(s n) ∧ diam ↑(s n) ≤ u n
hxs : ∀ (n : ℕ), x ∈ E (s n)
n : ℕ
⊢ ↑(s n) ≠ ∅
[PROOFSTEP]
intro hn
[GOAL]
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
x : β
hx : x ∈ ⋂ (n : ℕ), F n
s : ℕ → ↑b
hs : ∀ (n : ℕ), Metric.Bounded ↑(s n) ∧ diam ↑(s n) ≤ u n
hxs : ∀ (n : ℕ), x ∈ E (s n)
n : ℕ
hn : ↑(s n) = ∅
⊢ False
[PROOFSTEP]
have := (s n).2
[GOAL]
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝¹ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this✝ : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
x : β
hx : x ∈ ⋂ (n : ℕ), F n
s : ℕ → ↑b
hs : ∀ (n : ℕ), Metric.Bounded ↑(s n) ∧ diam ↑(s n) ≤ u n
hxs : ∀ (n : ℕ), x ∈ E (s n)
n : ℕ
hn : ↑(s n) = ∅
this : ↑(s n) ∈ b
⊢ False
[PROOFSTEP]
rw [hn] at this
[GOAL]
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝¹ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this✝ : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
x : β
hx : x ∈ ⋂ (n : ℕ), F n
s : ℕ → ↑b
hs : ∀ (n : ℕ), Metric.Bounded ↑(s n) ∧ diam ↑(s n) ≤ u n
hxs : ∀ (n : ℕ), x ∈ E (s n)
n : ℕ
hn : ↑(s n) = ∅
this : ∅ ∈ b
⊢ False
[PROOFSTEP]
exact b_nonempty this
[GOAL]
case intro.intro.intro.intro.intro.intro.h₂
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
x : β
hx : x ∈ ⋂ (n : ℕ), F n
s : ℕ → ↑b
hs : ∀ (n : ℕ), Metric.Bounded ↑(s n) ∧ diam ↑(s n) ≤ u n
hxs : ∀ (n : ℕ), x ∈ E (s n)
C2 : ∀ (n : ℕ), Set.Nonempty ↑(s n)
⊢ x ∈ range f
[PROOFSTEP]
choose y hy using C2
[GOAL]
case intro.intro.intro.intro.intro.intro.h₂
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
x : β
hx : x ∈ ⋂ (n : ℕ), F n
s : ℕ → ↑b
hs : ∀ (n : ℕ), Metric.Bounded ↑(s n) ∧ diam ↑(s n) ≤ u n
hxs : ∀ (n : ℕ), x ∈ E (s n)
y : ℕ → γ
hy : ∀ (n : ℕ), y n ∈ ↑(s n)
⊢ x ∈ range f
[PROOFSTEP]
have I : ∀ m n, ((s m).1 ∩ (s n).1).Nonempty := by
  intro m n
  rw [← not_disjoint_iff_nonempty_inter]
  by_contra' h
  have A : x ∈ q ⟨(s m, s n), h⟩ \ q ⟨(s n, s m), h.symm⟩ :=
    haveI := mem_iInter.1 (hxs m).2 (s n)
    (mem_iInter.1 this h : _)
  have B : x ∈ q ⟨(s n, s m), h.symm⟩ \ q ⟨(s m, s n), h⟩ :=
    haveI := mem_iInter.1 (hxs n).2 (s m)
    (mem_iInter.1 this h.symm : _)
  exact
    A.2
      B.1
        -- the points `y n` are nearby, and therefore they form a Cauchy sequence.
[GOAL]
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
x : β
hx : x ∈ ⋂ (n : ℕ), F n
s : ℕ → ↑b
hs : ∀ (n : ℕ), Metric.Bounded ↑(s n) ∧ diam ↑(s n) ≤ u n
hxs : ∀ (n : ℕ), x ∈ E (s n)
y : ℕ → γ
hy : ∀ (n : ℕ), y n ∈ ↑(s n)
⊢ ∀ (m n : ℕ), Set.Nonempty (↑(s m) ∩ ↑(s n))
[PROOFSTEP]
intro m n
[GOAL]
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
x : β
hx : x ∈ ⋂ (n : ℕ), F n
s : ℕ → ↑b
hs : ∀ (n : ℕ), Metric.Bounded ↑(s n) ∧ diam ↑(s n) ≤ u n
hxs : ∀ (n : ℕ), x ∈ E (s n)
y : ℕ → γ
hy : ∀ (n : ℕ), y n ∈ ↑(s n)
m n : ℕ
⊢ Set.Nonempty (↑(s m) ∩ ↑(s n))
[PROOFSTEP]
rw [← not_disjoint_iff_nonempty_inter]
[GOAL]
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
x : β
hx : x ∈ ⋂ (n : ℕ), F n
s : ℕ → ↑b
hs : ∀ (n : ℕ), Metric.Bounded ↑(s n) ∧ diam ↑(s n) ≤ u n
hxs : ∀ (n : ℕ), x ∈ E (s n)
y : ℕ → γ
hy : ∀ (n : ℕ), y n ∈ ↑(s n)
m n : ℕ
⊢ ¬Disjoint ↑(s m) ↑(s n)
[PROOFSTEP]
by_contra' h
[GOAL]
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
x : β
hx : x ∈ ⋂ (n : ℕ), F n
s : ℕ → ↑b
hs : ∀ (n : ℕ), Metric.Bounded ↑(s n) ∧ diam ↑(s n) ≤ u n
hxs : ∀ (n : ℕ), x ∈ E (s n)
y : ℕ → γ
hy : ∀ (n : ℕ), y n ∈ ↑(s n)
m n : ℕ
h : Disjoint ↑(s m) ↑(s n)
⊢ False
[PROOFSTEP]
have A : x ∈ q ⟨(s m, s n), h⟩ \ q ⟨(s n, s m), h.symm⟩ :=
  haveI := mem_iInter.1 (hxs m).2 (s n)
  (mem_iInter.1 this h : _)
[GOAL]
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this : Encodable ↑b
A✝ : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A✝ → Set β
hq1 : ∀ (p : A✝), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A✝), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A✝), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
x : β
hx : x ∈ ⋂ (n : ℕ), F n
s : ℕ → ↑b
hs : ∀ (n : ℕ), Metric.Bounded ↑(s n) ∧ diam ↑(s n) ≤ u n
hxs : ∀ (n : ℕ), x ∈ E (s n)
y : ℕ → γ
hy : ∀ (n : ℕ), y n ∈ ↑(s n)
m n : ℕ
h : Disjoint ↑(s m) ↑(s n)
A : x ∈ q { val := (s m, s n), property := h } \ q { val := (s n, s m), property := (_ : Disjoint ↑(s n) ↑(s m)) }
⊢ False
[PROOFSTEP]
have B : x ∈ q ⟨(s n, s m), h.symm⟩ \ q ⟨(s m, s n), h⟩ :=
  haveI := mem_iInter.1 (hxs n).2 (s m)
  (mem_iInter.1 this h.symm : _)
[GOAL]
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this : Encodable ↑b
A✝ : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A✝ → Set β
hq1 : ∀ (p : A✝), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A✝), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A✝), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
x : β
hx : x ∈ ⋂ (n : ℕ), F n
s : ℕ → ↑b
hs : ∀ (n : ℕ), Metric.Bounded ↑(s n) ∧ diam ↑(s n) ≤ u n
hxs : ∀ (n : ℕ), x ∈ E (s n)
y : ℕ → γ
hy : ∀ (n : ℕ), y n ∈ ↑(s n)
m n : ℕ
h : Disjoint ↑(s m) ↑(s n)
A : x ∈ q { val := (s m, s n), property := h } \ q { val := (s n, s m), property := (_ : Disjoint ↑(s n) ↑(s m)) }
B : x ∈ q { val := (s n, s m), property := (_ : Disjoint ↑(s n) ↑(s m)) } \ q { val := (s m, s n), property := h }
⊢ False
[PROOFSTEP]
exact
  A.2
    B.1
      -- the points `y n` are nearby, and therefore they form a Cauchy sequence.
[GOAL]
case intro.intro.intro.intro.intro.intro.h₂
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
x : β
hx : x ∈ ⋂ (n : ℕ), F n
s : ℕ → ↑b
hs : ∀ (n : ℕ), Metric.Bounded ↑(s n) ∧ diam ↑(s n) ≤ u n
hxs : ∀ (n : ℕ), x ∈ E (s n)
y : ℕ → γ
hy : ∀ (n : ℕ), y n ∈ ↑(s n)
I : ∀ (m n : ℕ), Set.Nonempty (↑(s m) ∩ ↑(s n))
⊢ x ∈ range f
[PROOFSTEP]
have cauchy_y : CauchySeq y :=
  by
  have : Tendsto (fun n => 2 * u n) atTop (𝓝 0) := by simpa only [mul_zero] using u_lim.const_mul 2
  refine cauchySeq_of_le_tendsto_0' (fun n => 2 * u n) (fun m n hmn => ?_) this
  rcases I m n with ⟨z, zsm, zsn⟩
  calc
    dist (y m) (y n) ≤ dist (y m) z + dist z (y n) := dist_triangle _ _ _
    _ ≤ u m + u n :=
      (add_le_add ((dist_le_diam_of_mem (hs m).1 (hy m) zsm).trans (hs m).2)
        ((dist_le_diam_of_mem (hs n).1 zsn (hy n)).trans (hs n).2))
    _ ≤ 2 * u m := by linarith [u_anti.antitone hmn]
[GOAL]
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
x : β
hx : x ∈ ⋂ (n : ℕ), F n
s : ℕ → ↑b
hs : ∀ (n : ℕ), Metric.Bounded ↑(s n) ∧ diam ↑(s n) ≤ u n
hxs : ∀ (n : ℕ), x ∈ E (s n)
y : ℕ → γ
hy : ∀ (n : ℕ), y n ∈ ↑(s n)
I : ∀ (m n : ℕ), Set.Nonempty (↑(s m) ∩ ↑(s n))
⊢ CauchySeq y
[PROOFSTEP]
have : Tendsto (fun n => 2 * u n) atTop (𝓝 0) := by simpa only [mul_zero] using u_lim.const_mul 2
[GOAL]
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
x : β
hx : x ∈ ⋂ (n : ℕ), F n
s : ℕ → ↑b
hs : ∀ (n : ℕ), Metric.Bounded ↑(s n) ∧ diam ↑(s n) ≤ u n
hxs : ∀ (n : ℕ), x ∈ E (s n)
y : ℕ → γ
hy : ∀ (n : ℕ), y n ∈ ↑(s n)
I : ∀ (m n : ℕ), Set.Nonempty (↑(s m) ∩ ↑(s n))
⊢ Tendsto (fun n => 2 * u n) atTop (𝓝 0)
[PROOFSTEP]
simpa only [mul_zero] using u_lim.const_mul 2
[GOAL]
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝¹ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this✝ : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
x : β
hx : x ∈ ⋂ (n : ℕ), F n
s : ℕ → ↑b
hs : ∀ (n : ℕ), Metric.Bounded ↑(s n) ∧ diam ↑(s n) ≤ u n
hxs : ∀ (n : ℕ), x ∈ E (s n)
y : ℕ → γ
hy : ∀ (n : ℕ), y n ∈ ↑(s n)
I : ∀ (m n : ℕ), Set.Nonempty (↑(s m) ∩ ↑(s n))
this : Tendsto (fun n => 2 * u n) atTop (𝓝 0)
⊢ CauchySeq y
[PROOFSTEP]
refine cauchySeq_of_le_tendsto_0' (fun n => 2 * u n) (fun m n hmn => ?_) this
[GOAL]
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝¹ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this✝ : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
x : β
hx : x ∈ ⋂ (n : ℕ), F n
s : ℕ → ↑b
hs : ∀ (n : ℕ), Metric.Bounded ↑(s n) ∧ diam ↑(s n) ≤ u n
hxs : ∀ (n : ℕ), x ∈ E (s n)
y : ℕ → γ
hy : ∀ (n : ℕ), y n ∈ ↑(s n)
I : ∀ (m n : ℕ), Set.Nonempty (↑(s m) ∩ ↑(s n))
this : Tendsto (fun n => 2 * u n) atTop (𝓝 0)
m n : ℕ
hmn : m ≤ n
⊢ dist (y m) (y n) ≤ (fun n => 2 * u n) m
[PROOFSTEP]
rcases I m n with ⟨z, zsm, zsn⟩
[GOAL]
case intro.intro
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝¹ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this✝ : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
x : β
hx : x ∈ ⋂ (n : ℕ), F n
s : ℕ → ↑b
hs : ∀ (n : ℕ), Metric.Bounded ↑(s n) ∧ diam ↑(s n) ≤ u n
hxs : ∀ (n : ℕ), x ∈ E (s n)
y : ℕ → γ
hy : ∀ (n : ℕ), y n ∈ ↑(s n)
I : ∀ (m n : ℕ), Set.Nonempty (↑(s m) ∩ ↑(s n))
this : Tendsto (fun n => 2 * u n) atTop (𝓝 0)
m n : ℕ
hmn : m ≤ n
z : γ
zsm : z ∈ ↑(s m)
zsn : z ∈ ↑(s n)
⊢ dist (y m) (y n) ≤ (fun n => 2 * u n) m
[PROOFSTEP]
calc
  dist (y m) (y n) ≤ dist (y m) z + dist z (y n) := dist_triangle _ _ _
  _ ≤ u m + u n :=
    (add_le_add ((dist_le_diam_of_mem (hs m).1 (hy m) zsm).trans (hs m).2)
      ((dist_le_diam_of_mem (hs n).1 zsn (hy n)).trans (hs n).2))
  _ ≤ 2 * u m := by linarith [u_anti.antitone hmn]
[GOAL]
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝¹ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this✝ : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
x : β
hx : x ∈ ⋂ (n : ℕ), F n
s : ℕ → ↑b
hs : ∀ (n : ℕ), Metric.Bounded ↑(s n) ∧ diam ↑(s n) ≤ u n
hxs : ∀ (n : ℕ), x ∈ E (s n)
y : ℕ → γ
hy : ∀ (n : ℕ), y n ∈ ↑(s n)
I : ∀ (m n : ℕ), Set.Nonempty (↑(s m) ∩ ↑(s n))
this : Tendsto (fun n => 2 * u n) atTop (𝓝 0)
m n : ℕ
hmn : m ≤ n
z : γ
zsm : z ∈ ↑(s m)
zsn : z ∈ ↑(s n)
⊢ u m + u n ≤ 2 * u m
[PROOFSTEP]
linarith [u_anti.antitone hmn]
[GOAL]
case intro.intro.intro.intro.intro.intro.h₂
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
x : β
hx : x ∈ ⋂ (n : ℕ), F n
s : ℕ → ↑b
hs : ∀ (n : ℕ), Metric.Bounded ↑(s n) ∧ diam ↑(s n) ≤ u n
hxs : ∀ (n : ℕ), x ∈ E (s n)
y : ℕ → γ
hy : ∀ (n : ℕ), y n ∈ ↑(s n)
I : ∀ (m n : ℕ), Set.Nonempty (↑(s m) ∩ ↑(s n))
cauchy_y : CauchySeq y
⊢ x ∈ range f
[PROOFSTEP]
haveI : Nonempty γ :=
  ⟨y 0⟩
    -- let `z` be its limit.
[GOAL]
case intro.intro.intro.intro.intro.intro.h₂
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝¹ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this✝ : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
x : β
hx : x ∈ ⋂ (n : ℕ), F n
s : ℕ → ↑b
hs : ∀ (n : ℕ), Metric.Bounded ↑(s n) ∧ diam ↑(s n) ≤ u n
hxs : ∀ (n : ℕ), x ∈ E (s n)
y : ℕ → γ
hy : ∀ (n : ℕ), y n ∈ ↑(s n)
I : ∀ (m n : ℕ), Set.Nonempty (↑(s m) ∩ ↑(s n))
cauchy_y : CauchySeq y
this : Nonempty γ
⊢ x ∈ range f
[PROOFSTEP]
let z := limUnder atTop y
[GOAL]
case intro.intro.intro.intro.intro.intro.h₂
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝¹ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this✝ : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
x : β
hx : x ∈ ⋂ (n : ℕ), F n
s : ℕ → ↑b
hs : ∀ (n : ℕ), Metric.Bounded ↑(s n) ∧ diam ↑(s n) ≤ u n
hxs : ∀ (n : ℕ), x ∈ E (s n)
y : ℕ → γ
hy : ∀ (n : ℕ), y n ∈ ↑(s n)
I : ∀ (m n : ℕ), Set.Nonempty (↑(s m) ∩ ↑(s n))
cauchy_y : CauchySeq y
this : Nonempty γ
z : γ := limUnder atTop y
⊢ x ∈ range f
[PROOFSTEP]
have y_lim : Tendsto y atTop (𝓝 z) := cauchy_y.tendsto_limUnder
[GOAL]
case intro.intro.intro.intro.intro.intro.h₂
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝¹ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this✝ : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
x : β
hx : x ∈ ⋂ (n : ℕ), F n
s : ℕ → ↑b
hs : ∀ (n : ℕ), Metric.Bounded ↑(s n) ∧ diam ↑(s n) ≤ u n
hxs : ∀ (n : ℕ), x ∈ E (s n)
y : ℕ → γ
hy : ∀ (n : ℕ), y n ∈ ↑(s n)
I : ∀ (m n : ℕ), Set.Nonempty (↑(s m) ∩ ↑(s n))
cauchy_y : CauchySeq y
this : Nonempty γ
z : γ := limUnder atTop y
y_lim : Tendsto y atTop (𝓝 z)
⊢ x ∈ range f
[PROOFSTEP]
suffices f z = x by
  rw [← this]
  exact
    mem_range_self
      _
        -- assume for a contradiction that `f z ≠ x`.
[GOAL]
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝² : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this✝¹ : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
x : β
hx : x ∈ ⋂ (n : ℕ), F n
s : ℕ → ↑b
hs : ∀ (n : ℕ), Metric.Bounded ↑(s n) ∧ diam ↑(s n) ≤ u n
hxs : ∀ (n : ℕ), x ∈ E (s n)
y : ℕ → γ
hy : ∀ (n : ℕ), y n ∈ ↑(s n)
I : ∀ (m n : ℕ), Set.Nonempty (↑(s m) ∩ ↑(s n))
cauchy_y : CauchySeq y
this✝ : Nonempty γ
z : γ := limUnder atTop y
y_lim : Tendsto y atTop (𝓝 z)
this : f z = x
⊢ x ∈ range f
[PROOFSTEP]
rw [← this]
[GOAL]
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝² : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this✝¹ : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
x : β
hx : x ∈ ⋂ (n : ℕ), F n
s : ℕ → ↑b
hs : ∀ (n : ℕ), Metric.Bounded ↑(s n) ∧ diam ↑(s n) ≤ u n
hxs : ∀ (n : ℕ), x ∈ E (s n)
y : ℕ → γ
hy : ∀ (n : ℕ), y n ∈ ↑(s n)
I : ∀ (m n : ℕ), Set.Nonempty (↑(s m) ∩ ↑(s n))
cauchy_y : CauchySeq y
this✝ : Nonempty γ
z : γ := limUnder atTop y
y_lim : Tendsto y atTop (𝓝 z)
this : f z = x
⊢ f z ∈ range f
[PROOFSTEP]
exact
  mem_range_self
    _
      -- assume for a contradiction that `f z ≠ x`.
[GOAL]
case intro.intro.intro.intro.intro.intro.h₂
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝¹ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this✝ : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
x : β
hx : x ∈ ⋂ (n : ℕ), F n
s : ℕ → ↑b
hs : ∀ (n : ℕ), Metric.Bounded ↑(s n) ∧ diam ↑(s n) ≤ u n
hxs : ∀ (n : ℕ), x ∈ E (s n)
y : ℕ → γ
hy : ∀ (n : ℕ), y n ∈ ↑(s n)
I : ∀ (m n : ℕ), Set.Nonempty (↑(s m) ∩ ↑(s n))
cauchy_y : CauchySeq y
this : Nonempty γ
z : γ := limUnder atTop y
y_lim : Tendsto y atTop (𝓝 z)
⊢ f z = x
[PROOFSTEP]
by_contra' hne
[GOAL]
case intro.intro.intro.intro.intro.intro.h₂
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝¹ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this✝ : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
x : β
hx : x ∈ ⋂ (n : ℕ), F n
s : ℕ → ↑b
hs : ∀ (n : ℕ), Metric.Bounded ↑(s n) ∧ diam ↑(s n) ≤ u n
hxs : ∀ (n : ℕ), x ∈ E (s n)
y : ℕ → γ
hy : ∀ (n : ℕ), y n ∈ ↑(s n)
I : ∀ (m n : ℕ), Set.Nonempty (↑(s m) ∩ ↑(s n))
cauchy_y : CauchySeq y
this : Nonempty γ
z : γ := limUnder atTop y
y_lim : Tendsto y atTop (𝓝 z)
hne : f (limUnder atTop y) ≠ x
⊢ False
[PROOFSTEP]
obtain ⟨v, w, v_open, w_open, fzv, xw, hvw⟩ := t2_separation hne
[GOAL]
case intro.intro.intro.intro.intro.intro.h₂.intro.intro.intro.intro.intro.intro
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝¹ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this✝ : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
x : β
hx : x ∈ ⋂ (n : ℕ), F n
s : ℕ → ↑b
hs : ∀ (n : ℕ), Metric.Bounded ↑(s n) ∧ diam ↑(s n) ≤ u n
hxs : ∀ (n : ℕ), x ∈ E (s n)
y : ℕ → γ
hy : ∀ (n : ℕ), y n ∈ ↑(s n)
I : ∀ (m n : ℕ), Set.Nonempty (↑(s m) ∩ ↑(s n))
cauchy_y : CauchySeq y
this : Nonempty γ
z : γ := limUnder atTop y
y_lim : Tendsto y atTop (𝓝 z)
hne : f (limUnder atTop y) ≠ x
v w : Set β
v_open : IsOpen v
w_open : IsOpen w
fzv : f (limUnder atTop y) ∈ v
xw : x ∈ w
hvw : Disjoint v w
⊢ False
[PROOFSTEP]
obtain ⟨δ, δpos, hδ⟩ : ∃ δ > (0 : ℝ), ball z δ ⊆ f ⁻¹' v :=
  by
  apply Metric.mem_nhds_iff.1
  exact f_cont.continuousAt.preimage_mem_nhds (v_open.mem_nhds fzv)
[GOAL]
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝¹ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this✝ : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
x : β
hx : x ∈ ⋂ (n : ℕ), F n
s : ℕ → ↑b
hs : ∀ (n : ℕ), Metric.Bounded ↑(s n) ∧ diam ↑(s n) ≤ u n
hxs : ∀ (n : ℕ), x ∈ E (s n)
y : ℕ → γ
hy : ∀ (n : ℕ), y n ∈ ↑(s n)
I : ∀ (m n : ℕ), Set.Nonempty (↑(s m) ∩ ↑(s n))
cauchy_y : CauchySeq y
this : Nonempty γ
z : γ := limUnder atTop y
y_lim : Tendsto y atTop (𝓝 z)
hne : f (limUnder atTop y) ≠ x
v w : Set β
v_open : IsOpen v
w_open : IsOpen w
fzv : f (limUnder atTop y) ∈ v
xw : x ∈ w
hvw : Disjoint v w
⊢ ∃ δ, δ > 0 ∧ ball z δ ⊆ f ⁻¹' v
[PROOFSTEP]
apply Metric.mem_nhds_iff.1
[GOAL]
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝¹ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this✝ : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
x : β
hx : x ∈ ⋂ (n : ℕ), F n
s : ℕ → ↑b
hs : ∀ (n : ℕ), Metric.Bounded ↑(s n) ∧ diam ↑(s n) ≤ u n
hxs : ∀ (n : ℕ), x ∈ E (s n)
y : ℕ → γ
hy : ∀ (n : ℕ), y n ∈ ↑(s n)
I : ∀ (m n : ℕ), Set.Nonempty (↑(s m) ∩ ↑(s n))
cauchy_y : CauchySeq y
this : Nonempty γ
z : γ := limUnder atTop y
y_lim : Tendsto y atTop (𝓝 z)
hne : f (limUnder atTop y) ≠ x
v w : Set β
v_open : IsOpen v
w_open : IsOpen w
fzv : f (limUnder atTop y) ∈ v
xw : x ∈ w
hvw : Disjoint v w
⊢ f ⁻¹' v ∈ 𝓝 z
[PROOFSTEP]
exact f_cont.continuousAt.preimage_mem_nhds (v_open.mem_nhds fzv)
[GOAL]
case intro.intro.intro.intro.intro.intro.h₂.intro.intro.intro.intro.intro.intro.intro.intro
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝¹ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this✝ : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
x : β
hx : x ∈ ⋂ (n : ℕ), F n
s : ℕ → ↑b
hs : ∀ (n : ℕ), Metric.Bounded ↑(s n) ∧ diam ↑(s n) ≤ u n
hxs : ∀ (n : ℕ), x ∈ E (s n)
y : ℕ → γ
hy : ∀ (n : ℕ), y n ∈ ↑(s n)
I : ∀ (m n : ℕ), Set.Nonempty (↑(s m) ∩ ↑(s n))
cauchy_y : CauchySeq y
this : Nonempty γ
z : γ := limUnder atTop y
y_lim : Tendsto y atTop (𝓝 z)
hne : f (limUnder atTop y) ≠ x
v w : Set β
v_open : IsOpen v
w_open : IsOpen w
fzv : f (limUnder atTop y) ∈ v
xw : x ∈ w
hvw : Disjoint v w
δ : ℝ
δpos : δ > 0
hδ : ball z δ ⊆ f ⁻¹' v
⊢ False
[PROOFSTEP]
obtain ⟨n, hn⟩ : ∃ n, u n + dist (y n) z < δ :=
  haveI : Tendsto (fun n => u n + dist (y n) z) atTop (𝓝 0) := by
    simpa only [add_zero] using u_lim.add (tendsto_iff_dist_tendsto_zero.1 y_lim)
  ((tendsto_order.1 this).2 _ δpos).exists
[GOAL]
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝¹ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this✝ : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
x : β
hx : x ∈ ⋂ (n : ℕ), F n
s : ℕ → ↑b
hs : ∀ (n : ℕ), Metric.Bounded ↑(s n) ∧ diam ↑(s n) ≤ u n
hxs : ∀ (n : ℕ), x ∈ E (s n)
y : ℕ → γ
hy : ∀ (n : ℕ), y n ∈ ↑(s n)
I : ∀ (m n : ℕ), Set.Nonempty (↑(s m) ∩ ↑(s n))
cauchy_y : CauchySeq y
this : Nonempty γ
z : γ := limUnder atTop y
y_lim : Tendsto y atTop (𝓝 z)
hne : f (limUnder atTop y) ≠ x
v w : Set β
v_open : IsOpen v
w_open : IsOpen w
fzv : f (limUnder atTop y) ∈ v
xw : x ∈ w
hvw : Disjoint v w
δ : ℝ
δpos : δ > 0
hδ : ball z δ ⊆ f ⁻¹' v
⊢ Tendsto (fun n => u n + dist (y n) z) atTop (𝓝 0)
[PROOFSTEP]
simpa only [add_zero] using u_lim.add (tendsto_iff_dist_tendsto_zero.1 y_lim)
[GOAL]
case intro.intro.intro.intro.intro.intro.h₂.intro.intro.intro.intro.intro.intro.intro.intro.intro
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝¹ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this✝ : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
x : β
hx : x ∈ ⋂ (n : ℕ), F n
s : ℕ → ↑b
hs : ∀ (n : ℕ), Metric.Bounded ↑(s n) ∧ diam ↑(s n) ≤ u n
hxs : ∀ (n : ℕ), x ∈ E (s n)
y : ℕ → γ
hy : ∀ (n : ℕ), y n ∈ ↑(s n)
I : ∀ (m n : ℕ), Set.Nonempty (↑(s m) ∩ ↑(s n))
cauchy_y : CauchySeq y
this : Nonempty γ
z : γ := limUnder atTop y
y_lim : Tendsto y atTop (𝓝 z)
hne : f (limUnder atTop y) ≠ x
v w : Set β
v_open : IsOpen v
w_open : IsOpen w
fzv : f (limUnder atTop y) ∈ v
xw : x ∈ w
hvw : Disjoint v w
δ : ℝ
δpos : δ > 0
hδ : ball z δ ⊆ f ⁻¹' v
n : ℕ
hn : u n + dist (y n) z < δ
⊢ False
[PROOFSTEP]
have fsnv : f '' s n ⊆ v := by
  rw [image_subset_iff]
  apply Subset.trans _ hδ
  intro a ha
  calc
    dist a z ≤ dist a (y n) + dist (y n) z := dist_triangle _ _ _
    _ ≤ u n + dist (y n) z := (add_le_add_right ((dist_le_diam_of_mem (hs n).1 ha (hy n)).trans (hs n).2) _)
    _ < δ := hn
[GOAL]
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝¹ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this✝ : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
x : β
hx : x ∈ ⋂ (n : ℕ), F n
s : ℕ → ↑b
hs : ∀ (n : ℕ), Metric.Bounded ↑(s n) ∧ diam ↑(s n) ≤ u n
hxs : ∀ (n : ℕ), x ∈ E (s n)
y : ℕ → γ
hy : ∀ (n : ℕ), y n ∈ ↑(s n)
I : ∀ (m n : ℕ), Set.Nonempty (↑(s m) ∩ ↑(s n))
cauchy_y : CauchySeq y
this : Nonempty γ
z : γ := limUnder atTop y
y_lim : Tendsto y atTop (𝓝 z)
hne : f (limUnder atTop y) ≠ x
v w : Set β
v_open : IsOpen v
w_open : IsOpen w
fzv : f (limUnder atTop y) ∈ v
xw : x ∈ w
hvw : Disjoint v w
δ : ℝ
δpos : δ > 0
hδ : ball z δ ⊆ f ⁻¹' v
n : ℕ
hn : u n + dist (y n) z < δ
⊢ f '' ↑(s n) ⊆ v
[PROOFSTEP]
rw [image_subset_iff]
[GOAL]
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝¹ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this✝ : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
x : β
hx : x ∈ ⋂ (n : ℕ), F n
s : ℕ → ↑b
hs : ∀ (n : ℕ), Metric.Bounded ↑(s n) ∧ diam ↑(s n) ≤ u n
hxs : ∀ (n : ℕ), x ∈ E (s n)
y : ℕ → γ
hy : ∀ (n : ℕ), y n ∈ ↑(s n)
I : ∀ (m n : ℕ), Set.Nonempty (↑(s m) ∩ ↑(s n))
cauchy_y : CauchySeq y
this : Nonempty γ
z : γ := limUnder atTop y
y_lim : Tendsto y atTop (𝓝 z)
hne : f (limUnder atTop y) ≠ x
v w : Set β
v_open : IsOpen v
w_open : IsOpen w
fzv : f (limUnder atTop y) ∈ v
xw : x ∈ w
hvw : Disjoint v w
δ : ℝ
δpos : δ > 0
hδ : ball z δ ⊆ f ⁻¹' v
n : ℕ
hn : u n + dist (y n) z < δ
⊢ ↑(s n) ⊆ f ⁻¹' v
[PROOFSTEP]
apply Subset.trans _ hδ
[GOAL]
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝¹ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this✝ : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
x : β
hx : x ∈ ⋂ (n : ℕ), F n
s : ℕ → ↑b
hs : ∀ (n : ℕ), Metric.Bounded ↑(s n) ∧ diam ↑(s n) ≤ u n
hxs : ∀ (n : ℕ), x ∈ E (s n)
y : ℕ → γ
hy : ∀ (n : ℕ), y n ∈ ↑(s n)
I : ∀ (m n : ℕ), Set.Nonempty (↑(s m) ∩ ↑(s n))
cauchy_y : CauchySeq y
this : Nonempty γ
z : γ := limUnder atTop y
y_lim : Tendsto y atTop (𝓝 z)
hne : f (limUnder atTop y) ≠ x
v w : Set β
v_open : IsOpen v
w_open : IsOpen w
fzv : f (limUnder atTop y) ∈ v
xw : x ∈ w
hvw : Disjoint v w
δ : ℝ
δpos : δ > 0
hδ : ball z δ ⊆ f ⁻¹' v
n : ℕ
hn : u n + dist (y n) z < δ
⊢ ↑(s n) ⊆ ball z δ
[PROOFSTEP]
intro a ha
[GOAL]
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝¹ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this✝ : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
x : β
hx : x ∈ ⋂ (n : ℕ), F n
s : ℕ → ↑b
hs : ∀ (n : ℕ), Metric.Bounded ↑(s n) ∧ diam ↑(s n) ≤ u n
hxs : ∀ (n : ℕ), x ∈ E (s n)
y : ℕ → γ
hy : ∀ (n : ℕ), y n ∈ ↑(s n)
I : ∀ (m n : ℕ), Set.Nonempty (↑(s m) ∩ ↑(s n))
cauchy_y : CauchySeq y
this : Nonempty γ
z : γ := limUnder atTop y
y_lim : Tendsto y atTop (𝓝 z)
hne : f (limUnder atTop y) ≠ x
v w : Set β
v_open : IsOpen v
w_open : IsOpen w
fzv : f (limUnder atTop y) ∈ v
xw : x ∈ w
hvw : Disjoint v w
δ : ℝ
δpos : δ > 0
hδ : ball z δ ⊆ f ⁻¹' v
n : ℕ
hn : u n + dist (y n) z < δ
a : γ
ha : a ∈ ↑(s n)
⊢ a ∈ ball z δ
[PROOFSTEP]
calc
  dist a z ≤ dist a (y n) + dist (y n) z := dist_triangle _ _ _
  _ ≤ u n + dist (y n) z := (add_le_add_right ((dist_le_diam_of_mem (hs n).1 ha (hy n)).trans (hs n).2) _)
  _ < δ := hn
[GOAL]
case intro.intro.intro.intro.intro.intro.h₂.intro.intro.intro.intro.intro.intro.intro.intro.intro
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝¹ : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this✝ : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
x : β
hx : x ∈ ⋂ (n : ℕ), F n
s : ℕ → ↑b
hs : ∀ (n : ℕ), Metric.Bounded ↑(s n) ∧ diam ↑(s n) ≤ u n
hxs : ∀ (n : ℕ), x ∈ E (s n)
y : ℕ → γ
hy : ∀ (n : ℕ), y n ∈ ↑(s n)
I : ∀ (m n : ℕ), Set.Nonempty (↑(s m) ∩ ↑(s n))
cauchy_y : CauchySeq y
this : Nonempty γ
z : γ := limUnder atTop y
y_lim : Tendsto y atTop (𝓝 z)
hne : f (limUnder atTop y) ≠ x
v w : Set β
v_open : IsOpen v
w_open : IsOpen w
fzv : f (limUnder atTop y) ∈ v
xw : x ∈ w
hvw : Disjoint v w
δ : ℝ
δpos : δ > 0
hδ : ball z δ ⊆ f ⁻¹' v
n : ℕ
hn : u n + dist (y n) z < δ
fsnv : f '' ↑(s n) ⊆ v
⊢ False
[PROOFSTEP]
have : x ∈ closure v :=
  closure_mono fsnv
    (hxs n).1
      -- this is a contradiction, as `x` is supposed to belong to `w`, which is disjoint from
          -- the closure of `v`.
[GOAL]
case intro.intro.intro.intro.intro.intro.h₂.intro.intro.intro.intro.intro.intro.intro.intro.intro
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
f : γ → β
f_cont : Continuous f
f_inj : Injective f
this✝² : UpgradedPolishSpace γ := upgradePolishSpace γ
b : Set (Set γ)
b_count : Set.Countable b
b_nonempty : ¬∅ ∈ b
hb : IsTopologicalBasis b
this✝¹ : Encodable ↑b
A : Type u_3 := { p // Disjoint ↑p.fst ↑p.snd }
q : A → Set β
hq1 : ∀ (p : A), f '' ↑(↑p).fst ⊆ q p
hq2 : ∀ (p : A), Disjoint (f '' ↑(↑p).snd) (q p)
q_meas : ∀ (p : A), MeasurableSet (q p)
E : ↑b → Set β :=
  fun s =>
    closure (f '' ↑s) ∩
      ⋂ (t : ↑b) (ht : Disjoint ↑s ↑t),
        q { val := (s, t), property := ht } \ q { val := (t, s), property := (_ : Disjoint ↑t ↑s) }
u : ℕ → ℝ
u_anti : StrictAnti u
u_pos : ∀ (n : ℕ), 0 < u n
u_lim : Tendsto u atTop (𝓝 0)
F : ℕ → Set β := fun n => ⋃ (s : ↑b) (_ : Metric.Bounded ↑s ∧ diam ↑s ≤ u n), E s
x : β
hx : x ∈ ⋂ (n : ℕ), F n
s : ℕ → ↑b
hs : ∀ (n : ℕ), Metric.Bounded ↑(s n) ∧ diam ↑(s n) ≤ u n
hxs : ∀ (n : ℕ), x ∈ E (s n)
y : ℕ → γ
hy : ∀ (n : ℕ), y n ∈ ↑(s n)
I : ∀ (m n : ℕ), Set.Nonempty (↑(s m) ∩ ↑(s n))
cauchy_y : CauchySeq y
this✝ : Nonempty γ
z : γ := limUnder atTop y
y_lim : Tendsto y atTop (𝓝 z)
hne : f (limUnder atTop y) ≠ x
v w : Set β
v_open : IsOpen v
w_open : IsOpen w
fzv : f (limUnder atTop y) ∈ v
xw : x ∈ w
hvw : Disjoint v w
δ : ℝ
δpos : δ > 0
hδ : ball z δ ⊆ f ⁻¹' v
n : ℕ
hn : u n + dist (y n) z < δ
fsnv : f '' ↑(s n) ⊆ v
this : x ∈ closure v
⊢ False
[PROOFSTEP]
exact disjoint_left.1 (hvw.closure_left w_open) this xw
[GOAL]
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
s : Set γ
hs : IsClosed s
f : γ → β
f_cont : ContinuousOn f s
f_inj : InjOn f s
⊢ MeasurableSet (f '' s)
[PROOFSTEP]
rw [image_eq_range]
[GOAL]
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
s : Set γ
hs : IsClosed s
f : γ → β
f_cont : ContinuousOn f s
f_inj : InjOn f s
⊢ MeasurableSet (range fun x => f ↑x)
[PROOFSTEP]
haveI : PolishSpace s := IsClosed.polishSpace hs
[GOAL]
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
s : Set γ
hs : IsClosed s
f : γ → β
f_cont : ContinuousOn f s
f_inj : InjOn f s
this : PolishSpace ↑s
⊢ MeasurableSet (range fun x => f ↑x)
[PROOFSTEP]
apply measurableSet_range_of_continuous_injective
[GOAL]
case f_cont
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
s : Set γ
hs : IsClosed s
f : γ → β
f_cont : ContinuousOn f s
f_inj : InjOn f s
this : PolishSpace ↑s
⊢ Continuous fun x => f ↑x
[PROOFSTEP]
rwa [continuousOn_iff_continuous_restrict] at f_cont
[GOAL]
case f_inj
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
β : Type u_4
inst✝³ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
s : Set γ
hs : IsClosed s
f : γ → β
f_cont : ContinuousOn f s
f_inj : InjOn f s
this : PolishSpace ↑s
⊢ Injective fun x => f ↑x
[PROOFSTEP]
rwa [injOn_iff_injective] at f_inj
[GOAL]
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
inst✝³ : MeasurableSpace γ
hγb : BorelSpace γ
β : Type u_4
tβ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
s : Set γ
f : γ → β
hs : MeasurableSet s
f_cont : ContinuousOn f s
f_inj : InjOn f s
⊢ MeasurableSet (f '' s)
[PROOFSTEP]
obtain ⟨t', t't, t'_polish, s_closed, _⟩ :
  ∃ t' : TopologicalSpace γ, t' ≤ tγ ∧ @PolishSpace γ t' ∧ IsClosed[t'] s ∧ IsOpen[t'] s := hs.isClopenable
[GOAL]
case intro.intro.intro.intro
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
inst✝³ : MeasurableSpace γ
hγb : BorelSpace γ
β : Type u_4
tβ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
s : Set γ
f : γ → β
hs : MeasurableSet s
f_cont : ContinuousOn f s
f_inj : InjOn f s
t' : TopologicalSpace γ
t't : t' ≤ tγ
t'_polish : PolishSpace γ
s_closed : IsClosed s
right✝ : IsOpen s
⊢ MeasurableSet (f '' s)
[PROOFSTEP]
exact
  @IsClosed.measurableSet_image_of_continuousOn_injOn γ t' t'_polish β _ _ _ _ s s_closed f (f_cont.mono_dom t't) f_inj
[GOAL]
α : Type u_1
inst✝⁶ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁵ : PolishSpace γ
inst✝⁴ : MeasurableSpace γ
hγb : BorelSpace γ
β : Type u_4
tβ : TopologicalSpace β
inst✝³ : T2Space β
inst✝² : MeasurableSpace β
inst✝¹ : BorelSpace β
s : Set γ
f : γ → β
inst✝ : SecondCountableTopology β
hs : MeasurableSet s
f_meas : Measurable f
f_inj : InjOn f s
⊢ MeasurableSet (f '' s)
[PROOFSTEP]
obtain ⟨t', t't, f_cont, t'_polish⟩ :
  ∃ t' : TopologicalSpace γ, t' ≤ tγ ∧ @Continuous γ β t' tβ f ∧ @PolishSpace γ t' := f_meas.exists_continuous
[GOAL]
case intro.intro.intro
α : Type u_1
inst✝⁶ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁵ : PolishSpace γ
inst✝⁴ : MeasurableSpace γ
hγb : BorelSpace γ
β : Type u_4
tβ : TopologicalSpace β
inst✝³ : T2Space β
inst✝² : MeasurableSpace β
inst✝¹ : BorelSpace β
s : Set γ
f : γ → β
inst✝ : SecondCountableTopology β
hs : MeasurableSet s
f_meas : Measurable f
f_inj : InjOn f s
t' : TopologicalSpace γ
t't : t' ≤ tγ
f_cont : Continuous f
t'_polish : PolishSpace γ
⊢ MeasurableSet (f '' s)
[PROOFSTEP]
have M : MeasurableSet[@borel γ t'] s :=
  @Continuous.measurable γ γ t' (@borel γ t')
    (@BorelSpace.opensMeasurable γ t' (@borel γ t') (@BorelSpace.mk _ _ (borel γ) rfl)) tγ _ _ _
    (continuous_id_of_le t't) s hs
[GOAL]
case intro.intro.intro
α : Type u_1
inst✝⁶ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁵ : PolishSpace γ
inst✝⁴ : MeasurableSpace γ
hγb : BorelSpace γ
β : Type u_4
tβ : TopologicalSpace β
inst✝³ : T2Space β
inst✝² : MeasurableSpace β
inst✝¹ : BorelSpace β
s : Set γ
f : γ → β
inst✝ : SecondCountableTopology β
hs : MeasurableSet s
f_meas : Measurable f
f_inj : InjOn f s
t' : TopologicalSpace γ
t't : t' ≤ tγ
f_cont : Continuous f
t'_polish : PolishSpace γ
M : MeasurableSet s
⊢ MeasurableSet (f '' s)
[PROOFSTEP]
exact
  @MeasurableSet.image_of_continuousOn_injOn γ t' t'_polish (@borel γ t') (@BorelSpace.mk _ _ (borel γ) rfl) β _ _ _ _ s
    f M (@Continuous.continuousOn γ β t' tβ f s f_cont) f_inj
[GOAL]
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
inst✝³ : MeasurableSpace γ
hγb : BorelSpace γ
β : Type u_4
tβ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
s : Set γ
f : γ → β
hs : MeasurableSet s
f_cont : ContinuousOn f s
f_inj : InjOn f s
⊢ ∀ ⦃s_1 : Set ↑s⦄, MeasurableSet s_1 → MeasurableSet (restrict s f '' s_1)
[PROOFSTEP]
intro u hu
[GOAL]
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
inst✝³ : MeasurableSpace γ
hγb : BorelSpace γ
β : Type u_4
tβ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
s : Set γ
f : γ → β
hs : MeasurableSet s
f_cont : ContinuousOn f s
f_inj : InjOn f s
u : Set ↑s
hu : MeasurableSet u
⊢ MeasurableSet (restrict s f '' u)
[PROOFSTEP]
have A : MeasurableSet (((↑) : s → γ) '' u) := (MeasurableEmbedding.subtype_coe hs).measurableSet_image.2 hu
[GOAL]
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
inst✝³ : MeasurableSpace γ
hγb : BorelSpace γ
β : Type u_4
tβ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
s : Set γ
f : γ → β
hs : MeasurableSet s
f_cont : ContinuousOn f s
f_inj : InjOn f s
u : Set ↑s
hu : MeasurableSet u
A : MeasurableSet (Subtype.val '' u)
⊢ MeasurableSet (restrict s f '' u)
[PROOFSTEP]
have B : MeasurableSet (f '' (((↑) : s → γ) '' u)) :=
  A.image_of_continuousOn_injOn (f_cont.mono (Subtype.coe_image_subset s u)) (f_inj.mono (Subtype.coe_image_subset s u))
[GOAL]
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
inst✝³ : MeasurableSpace γ
hγb : BorelSpace γ
β : Type u_4
tβ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
s : Set γ
f : γ → β
hs : MeasurableSet s
f_cont : ContinuousOn f s
f_inj : InjOn f s
u : Set ↑s
hu : MeasurableSet u
A : MeasurableSet (Subtype.val '' u)
B : MeasurableSet (f '' (Subtype.val '' u))
⊢ MeasurableSet (restrict s f '' u)
[PROOFSTEP]
rwa [← image_comp] at B
[GOAL]
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
inst✝³ : MeasurableSpace γ
hγb : BorelSpace γ
β : Type u_4
tβ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
s : Set γ
f : γ → β
⊢ IsClopenable s ↔ MeasurableSet s
[PROOFSTEP]
refine'
  ⟨fun hs => _, fun hs => hs.isClopenable⟩
    -- consider a finer topology `t'` in which `s` is open and closed.
[GOAL]
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
inst✝³ : MeasurableSpace γ
hγb : BorelSpace γ
β : Type u_4
tβ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
s : Set γ
f : γ → β
hs : IsClopenable s
⊢ MeasurableSet s
[PROOFSTEP]
obtain ⟨t', t't, t'_polish, s_closed, _⟩ :
  ∃ t' : TopologicalSpace γ, t' ≤ tγ ∧ @PolishSpace γ t' ∧ IsClosed[t'] s ∧ IsOpen[t'] s := hs
[GOAL]
case intro.intro.intro.intro
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
inst✝³ : MeasurableSpace γ
hγb : BorelSpace γ
β : Type u_4
tβ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
s : Set γ
f : γ → β
t' : TopologicalSpace γ
t't : t' ≤ tγ
t'_polish : PolishSpace γ
s_closed : IsClosed s
right✝ : IsOpen s
⊢ MeasurableSet s
[PROOFSTEP]
have C : @Continuous γ γ t' tγ id := continuous_id_of_le t't
[GOAL]
case intro.intro.intro.intro
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
inst✝³ : MeasurableSpace γ
hγb : BorelSpace γ
β : Type u_4
tβ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
s : Set γ
f : γ → β
t' : TopologicalSpace γ
t't : t' ≤ tγ
t'_polish : PolishSpace γ
s_closed : IsClosed s
right✝ : IsOpen s
C : Continuous id
⊢ MeasurableSet s
[PROOFSTEP]
have E :=
  @Continuous.measurableEmbedding γ t' t'_polish (@borel γ t') (@BorelSpace.mk _ _ (borel γ) rfl) γ tγ
    (@PolishSpace.t2Space γ tγ _) _ _ id C injective_id
[GOAL]
case intro.intro.intro.intro
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
inst✝³ : MeasurableSpace γ
hγb : BorelSpace γ
β : Type u_4
tβ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
s : Set γ
f : γ → β
t' : TopologicalSpace γ
t't : t' ≤ tγ
t'_polish : PolishSpace γ
s_closed : IsClosed s
right✝ : IsOpen s
C : Continuous id
E : MeasurableEmbedding id
⊢ MeasurableSet s
[PROOFSTEP]
have M : @MeasurableSet γ (@borel γ t') s :=
  @IsClosed.measurableSet γ s t' (@borel γ t')
    (@BorelSpace.opensMeasurable γ t' (@borel γ t') (@BorelSpace.mk _ _ (borel γ) rfl)) s_closed
[GOAL]
case intro.intro.intro.intro
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
inst✝³ : MeasurableSpace γ
hγb : BorelSpace γ
β : Type u_4
tβ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
s : Set γ
f : γ → β
t' : TopologicalSpace γ
t't : t' ≤ tγ
t'_polish : PolishSpace γ
s_closed : IsClosed s
right✝ : IsOpen s
C : Continuous id
E : MeasurableEmbedding id
M : MeasurableSet s
⊢ MeasurableSet s
[PROOFSTEP]
convert E.measurableSet_image.2 M
[GOAL]
case h.e'_3
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
inst✝³ : MeasurableSpace γ
hγb : BorelSpace γ
β : Type u_4
tβ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
s : Set γ
f : γ → β
t' : TopologicalSpace γ
t't : t' ≤ tγ
t'_polish : PolishSpace γ
s_closed : IsClosed s
right✝ : IsOpen s
C : Continuous id
E : MeasurableEmbedding id
M : MeasurableSet s
⊢ s = id '' s
[PROOFSTEP]
simp only [id.def, image_id']
[GOAL]
α : Type u_1
inst✝⁷ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁶ : PolishSpace γ
inst✝⁵ : MeasurableSpace γ
hγb : BorelSpace γ
β : Type u_4
tβ : TopologicalSpace β
inst✝⁴ : T2Space β
inst✝³ : MeasurableSpace β
inst✝² : BorelSpace β
s : Set γ
f✝ : γ → β
hγ : OpensMeasurableSpace γ
inst✝¹ : Countable ι
l : Filter ι
inst✝ : IsCountablyGenerated l
f : ι → β → γ
hf : ∀ (i : ι), Measurable (f i)
⊢ MeasurableSet {x | ∃ c, Tendsto (fun n => f n x) l (𝓝 c)}
[PROOFSTEP]
rcases l.eq_or_neBot with rfl | hl
[GOAL]
case inl
α : Type u_1
inst✝⁷ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁶ : PolishSpace γ
inst✝⁵ : MeasurableSpace γ
hγb : BorelSpace γ
β : Type u_4
tβ : TopologicalSpace β
inst✝⁴ : T2Space β
inst✝³ : MeasurableSpace β
inst✝² : BorelSpace β
s : Set γ
f✝ : γ → β
hγ : OpensMeasurableSpace γ
inst✝¹ : Countable ι
f : ι → β → γ
hf : ∀ (i : ι), Measurable (f i)
inst✝ : IsCountablyGenerated ⊥
⊢ MeasurableSet {x | ∃ c, Tendsto (fun n => f n x) ⊥ (𝓝 c)}
[PROOFSTEP]
simp
[GOAL]
case inr
α : Type u_1
inst✝⁷ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁶ : PolishSpace γ
inst✝⁵ : MeasurableSpace γ
hγb : BorelSpace γ
β : Type u_4
tβ : TopologicalSpace β
inst✝⁴ : T2Space β
inst✝³ : MeasurableSpace β
inst✝² : BorelSpace β
s : Set γ
f✝ : γ → β
hγ : OpensMeasurableSpace γ
inst✝¹ : Countable ι
l : Filter ι
inst✝ : IsCountablyGenerated l
f : ι → β → γ
hf : ∀ (i : ι), Measurable (f i)
hl : NeBot l
⊢ MeasurableSet {x | ∃ c, Tendsto (fun n => f n x) l (𝓝 c)}
[PROOFSTEP]
letI := upgradePolishSpace γ
[GOAL]
case inr
α : Type u_1
inst✝⁷ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁶ : PolishSpace γ
inst✝⁵ : MeasurableSpace γ
hγb : BorelSpace γ
β : Type u_4
tβ : TopologicalSpace β
inst✝⁴ : T2Space β
inst✝³ : MeasurableSpace β
inst✝² : BorelSpace β
s : Set γ
f✝ : γ → β
hγ : OpensMeasurableSpace γ
inst✝¹ : Countable ι
l : Filter ι
inst✝ : IsCountablyGenerated l
f : ι → β → γ
hf : ∀ (i : ι), Measurable (f i)
hl : NeBot l
this : UpgradedPolishSpace γ := upgradePolishSpace γ
⊢ MeasurableSet {x | ∃ c, Tendsto (fun n => f n x) l (𝓝 c)}
[PROOFSTEP]
rcases l.exists_antitone_basis with ⟨u, hu⟩
[GOAL]
case inr.intro
α : Type u_1
inst✝⁷ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁶ : PolishSpace γ
inst✝⁵ : MeasurableSpace γ
hγb : BorelSpace γ
β : Type u_4
tβ : TopologicalSpace β
inst✝⁴ : T2Space β
inst✝³ : MeasurableSpace β
inst✝² : BorelSpace β
s : Set γ
f✝ : γ → β
hγ : OpensMeasurableSpace γ
inst✝¹ : Countable ι
l : Filter ι
inst✝ : IsCountablyGenerated l
f : ι → β → γ
hf : ∀ (i : ι), Measurable (f i)
hl : NeBot l
this : UpgradedPolishSpace γ := upgradePolishSpace γ
u : ℕ → Set ι
hu : HasAntitoneBasis l u
⊢ MeasurableSet {x | ∃ c, Tendsto (fun n => f n x) l (𝓝 c)}
[PROOFSTEP]
simp_rw [← cauchy_map_iff_exists_tendsto]
[GOAL]
case inr.intro
α : Type u_1
inst✝⁷ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁶ : PolishSpace γ
inst✝⁵ : MeasurableSpace γ
hγb : BorelSpace γ
β : Type u_4
tβ : TopologicalSpace β
inst✝⁴ : T2Space β
inst✝³ : MeasurableSpace β
inst✝² : BorelSpace β
s : Set γ
f✝ : γ → β
hγ : OpensMeasurableSpace γ
inst✝¹ : Countable ι
l : Filter ι
inst✝ : IsCountablyGenerated l
f : ι → β → γ
hf : ∀ (i : ι), Measurable (f i)
hl : NeBot l
this : UpgradedPolishSpace γ := upgradePolishSpace γ
u : ℕ → Set ι
hu : HasAntitoneBasis l u
⊢ MeasurableSet {x | Cauchy (map (fun n => f n x) l)}
[PROOFSTEP]
change MeasurableSet {x | _ ∧ _}
[GOAL]
case inr.intro
α : Type u_1
inst✝⁷ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁶ : PolishSpace γ
inst✝⁵ : MeasurableSpace γ
hγb : BorelSpace γ
β : Type u_4
tβ : TopologicalSpace β
inst✝⁴ : T2Space β
inst✝³ : MeasurableSpace β
inst✝² : BorelSpace β
s : Set γ
f✝ : γ → β
hγ : OpensMeasurableSpace γ
inst✝¹ : Countable ι
l : Filter ι
inst✝ : IsCountablyGenerated l
f : ι → β → γ
hf : ∀ (i : ι), Measurable (f i)
hl : NeBot l
this : UpgradedPolishSpace γ := upgradePolishSpace γ
u : ℕ → Set ι
hu : HasAntitoneBasis l u
⊢ MeasurableSet {x | NeBot (map (fun n => f n x) l) ∧ map (fun n => f n x) l ×ˢ map (fun n => f n x) l ≤ uniformity γ}
[PROOFSTEP]
have :
  ∀ x,
    (map (fun i => f i x) l ×ˢ map (fun i => f i x) l).HasAntitoneBasis fun n =>
      ((fun i => f i x) '' u n) ×ˢ ((fun i => f i x) '' u n) :=
  fun x => hu.map.prod hu.map
[GOAL]
case inr.intro
α : Type u_1
inst✝⁷ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁶ : PolishSpace γ
inst✝⁵ : MeasurableSpace γ
hγb : BorelSpace γ
β : Type u_4
tβ : TopologicalSpace β
inst✝⁴ : T2Space β
inst✝³ : MeasurableSpace β
inst✝² : BorelSpace β
s : Set γ
f✝ : γ → β
hγ : OpensMeasurableSpace γ
inst✝¹ : Countable ι
l : Filter ι
inst✝ : IsCountablyGenerated l
f : ι → β → γ
hf : ∀ (i : ι), Measurable (f i)
hl : NeBot l
this✝ : UpgradedPolishSpace γ := upgradePolishSpace γ
u : ℕ → Set ι
hu : HasAntitoneBasis l u
this :
  ∀ (x : β),
    HasAntitoneBasis (map (fun i => f i x) l ×ˢ map (fun i => f i x) l) fun n =>
      ((fun i => f i x) '' u n) ×ˢ ((fun i => f i x) '' u n)
⊢ MeasurableSet {x | NeBot (map (fun n => f n x) l) ∧ map (fun n => f n x) l ×ˢ map (fun n => f n x) l ≤ uniformity γ}
[PROOFSTEP]
simp_rw [and_iff_right (hl.map _),
  Filter.HasBasis.le_basis_iff (this _).toHasBasis Metric.uniformity_basis_dist_inv_nat_succ, Set.setOf_forall]
[GOAL]
case inr.intro
α : Type u_1
inst✝⁷ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁶ : PolishSpace γ
inst✝⁵ : MeasurableSpace γ
hγb : BorelSpace γ
β : Type u_4
tβ : TopologicalSpace β
inst✝⁴ : T2Space β
inst✝³ : MeasurableSpace β
inst✝² : BorelSpace β
s : Set γ
f✝ : γ → β
hγ : OpensMeasurableSpace γ
inst✝¹ : Countable ι
l : Filter ι
inst✝ : IsCountablyGenerated l
f : ι → β → γ
hf : ∀ (i : ι), Measurable (f i)
hl : NeBot l
this✝ : UpgradedPolishSpace γ := upgradePolishSpace γ
u : ℕ → Set ι
hu : HasAntitoneBasis l u
this :
  ∀ (x : β),
    HasAntitoneBasis (map (fun i => f i x) l ×ˢ map (fun i => f i x) l) fun n =>
      ((fun i => f i x) '' u n) ×ˢ ((fun i => f i x) '' u n)
⊢ MeasurableSet
    (⋂ (i : ℕ) (_ : True),
      {x |
        ∃ i_2,
          True ∧ ((fun n => f n x) '' u i_2) ×ˢ ((fun n => f n x) '' u i_2) ⊆ {p | dist p.fst p.snd < 1 / (↑i + 1)}})
[PROOFSTEP]
refine' MeasurableSet.biInter Set.countable_univ fun K _ => _
[GOAL]
case inr.intro
α : Type u_1
inst✝⁷ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁶ : PolishSpace γ
inst✝⁵ : MeasurableSpace γ
hγb : BorelSpace γ
β : Type u_4
tβ : TopologicalSpace β
inst✝⁴ : T2Space β
inst✝³ : MeasurableSpace β
inst✝² : BorelSpace β
s : Set γ
f✝ : γ → β
hγ : OpensMeasurableSpace γ
inst✝¹ : Countable ι
l : Filter ι
inst✝ : IsCountablyGenerated l
f : ι → β → γ
hf : ∀ (i : ι), Measurable (f i)
hl : NeBot l
this✝ : UpgradedPolishSpace γ := upgradePolishSpace γ
u : ℕ → Set ι
hu : HasAntitoneBasis l u
this :
  ∀ (x : β),
    HasAntitoneBasis (map (fun i => f i x) l ×ˢ map (fun i => f i x) l) fun n =>
      ((fun i => f i x) '' u n) ×ˢ ((fun i => f i x) '' u n)
K : ℕ
x✝ : K ∈ fun i => True
⊢ MeasurableSet
    {x | ∃ i, True ∧ ((fun n => f n x) '' u i) ×ˢ ((fun n => f n x) '' u i) ⊆ {p | dist p.fst p.snd < 1 / (↑K + 1)}}
[PROOFSTEP]
simp_rw [Set.setOf_exists, true_and]
[GOAL]
case inr.intro
α : Type u_1
inst✝⁷ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁶ : PolishSpace γ
inst✝⁵ : MeasurableSpace γ
hγb : BorelSpace γ
β : Type u_4
tβ : TopologicalSpace β
inst✝⁴ : T2Space β
inst✝³ : MeasurableSpace β
inst✝² : BorelSpace β
s : Set γ
f✝ : γ → β
hγ : OpensMeasurableSpace γ
inst✝¹ : Countable ι
l : Filter ι
inst✝ : IsCountablyGenerated l
f : ι → β → γ
hf : ∀ (i : ι), Measurable (f i)
hl : NeBot l
this✝ : UpgradedPolishSpace γ := upgradePolishSpace γ
u : ℕ → Set ι
hu : HasAntitoneBasis l u
this :
  ∀ (x : β),
    HasAntitoneBasis (map (fun i => f i x) l ×ˢ map (fun i => f i x) l) fun n =>
      ((fun i => f i x) '' u n) ×ˢ ((fun i => f i x) '' u n)
K : ℕ
x✝ : K ∈ fun i => True
⊢ MeasurableSet
    (⋃ (i : ℕ), {x | ((fun n => f n x) '' u i) ×ˢ ((fun n => f n x) '' u i) ⊆ {p | dist p.fst p.snd < 1 / (↑K + 1)}})
[PROOFSTEP]
refine' MeasurableSet.iUnion fun N => _
[GOAL]
case inr.intro
α : Type u_1
inst✝⁷ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁶ : PolishSpace γ
inst✝⁵ : MeasurableSpace γ
hγb : BorelSpace γ
β : Type u_4
tβ : TopologicalSpace β
inst✝⁴ : T2Space β
inst✝³ : MeasurableSpace β
inst✝² : BorelSpace β
s : Set γ
f✝ : γ → β
hγ : OpensMeasurableSpace γ
inst✝¹ : Countable ι
l : Filter ι
inst✝ : IsCountablyGenerated l
f : ι → β → γ
hf : ∀ (i : ι), Measurable (f i)
hl : NeBot l
this✝ : UpgradedPolishSpace γ := upgradePolishSpace γ
u : ℕ → Set ι
hu : HasAntitoneBasis l u
this :
  ∀ (x : β),
    HasAntitoneBasis (map (fun i => f i x) l ×ˢ map (fun i => f i x) l) fun n =>
      ((fun i => f i x) '' u n) ×ˢ ((fun i => f i x) '' u n)
K : ℕ
x✝ : K ∈ fun i => True
N : ℕ
⊢ MeasurableSet {x | ((fun n => f n x) '' u N) ×ˢ ((fun n => f n x) '' u N) ⊆ {p | dist p.fst p.snd < 1 / (↑K + 1)}}
[PROOFSTEP]
simp_rw [prod_image_image_eq, image_subset_iff, prod_subset_iff, Set.setOf_forall]
[GOAL]
case inr.intro
α : Type u_1
inst✝⁷ : TopologicalSpace α
ι : Type u_2
γ : Type u_3
tγ : TopologicalSpace γ
inst✝⁶ : PolishSpace γ
inst✝⁵ : MeasurableSpace γ
hγb : BorelSpace γ
β : Type u_4
tβ : TopologicalSpace β
inst✝⁴ : T2Space β
inst✝³ : MeasurableSpace β
inst✝² : BorelSpace β
s : Set γ
f✝ : γ → β
hγ : OpensMeasurableSpace γ
inst✝¹ : Countable ι
l : Filter ι
inst✝ : IsCountablyGenerated l
f : ι → β → γ
hf : ∀ (i : ι), Measurable (f i)
hl : NeBot l
this✝ : UpgradedPolishSpace γ := upgradePolishSpace γ
u : ℕ → Set ι
hu : HasAntitoneBasis l u
this :
  ∀ (x : β),
    HasAntitoneBasis (map (fun i => f i x) l ×ˢ map (fun i => f i x) l) fun n =>
      ((fun i => f i x) '' u n) ×ˢ ((fun i => f i x) '' u n)
K : ℕ
x✝ : K ∈ fun i => True
N : ℕ
⊢ MeasurableSet
    (⋂ (i : ι) (_ : i ∈ u N) (i_1 : ι) (_ : i_1 ∈ u N),
      {x | (i, i_1) ∈ (fun p => (f p.fst x, f p.snd x)) ⁻¹' {p | dist p.fst p.snd < 1 / (↑K + 1)}})
[PROOFSTEP]
exact
  MeasurableSet.biInter (to_countable (u N)) fun i _ =>
    MeasurableSet.biInter (to_countable (u N)) fun j _ =>
      measurableSet_lt (Measurable.dist (hf i) (hf j)) measurable_const
[GOAL]
α : Type u_1
inst✝¹ : TopologicalSpace α
ι : Type u_2
h : Countable α
inst✝ : DiscreteTopology α
⊢ PolishSpace α
[PROOFSTEP]
obtain ⟨f, hf⟩ := h.exists_injective_nat
[GOAL]
case intro
α : Type u_1
inst✝¹ : TopologicalSpace α
ι : Type u_2
h : Countable α
inst✝ : DiscreteTopology α
f : α → ℕ
hf : Injective f
⊢ PolishSpace α
[PROOFSTEP]
have : ClosedEmbedding f :=
  by
  apply closedEmbedding_of_continuous_injective_closed continuous_of_discreteTopology hf
  exact fun t _ => isClosed_discrete _
[GOAL]
α : Type u_1
inst✝¹ : TopologicalSpace α
ι : Type u_2
h : Countable α
inst✝ : DiscreteTopology α
f : α → ℕ
hf : Injective f
⊢ ClosedEmbedding f
[PROOFSTEP]
apply closedEmbedding_of_continuous_injective_closed continuous_of_discreteTopology hf
[GOAL]
α : Type u_1
inst✝¹ : TopologicalSpace α
ι : Type u_2
h : Countable α
inst✝ : DiscreteTopology α
f : α → ℕ
hf : Injective f
⊢ IsClosedMap f
[PROOFSTEP]
exact fun t _ => isClosed_discrete _
[GOAL]
case intro
α : Type u_1
inst✝¹ : TopologicalSpace α
ι : Type u_2
h : Countable α
inst✝ : DiscreteTopology α
f : α → ℕ
hf : Injective f
this : ClosedEmbedding f
⊢ PolishSpace α
[PROOFSTEP]
exact this.polishSpace
[GOAL]
α : Type u_1
inst✝⁷ : TopologicalSpace α
ι : Type u_2
β : Type u_3
inst✝⁶ : TopologicalSpace β
inst✝⁵ : PolishSpace α
inst✝⁴ : PolishSpace β
inst✝³ : MeasurableSpace α
inst✝² : MeasurableSpace β
inst✝¹ : BorelSpace α
inst✝ : BorelSpace β
h : ¬Countable α
⊢ α ≃ᵐ (ℕ → Bool)
[PROOFSTEP]
apply Nonempty.some
[GOAL]
case h
α : Type u_1
inst✝⁷ : TopologicalSpace α
ι : Type u_2
β : Type u_3
inst✝⁶ : TopologicalSpace β
inst✝⁵ : PolishSpace α
inst✝⁴ : PolishSpace β
inst✝³ : MeasurableSpace α
inst✝² : MeasurableSpace β
inst✝¹ : BorelSpace α
inst✝ : BorelSpace β
h : ¬Countable α
⊢ Nonempty (α ≃ᵐ (ℕ → Bool))
[PROOFSTEP]
obtain ⟨f, -, fcts, finj⟩ :=
  isClosed_univ.exists_nat_bool_injection_of_not_countable
    (by rwa [← countable_coe_iff, (Equiv.Set.univ _).countable_iff])
[GOAL]
α : Type u_1
inst✝⁷ : TopologicalSpace α
ι : Type u_2
β : Type u_3
inst✝⁶ : TopologicalSpace β
inst✝⁵ : PolishSpace α
inst✝⁴ : PolishSpace β
inst✝³ : MeasurableSpace α
inst✝² : MeasurableSpace β
inst✝¹ : BorelSpace α
inst✝ : BorelSpace β
h : ¬Countable α
⊢ ¬Set.Countable univ
[PROOFSTEP]
rwa [← countable_coe_iff, (Equiv.Set.univ _).countable_iff]
[GOAL]
case h.intro.intro.intro
α : Type u_1
inst✝⁷ : TopologicalSpace α
ι : Type u_2
β : Type u_3
inst✝⁶ : TopologicalSpace β
inst✝⁵ : PolishSpace α
inst✝⁴ : PolishSpace β
inst✝³ : MeasurableSpace α
inst✝² : MeasurableSpace β
inst✝¹ : BorelSpace α
inst✝ : BorelSpace β
h : ¬Countable α
f : (ℕ → Bool) → α
fcts : Continuous f
finj : Injective f
⊢ Nonempty (α ≃ᵐ (ℕ → Bool))
[PROOFSTEP]
obtain ⟨g, gmeas, ginj⟩ := MeasurableSpace.measurable_injection_nat_bool_of_countablyGenerated α
[GOAL]
case h.intro.intro.intro.intro.intro
α : Type u_1
inst✝⁷ : TopologicalSpace α
ι : Type u_2
β : Type u_3
inst✝⁶ : TopologicalSpace β
inst✝⁵ : PolishSpace α
inst✝⁴ : PolishSpace β
inst✝³ : MeasurableSpace α
inst✝² : MeasurableSpace β
inst✝¹ : BorelSpace α
inst✝ : BorelSpace β
h : ¬Countable α
f : (ℕ → Bool) → α
fcts : Continuous f
finj : Injective f
g : α → ℕ → Bool
gmeas : Measurable g
ginj : Injective g
⊢ Nonempty (α ≃ᵐ (ℕ → Bool))
[PROOFSTEP]
exact ⟨borelSchroederBernstein gmeas ginj fcts.measurable finj⟩
[GOAL]
α : Type u_1
inst✝⁷ : TopologicalSpace α
ι : Type u_2
β : Type u_3
inst✝⁶ : TopologicalSpace β
inst✝⁵ : PolishSpace α
inst✝⁴ : PolishSpace β
inst✝³ : MeasurableSpace α
inst✝² : MeasurableSpace β
inst✝¹ : BorelSpace α
inst✝ : BorelSpace β
e : α ≃ β
⊢ α ≃ᵐ β
[PROOFSTEP]
by_cases h : Countable α
[GOAL]
case pos
α : Type u_1
inst✝⁷ : TopologicalSpace α
ι : Type u_2
β : Type u_3
inst✝⁶ : TopologicalSpace β
inst✝⁵ : PolishSpace α
inst✝⁴ : PolishSpace β
inst✝³ : MeasurableSpace α
inst✝² : MeasurableSpace β
inst✝¹ : BorelSpace α
inst✝ : BorelSpace β
e : α ≃ β
h : Countable α
⊢ α ≃ᵐ β
[PROOFSTEP]
letI := Countable.of_equiv α e
[GOAL]
case pos
α : Type u_1
inst✝⁷ : TopologicalSpace α
ι : Type u_2
β : Type u_3
inst✝⁶ : TopologicalSpace β
inst✝⁵ : PolishSpace α
inst✝⁴ : PolishSpace β
inst✝³ : MeasurableSpace α
inst✝² : MeasurableSpace β
inst✝¹ : BorelSpace α
inst✝ : BorelSpace β
e : α ≃ β
h : Countable α
this : Countable β := Countable.of_equiv α e
⊢ α ≃ᵐ β
[PROOFSTEP]
refine ⟨e, ?_, ?_⟩
[GOAL]
case pos.refine_1
α : Type u_1
inst✝⁷ : TopologicalSpace α
ι : Type u_2
β : Type u_3
inst✝⁶ : TopologicalSpace β
inst✝⁵ : PolishSpace α
inst✝⁴ : PolishSpace β
inst✝³ : MeasurableSpace α
inst✝² : MeasurableSpace β
inst✝¹ : BorelSpace α
inst✝ : BorelSpace β
e : α ≃ β
h : Countable α
this : Countable β := Countable.of_equiv α e
⊢ Measurable ↑e
[PROOFSTEP]
apply measurable_of_countable
[GOAL]
case pos.refine_2
α : Type u_1
inst✝⁷ : TopologicalSpace α
ι : Type u_2
β : Type u_3
inst✝⁶ : TopologicalSpace β
inst✝⁵ : PolishSpace α
inst✝⁴ : PolishSpace β
inst✝³ : MeasurableSpace α
inst✝² : MeasurableSpace β
inst✝¹ : BorelSpace α
inst✝ : BorelSpace β
e : α ≃ β
h : Countable α
this : Countable β := Countable.of_equiv α e
⊢ Measurable ↑e.symm
[PROOFSTEP]
apply measurable_of_countable
[GOAL]
case neg
α : Type u_1
inst✝⁷ : TopologicalSpace α
ι : Type u_2
β : Type u_3
inst✝⁶ : TopologicalSpace β
inst✝⁵ : PolishSpace α
inst✝⁴ : PolishSpace β
inst✝³ : MeasurableSpace α
inst✝² : MeasurableSpace β
inst✝¹ : BorelSpace α
inst✝ : BorelSpace β
e : α ≃ β
h : ¬Countable α
⊢ α ≃ᵐ β
[PROOFSTEP]
refine' measurableEquivOfNotCountable h _
[GOAL]
case neg
α : Type u_1
inst✝⁷ : TopologicalSpace α
ι : Type u_2
β : Type u_3
inst✝⁶ : TopologicalSpace β
inst✝⁵ : PolishSpace α
inst✝⁴ : PolishSpace β
inst✝³ : MeasurableSpace α
inst✝² : MeasurableSpace β
inst✝¹ : BorelSpace α
inst✝ : BorelSpace β
e : α ≃ β
h : ¬Countable α
⊢ ¬Countable β
[PROOFSTEP]
rwa [e.countable_iff] at h
[GOAL]
α : Type u_1
inst✝⁴ : TopologicalSpace α
ι : Type u_2
inst✝³ : MeasurableSpace α
inst✝² : PolishSpace α
inst✝¹ : BorelSpace α
inst✝ : Finite α
⊢ ∃ n, Nonempty (α ≃ᵐ ↑(range fun x => ↑↑x))
[PROOFSTEP]
obtain ⟨n, ⟨n_equiv⟩⟩ := Finite.exists_equiv_fin α
[GOAL]
case intro.intro
α : Type u_1
inst✝⁴ : TopologicalSpace α
ι : Type u_2
inst✝³ : MeasurableSpace α
inst✝² : PolishSpace α
inst✝¹ : BorelSpace α
inst✝ : Finite α
n : ℕ
n_equiv : α ≃ Fin n
⊢ ∃ n, Nonempty (α ≃ᵐ ↑(range fun x => ↑↑x))
[PROOFSTEP]
refine' ⟨n, ⟨PolishSpace.Equiv.measurableEquiv (n_equiv.trans _)⟩⟩
[GOAL]
case intro.intro
α : Type u_1
inst✝⁴ : TopologicalSpace α
ι : Type u_2
inst✝³ : MeasurableSpace α
inst✝² : PolishSpace α
inst✝¹ : BorelSpace α
inst✝ : Finite α
n : ℕ
n_equiv : α ≃ Fin n
⊢ Fin n ≃ ↑(range fun x => ↑↑x)
[PROOFSTEP]
exact Equiv.ofInjective _ (Nat.cast_injective.comp Fin.val_injective)
[GOAL]
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
inst✝⁴ : MeasurableSpace α
inst✝³ : PolishSpace α
inst✝² : BorelSpace α
inst✝¹ : Infinite α
inst✝ : Countable α
⊢ Nonempty (α ≃ᵐ ↑(range Nat.cast))
[PROOFSTEP]
have : PolishSpace (range ((↑) : ℕ → ℝ)) := Nat.closedEmbedding_coe_real.isClosedMap.closed_range.polishSpace
[GOAL]
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
inst✝⁴ : MeasurableSpace α
inst✝³ : PolishSpace α
inst✝² : BorelSpace α
inst✝¹ : Infinite α
inst✝ : Countable α
this : PolishSpace ↑(range Nat.cast)
⊢ Nonempty (α ≃ᵐ ↑(range Nat.cast))
[PROOFSTEP]
refine' ⟨PolishSpace.Equiv.measurableEquiv _⟩
[GOAL]
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
inst✝⁴ : MeasurableSpace α
inst✝³ : PolishSpace α
inst✝² : BorelSpace α
inst✝¹ : Infinite α
inst✝ : Countable α
this : PolishSpace ↑(range Nat.cast)
⊢ α ≃ ↑(range Nat.cast)
[PROOFSTEP]
refine' (nonempty_equiv_of_countable.some : α ≃ ℕ).trans _
[GOAL]
α : Type u_1
inst✝⁵ : TopologicalSpace α
ι : Type u_2
inst✝⁴ : MeasurableSpace α
inst✝³ : PolishSpace α
inst✝² : BorelSpace α
inst✝¹ : Infinite α
inst✝ : Countable α
this : PolishSpace ↑(range Nat.cast)
⊢ ℕ ≃ ↑(range Nat.cast)
[PROOFSTEP]
exact Equiv.ofInjective ((↑) : ℕ → ℝ) Nat.cast_injective
[GOAL]
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : MeasurableSpace α
inst✝¹ : PolishSpace α
inst✝ : BorelSpace α
⊢ ∃ s, MeasurableSet s ∧ Nonempty (α ≃ᵐ ↑s)
[PROOFSTEP]
by_cases hα : Countable α
[GOAL]
case pos
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : MeasurableSpace α
inst✝¹ : PolishSpace α
inst✝ : BorelSpace α
hα : Countable α
⊢ ∃ s, MeasurableSet s ∧ Nonempty (α ≃ᵐ ↑s)
[PROOFSTEP]
cases finite_or_infinite α
[GOAL]
case pos.inl
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : MeasurableSpace α
inst✝¹ : PolishSpace α
inst✝ : BorelSpace α
hα : Countable α
h✝ : Finite α
⊢ ∃ s, MeasurableSet s ∧ Nonempty (α ≃ᵐ ↑s)
[PROOFSTEP]
obtain ⟨n, h_nonempty_equiv⟩ := exists_nat_measurableEquiv_range_coe_fin_of_finite α
[GOAL]
case pos.inl.intro
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : MeasurableSpace α
inst✝¹ : PolishSpace α
inst✝ : BorelSpace α
hα : Countable α
h✝ : Finite α
n : ℕ
h_nonempty_equiv : Nonempty (α ≃ᵐ ↑(range fun x => ↑↑x))
⊢ ∃ s, MeasurableSet s ∧ Nonempty (α ≃ᵐ ↑s)
[PROOFSTEP]
refine' ⟨_, _, h_nonempty_equiv⟩
[GOAL]
case pos.inl.intro
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : MeasurableSpace α
inst✝¹ : PolishSpace α
inst✝ : BorelSpace α
hα : Countable α
h✝ : Finite α
n : ℕ
h_nonempty_equiv : Nonempty (α ≃ᵐ ↑(range fun x => ↑↑x))
⊢ MeasurableSet (range fun x => ↑↑x)
[PROOFSTEP]
letI : MeasurableSpace (Fin n) := borel (Fin n)
[GOAL]
case pos.inl.intro
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : MeasurableSpace α
inst✝¹ : PolishSpace α
inst✝ : BorelSpace α
hα : Countable α
h✝ : Finite α
n : ℕ
h_nonempty_equiv : Nonempty (α ≃ᵐ ↑(range fun x => ↑↑x))
this : MeasurableSpace (Fin n) := borel (Fin n)
⊢ MeasurableSet (range fun x => ↑↑x)
[PROOFSTEP]
haveI : BorelSpace (Fin n) := ⟨rfl⟩
[GOAL]
case pos.inl.intro
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : MeasurableSpace α
inst✝¹ : PolishSpace α
inst✝ : BorelSpace α
hα : Countable α
h✝ : Finite α
n : ℕ
h_nonempty_equiv : Nonempty (α ≃ᵐ ↑(range fun x => ↑↑x))
this✝ : MeasurableSpace (Fin n) := borel (Fin n)
this : BorelSpace (Fin n)
⊢ MeasurableSet (range fun x => ↑↑x)
[PROOFSTEP]
refine' MeasurableEmbedding.measurableSet_range _
[GOAL]
case pos.inl.intro.refine'_1
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : MeasurableSpace α
inst✝¹ : PolishSpace α
inst✝ : BorelSpace α
hα : Countable α
h✝ : Finite α
n : ℕ
h_nonempty_equiv : Nonempty (α ≃ᵐ ↑(range fun x => ↑↑x))
this✝ : MeasurableSpace (Fin n) := borel (Fin n)
this : BorelSpace (Fin n)
⊢ MeasurableSpace (Fin n)
[PROOFSTEP]
infer_instance
[GOAL]
case pos.inl.intro.refine'_2
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : MeasurableSpace α
inst✝¹ : PolishSpace α
inst✝ : BorelSpace α
hα : Countable α
h✝ : Finite α
n : ℕ
h_nonempty_equiv : Nonempty (α ≃ᵐ ↑(range fun x => ↑↑x))
this✝ : MeasurableSpace (Fin n) := borel (Fin n)
this : BorelSpace (Fin n)
⊢ MeasurableEmbedding fun x => ↑↑x
[PROOFSTEP]
exact continuous_of_discreteTopology.measurableEmbedding (Nat.cast_injective.comp Fin.val_injective)
[GOAL]
case pos.inr
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : MeasurableSpace α
inst✝¹ : PolishSpace α
inst✝ : BorelSpace α
hα : Countable α
h✝ : Infinite α
⊢ ∃ s, MeasurableSet s ∧ Nonempty (α ≃ᵐ ↑s)
[PROOFSTEP]
refine' ⟨_, _, measurableEquiv_range_coe_nat_of_infinite_of_countable α⟩
[GOAL]
case pos.inr
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : MeasurableSpace α
inst✝¹ : PolishSpace α
inst✝ : BorelSpace α
hα : Countable α
h✝ : Infinite α
⊢ MeasurableSet (range Nat.cast)
[PROOFSTEP]
refine' MeasurableEmbedding.measurableSet_range _
[GOAL]
case pos.inr.refine'_1
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : MeasurableSpace α
inst✝¹ : PolishSpace α
inst✝ : BorelSpace α
hα : Countable α
h✝ : Infinite α
⊢ MeasurableSpace ℕ
[PROOFSTEP]
infer_instance
[GOAL]
case pos.inr.refine'_2
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : MeasurableSpace α
inst✝¹ : PolishSpace α
inst✝ : BorelSpace α
hα : Countable α
h✝ : Infinite α
⊢ MeasurableEmbedding Nat.cast
[PROOFSTEP]
exact continuous_of_discreteTopology.measurableEmbedding Nat.cast_injective
[GOAL]
case neg
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : MeasurableSpace α
inst✝¹ : PolishSpace α
inst✝ : BorelSpace α
hα : ¬Countable α
⊢ ∃ s, MeasurableSet s ∧ Nonempty (α ≃ᵐ ↑s)
[PROOFSTEP]
refine' ⟨univ, MeasurableSet.univ, ⟨(PolishSpace.measurableEquivOfNotCountable hα _ : α ≃ᵐ (univ : Set ℝ))⟩⟩
[GOAL]
case neg
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : MeasurableSpace α
inst✝¹ : PolishSpace α
inst✝ : BorelSpace α
hα : ¬Countable α
⊢ ¬Countable ↑univ
[PROOFSTEP]
rw [countable_coe_iff]
[GOAL]
case neg
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : MeasurableSpace α
inst✝¹ : PolishSpace α
inst✝ : BorelSpace α
hα : ¬Countable α
⊢ ¬Set.Countable univ
[PROOFSTEP]
exact Cardinal.not_countable_real
[GOAL]
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : MeasurableSpace α
inst✝¹ : PolishSpace α
inst✝ : BorelSpace α
⊢ ∃ f, MeasurableEmbedding f
[PROOFSTEP]
obtain ⟨s, hs, ⟨e⟩⟩ := exists_subset_real_measurableEquiv α
[GOAL]
case intro.intro.intro
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type u_2
inst✝² : MeasurableSpace α
inst✝¹ : PolishSpace α
inst✝ : BorelSpace α
s : Set ℝ
hs : MeasurableSet s
e : α ≃ᵐ ↑s
⊢ ∃ f, MeasurableEmbedding f
[PROOFSTEP]
exact ⟨(↑) ∘ e, (MeasurableEmbedding.subtype_coe hs).comp e.measurableEmbedding⟩