; @author Jonas Schöpf
; Ctrl example from examples/student/sum02.ctrs
(format LCTRS :smtlib 2.6)
(theory Ints)
(sort Unit)
(sort Result)
(fun ditch_globals (-> Unit Result))
(fun return (-> Int Int Int Unit))
(fun return1 (-> Int Result))
(fun u (-> Int Int Int Unit))
(fun sum1 (-> Int Int Int Unit))

(rule (ditch_globals (return x y z)) (return1 z) :var ((x Int) (y Int) (z Int)))
(rule (u num i answer) (return i answer answer) :guard (not (<= i num)) :var ((num Int) (i Int) (answer Int)))
(rule (u num i answer) (u num (+ i 1) (+ answer i)) :guard (<= i num) :var ((num Int) (i Int) (answer Int)))
(rule (sum1 num i answer) (u num 0 0) :guard (not (< num 0)) :var ((num Int) (i Int) (answer Int)))
(rule (sum1 num i answer) (return i answer 0) :guard (< num 0) :var ((num Int) (i Int) (answer Int)))
