TRS:
 {                 le(s(x), 0()) -> false(),
                      le(0(), y) -> true(),
                  le(s(x), s(y)) -> le(x, y),
                     double(0()) -> 0(),
                    double(s(x)) -> s(s(double(x))),
                        log(0()) -> logError(),
                       log(s(x)) -> loop(s(x), s(0()), 0()),
                loop(x, s(y), z) -> if(le(x, s(y)), x, s(y), z),
             if(true(), x, y, z) -> z,
            if(false(), x, y, z) -> loop(x, double(y), s(z)),
                      maplog(xs) -> mapIter(xs, nil()),
                 mapIter(xs, ys) -> ifmap(isempty(xs), xs, ys),
           ifmap(true(), xs, ys) -> ys,
          ifmap(false(), xs, ys) -> mapIter(droplast(xs), cons(log(last(xs)), ys)),
                  isempty(nil()) -> true(),
            isempty(cons(x, xs)) -> false(),
                     last(nil()) -> error(),
            last(cons(x, nil())) -> x,
      last(cons(x, cons(y, xs))) -> last(cons(y, xs)),
                 droplast(nil()) -> nil(),
        droplast(cons(x, nil())) -> nil(),
  droplast(cons(x, cons(y, xs))) -> cons(x, droplast(cons(y, xs))),
                             a() -> b(),
                             a() -> c()}
 Fail