[GOAL]
α : Type u
β : Type v
inst✝ : UniformSpace α
ι : Sort u_1
p : ι → Prop
s : ι → Set (α × α)
h : HasBasis (𝓤 α) p s
f : Filter α
⊢ (∀ (i' : ι), p i' → ∃ i, i ∈ f ∧ id i ×ˢ id i ⊆ s i') ↔
    ∀ (i : ι), p i → ∃ t, t ∈ f ∧ ∀ (x : α), x ∈ t → ∀ (y : α), y ∈ t → (x, y) ∈ s i
[PROOFSTEP]
simp only [subset_def, Prod.forall, mem_prod_eq, and_imp, id, ball_mem_comm]
[GOAL]
α : Type u
β : Type v
inst✝ : UniformSpace α
f : Filter α
⊢ (NeBot f ∧ ∀ (s : Set (α × α)), s ∈ 𝓤 α → ∃ t, t ∈ f ∧ ∀ (x : α), x ∈ t → ∀ (y : α), y ∈ t → (x, y) ∈ s) ↔
    NeBot f ∧ ∀ (s : Set (α × α)), s ∈ 𝓤 α → ∃ t, t ∈ f ∧ t ×ˢ t ⊆ s
[PROOFSTEP]
simp only [subset_def, Prod.forall, mem_prod_eq, and_imp, id, ball_mem_comm]
[GOAL]
α : Type u
β : Type v
inst✝ : UniformSpace α
l : Filter α
h : Cauchy l
⊢ Cauchy ↑(Ultrafilter.of l)
[PROOFSTEP]
haveI := h.1
[GOAL]
α : Type u
β : Type v
inst✝ : UniformSpace α
l : Filter α
h : Cauchy l
this : NeBot l
⊢ Cauchy ↑(Ultrafilter.of l)
[PROOFSTEP]
have := Ultrafilter.of_le l
[GOAL]
α : Type u
β : Type v
inst✝ : UniformSpace α
l : Filter α
h : Cauchy l
this✝ : NeBot l
this : ↑(Ultrafilter.of l) ≤ l
⊢ Cauchy ↑(Ultrafilter.of l)
[PROOFSTEP]
exact ⟨Ultrafilter.neBot _, (Filter.prod_mono this this).trans h.2⟩
[GOAL]
α : Type u
β : Type v
inst✝ : UniformSpace α
l : Filter β
f : β → α
⊢ Cauchy (map f l) ↔ NeBot l ∧ Tendsto (fun p => (f p.fst, f p.snd)) (l ×ˢ l) (𝓤 α)
[PROOFSTEP]
rw [Cauchy, map_neBot_iff, prod_map_map_eq, Tendsto]
[GOAL]
α : Type u
β : Type v
inst✝¹ : UniformSpace α
inst✝ : UniformSpace β
f : Filter α
g : Filter β
hf : Cauchy f
hg : Cauchy g
⊢ Cauchy (f ×ˢ g)
[PROOFSTEP]
refine' ⟨hf.1.prod hg.1, _⟩
[GOAL]
α : Type u
β : Type v
inst✝¹ : UniformSpace α
inst✝ : UniformSpace β
f : Filter α
g : Filter β
hf : Cauchy f
hg : Cauchy g
⊢ (f ×ˢ g) ×ˢ f ×ˢ g ≤ 𝓤 (α × β)
[PROOFSTEP]
simp only [uniformity_prod, le_inf_iff, ← map_le_iff_le_comap, ← prod_map_map_eq]
[GOAL]
α : Type u
β : Type v
inst✝¹ : UniformSpace α
inst✝ : UniformSpace β
f : Filter α
g : Filter β
hf : Cauchy f
hg : Cauchy g
⊢ map Prod.fst (f ×ˢ g) ×ˢ map Prod.fst (f ×ˢ g) ≤ 𝓤 α ∧ map Prod.snd (f ×ˢ g) ×ˢ map Prod.snd (f ×ˢ g) ≤ 𝓤 β
[PROOFSTEP]
exact ⟨le_trans (prod_mono tendsto_fst tendsto_fst) hf.2, le_trans (prod_mono tendsto_snd tendsto_snd) hg.2⟩
[GOAL]
α : Type u
β : Type v
inst✝ : UniformSpace α
f : Filter α
x : α
adhs : ∀ (s : Set (α × α)), s ∈ 𝓤 α → ∃ t, t ∈ f ∧ t ×ˢ t ⊆ s ∧ ∃ y, (x, y) ∈ s ∧ y ∈ t
⊢ f ≤ 𝓝 x
[PROOFSTEP]
intro s hs
[GOAL]
α : Type u
β : Type v
inst✝ : UniformSpace α
f : Filter α
x : α
adhs : ∀ (s : Set (α × α)), s ∈ 𝓤 α → ∃ t, t ∈ f ∧ t ×ˢ t ⊆ s ∧ ∃ y, (x, y) ∈ s ∧ y ∈ t
s : Set α
hs : s ∈ 𝓝 x
⊢ s ∈ f
[PROOFSTEP]
rcases comp_mem_uniformity_sets (mem_nhds_uniformity_iff_right.1 hs) with
  ⟨U, U_mem, hU⟩
    -- Take a set `t ∈ f`, `t × t ⊆ U`, and a point `y ∈ t` such that `(x, y) ∈ U`
[GOAL]
case intro.intro
α : Type u
β : Type v
inst✝ : UniformSpace α
f : Filter α
x : α
adhs : ∀ (s : Set (α × α)), s ∈ 𝓤 α → ∃ t, t ∈ f ∧ t ×ˢ t ⊆ s ∧ ∃ y, (x, y) ∈ s ∧ y ∈ t
s : Set α
hs : s ∈ 𝓝 x
U : Set (α × α)
U_mem : U ∈ 𝓤 α
hU : U ○ U ⊆ {p | p.fst = x → p.snd ∈ s}
⊢ s ∈ f
[PROOFSTEP]
rcases adhs U U_mem with ⟨t, t_mem, ht, y, hxy, hy⟩
[GOAL]
case intro.intro.intro.intro.intro.intro.intro
α : Type u
β : Type v
inst✝ : UniformSpace α
f : Filter α
x : α
adhs : ∀ (s : Set (α × α)), s ∈ 𝓤 α → ∃ t, t ∈ f ∧ t ×ˢ t ⊆ s ∧ ∃ y, (x, y) ∈ s ∧ y ∈ t
s : Set α
hs : s ∈ 𝓝 x
U : Set (α × α)
U_mem : U ∈ 𝓤 α
hU : U ○ U ⊆ {p | p.fst = x → p.snd ∈ s}
t : Set α
t_mem : t ∈ f
ht : t ×ˢ t ⊆ U
y : α
hxy : (x, y) ∈ U
hy : y ∈ t
⊢ s ∈ f
[PROOFSTEP]
apply mem_of_superset t_mem
[GOAL]
case intro.intro.intro.intro.intro.intro.intro
α : Type u
β : Type v
inst✝ : UniformSpace α
f : Filter α
x : α
adhs : ∀ (s : Set (α × α)), s ∈ 𝓤 α → ∃ t, t ∈ f ∧ t ×ˢ t ⊆ s ∧ ∃ y, (x, y) ∈ s ∧ y ∈ t
s : Set α
hs : s ∈ 𝓝 x
U : Set (α × α)
U_mem : U ∈ 𝓤 α
hU : U ○ U ⊆ {p | p.fst = x → p.snd ∈ s}
t : Set α
t_mem : t ∈ f
ht : t ×ˢ t ⊆ U
y : α
hxy : (x, y) ∈ U
hy : y ∈ t
⊢ t ⊆ s
[PROOFSTEP]
exact fun z hz => hU (prod_mk_mem_compRel hxy (ht <| mk_mem_prod hy hz)) rfl
[GOAL]
α : Type u
β : Type v
inst✝ : UniformSpace α
f : Filter α
x : α
hf : Cauchy f
adhs : ClusterPt x f
s : Set (α × α)
hs : s ∈ 𝓤 α
⊢ ∃ t, t ∈ f ∧ t ×ˢ t ⊆ s ∧ ∃ y, (x, y) ∈ s ∧ y ∈ t
[PROOFSTEP]
obtain ⟨t, t_mem, ht⟩ : ∃ t ∈ f, t ×ˢ t ⊆ s := (cauchy_iff.1 hf).2 s hs
[GOAL]
case intro.intro
α : Type u
β : Type v
inst✝ : UniformSpace α
f : Filter α
x : α
hf : Cauchy f
adhs : ClusterPt x f
s : Set (α × α)
hs : s ∈ 𝓤 α
t : Set α
t_mem : t ∈ f
ht : t ×ˢ t ⊆ s
⊢ ∃ t, t ∈ f ∧ t ×ˢ t ⊆ s ∧ ∃ y, (x, y) ∈ s ∧ y ∈ t
[PROOFSTEP]
use t, t_mem, ht
[GOAL]
case right
α : Type u
β : Type v
inst✝ : UniformSpace α
f : Filter α
x : α
hf : Cauchy f
adhs : ClusterPt x f
s : Set (α × α)
hs : s ∈ 𝓤 α
t : Set α
t_mem : t ∈ f
ht : t ×ˢ t ⊆ s
⊢ ∃ y, (x, y) ∈ s ∧ y ∈ t
[PROOFSTEP]
exact forall_mem_nonempty_iff_neBot.2 adhs _ (inter_mem_inf (mem_nhds_left x hs) t_mem)
[GOAL]
α : Type u
β : Type v
inst✝¹ : UniformSpace α
inst✝ : SemilatticeSup β
u : β → α
h : CauchySeq u
⊢ Tendsto (Prod.map u u) atTop (𝓤 α)
[PROOFSTEP]
simpa only [Tendsto, prod_map_map_eq', prod_atTop_atTop_eq] using h.right
[GOAL]
α : Type u
β✝ : Type v
inst✝¹ : UniformSpace α
β : Type u_1
inst✝ : SemilatticeSup β
u : β → α
h : CauchySeq u
V : Set (α × α)
hV : V ∈ 𝓤 α
⊢ ∃ k₀, ∀ (i j : β), k₀ ≤ i → k₀ ≤ j → (u i, u j) ∈ V
[PROOFSTEP]
haveI := h.nonempty
[GOAL]
α : Type u
β✝ : Type v
inst✝¹ : UniformSpace α
β : Type u_1
inst✝ : SemilatticeSup β
u : β → α
h : CauchySeq u
V : Set (α × α)
hV : V ∈ 𝓤 α
this : Nonempty β
⊢ ∃ k₀, ∀ (i j : β), k₀ ≤ i → k₀ ≤ j → (u i, u j) ∈ V
[PROOFSTEP]
have := h.tendsto_uniformity
[GOAL]
α : Type u
β✝ : Type v
inst✝¹ : UniformSpace α
β : Type u_1
inst✝ : SemilatticeSup β
u : β → α
h : CauchySeq u
V : Set (α × α)
hV : V ∈ 𝓤 α
this✝ : Nonempty β
this : Tendsto (Prod.map u u) atTop (𝓤 α)
⊢ ∃ k₀, ∀ (i j : β), k₀ ≤ i → k₀ ≤ j → (u i, u j) ∈ V
[PROOFSTEP]
rw [← prod_atTop_atTop_eq] at this 
[GOAL]
α : Type u
β✝ : Type v
inst✝¹ : UniformSpace α
β : Type u_1
inst✝ : SemilatticeSup β
u : β → α
h : CauchySeq u
V : Set (α × α)
hV : V ∈ 𝓤 α
this✝ : Nonempty β
this : Tendsto (Prod.map u u) (atTop ×ˢ atTop) (𝓤 α)
⊢ ∃ k₀, ∀ (i j : β), k₀ ≤ i → k₀ ≤ j → (u i, u j) ∈ V
[PROOFSTEP]
simpa [MapsTo] using atTop_basis.prod_self.tendsto_left_iff.1 this V hV
[GOAL]
α : Type u
β : Type v
inst✝² : UniformSpace α
inst✝¹ : Nonempty β
inst✝ : SemilatticeSup β
u : β → α
⊢ Tendsto (fun p => (u p.fst, u p.snd)) (atTop ×ˢ atTop) (𝓤 α) ↔ Tendsto (Prod.map u u) atTop (𝓤 α)
[PROOFSTEP]
simp only [prod_atTop_atTop_eq, Prod.map_def]
[GOAL]
α : Type u
β : Type v
inst✝ : UniformSpace α
f : ℕ → ℕ
hf : Bijective f
u : ℕ → α
⊢ CauchySeq (u ∘ f) ↔ CauchySeq u
[PROOFSTEP]
refine' ⟨fun H => _, fun H => H.comp_injective hf.injective⟩
[GOAL]
α : Type u
β : Type v
inst✝ : UniformSpace α
f : ℕ → ℕ
hf : Bijective f
u : ℕ → α
H : CauchySeq (u ∘ f)
⊢ CauchySeq u
[PROOFSTEP]
lift f to ℕ ≃ ℕ using hf
[GOAL]
case intro
α : Type u
β : Type v
inst✝ : UniformSpace α
u : ℕ → α
f : ℕ ≃ ℕ
H : CauchySeq (u ∘ ↑f)
⊢ CauchySeq u
[PROOFSTEP]
simpa only [(· ∘ ·), f.apply_symm_apply] using H.comp_injective f.symm.injective
[GOAL]
α : Type u
β : Type v
inst✝ : UniformSpace α
V : ℕ → Set (α × α)
hV : ∀ (n : ℕ), V n ∈ 𝓤 α
u : ℕ → α
hu : CauchySeq u
f g : ℕ → ℕ
hf : Tendsto f atTop atTop
hg : Tendsto g atTop atTop
⊢ ∃ φ, StrictMono φ ∧ ∀ (n : ℕ), ((u ∘ f ∘ φ) n, (u ∘ g ∘ φ) n) ∈ V n
[PROOFSTEP]
rw [cauchySeq_iff_tendsto] at hu 
[GOAL]
α : Type u
β : Type v
inst✝ : UniformSpace α
V : ℕ → Set (α × α)
hV : ∀ (n : ℕ), V n ∈ 𝓤 α
u : ℕ → α
hu : Tendsto (Prod.map u u) atTop (𝓤 α)
f g : ℕ → ℕ
hf : Tendsto f atTop atTop
hg : Tendsto g atTop atTop
⊢ ∃ φ, StrictMono φ ∧ ∀ (n : ℕ), ((u ∘ f ∘ φ) n, (u ∘ g ∘ φ) n) ∈ V n
[PROOFSTEP]
exact ((hu.comp <| hf.prod_atTop hg).comp tendsto_atTop_diagonal).subseq_mem hV
[GOAL]
α : Type u
β : Type v
inst✝ : UniformSpace α
u : ℕ → α
⊢ CauchySeq u ↔ ∀ (V : Set (α × α)), V ∈ 𝓤 α → ∃ N, ∀ (k : ℕ), k ≥ N → ∀ (l : ℕ), l ≥ N → (u k, u l) ∈ V
[PROOFSTEP]
simp only [cauchySeq_iff', Filter.eventually_atTop_prod_self', mem_preimage, Prod_map]
[GOAL]
α : Type u
β : Type v
inst✝³ : UniformSpace α
γ : Type u_1
δ : Type u_2
inst✝² : UniformSpace β
inst✝¹ : SemilatticeSup γ
inst✝ : SemilatticeSup δ
u : γ → α
v : δ → β
hu : CauchySeq u
hv : CauchySeq v
⊢ CauchySeq (Prod.map u v)
[PROOFSTEP]
simpa only [CauchySeq, prod_map_map_eq', prod_atTop_atTop_eq] using hu.prod hv
[GOAL]
α : Type u
β : Type v
inst✝ : UniformSpace α
V : ℕ → Set (α × α)
hV : ∀ (n : ℕ), V n ∈ 𝓤 α
u : ℕ → α
hu : CauchySeq u
⊢ ∃ φ, StrictMono φ ∧ ∀ (n : ℕ), (u (φ (n + 1)), u (φ n)) ∈ V n
[PROOFSTEP]
have : ∀ n, ∃ N, ∀ k ≥ N, ∀ l ≥ k, (u l, u k) ∈ V n := fun n =>
  by
  rw [cauchySeq_iff] at hu 
  rcases hu _ (hV n) with ⟨N, H⟩
  exact ⟨N, fun k hk l hl => H _ (le_trans hk hl) _ hk⟩
[GOAL]
α : Type u
β : Type v
inst✝ : UniformSpace α
V : ℕ → Set (α × α)
hV : ∀ (n : ℕ), V n ∈ 𝓤 α
u : ℕ → α
hu : CauchySeq u
n : ℕ
⊢ ∃ N, ∀ (k : ℕ), k ≥ N → ∀ (l : ℕ), l ≥ k → (u l, u k) ∈ V n
[PROOFSTEP]
rw [cauchySeq_iff] at hu 
[GOAL]
α : Type u
β : Type v
inst✝ : UniformSpace α
V : ℕ → Set (α × α)
hV : ∀ (n : ℕ), V n ∈ 𝓤 α
u : ℕ → α
hu : ∀ (V : Set (α × α)), V ∈ 𝓤 α → ∃ N, ∀ (k : ℕ), k ≥ N → ∀ (l : ℕ), l ≥ N → (u k, u l) ∈ V
n : ℕ
⊢ ∃ N, ∀ (k : ℕ), k ≥ N → ∀ (l : ℕ), l ≥ k → (u l, u k) ∈ V n
[PROOFSTEP]
rcases hu _ (hV n) with ⟨N, H⟩
[GOAL]
case intro
α : Type u
β : Type v
inst✝ : UniformSpace α
V : ℕ → Set (α × α)
hV : ∀ (n : ℕ), V n ∈ 𝓤 α
u : ℕ → α
hu : ∀ (V : Set (α × α)), V ∈ 𝓤 α → ∃ N, ∀ (k : ℕ), k ≥ N → ∀ (l : ℕ), l ≥ N → (u k, u l) ∈ V
n N : ℕ
H : ∀ (k : ℕ), k ≥ N → ∀ (l : ℕ), l ≥ N → (u k, u l) ∈ V n
⊢ ∃ N, ∀ (k : ℕ), k ≥ N → ∀ (l : ℕ), l ≥ k → (u l, u k) ∈ V n
[PROOFSTEP]
exact ⟨N, fun k hk l hl => H _ (le_trans hk hl) _ hk⟩
[GOAL]
α : Type u
β : Type v
inst✝ : UniformSpace α
V : ℕ → Set (α × α)
hV : ∀ (n : ℕ), V n ∈ 𝓤 α
u : ℕ → α
hu : CauchySeq u
this : ∀ (n : ℕ), ∃ N, ∀ (k : ℕ), k ≥ N → ∀ (l : ℕ), l ≥ k → (u l, u k) ∈ V n
⊢ ∃ φ, StrictMono φ ∧ ∀ (n : ℕ), (u (φ (n + 1)), u (φ n)) ∈ V n
[PROOFSTEP]
obtain ⟨φ : ℕ → ℕ, φ_extr : StrictMono φ, hφ : ∀ n, ∀ l ≥ φ n, (u l, u <| φ n) ∈ V n⟩ :=
  extraction_forall_of_eventually' this
[GOAL]
case intro.intro
α : Type u
β : Type v
inst✝ : UniformSpace α
V : ℕ → Set (α × α)
hV : ∀ (n : ℕ), V n ∈ 𝓤 α
u : ℕ → α
hu : CauchySeq u
this : ∀ (n : ℕ), ∃ N, ∀ (k : ℕ), k ≥ N → ∀ (l : ℕ), l ≥ k → (u l, u k) ∈ V n
φ : ℕ → ℕ
φ_extr : StrictMono φ
hφ : ∀ (n l : ℕ), l ≥ φ n → (u l, u (φ n)) ∈ V n
⊢ ∃ φ, StrictMono φ ∧ ∀ (n : ℕ), (u (φ (n + 1)), u (φ n)) ∈ V n
[PROOFSTEP]
exact ⟨φ, φ_extr, fun n => hφ _ _ (φ_extr <| lt_add_one n).le⟩
[GOAL]
α : Type u
β : Type v
inst✝ : UniformSpace α
V : ℕ → Set (α × α)
hV : ∀ (n : ℕ), V n ∈ 𝓤 α
u : ℕ → α
a : α
hu : Tendsto u atTop (𝓝 a)
⊢ ∃ φ, StrictMono φ ∧ (u (φ 0), a) ∈ V 0 ∧ ∀ (n : ℕ), (u (φ (n + 1)), u (φ n)) ∈ V (n + 1)
[PROOFSTEP]
rcases mem_atTop_sets.1 (hu (ball_mem_nhds a (symm_le_uniformity <| hV 0))) with ⟨n, hn⟩
[GOAL]
case intro
α : Type u
β : Type v
inst✝ : UniformSpace α
V : ℕ → Set (α × α)
hV : ∀ (n : ℕ), V n ∈ 𝓤 α
u : ℕ → α
a : α
hu : Tendsto u atTop (𝓝 a)
n : ℕ
hn : ∀ (b : ℕ), b ≥ n → b ∈ u ⁻¹' ball a (Prod.swap ⁻¹' V 0)
⊢ ∃ φ, StrictMono φ ∧ (u (φ 0), a) ∈ V 0 ∧ ∀ (n : ℕ), (u (φ (n + 1)), u (φ n)) ∈ V (n + 1)
[PROOFSTEP]
rcases(hu.comp (tendsto_add_atTop_nat n)).cauchySeq.subseq_mem fun n => hV (n + 1) with ⟨φ, φ_mono, hφV⟩
[GOAL]
case intro.intro.intro
α : Type u
β : Type v
inst✝ : UniformSpace α
V : ℕ → Set (α × α)
hV : ∀ (n : ℕ), V n ∈ 𝓤 α
u : ℕ → α
a : α
hu : Tendsto u atTop (𝓝 a)
n : ℕ
hn : ∀ (b : ℕ), b ≥ n → b ∈ u ⁻¹' ball a (Prod.swap ⁻¹' V 0)
φ : ℕ → ℕ
φ_mono : StrictMono φ
hφV : ∀ (n_1 : ℕ), ((u ∘ fun a => a + n) (φ (n_1 + 1)), (u ∘ fun a => a + n) (φ n_1)) ∈ V (n_1 + 1)
⊢ ∃ φ, StrictMono φ ∧ (u (φ 0), a) ∈ V 0 ∧ ∀ (n : ℕ), (u (φ (n + 1)), u (φ n)) ∈ V (n + 1)
[PROOFSTEP]
exact ⟨fun k => φ k + n, φ_mono.add_const _, hn _ le_add_self, hφV⟩
[GOAL]
α : Type u
β : Type v
inst✝² : UniformSpace α
γ : Sort u_1
inst✝¹ : Nonempty β
inst✝ : SemilatticeSup β
u : β → α
p : γ → Prop
s : γ → Set (α × α)
h : HasBasis (𝓤 α) p s
⊢ CauchySeq u ↔ ∀ (i : γ), p i → ∃ N, ∀ (m : β), N ≤ m → ∀ (n : β), N ≤ n → (u m, u n) ∈ s i
[PROOFSTEP]
rw [cauchySeq_iff_tendsto, ← prod_atTop_atTop_eq]
[GOAL]
α : Type u
β : Type v
inst✝² : UniformSpace α
γ : Sort u_1
inst✝¹ : Nonempty β
inst✝ : SemilatticeSup β
u : β → α
p : γ → Prop
s : γ → Set (α × α)
h : HasBasis (𝓤 α) p s
⊢ Tendsto (Prod.map u u) (atTop ×ˢ atTop) (𝓤 α) ↔
    ∀ (i : γ), p i → ∃ N, ∀ (m : β), N ≤ m → ∀ (n : β), N ≤ n → (u m, u n) ∈ s i
[PROOFSTEP]
refine' (atTop_basis.prod_self.tendsto_iff h).trans _
[GOAL]
α : Type u
β : Type v
inst✝² : UniformSpace α
γ : Sort u_1
inst✝¹ : Nonempty β
inst✝ : SemilatticeSup β
u : β → α
p : γ → Prop
s : γ → Set (α × α)
h : HasBasis (𝓤 α) p s
⊢ (∀ (ib : γ), p ib → ∃ ia, True ∧ ∀ (x : β × β), x ∈ Ici ia ×ˢ Ici ia → Prod.map u u x ∈ s ib) ↔
    ∀ (i : γ), p i → ∃ N, ∀ (m : β), N ≤ m → ∀ (n : β), N ≤ n → (u m, u n) ∈ s i
[PROOFSTEP]
simp only [exists_prop, true_and_iff, MapsTo, preimage, subset_def, Prod.forall, mem_prod_eq, mem_setOf_eq, mem_Ici,
  and_imp, Prod.map, ge_iff_le, @forall_swap (_ ≤ _) β]
[GOAL]
α : Type u
β : Type v
inst✝² : UniformSpace α
γ : Sort u_1
inst✝¹ : Nonempty β
inst✝ : SemilatticeSup β
u : β → α
p : γ → Prop
s : γ → Set (α × α)
H : HasBasis (𝓤 α) p s
⊢ CauchySeq u ↔ ∀ (i : γ), p i → ∃ N, ∀ (n : β), n ≥ N → (u n, u N) ∈ s i
[PROOFSTEP]
refine' H.cauchySeq_iff.trans ⟨fun h i hi => _, fun h i hi => _⟩
[GOAL]
case refine'_1
α : Type u
β : Type v
inst✝² : UniformSpace α
γ : Sort u_1
inst✝¹ : Nonempty β
inst✝ : SemilatticeSup β
u : β → α
p : γ → Prop
s : γ → Set (α × α)
H : HasBasis (𝓤 α) p s
h : ∀ (i : γ), p i → ∃ N, ∀ (m : β), N ≤ m → ∀ (n : β), N ≤ n → (u m, u n) ∈ s i
i : γ
hi : p i
⊢ ∃ N, ∀ (n : β), n ≥ N → (u n, u N) ∈ s i
[PROOFSTEP]
exact (h i hi).imp fun N hN n hn => hN n hn N le_rfl
[GOAL]
case refine'_2
α : Type u
β : Type v
inst✝² : UniformSpace α
γ : Sort u_1
inst✝¹ : Nonempty β
inst✝ : SemilatticeSup β
u : β → α
p : γ → Prop
s : γ → Set (α × α)
H : HasBasis (𝓤 α) p s
h : ∀ (i : γ), p i → ∃ N, ∀ (n : β), n ≥ N → (u n, u N) ∈ s i
i : γ
hi : p i
⊢ ∃ N, ∀ (m : β), N ≤ m → ∀ (n : β), N ≤ n → (u m, u n) ∈ s i
[PROOFSTEP]
rcases comp_symm_of_uniformity (H.mem_of_mem hi) with ⟨t, ht, ht', hts⟩
[GOAL]
case refine'_2.intro.intro.intro
α : Type u
β : Type v
inst✝² : UniformSpace α
γ : Sort u_1
inst✝¹ : Nonempty β
inst✝ : SemilatticeSup β
u : β → α
p : γ → Prop
s : γ → Set (α × α)
H : HasBasis (𝓤 α) p s
h : ∀ (i : γ), p i → ∃ N, ∀ (n : β), n ≥ N → (u n, u N) ∈ s i
i : γ
hi : p i
t : Set (α × α)
ht : t ∈ 𝓤 α
ht' : ∀ {a b : α}, (a, b) ∈ t → (b, a) ∈ t
hts : t ○ t ⊆ s i
⊢ ∃ N, ∀ (m : β), N ≤ m → ∀ (n : β), N ≤ n → (u m, u n) ∈ s i
[PROOFSTEP]
rcases H.mem_iff.1 ht with ⟨j, hj, hjt⟩
[GOAL]
case refine'_2.intro.intro.intro.intro.intro
α : Type u
β : Type v
inst✝² : UniformSpace α
γ : Sort u_1
inst✝¹ : Nonempty β
inst✝ : SemilatticeSup β
u : β → α
p : γ → Prop
s : γ → Set (α × α)
H : HasBasis (𝓤 α) p s
h : ∀ (i : γ), p i → ∃ N, ∀ (n : β), n ≥ N → (u n, u N) ∈ s i
i : γ
hi : p i
t : Set (α × α)
ht : t ∈ 𝓤 α
ht' : ∀ {a b : α}, (a, b) ∈ t → (b, a) ∈ t
hts : t ○ t ⊆ s i
j : γ
hj : p j
hjt : s j ⊆ t
⊢ ∃ N, ∀ (m : β), N ≤ m → ∀ (n : β), N ≤ n → (u m, u n) ∈ s i
[PROOFSTEP]
refine' (h j hj).imp fun N hN m hm n hn => hts ⟨u N, hjt _, ht' <| hjt _⟩
[GOAL]
case refine'_2.intro.intro.intro.intro.intro.refine'_1
α : Type u
β : Type v
inst✝² : UniformSpace α
γ : Sort u_1
inst✝¹ : Nonempty β
inst✝ : SemilatticeSup β
u : β → α
p : γ → Prop
s : γ → Set (α × α)
H : HasBasis (𝓤 α) p s
h : ∀ (i : γ), p i → ∃ N, ∀ (n : β), n ≥ N → (u n, u N) ∈ s i
i : γ
hi : p i
t : Set (α × α)
ht : t ∈ 𝓤 α
ht' : ∀ {a b : α}, (a, b) ∈ t → (b, a) ∈ t
hts : t ○ t ⊆ s i
j : γ
hj : p j
hjt : s j ⊆ t
N : β
hN : ∀ (n : β), n ≥ N → (u n, u N) ∈ s j
m : β
hm : N ≤ m
n : β
hn : N ≤ n
⊢ ((u m, u n).fst, u N) ∈ s j
case refine'_2.intro.intro.intro.intro.intro.refine'_2
α : Type u
β : Type v
inst✝² : UniformSpace α
γ : Sort u_1
inst✝¹ : Nonempty β
inst✝ : SemilatticeSup β
u : β → α
p : γ → Prop
s : γ → Set (α × α)
H : HasBasis (𝓤 α) p s
h : ∀ (i : γ), p i → ∃ N, ∀ (n : β), n ≥ N → (u n, u N) ∈ s i
i : γ
hi : p i
t : Set (α × α)
ht : t ∈ 𝓤 α
ht' : ∀ {a b : α}, (a, b) ∈ t → (b, a) ∈ t
hts : t ○ t ⊆ s i
j : γ
hj : p j
hjt : s j ⊆ t
N : β
hN : ∀ (n : β), n ≥ N → (u n, u N) ∈ s j
m : β
hm : N ≤ m
n : β
hn : N ≤ n
⊢ ((u m, u n).snd, u N) ∈ s j
[PROOFSTEP]
exacts [hN m hm, hN n hn]
[GOAL]
α : Type u
β : Type v
inst✝² : UniformSpace α
inst✝¹ : SemilatticeSup β
inst✝ : Nonempty β
U : β → Set (α × α)
hU : ∀ (s : Set (α × α)), s ∈ 𝓤 α → ∃ n, U n ⊆ s
f : β → α
hf : ∀ ⦃N m n : β⦄, N ≤ m → N ≤ n → (f m, f n) ∈ U N
⊢ Tendsto (Prod.map f f) atTop (𝓤 α)
[PROOFSTEP]
intro s hs
[GOAL]
α : Type u
β : Type v
inst✝² : UniformSpace α
inst✝¹ : SemilatticeSup β
inst✝ : Nonempty β
U : β → Set (α × α)
hU : ∀ (s : Set (α × α)), s ∈ 𝓤 α → ∃ n, U n ⊆ s
f : β → α
hf : ∀ ⦃N m n : β⦄, N ≤ m → N ≤ n → (f m, f n) ∈ U N
s : Set (α × α)
hs : s ∈ 𝓤 α
⊢ s ∈ map (Prod.map f f) atTop
[PROOFSTEP]
rw [mem_map, mem_atTop_sets]
[GOAL]
α : Type u
β : Type v
inst✝² : UniformSpace α
inst✝¹ : SemilatticeSup β
inst✝ : Nonempty β
U : β → Set (α × α)
hU : ∀ (s : Set (α × α)), s ∈ 𝓤 α → ∃ n, U n ⊆ s
f : β → α
hf : ∀ ⦃N m n : β⦄, N ≤ m → N ≤ n → (f m, f n) ∈ U N
s : Set (α × α)
hs : s ∈ 𝓤 α
⊢ ∃ a, ∀ (b : β × β), b ≥ a → b ∈ Prod.map f f ⁻¹' s
[PROOFSTEP]
cases' hU s hs with N hN
[GOAL]
case intro
α : Type u
β : Type v
inst✝² : UniformSpace α
inst✝¹ : SemilatticeSup β
inst✝ : Nonempty β
U : β → Set (α × α)
hU : ∀ (s : Set (α × α)), s ∈ 𝓤 α → ∃ n, U n ⊆ s
f : β → α
hf : ∀ ⦃N m n : β⦄, N ≤ m → N ≤ n → (f m, f n) ∈ U N
s : Set (α × α)
hs : s ∈ 𝓤 α
N : β
hN : U N ⊆ s
⊢ ∃ a, ∀ (b : β × β), b ≥ a → b ∈ Prod.map f f ⁻¹' s
[PROOFSTEP]
refine' ⟨(N, N), fun mn hmn => _⟩
[GOAL]
case intro
α : Type u
β : Type v
inst✝² : UniformSpace α
inst✝¹ : SemilatticeSup β
inst✝ : Nonempty β
U : β → Set (α × α)
hU : ∀ (s : Set (α × α)), s ∈ 𝓤 α → ∃ n, U n ⊆ s
f : β → α
hf : ∀ ⦃N m n : β⦄, N ≤ m → N ≤ n → (f m, f n) ∈ U N
s : Set (α × α)
hs : s ∈ 𝓤 α
N : β
hN : U N ⊆ s
mn : β × β
hmn : mn ≥ (N, N)
⊢ mn ∈ Prod.map f f ⁻¹' s
[PROOFSTEP]
cases' mn with m n
[GOAL]
case intro.mk
α : Type u
β : Type v
inst✝² : UniformSpace α
inst✝¹ : SemilatticeSup β
inst✝ : Nonempty β
U : β → Set (α × α)
hU : ∀ (s : Set (α × α)), s ∈ 𝓤 α → ∃ n, U n ⊆ s
f : β → α
hf : ∀ ⦃N m n : β⦄, N ≤ m → N ≤ n → (f m, f n) ∈ U N
s : Set (α × α)
hs : s ∈ 𝓤 α
N : β
hN : U N ⊆ s
m n : β
hmn : (m, n) ≥ (N, N)
⊢ (m, n) ∈ Prod.map f f ⁻¹' s
[PROOFSTEP]
exact hN (hf hmn.1 hmn.2)
[GOAL]
α : Type u
β : Type v
inst✝ : UniformSpace α
s : Set α
⊢ IsComplete s ↔ ∀ (l : Ultrafilter α), Cauchy ↑l → ↑l ≤ 𝓟 s → ∃ x, x ∈ s ∧ ↑l ≤ 𝓝 x
[PROOFSTEP]
refine' ⟨fun h l => h l, fun H => isComplete_iff_clusterPt.2 fun l hl hls => _⟩
[GOAL]
α : Type u
β : Type v
inst✝ : UniformSpace α
s : Set α
H : ∀ (l : Ultrafilter α), Cauchy ↑l → ↑l ≤ 𝓟 s → ∃ x, x ∈ s ∧ ↑l ≤ 𝓝 x
l : Filter α
hl : Cauchy l
hls : l ≤ 𝓟 s
⊢ ∃ x, x ∈ s ∧ ClusterPt x l
[PROOFSTEP]
haveI := hl.1
[GOAL]
α : Type u
β : Type v
inst✝ : UniformSpace α
s : Set α
H : ∀ (l : Ultrafilter α), Cauchy ↑l → ↑l ≤ 𝓟 s → ∃ x, x ∈ s ∧ ↑l ≤ 𝓝 x
l : Filter α
hl : Cauchy l
hls : l ≤ 𝓟 s
this : NeBot l
⊢ ∃ x, x ∈ s ∧ ClusterPt x l
[PROOFSTEP]
rcases H (Ultrafilter.of l) hl.ultrafilter_of ((Ultrafilter.of_le l).trans hls) with ⟨x, hxs, hxl⟩
[GOAL]
case intro.intro
α : Type u
β : Type v
inst✝ : UniformSpace α
s : Set α
H : ∀ (l : Ultrafilter α), Cauchy ↑l → ↑l ≤ 𝓟 s → ∃ x, x ∈ s ∧ ↑l ≤ 𝓝 x
l : Filter α
hl : Cauchy l
hls : l ≤ 𝓟 s
this : NeBot l
x : α
hxs : x ∈ s
hxl : ↑(Ultrafilter.of l) ≤ 𝓝 x
⊢ ∃ x, x ∈ s ∧ ClusterPt x l
[PROOFSTEP]
exact ⟨x, hxs, (ClusterPt.of_le_nhds hxl).mono (Ultrafilter.of_le l)⟩
[GOAL]
α : Type u
β : Type v
inst✝ : UniformSpace α
s : Set α
⊢ (∀ (l : Ultrafilter α), Cauchy ↑l → ↑l ≤ 𝓟 s → ∃ x, x ∈ s ∧ ↑l ≤ 𝓝 x) ↔
    ∀ (l : Ultrafilter α), Cauchy ↑l → s ∈ l → ∃ x, x ∈ s ∧ ↑l ≤ 𝓝 x
[PROOFSTEP]
simp only [le_principal_iff, Ultrafilter.mem_coe]
[GOAL]
α : Type u
β : Type v
inst✝ : UniformSpace α
s t : Set α
hs : IsComplete s
ht : IsComplete t
⊢ IsComplete (s ∪ t)
[PROOFSTEP]
simp only [isComplete_iff_ultrafilter', Ultrafilter.union_mem_iff, or_imp] at *
[GOAL]
α : Type u
β : Type v
inst✝ : UniformSpace α
s t : Set α
hs : ∀ (l : Ultrafilter α), Cauchy ↑l → s ∈ l → ∃ x, x ∈ s ∧ ↑l ≤ 𝓝 x
ht : ∀ (l : Ultrafilter α), Cauchy ↑l → t ∈ l → ∃ x, x ∈ t ∧ ↑l ≤ 𝓝 x
⊢ ∀ (l : Ultrafilter α), Cauchy ↑l → (s ∈ l → ∃ x, x ∈ s ∪ t ∧ ↑l ≤ 𝓝 x) ∧ (t ∈ l → ∃ x, x ∈ s ∪ t ∧ ↑l ≤ 𝓝 x)
[PROOFSTEP]
exact fun l hl =>
  ⟨fun hsl => (hs l hl hsl).imp fun x hx => ⟨Or.inl hx.1, hx.2⟩, fun htl =>
    (ht l hl htl).imp fun x hx => ⟨Or.inr hx.1, hx.2⟩⟩
[GOAL]
α : Type u
β : Type v
inst✝ : UniformSpace α
ι : Sort u_1
s : ι → Set α
hs : ∀ (i : ι), IsComplete (s i)
U : Set (α × α)
hU : U ∈ 𝓤 α
hd : ∀ (i j : ι) (x : α), x ∈ s i → ∀ (y : α), y ∈ s j → (x, y) ∈ U → i = j
⊢ IsComplete (⋃ (i : ι), s i)
[PROOFSTEP]
set S := ⋃ i, s i
[GOAL]
α : Type u
β : Type v
inst✝ : UniformSpace α
ι : Sort u_1
s : ι → Set α
hs : ∀ (i : ι), IsComplete (s i)
U : Set (α × α)
hU : U ∈ 𝓤 α
hd : ∀ (i j : ι) (x : α), x ∈ s i → ∀ (y : α), y ∈ s j → (x, y) ∈ U → i = j
S : Set α := ⋃ (i : ι), s i
⊢ IsComplete S
[PROOFSTEP]
intro l hl hls
[GOAL]
α : Type u
β : Type v
inst✝ : UniformSpace α
ι : Sort u_1
s : ι → Set α
hs : ∀ (i : ι), IsComplete (s i)
U : Set (α × α)
hU : U ∈ 𝓤 α
hd : ∀ (i j : ι) (x : α), x ∈ s i → ∀ (y : α), y ∈ s j → (x, y) ∈ U → i = j
S : Set α := ⋃ (i : ι), s i
l : Filter α
hl : Cauchy l
hls : l ≤ 𝓟 S
⊢ ∃ x, x ∈ S ∧ l ≤ 𝓝 x
[PROOFSTEP]
rw [le_principal_iff] at hls 
[GOAL]
α : Type u
β : Type v
inst✝ : UniformSpace α
ι : Sort u_1
s : ι → Set α
hs : ∀ (i : ι), IsComplete (s i)
U : Set (α × α)
hU : U ∈ 𝓤 α
hd : ∀ (i j : ι) (x : α), x ∈ s i → ∀ (y : α), y ∈ s j → (x, y) ∈ U → i = j
S : Set α := ⋃ (i : ι), s i
l : Filter α
hl : Cauchy l
hls : S ∈ l
⊢ ∃ x, x ∈ S ∧ l ≤ 𝓝 x
[PROOFSTEP]
cases' cauchy_iff.1 hl with hl_ne hl'
[GOAL]
case intro
α : Type u
β : Type v
inst✝ : UniformSpace α
ι : Sort u_1
s : ι → Set α
hs : ∀ (i : ι), IsComplete (s i)
U : Set (α × α)
hU : U ∈ 𝓤 α
hd : ∀ (i j : ι) (x : α), x ∈ s i → ∀ (y : α), y ∈ s j → (x, y) ∈ U → i = j
S : Set α := ⋃ (i : ι), s i
l : Filter α
hl : Cauchy l
hls : S ∈ l
hl_ne : NeBot l
hl' : ∀ (s : Set (α × α)), s ∈ 𝓤 α → ∃ t, t ∈ l ∧ t ×ˢ t ⊆ s
⊢ ∃ x, x ∈ S ∧ l ≤ 𝓝 x
[PROOFSTEP]
obtain ⟨t, htS, htl, htU⟩ : ∃ t, t ⊆ S ∧ t ∈ l ∧ t ×ˢ t ⊆ U :=
  by
  rcases hl' U hU with ⟨t, htl, htU⟩
  exact
    ⟨t ∩ S, inter_subset_right _ _, inter_mem htl hls,
      (Set.prod_mono (inter_subset_left _ _) (inter_subset_left _ _)).trans htU⟩
[GOAL]
α : Type u
β : Type v
inst✝ : UniformSpace α
ι : Sort u_1
s : ι → Set α
hs : ∀ (i : ι), IsComplete (s i)
U : Set (α × α)
hU : U ∈ 𝓤 α
hd : ∀ (i j : ι) (x : α), x ∈ s i → ∀ (y : α), y ∈ s j → (x, y) ∈ U → i = j
S : Set α := ⋃ (i : ι), s i
l : Filter α
hl : Cauchy l
hls : S ∈ l
hl_ne : NeBot l
hl' : ∀ (s : Set (α × α)), s ∈ 𝓤 α → ∃ t, t ∈ l ∧ t ×ˢ t ⊆ s
⊢ ∃ t, t ⊆ S ∧ t ∈ l ∧ t ×ˢ t ⊆ U
[PROOFSTEP]
rcases hl' U hU with ⟨t, htl, htU⟩
[GOAL]
case intro.intro
α : Type u
β : Type v
inst✝ : UniformSpace α
ι : Sort u_1
s : ι → Set α
hs : ∀ (i : ι), IsComplete (s i)
U : Set (α × α)
hU : U ∈ 𝓤 α
hd : ∀ (i j : ι) (x : α), x ∈ s i → ∀ (y : α), y ∈ s j → (x, y) ∈ U → i = j
S : Set α := ⋃ (i : ι), s i
l : Filter α
hl : Cauchy l
hls : S ∈ l
hl_ne : NeBot l
hl' : ∀ (s : Set (α × α)), s ∈ 𝓤 α → ∃ t, t ∈ l ∧ t ×ˢ t ⊆ s
t : Set α
htl : t ∈ l
htU : t ×ˢ t ⊆ U
⊢ ∃ t, t ⊆ S ∧ t ∈ l ∧ t ×ˢ t ⊆ U
[PROOFSTEP]
exact
  ⟨t ∩ S, inter_subset_right _ _, inter_mem htl hls,
    (Set.prod_mono (inter_subset_left _ _) (inter_subset_left _ _)).trans htU⟩
[GOAL]
case intro.intro.intro.intro
α : Type u
β : Type v
inst✝ : UniformSpace α
ι : Sort u_1
s : ι → Set α
hs : ∀ (i : ι), IsComplete (s i)
U : Set (α × α)
hU : U ∈ 𝓤 α
hd : ∀ (i j : ι) (x : α), x ∈ s i → ∀ (y : α), y ∈ s j → (x, y) ∈ U → i = j
S : Set α := ⋃ (i : ι), s i
l : Filter α
hl : Cauchy l
hls : S ∈ l
hl_ne : NeBot l
hl' : ∀ (s : Set (α × α)), s ∈ 𝓤 α → ∃ t, t ∈ l ∧ t ×ˢ t ⊆ s
t : Set α
htS : t ⊆ S
htl : t ∈ l
htU : t ×ˢ t ⊆ U
⊢ ∃ x, x ∈ S ∧ l ≤ 𝓝 x
[PROOFSTEP]
obtain ⟨i, hi⟩ : ∃ i, t ⊆ s i := by
  rcases Filter.nonempty_of_mem htl with ⟨x, hx⟩
  rcases mem_iUnion.1 (htS hx) with ⟨i, hi⟩
  refine' ⟨i, fun y hy => _⟩
  rcases mem_iUnion.1 (htS hy) with ⟨j, hj⟩
  rwa [hd i j x hi y hj (htU <| mk_mem_prod hx hy)]
[GOAL]
α : Type u
β : Type v
inst✝ : UniformSpace α
ι : Sort u_1
s : ι → Set α
hs : ∀ (i : ι), IsComplete (s i)
U : Set (α × α)
hU : U ∈ 𝓤 α
hd : ∀ (i j : ι) (x : α), x ∈ s i → ∀ (y : α), y ∈ s j → (x, y) ∈ U → i = j
S : Set α := ⋃ (i : ι), s i
l : Filter α
hl : Cauchy l
hls : S ∈ l
hl_ne : NeBot l
hl' : ∀ (s : Set (α × α)), s ∈ 𝓤 α → ∃ t, t ∈ l ∧ t ×ˢ t ⊆ s
t : Set α
htS : t ⊆ S
htl : t ∈ l
htU : t ×ˢ t ⊆ U
⊢ ∃ i, t ⊆ s i
[PROOFSTEP]
rcases Filter.nonempty_of_mem htl with ⟨x, hx⟩
[GOAL]
case intro
α : Type u
β : Type v
inst✝ : UniformSpace α
ι : Sort u_1
s : ι → Set α
hs : ∀ (i : ι), IsComplete (s i)
U : Set (α × α)
hU : U ∈ 𝓤 α
hd : ∀ (i j : ι) (x : α), x ∈ s i → ∀ (y : α), y ∈ s j → (x, y) ∈ U → i = j
S : Set α := ⋃ (i : ι), s i
l : Filter α
hl : Cauchy l
hls : S ∈ l
hl_ne : NeBot l
hl' : ∀ (s : Set (α × α)), s ∈ 𝓤 α → ∃ t, t ∈ l ∧ t ×ˢ t ⊆ s
t : Set α
htS : t ⊆ S
htl : t ∈ l
htU : t ×ˢ t ⊆ U
x : α
hx : x ∈ t
⊢ ∃ i, t ⊆ s i
[PROOFSTEP]
rcases mem_iUnion.1 (htS hx) with ⟨i, hi⟩
[GOAL]
case intro.intro
α : Type u
β : Type v
inst✝ : UniformSpace α
ι : Sort u_1
s : ι → Set α
hs : ∀ (i : ι), IsComplete (s i)
U : Set (α × α)
hU : U ∈ 𝓤 α
hd : ∀ (i j : ι) (x : α), x ∈ s i → ∀ (y : α), y ∈ s j → (x, y) ∈ U → i = j
S : Set α := ⋃ (i : ι), s i
l : Filter α
hl : Cauchy l
hls : S ∈ l
hl_ne : NeBot l
hl' : ∀ (s : Set (α × α)), s ∈ 𝓤 α → ∃ t, t ∈ l ∧ t ×ˢ t ⊆ s
t : Set α
htS : t ⊆ S
htl : t ∈ l
htU : t ×ˢ t ⊆ U
x : α
hx : x ∈ t
i : ι
hi : x ∈ s i
⊢ ∃ i, t ⊆ s i
[PROOFSTEP]
refine' ⟨i, fun y hy => _⟩
[GOAL]
case intro.intro
α : Type u
β : Type v
inst✝ : UniformSpace α
ι : Sort u_1
s : ι → Set α
hs : ∀ (i : ι), IsComplete (s i)
U : Set (α × α)
hU : U ∈ 𝓤 α
hd : ∀ (i j : ι) (x : α), x ∈ s i → ∀ (y : α), y ∈ s j → (x, y) ∈ U → i = j
S : Set α := ⋃ (i : ι), s i
l : Filter α
hl : Cauchy l
hls : S ∈ l
hl_ne : NeBot l
hl' : ∀ (s : Set (α × α)), s ∈ 𝓤 α → ∃ t, t ∈ l ∧ t ×ˢ t ⊆ s
t : Set α
htS : t ⊆ S
htl : t ∈ l
htU : t ×ˢ t ⊆ U
x : α
hx : x ∈ t
i : ι
hi : x ∈ s i
y : α
hy : y ∈ t
⊢ y ∈ s i
[PROOFSTEP]
rcases mem_iUnion.1 (htS hy) with ⟨j, hj⟩
[GOAL]
case intro.intro.intro
α : Type u
β : Type v
inst✝ : UniformSpace α
ι : Sort u_1
s : ι → Set α
hs : ∀ (i : ι), IsComplete (s i)
U : Set (α × α)
hU : U ∈ 𝓤 α
hd : ∀ (i j : ι) (x : α), x ∈ s i → ∀ (y : α), y ∈ s j → (x, y) ∈ U → i = j
S : Set α := ⋃ (i : ι), s i
l : Filter α
hl : Cauchy l
hls : S ∈ l
hl_ne : NeBot l
hl' : ∀ (s : Set (α × α)), s ∈ 𝓤 α → ∃ t, t ∈ l ∧ t ×ˢ t ⊆ s
t : Set α
htS : t ⊆ S
htl : t ∈ l
htU : t ×ˢ t ⊆ U
x : α
hx : x ∈ t
i : ι
hi : x ∈ s i
y : α
hy : y ∈ t
j : ι
hj : y ∈ s j
⊢ y ∈ s i
[PROOFSTEP]
rwa [hd i j x hi y hj (htU <| mk_mem_prod hx hy)]
[GOAL]
case intro.intro.intro.intro.intro
α : Type u
β : Type v
inst✝ : UniformSpace α
ι : Sort u_1
s : ι → Set α
hs : ∀ (i : ι), IsComplete (s i)
U : Set (α × α)
hU : U ∈ 𝓤 α
hd : ∀ (i j : ι) (x : α), x ∈ s i → ∀ (y : α), y ∈ s j → (x, y) ∈ U → i = j
S : Set α := ⋃ (i : ι), s i
l : Filter α
hl : Cauchy l
hls : S ∈ l
hl_ne : NeBot l
hl' : ∀ (s : Set (α × α)), s ∈ 𝓤 α → ∃ t, t ∈ l ∧ t ×ˢ t ⊆ s
t : Set α
htS : t ⊆ S
htl : t ∈ l
htU : t ×ˢ t ⊆ U
i : ι
hi : t ⊆ s i
⊢ ∃ x, x ∈ S ∧ l ≤ 𝓝 x
[PROOFSTEP]
rcases hs i l hl (le_principal_iff.2 <| mem_of_superset htl hi) with ⟨x, hxs, hlx⟩
[GOAL]
case intro.intro.intro.intro.intro.intro.intro
α : Type u
β : Type v
inst✝ : UniformSpace α
ι : Sort u_1
s : ι → Set α
hs : ∀ (i : ι), IsComplete (s i)
U : Set (α × α)
hU : U ∈ 𝓤 α
hd : ∀ (i j : ι) (x : α), x ∈ s i → ∀ (y : α), y ∈ s j → (x, y) ∈ U → i = j
S : Set α := ⋃ (i : ι), s i
l : Filter α
hl : Cauchy l
hls : S ∈ l
hl_ne : NeBot l
hl' : ∀ (s : Set (α × α)), s ∈ 𝓤 α → ∃ t, t ∈ l ∧ t ×ˢ t ⊆ s
t : Set α
htS : t ⊆ S
htl : t ∈ l
htU : t ×ˢ t ⊆ U
i : ι
hi : t ⊆ s i
x : α
hxs : x ∈ s i
hlx : l ≤ 𝓝 x
⊢ ∃ x, x ∈ S ∧ l ≤ 𝓝 x
[PROOFSTEP]
exact ⟨x, mem_iUnion.2 ⟨i, hxs⟩, hlx⟩
[GOAL]
α✝ : Type u
β : Type v
inst✝² : UniformSpace α✝
α : Type u
inst✝¹ : UniformSpace α
inst✝ : CompleteSpace α
f : Filter α
hf : Cauchy f
x✝ : f ≤ 𝓟 univ
⊢ ∃ x, x ∈ univ ∧ f ≤ 𝓝 x
[PROOFSTEP]
rcases CompleteSpace.complete hf with ⟨x, hx⟩
[GOAL]
case intro
α✝ : Type u
β : Type v
inst✝² : UniformSpace α✝
α : Type u
inst✝¹ : UniformSpace α
inst✝ : CompleteSpace α
f : Filter α
hf : Cauchy f
x✝ : f ≤ 𝓟 univ
x : α
hx : f ≤ 𝓝 x
⊢ ∃ x, x ∈ univ ∧ f ≤ 𝓝 x
[PROOFSTEP]
exact ⟨x, mem_univ x, hx⟩
[GOAL]
α : Type u
β : Type v
inst✝³ : UniformSpace α
inst✝² : UniformSpace β
inst✝¹ : CompleteSpace α
inst✝ : CompleteSpace β
f✝ : Filter (α × β)
hf : Cauchy f✝
x1 : α
hx1 : map (fun p => p.fst) f✝ ≤ 𝓝 x1
x2 : β
hx2 : map (fun p => p.snd) f✝ ≤ 𝓝 x2
⊢ f✝ ≤ 𝓝 (x1, x2)
[PROOFSTEP]
rw [nhds_prod_eq, Filter.prod_def]
[GOAL]
α : Type u
β : Type v
inst✝³ : UniformSpace α
inst✝² : UniformSpace β
inst✝¹ : CompleteSpace α
inst✝ : CompleteSpace β
f✝ : Filter (α × β)
hf : Cauchy f✝
x1 : α
hx1 : map (fun p => p.fst) f✝ ≤ 𝓝 x1
x2 : β
hx2 : map (fun p => p.snd) f✝ ≤ 𝓝 x2
⊢ f✝ ≤ Filter.lift (𝓝 x1) fun s => Filter.lift' (𝓝 x2) fun t => s ×ˢ t
[PROOFSTEP]
exact Filter.le_lift.2 fun s hs => Filter.le_lift'.2 fun t ht => inter_mem (hx1 hs) (hx2 ht)
[GOAL]
α : Type u
β : Type v
inst✝ : UniformSpace α
⊢ CompleteSpace α ↔ ∀ (l : Ultrafilter α), Cauchy ↑l → ∃ x, ↑l ≤ 𝓝 x
[PROOFSTEP]
simp [completeSpace_iff_isComplete_univ, isComplete_iff_ultrafilter]
[GOAL]
α : Type u
β : Type v
inst✝¹ : UniformSpace α
inst✝ : SemilatticeSup β
K : Set α
h₁ : IsComplete K
u : β → α
h₂ : ∀ (n : β), u n ∈ K
h₃ : CauchySeq u
⊢ u '' univ ⊆ K
[PROOFSTEP]
rwa [image_univ, range_subset_iff]
[GOAL]
α : Type u
β : Type v
inst✝ : UniformSpace α
s : Set α
hs : TotallyBounded s
U : Set (α × α)
hU : U ∈ 𝓤 α
⊢ ∃ t, t ⊆ s ∧ Set.Finite t ∧ s ⊆ ⋃ (y : α) (_ : y ∈ t), {x | (x, y) ∈ U}
[PROOFSTEP]
rcases comp_symm_of_uniformity hU with ⟨r, hr, rs, rU⟩
[GOAL]
case intro.intro.intro
α : Type u
β : Type v
inst✝ : UniformSpace α
s : Set α
hs : TotallyBounded s
U : Set (α × α)
hU : U ∈ 𝓤 α
r : Set (α × α)
hr : r ∈ 𝓤 α
rs : ∀ {a b : α}, (a, b) ∈ r → (b, a) ∈ r
rU : r ○ r ⊆ U
⊢ ∃ t, t ⊆ s ∧ Set.Finite t ∧ s ⊆ ⋃ (y : α) (_ : y ∈ t), {x | (x, y) ∈ U}
[PROOFSTEP]
rcases hs r hr with ⟨k, fk, ks⟩
[GOAL]
case intro.intro.intro.intro.intro
α : Type u
β : Type v
inst✝ : UniformSpace α
s : Set α
hs : TotallyBounded s
U : Set (α × α)
hU : U ∈ 𝓤 α
r : Set (α × α)
hr : r ∈ 𝓤 α
rs : ∀ {a b : α}, (a, b) ∈ r → (b, a) ∈ r
rU : r ○ r ⊆ U
k : Set α
fk : Set.Finite k
ks : s ⊆ ⋃ (y : α) (_ : y ∈ k), {x | (x, y) ∈ r}
⊢ ∃ t, t ⊆ s ∧ Set.Finite t ∧ s ⊆ ⋃ (y : α) (_ : y ∈ t), {x | (x, y) ∈ U}
[PROOFSTEP]
let u := k ∩ {y | ∃ x ∈ s, (x, y) ∈ r}
[GOAL]
case intro.intro.intro.intro.intro
α : Type u
β : Type v
inst✝ : UniformSpace α
s : Set α
hs : TotallyBounded s
U : Set (α × α)
hU : U ∈ 𝓤 α
r : Set (α × α)
hr : r ∈ 𝓤 α
rs : ∀ {a b : α}, (a, b) ∈ r → (b, a) ∈ r
rU : r ○ r ⊆ U
k : Set α
fk : Set.Finite k
ks : s ⊆ ⋃ (y : α) (_ : y ∈ k), {x | (x, y) ∈ r}
u : Set α := k ∩ {y | ∃ x, x ∈ s ∧ (x, y) ∈ r}
⊢ ∃ t, t ⊆ s ∧ Set.Finite t ∧ s ⊆ ⋃ (y : α) (_ : y ∈ t), {x | (x, y) ∈ U}
[PROOFSTEP]
choose f hfs hfr using fun x : u => x.coe_prop.2
[GOAL]
case intro.intro.intro.intro.intro
α : Type u
β : Type v
inst✝ : UniformSpace α
s : Set α
hs : TotallyBounded s
U : Set (α × α)
hU : U ∈ 𝓤 α
r : Set (α × α)
hr : r ∈ 𝓤 α
rs : ∀ {a b : α}, (a, b) ∈ r → (b, a) ∈ r
rU : r ○ r ⊆ U
k : Set α
fk : Set.Finite k
ks : s ⊆ ⋃ (y : α) (_ : y ∈ k), {x | (x, y) ∈ r}
u : Set α := k ∩ {y | ∃ x, x ∈ s ∧ (x, y) ∈ r}
f : ↑u → α
hfs : ∀ (x : ↑u), f x ∈ s
hfr : ∀ (x : ↑u), (f x, ↑x) ∈ r
⊢ ∃ t, t ⊆ s ∧ Set.Finite t ∧ s ⊆ ⋃ (y : α) (_ : y ∈ t), {x | (x, y) ∈ U}
[PROOFSTEP]
refine' ⟨range f, _, _, _⟩
[GOAL]
case intro.intro.intro.intro.intro.refine'_1
α : Type u
β : Type v
inst✝ : UniformSpace α
s : Set α
hs : TotallyBounded s
U : Set (α × α)
hU : U ∈ 𝓤 α
r : Set (α × α)
hr : r ∈ 𝓤 α
rs : ∀ {a b : α}, (a, b) ∈ r → (b, a) ∈ r
rU : r ○ r ⊆ U
k : Set α
fk : Set.Finite k
ks : s ⊆ ⋃ (y : α) (_ : y ∈ k), {x | (x, y) ∈ r}
u : Set α := k ∩ {y | ∃ x, x ∈ s ∧ (x, y) ∈ r}
f : ↑u → α
hfs : ∀ (x : ↑u), f x ∈ s
hfr : ∀ (x : ↑u), (f x, ↑x) ∈ r
⊢ range f ⊆ s
[PROOFSTEP]
exact range_subset_iff.2 hfs
[GOAL]
case intro.intro.intro.intro.intro.refine'_2
α : Type u
β : Type v
inst✝ : UniformSpace α
s : Set α
hs : TotallyBounded s
U : Set (α × α)
hU : U ∈ 𝓤 α
r : Set (α × α)
hr : r ∈ 𝓤 α
rs : ∀ {a b : α}, (a, b) ∈ r → (b, a) ∈ r
rU : r ○ r ⊆ U
k : Set α
fk : Set.Finite k
ks : s ⊆ ⋃ (y : α) (_ : y ∈ k), {x | (x, y) ∈ r}
u : Set α := k ∩ {y | ∃ x, x ∈ s ∧ (x, y) ∈ r}
f : ↑u → α
hfs : ∀ (x : ↑u), f x ∈ s
hfr : ∀ (x : ↑u), (f x, ↑x) ∈ r
⊢ Set.Finite (range f)
[PROOFSTEP]
haveI : Fintype u := (fk.inter_of_left _).fintype
[GOAL]
case intro.intro.intro.intro.intro.refine'_2
α : Type u
β : Type v
inst✝ : UniformSpace α
s : Set α
hs : TotallyBounded s
U : Set (α × α)
hU : U ∈ 𝓤 α
r : Set (α × α)
hr : r ∈ 𝓤 α
rs : ∀ {a b : α}, (a, b) ∈ r → (b, a) ∈ r
rU : r ○ r ⊆ U
k : Set α
fk : Set.Finite k
ks : s ⊆ ⋃ (y : α) (_ : y ∈ k), {x | (x, y) ∈ r}
u : Set α := k ∩ {y | ∃ x, x ∈ s ∧ (x, y) ∈ r}
f : ↑u → α
hfs : ∀ (x : ↑u), f x ∈ s
hfr : ∀ (x : ↑u), (f x, ↑x) ∈ r
this : Fintype ↑u
⊢ Set.Finite (range f)
[PROOFSTEP]
exact finite_range f
[GOAL]
case intro.intro.intro.intro.intro.refine'_3
α : Type u
β : Type v
inst✝ : UniformSpace α
s : Set α
hs : TotallyBounded s
U : Set (α × α)
hU : U ∈ 𝓤 α
r : Set (α × α)
hr : r ∈ 𝓤 α
rs : ∀ {a b : α}, (a, b) ∈ r → (b, a) ∈ r
rU : r ○ r ⊆ U
k : Set α
fk : Set.Finite k
ks : s ⊆ ⋃ (y : α) (_ : y ∈ k), {x | (x, y) ∈ r}
u : Set α := k ∩ {y | ∃ x, x ∈ s ∧ (x, y) ∈ r}
f : ↑u → α
hfs : ∀ (x : ↑u), f x ∈ s
hfr : ∀ (x : ↑u), (f x, ↑x) ∈ r
⊢ s ⊆ ⋃ (y : α) (_ : y ∈ range f), {x | (x, y) ∈ U}
[PROOFSTEP]
intro x xs
[GOAL]
case intro.intro.intro.intro.intro.refine'_3
α : Type u
β : Type v
inst✝ : UniformSpace α
s : Set α
hs : TotallyBounded s
U : Set (α × α)
hU : U ∈ 𝓤 α
r : Set (α × α)
hr : r ∈ 𝓤 α
rs : ∀ {a b : α}, (a, b) ∈ r → (b, a) ∈ r
rU : r ○ r ⊆ U
k : Set α
fk : Set.Finite k
ks : s ⊆ ⋃ (y : α) (_ : y ∈ k), {x | (x, y) ∈ r}
u : Set α := k ∩ {y | ∃ x, x ∈ s ∧ (x, y) ∈ r}
f : ↑u → α
hfs : ∀ (x : ↑u), f x ∈ s
hfr : ∀ (x : ↑u), (f x, ↑x) ∈ r
x : α
xs : x ∈ s
⊢ x ∈ ⋃ (y : α) (_ : y ∈ range f), {x | (x, y) ∈ U}
[PROOFSTEP]
obtain ⟨y, hy, xy⟩ := mem_iUnion₂.1 (ks xs)
[GOAL]
case intro.intro.intro.intro.intro.refine'_3.intro.intro
α : Type u
β : Type v
inst✝ : UniformSpace α
s : Set α
hs : TotallyBounded s
U : Set (α × α)
hU : U ∈ 𝓤 α
r : Set (α × α)
hr : r ∈ 𝓤 α
rs : ∀ {a b : α}, (a, b) ∈ r → (b, a) ∈ r
rU : r ○ r ⊆ U
k : Set α
fk : Set.Finite k
ks : s ⊆ ⋃ (y : α) (_ : y ∈ k), {x | (x, y) ∈ r}
u : Set α := k ∩ {y | ∃ x, x ∈ s ∧ (x, y) ∈ r}
f : ↑u → α
hfs : ∀ (x : ↑u), f x ∈ s
hfr : ∀ (x : ↑u), (f x, ↑x) ∈ r
x : α
xs : x ∈ s
y : α
hy : y ∈ k
xy : x ∈ {x | (x, y) ∈ r}
⊢ x ∈ ⋃ (y : α) (_ : y ∈ range f), {x | (x, y) ∈ U}
[PROOFSTEP]
rw [biUnion_range, mem_iUnion]
[GOAL]
case intro.intro.intro.intro.intro.refine'_3.intro.intro
α : Type u
β : Type v
inst✝ : UniformSpace α
s : Set α
hs : TotallyBounded s
U : Set (α × α)
hU : U ∈ 𝓤 α
r : Set (α × α)
hr : r ∈ 𝓤 α
rs : ∀ {a b : α}, (a, b) ∈ r → (b, a) ∈ r
rU : r ○ r ⊆ U
k : Set α
fk : Set.Finite k
ks : s ⊆ ⋃ (y : α) (_ : y ∈ k), {x | (x, y) ∈ r}
u : Set α := k ∩ {y | ∃ x, x ∈ s ∧ (x, y) ∈ r}
f : ↑u → α
hfs : ∀ (x : ↑u), f x ∈ s
hfr : ∀ (x : ↑u), (f x, ↑x) ∈ r
x : α
xs : x ∈ s
y : α
hy : y ∈ k
xy : x ∈ {x | (x, y) ∈ r}
⊢ ∃ i, x ∈ {x | (x, f i) ∈ U}
[PROOFSTEP]
set z : ↥u := ⟨y, hy, ⟨x, xs, xy⟩⟩
[GOAL]
case intro.intro.intro.intro.intro.refine'_3.intro.intro
α : Type u
β : Type v
inst✝ : UniformSpace α
s : Set α
hs : TotallyBounded s
U : Set (α × α)
hU : U ∈ 𝓤 α
r : Set (α × α)
hr : r ∈ 𝓤 α
rs : ∀ {a b : α}, (a, b) ∈ r → (b, a) ∈ r
rU : r ○ r ⊆ U
k : Set α
fk : Set.Finite k
ks : s ⊆ ⋃ (y : α) (_ : y ∈ k), {x | (x, y) ∈ r}
u : Set α := k ∩ {y | ∃ x, x ∈ s ∧ (x, y) ∈ r}
f : ↑u → α
hfs : ∀ (x : ↑u), f x ∈ s
hfr : ∀ (x : ↑u), (f x, ↑x) ∈ r
x : α
xs : x ∈ s
y : α
hy : y ∈ k
xy : x ∈ {x | (x, y) ∈ r}
z : ↑u := { val := y, property := (_ : y ∈ k ∧ y ∈ {y | ∃ x, x ∈ s ∧ (x, y) ∈ r}) }
⊢ ∃ i, x ∈ {x | (x, f i) ∈ U}
[PROOFSTEP]
exact ⟨z, rU <| mem_compRel.2 ⟨y, xy, rs (hfr z)⟩⟩
[GOAL]
α : Type u
β : Type v
inst✝ : UniformSpace α
s : Set α
h : ∀ (V : Set (α × α)), V ∈ 𝓤 α → SymmetricRel V → ∃ t, Set.Finite t ∧ s ⊆ ⋃ (y : α) (_ : y ∈ t), ball y V
V : Set (α × α)
hV : V ∈ 𝓤 α ∧ SymmetricRel V
⊢ ∃ t, Set.Finite t ∧ s ⊆ ⋃ (y : α) (_ : y ∈ t), {x | (x, y) ∈ id V}
[PROOFSTEP]
simpa only [ball_eq_of_symmetry hV.2] using h V hV.1 hV.2
[GOAL]
α : Type u
β : Type v
inst✝¹ : UniformSpace α
inst✝ : UniformSpace β
f : α → β
s : Set α
hs : TotallyBounded s
hf : UniformContinuous f
t : Set (β × β)
ht : t ∈ 𝓤 β
this : {p | (f p.fst, f p.snd) ∈ t} ∈ 𝓤 α
c : Set α
hfc : Set.Finite c
hct : s ⊆ ⋃ (y : α) (_ : y ∈ c), {x | (x, y) ∈ {p | (f p.fst, f p.snd) ∈ t}}
⊢ f '' s ⊆ ⋃ (y : β) (_ : y ∈ f '' c), {x | (x, y) ∈ t}
[PROOFSTEP]
simp [image_subset_iff]
[GOAL]
α : Type u
β : Type v
inst✝¹ : UniformSpace α
inst✝ : UniformSpace β
f : α → β
s : Set α
hs : TotallyBounded s
hf : UniformContinuous f
t : Set (β × β)
ht : t ∈ 𝓤 β
this : {p | (f p.fst, f p.snd) ∈ t} ∈ 𝓤 α
c : Set α
hfc : Set.Finite c
hct : s ⊆ ⋃ (y : α) (_ : y ∈ c), {x | (x, y) ∈ {p | (f p.fst, f p.snd) ∈ t}}
⊢ s ⊆ ⋃ (i : α) (_ : i ∈ c), {a | (f a, f i) ∈ t}
[PROOFSTEP]
simp [subset_def] at hct 
[GOAL]
α : Type u
β : Type v
inst✝¹ : UniformSpace α
inst✝ : UniformSpace β
f : α → β
s : Set α
hs : TotallyBounded s
hf : UniformContinuous f
t : Set (β × β)
ht : t ∈ 𝓤 β
this : {p | (f p.fst, f p.snd) ∈ t} ∈ 𝓤 α
c : Set α
hfc : Set.Finite c
hct : ∀ (x : α), x ∈ s → ∃ i, i ∈ c ∧ (f x, f i) ∈ t
⊢ s ⊆ ⋃ (i : α) (_ : i ∈ c), {a | (f a, f i) ∈ t}
[PROOFSTEP]
intro x hx
[GOAL]
α : Type u
β : Type v
inst✝¹ : UniformSpace α
inst✝ : UniformSpace β
f : α → β
s : Set α
hs : TotallyBounded s
hf : UniformContinuous f
t : Set (β × β)
ht : t ∈ 𝓤 β
this : {p | (f p.fst, f p.snd) ∈ t} ∈ 𝓤 α
c : Set α
hfc : Set.Finite c
hct : ∀ (x : α), x ∈ s → ∃ i, i ∈ c ∧ (f x, f i) ∈ t
x : α
hx : x ∈ s
⊢ x ∈ ⋃ (i : α) (_ : i ∈ c), {a | (f a, f i) ∈ t}
[PROOFSTEP]
simp
[GOAL]
α : Type u
β : Type v
inst✝¹ : UniformSpace α
inst✝ : UniformSpace β
f : α → β
s : Set α
hs : TotallyBounded s
hf : UniformContinuous f
t : Set (β × β)
ht : t ∈ 𝓤 β
this : {p | (f p.fst, f p.snd) ∈ t} ∈ 𝓤 α
c : Set α
hfc : Set.Finite c
hct : ∀ (x : α), x ∈ s → ∃ i, i ∈ c ∧ (f x, f i) ∈ t
x : α
hx : x ∈ s
⊢ ∃ i, i ∈ c ∧ (f x, f i) ∈ t
[PROOFSTEP]
exact hct x hx
[GOAL]
α : Type u
β : Type v
inst✝ : UniformSpace α
s : Set α
⊢ TotallyBounded s ↔ ∀ (f : Filter α), NeBot f → f ≤ 𝓟 s → ∃ c, c ≤ f ∧ Cauchy c
[PROOFSTEP]
constructor
[GOAL]
case mp
α : Type u
β : Type v
inst✝ : UniformSpace α
s : Set α
⊢ TotallyBounded s → ∀ (f : Filter α), NeBot f → f ≤ 𝓟 s → ∃ c, c ≤ f ∧ Cauchy c
[PROOFSTEP]
exact fun H f hf hfs =>
  ⟨Ultrafilter.of f, Ultrafilter.of_le f,
    (Ultrafilter.of f).cauchy_of_totallyBounded H ((Ultrafilter.of_le f).trans hfs)⟩
[GOAL]
case mpr
α : Type u
β : Type v
inst✝ : UniformSpace α
s : Set α
⊢ (∀ (f : Filter α), NeBot f → f ≤ 𝓟 s → ∃ c, c ≤ f ∧ Cauchy c) → TotallyBounded s
[PROOFSTEP]
intro H d hd
[GOAL]
case mpr
α : Type u
β : Type v
inst✝ : UniformSpace α
s : Set α
H : ∀ (f : Filter α), NeBot f → f ≤ 𝓟 s → ∃ c, c ≤ f ∧ Cauchy c
d : Set (α × α)
hd : d ∈ 𝓤 α
⊢ ∃ t, Set.Finite t ∧ s ⊆ ⋃ (y : α) (_ : y ∈ t), {x | (x, y) ∈ d}
[PROOFSTEP]
contrapose! H with hd_cover
[GOAL]
case mpr
α : Type u
β : Type v
inst✝ : UniformSpace α
s : Set α
d : Set (α × α)
hd : d ∈ 𝓤 α
hd_cover : ∀ (t : Set α), Set.Finite t → ¬s ⊆ ⋃ (y : α) (_ : y ∈ t), {x | (x, y) ∈ d}
⊢ ∃ f, NeBot f ∧ f ≤ 𝓟 s ∧ ∀ (c : Filter α), c ≤ f → ¬Cauchy c
[PROOFSTEP]
set f := ⨅ t : Finset α, 𝓟 (s \ ⋃ y ∈ t, {x | (x, y) ∈ d})
[GOAL]
case mpr
α : Type u
β : Type v
inst✝ : UniformSpace α
s : Set α
d : Set (α × α)
hd : d ∈ 𝓤 α
hd_cover : ∀ (t : Set α), Set.Finite t → ¬s ⊆ ⋃ (y : α) (_ : y ∈ t), {x | (x, y) ∈ d}
f : Filter α := ⨅ (t : Finset α), 𝓟 (s \ ⋃ (y : α) (_ : y ∈ t), {x | (x, y) ∈ d})
⊢ ∃ f, NeBot f ∧ f ≤ 𝓟 s ∧ ∀ (c : Filter α), c ≤ f → ¬Cauchy c
[PROOFSTEP]
have : Filter.NeBot f := by
  refine' iInf_neBot_of_directed' (directed_of_sup _) _
  · intro t₁ t₂ h
    exact principal_mono.2 (diff_subset_diff_right <| biUnion_subset_biUnion_left h)
  · intro t
    simpa [nonempty_diff] using hd_cover t t.finite_toSet
[GOAL]
α : Type u
β : Type v
inst✝ : UniformSpace α
s : Set α
d : Set (α × α)
hd : d ∈ 𝓤 α
hd_cover : ∀ (t : Set α), Set.Finite t → ¬s ⊆ ⋃ (y : α) (_ : y ∈ t), {x | (x, y) ∈ d}
f : Filter α := ⨅ (t : Finset α), 𝓟 (s \ ⋃ (y : α) (_ : y ∈ t), {x | (x, y) ∈ d})
⊢ NeBot f
[PROOFSTEP]
refine' iInf_neBot_of_directed' (directed_of_sup _) _
[GOAL]
case refine'_1
α : Type u
β : Type v
inst✝ : UniformSpace α
s : Set α
d : Set (α × α)
hd : d ∈ 𝓤 α
hd_cover : ∀ (t : Set α), Set.Finite t → ¬s ⊆ ⋃ (y : α) (_ : y ∈ t), {x | (x, y) ∈ d}
f : Filter α := ⨅ (t : Finset α), 𝓟 (s \ ⋃ (y : α) (_ : y ∈ t), {x | (x, y) ∈ d})
⊢ ∀ ⦃i j : Finset α⦄,
    i ≤ j → 𝓟 (s \ ⋃ (y : α) (_ : y ∈ i), {x | (x, y) ∈ d}) ≥ 𝓟 (s \ ⋃ (y : α) (_ : y ∈ j), {x | (x, y) ∈ d})
[PROOFSTEP]
intro t₁ t₂ h
[GOAL]
case refine'_1
α : Type u
β : Type v
inst✝ : UniformSpace α
s : Set α
d : Set (α × α)
hd : d ∈ 𝓤 α
hd_cover : ∀ (t : Set α), Set.Finite t → ¬s ⊆ ⋃ (y : α) (_ : y ∈ t), {x | (x, y) ∈ d}
f : Filter α := ⨅ (t : Finset α), 𝓟 (s \ ⋃ (y : α) (_ : y ∈ t), {x | (x, y) ∈ d})
t₁ t₂ : Finset α
h : t₁ ≤ t₂
⊢ 𝓟 (s \ ⋃ (y : α) (_ : y ∈ t₁), {x | (x, y) ∈ d}) ≥ 𝓟 (s \ ⋃ (y : α) (_ : y ∈ t₂), {x | (x, y) ∈ d})
[PROOFSTEP]
exact principal_mono.2 (diff_subset_diff_right <| biUnion_subset_biUnion_left h)
[GOAL]
case refine'_2
α : Type u
β : Type v
inst✝ : UniformSpace α
s : Set α
d : Set (α × α)
hd : d ∈ 𝓤 α
hd_cover : ∀ (t : Set α), Set.Finite t → ¬s ⊆ ⋃ (y : α) (_ : y ∈ t), {x | (x, y) ∈ d}
f : Filter α := ⨅ (t : Finset α), 𝓟 (s \ ⋃ (y : α) (_ : y ∈ t), {x | (x, y) ∈ d})
⊢ ∀ (i : Finset α), NeBot (𝓟 (s \ ⋃ (y : α) (_ : y ∈ i), {x | (x, y) ∈ d}))
[PROOFSTEP]
intro t
[GOAL]
case refine'_2
α : Type u
β : Type v
inst✝ : UniformSpace α
s : Set α
d : Set (α × α)
hd : d ∈ 𝓤 α
hd_cover : ∀ (t : Set α), Set.Finite t → ¬s ⊆ ⋃ (y : α) (_ : y ∈ t), {x | (x, y) ∈ d}
f : Filter α := ⨅ (t : Finset α), 𝓟 (s \ ⋃ (y : α) (_ : y ∈ t), {x | (x, y) ∈ d})
t : Finset α
⊢ NeBot (𝓟 (s \ ⋃ (y : α) (_ : y ∈ t), {x | (x, y) ∈ d}))
[PROOFSTEP]
simpa [nonempty_diff] using hd_cover t t.finite_toSet
[GOAL]
case mpr
α : Type u
β : Type v
inst✝ : UniformSpace α
s : Set α
d : Set (α × α)
hd : d ∈ 𝓤 α
hd_cover : ∀ (t : Set α), Set.Finite t → ¬s ⊆ ⋃ (y : α) (_ : y ∈ t), {x | (x, y) ∈ d}
f : Filter α := ⨅ (t : Finset α), 𝓟 (s \ ⋃ (y : α) (_ : y ∈ t), {x | (x, y) ∈ d})
this : NeBot f
⊢ ∃ f, NeBot f ∧ f ≤ 𝓟 s ∧ ∀ (c : Filter α), c ≤ f → ¬Cauchy c
[PROOFSTEP]
have : f ≤ 𝓟 s := iInf_le_of_le ∅ (by simp)
[GOAL]
α : Type u
β : Type v
inst✝ : UniformSpace α
s : Set α
d : Set (α × α)
hd : d ∈ 𝓤 α
hd_cover : ∀ (t : Set α), Set.Finite t → ¬s ⊆ ⋃ (y : α) (_ : y ∈ t), {x | (x, y) ∈ d}
f : Filter α := ⨅ (t : Finset α), 𝓟 (s \ ⋃ (y : α) (_ : y ∈ t), {x | (x, y) ∈ d})
this : NeBot f
⊢ 𝓟 (s \ ⋃ (y : α) (_ : y ∈ ∅), {x | (x, y) ∈ d}) ≤ 𝓟 s
[PROOFSTEP]
simp
[GOAL]
case mpr
α : Type u
β : Type v
inst✝ : UniformSpace α
s : Set α
d : Set (α × α)
hd : d ∈ 𝓤 α
hd_cover : ∀ (t : Set α), Set.Finite t → ¬s ⊆ ⋃ (y : α) (_ : y ∈ t), {x | (x, y) ∈ d}
f : Filter α := ⨅ (t : Finset α), 𝓟 (s \ ⋃ (y : α) (_ : y ∈ t), {x | (x, y) ∈ d})
this✝ : NeBot f
this : f ≤ 𝓟 s
⊢ ∃ f, NeBot f ∧ f ≤ 𝓟 s ∧ ∀ (c : Filter α), c ≤ f → ¬Cauchy c
[PROOFSTEP]
refine' ⟨f, ‹_›, ‹_›, fun c hcf hc => _⟩
[GOAL]
case mpr
α : Type u
β : Type v
inst✝ : UniformSpace α
s : Set α
d : Set (α × α)
hd : d ∈ 𝓤 α
hd_cover : ∀ (t : Set α), Set.Finite t → ¬s ⊆ ⋃ (y : α) (_ : y ∈ t), {x | (x, y) ∈ d}
f : Filter α := ⨅ (t : Finset α), 𝓟 (s \ ⋃ (y : α) (_ : y ∈ t), {x | (x, y) ∈ d})
this✝ : NeBot f
this : f ≤ 𝓟 s
c : Filter α
hcf : c ≤ f
hc : Cauchy c
⊢ False
[PROOFSTEP]
rcases mem_prod_same_iff.1 (hc.2 hd) with ⟨m, hm, hmd⟩
[GOAL]
case mpr.intro.intro
α : Type u
β : Type v
inst✝ : UniformSpace α
s : Set α
d : Set (α × α)
hd : d ∈ 𝓤 α
hd_cover : ∀ (t : Set α), Set.Finite t → ¬s ⊆ ⋃ (y : α) (_ : y ∈ t), {x | (x, y) ∈ d}
f : Filter α := ⨅ (t : Finset α), 𝓟 (s \ ⋃ (y : α) (_ : y ∈ t), {x | (x, y) ∈ d})
this✝ : NeBot f
this : f ≤ 𝓟 s
c : Filter α
hcf : c ≤ f
hc : Cauchy c
m : Set α
hm : m ∈ c
hmd : m ×ˢ m ⊆ d
⊢ False
[PROOFSTEP]
rcases hc.1.nonempty_of_mem hm with ⟨y, hym⟩
[GOAL]
case mpr.intro.intro.intro
α : Type u
β : Type v
inst✝ : UniformSpace α
s : Set α
d : Set (α × α)
hd : d ∈ 𝓤 α
hd_cover : ∀ (t : Set α), Set.Finite t → ¬s ⊆ ⋃ (y : α) (_ : y ∈ t), {x | (x, y) ∈ d}
f : Filter α := ⨅ (t : Finset α), 𝓟 (s \ ⋃ (y : α) (_ : y ∈ t), {x | (x, y) ∈ d})
this✝ : NeBot f
this : f ≤ 𝓟 s
c : Filter α
hcf : c ≤ f
hc : Cauchy c
m : Set α
hm : m ∈ c
hmd : m ×ˢ m ⊆ d
y : α
hym : y ∈ m
⊢ False
[PROOFSTEP]
set ys := ⋃ y' ∈ ({ y } : Finset α), {x | (x, y') ∈ d}
[GOAL]
case mpr.intro.intro.intro
α : Type u
β : Type v
inst✝ : UniformSpace α
s : Set α
d : Set (α × α)
hd : d ∈ 𝓤 α
hd_cover : ∀ (t : Set α), Set.Finite t → ¬s ⊆ ⋃ (y : α) (_ : y ∈ t), {x | (x, y) ∈ d}
f : Filter α := ⨅ (t : Finset α), 𝓟 (s \ ⋃ (y : α) (_ : y ∈ t), {x | (x, y) ∈ d})
this✝ : NeBot f
this : f ≤ 𝓟 s
c : Filter α
hcf : c ≤ f
hc : Cauchy c
m : Set α
hm : m ∈ c
hmd : m ×ˢ m ⊆ d
y : α
hym : y ∈ m
ys : Set α := ⋃ (y' : α) (_ : y' ∈ {y}), {x | (x, y') ∈ d}
⊢ False
[PROOFSTEP]
have : c ≤ 𝓟 (s \ ys) := hcf.trans (iInf_le_of_le { y } le_rfl)
[GOAL]
case mpr.intro.intro.intro
α : Type u
β : Type v
inst✝ : UniformSpace α
s : Set α
d : Set (α × α)
hd : d ∈ 𝓤 α
hd_cover : ∀ (t : Set α), Set.Finite t → ¬s ⊆ ⋃ (y : α) (_ : y ∈ t), {x | (x, y) ∈ d}
f : Filter α := ⨅ (t : Finset α), 𝓟 (s \ ⋃ (y : α) (_ : y ∈ t), {x | (x, y) ∈ d})
this✝¹ : NeBot f
this✝ : f ≤ 𝓟 s
c : Filter α
hcf : c ≤ f
hc : Cauchy c
m : Set α
hm : m ∈ c
hmd : m ×ˢ m ⊆ d
y : α
hym : y ∈ m
ys : Set α := ⋃ (y' : α) (_ : y' ∈ {y}), {x | (x, y') ∈ d}
this : c ≤ 𝓟 (s \ ys)
⊢ False
[PROOFSTEP]
refine' hc.1.ne (empty_mem_iff_bot.mp _)
[GOAL]
case mpr.intro.intro.intro
α : Type u
β : Type v
inst✝ : UniformSpace α
s : Set α
d : Set (α × α)
hd : d ∈ 𝓤 α
hd_cover : ∀ (t : Set α), Set.Finite t → ¬s ⊆ ⋃ (y : α) (_ : y ∈ t), {x | (x, y) ∈ d}
f : Filter α := ⨅ (t : Finset α), 𝓟 (s \ ⋃ (y : α) (_ : y ∈ t), {x | (x, y) ∈ d})
this✝¹ : NeBot f
this✝ : f ≤ 𝓟 s
c : Filter α
hcf : c ≤ f
hc : Cauchy c
m : Set α
hm : m ∈ c
hmd : m ×ˢ m ⊆ d
y : α
hym : y ∈ m
ys : Set α := ⋃ (y' : α) (_ : y' ∈ {y}), {x | (x, y') ∈ d}
this : c ≤ 𝓟 (s \ ys)
⊢ ∅ ∈ c
[PROOFSTEP]
filter_upwards [le_principal_iff.1 this, hm]
[GOAL]
case h
α : Type u
β : Type v
inst✝ : UniformSpace α
s : Set α
d : Set (α × α)
hd : d ∈ 𝓤 α
hd_cover : ∀ (t : Set α), Set.Finite t → ¬s ⊆ ⋃ (y : α) (_ : y ∈ t), {x | (x, y) ∈ d}
f : Filter α := ⨅ (t : Finset α), 𝓟 (s \ ⋃ (y : α) (_ : y ∈ t), {x | (x, y) ∈ d})
this✝¹ : NeBot f
this✝ : f ≤ 𝓟 s
c : Filter α
hcf : c ≤ f
hc : Cauchy c
m : Set α
hm : m ∈ c
hmd : m ×ˢ m ⊆ d
y : α
hym : y ∈ m
ys : Set α := ⋃ (y' : α) (_ : y' ∈ {y}), {x | (x, y') ∈ d}
this : c ≤ 𝓟 (s \ ys)
⊢ ∀ (a : α), a ∈ s \ ⋃ (y' : α) (_ : y' ∈ {y}), {x | (x, y') ∈ d} → a ∈ m → a ∈ ∅
[PROOFSTEP]
refine' fun x hx hxm => hx.2 _
[GOAL]
case h
α : Type u
β : Type v
inst✝ : UniformSpace α
s : Set α
d : Set (α × α)
hd : d ∈ 𝓤 α
hd_cover : ∀ (t : Set α), Set.Finite t → ¬s ⊆ ⋃ (y : α) (_ : y ∈ t), {x | (x, y) ∈ d}
f : Filter α := ⨅ (t : Finset α), 𝓟 (s \ ⋃ (y : α) (_ : y ∈ t), {x | (x, y) ∈ d})
this✝¹ : NeBot f
this✝ : f ≤ 𝓟 s
c : Filter α
hcf : c ≤ f
hc : Cauchy c
m : Set α
hm : m ∈ c
hmd : m ×ˢ m ⊆ d
y : α
hym : y ∈ m
ys : Set α := ⋃ (y' : α) (_ : y' ∈ {y}), {x | (x, y') ∈ d}
this : c ≤ 𝓟 (s \ ys)
x : α
hx : x ∈ s \ ⋃ (y' : α) (_ : y' ∈ {y}), {x | (x, y') ∈ d}
hxm : x ∈ m
⊢ x ∈ ⋃ (y' : α) (_ : y' ∈ {y}), {x | (x, y') ∈ d}
[PROOFSTEP]
simpa using hmd (mk_mem_prod hxm hym)
[GOAL]
α : Type u
β : Type v
inst✝ : UniformSpace α
s : Set α
⊢ TotallyBounded s ↔ ∀ (f : Ultrafilter α), ↑f ≤ 𝓟 s → Cauchy ↑f
[PROOFSTEP]
refine' ⟨fun hs f => f.cauchy_of_totallyBounded hs, fun H => totallyBounded_iff_filter.2 _⟩
[GOAL]
α : Type u
β : Type v
inst✝ : UniformSpace α
s : Set α
H : ∀ (f : Ultrafilter α), ↑f ≤ 𝓟 s → Cauchy ↑f
⊢ ∀ (f : Filter α), NeBot f → f ≤ 𝓟 s → ∃ c, c ≤ f ∧ Cauchy c
[PROOFSTEP]
intro f hf hfs
[GOAL]
α : Type u
β : Type v
inst✝ : UniformSpace α
s : Set α
H : ∀ (f : Ultrafilter α), ↑f ≤ 𝓟 s → Cauchy ↑f
f : Filter α
hf : NeBot f
hfs : f ≤ 𝓟 s
⊢ ∃ c, c ≤ f ∧ Cauchy c
[PROOFSTEP]
exact ⟨Ultrafilter.of f, Ultrafilter.of_le f, H _ ((Ultrafilter.of_le f).trans hfs)⟩
[GOAL]
α✝ : Type u
β : Type v
inst✝² : UniformSpace α✝
α : Type u
inst✝¹ : UniformSpace α
inst✝ : CompactSpace α
f✝ : Filter α
hf : Cauchy f✝
⊢ ∃ x, f✝ ≤ 𝓝 x
[PROOFSTEP]
simpa using (isCompact_iff_totallyBounded_isComplete.1 isCompact_univ).2 _ hf
[GOAL]
α : Type u
β : Type v
inst✝ : UniformSpace α
s : ℕ → α
hs : CauchySeq s
⊢ TotallyBounded (range s)
[PROOFSTEP]
refine' totallyBounded_iff_subset.2 fun a ha => _
[GOAL]
α : Type u
β : Type v
inst✝ : UniformSpace α
s : ℕ → α
hs : CauchySeq s
a : Set (α × α)
ha : a ∈ 𝓤 α
⊢ ∃ t, t ⊆ range s ∧ Set.Finite t ∧ range s ⊆ ⋃ (y : α) (_ : y ∈ t), {x | (x, y) ∈ a}
[PROOFSTEP]
cases' cauchySeq_iff.1 hs a ha with n hn
[GOAL]
case intro
α : Type u
β : Type v
inst✝ : UniformSpace α
s : ℕ → α
hs : CauchySeq s
a : Set (α × α)
ha : a ∈ 𝓤 α
n : ℕ
hn : ∀ (k : ℕ), k ≥ n → ∀ (l : ℕ), l ≥ n → (s k, s l) ∈ a
⊢ ∃ t, t ⊆ range s ∧ Set.Finite t ∧ range s ⊆ ⋃ (y : α) (_ : y ∈ t), {x | (x, y) ∈ a}
[PROOFSTEP]
refine' ⟨s '' {k | k ≤ n}, image_subset_range _ _, (finite_le_nat _).image _, _⟩
[GOAL]
case intro
α : Type u
β : Type v
inst✝ : UniformSpace α
s : ℕ → α
hs : CauchySeq s
a : Set (α × α)
ha : a ∈ 𝓤 α
n : ℕ
hn : ∀ (k : ℕ), k ≥ n → ∀ (l : ℕ), l ≥ n → (s k, s l) ∈ a
⊢ range s ⊆ ⋃ (y : α) (_ : y ∈ s '' {k | k ≤ n}), {x | (x, y) ∈ a}
[PROOFSTEP]
rw [range_subset_iff, biUnion_image]
[GOAL]
case intro
α : Type u
β : Type v
inst✝ : UniformSpace α
s : ℕ → α
hs : CauchySeq s
a : Set (α × α)
ha : a ∈ 𝓤 α
n : ℕ
hn : ∀ (k : ℕ), k ≥ n → ∀ (l : ℕ), l ≥ n → (s k, s l) ∈ a
⊢ ∀ (y : ℕ), s y ∈ ⋃ (y : ℕ) (_ : y ∈ {k | k ≤ n}), {x | (x, s y) ∈ a}
[PROOFSTEP]
intro m
[GOAL]
case intro
α : Type u
β : Type v
inst✝ : UniformSpace α
s : ℕ → α
hs : CauchySeq s
a : Set (α × α)
ha : a ∈ 𝓤 α
n : ℕ
hn : ∀ (k : ℕ), k ≥ n → ∀ (l : ℕ), l ≥ n → (s k, s l) ∈ a
m : ℕ
⊢ s m ∈ ⋃ (y : ℕ) (_ : y ∈ {k | k ≤ n}), {x | (x, s y) ∈ a}
[PROOFSTEP]
rw [mem_iUnion₂]
[GOAL]
case intro
α : Type u
β : Type v
inst✝ : UniformSpace α
s : ℕ → α
hs : CauchySeq s
a : Set (α × α)
ha : a ∈ 𝓤 α
n : ℕ
hn : ∀ (k : ℕ), k ≥ n → ∀ (l : ℕ), l ≥ n → (s k, s l) ∈ a
m : ℕ
⊢ ∃ i j, s m ∈ {x | (x, s i) ∈ a}
[PROOFSTEP]
cases' le_total m n with hm hm
[GOAL]
case intro.inl
α : Type u
β : Type v
inst✝ : UniformSpace α
s : ℕ → α
hs : CauchySeq s
a : Set (α × α)
ha : a ∈ 𝓤 α
n : ℕ
hn : ∀ (k : ℕ), k ≥ n → ∀ (l : ℕ), l ≥ n → (s k, s l) ∈ a
m : ℕ
hm : m ≤ n
⊢ ∃ i j, s m ∈ {x | (x, s i) ∈ a}
case intro.inr
α : Type u
β : Type v
inst✝ : UniformSpace α
s : ℕ → α
hs : CauchySeq s
a : Set (α × α)
ha : a ∈ 𝓤 α
n : ℕ
hn : ∀ (k : ℕ), k ≥ n → ∀ (l : ℕ), l ≥ n → (s k, s l) ∈ a
m : ℕ
hm : n ≤ m
⊢ ∃ i j, s m ∈ {x | (x, s i) ∈ a}
[PROOFSTEP]
exacts [⟨m, hm, refl_mem_uniformity ha⟩, ⟨n, le_refl n, hn m hm n le_rfl⟩]
[GOAL]
α : Type u
β : Type v
inst✝ : UniformSpace α
f : Filter α
hf : Cauchy f
U : ℕ → Set (α × α)
U_mem : ∀ (n : ℕ), U n ∈ 𝓤 α
U_le : ∀ (s : Set (α × α)), s ∈ 𝓤 α → ∃ n, U n ⊆ s
N m n : ℕ
hm : N ≤ m
hn : N ≤ n
p : α × α
hp : p ∈ setSeq hf U_mem m ×ˢ setSeq hf U_mem n
⊢ p ∈ U N
[PROOFSTEP]
refine' (setSeqAux hf U_mem N).2.2 ⟨_, _⟩
[GOAL]
case refine'_1
α : Type u
β : Type v
inst✝ : UniformSpace α
f : Filter α
hf : Cauchy f
U : ℕ → Set (α × α)
U_mem : ∀ (n : ℕ), U n ∈ 𝓤 α
U_le : ∀ (s : Set (α × α)), s ∈ 𝓤 α → ∃ n, U n ⊆ s
N m n : ℕ
hm : N ≤ m
hn : N ≤ n
p : α × α
hp : p ∈ setSeq hf U_mem m ×ˢ setSeq hf U_mem n
⊢ p.fst ∈ ↑(setSeqAux hf U_mem N)
[PROOFSTEP]
apply setSeq_sub_aux
[GOAL]
case refine'_2
α : Type u
β : Type v
inst✝ : UniformSpace α
f : Filter α
hf : Cauchy f
U : ℕ → Set (α × α)
U_mem : ∀ (n : ℕ), U n ∈ 𝓤 α
U_le : ∀ (s : Set (α × α)), s ∈ 𝓤 α → ∃ n, U n ⊆ s
N m n : ℕ
hm : N ≤ m
hn : N ≤ n
p : α × α
hp : p ∈ setSeq hf U_mem m ×ˢ setSeq hf U_mem n
⊢ p.snd ∈ ↑(setSeqAux hf U_mem N)
[PROOFSTEP]
apply setSeq_sub_aux
[GOAL]
case refine'_1.a
α : Type u
β : Type v
inst✝ : UniformSpace α
f : Filter α
hf : Cauchy f
U : ℕ → Set (α × α)
U_mem : ∀ (n : ℕ), U n ∈ 𝓤 α
U_le : ∀ (s : Set (α × α)), s ∈ 𝓤 α → ∃ n, U n ⊆ s
N m n : ℕ
hm : N ≤ m
hn : N ≤ n
p : α × α
hp : p ∈ setSeq hf U_mem m ×ˢ setSeq hf U_mem n
⊢ p.fst ∈ setSeq hf U_mem N
case refine'_2.a
α : Type u
β : Type v
inst✝ : UniformSpace α
f : Filter α
hf : Cauchy f
U : ℕ → Set (α × α)
U_mem : ∀ (n : ℕ), U n ∈ 𝓤 α
U_le : ∀ (s : Set (α × α)), s ∈ 𝓤 α → ∃ n, U n ⊆ s
N m n : ℕ
hm : N ≤ m
hn : N ≤ n
p : α × α
hp : p ∈ setSeq hf U_mem m ×ˢ setSeq hf U_mem n
⊢ p.snd ∈ setSeq hf U_mem N
[PROOFSTEP]
exact setSeq_mono hf U_mem hm hp.1
[GOAL]
case refine'_2.a
α : Type u
β : Type v
inst✝ : UniformSpace α
f : Filter α
hf : Cauchy f
U : ℕ → Set (α × α)
U_mem : ∀ (n : ℕ), U n ∈ 𝓤 α
U_le : ∀ (s : Set (α × α)), s ∈ 𝓤 α → ∃ n, U n ⊆ s
N m n : ℕ
hm : N ≤ m
hn : N ≤ n
p : α × α
hp : p ∈ setSeq hf U_mem m ×ˢ setSeq hf U_mem n
⊢ p.snd ∈ setSeq hf U_mem N
[PROOFSTEP]
exact setSeq_mono hf U_mem hn hp.2
[GOAL]
α : Type u
β : Type v
inst✝ : UniformSpace α
f : Filter α
hf : Cauchy f
U : ℕ → Set (α × α)
U_mem : ∀ (n : ℕ), U n ∈ 𝓤 α
U_le : ∀ (s : Set (α × α)), s ∈ 𝓤 α → ∃ n, U n ⊆ s
a : α
ha : Tendsto (seq hf U_mem) atTop (𝓝 a)
s : Set (α × α)
hs : s ∈ 𝓤 α
⊢ ∃ t, t ∈ f ∧ t ×ˢ t ⊆ s ∧ ∃ y, (a, y) ∈ s ∧ y ∈ t
[PROOFSTEP]
rcases U_le s hs with ⟨m, hm⟩
[GOAL]
case intro
α : Type u
β : Type v
inst✝ : UniformSpace α
f : Filter α
hf : Cauchy f
U : ℕ → Set (α × α)
U_mem : ∀ (n : ℕ), U n ∈ 𝓤 α
U_le : ∀ (s : Set (α × α)), s ∈ 𝓤 α → ∃ n, U n ⊆ s
a : α
ha : Tendsto (seq hf U_mem) atTop (𝓝 a)
s : Set (α × α)
hs : s ∈ 𝓤 α
m : ℕ
hm : U m ⊆ s
⊢ ∃ t, t ∈ f ∧ t ×ˢ t ⊆ s ∧ ∃ y, (a, y) ∈ s ∧ y ∈ t
[PROOFSTEP]
rcases tendsto_atTop'.1 ha _ (mem_nhds_left a (U_mem m)) with ⟨n, hn⟩
[GOAL]
case intro.intro
α : Type u
β : Type v
inst✝ : UniformSpace α
f : Filter α
hf : Cauchy f
U : ℕ → Set (α × α)
U_mem : ∀ (n : ℕ), U n ∈ 𝓤 α
U_le : ∀ (s : Set (α × α)), s ∈ 𝓤 α → ∃ n, U n ⊆ s
a : α
ha : Tendsto (seq hf U_mem) atTop (𝓝 a)
s : Set (α × α)
hs : s ∈ 𝓤 α
m : ℕ
hm : U m ⊆ s
n : ℕ
hn : ∀ (b : ℕ), b ≥ n → seq hf U_mem b ∈ {y | (a, y) ∈ U m}
⊢ ∃ t, t ∈ f ∧ t ×ˢ t ⊆ s ∧ ∃ y, (a, y) ∈ s ∧ y ∈ t
[PROOFSTEP]
refine' ⟨setSeq hf U_mem (max m n), setSeq_mem hf U_mem _, _, seq hf U_mem (max m n), _, seq_mem hf U_mem _⟩
[GOAL]
case intro.intro.refine'_1
α : Type u
β : Type v
inst✝ : UniformSpace α
f : Filter α
hf : Cauchy f
U : ℕ → Set (α × α)
U_mem : ∀ (n : ℕ), U n ∈ 𝓤 α
U_le : ∀ (s : Set (α × α)), s ∈ 𝓤 α → ∃ n, U n ⊆ s
a : α
ha : Tendsto (seq hf U_mem) atTop (𝓝 a)
s : Set (α × α)
hs : s ∈ 𝓤 α
m : ℕ
hm : U m ⊆ s
n : ℕ
hn : ∀ (b : ℕ), b ≥ n → seq hf U_mem b ∈ {y | (a, y) ∈ U m}
⊢ setSeq hf U_mem (max m n) ×ˢ setSeq hf U_mem (max m n) ⊆ s
[PROOFSTEP]
have := le_max_left m n
[GOAL]
case intro.intro.refine'_1
α : Type u
β : Type v
inst✝ : UniformSpace α
f : Filter α
hf : Cauchy f
U : ℕ → Set (α × α)
U_mem : ∀ (n : ℕ), U n ∈ 𝓤 α
U_le : ∀ (s : Set (α × α)), s ∈ 𝓤 α → ∃ n, U n ⊆ s
a : α
ha : Tendsto (seq hf U_mem) atTop (𝓝 a)
s : Set (α × α)
hs : s ∈ 𝓤 α
m : ℕ
hm : U m ⊆ s
n : ℕ
hn : ∀ (b : ℕ), b ≥ n → seq hf U_mem b ∈ {y | (a, y) ∈ U m}
this : m ≤ max m n
⊢ setSeq hf U_mem (max m n) ×ˢ setSeq hf U_mem (max m n) ⊆ s
[PROOFSTEP]
exact Set.Subset.trans (setSeq_prod_subset hf U_mem this this) hm
[GOAL]
case intro.intro.refine'_2
α : Type u
β : Type v
inst✝ : UniformSpace α
f : Filter α
hf : Cauchy f
U : ℕ → Set (α × α)
U_mem : ∀ (n : ℕ), U n ∈ 𝓤 α
U_le : ∀ (s : Set (α × α)), s ∈ 𝓤 α → ∃ n, U n ⊆ s
a : α
ha : Tendsto (seq hf U_mem) atTop (𝓝 a)
s : Set (α × α)
hs : s ∈ 𝓤 α
m : ℕ
hm : U m ⊆ s
n : ℕ
hn : ∀ (b : ℕ), b ≥ n → seq hf U_mem b ∈ {y | (a, y) ∈ U m}
⊢ (a, seq hf U_mem (max m n)) ∈ s
[PROOFSTEP]
exact hm (hn _ <| le_max_right m n)
[GOAL]
α : Type u
β : Type v
inst✝¹ : UniformSpace α
inst✝ : IsCountablyGenerated (𝓤 α)
U : ℕ → Set (α × α)
U_mem : ∀ (n : ℕ), U n ∈ 𝓤 α
HU : ∀ (u : ℕ → α), (∀ (N m n : ℕ), N ≤ m → N ≤ n → (u m, u n) ∈ U N) → ∃ a, Tendsto u atTop (𝓝 a)
⊢ CompleteSpace α
[PROOFSTEP]
obtain ⟨U', -, hU'⟩ := (𝓤 α).exists_antitone_seq
[GOAL]
case intro.intro
α : Type u
β : Type v
inst✝¹ : UniformSpace α
inst✝ : IsCountablyGenerated (𝓤 α)
U : ℕ → Set (α × α)
U_mem : ∀ (n : ℕ), U n ∈ 𝓤 α
HU : ∀ (u : ℕ → α), (∀ (N m n : ℕ), N ≤ m → N ≤ n → (u m, u n) ∈ U N) → ∃ a, Tendsto u atTop (𝓝 a)
U' : ℕ → Set (α × α)
hU' : ∀ {s : Set (α × α)}, s ∈ 𝓤 α ↔ ∃ i, U' i ⊆ s
⊢ CompleteSpace α
[PROOFSTEP]
have Hmem : ∀ n, U n ∩ U' n ∈ 𝓤 α := fun n => inter_mem (U_mem n) (hU'.2 ⟨n, Subset.refl _⟩)
[GOAL]
case intro.intro
α : Type u
β : Type v
inst✝¹ : UniformSpace α
inst✝ : IsCountablyGenerated (𝓤 α)
U : ℕ → Set (α × α)
U_mem : ∀ (n : ℕ), U n ∈ 𝓤 α
HU : ∀ (u : ℕ → α), (∀ (N m n : ℕ), N ≤ m → N ≤ n → (u m, u n) ∈ U N) → ∃ a, Tendsto u atTop (𝓝 a)
U' : ℕ → Set (α × α)
hU' : ∀ {s : Set (α × α)}, s ∈ 𝓤 α ↔ ∃ i, U' i ⊆ s
Hmem : ∀ (n : ℕ), U n ∩ U' n ∈ 𝓤 α
⊢ CompleteSpace α
[PROOFSTEP]
refine ⟨fun hf => (HU (seq hf Hmem) fun N m n hm hn => ?_).imp <| le_nhds_of_seq_tendsto_nhds _ _ fun s hs => ?_⟩
[GOAL]
case intro.intro.refine_1
α : Type u
β : Type v
inst✝¹ : UniformSpace α
inst✝ : IsCountablyGenerated (𝓤 α)
U : ℕ → Set (α × α)
U_mem : ∀ (n : ℕ), U n ∈ 𝓤 α
HU : ∀ (u : ℕ → α), (∀ (N m n : ℕ), N ≤ m → N ≤ n → (u m, u n) ∈ U N) → ∃ a, Tendsto u atTop (𝓝 a)
U' : ℕ → Set (α × α)
hU' : ∀ {s : Set (α × α)}, s ∈ 𝓤 α ↔ ∃ i, U' i ⊆ s
Hmem : ∀ (n : ℕ), U n ∩ U' n ∈ 𝓤 α
f✝ : Filter α
hf : Cauchy f✝
N m n : ℕ
hm : N ≤ m
hn : N ≤ n
⊢ (SequentiallyComplete.seq hf Hmem m, SequentiallyComplete.seq hf Hmem n) ∈ U N
[PROOFSTEP]
exact inter_subset_left _ _ (seq_pair_mem hf Hmem hm hn)
[GOAL]
case intro.intro.refine_2
α : Type u
β : Type v
inst✝¹ : UniformSpace α
inst✝ : IsCountablyGenerated (𝓤 α)
U : ℕ → Set (α × α)
U_mem : ∀ (n : ℕ), U n ∈ 𝓤 α
HU : ∀ (u : ℕ → α), (∀ (N m n : ℕ), N ≤ m → N ≤ n → (u m, u n) ∈ U N) → ∃ a, Tendsto u atTop (𝓝 a)
U' : ℕ → Set (α × α)
hU' : ∀ {s : Set (α × α)}, s ∈ 𝓤 α ↔ ∃ i, U' i ⊆ s
Hmem : ∀ (n : ℕ), U n ∩ U' n ∈ 𝓤 α
f✝ : Filter α
hf : Cauchy f✝
s : Set (α × α)
hs : s ∈ 𝓤 α
⊢ ∃ n, U n ∩ U' n ⊆ s
[PROOFSTEP]
rcases hU'.1 hs with ⟨N, hN⟩
[GOAL]
case intro.intro.refine_2.intro
α : Type u
β : Type v
inst✝¹ : UniformSpace α
inst✝ : IsCountablyGenerated (𝓤 α)
U : ℕ → Set (α × α)
U_mem : ∀ (n : ℕ), U n ∈ 𝓤 α
HU : ∀ (u : ℕ → α), (∀ (N m n : ℕ), N ≤ m → N ≤ n → (u m, u n) ∈ U N) → ∃ a, Tendsto u atTop (𝓝 a)
U' : ℕ → Set (α × α)
hU' : ∀ {s : Set (α × α)}, s ∈ 𝓤 α ↔ ∃ i, U' i ⊆ s
Hmem : ∀ (n : ℕ), U n ∩ U' n ∈ 𝓤 α
f✝ : Filter α
hf : Cauchy f✝
s : Set (α × α)
hs : s ∈ 𝓤 α
N : ℕ
hN : U' N ⊆ s
⊢ ∃ n, U n ∩ U' n ⊆ s
[PROOFSTEP]
exact ⟨N, Subset.trans (inter_subset_right _ _) hN⟩
[GOAL]
α : Type u
β : Type v
inst✝¹ : UniformSpace α
inst✝ : IsCountablyGenerated (𝓤 α)
a : α
⊢ IsCountablyGenerated (𝓝 a)
[PROOFSTEP]
rw [nhds_eq_comap_uniformity]
[GOAL]
α : Type u
β : Type v
inst✝¹ : UniformSpace α
inst✝ : IsCountablyGenerated (𝓤 α)
a : α
⊢ IsCountablyGenerated (Filter.comap (Prod.mk a) (𝓤 α))
[PROOFSTEP]
infer_instance
[GOAL]
α : Type u
β : Type v
inst✝² : UniformSpace α
inst✝¹ : IsCountablyGenerated (𝓤 α)
inst✝ : SeparableSpace α
⊢ SecondCountableTopology α
[PROOFSTEP]
rcases exists_countable_dense α with ⟨s, hsc, hsd⟩
[GOAL]
case intro.intro
α : Type u
β : Type v
inst✝² : UniformSpace α
inst✝¹ : IsCountablyGenerated (𝓤 α)
inst✝ : SeparableSpace α
s : Set α
hsc : Set.Countable s
hsd : Dense s
⊢ SecondCountableTopology α
[PROOFSTEP]
obtain
  ⟨t : ℕ → Set (α × α), hto : ∀ i : ℕ, t i ∈ (𝓤 α).sets ∧ IsOpen (t i) ∧ SymmetricRel (t i), h_basis :
    (𝓤 α).HasAntitoneBasis t⟩ :=
  (@uniformity_hasBasis_open_symmetric α _).exists_antitone_subbasis
[GOAL]
case intro.intro.intro.intro
α : Type u
β : Type v
inst✝² : UniformSpace α
inst✝¹ : IsCountablyGenerated (𝓤 α)
inst✝ : SeparableSpace α
s : Set α
hsc : Set.Countable s
hsd : Dense s
t : ℕ → Set (α × α)
hto : ∀ (i : ℕ), t i ∈ (𝓤 α).sets ∧ IsOpen (t i) ∧ SymmetricRel (t i)
h_basis : HasAntitoneBasis (𝓤 α) t
⊢ SecondCountableTopology α
[PROOFSTEP]
choose ht_mem hto hts using hto
[GOAL]
case intro.intro.intro.intro
α : Type u
β : Type v
inst✝² : UniformSpace α
inst✝¹ : IsCountablyGenerated (𝓤 α)
inst✝ : SeparableSpace α
s : Set α
hsc : Set.Countable s
hsd : Dense s
t : ℕ → Set (α × α)
h_basis : HasAntitoneBasis (𝓤 α) t
ht_mem : ∀ (i : ℕ), t i ∈ (𝓤 α).sets
hto : ∀ (i : ℕ), IsOpen (t i)
hts : ∀ (i : ℕ), SymmetricRel (t i)
⊢ SecondCountableTopology α
[PROOFSTEP]
refine' ⟨⟨⋃ x ∈ s, range fun k => ball x (t k), hsc.biUnion fun x _ => countable_range _, _⟩⟩
[GOAL]
case intro.intro.intro.intro
α : Type u
β : Type v
inst✝² : UniformSpace α
inst✝¹ : IsCountablyGenerated (𝓤 α)
inst✝ : SeparableSpace α
s : Set α
hsc : Set.Countable s
hsd : Dense s
t : ℕ → Set (α × α)
h_basis : HasAntitoneBasis (𝓤 α) t
ht_mem : ∀ (i : ℕ), t i ∈ (𝓤 α).sets
hto : ∀ (i : ℕ), IsOpen (t i)
hts : ∀ (i : ℕ), SymmetricRel (t i)
⊢ toTopologicalSpace = generateFrom (⋃ (x : α) (_ : x ∈ s), range fun k => ball x (t k))
[PROOFSTEP]
refine' (isTopologicalBasis_of_open_of_nhds _ _).eq_generateFrom
[GOAL]
case intro.intro.intro.intro.refine'_1
α : Type u
β : Type v
inst✝² : UniformSpace α
inst✝¹ : IsCountablyGenerated (𝓤 α)
inst✝ : SeparableSpace α
s : Set α
hsc : Set.Countable s
hsd : Dense s
t : ℕ → Set (α × α)
h_basis : HasAntitoneBasis (𝓤 α) t
ht_mem : ∀ (i : ℕ), t i ∈ (𝓤 α).sets
hto : ∀ (i : ℕ), IsOpen (t i)
hts : ∀ (i : ℕ), SymmetricRel (t i)
⊢ ∀ (u : Set α), (u ∈ ⋃ (x : α) (_ : x ∈ s), range fun k => ball x (t k)) → IsOpen u
[PROOFSTEP]
simp only [mem_iUnion₂, mem_range]
[GOAL]
case intro.intro.intro.intro.refine'_1
α : Type u
β : Type v
inst✝² : UniformSpace α
inst✝¹ : IsCountablyGenerated (𝓤 α)
inst✝ : SeparableSpace α
s : Set α
hsc : Set.Countable s
hsd : Dense s
t : ℕ → Set (α × α)
h_basis : HasAntitoneBasis (𝓤 α) t
ht_mem : ∀ (i : ℕ), t i ∈ (𝓤 α).sets
hto : ∀ (i : ℕ), IsOpen (t i)
hts : ∀ (i : ℕ), SymmetricRel (t i)
⊢ ∀ (u : Set α), (∃ i h y, ball i (t y) = u) → IsOpen u
[PROOFSTEP]
rintro _ ⟨x, _, k, rfl⟩
[GOAL]
case intro.intro.intro.intro.refine'_1.intro.intro.intro
α : Type u
β : Type v
inst✝² : UniformSpace α
inst✝¹ : IsCountablyGenerated (𝓤 α)
inst✝ : SeparableSpace α
s : Set α
hsc : Set.Countable s
hsd : Dense s
t : ℕ → Set (α × α)
h_basis : HasAntitoneBasis (𝓤 α) t
ht_mem : ∀ (i : ℕ), t i ∈ (𝓤 α).sets
hto : ∀ (i : ℕ), IsOpen (t i)
hts : ∀ (i : ℕ), SymmetricRel (t i)
x : α
w✝ : x ∈ s
k : ℕ
⊢ IsOpen (ball x (t k))
[PROOFSTEP]
exact isOpen_ball x (hto k)
[GOAL]
case intro.intro.intro.intro.refine'_2
α : Type u
β : Type v
inst✝² : UniformSpace α
inst✝¹ : IsCountablyGenerated (𝓤 α)
inst✝ : SeparableSpace α
s : Set α
hsc : Set.Countable s
hsd : Dense s
t : ℕ → Set (α × α)
h_basis : HasAntitoneBasis (𝓤 α) t
ht_mem : ∀ (i : ℕ), t i ∈ (𝓤 α).sets
hto : ∀ (i : ℕ), IsOpen (t i)
hts : ∀ (i : ℕ), SymmetricRel (t i)
⊢ ∀ (a : α) (u : Set α),
    a ∈ u → IsOpen u → ∃ v, (v ∈ ⋃ (x : α) (_ : x ∈ s), range fun k => ball x (t k)) ∧ a ∈ v ∧ v ⊆ u
[PROOFSTEP]
intro x V hxV hVo
[GOAL]
case intro.intro.intro.intro.refine'_2
α : Type u
β : Type v
inst✝² : UniformSpace α
inst✝¹ : IsCountablyGenerated (𝓤 α)
inst✝ : SeparableSpace α
s : Set α
hsc : Set.Countable s
hsd : Dense s
t : ℕ → Set (α × α)
h_basis : HasAntitoneBasis (𝓤 α) t
ht_mem : ∀ (i : ℕ), t i ∈ (𝓤 α).sets
hto : ∀ (i : ℕ), IsOpen (t i)
hts : ∀ (i : ℕ), SymmetricRel (t i)
x : α
V : Set α
hxV : x ∈ V
hVo : IsOpen V
⊢ ∃ v, (v ∈ ⋃ (x : α) (_ : x ∈ s), range fun k => ball x (t k)) ∧ x ∈ v ∧ v ⊆ V
[PROOFSTEP]
simp only [mem_iUnion₂, mem_range, exists_prop]
[GOAL]
case intro.intro.intro.intro.refine'_2
α : Type u
β : Type v
inst✝² : UniformSpace α
inst✝¹ : IsCountablyGenerated (𝓤 α)
inst✝ : SeparableSpace α
s : Set α
hsc : Set.Countable s
hsd : Dense s
t : ℕ → Set (α × α)
h_basis : HasAntitoneBasis (𝓤 α) t
ht_mem : ∀ (i : ℕ), t i ∈ (𝓤 α).sets
hto : ∀ (i : ℕ), IsOpen (t i)
hts : ∀ (i : ℕ), SymmetricRel (t i)
x : α
V : Set α
hxV : x ∈ V
hVo : IsOpen V
⊢ ∃ v, (∃ i, i ∈ s ∧ ∃ y, ball i (t y) = v) ∧ x ∈ v ∧ v ⊆ V
[PROOFSTEP]
rcases UniformSpace.mem_nhds_iff.1 (IsOpen.mem_nhds hVo hxV) with ⟨U, hU, hUV⟩
[GOAL]
case intro.intro.intro.intro.refine'_2.intro.intro
α : Type u
β : Type v
inst✝² : UniformSpace α
inst✝¹ : IsCountablyGenerated (𝓤 α)
inst✝ : SeparableSpace α
s : Set α
hsc : Set.Countable s
hsd : Dense s
t : ℕ → Set (α × α)
h_basis : HasAntitoneBasis (𝓤 α) t
ht_mem : ∀ (i : ℕ), t i ∈ (𝓤 α).sets
hto : ∀ (i : ℕ), IsOpen (t i)
hts : ∀ (i : ℕ), SymmetricRel (t i)
x : α
V : Set α
hxV : x ∈ V
hVo : IsOpen V
U : Set (α × α)
hU : U ∈ 𝓤 α
hUV : ball x U ⊆ V
⊢ ∃ v, (∃ i, i ∈ s ∧ ∃ y, ball i (t y) = v) ∧ x ∈ v ∧ v ⊆ V
[PROOFSTEP]
rcases comp_symm_of_uniformity hU with ⟨U', hU', _, hUU'⟩
[GOAL]
case intro.intro.intro.intro.refine'_2.intro.intro.intro.intro.intro
α : Type u
β : Type v
inst✝² : UniformSpace α
inst✝¹ : IsCountablyGenerated (𝓤 α)
inst✝ : SeparableSpace α
s : Set α
hsc : Set.Countable s
hsd : Dense s
t : ℕ → Set (α × α)
h_basis : HasAntitoneBasis (𝓤 α) t
ht_mem : ∀ (i : ℕ), t i ∈ (𝓤 α).sets
hto : ∀ (i : ℕ), IsOpen (t i)
hts : ∀ (i : ℕ), SymmetricRel (t i)
x : α
V : Set α
hxV : x ∈ V
hVo : IsOpen V
U : Set (α × α)
hU : U ∈ 𝓤 α
hUV : ball x U ⊆ V
U' : Set (α × α)
hU' : U' ∈ 𝓤 α
left✝ : ∀ {a b : α}, (a, b) ∈ U' → (b, a) ∈ U'
hUU' : U' ○ U' ⊆ U
⊢ ∃ v, (∃ i, i ∈ s ∧ ∃ y, ball i (t y) = v) ∧ x ∈ v ∧ v ⊆ V
[PROOFSTEP]
rcases h_basis.toHasBasis.mem_iff.1 hU' with ⟨k, -, hk⟩
[GOAL]
case intro.intro.intro.intro.refine'_2.intro.intro.intro.intro.intro.intro.intro
α : Type u
β : Type v
inst✝² : UniformSpace α
inst✝¹ : IsCountablyGenerated (𝓤 α)
inst✝ : SeparableSpace α
s : Set α
hsc : Set.Countable s
hsd : Dense s
t : ℕ → Set (α × α)
h_basis : HasAntitoneBasis (𝓤 α) t
ht_mem : ∀ (i : ℕ), t i ∈ (𝓤 α).sets
hto : ∀ (i : ℕ), IsOpen (t i)
hts : ∀ (i : ℕ), SymmetricRel (t i)
x : α
V : Set α
hxV : x ∈ V
hVo : IsOpen V
U : Set (α × α)
hU : U ∈ 𝓤 α
hUV : ball x U ⊆ V
U' : Set (α × α)
hU' : U' ∈ 𝓤 α
left✝ : ∀ {a b : α}, (a, b) ∈ U' → (b, a) ∈ U'
hUU' : U' ○ U' ⊆ U
k : ℕ
hk : t k ⊆ U'
⊢ ∃ v, (∃ i, i ∈ s ∧ ∃ y, ball i (t y) = v) ∧ x ∈ v ∧ v ⊆ V
[PROOFSTEP]
rcases hsd.inter_open_nonempty (ball x <| t k) (isOpen_ball x (hto k)) ⟨x, UniformSpace.mem_ball_self _ (ht_mem k)⟩ with
  ⟨y, hxy, hys⟩
[GOAL]
case intro.intro.intro.intro.refine'_2.intro.intro.intro.intro.intro.intro.intro.intro.intro
α : Type u
β : Type v
inst✝² : UniformSpace α
inst✝¹ : IsCountablyGenerated (𝓤 α)
inst✝ : SeparableSpace α
s : Set α
hsc : Set.Countable s
hsd : Dense s
t : ℕ → Set (α × α)
h_basis : HasAntitoneBasis (𝓤 α) t
ht_mem : ∀ (i : ℕ), t i ∈ (𝓤 α).sets
hto : ∀ (i : ℕ), IsOpen (t i)
hts : ∀ (i : ℕ), SymmetricRel (t i)
x : α
V : Set α
hxV : x ∈ V
hVo : IsOpen V
U : Set (α × α)
hU : U ∈ 𝓤 α
hUV : ball x U ⊆ V
U' : Set (α × α)
hU' : U' ∈ 𝓤 α
left✝ : ∀ {a b : α}, (a, b) ∈ U' → (b, a) ∈ U'
hUU' : U' ○ U' ⊆ U
k : ℕ
hk : t k ⊆ U'
y : α
hxy : y ∈ ball x (t k)
hys : y ∈ s
⊢ ∃ v, (∃ i, i ∈ s ∧ ∃ y, ball i (t y) = v) ∧ x ∈ v ∧ v ⊆ V
[PROOFSTEP]
refine' ⟨_, ⟨y, hys, k, rfl⟩, (hts k).subset hxy, fun z hz => _⟩
[GOAL]
case intro.intro.intro.intro.refine'_2.intro.intro.intro.intro.intro.intro.intro.intro.intro
α : Type u
β : Type v
inst✝² : UniformSpace α
inst✝¹ : IsCountablyGenerated (𝓤 α)
inst✝ : SeparableSpace α
s : Set α
hsc : Set.Countable s
hsd : Dense s
t : ℕ → Set (α × α)
h_basis : HasAntitoneBasis (𝓤 α) t
ht_mem : ∀ (i : ℕ), t i ∈ (𝓤 α).sets
hto : ∀ (i : ℕ), IsOpen (t i)
hts : ∀ (i : ℕ), SymmetricRel (t i)
x : α
V : Set α
hxV : x ∈ V
hVo : IsOpen V
U : Set (α × α)
hU : U ∈ 𝓤 α
hUV : ball x U ⊆ V
U' : Set (α × α)
hU' : U' ∈ 𝓤 α
left✝ : ∀ {a b : α}, (a, b) ∈ U' → (b, a) ∈ U'
hUU' : U' ○ U' ⊆ U
k : ℕ
hk : t k ⊆ U'
y : α
hxy : y ∈ ball x (t k)
hys : y ∈ s
z : α
hz : z ∈ ball y (t k)
⊢ z ∈ V
[PROOFSTEP]
exact hUV (ball_subset_of_comp_subset (hk hxy) hUU' (hk hz))
