Theorem: Set.chainHeight_eq_iSup_Ici
File: Mathlib/Order/Height.lean

tactic: apply le_antisymm
state_before: α : Type u_1
β : Type u_2
s t : Set α
inst✝ : Preorder α
⊢ s.chainHeight = ⨆ i ∈ s, (s ∩ Ici i).chainHeight
state_after: case a
α : Type u_1
β : Type u_2
s t : Set α
inst✝ : Preorder α
⊢ s.chainHeight ≤ ⨆ i ∈ s, (s ∩ Ici i).chainHeight

case a
α : Type u_1
β : Type u_2
s t : Set α
inst✝ : Preorder α
⊢ ⨆ i ∈ s, (s ∩ Ici i).chainHeight ≤ s.chainHeight

tactic: refine iSup₂_le ?_
state_before: case a
α : Type u_1
β : Type u_2
s t : Set α
inst✝ : Preorder α
⊢ s.chainHeight ≤ ⨆ i ∈ s, (s ∩ Ici i).chainHeight
state_after: case a
α : Type u_1
β : Type u_2
s t : Set α
inst✝ : Preorder α
⊢ ∀ i ∈ s.subchain, ↑i.length ≤ ⨆ i ∈ s, (s ∩ Ici i).chainHeight

tactic: rintro (_ | ⟨x, xs⟩) h
state_before: case a
α : Type u_1
β : Type u_2
s t : Set α
inst✝ : Preorder α
⊢ ∀ i ∈ s.subchain, ↑i.length ≤ ⨆ i ∈ s, (s ∩ Ici i).chainHeight
state_after: case a.nil
α : Type u_1
β : Type u_2
s t : Set α
inst✝ : Preorder α
h : [] ∈ s.subchain
⊢ ↑[].length ≤ ⨆ i ∈ s, (s ∩ Ici i).chainHeight

case a.cons
α : Type u_1
β : Type u_2
s t : Set α
inst✝ : Preorder α
x : α
xs : List α
h : x :: xs ∈ s.subchain
⊢ ↑(x :: xs).length ≤ ⨆ i ∈ s, (s ∩ Ici i).chainHeight

tactic: exact zero_le _
state_before: case a.nil
α : Type u_1
β : Type u_2
s t : Set α
inst✝ : Preorder α
h : [] ∈ s.subchain
⊢ ↑[].length ≤ ⨆ i ∈ s, (s ∩ Ici i).chainHeight
state_after: no goals

tactic: apply le_trans _ (le_iSup₂ x (cons_mem_subchain_iff.mp h).1)
state_before: case a.cons
α : Type u_1
β : Type u_2
s t : Set α
inst✝ : Preorder α
x : α
xs : List α
h : x :: xs ∈ s.subchain
⊢ ↑(x :: xs).length ≤ ⨆ i ∈ s, (s ∩ Ici i).chainHeight
state_after: α : Type u_1
β : Type u_2
s t : Set α
inst✝ : Preorder α
x : α
xs : List α
h : x :: xs ∈ s.subchain
⊢ ↑(x :: xs).length ≤ (s ∩ Ici x).chainHeight

tactic: apply length_le_chainHeight_of_mem_subchain
state_before: α : Type u_1
β : Type u_2
s t : Set α
inst✝ : Preorder α
x : α
xs : List α
h : x :: xs ∈ s.subchain
⊢ ↑(x :: xs).length ≤ (s ∩ Ici x).chainHeight
state_after: case hl
α : Type u_1
β : Type u_2
s t : Set α
inst✝ : Preorder α
x : α
xs : List α
h : x :: xs ∈ s.subchain
⊢ x :: xs ∈ (s ∩ Ici x).subchain

tactic: refine ⟨h.1, fun i hi ↦ ⟨h.2 i hi, ?_⟩⟩
state_before: case hl
α : Type u_1
β : Type u_2
s t : Set α
inst✝ : Preorder α
x : α
xs : List α
h : x :: xs ∈ s.subchain
⊢ x :: xs ∈ (s ∩ Ici x).subchain
state_after: case hl
α : Type u_1
β : Type u_2
s t : Set α
inst✝ : Preorder α
x : α
xs : List α
h : x :: xs ∈ s.subchain
i : α
hi : i ∈ x :: xs
⊢ i ∈ Ici x

tactic: cases hi
state_before: case hl
α : Type u_1
β : Type u_2
s t : Set α
inst✝ : Preorder α
x : α
xs : List α
h : x :: xs ∈ s.subchain
i : α
hi : i ∈ x :: xs
⊢ i ∈ Ici x
state_after: case hl.head
α : Type u_1
β : Type u_2
s t : Set α
inst✝ : Preorder α
x : α
xs : List α
h : x :: xs ∈ s.subchain
⊢ x ∈ Ici x

case hl.tail
α : Type u_1
β : Type u_2
s t : Set α
inst✝ : Preorder α
x : α
xs : List α
h : x :: xs ∈ s.subchain
i : α
a✝ : Mem i xs
⊢ i ∈ Ici x

tactic: rename_i hi
state_before: case hl.tail
α : Type u_1
β : Type u_2
s t : Set α
inst✝ : Preorder α
x : α
xs : List α
h : x :: xs ∈ s.subchain
i : α
a✝ : Mem i xs
⊢ i ∈ Ici x
state_after: case hl.tail
α : Type u_1
β : Type u_2
s t : Set α
inst✝ : Preorder α
x : α
xs : List α
h : x :: xs ∈ s.subchain
i : α
hi : Mem i xs
⊢ i ∈ Ici x

tactic: cases' chain'_iff_pairwise.mp h.1 with _ _ h'
state_before: case hl.tail
α : Type u_1
β : Type u_2
s t : Set α
inst✝ : Preorder α
x : α
xs : List α
h : x :: xs ∈ s.subchain
i : α
hi : Mem i xs
⊢ i ∈ Ici x
state_after: case hl.tail.cons
α : Type u_1
β : Type u_2
s t : Set α
inst✝ : Preorder α
x : α
xs : List α
h : x :: xs ∈ s.subchain
i : α
hi : Mem i xs
a✝ : List.Pairwise (fun x x_1 => x < x_1) xs
h' : ∀ a' ∈ xs, x < a'
⊢ i ∈ Ici x

tactic: exact (h' _ hi).le
state_before: case hl.tail.cons
α : Type u_1
β : Type u_2
s t : Set α
inst✝ : Preorder α
x : α
xs : List α
h : x :: xs ∈ s.subchain
i : α
hi : Mem i xs
a✝ : List.Pairwise (fun x x_1 => x < x_1) xs
h' : ∀ a' ∈ xs, x < a'
⊢ i ∈ Ici x
state_after: no goals

tactic: exact left_mem_Ici
state_before: case hl.head
α : Type u_1
β : Type u_2
s t : Set α
inst✝ : Preorder α
x : α
xs : List α
h : x :: xs ∈ s.subchain
⊢ x ∈ Ici x
state_after: no goals

tactic: exact iSup₂_le fun i _ ↦ chainHeight_mono Set.inter_subset_left
state_before: case a
α : Type u_1
β : Type u_2
s t : Set α
inst✝ : Preorder α
⊢ ⨆ i ∈ s, (s ∩ Ici i).chainHeight ≤ s.chainHeight
state_after: no goals