is_presburger : (term -> bool)
Products of two expressions which both contain variables are not included in the subset, but the function SUC which is not normally included in a specification of Presburger arithmetic is allowed in this HOL implementation. This function also considers subtraction and the predecessor function, PRE, to be part of the subset.
#is_presburger "!m n p. m < (2 * n) /\ (n + n) <= p ==> m < SUC p";; true : bool #is_presburger "!m n p q. m < (n * p) /\ (n * p) < q ==> m < q";; false : bool #is_presburger "(m <= n) ==> !p. (m < SUC(n + p))";; true : bool #is_presburger "(m + n) - m = n";; true : bool