Theorem: LO.FirstOrder.Arith.Model.lh_graph (Arithmetization/ISigmaOne/HFS/Seq.lean)

State before:
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚺₁
l s : M
⊢ l = lh s → (Seq s → ∃ d ≤ 2 * s, d = domain s ∧ d = under l) ∧ (¬Seq s → l = 0)
Tactic:
rintro rfl
State after:
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚺₁
s : M
⊢ (Seq s → ∃ d ≤ 2 * s, d = domain s ∧ d = under (lh s)) ∧ (¬Seq s → lh s = 0)

State before:
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚺₁
s : M
⊢ (Seq s → ∃ d ≤ 2 * s, d = domain s ∧ d = under (lh s)) ∧ (¬Seq s → lh s = 0)
Tactic:
by_cases Hs : Seq s <;> simp [Hs, ←Seq.domain_eq, lh_prop_of_not_seq]
State after:
no goals

State before:
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚺₁
l s : M
⊢ (Seq s → ∃ d ≤ 2 * s, d = domain s ∧ d = under l) ∧ (¬Seq s → l = 0) → l = lh s
Tactic:
rintro ⟨h, hn⟩
State after:
case intro
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚺₁
l s : M
h : Seq s → ∃ d ≤ 2 * s, d = domain s ∧ d = under l
hn : ¬Seq s → l = 0
⊢ l = lh s

State before:
case intro
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚺₁
l s : M
h : Seq s → ∃ d ≤ 2 * s, d = domain s ∧ d = under l
hn : ¬Seq s → l = 0
⊢ l = lh s
Tactic:
by_cases Hs : Seq s
State after:
case pos
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚺₁
l s : M
h : Seq s → ∃ d ≤ 2 * s, d = domain s ∧ d = under l
hn : ¬Seq s → l = 0
Hs : Seq s
⊢ l = lh s

case neg
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚺₁
l s : M
h : Seq s → ∃ d ≤ 2 * s, d = domain s ∧ d = under l
hn : ¬Seq s → l = 0
Hs : ¬Seq s
⊢ l = lh s

State before:
case pos
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚺₁
l s : M
h : Seq s → ∃ d ≤ 2 * s, d = domain s ∧ d = under l
hn : ¬Seq s → l = 0
Hs : Seq s
⊢ l = lh s
Tactic:
rcases h Hs with ⟨_, _, rfl, h⟩
State after:
case pos.intro.intro.intro
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚺₁
l s : M
h✝ : Seq s → ∃ d ≤ 2 * s, d = domain s ∧ d = under l
hn : ¬Seq s → l = 0
Hs : Seq s
left✝ : domain s ≤ 2 * s
h : domain s = under l
⊢ l = lh s

State before:
case pos.intro.intro.intro
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚺₁
l s : M
h✝ : Seq s → ∃ d ≤ 2 * s, d = domain s ∧ d = under l
hn : ¬Seq s → l = 0
Hs : Seq s
left✝ : domain s ≤ 2 * s
h : domain s = under l
⊢ l = lh s
Tactic:
simpa [h] using Hs.domain_eq
State after:
no goals

State before:
case neg
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐈𝚺₁
l s : M
h : Seq s → ∃ d ≤ 2 * s, d = domain s ∧ d = under l
hn : ¬Seq s → l = 0
Hs : ¬Seq s
⊢ l = lh s
Tactic:
simp [lh_prop_of_not_seq Hs, hn Hs]
State after:
no goals