(meta-info (comment "Ctrl example from examples-transformed/ackermann.ctrs"))
(format LCTRS :logic QF_LIA)

(fun ackermann 2 :sort (Int Int  Int))
(fun U2 4 :sort (Int Int Int Int  Int))
(fun U7 4 :sort (Int Int Int Int  Int))

(rule (ackermann  x y) (U2  x y x y))
(rule (U7  x y m n) (U7  x y (-  m 1) 1) :guard (and (<= n 0) (> m 0)))
(rule (U7  x y m n) (+  n 1) :guard (and (<= n 0) (not (> m 0))))
(rule (U7  x y m n) (U7  x y (-  m 1) (U2  m (-  n 1) m (-  n 1))) :guard (and (not (<= n 0)) (> m 0)))
(rule (U7  x y m n) (+  n 1) :guard (and (not (<= n 0)) (not (> m 0))))
(rule (U2  x y m n) 0 :guard (or (< y 0) (< x 0)))
(rule (U2  x y m n) (U7  x y m n) :guard (and (not (or (< y 0) (< x 0))) (> m 0)))
(rule (U2  x y m n) (+  n 1) :guard (and (not (or (< y 0) (< x 0))) (not (> m 0))))
