Theorem: LO.FirstOrder.Arith.Model.open_leastNumber (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
P : M → Prop
hP : ∃ p, p.Open ∧ ∀ (x : M), P x ↔ (Semiformula.Evalm M ![x] id) p
zero : P 0
a : M
counterex : ¬P a
⊢ ∃ x, P x ∧ ¬P (x + 1)
Tactic:
by_contra A
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
P : M → Prop
hP : ∃ p, p.Open ∧ ∀ (x : M), P x ↔ (Semiformula.Evalm M ![x] id) p
zero : P 0
a : M
counterex : ¬P a
A : ¬∃ x, P x ∧ ¬P (x + 1)
⊢ False

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
P : M → Prop
hP : ∃ p, p.Open ∧ ∀ (x : M), P x ↔ (Semiformula.Evalm M ![x] id) p
zero : P 0
a : M
counterex : ¬P a
A : ¬∃ x, P x ∧ ¬P (x + 1)
this : ∀ (x : M), P x
⊢ False
Tactic:
have : P a := this a
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
P : M → Prop
hP : ∃ p, p.Open ∧ ∀ (x : M), P x ↔ (Semiformula.Evalm M ![x] id) p
zero : P 0
a : M
counterex : ¬P a
A : ¬∃ x, P x ∧ ¬P (x + 1)
this✝ : ∀ (x : M), P x
this : P a
⊢ False

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
P : M → Prop
hP : ∃ p, p.Open ∧ ∀ (x : M), P x ↔ (Semiformula.Evalm M ![x] id) p
zero : P 0
a : M
counterex : ¬P a
A : ¬∃ x, P x ∧ ¬P (x + 1)
this✝ : ∀ (x : M), P x
this : P a
⊢ False
Tactic:
contradiction
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
P : M → Prop
hP : ∃ p, p.Open ∧ ∀ (x : M), P x ↔ (Semiformula.Evalm M ![x] id) p
zero : P 0
a : M
counterex : ¬P a
A : ¬∃ x, P x ∧ ¬P (x + 1)
⊢ ∀ (x : M), P x
Tactic:
intro x
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
P : M → Prop
hP : ∃ p, p.Open ∧ ∀ (x : M), P x ↔ (Semiformula.Evalm M ![x] id) p
zero : P 0
a : M
counterex : ¬P a
A : ¬∃ x, P x ∧ ¬P (x + 1)
x : M
⊢ P 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
P : M → Prop
hP : ∃ p, p.Open ∧ ∀ (x : M), P x ↔ (Semiformula.Evalm M ![x] id) p
zero : P 0
a : M
counterex : ¬P a
A : ¬∃ x, P x ∧ ¬P (x + 1)
x : M
⊢ P x
Tactic:
induction x using open_induction
State after:
case hP
M : Type u_1
inst✝⁶ : Zero M
inst✝⁵ : One M
inst✝⁴ : Add M
inst✝³ : Mul M
inst✝² : LT M
inst✝¹ : M ⊧ₘ* 𝐏𝐀⁻
inst✝ : M ⊧ₘ* 𝐈open
P : M → Prop
hP : ∃ p, p.Open ∧ ∀ (x : M), P x ↔ (Semiformula.Evalm M ![x] id) p
zero : P 0
a : M
counterex : ¬P a
A : ¬∃ x, P x ∧ ¬P (x + 1)
⊢ ∃ p, p.Open ∧ ∀ (x : M), P x ↔ (Semiformula.Evalm M ![x] id) p

case zero
M : Type u_1
inst✝⁶ : Zero M
inst✝⁵ : One M
inst✝⁴ : Add M
inst✝³ : Mul M
inst✝² : LT M
inst✝¹ : M ⊧ₘ* 𝐏𝐀⁻
inst✝ : M ⊧ₘ* 𝐈open
P : M → Prop
hP : ∃ p, p.Open ∧ ∀ (x : M), P x ↔ (Semiformula.Evalm M ![x] id) p
zero : P 0
a : M
counterex : ¬P a
A : ¬∃ x, P x ∧ ¬P (x + 1)
⊢ P 0

case succ
M : Type u_1
inst✝⁶ : Zero M
inst✝⁵ : One M
inst✝⁴ : Add M
inst✝³ : Mul M
inst✝² : LT M
inst✝¹ : M ⊧ₘ* 𝐏𝐀⁻
inst✝ : M ⊧ₘ* 𝐈open
P : M → Prop
hP : ∃ p, p.Open ∧ ∀ (x : M), P x ↔ (Semiformula.Evalm M ![x] id) p
zero : P 0
a : M
counterex : ¬P a
A : ¬∃ x, P x ∧ ¬P (x + 1)
x✝ : M
a✝ : P x✝
⊢ P (x✝ + 1)

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
P : M → Prop
hP : ∃ p, p.Open ∧ ∀ (x : M), P x ↔ (Semiformula.Evalm M ![x] id) p
zero : P 0
a : M
counterex : ¬P a
A : ¬∃ x, P x ∧ ¬P (x + 1)
⊢ P 0
Tactic:
case zero => exact zero
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
P : M → Prop
hP : ∃ p, p.Open ∧ ∀ (x : M), P x ↔ (Semiformula.Evalm M ![x] id) p
zero : P 0
a : M
counterex : ¬P a
A : ¬∃ x, P x ∧ ¬P (x + 1)
n : M
ih : P n
⊢ P (n + 1)
Tactic:
case succ n ih =>
  simp at A
  exact A n ih
State after:
no goals

State before:
case hP
M : Type u_1
inst✝⁶ : Zero M
inst✝⁵ : One M
inst✝⁴ : Add M
inst✝³ : Mul M
inst✝² : LT M
inst✝¹ : M ⊧ₘ* 𝐏𝐀⁻
inst✝ : M ⊧ₘ* 𝐈open
P : M → Prop
hP : ∃ p, p.Open ∧ ∀ (x : M), P x ↔ (Semiformula.Evalm M ![x] id) p
zero : P 0
a : M
counterex : ¬P a
A : ¬∃ x, P x ∧ ¬P (x + 1)
⊢ ∃ p, p.Open ∧ ∀ (x : M), P x ↔ (Semiformula.Evalm M ![x] id) p
Tactic:
exact hP
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
P : M → Prop
hP : ∃ p, p.Open ∧ ∀ (x : M), P x ↔ (Semiformula.Evalm M ![x] id) p
zero : P 0
a : M
counterex : ¬P a
A : ¬∃ x, P x ∧ ¬P (x + 1)
⊢ P 0
Tactic:
exact zero
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
P : M → Prop
hP : ∃ p, p.Open ∧ ∀ (x : M), P x ↔ (Semiformula.Evalm M ![x] id) p
zero : P 0
a : M
counterex : ¬P a
A : ¬∃ x, P x ∧ ¬P (x + 1)
n : M
ih : P n
⊢ P (n + 1)
Tactic:
simp at A
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
P : M → Prop
hP : ∃ p, p.Open ∧ ∀ (x : M), P x ↔ (Semiformula.Evalm M ![x] id) p
zero : P 0
a : M
counterex : ¬P a
n : M
ih : P n
A : ∀ (x : M), P x → P (x + 1)
⊢ P (n + 1)

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
P : M → Prop
hP : ∃ p, p.Open ∧ ∀ (x : M), P x ↔ (Semiformula.Evalm M ![x] id) p
zero : P 0
a : M
counterex : ¬P a
n : M
ih : P n
A : ∀ (x : M), P x → P (x + 1)
⊢ P (n + 1)
Tactic:
exact A n ih
State after:
no goals