Interface:Peano axioms

First, we adopt the axioms of propositional logic and first-order logic (including equality):

 param (CLASSICAL Interface:Classical_propositional_calculus ) param (FIRSTORDER Interface:First-order_logic_with_quantifiability (CLASSICAL) ) 

The kind, defined in first-order logic, represents a natural number:  kindbind (object nat) var (nat a b c a0 a1 b0 b1)

var (variable k n) 

There is a number zero:

 term (nat (0)) 

There is a successor operation:  term (nat (succ nat)) 

Zero is not the successor of any number:  stmt (ZeroNotSuccessor  (¬ ((0) = (succ a)))) 

By making the following axiom a biconditional, we express two ideas. The first is that equals can be substituted for equals (this is often a generic rule of first order logic, but JHilbert requires us to provide it for each term). The second idea, specific to the successor operation, is that each number is the successor of only one number.  stmt (Successor  (((succ b) = (succ a)) ↔ (b = a))) 

Induction:  var (formula φ) stmt (Induction    (((subst (0) n φ) ∧     (∀ k ((subst (value k) n φ) → (subst (succ (value k)) n φ)))) → (∀ n φ))) 

We also supply the usual axioms for addition and multiplication:

 term (nat (+ nat nat)) stmt (AdditiveIdentity  ((a + (0)) = a)) stmt (Addition  ((a + (succ b)) = (succ (a + b))))

term (nat (· nat nat)) stmt (MultiplicativeZero  ((a · (0)) = (0))) stmt (Multiplication  ((a · (succ b)) = (a + (a · b)))) 

and the principle that equals can be substituted for equals, in the context of addition and multiplication:  stmt (AdditionBuilder  (((a0 = a1) ∧ (b0 = b1)) → ((a0 + b0) = (a1 + b1)))) stmt (MultiplicationBuilder  (((a0 = a1) ∧ (b0 = b1)) → ((a0 · b0) = (a1 · b1)))) </jh>