Theorem: CompleteLattice.finset_sup_compact_of_compact
File: Mathlib/Order/CompactlyGenerated.lean

tactic: classical
  rw [isCompactElement_iff_le_of_directed_sSup_le]
  intro d hemp hdir hsup
  rw [← Function.comp.left_id 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.14463
α✝ : Type ?u.14466
inst✝¹ : CompleteLattice α✝
f✝ : ι → α✝
α : Type u_1
β : Type u_2
inst✝ : CompleteLattice α
f : β → α
s : Finset β
h : ∀ (x : β), x ∈ s → IsCompactElement (f x)
⊢ IsCompactElement (Finset.sup s f)

tactic: rw [isCompactElement_iff_le_of_directed_sSup_le]
state_before: ι : Sort ?u.14463
α✝ : Type ?u.14466
inst✝¹ : CompleteLattice α✝
f✝ : ι → α✝
α : Type u_1
β : Type u_2
inst✝ : CompleteLattice α
f : β → α
s : Finset β
h : ∀ (x : β), x ∈ s → IsCompactElement (f x)
⊢ IsCompactElement (Finset.sup s f)

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

tactic: rw [← Function.comp.left_id f]
state_before: ι : Sort ?u.14463
α✝ : Type ?u.14466
inst✝¹ : CompleteLattice α✝
f✝ : ι → α✝
α : Type u_1
β : Type u_2
inst✝ : CompleteLattice α
f : β → α
s : Finset β
h : ∀ (x : β), x ∈ s → IsCompactElement (f x)
d : Set α
hemp : Set.Nonempty d
hdir : DirectedOn (fun x x_1 => x ≤ x_1) d
hsup : Finset.sup s f ≤ sSup d
⊢ ∃ x, x ∈ d ∧ Finset.sup s f ≤ x

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

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

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

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

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

tactic: rw [isCompactElement_iff_le_of_directed_sSup_le] at h
state_before: case a.intro.intro
ι : Sort ?u.14463
α✝ : Type ?u.14466
inst✝¹ : CompleteLattice α✝
f✝ : ι → α✝
α : Type u_1
β : Type u_2
inst✝ : CompleteLattice α
f : β → α
s : Finset β
d : Set α
hemp : Set.Nonempty d
hdir : DirectedOn (fun x x_1 => x ≤ x_1) d
hsup : Finset.sup s f ≤ sSup d
p : β
hps : p ∈ s
hx : f p ∈ Finset.image f s
h : IsCompactElement (f p)
⊢ ∃ y, 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.14463
α✝ : Type ?u.14466
inst✝¹ : CompleteLattice α✝
f✝ : ι → α✝
α : Type u_1
β : Type u_2
inst✝ : CompleteLattice α
f : β → α
s : Finset β
d : Set α
hemp : Set.Nonempty d
hdir : DirectedOn (fun x x_1 => x ≤ x_1) d
hsup : Finset.sup s f ≤ sSup d
p : β
hps : p ∈ s
hx : f p ∈ Finset.image f s
h : ∀ (s : Set α), Set.Nonempty s → DirectedOn (fun x x_1 => x ≤ x_1) s → f p ≤ sSup s → ∃ x, x ∈ s ∧ f p ≤ x
⊢ ∃ y, y ∈ d ∧ f p ≤ y

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