MAYBE

Problem:
 app(app(app(f(),0()),1()),x) -> app(app(app(f(),app(s(),x)),x),x)
 app(app(app(f(),x),y),app(s(),z)) -> app(s(),app(app(app(f(),0()),1()),z))
 app(app(map(),fun),nil()) -> nil()
 app(app(map(),fun),app(app(cons(),x),xs)) -> app(app(cons(),app(fun,x)),app(app(map(),fun),xs))
 app(app(filter(),fun),nil()) -> nil()
 app(app(filter(),fun),app(app(cons(),x),xs)) -> app(app(app(app(filter2(),app(fun,x)),fun),x),xs)
 app(app(app(app(filter2(),true()),fun),x),xs) -> app(app(cons(),x),app(app(filter(),fun),xs))
 app(app(app(app(filter2(),false()),fun),x),xs) -> app(app(filter(),fun),xs)

Proof:
 DP Processor:
  DPs:
   app#(app(app(f(),0()),1()),x) -> app#(s(),x)
   app#(app(app(f(),0()),1()),x) -> app#(f(),app(s(),x))
   app#(app(app(f(),0()),1()),x) -> app#(app(f(),app(s(),x)),x)
   app#(app(app(f(),0()),1()),x) -> app#(app(app(f(),app(s(),x)),x),x)
   app#(app(app(f(),x),y),app(s(),z)) -> app#(f(),0())
   app#(app(app(f(),x),y),app(s(),z)) -> app#(app(f(),0()),1())
   app#(app(app(f(),x),y),app(s(),z)) -> app#(app(app(f(),0()),1()),z)
   app#(app(app(f(),x),y),app(s(),z)) -> app#(s(),app(app(app(f(),0()),1()),z))
   app#(app(map(),fun),app(app(cons(),x),xs)) -> app#(app(map(),fun),xs)
   app#(app(map(),fun),app(app(cons(),x),xs)) -> app#(fun,x)
   app#(app(map(),fun),app(app(cons(),x),xs)) -> app#(cons(),app(fun,x))
   app#(app(map(),fun),app(app(cons(),x),xs)) ->
   app#(app(cons(),app(fun,x)),app(app(map(),fun),xs))
   app#(app(filter(),fun),app(app(cons(),x),xs)) -> app#(fun,x)
   app#(app(filter(),fun),app(app(cons(),x),xs)) -> app#(filter2(),app(fun,x))
   app#(app(filter(),fun),app(app(cons(),x),xs)) -> app#(app(filter2(),app(fun,x)),fun)
   app#(app(filter(),fun),app(app(cons(),x),xs)) -> app#(app(app(filter2(),app(fun,x)),fun),x)
   app#(app(filter(),fun),app(app(cons(),x),xs)) ->
   app#(app(app(app(filter2(),app(fun,x)),fun),x),xs)
   app#(app(app(app(filter2(),true()),fun),x),xs) -> app#(filter(),fun)
   app#(app(app(app(filter2(),true()),fun),x),xs) -> app#(app(filter(),fun),xs)
   app#(app(app(app(filter2(),true()),fun),x),xs) -> app#(cons(),x)
   app#(app(app(app(filter2(),true()),fun),x),xs) -> app#(app(cons(),x),app(app(filter(),fun),xs))
   app#(app(app(app(filter2(),false()),fun),x),xs) -> app#(filter(),fun)
   app#(app(app(app(filter2(),false()),fun),x),xs) -> app#(app(filter(),fun),xs)
  TRS:
   app(app(app(f(),0()),1()),x) -> app(app(app(f(),app(s(),x)),x),x)
   app(app(app(f(),x),y),app(s(),z)) -> app(s(),app(app(app(f(),0()),1()),z))
   app(app(map(),fun),nil()) -> nil()
   app(app(map(),fun),app(app(cons(),x),xs)) -> app(app(cons(),app(fun,x)),app(app(map(),fun),xs))
   app(app(filter(),fun),nil()) -> nil()
   app(app(filter(),fun),app(app(cons(),x),xs)) ->
   app(app(app(app(filter2(),app(fun,x)),fun),x),xs)
   app(app(app(app(filter2(),true()),fun),x),xs) -> app(app(cons(),x),app(app(filter(),fun),xs))
   app(app(app(app(filter2(),false()),fun),x),xs) -> app(app(filter(),fun),xs)
  Open