TRS:
 {                length(nil()) -> 0(),
             length(cons(x, l)) -> s(length(l)),
                     lt(x, 0()) -> false(),
                  lt(0(), s(y)) -> true(),
                 lt(s(x), s(y)) -> lt(x, y),
               head(cons(x, l)) -> x,
                    head(nil()) -> undefined(),
                    tail(nil()) -> nil(),
               tail(cons(x, l)) -> l,
                     reverse(l) -> rev(0(), l, nil(), l),
          rev(x, l, accu, orig) -> if(lt(x, length(orig)), x, l, accu, orig),
   if(true(), x, l, accu, orig) -> rev(s(x), tail(l), cons(head(l), accu), orig),
  if(false(), x, l, accu, orig) -> accu}
 Fail