Theorem: isCompact_open_iff_eq_finite_iUnion_of_isTopologicalBasis
File: Mathlib/Topology/SubsetProperties.lean

tactic: constructor
state_before: α : Type u
β : Type v
ι : Type u_1
π : ι → Type ?u.42425
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β
s t : Set α
b : ι → Set α
hb : IsTopologicalBasis (range b)
hb' : ∀ (i : ι), IsCompact (b i)
U : Set α
⊢ IsCompact U ∧ IsOpen U ↔ ∃ s, Set.Finite s ∧ U = ⋃ (i : ι) (_ : i ∈ s), b i

tactic: rintro ⟨h₁, h₂⟩
state_before: case mp
α : Type u
β : Type v
ι : Type u_1
π : ι → Type ?u.42425
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β
s t : Set α
b : ι → Set α
hb : IsTopologicalBasis (range b)
hb' : ∀ (i : ι), IsCompact (b i)
U : Set α
⊢ IsCompact U ∧ IsOpen U → ∃ s, Set.Finite s ∧ U = ⋃ (i : ι) (_ : i ∈ s), b i

tactic: obtain ⟨β, f, e, hf⟩ := hb.open_eq_iUnion h₂
state_before: case mp.intro
α : Type u
β : Type v
ι : Type u_1
π : ι → Type ?u.42425
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β
s t : Set α
b : ι → Set α
hb : IsTopologicalBasis (range b)
hb' : ∀ (i : ι), IsCompact (b i)
U : Set α
h₁ : IsCompact U
h₂ : IsOpen U
⊢ ∃ s, Set.Finite s ∧ U = ⋃ (i : ι) (_ : i ∈ s), b i

tactic: choose f' hf' using hf
state_before: case mp.intro.intro.intro.intro
α : Type u
β✝ : Type v
ι : Type u_1
π : ι → Type ?u.42425
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β✝
s t : Set α
b : ι → Set α
hb : IsTopologicalBasis (range b)
hb' : ∀ (i : ι), IsCompact (b i)
U : Set α
h₁ : IsCompact U
h₂ : IsOpen U
β : Type u
f : β → Set α
e : U = ⋃ (i : β), f i
hf : ∀ (i : β), f i ∈ range b
⊢ ∃ s, Set.Finite s ∧ U = ⋃ (i : ι) (_ : i ∈ s), b i

tactic: have : b ∘ f' = f := funext hf'
state_before: case mp.intro.intro.intro.intro
α : Type u
β✝ : Type v
ι : Type u_1
π : ι → Type ?u.42425
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β✝
s t : Set α
b : ι → Set α
hb : IsTopologicalBasis (range b)
hb' : ∀ (i : ι), IsCompact (b i)
U : Set α
h₁ : IsCompact U
h₂ : IsOpen U
β : Type u
f : β → Set α
e : U = ⋃ (i : β), f i
f' : β → ι
hf' : ∀ (i : β), b (f' i) = f i
⊢ ∃ s, Set.Finite s ∧ U = ⋃ (i : ι) (_ : i ∈ s), b i

tactic: subst this
state_before: case mp.intro.intro.intro.intro
α : Type u
β✝ : Type v
ι : Type u_1
π : ι → Type ?u.42425
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β✝
s t : Set α
b : ι → Set α
hb : IsTopologicalBasis (range b)
hb' : ∀ (i : ι), IsCompact (b i)
U : Set α
h₁ : IsCompact U
h₂ : IsOpen U
β : Type u
f : β → Set α
e : U = ⋃ (i : β), f i
f' : β → ι
hf' : ∀ (i : β), b (f' i) = f i
this : b ∘ f' = f
⊢ ∃ s, Set.Finite s ∧ U = ⋃ (i : ι) (_ : i ∈ s), b i

tactic: obtain ⟨t, ht⟩ :=
  h₁.elim_finite_subcover (b ∘ f') (fun i => hb.isOpen (Set.mem_range_self _)) (by rw [e])
state_before: case mp.intro.intro.intro.intro
α : Type u
β✝ : Type v
ι : Type u_1
π : ι → Type ?u.42425
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β✝
s t : Set α
b : ι → Set α
hb : IsTopologicalBasis (range b)
hb' : ∀ (i : ι), IsCompact (b i)
U : Set α
h₁ : IsCompact U
h₂ : IsOpen U
β : Type u
f' : β → ι
e : U = ⋃ (i : β), (b ∘ f') i
hf' : ∀ (i : β), b (f' i) = (b ∘ f') i
⊢ ∃ s, Set.Finite s ∧ U = ⋃ (i : ι) (_ : i ∈ s), b i

tactic: refine' ⟨t.image f', Set.Finite.intro inferInstance, le_antisymm _ _⟩
state_before: case mp.intro.intro.intro.intro.intro
α : Type u
β✝ : Type v
ι : Type u_1
π : ι → Type ?u.42425
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β✝
s t✝ : Set α
b : ι → Set α
hb : IsTopologicalBasis (range b)
hb' : ∀ (i : ι), IsCompact (b i)
U : Set α
h₁ : IsCompact U
h₂ : IsOpen U
β : Type u
f' : β → ι
e : U = ⋃ (i : β), (b ∘ f') i
hf' : ∀ (i : β), b (f' i) = (b ∘ f') i
t : Finset β
ht : U ⊆ ⋃ (i : β) (_ : i ∈ t), (b ∘ f') i
⊢ ∃ s, Set.Finite s ∧ U = ⋃ (i : ι) (_ : i ∈ s), b i

tactic: rw [e]
state_before: α : Type u
β✝ : Type v
ι : Type u_1
π : ι → Type ?u.42425
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β✝
s t : Set α
b : ι → Set α
hb : IsTopologicalBasis (range b)
hb' : ∀ (i : ι), IsCompact (b i)
U : Set α
h₁ : IsCompact U
h₂ : IsOpen U
β : Type u
f' : β → ι
e : U = ⋃ (i : β), (b ∘ f') i
hf' : ∀ (i : β), b (f' i) = (b ∘ f') i
⊢ U ⊆ ⋃ (i : β), (b ∘ f') i

tactic: refine' Set.Subset.trans ht _
state_before: case mp.intro.intro.intro.intro.intro.refine'_1
α : Type u
β✝ : Type v
ι : Type u_1
π : ι → Type ?u.42425
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β✝
s t✝ : Set α
b : ι → Set α
hb : IsTopologicalBasis (range b)
hb' : ∀ (i : ι), IsCompact (b i)
U : Set α
h₁ : IsCompact U
h₂ : IsOpen U
β : Type u
f' : β → ι
e : U = ⋃ (i : β), (b ∘ f') i
hf' : ∀ (i : β), b (f' i) = (b ∘ f') i
t : Finset β
ht : U ⊆ ⋃ (i : β) (_ : i ∈ t), (b ∘ f') i
⊢ U ≤ ⋃ (i : ι) (_ : i ∈ ↑(Finset.image f' t)), b i

tactic: simp only [Set.iUnion_subset_iff]
state_before: case mp.intro.intro.intro.intro.intro.refine'_1
α : Type u
β✝ : Type v
ι : Type u_1
π : ι → Type ?u.42425
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β✝
s t✝ : Set α
b : ι → Set α
hb : IsTopologicalBasis (range b)
hb' : ∀ (i : ι), IsCompact (b i)
U : Set α
h₁ : IsCompact U
h₂ : IsOpen U
β : Type u
f' : β → ι
e : U = ⋃ (i : β), (b ∘ f') i
hf' : ∀ (i : β), b (f' i) = (b ∘ f') i
t : Finset β
ht : U ⊆ ⋃ (i : β) (_ : i ∈ t), (b ∘ f') i
⊢ (⋃ (i : β) (_ : i ∈ t), (b ∘ f') i) ⊆ ⋃ (i : ι) (_ : i ∈ ↑(Finset.image f' t)), b i

tactic: intro i hi
state_before: case mp.intro.intro.intro.intro.intro.refine'_1
α : Type u
β✝ : Type v
ι : Type u_1
π : ι → Type ?u.42425
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β✝
s t✝ : Set α
b : ι → Set α
hb : IsTopologicalBasis (range b)
hb' : ∀ (i : ι), IsCompact (b i)
U : Set α
h₁ : IsCompact U
h₂ : IsOpen U
β : Type u
f' : β → ι
e : U = ⋃ (i : β), (b ∘ f') i
hf' : ∀ (i : β), b (f' i) = (b ∘ f') i
t : Finset β
ht : U ⊆ ⋃ (i : β) (_ : i ∈ t), (b ∘ f') i
⊢ ∀ (i : β), i ∈ t → (b ∘ f') i ⊆ ⋃ (i : ι) (_ : i ∈ ↑(Finset.image f' t)), b i

tactic: erw [← Set.iUnion_subtype (fun x : ι => x ∈ t.image f') fun i => b i.1]
state_before: case mp.intro.intro.intro.intro.intro.refine'_1
α : Type u
β✝ : Type v
ι : Type u_1
π : ι → Type ?u.42425
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β✝
s t✝ : Set α
b : ι → Set α
hb : IsTopologicalBasis (range b)
hb' : ∀ (i : ι), IsCompact (b i)
U : Set α
h₁ : IsCompact U
h₂ : IsOpen U
β : Type u
f' : β → ι
e : U = ⋃ (i : β), (b ∘ f') i
hf' : ∀ (i : β), b (f' i) = (b ∘ f') i
t : Finset β
ht : U ⊆ ⋃ (i : β) (_ : i ∈ t), (b ∘ f') i
i : β
hi : i ∈ t
⊢ (b ∘ f') i ⊆ ⋃ (i : ι) (_ : i ∈ ↑(Finset.image f' t)), b i

tactic: exact Set.subset_iUnion (fun i : t.image f' => b i) ⟨_, Finset.mem_image_of_mem _ hi⟩
state_before: case mp.intro.intro.intro.intro.intro.refine'_1
α : Type u
β✝ : Type v
ι : Type u_1
π : ι → Type ?u.42425
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β✝
s t✝ : Set α
b : ι → Set α
hb : IsTopologicalBasis (range b)
hb' : ∀ (i : ι), IsCompact (b i)
U : Set α
h₁ : IsCompact U
h₂ : IsOpen U
β : Type u
f' : β → ι
e : U = ⋃ (i : β), (b ∘ f') i
hf' : ∀ (i : β), b (f' i) = (b ∘ f') i
t : Finset β
ht : U ⊆ ⋃ (i : β) (_ : i ∈ t), (b ∘ f') i
i : β
hi : i ∈ t
⊢ (b ∘ f') i ⊆ ⋃ (x : { x // x ∈ Finset.image f' t }), b ↑x

tactic: apply Set.iUnion₂_subset
state_before: case mp.intro.intro.intro.intro.intro.refine'_2
α : Type u
β✝ : Type v
ι : Type u_1
π : ι → Type ?u.42425
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β✝
s t✝ : Set α
b : ι → Set α
hb : IsTopologicalBasis (range b)
hb' : ∀ (i : ι), IsCompact (b i)
U : Set α
h₁ : IsCompact U
h₂ : IsOpen U
β : Type u
f' : β → ι
e : U = ⋃ (i : β), (b ∘ f') i
hf' : ∀ (i : β), b (f' i) = (b ∘ f') i
t : Finset β
ht : U ⊆ ⋃ (i : β) (_ : i ∈ t), (b ∘ f') i
⊢ (⋃ (i : ι) (_ : i ∈ ↑(Finset.image f' t)), b i) ≤ U

tactic: rintro i hi
state_before: case mp.intro.intro.intro.intro.intro.refine'_2.h
α : Type u
β✝ : Type v
ι : Type u_1
π : ι → Type ?u.42425
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β✝
s t✝ : Set α
b : ι → Set α
hb : IsTopologicalBasis (range b)
hb' : ∀ (i : ι), IsCompact (b i)
U : Set α
h₁ : IsCompact U
h₂ : IsOpen U
β : Type u
f' : β → ι
e : U = ⋃ (i : β), (b ∘ f') i
hf' : ∀ (i : β), b (f' i) = (b ∘ f') i
t : Finset β
ht : U ⊆ ⋃ (i : β) (_ : i ∈ t), (b ∘ f') i
⊢ ∀ (i : ι), i ∈ ↑(Finset.image f' t) → b i ⊆ U

tactic: obtain ⟨j, -, rfl⟩ := Finset.mem_image.mp hi
state_before: case mp.intro.intro.intro.intro.intro.refine'_2.h
α : Type u
β✝ : Type v
ι : Type u_1
π : ι → Type ?u.42425
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β✝
s t✝ : Set α
b : ι → Set α
hb : IsTopologicalBasis (range b)
hb' : ∀ (i : ι), IsCompact (b i)
U : Set α
h₁ : IsCompact U
h₂ : IsOpen U
β : Type u
f' : β → ι
e : U = ⋃ (i : β), (b ∘ f') i
hf' : ∀ (i : β), b (f' i) = (b ∘ f') i
t : Finset β
ht : U ⊆ ⋃ (i : β) (_ : i ∈ t), (b ∘ f') i
i : ι
hi : i ∈ ↑(Finset.image f' t)
⊢ b i ⊆ U

tactic: rw [e]
state_before: case mp.intro.intro.intro.intro.intro.refine'_2.h.intro.intro
α : Type u
β✝ : Type v
ι : Type u_1
π : ι → Type ?u.42425
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β✝
s t✝ : Set α
b : ι → Set α
hb : IsTopologicalBasis (range b)
hb' : ∀ (i : ι), IsCompact (b i)
U : Set α
h₁ : IsCompact U
h₂ : IsOpen U
β : Type u
f' : β → ι
e : U = ⋃ (i : β), (b ∘ f') i
hf' : ∀ (i : β), b (f' i) = (b ∘ f') i
t : Finset β
ht : U ⊆ ⋃ (i : β) (_ : i ∈ t), (b ∘ f') i
j : β
hi : f' j ∈ ↑(Finset.image f' t)
⊢ b (f' j) ⊆ U

tactic: exact Set.subset_iUnion (b ∘ f') j
state_before: case mp.intro.intro.intro.intro.intro.refine'_2.h.intro.intro
α : Type u
β✝ : Type v
ι : Type u_1
π : ι → Type ?u.42425
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β✝
s t✝ : Set α
b : ι → Set α
hb : IsTopologicalBasis (range b)
hb' : ∀ (i : ι), IsCompact (b i)
U : Set α
h₁ : IsCompact U
h₂ : IsOpen U
β : Type u
f' : β → ι
e : U = ⋃ (i : β), (b ∘ f') i
hf' : ∀ (i : β), b (f' i) = (b ∘ f') i
t : Finset β
ht : U ⊆ ⋃ (i : β) (_ : i ∈ t), (b ∘ f') i
j : β
hi : f' j ∈ ↑(Finset.image f' t)
⊢ b (f' j) ⊆ ⋃ (i : β), (b ∘ f') i

tactic: rintro ⟨s, hs, rfl⟩
state_before: case mpr
α : Type u
β : Type v
ι : Type u_1
π : ι → Type ?u.42425
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β
s t : Set α
b : ι → Set α
hb : IsTopologicalBasis (range b)
hb' : ∀ (i : ι), IsCompact (b i)
U : Set α
⊢ (∃ s, Set.Finite s ∧ U = ⋃ (i : ι) (_ : i ∈ s), b i) → IsCompact U ∧ IsOpen U

tactic: constructor
state_before: case mpr.intro.intro
α : Type u
β : Type v
ι : Type u_1
π : ι → Type ?u.42425
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β
s✝ t : Set α
b : ι → Set α
hb : IsTopologicalBasis (range b)
hb' : ∀ (i : ι), IsCompact (b i)
s : Set ι
hs : Set.Finite s
⊢ IsCompact (⋃ (i : ι) (_ : i ∈ s), b i) ∧ IsOpen (⋃ (i : ι) (_ : i ∈ s), b i)

tactic: exact hs.isCompact_biUnion fun i _ => hb' i
state_before: case mpr.intro.intro.left
α : Type u
β : Type v
ι : Type u_1
π : ι → Type ?u.42425
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β
s✝ t : Set α
b : ι → Set α
hb : IsTopologicalBasis (range b)
hb' : ∀ (i : ι), IsCompact (b i)
s : Set ι
hs : Set.Finite s
⊢ IsCompact (⋃ (i : ι) (_ : i ∈ s), b i)

tactic: exact isOpen_biUnion fun i _ => hb.isOpen (Set.mem_range_self _)
state_before: case mpr.intro.intro.right
α : Type u
β : Type v
ι : Type u_1
π : ι → Type ?u.42425
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β
s✝ t : Set α
b : ι → Set α
hb : IsTopologicalBasis (range b)
hb' : ∀ (i : ι), IsCompact (b i)
s : Set ι
hs : Set.Finite s
⊢ IsOpen (⋃ (i : ι) (_ : i ∈ s), b i)