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

tactic: constructor
state_before: ι : Sort ?u.110031
α : Type u_1
inst✝ : CompleteLattice α
f : ι → α
k : α
h : IsCompactElement k
⊢ IsCoatomic ↑(Set.Iic k)

tactic: rintro ⟨b, hbk⟩
state_before: case eq_top_or_exists_le_coatom
ι : Sort ?u.110031
α : Type u_1
inst✝ : CompleteLattice α
f : ι → α
k : α
h : IsCompactElement k
⊢ ∀ (b : ↑(Set.Iic k)), b = ⊤ ∨ ∃ a, IsCoatom a ∧ b ≤ a

tactic: obtain rfl | H := eq_or_ne b k
state_before: case eq_top_or_exists_le_coatom.mk
ι : Sort ?u.110031
α : Type u_1
inst✝ : CompleteLattice α
f : ι → α
k : α
h : IsCompactElement k
b : α
hbk : b ∈ Set.Iic k
⊢ { val := b, property := hbk } = ⊤ ∨ ∃ a, IsCoatom a ∧ { val := b, property := hbk } ≤ a

tactic: right
state_before: case eq_top_or_exists_le_coatom.mk.inr
ι : Sort ?u.110031
α : Type u_1
inst✝ : CompleteLattice α
f : ι → α
k : α
h : IsCompactElement k
b : α
hbk : b ∈ Set.Iic k
H : b ≠ k
⊢ { val := b, property := hbk } = ⊤ ∨ ∃ a, IsCoatom a ∧ { val := b, property := hbk } ≤ a

tactic: have ih : ?_ := ?_
state_before: case eq_top_or_exists_le_coatom.mk.inr.h
ι : Sort ?u.110031
α : Type u_1
inst✝ : CompleteLattice α
f : ι → α
k : α
h : IsCompactElement k
b : α
hbk : b ∈ Set.Iic k
H : b ≠ k
⊢ ∃ a, IsCoatom a ∧ { val := b, property := hbk } ≤ a

tactic: obtain ⟨a, a₀, ba, h⟩ := zorn_nonempty_partialOrder₀ (Set.Iio k) ih b (lt_of_le_of_ne hbk H)
state_before: case eq_top_or_exists_le_coatom.mk.inr.h.refine_3
ι : Sort ?u.110031
α : Type u_1
inst✝ : CompleteLattice α
f : ι → α
k : α
h : IsCompactElement k
b : α
hbk : b ∈ Set.Iic k
H : b ≠ k
ih : ?eq_top_or_exists_le_coatom.mk.inr.h.refine_1
⊢ ∃ a, IsCoatom a ∧ { val := b, property := hbk } ≤ a

case eq_top_or_exists_le_coatom.mk.inr.h.refine_1
ι : Sort ?u.110031
α : Type u_1
inst✝ : CompleteLattice α
f : ι → α
k : α
h : IsCompactElement k
b : α
hbk : b ∈ Set.Iic k
H : b ≠ k
⊢ Sort ?u.111663

case eq_top_or_exists_le_coatom.mk.inr.h.refine_2
ι : Sort ?u.110031
α : Type u_1
inst✝ : CompleteLattice α
f : ι → α
k : α
h : IsCompactElement k
b : α
hbk : b ∈ Set.Iic k
H : b ≠ k
⊢ ?eq_top_or_exists_le_coatom.mk.inr.h.refine_1

tactic: left
state_before: case eq_top_or_exists_le_coatom.mk.inl
ι : Sort ?u.110031
α : Type u_1
inst✝ : CompleteLattice α
f : ι → α
b : α
h : IsCompactElement b
hbk : b ∈ Set.Iic b
⊢ { val := b, property := hbk } = ⊤ ∨ ∃ a, IsCoatom a ∧ { val := b, property := hbk } ≤ a

tactic: ext
state_before: case eq_top_or_exists_le_coatom.mk.inl.h
ι : Sort ?u.110031
α : Type u_1
inst✝ : CompleteLattice α
f : ι → α
b : α
h : IsCompactElement b
hbk : b ∈ Set.Iic b
⊢ { val := b, property := hbk } = ⊤

tactic: simp only [Set.Iic.coe_top, Subtype.coe_mk]
state_before: case eq_top_or_exists_le_coatom.mk.inl.h.a
ι : Sort ?u.110031
α : Type u_1
inst✝ : CompleteLattice α
f : ι → α
b : α
h : IsCompactElement b
hbk : b ∈ Set.Iic b
⊢ ↑{ val := b, property := hbk } = ↑⊤

tactic: refine' ⟨⟨a, le_of_lt a₀⟩, ⟨ne_of_lt a₀, fun c hck => by_contradiction fun c₀ => _⟩, ba⟩
state_before: case eq_top_or_exists_le_coatom.mk.inr.h.refine_3.intro.intro.intro
ι : Sort ?u.110031
α : Type u_1
inst✝ : CompleteLattice α
f : ι → α
k : α
h✝ : IsCompactElement k
b : α
hbk : b ∈ Set.Iic k
H : b ≠ k
ih : ?eq_top_or_exists_le_coatom.mk.inr.h.refine_1
a : α
a₀ : a ∈ Set.Iio k
ba : b ≤ a
h : ∀ (z : α), z ∈ Set.Iio k → a ≤ z → z = a
⊢ ∃ a, IsCoatom a ∧ { val := b, property := hbk } ≤ a

tactic: cases h c.1 (lt_of_le_of_ne c.2 fun con => c₀ (Subtype.ext con)) hck.le
state_before: case eq_top_or_exists_le_coatom.mk.inr.h.refine_3.intro.intro.intro
ι : Sort ?u.110031
α : Type u_1
inst✝ : CompleteLattice α
f : ι → α
k : α
h✝ : IsCompactElement k
b : α
hbk : b ∈ Set.Iic k
H : b ≠ k
ih :
  ∀ (c : Set α),
    c ⊆ Set.Iio k →
      IsChain (fun x x_1 => x ≤ x_1) c → ∀ (y : α), y ∈ c → ∃ ub, ub ∈ Set.Iio k ∧ ∀ (z : α), z ∈ c → z ≤ ub
a : α
a₀ : a ∈ Set.Iio k
ba : b ≤ a
h : ∀ (z : α), z ∈ Set.Iio k → a ≤ z → z = a
c : ↑(Set.Iic k)
hck : { val := a, property := (_ : a ≤ k) } < c
c₀ : ¬c = ⊤
⊢ False

tactic: exact lt_irrefl _ hck
state_before: case eq_top_or_exists_le_coatom.mk.inr.h.refine_3.intro.intro.intro.refl
ι : Sort ?u.110031
α : Type u_1
inst✝ : CompleteLattice α
f : ι → α
k : α
h✝ : IsCompactElement k
b : α
hbk : b ∈ Set.Iic k
H : b ≠ k
ih :
  ∀ (c : Set α),
    c ⊆ Set.Iio k →
      IsChain (fun x x_1 => x ≤ x_1) c → ∀ (y : α), y ∈ c → ∃ ub, ub ∈ Set.Iio k ∧ ∀ (z : α), z ∈ c → z ≤ ub
c : ↑(Set.Iic k)
c₀ : ¬c = ⊤
a₀ : ↑c ∈ Set.Iio k
ba : b ≤ ↑c
h : ∀ (z : α), z ∈ Set.Iio k → ↑c ≤ z → z = ↑c
hck : { val := ↑c, property := (_ : ↑c ≤ k) } < c
⊢ False

tactic: intro S SC cC I _
state_before: case eq_top_or_exists_le_coatom.mk.inr.h.refine_2
ι : Sort ?u.110031
α : Type u_1
inst✝ : CompleteLattice α
f : ι → α
k : α
h : IsCompactElement k
b : α
hbk : b ∈ Set.Iic k
H : b ≠ k
⊢ ∀ (c : Set α),
    c ⊆ Set.Iio k →
      IsChain (fun x x_1 => x ≤ x_1) c → ∀ (y : α), y ∈ c → ∃ ub, ub ∈ Set.Iio k ∧ ∀ (z : α), z ∈ c → z ≤ ub

tactic: by_cases hS : S.Nonempty
state_before: case eq_top_or_exists_le_coatom.mk.inr.h.refine_2
ι : Sort ?u.110031
α : Type u_1
inst✝ : CompleteLattice α
f : ι → α
k : α
h : IsCompactElement k
b : α
hbk : b ∈ Set.Iic k
H : b ≠ k
S : Set α
SC : S ⊆ Set.Iio k
cC : IsChain (fun x x_1 => x ≤ x_1) S
I : α
a✝ : I ∈ S
⊢ ∃ ub, ub ∈ Set.Iio k ∧ ∀ (z : α), z ∈ S → z ≤ ub

tactic: exact
  ⟨b, lt_of_le_of_ne hbk H, by
    simp only [Set.not_nonempty_iff_eq_empty.mp hS, Set.mem_empty_iff_false, forall_const,
      forall_prop_of_false, not_false_iff]⟩
state_before: case neg
ι : Sort ?u.110031
α : Type u_1
inst✝ : CompleteLattice α
f : ι → α
k : α
h : IsCompactElement k
b : α
hbk : b ∈ Set.Iic k
H : b ≠ k
S : Set α
SC : S ⊆ Set.Iio k
cC : IsChain (fun x x_1 => x ≤ x_1) S
I : α
a✝ : I ∈ S
hS : ¬Set.Nonempty S
⊢ ∃ ub, ub ∈ Set.Iio k ∧ ∀ (z : α), z ∈ S → z ≤ ub

tactic: refine' ⟨sSup S, h.directed_sSup_lt_of_lt hS cC.directedOn SC, _⟩
state_before: case pos
ι : Sort ?u.110031
α : Type u_1
inst✝ : CompleteLattice α
f : ι → α
k : α
h : IsCompactElement k
b : α
hbk : b ∈ Set.Iic k
H : b ≠ k
S : Set α
SC : S ⊆ Set.Iio k
cC : IsChain (fun x x_1 => x ≤ x_1) S
I : α
a✝ : I ∈ S
hS : Set.Nonempty S
⊢ ∃ ub, ub ∈ Set.Iio k ∧ ∀ (z : α), z ∈ S → z ≤ ub

tactic: intro
state_before: case pos
ι : Sort ?u.110031
α : Type u_1
inst✝ : CompleteLattice α
f : ι → α
k : α
h : IsCompactElement k
b : α
hbk : b ∈ Set.Iic k
H : b ≠ k
S : Set α
SC : S ⊆ Set.Iio k
cC : IsChain (fun x x_1 => x ≤ x_1) S
I : α
a✝ : I ∈ S
hS : Set.Nonempty S
⊢ ∀ (z : α), z ∈ S → z ≤ sSup S

tactic: apply le_sSup
state_before: case pos
ι : Sort ?u.110031
α : Type u_1
inst✝ : CompleteLattice α
f : ι → α
k : α
h : IsCompactElement k
b : α
hbk : b ∈ Set.Iic k
H : b ≠ k
S : Set α
SC : S ⊆ Set.Iio k
cC : IsChain (fun x x_1 => x ≤ x_1) S
I : α
a✝ : I ∈ S
hS : Set.Nonempty S
z✝ : α
⊢ z✝ ∈ S → z✝ ≤ sSup S

tactic: simp only [Set.not_nonempty_iff_eq_empty.mp hS, Set.mem_empty_iff_false, forall_const,
  forall_prop_of_false, not_false_iff]
state_before: ι : Sort ?u.110031
α : Type u_1
inst✝ : CompleteLattice α
f : ι → α
k : α
h : IsCompactElement k
b : α
hbk : b ∈ Set.Iic k
H : b ≠ k
S : Set α
SC : S ⊆ Set.Iio k
cC : IsChain (fun x x_1 => x ≤ x_1) S
I : α
a✝ : I ∈ S
hS : ¬Set.Nonempty S
⊢ ∀ (z : α), z ∈ S → z ≤ b