MAYBE

Problem:
 app(app(ack(),0()),y) -> app(succ(),y)
 app(app(ack(),app(succ(),x)),y) -> app(app(ack(),x),app(succ(),0()))
 app(app(ack(),app(succ(),x)),app(succ(),y)) -> app(app(ack(),x),app(app(ack(),app(succ(),x)),y))
 app(app(map(),f),nil()) -> nil()
 app(app(map(),f),app(app(cons(),x),xs)) -> app(app(cons(),app(f,x)),app(app(map(),f),xs))
 app(app(filter(),f),nil()) -> nil()
 app(app(filter(),f),app(app(cons(),x),xs)) -> app(app(app(app(filter2(),app(f,x)),f),x),xs)
 app(app(app(app(filter2(),true()),f),x),xs) -> app(app(cons(),x),app(app(filter(),f),xs))
 app(app(app(app(filter2(),false()),f),x),xs) -> app(app(filter(),f),xs)

Proof:
 DP Processor:
  DPs:
   app#(app(ack(),0()),y) -> app#(succ(),y)
   app#(app(ack(),app(succ(),x)),y) -> app#(succ(),0())
   app#(app(ack(),app(succ(),x)),y) -> app#(ack(),x)
   app#(app(ack(),app(succ(),x)),y) -> app#(app(ack(),x),app(succ(),0()))
   app#(app(ack(),app(succ(),x)),app(succ(),y)) -> app#(app(ack(),app(succ(),x)),y)
   app#(app(ack(),app(succ(),x)),app(succ(),y)) -> app#(ack(),x)
   app#(app(ack(),app(succ(),x)),app(succ(),y)) ->
   app#(app(ack(),x),app(app(ack(),app(succ(),x)),y))
   app#(app(map(),f),app(app(cons(),x),xs)) -> app#(app(map(),f),xs)
   app#(app(map(),f),app(app(cons(),x),xs)) -> app#(f,x)
   app#(app(map(),f),app(app(cons(),x),xs)) -> app#(cons(),app(f,x))
   app#(app(map(),f),app(app(cons(),x),xs)) -> app#(app(cons(),app(f,x)),app(app(map(),f),xs))
   app#(app(filter(),f),app(app(cons(),x),xs)) -> app#(f,x)
   app#(app(filter(),f),app(app(cons(),x),xs)) -> app#(filter2(),app(f,x))
   app#(app(filter(),f),app(app(cons(),x),xs)) -> app#(app(filter2(),app(f,x)),f)
   app#(app(filter(),f),app(app(cons(),x),xs)) -> app#(app(app(filter2(),app(f,x)),f),x)
   app#(app(filter(),f),app(app(cons(),x),xs)) -> app#(app(app(app(filter2(),app(f,x)),f),x),xs)
   app#(app(app(app(filter2(),true()),f),x),xs) -> app#(filter(),f)
   app#(app(app(app(filter2(),true()),f),x),xs) -> app#(app(filter(),f),xs)
   app#(app(app(app(filter2(),true()),f),x),xs) -> app#(cons(),x)
   app#(app(app(app(filter2(),true()),f),x),xs) -> app#(app(cons(),x),app(app(filter(),f),xs))
   app#(app(app(app(filter2(),false()),f),x),xs) -> app#(filter(),f)
   app#(app(app(app(filter2(),false()),f),x),xs) -> app#(app(filter(),f),xs)
  TRS:
   app(app(ack(),0()),y) -> app(succ(),y)
   app(app(ack(),app(succ(),x)),y) -> app(app(ack(),x),app(succ(),0()))
   app(app(ack(),app(succ(),x)),app(succ(),y)) -> app(app(ack(),x),app(app(ack(),app(succ(),x)),y))
   app(app(map(),f),nil()) -> nil()
   app(app(map(),f),app(app(cons(),x),xs)) -> app(app(cons(),app(f,x)),app(app(map(),f),xs))
   app(app(filter(),f),nil()) -> nil()
   app(app(filter(),f),app(app(cons(),x),xs)) -> app(app(app(app(filter2(),app(f,x)),f),x),xs)
   app(app(app(app(filter2(),true()),f),x),xs) -> app(app(cons(),x),app(app(filter(),f),xs))
   app(app(app(app(filter2(),false()),f),x),xs) -> app(app(filter(),f),xs)
  SCC Processor:
   #sccs: 1
   #rules: 22
   #arcs: 484/484
   DPs:
    app#(app(ack(),0()),y) -> app#(succ(),y)
    app#(app(ack(),app(succ(),x)),y) -> app#(succ(),0())
    app#(app(ack(),app(succ(),x)),y) -> app#(ack(),x)
    app#(app(ack(),app(succ(),x)),y) -> app#(app(ack(),x),app(succ(),0()))
    app#(app(ack(),app(succ(),x)),app(succ(),y)) -> app#(app(ack(),app(succ(),x)),y)
    app#(app(ack(),app(succ(),x)),app(succ(),y)) -> app#(ack(),x)
    app#(app(ack(),app(succ(),x)),app(succ(),y)) ->
    app#(app(ack(),x),app(app(ack(),app(succ(),x)),y))
    app#(app(map(),f),app(app(cons(),x),xs)) -> app#(app(map(),f),xs)
    app#(app(map(),f),app(app(cons(),x),xs)) -> app#(f,x)
    app#(app(map(),f),app(app(cons(),x),xs)) -> app#(cons(),app(f,x))
    app#(app(map(),f),app(app(cons(),x),xs)) -> app#(app(cons(),app(f,x)),app(app(map(),f),xs))
    app#(app(filter(),f),app(app(cons(),x),xs)) -> app#(f,x)
    app#(app(filter(),f),app(app(cons(),x),xs)) -> app#(filter2(),app(f,x))
    app#(app(filter(),f),app(app(cons(),x),xs)) -> app#(app(filter2(),app(f,x)),f)
    app#(app(filter(),f),app(app(cons(),x),xs)) -> app#(app(app(filter2(),app(f,x)),f),x)
    app#(app(filter(),f),app(app(cons(),x),xs)) -> app#(app(app(app(filter2(),app(f,x)),f),x),xs)
    app#(app(app(app(filter2(),true()),f),x),xs) -> app#(filter(),f)
    app#(app(app(app(filter2(),true()),f),x),xs) -> app#(app(filter(),f),xs)
    app#(app(app(app(filter2(),true()),f),x),xs) -> app#(cons(),x)
    app#(app(app(app(filter2(),true()),f),x),xs) -> app#(app(cons(),x),app(app(filter(),f),xs))
    app#(app(app(app(filter2(),false()),f),x),xs) -> app#(filter(),f)
    app#(app(app(app(filter2(),false()),f),x),xs) -> app#(app(filter(),f),xs)
   TRS:
    app(app(ack(),0()),y) -> app(succ(),y)
    app(app(ack(),app(succ(),x)),y) -> app(app(ack(),x),app(succ(),0()))
    app(app(ack(),app(succ(),x)),app(succ(),y)) ->
    app(app(ack(),x),app(app(ack(),app(succ(),x)),y))
    app(app(map(),f),nil()) -> nil()
    app(app(map(),f),app(app(cons(),x),xs)) -> app(app(cons(),app(f,x)),app(app(map(),f),xs))
    app(app(filter(),f),nil()) -> nil()
    app(app(filter(),f),app(app(cons(),x),xs)) -> app(app(app(app(filter2(),app(f,x)),f),x),xs)
    app(app(app(app(filter2(),true()),f),x),xs) -> app(app(cons(),x),app(app(filter(),f),xs))
    app(app(app(app(filter2(),false()),f),x),xs) -> app(app(filter(),f),xs)
   Open