Theorem: IsChain.exists_maxChain
File: Mathlib/Order/Zorn.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
r : α → α → Prop
c : Set α
hc : IsChain r c
⊢ ∃ M, IsMaxChain r M ∧ c ⊆ M
state_after: case refine_2
α : Type u_1
β : Type u_2
r : α → α → Prop
c : Set α
hc : IsChain r c
H : ∃ m ∈ {s | c ⊆ s ∧ IsChain r s}, c ⊆ m ∧ ∀ a ∈ {s | c ⊆ s ∧ IsChain r s}, m ⊆ a → a = m
⊢ ∃ M, IsMaxChain r M ∧ c ⊆ M

case refine_1
α : Type u_1
β : Type u_2
r : α → α → Prop
c : Set α
hc : IsChain r c
⊢ ∀ c_1 ⊆ {s | c ⊆ s ∧ IsChain r s},
    IsChain (fun x x_1 => x ⊆ x_1) c_1 → c_1.Nonempty → ∃ ub ∈ {s | c ⊆ s ∧ IsChain r s}, ∀ s ∈ c_1, s ⊆ ub
tactic: have H := zorn_subset_nonempty { s | c ⊆ s ∧ IsChain r s } ?_ c ⟨Subset.rfl, hc⟩
state_before: case refine_1
α : Type u_1
β : Type u_2
r : α → α → Prop
c : Set α
hc : IsChain r c
⊢ ∀ c_1 ⊆ {s | c ⊆ s ∧ IsChain r s},
    IsChain (fun x x_1 => x ⊆ x_1) c_1 → c_1.Nonempty → ∃ ub ∈ {s | c ⊆ s ∧ IsChain r s}, ∀ s ∈ c_1, s ⊆ ub
state_after: case refine_1.intro
α : Type u_1
β : Type u_2
r : α → α → Prop
c : Set α
hc : IsChain r c
cs : Set (Set α)
hcs₀ : cs ⊆ {s | c ⊆ s ∧ IsChain r s}
hcs₁ : IsChain (fun x x_1 => x ⊆ x_1) cs
s : Set α
hs : s ∈ cs
⊢ ∃ ub ∈ {s | c ⊆ s ∧ IsChain r s}, ∀ s ∈ cs, s ⊆ ub
tactic: rintro cs hcs₀ hcs₁ ⟨s, hs⟩
state_before: case refine_1.intro
α : Type u_1
β : Type u_2
r : α → α → Prop
c : Set α
hc : IsChain r c
cs : Set (Set α)
hcs₀ : cs ⊆ {s | c ⊆ s ∧ IsChain r s}
hcs₁ : IsChain (fun x x_1 => x ⊆ x_1) cs
s : Set α
hs : s ∈ cs
⊢ ∃ ub ∈ {s | c ⊆ s ∧ IsChain r s}, ∀ s ∈ cs, s ⊆ ub
state_after: case refine_1.intro
α : Type u_1
β : Type u_2
r : α → α → Prop
c : Set α
hc : IsChain r c
cs : Set (Set α)
hcs₀ : cs ⊆ {s | c ⊆ s ∧ IsChain r s}
hcs₁ : IsChain (fun x x_1 => x ⊆ x_1) cs
s : Set α
hs : s ∈ cs
⊢ IsChain r (⋃₀ cs)
tactic: refine
    ⟨⋃₀cs, ⟨fun _ ha => Set.mem_sUnion_of_mem ((hcs₀ hs).left ha) hs, ?_⟩, fun _ =>
      Set.subset_sUnion_of_mem⟩
state_before: case refine_1.intro
α : Type u_1
β : Type u_2
r : α → α → Prop
c : Set α
hc : IsChain r c
cs : Set (Set α)
hcs₀ : cs ⊆ {s | c ⊆ s ∧ IsChain r s}
hcs₁ : IsChain (fun x x_1 => x ⊆ x_1) cs
s : Set α
hs : s ∈ cs
⊢ IsChain r (⋃₀ cs)
state_after: case refine_1.intro.intro.intro.intro.intro
α : Type u_1
β : Type u_2
r : α → α → Prop
c : Set α
hc : IsChain r c
cs : Set (Set α)
hcs₀ : cs ⊆ {s | c ⊆ s ∧ IsChain r s}
hcs₁ : IsChain (fun x x_1 => x ⊆ x_1) cs
s : Set α
hs : s ∈ cs
y : α
sy : Set α
hsy : sy ∈ cs
hysy : y ∈ sy
z : α
sz : Set α
hsz : sz ∈ cs
hzsz : z ∈ sz
hyz : y ≠ z
⊢ r y z ∨ r z y
tactic: rintro y ⟨sy, hsy, hysy⟩ z ⟨sz, hsz, hzsz⟩ hyz
state_before: case refine_1.intro.intro.intro.intro.intro
α : Type u_1
β : Type u_2
r : α → α → Prop
c : Set α
hc : IsChain r c
cs : Set (Set α)
hcs₀ : cs ⊆ {s | c ⊆ s ∧ IsChain r s}
hcs₁ : IsChain (fun x x_1 => x ⊆ x_1) cs
s : Set α
hs : s ∈ cs
y : α
sy : Set α
hsy : sy ∈ cs
hysy : y ∈ sy
z : α
sz : Set α
hsz : sz ∈ cs
hzsz : z ∈ sz
hyz : y ≠ z
⊢ r y z ∨ r z y
state_after: case refine_1.intro.intro.intro.intro.intro.inl
α : Type u_1
β : Type u_2
r : α → α → Prop
c : Set α
hc : IsChain r c
cs : Set (Set α)
hcs₀ : cs ⊆ {s | c ⊆ s ∧ IsChain r s}
hcs₁ : IsChain (fun x x_1 => x ⊆ x_1) cs
s : Set α
hs : s ∈ cs
y : α
sy : Set α
hsy : sy ∈ cs
hysy : y ∈ sy
z : α
hyz : y ≠ z
hsz : sy ∈ cs
hzsz : z ∈ sy
⊢ r y z ∨ r z y

case refine_1.intro.intro.intro.intro.intro.inr
α : Type u_1
β : Type u_2
r : α → α → Prop
c : Set α
hc : IsChain r c
cs : Set (Set α)
hcs₀ : cs ⊆ {s | c ⊆ s ∧ IsChain r s}
hcs₁ : IsChain (fun x x_1 => x ⊆ x_1) cs
s : Set α
hs : s ∈ cs
y : α
sy : Set α
hsy : sy ∈ cs
hysy : y ∈ sy
z : α
sz : Set α
hsz : sz ∈ cs
hzsz : z ∈ sz
hyz : y ≠ z
hsseq : sy ≠ sz
⊢ r y z ∨ r z y
tactic: obtain rfl | hsseq := eq_or_ne sy sz
state_before: case refine_1.intro.intro.intro.intro.intro.inr
α : Type u_1
β : Type u_2
r : α → α → Prop
c : Set α
hc : IsChain r c
cs : Set (Set α)
hcs₀ : cs ⊆ {s | c ⊆ s ∧ IsChain r s}
hcs₁ : IsChain (fun x x_1 => x ⊆ x_1) cs
s : Set α
hs : s ∈ cs
y : α
sy : Set α
hsy : sy ∈ cs
hysy : y ∈ sy
z : α
sz : Set α
hsz : sz ∈ cs
hzsz : z ∈ sz
hyz : y ≠ z
hsseq : sy ≠ sz
⊢ r y z ∨ r z y
state_after: case refine_1.intro.intro.intro.intro.intro.inr.inl
α : Type u_1
β : Type u_2
r : α → α → Prop
c : Set α
hc : IsChain r c
cs : Set (Set α)
hcs₀ : cs ⊆ {s | c ⊆ s ∧ IsChain r s}
hcs₁ : IsChain (fun x x_1 => x ⊆ x_1) cs
s : Set α
hs : s ∈ cs
y : α
sy : Set α
hsy : sy ∈ cs
hysy : y ∈ sy
z : α
sz : Set α
hsz : sz ∈ cs
hzsz : z ∈ sz
hyz : y ≠ z
hsseq : sy ≠ sz
h : (fun x x_1 => x ⊆ x_1) sy sz
⊢ r y z ∨ r z y

case refine_1.intro.intro.intro.intro.intro.inr.inr
α : Type u_1
β : Type u_2
r : α → α → Prop
c : Set α
hc : IsChain r c
cs : Set (Set α)
hcs₀ : cs ⊆ {s | c ⊆ s ∧ IsChain r s}
hcs₁ : IsChain (fun x x_1 => x ⊆ x_1) cs
s : Set α
hs : s ∈ cs
y : α
sy : Set α
hsy : sy ∈ cs
hysy : y ∈ sy
z : α
sz : Set α
hsz : sz ∈ cs
hzsz : z ∈ sz
hyz : y ≠ z
hsseq : sy ≠ sz
h : (fun x x_1 => x ⊆ x_1) sz sy
⊢ r y z ∨ r z y
tactic: cases' hcs₁ hsy hsz hsseq with h h