@Moderators: I apologize because this is very similar to my previous post, but I didn't post the exact axioms there from the beginning (I did quite a major change after receiving a reply).. please delete the previous one (Peano/Presburger axioms - "find" numbers lower or equal than another number) if there are any problems.
Happy New Year,
I am trying to define natural numbers in first-order logic in order to use them in an Automated Theorem Prover. I have tried the Peano axioms on the Wikipedia page with/without multiplication (I don't really need it and thought removing it would make proving faster). I'd like to make the prover "know" (deduce that) the only three numbers lower than or equal to 2 are 0,1,2, but I can't seem to be able to do it. More precisely, I'd like the foolowing statement to be provable (NOTE: 2 is just an example, I'd like it to work for any natural number):
$$\forall x(nat(x) \to (leq(x, s(s(0))) \to (x=0) \lor (x=s(0)) \lor (x=s(s(0))) ))$$
My prover has equality implemented. I define 1,2,3 (where 0,1,2,3 are 0-arity functions.. or I assume I can call them constants) as: $1 = s(0)$ ($equal(1, s(0)$ is what I actually write in the prover) $, 2 = s(1), 3 = s(2)$
My axioms are pretty much these:
$$nat(0)$$ $$\forall x(nat(x) \to nat(s(x))$$ $$\forall x,y(nat(x)\land nat(y) \to nat(add(x,y))$$ $$\forall x( nat(x) \to s(x) \neq 0)$$ $$\forall x,y (nat(x) \land nat(y) \to (s(x)=s(y) \to s=y))$$ $$\forall x(nat(x)\land x\neq 0 \to \exists z (nat(z) \land x = s(z)))$$ $$\forall x(nat(x) \to add(x,0) = 0$$ $$\forall x,y(nat(x)\land nat(y) \to add(x,s(y)) = s(add(x,y)))$$ $$\forall x,y(nat(x)\land nat(y) \to (leq(x,y) \leftrightarrow \exists z(nat(z)\land y = x + z )))$$ (Maybe for the purpose of this question it would have been better to write the last axiom as "forall x,y leq(x,y) <-> nat(x) /\ nat(y) /\ exists z .....")
I know they look quite ugly.. in my prover I'm actually able to type something like this (using what I understand are called "sorts"): $\forall[nat(x)](P(x))$ instead of $\forall x(nat(x) \to P(x)$ so it looks cleaner and easier to follow.