Theorem: totallyBounded_iff_filter
File: Mathlib/Topology/UniformSpace/Cauchy.lean

tactic: constructor
state_before: α : Type u
β : Type v
uniformSpace : UniformSpace α
s : Set α
⊢ TotallyBounded s ↔ ∀ (f : Filter α), f.NeBot → f ≤ 𝓟 s → ∃ c ≤ f, Cauchy c
state_after: case mp
α : Type u
β : Type v
uniformSpace : UniformSpace α
s : Set α
⊢ TotallyBounded s → ∀ (f : Filter α), f.NeBot → f ≤ 𝓟 s → ∃ c ≤ f, Cauchy c

case mpr
α : Type u
β : Type v
uniformSpace : UniformSpace α
s : Set α
⊢ (∀ (f : Filter α), f.NeBot → f ≤ 𝓟 s → ∃ c ≤ f, Cauchy c) → TotallyBounded s

tactic: 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)⟩
state_before: case mp
α : Type u
β : Type v
uniformSpace : UniformSpace α
s : Set α
⊢ TotallyBounded s → ∀ (f : Filter α), f.NeBot → f ≤ 𝓟 s → ∃ c ≤ f, Cauchy c
state_after: no goals

tactic: intro H d hd
state_before: case mpr
α : Type u
β : Type v
uniformSpace : UniformSpace α
s : Set α
⊢ (∀ (f : Filter α), f.NeBot → f ≤ 𝓟 s → ∃ c ≤ f, Cauchy c) → TotallyBounded s
state_after: case mpr
α : Type u
β : Type v
uniformSpace : UniformSpace α
s : Set α
H : ∀ (f : Filter α), f.NeBot → f ≤ 𝓟 s → ∃ c ≤ f, Cauchy c
d : Set (α × α)
hd : d ∈ 𝓤 α
⊢ ∃ t, t.Finite ∧ s ⊆ ⋃ y ∈ t, {x | (x, y) ∈ d}

tactic: contrapose! H with hd_cover
state_before: case mpr
α : Type u
β : Type v
uniformSpace : UniformSpace α
s : Set α
H : ∀ (f : Filter α), f.NeBot → f ≤ 𝓟 s → ∃ c ≤ f, Cauchy c
d : Set (α × α)
hd : d ∈ 𝓤 α
⊢ ∃ t, t.Finite ∧ s ⊆ ⋃ y ∈ t, {x | (x, y) ∈ d}
state_after: case mpr
α : Type u
β : Type v
uniformSpace : UniformSpace α
s : Set α
d : Set (α × α)
hd : d ∈ 𝓤 α
hd_cover : ∀ (t : Set α), t.Finite → ¬s ⊆ ⋃ y ∈ t, {x | (x, y) ∈ d}
⊢ ∃ f, f.NeBot ∧ f ≤ 𝓟 s ∧ ∀ c ≤ f, ¬Cauchy c

tactic: set f := ⨅ t : Finset α, 𝓟 (s \ ⋃ y ∈ t, { x | (x, y) ∈ d })
state_before: case mpr
α : Type u
β : Type v
uniformSpace : UniformSpace α
s : Set α
d : Set (α × α)
hd : d ∈ 𝓤 α
hd_cover : ∀ (t : Set α), t.Finite → ¬s ⊆ ⋃ y ∈ t, {x | (x, y) ∈ d}
⊢ ∃ f, f.NeBot ∧ f ≤ 𝓟 s ∧ ∀ c ≤ f, ¬Cauchy c
state_after: case mpr
α : Type u
β : Type v
uniformSpace : UniformSpace α
s : Set α
d : Set (α × α)
hd : d ∈ 𝓤 α
hd_cover : ∀ (t : Set α), t.Finite → ¬s ⊆ ⋃ y ∈ t, {x | (x, y) ∈ d}
f : Filter α := ⨅ t, 𝓟 (s \ ⋃ y ∈ t, {x | (x, y) ∈ d})
⊢ ∃ f, f.NeBot ∧ f ≤ 𝓟 s ∧ ∀ c ≤ f, ¬Cauchy c

tactic: have hb : HasAntitoneBasis f fun t : Finset α ↦ s \ ⋃ y ∈ t, { x | (x, y) ∈ d } :=
  .iInf_principal fun _ _ ↦ diff_subset_diff_right ∘ biUnion_subset_biUnion_left
state_before: case mpr
α : Type u
β : Type v
uniformSpace : UniformSpace α
s : Set α
d : Set (α × α)
hd : d ∈ 𝓤 α
hd_cover : ∀ (t : Set α), t.Finite → ¬s ⊆ ⋃ y ∈ t, {x | (x, y) ∈ d}
f : Filter α := ⨅ t, 𝓟 (s \ ⋃ y ∈ t, {x | (x, y) ∈ d})
⊢ ∃ f, f.NeBot ∧ f ≤ 𝓟 s ∧ ∀ c ≤ f, ¬Cauchy c
state_after: case mpr
α : Type u
β : Type v
uniformSpace : UniformSpace α
s : Set α
d : Set (α × α)
hd : d ∈ 𝓤 α
hd_cover : ∀ (t : Set α), t.Finite → ¬s ⊆ ⋃ y ∈ t, {x | (x, y) ∈ d}
f : Filter α := ⨅ t, 𝓟 (s \ ⋃ y ∈ t, {x | (x, y) ∈ d})
hb : f.HasAntitoneBasis fun t => s \ ⋃ y ∈ t, {x | (x, y) ∈ d}
⊢ ∃ f, f.NeBot ∧ f ≤ 𝓟 s ∧ ∀ c ≤ f, ¬Cauchy c

tactic: have : Filter.NeBot f := hb.1.neBot_iff.2 fun _ ↦
  nonempty_diff.2 <| hd_cover _ (Finset.finite_toSet _)
state_before: case mpr
α : Type u
β : Type v
uniformSpace : UniformSpace α
s : Set α
d : Set (α × α)
hd : d ∈ 𝓤 α
hd_cover : ∀ (t : Set α), t.Finite → ¬s ⊆ ⋃ y ∈ t, {x | (x, y) ∈ d}
f : Filter α := ⨅ t, 𝓟 (s \ ⋃ y ∈ t, {x | (x, y) ∈ d})
hb : f.HasAntitoneBasis fun t => s \ ⋃ y ∈ t, {x | (x, y) ∈ d}
⊢ ∃ f, f.NeBot ∧ f ≤ 𝓟 s ∧ ∀ c ≤ f, ¬Cauchy c
state_after: case mpr
α : Type u
β : Type v
uniformSpace : UniformSpace α
s : Set α
d : Set (α × α)
hd : d ∈ 𝓤 α
hd_cover : ∀ (t : Set α), t.Finite → ¬s ⊆ ⋃ y ∈ t, {x | (x, y) ∈ d}
f : Filter α := ⨅ t, 𝓟 (s \ ⋃ y ∈ t, {x | (x, y) ∈ d})
hb : f.HasAntitoneBasis fun t => s \ ⋃ y ∈ t, {x | (x, y) ∈ d}
this : f.NeBot
⊢ ∃ f, f.NeBot ∧ f ≤ 𝓟 s ∧ ∀ c ≤ f, ¬Cauchy c

tactic: have : f ≤ 𝓟 s := iInf_le_of_le ∅ (by simp)
state_before: case mpr
α : Type u
β : Type v
uniformSpace : UniformSpace α
s : Set α
d : Set (α × α)
hd : d ∈ 𝓤 α
hd_cover : ∀ (t : Set α), t.Finite → ¬s ⊆ ⋃ y ∈ t, {x | (x, y) ∈ d}
f : Filter α := ⨅ t, 𝓟 (s \ ⋃ y ∈ t, {x | (x, y) ∈ d})
hb : f.HasAntitoneBasis fun t => s \ ⋃ y ∈ t, {x | (x, y) ∈ d}
this : f.NeBot
⊢ ∃ f, f.NeBot ∧ f ≤ 𝓟 s ∧ ∀ c ≤ f, ¬Cauchy c
state_after: case mpr
α : Type u
β : Type v
uniformSpace : UniformSpace α
s : Set α
d : Set (α × α)
hd : d ∈ 𝓤 α
hd_cover : ∀ (t : Set α), t.Finite → ¬s ⊆ ⋃ y ∈ t, {x | (x, y) ∈ d}
f : Filter α := ⨅ t, 𝓟 (s \ ⋃ y ∈ t, {x | (x, y) ∈ d})
hb : f.HasAntitoneBasis fun t => s \ ⋃ y ∈ t, {x | (x, y) ∈ d}
this✝ : f.NeBot
this : f ≤ 𝓟 s
⊢ ∃ f, f.NeBot ∧ f ≤ 𝓟 s ∧ ∀ c ≤ f, ¬Cauchy c

tactic: refine ⟨f, ‹_›, ‹_›, fun c hcf hc => ?_⟩
state_before: case mpr
α : Type u
β : Type v
uniformSpace : UniformSpace α
s : Set α
d : Set (α × α)
hd : d ∈ 𝓤 α
hd_cover : ∀ (t : Set α), t.Finite → ¬s ⊆ ⋃ y ∈ t, {x | (x, y) ∈ d}
f : Filter α := ⨅ t, 𝓟 (s \ ⋃ y ∈ t, {x | (x, y) ∈ d})
hb : f.HasAntitoneBasis fun t => s \ ⋃ y ∈ t, {x | (x, y) ∈ d}
this✝ : f.NeBot
this : f ≤ 𝓟 s
⊢ ∃ f, f.NeBot ∧ f ≤ 𝓟 s ∧ ∀ c ≤ f, ¬Cauchy c
state_after: case mpr
α : Type u
β : Type v
uniformSpace : UniformSpace α
s : Set α
d : Set (α × α)
hd : d ∈ 𝓤 α
hd_cover : ∀ (t : Set α), t.Finite → ¬s ⊆ ⋃ y ∈ t, {x | (x, y) ∈ d}
f : Filter α := ⨅ t, 𝓟 (s \ ⋃ y ∈ t, {x | (x, y) ∈ d})
hb : f.HasAntitoneBasis fun t => s \ ⋃ y ∈ t, {x | (x, y) ∈ d}
this✝ : f.NeBot
this : f ≤ 𝓟 s
c : Filter α
hcf : c ≤ f
hc : Cauchy c
⊢ False

tactic: rcases mem_prod_same_iff.1 (hc.2 hd) with ⟨m, hm, hmd⟩
state_before: case mpr
α : Type u
β : Type v
uniformSpace : UniformSpace α
s : Set α
d : Set (α × α)
hd : d ∈ 𝓤 α
hd_cover : ∀ (t : Set α), t.Finite → ¬s ⊆ ⋃ y ∈ t, {x | (x, y) ∈ d}
f : Filter α := ⨅ t, 𝓟 (s \ ⋃ y ∈ t, {x | (x, y) ∈ d})
hb : f.HasAntitoneBasis fun t => s \ ⋃ y ∈ t, {x | (x, y) ∈ d}
this✝ : f.NeBot
this : f ≤ 𝓟 s
c : Filter α
hcf : c ≤ f
hc : Cauchy c
⊢ False
state_after: case mpr.intro.intro
α : Type u
β : Type v
uniformSpace : UniformSpace α
s : Set α
d : Set (α × α)
hd : d ∈ 𝓤 α
hd_cover : ∀ (t : Set α), t.Finite → ¬s ⊆ ⋃ y ∈ t, {x | (x, y) ∈ d}
f : Filter α := ⨅ t, 𝓟 (s \ ⋃ y ∈ t, {x | (x, y) ∈ d})
hb : f.HasAntitoneBasis fun t => s \ ⋃ y ∈ t, {x | (x, y) ∈ d}
this✝ : f.NeBot
this : f ≤ 𝓟 s
c : Filter α
hcf : c ≤ f
hc : Cauchy c
m : Set α
hm : m ∈ c
hmd : m ×ˢ m ⊆ d
⊢ False

tactic: rcases hc.1.nonempty_of_mem hm with ⟨y, hym⟩
state_before: case mpr.intro.intro
α : Type u
β : Type v
uniformSpace : UniformSpace α
s : Set α
d : Set (α × α)
hd : d ∈ 𝓤 α
hd_cover : ∀ (t : Set α), t.Finite → ¬s ⊆ ⋃ y ∈ t, {x | (x, y) ∈ d}
f : Filter α := ⨅ t, 𝓟 (s \ ⋃ y ∈ t, {x | (x, y) ∈ d})
hb : f.HasAntitoneBasis fun t => s \ ⋃ y ∈ t, {x | (x, y) ∈ d}
this✝ : f.NeBot
this : f ≤ 𝓟 s
c : Filter α
hcf : c ≤ f
hc : Cauchy c
m : Set α
hm : m ∈ c
hmd : m ×ˢ m ⊆ d
⊢ False
state_after: case mpr.intro.intro.intro
α : Type u
β : Type v
uniformSpace : UniformSpace α
s : Set α
d : Set (α × α)
hd : d ∈ 𝓤 α
hd_cover : ∀ (t : Set α), t.Finite → ¬s ⊆ ⋃ y ∈ t, {x | (x, y) ∈ d}
f : Filter α := ⨅ t, 𝓟 (s \ ⋃ y ∈ t, {x | (x, y) ∈ d})
hb : f.HasAntitoneBasis fun t => s \ ⋃ y ∈ t, {x | (x, y) ∈ d}
this✝ : f.NeBot
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

tactic: have : s \ {x | (x, y) ∈ d} ∈ c := by simpa using hcf (hb.mem {y})
state_before: case mpr.intro.intro.intro
α : Type u
β : Type v
uniformSpace : UniformSpace α
s : Set α
d : Set (α × α)
hd : d ∈ 𝓤 α
hd_cover : ∀ (t : Set α), t.Finite → ¬s ⊆ ⋃ y ∈ t, {x | (x, y) ∈ d}
f : Filter α := ⨅ t, 𝓟 (s \ ⋃ y ∈ t, {x | (x, y) ∈ d})
hb : f.HasAntitoneBasis fun t => s \ ⋃ y ∈ t, {x | (x, y) ∈ d}
this✝ : f.NeBot
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
state_after: case mpr.intro.intro.intro
α : Type u
β : Type v
uniformSpace : UniformSpace α
s : Set α
d : Set (α × α)
hd : d ∈ 𝓤 α
hd_cover : ∀ (t : Set α), t.Finite → ¬s ⊆ ⋃ y ∈ t, {x | (x, y) ∈ d}
f : Filter α := ⨅ t, 𝓟 (s \ ⋃ y ∈ t, {x | (x, y) ∈ d})
hb : f.HasAntitoneBasis fun t => s \ ⋃ y ∈ t, {x | (x, y) ∈ d}
this✝¹ : f.NeBot
this✝ : f ≤ 𝓟 s
c : Filter α
hcf : c ≤ f
hc : Cauchy c
m : Set α
hm : m ∈ c
hmd : m ×ˢ m ⊆ d
y : α
hym : y ∈ m
this : s \ {x | (x, y) ∈ d} ∈ c
⊢ False

tactic: rcases hc.1.nonempty_of_mem (inter_mem hm this) with ⟨z, hzm, -, hyz⟩
state_before: case mpr.intro.intro.intro
α : Type u
β : Type v
uniformSpace : UniformSpace α
s : Set α
d : Set (α × α)
hd : d ∈ 𝓤 α
hd_cover : ∀ (t : Set α), t.Finite → ¬s ⊆ ⋃ y ∈ t, {x | (x, y) ∈ d}
f : Filter α := ⨅ t, 𝓟 (s \ ⋃ y ∈ t, {x | (x, y) ∈ d})
hb : f.HasAntitoneBasis fun t => s \ ⋃ y ∈ t, {x | (x, y) ∈ d}
this✝¹ : f.NeBot
this✝ : f ≤ 𝓟 s
c : Filter α
hcf : c ≤ f
hc : Cauchy c
m : Set α
hm : m ∈ c
hmd : m ×ˢ m ⊆ d
y : α
hym : y ∈ m
this : s \ {x | (x, y) ∈ d} ∈ c
⊢ False
state_after: case mpr.intro.intro.intro.intro.intro.intro
α : Type u
β : Type v
uniformSpace : UniformSpace α
s : Set α
d : Set (α × α)
hd : d ∈ 𝓤 α
hd_cover : ∀ (t : Set α), t.Finite → ¬s ⊆ ⋃ y ∈ t, {x | (x, y) ∈ d}
f : Filter α := ⨅ t, 𝓟 (s \ ⋃ y ∈ t, {x | (x, y) ∈ d})
hb : f.HasAntitoneBasis fun t => s \ ⋃ y ∈ t, {x | (x, y) ∈ d}
this✝¹ : f.NeBot
this✝ : f ≤ 𝓟 s
c : Filter α
hcf : c ≤ f
hc : Cauchy c
m : Set α
hm : m ∈ c
hmd : m ×ˢ m ⊆ d
y : α
hym : y ∈ m
this : s \ {x | (x, y) ∈ d} ∈ c
z : α
hzm : z ∈ m
hyz : z ∉ {x | (x, y) ∈ d}
⊢ False

tactic: exact hyz (hmd ⟨hzm, hym⟩)
state_before: case mpr.intro.intro.intro.intro.intro.intro
α : Type u
β : Type v
uniformSpace : UniformSpace α
s : Set α
d : Set (α × α)
hd : d ∈ 𝓤 α
hd_cover : ∀ (t : Set α), t.Finite → ¬s ⊆ ⋃ y ∈ t, {x | (x, y) ∈ d}
f : Filter α := ⨅ t, 𝓟 (s \ ⋃ y ∈ t, {x | (x, y) ∈ d})
hb : f.HasAntitoneBasis fun t => s \ ⋃ y ∈ t, {x | (x, y) ∈ d}
this✝¹ : f.NeBot
this✝ : f ≤ 𝓟 s
c : Filter α
hcf : c ≤ f
hc : Cauchy c
m : Set α
hm : m ∈ c
hmd : m ×ˢ m ⊆ d
y : α
hym : y ∈ m
this : s \ {x | (x, y) ∈ d} ∈ c
z : α
hzm : z ∈ m
hyz : z ∉ {x | (x, y) ∈ d}
⊢ False
state_after: no goals

tactic: simp
state_before: α : Type u
β : Type v
uniformSpace : UniformSpace α
s : Set α
d : Set (α × α)
hd : d ∈ 𝓤 α
hd_cover : ∀ (t : Set α), t.Finite → ¬s ⊆ ⋃ y ∈ t, {x | (x, y) ∈ d}
f : Filter α := ⨅ t, 𝓟 (s \ ⋃ y ∈ t, {x | (x, y) ∈ d})
hb : f.HasAntitoneBasis fun t => s \ ⋃ y ∈ t, {x | (x, y) ∈ d}
this : f.NeBot
⊢ 𝓟 (s \ ⋃ y ∈ ∅, {x | (x, y) ∈ d}) ≤ 𝓟 s
state_after: no goals

tactic: simpa using hcf (hb.mem {y})
state_before: α : Type u
β : Type v
uniformSpace : UniformSpace α
s : Set α
d : Set (α × α)
hd : d ∈ 𝓤 α
hd_cover : ∀ (t : Set α), t.Finite → ¬s ⊆ ⋃ y ∈ t, {x | (x, y) ∈ d}
f : Filter α := ⨅ t, 𝓟 (s \ ⋃ y ∈ t, {x | (x, y) ∈ d})
hb : f.HasAntitoneBasis fun t => s \ ⋃ y ∈ t, {x | (x, y) ∈ d}
this✝ : f.NeBot
this : f ≤ 𝓟 s
c : Filter α
hcf : c ≤ f
hc : Cauchy c
m : Set α
hm : m ∈ c
hmd : m ×ˢ m ⊆ d
y : α
hym : y ∈ m
⊢ s \ {x | (x, y) ∈ d} ∈ c
state_after: no goals