(VAR f g l x xs ) (RULES app(app(app(compose, f), g), x) -> app(g, app(f, x)) app(reverse, l) -> app(app(reverse2, l), nil) app(app(reverse2, nil), l) -> l app(app(reverse2, app(app(cons, x), xs)), l) -> app(app(reverse2, xs), app(app(cons, x), l)) app(hd, app(app(cons, x), xs)) -> x app(tl, app(app(cons, x), xs)) -> xs last -> app(app(compose, hd), reverse) init -> app(app(compose, reverse), app(app(compose, tl), reverse)) )