Every goal that I have encountered in Isabelle so far that could be solved using arith
could also be solved by presburger
and vice versa, for example
lemma "odd (n::nat) ⟹ Suc (2 * (n div 2)) = n"
by presburger (* or arith *)
What's the difference between the two solvers? Examples of goals that one can solve but the other can't would be nice.
Edit: I managed to come up with a lemma proved by arith
that presburger
can't handle. It seems like this has something to do with real numbers:
lemma "max i (i + 1) > (i::nat)" by arith -- ✔
lemma "max i (i + 1) > (i::nat)" by presburger -- ✔
lemma "max i (i + 1) > (i::real)" by arith -- ✔
lemma "max i (i + 1) > (i::real)" by presburger -- ✘