SUB_AND_COND_ELIM_CONV : conv
The function is not as delicate as it could be; it tries to eliminate all conditionals in a formula when it need only eliminate those that have to be removed in order to eliminate subtraction.
#SUB_AND_COND_ELIM_CONV # "((p + 3) <= n) ==> (!m. ((m = 0) => (n - 1) | (n - 2)) > p)";; |- (p + 3) <= n ==> (!m. ((m = 0) => n - 1 | n - 2) > p) = (p + 3) <= n ==> (!m. (~(m = 0) \/ n > (1 + p)) /\ ((m = 0) \/ n > (2 + p))) #SUB_AND_COND_ELIM_CONV # "!f n. f ((SUC n = 0) => 0 | (SUC n - 1)) < (f n) + 1";; |- (!f n. (f((SUC n = 0) => 0 | (SUC n) - 1)) < ((f n) + 1)) = (!f n. (~(SUC n = 0) \/ (f 0) < ((f n) + 1)) /\ ((SUC n = 0) \/ (f((SUC n) - 1)) < ((f n) + 1))) #SUB_AND_COND_ELIM_CONV # "!f n. (\m. f ((m = 0) => 0 | (m - 1))) (SUC n) < (f n) + 1";; |- (!f n. ((\m. f((m = 0) => 0 | m - 1))(SUC n)) < ((f n) + 1)) = (!f n. ((\m. ((m = 0) => f 0 | f(m - 1)))(SUC n)) < ((f n) + 1))