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

tactic: tfae_have 1 → 2
state_before: α : Type u_1
β : Type u_2
inst✝¹ : LT α
inst✝ : LT β
s t : Set α
l : List α
a : α
n : ℕ
⊢ [↑n ≤ s.chainHeight, ∃ l ∈ s.subchain, l.length = n, ∃ l ∈ s.subchain, n ≤ l.length].TFAE
state_after: case tfae_1_to_2
α : Type u_1
β : Type u_2
inst✝¹ : LT α
inst✝ : LT β
s t : Set α
l : List α
a : α
n : ℕ
⊢ ↑n ≤ s.chainHeight → ∃ l ∈ s.subchain, l.length = n

α : Type u_1
β : Type u_2
inst✝¹ : LT α
inst✝ : LT β
s t : Set α
l : List α
a : α
n : ℕ
tfae_1_to_2 : ↑n ≤ s.chainHeight → ∃ l ∈ s.subchain, l.length = n
⊢ [↑n ≤ s.chainHeight, ∃ l ∈ s.subchain, l.length = n, ∃ l ∈ s.subchain, n ≤ l.length].TFAE

tactic: tfae_have 2 → 3
state_before: α : Type u_1
β : Type u_2
inst✝¹ : LT α
inst✝ : LT β
s t : Set α
l : List α
a : α
n : ℕ
tfae_1_to_2 : ↑n ≤ s.chainHeight → ∃ l ∈ s.subchain, l.length = n
⊢ [↑n ≤ s.chainHeight, ∃ l ∈ s.subchain, l.length = n, ∃ l ∈ s.subchain, n ≤ l.length].TFAE
state_after: case tfae_2_to_3
α : Type u_1
β : Type u_2
inst✝¹ : LT α
inst✝ : LT β
s t : Set α
l : List α
a : α
n : ℕ
tfae_1_to_2 : ↑n ≤ s.chainHeight → ∃ l ∈ s.subchain, l.length = n
⊢ (∃ l ∈ s.subchain, l.length = n) → ∃ l ∈ s.subchain, n ≤ l.length

α : Type u_1
β : Type u_2
inst✝¹ : LT α
inst✝ : LT β
s t : Set α
l : List α
a : α
n : ℕ
tfae_1_to_2 : ↑n ≤ s.chainHeight → ∃ l ∈ s.subchain, l.length = n
tfae_2_to_3 : (∃ l ∈ s.subchain, l.length = n) → ∃ l ∈ s.subchain, n ≤ l.length
⊢ [↑n ≤ s.chainHeight, ∃ l ∈ s.subchain, l.length = n, ∃ l ∈ s.subchain, n ≤ l.length].TFAE

tactic: tfae_have 3 → 1
state_before: α : Type u_1
β : Type u_2
inst✝¹ : LT α
inst✝ : LT β
s t : Set α
l : List α
a : α
n : ℕ
tfae_1_to_2 : ↑n ≤ s.chainHeight → ∃ l ∈ s.subchain, l.length = n
tfae_2_to_3 : (∃ l ∈ s.subchain, l.length = n) → ∃ l ∈ s.subchain, n ≤ l.length
⊢ [↑n ≤ s.chainHeight, ∃ l ∈ s.subchain, l.length = n, ∃ l ∈ s.subchain, n ≤ l.length].TFAE
state_after: case tfae_3_to_1
α : Type u_1
β : Type u_2
inst✝¹ : LT α
inst✝ : LT β
s t : Set α
l : List α
a : α
n : ℕ
tfae_1_to_2 : ↑n ≤ s.chainHeight → ∃ l ∈ s.subchain, l.length = n
tfae_2_to_3 : (∃ l ∈ s.subchain, l.length = n) → ∃ l ∈ s.subchain, n ≤ l.length
⊢ (∃ l ∈ s.subchain, n ≤ l.length) → ↑n ≤ s.chainHeight

α : Type u_1
β : Type u_2
inst✝¹ : LT α
inst✝ : LT β
s t : Set α
l : List α
a : α
n : ℕ
tfae_1_to_2 : ↑n ≤ s.chainHeight → ∃ l ∈ s.subchain, l.length = n
tfae_2_to_3 : (∃ l ∈ s.subchain, l.length = n) → ∃ l ∈ s.subchain, n ≤ l.length
tfae_3_to_1 : (∃ l ∈ s.subchain, n ≤ l.length) → ↑n ≤ s.chainHeight
⊢ [↑n ≤ s.chainHeight, ∃ l ∈ s.subchain, l.length = n, ∃ l ∈ s.subchain, n ≤ l.length].TFAE

tactic: tfae_finish
state_before: α : Type u_1
β : Type u_2
inst✝¹ : LT α
inst✝ : LT β
s t : Set α
l : List α
a : α
n : ℕ
tfae_1_to_2 : ↑n ≤ s.chainHeight → ∃ l ∈ s.subchain, l.length = n
tfae_2_to_3 : (∃ l ∈ s.subchain, l.length = n) → ∃ l ∈ s.subchain, n ≤ l.length
tfae_3_to_1 : (∃ l ∈ s.subchain, n ≤ l.length) → ↑n ≤ s.chainHeight
⊢ [↑n ≤ s.chainHeight, ∃ l ∈ s.subchain, l.length = n, ∃ l ∈ s.subchain, n ≤ l.length].TFAE
state_after: no goals

tactic: exact s.exists_chain_of_le_chainHeight
state_before: case tfae_1_to_2
α : Type u_1
β : Type u_2
inst✝¹ : LT α
inst✝ : LT β
s t : Set α
l : List α
a : α
n : ℕ
⊢ ↑n ≤ s.chainHeight → ∃ l ∈ s.subchain, l.length = n
state_after: no goals

tactic: rintro ⟨l, hls, he⟩
state_before: case tfae_2_to_3
α : Type u_1
β : Type u_2
inst✝¹ : LT α
inst✝ : LT β
s t : Set α
l : List α
a : α
n : ℕ
tfae_1_to_2 : ↑n ≤ s.chainHeight → ∃ l ∈ s.subchain, l.length = n
⊢ (∃ l ∈ s.subchain, l.length = n) → ∃ l ∈ s.subchain, n ≤ l.length
state_after: case tfae_2_to_3.intro.intro
α : Type u_1
β : Type u_2
inst✝¹ : LT α
inst✝ : LT β
s t : Set α
l✝ : List α
a : α
n : ℕ
tfae_1_to_2 : ↑n ≤ s.chainHeight → ∃ l ∈ s.subchain, l.length = n
l : List α
hls : l ∈ s.subchain
he : l.length = n
⊢ ∃ l ∈ s.subchain, n ≤ l.length

tactic: exact ⟨l, hls, he.ge⟩
state_before: case tfae_2_to_3.intro.intro
α : Type u_1
β : Type u_2
inst✝¹ : LT α
inst✝ : LT β
s t : Set α
l✝ : List α
a : α
n : ℕ
tfae_1_to_2 : ↑n ≤ s.chainHeight → ∃ l ∈ s.subchain, l.length = n
l : List α
hls : l ∈ s.subchain
he : l.length = n
⊢ ∃ l ∈ s.subchain, n ≤ l.length
state_after: no goals

tactic: rintro ⟨l, hs, hn⟩
state_before: case tfae_3_to_1
α : Type u_1
β : Type u_2
inst✝¹ : LT α
inst✝ : LT β
s t : Set α
l : List α
a : α
n : ℕ
tfae_1_to_2 : ↑n ≤ s.chainHeight → ∃ l ∈ s.subchain, l.length = n
tfae_2_to_3 : (∃ l ∈ s.subchain, l.length = n) → ∃ l ∈ s.subchain, n ≤ l.length
⊢ (∃ l ∈ s.subchain, n ≤ l.length) → ↑n ≤ s.chainHeight
state_after: case tfae_3_to_1.intro.intro
α : Type u_1
β : Type u_2
inst✝¹ : LT α
inst✝ : LT β
s t : Set α
l✝ : List α
a : α
n : ℕ
tfae_1_to_2 : ↑n ≤ s.chainHeight → ∃ l ∈ s.subchain, l.length = n
tfae_2_to_3 : (∃ l ∈ s.subchain, l.length = n) → ∃ l ∈ s.subchain, n ≤ l.length
l : List α
hs : l ∈ s.subchain
hn : n ≤ l.length
⊢ ↑n ≤ s.chainHeight

tactic: exact le_iSup₂_of_le l hs (WithTop.coe_le_coe.2 hn)
state_before: case tfae_3_to_1.intro.intro
α : Type u_1
β : Type u_2
inst✝¹ : LT α
inst✝ : LT β
s t : Set α
l✝ : List α
a : α
n : ℕ
tfae_1_to_2 : ↑n ≤ s.chainHeight → ∃ l ∈ s.subchain, l.length = n
tfae_2_to_3 : (∃ l ∈ s.subchain, l.length = n) → ∃ l ∈ s.subchain, n ≤ l.length
l : List α
hs : l ∈ s.subchain
hn : n ≤ l.length
⊢ ↑n ≤ s.chainHeight
state_after: no goals