MAYBE

Problem:
 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()

Proof:
 DP Processor:
  DPs:
   le#(s(x),s(y)) -> le#(x,y)
   double#(s(x)) -> double#(x)
   log#(s(x)) -> loop#(s(x),s(0()),0())
   loop#(x,s(y),z) -> le#(x,s(y))
   loop#(x,s(y),z) -> if#(le(x,s(y)),x,s(y),z)
   if#(false(),x,y,z) -> double#(y)
   if#(false(),x,y,z) -> loop#(x,double(y),s(z))
   maplog#(xs) -> mapIter#(xs,nil())
   mapIter#(xs,ys) -> isempty#(xs)
   mapIter#(xs,ys) -> ifmap#(isempty(xs),xs,ys)
   ifmap#(false(),xs,ys) -> last#(xs)
   ifmap#(false(),xs,ys) -> log#(last(xs))
   ifmap#(false(),xs,ys) -> droplast#(xs)
   ifmap#(false(),xs,ys) -> mapIter#(droplast(xs),cons(log(last(xs)),ys))
   last#(cons(x,cons(y,xs))) -> last#(cons(y,xs))
   droplast#(cons(x,cons(y,xs))) -> droplast#(cons(y,xs))
  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()
  Usable Rule Processor:
   DPs:
    le#(s(x),s(y)) -> le#(x,y)
    double#(s(x)) -> double#(x)
    log#(s(x)) -> loop#(s(x),s(0()),0())
    loop#(x,s(y),z) -> le#(x,s(y))
    loop#(x,s(y),z) -> if#(le(x,s(y)),x,s(y),z)
    if#(false(),x,y,z) -> double#(y)
    if#(false(),x,y,z) -> loop#(x,double(y),s(z))
    maplog#(xs) -> mapIter#(xs,nil())
    mapIter#(xs,ys) -> isempty#(xs)
    mapIter#(xs,ys) -> ifmap#(isempty(xs),xs,ys)
    ifmap#(false(),xs,ys) -> last#(xs)
    ifmap#(false(),xs,ys) -> log#(last(xs))
    ifmap#(false(),xs,ys) -> droplast#(xs)
    ifmap#(false(),xs,ys) -> mapIter#(droplast(xs),cons(log(last(xs)),ys))
    last#(cons(x,cons(y,xs))) -> last#(cons(y,xs))
    droplast#(cons(x,cons(y,xs))) -> droplast#(cons(y,xs))
   TRS:
    f34(x,y) -> x
    f34(x,y) -> y
    le(0(),y) -> true()
    le(s(x),s(y)) -> le(x,y)
    le(s(x),0()) -> false()
    double(0()) -> 0()
    double(s(x)) -> s(s(double(x)))
    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))
    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))
    droplast(nil()) -> nil()
    droplast(cons(x,nil())) -> nil()
    droplast(cons(x,cons(y,xs))) -> cons(x,droplast(cons(y,xs)))
   EDG Processor:
    DPs:
     le#(s(x),s(y)) -> le#(x,y)
     double#(s(x)) -> double#(x)
     log#(s(x)) -> loop#(s(x),s(0()),0())
     loop#(x,s(y),z) -> le#(x,s(y))
     loop#(x,s(y),z) -> if#(le(x,s(y)),x,s(y),z)
     if#(false(),x,y,z) -> double#(y)
     if#(false(),x,y,z) -> loop#(x,double(y),s(z))
     maplog#(xs) -> mapIter#(xs,nil())
     mapIter#(xs,ys) -> isempty#(xs)
     mapIter#(xs,ys) -> ifmap#(isempty(xs),xs,ys)
     ifmap#(false(),xs,ys) -> last#(xs)
     ifmap#(false(),xs,ys) -> log#(last(xs))
     ifmap#(false(),xs,ys) -> droplast#(xs)
     ifmap#(false(),xs,ys) -> mapIter#(droplast(xs),cons(log(last(xs)),ys))
     last#(cons(x,cons(y,xs))) -> last#(cons(y,xs))
     droplast#(cons(x,cons(y,xs))) -> droplast#(cons(y,xs))
    TRS:
     f34(x,y) -> x
     f34(x,y) -> y
     le(0(),y) -> true()
     le(s(x),s(y)) -> le(x,y)
     le(s(x),0()) -> false()
     double(0()) -> 0()
     double(s(x)) -> s(s(double(x)))
     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))
     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))
     droplast(nil()) -> nil()
     droplast(cons(x,nil())) -> nil()
     droplast(cons(x,cons(y,xs))) -> cons(x,droplast(cons(y,xs)))
    graph:
     droplast#(cons(x,cons(y,xs))) -> droplast#(cons(y,xs)) ->
     droplast#(cons(x,cons(y,xs))) -> droplast#(cons(y,xs))
     last#(cons(x,cons(y,xs))) -> last#(cons(y,xs)) ->
     last#(cons(x,cons(y,xs))) -> last#(cons(y,xs))
     ifmap#(false(),xs,ys) -> droplast#(xs) ->
     droplast#(cons(x,cons(y,xs))) -> droplast#(cons(y,xs))
     ifmap#(false(),xs,ys) -> last#(xs) ->
     last#(cons(x,cons(y,xs))) -> last#(cons(y,xs))
     ifmap#(false(),xs,ys) -> mapIter#(droplast(xs),cons(log(last(xs)),ys)) ->
     mapIter#(xs,ys) -> isempty#(xs)
     ifmap#(false(),xs,ys) -> mapIter#(droplast(xs),cons(log(last(xs)),ys)) ->
     mapIter#(xs,ys) -> ifmap#(isempty(xs),xs,ys)
     ifmap#(false(),xs,ys) -> log#(last(xs)) ->
     log#(s(x)) -> loop#(s(x),s(0()),0())
     mapIter#(xs,ys) -> ifmap#(isempty(xs),xs,ys) ->
     ifmap#(false(),xs,ys) -> last#(xs)
     mapIter#(xs,ys) -> ifmap#(isempty(xs),xs,ys) ->
     ifmap#(false(),xs,ys) -> log#(last(xs))
     mapIter#(xs,ys) -> ifmap#(isempty(xs),xs,ys) ->
     ifmap#(false(),xs,ys) -> droplast#(xs)
     mapIter#(xs,ys) -> ifmap#(isempty(xs),xs,ys) ->
     ifmap#(false(),xs,ys) -> mapIter#(droplast(xs),cons(log(last(xs)),ys))
     maplog#(xs) -> mapIter#(xs,nil()) ->
     mapIter#(xs,ys) -> isempty#(xs)
     maplog#(xs) -> mapIter#(xs,nil()) ->
     mapIter#(xs,ys) -> ifmap#(isempty(xs),xs,ys)
     if#(false(),x,y,z) -> loop#(x,double(y),s(z)) ->
     loop#(x,s(y),z) -> le#(x,s(y))
     if#(false(),x,y,z) -> loop#(x,double(y),s(z)) ->
     loop#(x,s(y),z) -> if#(le(x,s(y)),x,s(y),z)
     if#(false(),x,y,z) -> double#(y) ->
     double#(s(x)) -> double#(x)
     loop#(x,s(y),z) -> if#(le(x,s(y)),x,s(y),z) ->
     if#(false(),x,y,z) -> double#(y)
     loop#(x,s(y),z) -> if#(le(x,s(y)),x,s(y),z) ->
     if#(false(),x,y,z) -> loop#(x,double(y),s(z))
     loop#(x,s(y),z) -> le#(x,s(y)) ->
     le#(s(x),s(y)) -> le#(x,y)
     log#(s(x)) -> loop#(s(x),s(0()),0()) ->
     loop#(x,s(y),z) -> le#(x,s(y))
     log#(s(x)) -> loop#(s(x),s(0()),0()) ->
     loop#(x,s(y),z) -> if#(le(x,s(y)),x,s(y),z)
     double#(s(x)) -> double#(x) -> double#(s(x)) -> double#(x)
     le#(s(x),s(y)) -> le#(x,y) -> le#(s(x),s(y)) -> le#(x,y)
    Restore Modifier:
     DPs:
      le#(s(x),s(y)) -> le#(x,y)
      double#(s(x)) -> double#(x)
      log#(s(x)) -> loop#(s(x),s(0()),0())
      loop#(x,s(y),z) -> le#(x,s(y))
      loop#(x,s(y),z) -> if#(le(x,s(y)),x,s(y),z)
      if#(false(),x,y,z) -> double#(y)
      if#(false(),x,y,z) -> loop#(x,double(y),s(z))
      maplog#(xs) -> mapIter#(xs,nil())
      mapIter#(xs,ys) -> isempty#(xs)
      mapIter#(xs,ys) -> ifmap#(isempty(xs),xs,ys)
      ifmap#(false(),xs,ys) -> last#(xs)
      ifmap#(false(),xs,ys) -> log#(last(xs))
      ifmap#(false(),xs,ys) -> droplast#(xs)
      ifmap#(false(),xs,ys) -> mapIter#(droplast(xs),cons(log(last(xs)),ys))
      last#(cons(x,cons(y,xs))) -> last#(cons(y,xs))
      droplast#(cons(x,cons(y,xs))) -> droplast#(cons(y,xs))
     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()
     SCC Processor:
      #sccs: 6
      #rules: 8
      #arcs: 23/256
      DPs:
       ifmap#(false(),xs,ys) -> mapIter#(droplast(xs),cons(log(last(xs)),ys))
       mapIter#(xs,ys) -> ifmap#(isempty(xs),xs,ys)
      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()
      Open
      
      DPs:
       loop#(x,s(y),z) -> if#(le(x,s(y)),x,s(y),z)
       if#(false(),x,y,z) -> loop#(x,double(y),s(z))
      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()
      Open
      
      DPs:
       double#(s(x)) -> double#(x)
      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()
      Open
      
      DPs:
       le#(s(x),s(y)) -> le#(x,y)
      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()
      Open
      
      DPs:
       last#(cons(x,cons(y,xs))) -> last#(cons(y,xs))
      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()
      Open
      
      DPs:
       droplast#(cons(x,cons(y,xs))) -> droplast#(cons(y,xs))
      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()
      Open