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

tactic: constructor
state_before: ι : Sort ?u.1219
α✝ : Type ?u.1222
inst✝¹ : CompleteLattice α✝
f : ι → α✝
α : Type u
inst✝ : CompleteLattice α
k : α
⊢ IsCompactElement k ↔ ∀ (ι : Type u) (s : ι → α), k ≤ iSup s → ∃ t, k ≤ Finset.sup t s

tactic: intro H ι s hs
state_before: case mp
ι : Sort ?u.1219
α✝ : Type ?u.1222
inst✝¹ : CompleteLattice α✝
f : ι → α✝
α : Type u
inst✝ : CompleteLattice α
k : α
⊢ IsCompactElement k → ∀ (ι : Type u) (s : ι → α), k ≤ iSup s → ∃ t, k ≤ Finset.sup t s

tactic: obtain ⟨t, ht, ht'⟩ := H (Set.range s) hs
state_before: case mp
ι✝ : Sort ?u.1219
α✝ : Type ?u.1222
inst✝¹ : CompleteLattice α✝
f : ι✝ → α✝
α : Type u
inst✝ : CompleteLattice α
k : α
H : IsCompactElement k
ι : Type u
s : ι → α
hs : k ≤ iSup s
⊢ ∃ t, k ≤ Finset.sup t s

tactic: have : ∀ x : t, ∃ i, s i = x := fun x => ht x.prop
state_before: case mp.intro.intro
ι✝ : Sort ?u.1219
α✝ : Type ?u.1222
inst✝¹ : CompleteLattice α✝
f : ι✝ → α✝
α : Type u
inst✝ : CompleteLattice α
k : α
H : IsCompactElement k
ι : Type u
s : ι → α
hs : k ≤ iSup s
t : Finset α
ht : ↑t ⊆ Set.range s
ht' : k ≤ Finset.sup t id
⊢ ∃ t, k ≤ Finset.sup t s

tactic: choose f hf using this
state_before: case mp.intro.intro
ι✝ : Sort ?u.1219
α✝ : Type ?u.1222
inst✝¹ : CompleteLattice α✝
f : ι✝ → α✝
α : Type u
inst✝ : CompleteLattice α
k : α
H : IsCompactElement k
ι : Type u
s : ι → α
hs : k ≤ iSup s
t : Finset α
ht : ↑t ⊆ Set.range s
ht' : k ≤ Finset.sup t id
this : ∀ (x : { x // x ∈ t }), ∃ i, s i = ↑x
⊢ ∃ t, k ≤ Finset.sup t s

tactic: refine' ⟨Finset.univ.image f, ht'.trans _⟩
state_before: case mp.intro.intro
ι✝ : Sort ?u.1219
α✝ : Type ?u.1222
inst✝¹ : CompleteLattice α✝
f✝ : ι✝ → α✝
α : Type u
inst✝ : CompleteLattice α
k : α
H : IsCompactElement k
ι : Type u
s : ι → α
hs : k ≤ iSup s
t : Finset α
ht : ↑t ⊆ Set.range s
ht' : k ≤ Finset.sup t id
f : { x // x ∈ t } → ι
hf : ∀ (x : { x // x ∈ t }), s (f x) = ↑x
⊢ ∃ t, k ≤ Finset.sup t s

tactic: rw [Finset.sup_le_iff]
state_before: case mp.intro.intro
ι✝ : Sort ?u.1219
α✝ : Type ?u.1222
inst✝¹ : CompleteLattice α✝
f✝ : ι✝ → α✝
α : Type u
inst✝ : CompleteLattice α
k : α
H : IsCompactElement k
ι : Type u
s : ι → α
hs : k ≤ iSup s
t : Finset α
ht : ↑t ⊆ Set.range s
ht' : k ≤ Finset.sup t id
f : { x // x ∈ t } → ι
hf : ∀ (x : { x // x ∈ t }), s (f x) = ↑x
⊢ Finset.sup t id ≤ Finset.sup (Finset.image f Finset.univ) s

tactic: intro b hb
state_before: case mp.intro.intro
ι✝ : Sort ?u.1219
α✝ : Type ?u.1222
inst✝¹ : CompleteLattice α✝
f✝ : ι✝ → α✝
α : Type u
inst✝ : CompleteLattice α
k : α
H : IsCompactElement k
ι : Type u
s : ι → α
hs : k ≤ iSup s
t : Finset α
ht : ↑t ⊆ Set.range s
ht' : k ≤ Finset.sup t id
f : { x // x ∈ t } → ι
hf : ∀ (x : { x // x ∈ t }), s (f x) = ↑x
⊢ ∀ (b : α), b ∈ t → id b ≤ Finset.sup (Finset.image f Finset.univ) s

tactic: rw [← show s (f ⟨b, hb⟩) = id b from hf _]
state_before: case mp.intro.intro
ι✝ : Sort ?u.1219
α✝ : Type ?u.1222
inst✝¹ : CompleteLattice α✝
f✝ : ι✝ → α✝
α : Type u
inst✝ : CompleteLattice α
k : α
H : IsCompactElement k
ι : Type u
s : ι → α
hs : k ≤ iSup s
t : Finset α
ht : ↑t ⊆ Set.range s
ht' : k ≤ Finset.sup t id
f : { x // x ∈ t } → ι
hf : ∀ (x : { x // x ∈ t }), s (f x) = ↑x
b : α
hb : b ∈ t
⊢ id b ≤ Finset.sup (Finset.image f Finset.univ) s

tactic: exact Finset.le_sup (Finset.mem_image_of_mem f <| Finset.mem_univ (Subtype.mk b hb))
state_before: case mp.intro.intro
ι✝ : Sort ?u.1219
α✝ : Type ?u.1222
inst✝¹ : CompleteLattice α✝
f✝ : ι✝ → α✝
α : Type u
inst✝ : CompleteLattice α
k : α
H : IsCompactElement k
ι : Type u
s : ι → α
hs : k ≤ iSup s
t : Finset α
ht : ↑t ⊆ Set.range s
ht' : k ≤ Finset.sup t id
f : { x // x ∈ t } → ι
hf : ∀ (x : { x // x ∈ t }), s (f x) = ↑x
b : α
hb : b ∈ t
⊢ s (f { val := b, property := hb }) ≤ Finset.sup (Finset.image f Finset.univ) s

tactic: intro H s hs
state_before: case mpr
ι : Sort ?u.1219
α✝ : Type ?u.1222
inst✝¹ : CompleteLattice α✝
f : ι → α✝
α : Type u
inst✝ : CompleteLattice α
k : α
⊢ (∀ (ι : Type u) (s : ι → α), k ≤ iSup s → ∃ t, k ≤ Finset.sup t s) → IsCompactElement k

tactic: obtain ⟨t, ht⟩ :=
  H s Subtype.val
    (by
      delta iSup
      rwa [Subtype.range_coe])
state_before: case mpr
ι : Sort ?u.1219
α✝ : Type ?u.1222
inst✝¹ : CompleteLattice α✝
f : ι → α✝
α : Type u
inst✝ : CompleteLattice α
k : α
H : ∀ (ι : Type u) (s : ι → α), k ≤ iSup s → ∃ t, k ≤ Finset.sup t s
s : Set α
hs : k ≤ sSup s
⊢ ∃ t, ↑t ⊆ s ∧ k ≤ Finset.sup t id

tactic: refine' ⟨t.image Subtype.val, by simp, ht.trans _⟩
state_before: case mpr.intro
ι : Sort ?u.1219
α✝ : Type ?u.1222
inst✝¹ : CompleteLattice α✝
f : ι → α✝
α : Type u
inst✝ : CompleteLattice α
k : α
H : ∀ (ι : Type u) (s : ι → α), k ≤ iSup s → ∃ t, k ≤ Finset.sup t s
s : Set α
hs : k ≤ sSup s
t : Finset ↑s
ht : k ≤ Finset.sup t Subtype.val
⊢ ∃ t, ↑t ⊆ s ∧ k ≤ Finset.sup t id

tactic: rw [Finset.sup_le_iff]
state_before: case mpr.intro
ι : Sort ?u.1219
α✝ : Type ?u.1222
inst✝¹ : CompleteLattice α✝
f : ι → α✝
α : Type u
inst✝ : CompleteLattice α
k : α
H : ∀ (ι : Type u) (s : ι → α), k ≤ iSup s → ∃ t, k ≤ Finset.sup t s
s : Set α
hs : k ≤ sSup s
t : Finset ↑s
ht : k ≤ Finset.sup t Subtype.val
⊢ Finset.sup t Subtype.val ≤ Finset.sup (Finset.image Subtype.val t) id

tactic: exact fun x hx => @Finset.le_sup _ _ _ _ _ id _ (Finset.mem_image_of_mem Subtype.val hx)
state_before: case mpr.intro
ι : Sort ?u.1219
α✝ : Type ?u.1222
inst✝¹ : CompleteLattice α✝
f : ι → α✝
α : Type u
inst✝ : CompleteLattice α
k : α
H : ∀ (ι : Type u) (s : ι → α), k ≤ iSup s → ∃ t, k ≤ Finset.sup t s
s : Set α
hs : k ≤ sSup s
t : Finset ↑s
ht : k ≤ Finset.sup t Subtype.val
⊢ ∀ (b : ↑s), b ∈ t → ↑b ≤ Finset.sup (Finset.image Subtype.val t) id

tactic: delta iSup
state_before: ι : Sort ?u.1219
α✝ : Type ?u.1222
inst✝¹ : CompleteLattice α✝
f : ι → α✝
α : Type u
inst✝ : CompleteLattice α
k : α
H : ∀ (ι : Type u) (s : ι → α), k ≤ iSup s → ∃ t, k ≤ Finset.sup t s
s : Set α
hs : k ≤ sSup s
⊢ k ≤ iSup Subtype.val

tactic: rwa [Subtype.range_coe]
state_before: ι : Sort ?u.1219
α✝ : Type ?u.1222
inst✝¹ : CompleteLattice α✝
f : ι → α✝
α : Type u
inst✝ : CompleteLattice α
k : α
H : ∀ (ι : Type u) (s : ι → α), k ≤ iSup s → ∃ t, k ≤ Finset.sup t s
s : Set α
hs : k ≤ sSup s
⊢ k ≤ sSup (Set.range Subtype.val)

tactic: simp
state_before: ι : Sort ?u.1219
α✝ : Type ?u.1222
inst✝¹ : CompleteLattice α✝
f : ι → α✝
α : Type u
inst✝ : CompleteLattice α
k : α
H : ∀ (ι : Type u) (s : ι → α), k ≤ iSup s → ∃ t, k ≤ Finset.sup t s
s : Set α
hs : k ≤ sSup s
t : Finset ↑s
ht : k ≤ Finset.sup t Subtype.val
⊢ ↑(Finset.image Subtype.val t) ⊆ s