(from AG01 3.17a) (VAR k l x y) (RULES app(nil,k) -> k app(l, nil) -> l app(cons(x,l),k) -> cons(x,app(l,k)) sum(cons(x,nil)) -> cons(x,nil) sum(cons(x,cons(y,l))) -> sum(cons(plus(x,y),l)) sum(app(l,cons(x,cons(y,k)))) -> sum(app(l,sum(cons(x,cons(y,k))))) sum(plus(cons(0,x),cons(y,l))) -> pred(sum(cons(s(x),cons(y,l)))) pred(cons(s(x),nil)) -> cons(x,nil) plus(s(x), s(y)) -> s(s(plus(if(gt(x,y),x,y), if(not(gt(x,y)),id(x),id(y))))) plus(s(x), x) -> plus(if(gt(x,x), id(x), id(x)), s(x)) plus(zero, y) -> y plus(id(x), s(y)) -> s(plus(x,if(gt(s(y),y), y, s(y)))) id(x) -> x if(true, x, y) -> x if(false, x, y) -> y not(x) -> if(x, false, true) gt(s(x), zero) -> true gt(zero, y) -> false gt(s(x), s(y)) -> gt(x, y) )