Theorem: Set.Finite.isCompact_exterior
File: Mathlib/Topology/AlexandrovDiscrete.lean

tactic: refine isCompact_of_finite_subcover fun f hf hsf ↦ ?_
state_before: ι : Sort u_1
κ : ι → Sort u_2
α : Type u_3
β : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
s t : Set α
a x y : α
inst✝¹ : AlexandrovDiscrete α
inst✝ : AlexandrovDiscrete β
hs : s.Finite
⊢ IsCompact (exterior s)
state_after: ι : Sort u_1
κ : ι → Sort u_2
α : Type u_3
β : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
s t : Set α
a x y : α
inst✝¹ : AlexandrovDiscrete α
inst✝ : AlexandrovDiscrete β
hs : s.Finite
ι✝ : Type u_3
f : ι✝ → Set α
hf : ∀ (i : ι✝), IsOpen (f i)
hsf : exterior s ⊆ ⋃ i, f i
⊢ ∃ t, exterior s ⊆ ⋃ i ∈ t, f i

tactic: choose g hg using fun a (ha : a ∈ exterior s) ↦ mem_iUnion.1 (hsf ha)
state_before: ι : Sort u_1
κ : ι → Sort u_2
α : Type u_3
β : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
s t : Set α
a x y : α
inst✝¹ : AlexandrovDiscrete α
inst✝ : AlexandrovDiscrete β
hs : s.Finite
ι✝ : Type u_3
f : ι✝ → Set α
hf : ∀ (i : ι✝), IsOpen (f i)
hsf : exterior s ⊆ ⋃ i, f i
⊢ ∃ t, exterior s ⊆ ⋃ i ∈ t, f i
state_after: ι : Sort u_1
κ : ι → Sort u_2
α : Type u_3
β : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
s t : Set α
a x y : α
inst✝¹ : AlexandrovDiscrete α
inst✝ : AlexandrovDiscrete β
hs : s.Finite
ι✝ : Type u_3
f : ι✝ → Set α
hf : ∀ (i : ι✝), IsOpen (f i)
hsf : exterior s ⊆ ⋃ i, f i
g : (a : α) → a ∈ exterior s → ι✝
hg : ∀ (a : α) (ha : a ∈ exterior s), a ∈ f (g a ha)
⊢ ∃ t, exterior s ⊆ ⋃ i ∈ t, f i

tactic: refine ⟨hs.toFinset.attach.image fun a ↦
  g a.1 <| subset_exterior <| (Finite.mem_toFinset _).1 a.2,
  (isOpen_iUnion fun i ↦ isOpen_iUnion ?_).exterior_subset.2 ?_⟩
state_before: ι : Sort u_1
κ : ι → Sort u_2
α : Type u_3
β : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
s t : Set α
a x y : α
inst✝¹ : AlexandrovDiscrete α
inst✝ : AlexandrovDiscrete β
hs : s.Finite
ι✝ : Type u_3
f : ι✝ → Set α
hf : ∀ (i : ι✝), IsOpen (f i)
hsf : exterior s ⊆ ⋃ i, f i
g : (a : α) → a ∈ exterior s → ι✝
hg : ∀ (a : α) (ha : a ∈ exterior s), a ∈ f (g a ha)
⊢ ∃ t, exterior s ⊆ ⋃ i ∈ t, f i
state_after: case refine_1
ι : Sort u_1
κ : ι → Sort u_2
α : Type u_3
β : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
s t : Set α
a x y : α
inst✝¹ : AlexandrovDiscrete α
inst✝ : AlexandrovDiscrete β
hs : s.Finite
ι✝ : Type u_3
f : ι✝ → Set α
hf : ∀ (i : ι✝), IsOpen (f i)
hsf : exterior s ⊆ ⋃ i, f i
g : (a : α) → a ∈ exterior s → ι✝
hg : ∀ (a : α) (ha : a ∈ exterior s), a ∈ f (g a ha)
i : ι✝
⊢ i ∈ Finset.image (fun a => g ↑a ⋯) hs.toFinset.attach → IsOpen (f i)

case refine_2
ι : Sort u_1
κ : ι → Sort u_2
α : Type u_3
β : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
s t : Set α
a x y : α
inst✝¹ : AlexandrovDiscrete α
inst✝ : AlexandrovDiscrete β
hs : s.Finite
ι✝ : Type u_3
f : ι✝ → Set α
hf : ∀ (i : ι✝), IsOpen (f i)
hsf : exterior s ⊆ ⋃ i, f i
g : (a : α) → a ∈ exterior s → ι✝
hg : ∀ (a : α) (ha : a ∈ exterior s), a ∈ f (g a ha)
⊢ s ⊆ ⋃ i ∈ Finset.image (fun a => g ↑a ⋯) hs.toFinset.attach, f i

tactic: refine fun a ha ↦ mem_iUnion₂.2 ⟨_, ?_, hg _ <| subset_exterior ha⟩
state_before: case refine_2
ι : Sort u_1
κ : ι → Sort u_2
α : Type u_3
β : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
s t : Set α
a x y : α
inst✝¹ : AlexandrovDiscrete α
inst✝ : AlexandrovDiscrete β
hs : s.Finite
ι✝ : Type u_3
f : ι✝ → Set α
hf : ∀ (i : ι✝), IsOpen (f i)
hsf : exterior s ⊆ ⋃ i, f i
g : (a : α) → a ∈ exterior s → ι✝
hg : ∀ (a : α) (ha : a ∈ exterior s), a ∈ f (g a ha)
⊢ s ⊆ ⋃ i ∈ Finset.image (fun a => g ↑a ⋯) hs.toFinset.attach, f i
state_after: case refine_2
ι : Sort u_1
κ : ι → Sort u_2
α : Type u_3
β : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
s t : Set α
a✝ x y : α
inst✝¹ : AlexandrovDiscrete α
inst✝ : AlexandrovDiscrete β
hs : s.Finite
ι✝ : Type u_3
f : ι✝ → Set α
hf : ∀ (i : ι✝), IsOpen (f i)
hsf : exterior s ⊆ ⋃ i, f i
g : (a : α) → a ∈ exterior s → ι✝
hg : ∀ (a : α) (ha : a ∈ exterior s), a ∈ f (g a ha)
a : α
ha : a ∈ s
⊢ g a ⋯ ∈ Finset.image (fun a => g ↑a ⋯) hs.toFinset.attach

tactic: simp only [Finset.mem_image, Finset.mem_attach, true_and, Subtype.exists, Finite.mem_toFinset]
state_before: case refine_2
ι : Sort u_1
κ : ι → Sort u_2
α : Type u_3
β : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
s t : Set α
a✝ x y : α
inst✝¹ : AlexandrovDiscrete α
inst✝ : AlexandrovDiscrete β
hs : s.Finite
ι✝ : Type u_3
f : ι✝ → Set α
hf : ∀ (i : ι✝), IsOpen (f i)
hsf : exterior s ⊆ ⋃ i, f i
g : (a : α) → a ∈ exterior s → ι✝
hg : ∀ (a : α) (ha : a ∈ exterior s), a ∈ f (g a ha)
a : α
ha : a ∈ s
⊢ g a ⋯ ∈ Finset.image (fun a => g ↑a ⋯) hs.toFinset.attach
state_after: case refine_2
ι : Sort u_1
κ : ι → Sort u_2
α : Type u_3
β : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
s t : Set α
a✝ x y : α
inst✝¹ : AlexandrovDiscrete α
inst✝ : AlexandrovDiscrete β
hs : s.Finite
ι✝ : Type u_3
f : ι✝ → Set α
hf : ∀ (i : ι✝), IsOpen (f i)
hsf : exterior s ⊆ ⋃ i, f i
g : (a : α) → a ∈ exterior s → ι✝
hg : ∀ (a : α) (ha : a ∈ exterior s), a ∈ f (g a ha)
a : α
ha : a ∈ s
⊢ ∃ a_1, ∃ (h : a_1 ∈ s), g a_1 ⋯ = g a ⋯

tactic: exact ⟨a, ha, rfl⟩
state_before: case refine_2
ι : Sort u_1
κ : ι → Sort u_2
α : Type u_3
β : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
s t : Set α
a✝ x y : α
inst✝¹ : AlexandrovDiscrete α
inst✝ : AlexandrovDiscrete β
hs : s.Finite
ι✝ : Type u_3
f : ι✝ → Set α
hf : ∀ (i : ι✝), IsOpen (f i)
hsf : exterior s ⊆ ⋃ i, f i
g : (a : α) → a ∈ exterior s → ι✝
hg : ∀ (a : α) (ha : a ∈ exterior s), a ∈ f (g a ha)
a : α
ha : a ∈ s
⊢ ∃ a_1, ∃ (h : a_1 ∈ s), g a_1 ⋯ = g a ⋯
state_after: no goals

tactic: exact fun _ ↦ hf _
state_before: case refine_1
ι : Sort u_1
κ : ι → Sort u_2
α : Type u_3
β : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
s t : Set α
a x y : α
inst✝¹ : AlexandrovDiscrete α
inst✝ : AlexandrovDiscrete β
hs : s.Finite
ι✝ : Type u_3
f : ι✝ → Set α
hf : ∀ (i : ι✝), IsOpen (f i)
hsf : exterior s ⊆ ⋃ i, f i
g : (a : α) → a ∈ exterior s → ι✝
hg : ∀ (a : α) (ha : a ∈ exterior s), a ∈ f (g a ha)
i : ι✝
⊢ i ∈ Finset.image (fun a => g ↑a ⋯) hs.toFinset.attach → IsOpen (f i)
state_after: no goals