; @author Jonas Schöpf
; @doi 10.1007/978-3-642-40885-4_24
; Example 2
(format LCTRS :smtlib 2.6)
(theory Ints)
(fun sum (-> Int Int))
(fun sum2 (-> Bool Int Int))
(fun geq (-> Int Int Bool))
(fun s (-> Int Int))
(fun plus (-> Int Int Int))
(fun p (-> Int Int))
(fun geq2 (-> Int Int Int Int Bool))

(rule (sum x) (sum2 (geq 0 x) x))
(rule (sum2 true x) 0)
(rule (sum2 false (s x)) (plus (s x) (sum x)))
(rule (plus (p x) y) (p (plus x y)))
(rule (plus (s x) y) (s (plus x y)))
(rule (plus 0 y) y)
(rule (s (p x)) x)
(rule (p (s x)) x)
(rule (geq x y) (geq2 x y 0 0))
(rule (geq2 (s x) y z u) (geq2 x y (s z) u))
(rule (geq2 (p x) y z u) (geq2 x y z (s u)))
(rule (geq2 0 (s x) y z) (geq2 0 x y (s z)))
(rule (geq2 0 (p x) y z) (geq2 0 x (s y) z))
(rule (geq2 0 0 (s x) (s y)) (geq2 0 0 x y))
(rule (geq2 0 0 x 0) true)
(rule (geq2 0 0 0 (s x)) false)
