Theorem: CompleteLattice.isCompactElement_finsetSup
File: Mathlib/Order/CompactlyGenerated/Basic.lean

tactic: classical
  rw [isCompactElement_iff_le_of_directed_sSup_le]
  intro d hemp hdir hsup
  rw [← Function.id_comp f]
  rw [← Finset.sup_image]
  apply Finset.sup_le_of_le_directed d hemp hdir
  rintro x hx
  obtain ⟨p, ⟨hps, rfl⟩⟩ := Finset.mem_image.mp hx
  specialize h p hps
  rw [isCompactElement_iff_le_of_directed_sSup_le] at h
  specialize h d hemp hdir (le_trans (Finset.le_sup hps) hsup)
  simpa only [exists_prop]
state_before: ι : Sort u_1
α✝ : Type u_2
inst✝¹ : CompleteLattice α✝
f✝ : ι → α✝
α : Type u_3
β : Type u_4
inst✝ : CompleteLattice α
f : β → α
s : Finset β
h : ∀ x ∈ s, IsCompactElement (f x)
⊢ IsCompactElement (s.sup f)
state_after: no goals

tactic: rw [isCompactElement_iff_le_of_directed_sSup_le]
state_before: ι : Sort u_1
α✝ : Type u_2
inst✝¹ : CompleteLattice α✝
f✝ : ι → α✝
α : Type u_3
β : Type u_4
inst✝ : CompleteLattice α
f : β → α
s : Finset β
h : ∀ x ∈ s, IsCompactElement (f x)
⊢ IsCompactElement (s.sup f)
state_after: ι : Sort u_1
α✝ : Type u_2
inst✝¹ : CompleteLattice α✝
f✝ : ι → α✝
α : Type u_3
β : Type u_4
inst✝ : CompleteLattice α
f : β → α
s : Finset β
h : ∀ x ∈ s, IsCompactElement (f x)
⊢ ∀ (s_1 : Set α), s_1.Nonempty → DirectedOn (fun x x_1 => x ≤ x_1) s_1 → s.sup f ≤ sSup s_1 → ∃ x ∈ s_1, s.sup f ≤ x

tactic: intro d hemp hdir hsup
state_before: ι : Sort u_1
α✝ : Type u_2
inst✝¹ : CompleteLattice α✝
f✝ : ι → α✝
α : Type u_3
β : Type u_4
inst✝ : CompleteLattice α
f : β → α
s : Finset β
h : ∀ x ∈ s, IsCompactElement (f x)
⊢ ∀ (s_1 : Set α), s_1.Nonempty → DirectedOn (fun x x_1 => x ≤ x_1) s_1 → s.sup f ≤ sSup s_1 → ∃ x ∈ s_1, s.sup f ≤ x
state_after: ι : Sort u_1
α✝ : Type u_2
inst✝¹ : CompleteLattice α✝
f✝ : ι → α✝
α : Type u_3
β : Type u_4
inst✝ : CompleteLattice α
f : β → α
s : Finset β
h : ∀ x ∈ s, IsCompactElement (f x)
d : Set α
hemp : d.Nonempty
hdir : DirectedOn (fun x x_1 => x ≤ x_1) d
hsup : s.sup f ≤ sSup d
⊢ ∃ x ∈ d, s.sup f ≤ x

tactic: rw [← Function.id_comp f]
state_before: ι : Sort u_1
α✝ : Type u_2
inst✝¹ : CompleteLattice α✝
f✝ : ι → α✝
α : Type u_3
β : Type u_4
inst✝ : CompleteLattice α
f : β → α
s : Finset β
h : ∀ x ∈ s, IsCompactElement (f x)
d : Set α
hemp : d.Nonempty
hdir : DirectedOn (fun x x_1 => x ≤ x_1) d
hsup : s.sup f ≤ sSup d
⊢ ∃ x ∈ d, s.sup f ≤ x
state_after: ι : Sort u_1
α✝ : Type u_2
inst✝¹ : CompleteLattice α✝
f✝ : ι → α✝
α : Type u_3
β : Type u_4
inst✝ : CompleteLattice α
f : β → α
s : Finset β
h : ∀ x ∈ s, IsCompactElement (f x)
d : Set α
hemp : d.Nonempty
hdir : DirectedOn (fun x x_1 => x ≤ x_1) d
hsup : s.sup f ≤ sSup d
⊢ ∃ x ∈ d, s.sup (id ∘ f) ≤ x

tactic: rw [← Finset.sup_image]
state_before: ι : Sort u_1
α✝ : Type u_2
inst✝¹ : CompleteLattice α✝
f✝ : ι → α✝
α : Type u_3
β : Type u_4
inst✝ : CompleteLattice α
f : β → α
s : Finset β
h : ∀ x ∈ s, IsCompactElement (f x)
d : Set α
hemp : d.Nonempty
hdir : DirectedOn (fun x x_1 => x ≤ x_1) d
hsup : s.sup f ≤ sSup d
⊢ ∃ x ∈ d, s.sup (id ∘ f) ≤ x
state_after: ι : Sort u_1
α✝ : Type u_2
inst✝¹ : CompleteLattice α✝
f✝ : ι → α✝
α : Type u_3
β : Type u_4
inst✝ : CompleteLattice α
f : β → α
s : Finset β
h : ∀ x ∈ s, IsCompactElement (f x)
d : Set α
hemp : d.Nonempty
hdir : DirectedOn (fun x x_1 => x ≤ x_1) d
hsup : s.sup f ≤ sSup d
⊢ ∃ x ∈ d, (Finset.image f s).sup id ≤ x

tactic: apply Finset.sup_le_of_le_directed d hemp hdir
state_before: ι : Sort u_1
α✝ : Type u_2
inst✝¹ : CompleteLattice α✝
f✝ : ι → α✝
α : Type u_3
β : Type u_4
inst✝ : CompleteLattice α
f : β → α
s : Finset β
h : ∀ x ∈ s, IsCompactElement (f x)
d : Set α
hemp : d.Nonempty
hdir : DirectedOn (fun x x_1 => x ≤ x_1) d
hsup : s.sup f ≤ sSup d
⊢ ∃ x ∈ d, (Finset.image f s).sup id ≤ x
state_after: case a
ι : Sort u_1
α✝ : Type u_2
inst✝¹ : CompleteLattice α✝
f✝ : ι → α✝
α : Type u_3
β : Type u_4
inst✝ : CompleteLattice α
f : β → α
s : Finset β
h : ∀ x ∈ s, IsCompactElement (f x)
d : Set α
hemp : d.Nonempty
hdir : DirectedOn (fun x x_1 => x ≤ x_1) d
hsup : s.sup f ≤ sSup d
⊢ ∀ x ∈ Finset.image f s, ∃ y ∈ d, x ≤ y

tactic: rintro x hx
state_before: case a
ι : Sort u_1
α✝ : Type u_2
inst✝¹ : CompleteLattice α✝
f✝ : ι → α✝
α : Type u_3
β : Type u_4
inst✝ : CompleteLattice α
f : β → α
s : Finset β
h : ∀ x ∈ s, IsCompactElement (f x)
d : Set α
hemp : d.Nonempty
hdir : DirectedOn (fun x x_1 => x ≤ x_1) d
hsup : s.sup f ≤ sSup d
⊢ ∀ x ∈ Finset.image f s, ∃ y ∈ d, x ≤ y
state_after: case a
ι : Sort u_1
α✝ : Type u_2
inst✝¹ : CompleteLattice α✝
f✝ : ι → α✝
α : Type u_3
β : Type u_4
inst✝ : CompleteLattice α
f : β → α
s : Finset β
h : ∀ x ∈ s, IsCompactElement (f x)
d : Set α
hemp : d.Nonempty
hdir : DirectedOn (fun x x_1 => x ≤ x_1) d
hsup : s.sup f ≤ sSup d
x : α
hx : x ∈ Finset.image f s
⊢ ∃ y ∈ d, x ≤ y

tactic: obtain ⟨p, ⟨hps, rfl⟩⟩ := Finset.mem_image.mp hx
state_before: case a
ι : Sort u_1
α✝ : Type u_2
inst✝¹ : CompleteLattice α✝
f✝ : ι → α✝
α : Type u_3
β : Type u_4
inst✝ : CompleteLattice α
f : β → α
s : Finset β
h : ∀ x ∈ s, IsCompactElement (f x)
d : Set α
hemp : d.Nonempty
hdir : DirectedOn (fun x x_1 => x ≤ x_1) d
hsup : s.sup f ≤ sSup d
x : α
hx : x ∈ Finset.image f s
⊢ ∃ y ∈ d, x ≤ y
state_after: case a.intro.intro
ι : Sort u_1
α✝ : Type u_2
inst✝¹ : CompleteLattice α✝
f✝ : ι → α✝
α : Type u_3
β : Type u_4
inst✝ : CompleteLattice α
f : β → α
s : Finset β
h : ∀ x ∈ s, IsCompactElement (f x)
d : Set α
hemp : d.Nonempty
hdir : DirectedOn (fun x x_1 => x ≤ x_1) d
hsup : s.sup f ≤ sSup d
p : β
hps : p ∈ s
hx : f p ∈ Finset.image f s
⊢ ∃ y ∈ d, f p ≤ y

tactic: specialize h p hps
state_before: case a.intro.intro
ι : Sort u_1
α✝ : Type u_2
inst✝¹ : CompleteLattice α✝
f✝ : ι → α✝
α : Type u_3
β : Type u_4
inst✝ : CompleteLattice α
f : β → α
s : Finset β
h : ∀ x ∈ s, IsCompactElement (f x)
d : Set α
hemp : d.Nonempty
hdir : DirectedOn (fun x x_1 => x ≤ x_1) d
hsup : s.sup f ≤ sSup d
p : β
hps : p ∈ s
hx : f p ∈ Finset.image f s
⊢ ∃ y ∈ d, f p ≤ y
state_after: case a.intro.intro
ι : Sort u_1
α✝ : Type u_2
inst✝¹ : CompleteLattice α✝
f✝ : ι → α✝
α : Type u_3
β : Type u_4
inst✝ : CompleteLattice α
f : β → α
s : Finset β
d : Set α
hemp : d.Nonempty
hdir : DirectedOn (fun x x_1 => x ≤ x_1) d
hsup : s.sup f ≤ sSup d
p : β
hps : p ∈ s
hx : f p ∈ Finset.image f s
h : IsCompactElement (f p)
⊢ ∃ y ∈ d, f p ≤ y

tactic: rw [isCompactElement_iff_le_of_directed_sSup_le] at h
state_before: case a.intro.intro
ι : Sort u_1
α✝ : Type u_2
inst✝¹ : CompleteLattice α✝
f✝ : ι → α✝
α : Type u_3
β : Type u_4
inst✝ : CompleteLattice α
f : β → α
s : Finset β
d : Set α
hemp : d.Nonempty
hdir : DirectedOn (fun x x_1 => x ≤ x_1) d
hsup : s.sup f ≤ sSup d
p : β
hps : p ∈ s
hx : f p ∈ Finset.image f s
h : IsCompactElement (f p)
⊢ ∃ y ∈ d, f p ≤ y
state_after: case a.intro.intro
ι : Sort u_1
α✝ : Type u_2
inst✝¹ : CompleteLattice α✝
f✝ : ι → α✝
α : Type u_3
β : Type u_4
inst✝ : CompleteLattice α
f : β → α
s : Finset β
d : Set α
hemp : d.Nonempty
hdir : DirectedOn (fun x x_1 => x ≤ x_1) d
hsup : s.sup f ≤ sSup d
p : β
hps : p ∈ s
hx : f p ∈ Finset.image f s
h : ∀ (s : Set α), s.Nonempty → DirectedOn (fun x x_1 => x ≤ x_1) s → f p ≤ sSup s → ∃ x ∈ s, f p ≤ x
⊢ ∃ y ∈ d, f p ≤ y

tactic: specialize h d hemp hdir (le_trans (Finset.le_sup hps) hsup)
state_before: case a.intro.intro
ι : Sort u_1
α✝ : Type u_2
inst✝¹ : CompleteLattice α✝
f✝ : ι → α✝
α : Type u_3
β : Type u_4
inst✝ : CompleteLattice α
f : β → α
s : Finset β
d : Set α
hemp : d.Nonempty
hdir : DirectedOn (fun x x_1 => x ≤ x_1) d
hsup : s.sup f ≤ sSup d
p : β
hps : p ∈ s
hx : f p ∈ Finset.image f s
h : ∀ (s : Set α), s.Nonempty → DirectedOn (fun x x_1 => x ≤ x_1) s → f p ≤ sSup s → ∃ x ∈ s, f p ≤ x
⊢ ∃ y ∈ d, f p ≤ y
state_after: case a.intro.intro
ι : Sort u_1
α✝ : Type u_2
inst✝¹ : CompleteLattice α✝
f✝ : ι → α✝
α : Type u_3
β : Type u_4
inst✝ : CompleteLattice α
f : β → α
s : Finset β
d : Set α
hemp : d.Nonempty
hdir : DirectedOn (fun x x_1 => x ≤ x_1) d
hsup : s.sup f ≤ sSup d
p : β
hps : p ∈ s
hx : f p ∈ Finset.image f s
h : ∃ x ∈ d, f p ≤ x
⊢ ∃ y ∈ d, f p ≤ y

tactic: simpa only [exists_prop]
state_before: case a.intro.intro
ι : Sort u_1
α✝ : Type u_2
inst✝¹ : CompleteLattice α✝
f✝ : ι → α✝
α : Type u_3
β : Type u_4
inst✝ : CompleteLattice α
f : β → α
s : Finset β
d : Set α
hemp : d.Nonempty
hdir : DirectedOn (fun x x_1 => x ≤ x_1) d
hsup : s.sup f ≤ sSup d
p : β
hps : p ∈ s
hx : f p ∈ Finset.image f s
h : ∃ x ∈ d, f p ≤ x
⊢ ∃ y ∈ d, f p ≤ y
state_after: no goals