Theorem: LO.FirstOrder.Arith.Model.pi₁_defined (Arithmetization/Basic/IOpen.lean)

State before:
M : Type u_1
inst✝⁶ : Zero M
inst✝⁵ : One M
inst✝⁴ : Add M
inst✝³ : Mul M
inst✝² : LT M
inst✝¹ : M ⊧ₘ* 𝐏𝐀⁻
inst✝ : M ⊧ₘ* 𝐈open
⊢ 𝚺₀-Function₁ pi₁ via pi₁Def
Tactic:
intro v
State after:
M : Type u_1
inst✝⁶ : Zero M
inst✝⁵ : One M
inst✝⁴ : Add M
inst✝³ : Mul M
inst✝² : LT M
inst✝¹ : M ⊧ₘ* 𝐏𝐀⁻
inst✝ : M ⊧ₘ* 𝐈open
v : Fin (Nat.succ 1) → M
⊢ (fun v => v 0 = (fun v => π₁ v 0) fun x => v x.succ) v ↔ (Semiformula.Evalbm M v) (HSemiformula.val pi₁Def)

State before:
M : Type u_1
inst✝⁶ : Zero M
inst✝⁵ : One M
inst✝⁴ : Add M
inst✝³ : Mul M
inst✝² : LT M
inst✝¹ : M ⊧ₘ* 𝐏𝐀⁻
inst✝ : M ⊧ₘ* 𝐈open
v : Fin (Nat.succ 1) → M
⊢ (fun v => v 0 = (fun v => π₁ v 0) fun x => v x.succ) v ↔ (Semiformula.Evalbm M v) (HSemiformula.val pi₁Def)
Tactic:
simp [pi₁Def]
State after:
M : Type u_1
inst✝⁶ : Zero M
inst✝⁵ : One M
inst✝⁴ : Add M
inst✝³ : Mul M
inst✝² : LT M
inst✝¹ : M ⊧ₘ* 𝐏𝐀⁻
inst✝ : M ⊧ₘ* 𝐈open
v : Fin (Nat.succ 1) → M
⊢ v 0 = π₁ v 1 ↔ ∃ x ≤ v 1, v 1 = ⟪v 0, x⟫

State before:
M : Type u_1
inst✝⁶ : Zero M
inst✝⁵ : One M
inst✝⁴ : Add M
inst✝³ : Mul M
inst✝² : LT M
inst✝¹ : M ⊧ₘ* 𝐏𝐀⁻
inst✝ : M ⊧ₘ* 𝐈open
v : Fin (Nat.succ 1) → M
⊢ v 0 = π₁ v 1 ↔ ∃ x ≤ v 1, v 1 = ⟪v 0, x⟫
Tactic:
constructor
State after:
case mp
M : Type u_1
inst✝⁶ : Zero M
inst✝⁵ : One M
inst✝⁴ : Add M
inst✝³ : Mul M
inst✝² : LT M
inst✝¹ : M ⊧ₘ* 𝐏𝐀⁻
inst✝ : M ⊧ₘ* 𝐈open
v : Fin (Nat.succ 1) → M
⊢ v 0 = π₁ v 1 → ∃ x ≤ v 1, v 1 = ⟪v 0, x⟫

case mpr
M : Type u_1
inst✝⁶ : Zero M
inst✝⁵ : One M
inst✝⁴ : Add M
inst✝³ : Mul M
inst✝² : LT M
inst✝¹ : M ⊧ₘ* 𝐏𝐀⁻
inst✝ : M ⊧ₘ* 𝐈open
v : Fin (Nat.succ 1) → M
⊢ (∃ x ≤ v 1, v 1 = ⟪v 0, x⟫) → v 0 = π₁ v 1

State before:
case mp
M : Type u_1
inst✝⁶ : Zero M
inst✝⁵ : One M
inst✝⁴ : Add M
inst✝³ : Mul M
inst✝² : LT M
inst✝¹ : M ⊧ₘ* 𝐏𝐀⁻
inst✝ : M ⊧ₘ* 𝐈open
v : Fin (Nat.succ 1) → M
⊢ v 0 = π₁ v 1 → ∃ x ≤ v 1, v 1 = ⟪v 0, x⟫
Tactic:
intro h
State after:
case mp
M : Type u_1
inst✝⁶ : Zero M
inst✝⁵ : One M
inst✝⁴ : Add M
inst✝³ : Mul M
inst✝² : LT M
inst✝¹ : M ⊧ₘ* 𝐏𝐀⁻
inst✝ : M ⊧ₘ* 𝐈open
v : Fin (Nat.succ 1) → M
h : v 0 = π₁ v 1
⊢ ∃ x ≤ v 1, v 1 = ⟪v 0, x⟫

State before:
case mp
M : Type u_1
inst✝⁶ : Zero M
inst✝⁵ : One M
inst✝⁴ : Add M
inst✝³ : Mul M
inst✝² : LT M
inst✝¹ : M ⊧ₘ* 𝐏𝐀⁻
inst✝ : M ⊧ₘ* 𝐈open
v : Fin (Nat.succ 1) → M
h : v 0 = π₁ v 1
⊢ ∃ x ≤ v 1, v 1 = ⟪v 0, x⟫
Tactic:
exact ⟨π₂ v 1, by simp [←le_iff_lt_succ],  by simp [h]⟩
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 ⊧ₘ* 𝐏𝐀⁻
inst✝ : M ⊧ₘ* 𝐈open
v : Fin (Nat.succ 1) → M
h : v 0 = π₁ v 1
⊢ π₂ v 1 ≤ v 1
Tactic:
simp [←le_iff_lt_succ]
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 ⊧ₘ* 𝐏𝐀⁻
inst✝ : M ⊧ₘ* 𝐈open
v : Fin (Nat.succ 1) → M
h : v 0 = π₁ v 1
⊢ v 1 = ⟪v 0, π₂ v 1⟫
Tactic:
simp [h]
State after:
no goals

State before:
case mpr
M : Type u_1
inst✝⁶ : Zero M
inst✝⁵ : One M
inst✝⁴ : Add M
inst✝³ : Mul M
inst✝² : LT M
inst✝¹ : M ⊧ₘ* 𝐏𝐀⁻
inst✝ : M ⊧ₘ* 𝐈open
v : Fin (Nat.succ 1) → M
⊢ (∃ x ≤ v 1, v 1 = ⟪v 0, x⟫) → v 0 = π₁ v 1
Tactic:
rintro ⟨a, _, e⟩
State after:
case mpr.intro.intro
M : Type u_1
inst✝⁶ : Zero M
inst✝⁵ : One M
inst✝⁴ : Add M
inst✝³ : Mul M
inst✝² : LT M
inst✝¹ : M ⊧ₘ* 𝐏𝐀⁻
inst✝ : M ⊧ₘ* 𝐈open
v : Fin (Nat.succ 1) → M
a : M
left✝ : a ≤ v 1
e : v 1 = ⟪v 0, a⟫
⊢ v 0 = π₁ v 1

State before:
case mpr.intro.intro
M : Type u_1
inst✝⁶ : Zero M
inst✝⁵ : One M
inst✝⁴ : Add M
inst✝³ : Mul M
inst✝² : LT M
inst✝¹ : M ⊧ₘ* 𝐏𝐀⁻
inst✝ : M ⊧ₘ* 𝐈open
v : Fin (Nat.succ 1) → M
a : M
left✝ : a ≤ v 1
e : v 1 = ⟪v 0, a⟫
⊢ v 0 = π₁ v 1
Tactic:
simp [e]
State after:
no goals