YES

Problem:
 app(rev(),nil()) -> nil()
 app(rev(),app(app(cons(),x),l)) -> app(app(cons(),app(app(rev1(),x),l)),app(app(rev2(),x),l))
 app(app(rev1(),0()),nil()) -> 0()
 app(app(rev1(),app(s(),x)),nil()) -> app(s(),x)
 app(app(rev1(),x),app(app(cons(),y),l)) -> app(app(rev1(),y),l)
 app(app(rev2(),x),nil()) -> nil()
 app(app(rev2(),x),app(app(cons(),y),l)) -> app(rev(),app(app(cons(),x),app(app(rev2(),y),l)))
 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:
 Uncurry Processor:
  rev1(nil()) -> nil()
  rev1(cons2(x,l)) -> cons2(rev12(x,l),rev22(x,l))
  rev12(0(),nil()) -> 0()
  rev12(s1(x),nil()) -> s1(x)
  rev12(x,cons2(y,l)) -> rev12(y,l)
  rev22(x,nil()) -> nil()
  rev22(x,cons2(y,l)) -> rev1(cons2(x,rev22(y,l)))
  map2(f,nil()) -> nil()
  map2(f,cons2(x,xs)) -> cons2(app(f,x),map2(f,xs))
  filter2(f,nil()) -> nil()
  filter2(f,cons2(x,xs)) -> filter24(app(f,x),f,x,xs)
  filter24(true(),f,x,xs) -> cons2(x,filter2(f,xs))
  filter24(false(),f,x,xs) -> filter2(f,xs)
  app(rev(),x8) -> rev1(x8)
  app(cons1(x7),x8) -> cons2(x7,x8)
  app(cons(),x8) -> cons1(x8)
  app(rev11(x7),x8) -> rev12(x7,x8)
  app(rev1(),x8) -> rev11(x8)
  app(rev21(x7),x8) -> rev22(x7,x8)
  app(rev2(),x8) -> rev21(x8)
  app(s(),x8) -> s1(x8)
  app(map1(x7),x8) -> map2(x7,x8)
  app(map(),x8) -> map1(x8)
  app(filter1(x7),x8) -> filter2(x7,x8)
  app(filter(),x8) -> filter1(x8)
  app(filter23(x7,x6,x5),x8) -> filter24(x7,x6,x5,x8)
  app(filter22(x7,x6),x8) -> filter23(x7,x6,x8)
  app(filter21(x7),x8) -> filter22(x7,x8)
  app(filter2(),x8) -> filter21(x8)
  DP Processor:
   DPs:
    rev{1,#}(cons2(x,l)) -> rev2{2,#}(x,l)
    rev{1,#}(cons2(x,l)) -> rev1{2,#}(x,l)
    rev1{2,#}(x,cons2(y,l)) -> rev1{2,#}(y,l)
    rev2{2,#}(x,cons2(y,l)) -> rev2{2,#}(y,l)
    rev2{2,#}(x,cons2(y,l)) -> rev{1,#}(cons2(x,rev22(y,l)))
    map{2,#}(f,cons2(x,xs)) -> map{2,#}(f,xs)
    map{2,#}(f,cons2(x,xs)) -> app#(f,x)
    filter{2,#}(f,cons2(x,xs)) -> app#(f,x)
    filter{2,#}(f,cons2(x,xs)) -> filter2{4,#}(app(f,x),f,x,xs)
    filter2{4,#}(true(),f,x,xs) -> filter{2,#}(f,xs)
    filter2{4,#}(false(),f,x,xs) -> filter{2,#}(f,xs)
    app#(rev(),x8) -> rev{1,#}(x8)
    app#(rev11(x7),x8) -> rev1{2,#}(x7,x8)
    app#(rev21(x7),x8) -> rev2{2,#}(x7,x8)
    app#(map1(x7),x8) -> map{2,#}(x7,x8)
    app#(filter1(x7),x8) -> filter{2,#}(x7,x8)
    app#(filter23(x7,x6,x5),x8) -> filter2{4,#}(x7,x6,x5,x8)
   TRS:
    rev1(nil()) -> nil()
    rev1(cons2(x,l)) -> cons2(rev12(x,l),rev22(x,l))
    rev12(0(),nil()) -> 0()
    rev12(s1(x),nil()) -> s1(x)
    rev12(x,cons2(y,l)) -> rev12(y,l)
    rev22(x,nil()) -> nil()
    rev22(x,cons2(y,l)) -> rev1(cons2(x,rev22(y,l)))
    map2(f,nil()) -> nil()
    map2(f,cons2(x,xs)) -> cons2(app(f,x),map2(f,xs))
    filter2(f,nil()) -> nil()
    filter2(f,cons2(x,xs)) -> filter24(app(f,x),f,x,xs)
    filter24(true(),f,x,xs) -> cons2(x,filter2(f,xs))
    filter24(false(),f,x,xs) -> filter2(f,xs)
    app(rev(),x8) -> rev1(x8)
    app(cons1(x7),x8) -> cons2(x7,x8)
    app(cons(),x8) -> cons1(x8)
    app(rev11(x7),x8) -> rev12(x7,x8)
    app(rev1(),x8) -> rev11(x8)
    app(rev21(x7),x8) -> rev22(x7,x8)
    app(rev2(),x8) -> rev21(x8)
    app(s(),x8) -> s1(x8)
    app(map1(x7),x8) -> map2(x7,x8)
    app(map(),x8) -> map1(x8)
    app(filter1(x7),x8) -> filter2(x7,x8)
    app(filter(),x8) -> filter1(x8)
    app(filter23(x7,x6,x5),x8) -> filter24(x7,x6,x5,x8)
    app(filter22(x7,x6),x8) -> filter23(x7,x6,x8)
    app(filter21(x7),x8) -> filter22(x7,x8)
    app(filter2(),x8) -> filter21(x8)
   TDG Processor:
    DPs:
     rev{1,#}(cons2(x,l)) -> rev2{2,#}(x,l)
     rev{1,#}(cons2(x,l)) -> rev1{2,#}(x,l)
     rev1{2,#}(x,cons2(y,l)) -> rev1{2,#}(y,l)
     rev2{2,#}(x,cons2(y,l)) -> rev2{2,#}(y,l)
     rev2{2,#}(x,cons2(y,l)) -> rev{1,#}(cons2(x,rev22(y,l)))
     map{2,#}(f,cons2(x,xs)) -> map{2,#}(f,xs)
     map{2,#}(f,cons2(x,xs)) -> app#(f,x)
     filter{2,#}(f,cons2(x,xs)) -> app#(f,x)
     filter{2,#}(f,cons2(x,xs)) -> filter2{4,#}(app(f,x),f,x,xs)
     filter2{4,#}(true(),f,x,xs) -> filter{2,#}(f,xs)
     filter2{4,#}(false(),f,x,xs) -> filter{2,#}(f,xs)
     app#(rev(),x8) -> rev{1,#}(x8)
     app#(rev11(x7),x8) -> rev1{2,#}(x7,x8)
     app#(rev21(x7),x8) -> rev2{2,#}(x7,x8)
     app#(map1(x7),x8) -> map{2,#}(x7,x8)
     app#(filter1(x7),x8) -> filter{2,#}(x7,x8)
     app#(filter23(x7,x6,x5),x8) -> filter2{4,#}(x7,x6,x5,x8)
    TRS:
     rev1(nil()) -> nil()
     rev1(cons2(x,l)) -> cons2(rev12(x,l),rev22(x,l))
     rev12(0(),nil()) -> 0()
     rev12(s1(x),nil()) -> s1(x)
     rev12(x,cons2(y,l)) -> rev12(y,l)
     rev22(x,nil()) -> nil()
     rev22(x,cons2(y,l)) -> rev1(cons2(x,rev22(y,l)))
     map2(f,nil()) -> nil()
     map2(f,cons2(x,xs)) -> cons2(app(f,x),map2(f,xs))
     filter2(f,nil()) -> nil()
     filter2(f,cons2(x,xs)) -> filter24(app(f,x),f,x,xs)
     filter24(true(),f,x,xs) -> cons2(x,filter2(f,xs))
     filter24(false(),f,x,xs) -> filter2(f,xs)
     app(rev(),x8) -> rev1(x8)
     app(cons1(x7),x8) -> cons2(x7,x8)
     app(cons(),x8) -> cons1(x8)
     app(rev11(x7),x8) -> rev12(x7,x8)
     app(rev1(),x8) -> rev11(x8)
     app(rev21(x7),x8) -> rev22(x7,x8)
     app(rev2(),x8) -> rev21(x8)
     app(s(),x8) -> s1(x8)
     app(map1(x7),x8) -> map2(x7,x8)
     app(map(),x8) -> map1(x8)
     app(filter1(x7),x8) -> filter2(x7,x8)
     app(filter(),x8) -> filter1(x8)
     app(filter23(x7,x6,x5),x8) -> filter24(x7,x6,x5,x8)
     app(filter22(x7,x6),x8) -> filter23(x7,x6,x8)
     app(filter21(x7),x8) -> filter22(x7,x8)
     app(filter2(),x8) -> filter21(x8)
    graph:
     filter2{4,#}(false(),f,x,xs) -> filter{2,#}(f,xs) ->
     filter{2,#}(f,cons2(x,xs)) -> filter2{4,#}(app(f,x),f,x,xs)
     filter2{4,#}(false(),f,x,xs) -> filter{2,#}(f,xs) ->
     filter{2,#}(f,cons2(x,xs)) -> app#(f,x)
     filter2{4,#}(true(),f,x,xs) -> filter{2,#}(f,xs) ->
     filter{2,#}(f,cons2(x,xs)) -> filter2{4,#}(app(f,x),f,x,xs)
     filter2{4,#}(true(),f,x,xs) -> filter{2,#}(f,xs) ->
     filter{2,#}(f,cons2(x,xs)) -> app#(f,x)
     filter{2,#}(f,cons2(x,xs)) -> filter2{4,#}(app(f,x),f,x,xs) ->
     filter2{4,#}(false(),f,x,xs) -> filter{2,#}(f,xs)
     filter{2,#}(f,cons2(x,xs)) -> filter2{4,#}(app(f,x),f,x,xs) ->
     filter2{4,#}(true(),f,x,xs) -> filter{2,#}(f,xs)
     filter{2,#}(f,cons2(x,xs)) -> app#(f,x) ->
     app#(filter23(x7,x6,x5),x8) -> filter2{4,#}(x7,x6,x5,x8)
     filter{2,#}(f,cons2(x,xs)) -> app#(f,x) ->
     app#(filter1(x7),x8) -> filter{2,#}(x7,x8)
     filter{2,#}(f,cons2(x,xs)) -> app#(f,x) ->
     app#(map1(x7),x8) -> map{2,#}(x7,x8)
     filter{2,#}(f,cons2(x,xs)) -> app#(f,x) ->
     app#(rev21(x7),x8) -> rev2{2,#}(x7,x8)
     filter{2,#}(f,cons2(x,xs)) -> app#(f,x) ->
     app#(rev11(x7),x8) -> rev1{2,#}(x7,x8)
     filter{2,#}(f,cons2(x,xs)) -> app#(f,x) ->
     app#(rev(),x8) -> rev{1,#}(x8)
     app#(filter23(x7,x6,x5),x8) -> filter2{4,#}(x7,x6,x5,x8) ->
     filter2{4,#}(false(),f,x,xs) -> filter{2,#}(f,xs)
     app#(filter23(x7,x6,x5),x8) -> filter2{4,#}(x7,x6,x5,x8) ->
     filter2{4,#}(true(),f,x,xs) -> filter{2,#}(f,xs)
     app#(filter1(x7),x8) -> filter{2,#}(x7,x8) ->
     filter{2,#}(f,cons2(x,xs)) -> filter2{4,#}(app(f,x),f,x,xs)
     app#(filter1(x7),x8) -> filter{2,#}(x7,x8) ->
     filter{2,#}(f,cons2(x,xs)) -> app#(f,x)
     app#(map1(x7),x8) -> map{2,#}(x7,x8) ->
     map{2,#}(f,cons2(x,xs)) -> app#(f,x)
     app#(map1(x7),x8) -> map{2,#}(x7,x8) ->
     map{2,#}(f,cons2(x,xs)) -> map{2,#}(f,xs)
     app#(rev21(x7),x8) -> rev2{2,#}(x7,x8) ->
     rev2{2,#}(x,cons2(y,l)) -> rev{1,#}(cons2(x,rev22(y,l)))
     app#(rev21(x7),x8) -> rev2{2,#}(x7,x8) ->
     rev2{2,#}(x,cons2(y,l)) -> rev2{2,#}(y,l)
     app#(rev11(x7),x8) -> rev1{2,#}(x7,x8) ->
     rev1{2,#}(x,cons2(y,l)) -> rev1{2,#}(y,l)
     app#(rev(),x8) -> rev{1,#}(x8) ->
     rev{1,#}(cons2(x,l)) -> rev1{2,#}(x,l)
     app#(rev(),x8) -> rev{1,#}(x8) ->
     rev{1,#}(cons2(x,l)) -> rev2{2,#}(x,l)
     map{2,#}(f,cons2(x,xs)) -> app#(f,x) ->
     app#(filter23(x7,x6,x5),x8) -> filter2{4,#}(x7,x6,x5,x8)
     map{2,#}(f,cons2(x,xs)) -> app#(f,x) ->
     app#(filter1(x7),x8) -> filter{2,#}(x7,x8)
     map{2,#}(f,cons2(x,xs)) -> app#(f,x) ->
     app#(map1(x7),x8) -> map{2,#}(x7,x8)
     map{2,#}(f,cons2(x,xs)) -> app#(f,x) ->
     app#(rev21(x7),x8) -> rev2{2,#}(x7,x8)
     map{2,#}(f,cons2(x,xs)) -> app#(f,x) ->
     app#(rev11(x7),x8) -> rev1{2,#}(x7,x8)
     map{2,#}(f,cons2(x,xs)) -> app#(f,x) ->
     app#(rev(),x8) -> rev{1,#}(x8)
     map{2,#}(f,cons2(x,xs)) -> map{2,#}(f,xs) ->
     map{2,#}(f,cons2(x,xs)) -> app#(f,x)
     map{2,#}(f,cons2(x,xs)) -> map{2,#}(f,xs) ->
     map{2,#}(f,cons2(x,xs)) -> map{2,#}(f,xs)
     rev1{2,#}(x,cons2(y,l)) -> rev1{2,#}(y,l) ->
     rev1{2,#}(x,cons2(y,l)) -> rev1{2,#}(y,l)
     rev2{2,#}(x,cons2(y,l)) -> rev2{2,#}(y,l) ->
     rev2{2,#}(x,cons2(y,l)) -> rev{1,#}(cons2(x,rev22(y,l)))
     rev2{2,#}(x,cons2(y,l)) -> rev2{2,#}(y,l) ->
     rev2{2,#}(x,cons2(y,l)) -> rev2{2,#}(y,l)
     rev2{2,#}(x,cons2(y,l)) -> rev{1,#}(cons2(x,rev22(y,l))) ->
     rev{1,#}(cons2(x,l)) -> rev1{2,#}(x,l)
     rev2{2,#}(x,cons2(y,l)) -> rev{1,#}(cons2(x,rev22(y,l))) ->
     rev{1,#}(cons2(x,l)) -> rev2{2,#}(x,l)
     rev{1,#}(cons2(x,l)) -> rev1{2,#}(x,l) ->
     rev1{2,#}(x,cons2(y,l)) -> rev1{2,#}(y,l)
     rev{1,#}(cons2(x,l)) -> rev2{2,#}(x,l) ->
     rev2{2,#}(x,cons2(y,l)) -> rev{1,#}(cons2(x,rev22(y,l)))
     rev{1,#}(cons2(x,l)) -> rev2{2,#}(x,l) -> rev2{2,#}(x,cons2(y,l)) -> rev2{2,#}(y,l)
    SCC Processor:
     #sccs: 3
     #rules: 13
     #arcs: 39/289
     DPs:
      filter2{4,#}(false(),f,x,xs) -> filter{2,#}(f,xs)
      filter{2,#}(f,cons2(x,xs)) -> app#(f,x)
      app#(map1(x7),x8) -> map{2,#}(x7,x8)
      map{2,#}(f,cons2(x,xs)) -> map{2,#}(f,xs)
      map{2,#}(f,cons2(x,xs)) -> app#(f,x)
      app#(filter1(x7),x8) -> filter{2,#}(x7,x8)
      filter{2,#}(f,cons2(x,xs)) -> filter2{4,#}(app(f,x),f,x,xs)
      filter2{4,#}(true(),f,x,xs) -> filter{2,#}(f,xs)
      app#(filter23(x7,x6,x5),x8) -> filter2{4,#}(x7,x6,x5,x8)
     TRS:
      rev1(nil()) -> nil()
      rev1(cons2(x,l)) -> cons2(rev12(x,l),rev22(x,l))
      rev12(0(),nil()) -> 0()
      rev12(s1(x),nil()) -> s1(x)
      rev12(x,cons2(y,l)) -> rev12(y,l)
      rev22(x,nil()) -> nil()
      rev22(x,cons2(y,l)) -> rev1(cons2(x,rev22(y,l)))
      map2(f,nil()) -> nil()
      map2(f,cons2(x,xs)) -> cons2(app(f,x),map2(f,xs))
      filter2(f,nil()) -> nil()
      filter2(f,cons2(x,xs)) -> filter24(app(f,x),f,x,xs)
      filter24(true(),f,x,xs) -> cons2(x,filter2(f,xs))
      filter24(false(),f,x,xs) -> filter2(f,xs)
      app(rev(),x8) -> rev1(x8)
      app(cons1(x7),x8) -> cons2(x7,x8)
      app(cons(),x8) -> cons1(x8)
      app(rev11(x7),x8) -> rev12(x7,x8)
      app(rev1(),x8) -> rev11(x8)
      app(rev21(x7),x8) -> rev22(x7,x8)
      app(rev2(),x8) -> rev21(x8)
      app(s(),x8) -> s1(x8)
      app(map1(x7),x8) -> map2(x7,x8)
      app(map(),x8) -> map1(x8)
      app(filter1(x7),x8) -> filter2(x7,x8)
      app(filter(),x8) -> filter1(x8)
      app(filter23(x7,x6,x5),x8) -> filter24(x7,x6,x5,x8)
      app(filter22(x7,x6),x8) -> filter23(x7,x6,x8)
      app(filter21(x7),x8) -> filter22(x7,x8)
      app(filter2(),x8) -> filter21(x8)
     Subterm Criterion Processor:
      simple projection:
       pi(map{2,#}) = 1
       pi(app#) = 1
       pi(filter{2,#}) = 1
       pi(filter2{4,#}) = 3
      problem:
       DPs:
        filter2{4,#}(false(),f,x,xs) -> filter{2,#}(f,xs)
        app#(map1(x7),x8) -> map{2,#}(x7,x8)
        app#(filter1(x7),x8) -> filter{2,#}(x7,x8)
        filter2{4,#}(true(),f,x,xs) -> filter{2,#}(f,xs)
        app#(filter23(x7,x6,x5),x8) -> filter2{4,#}(x7,x6,x5,x8)
       TRS:
        rev1(nil()) -> nil()
        rev1(cons2(x,l)) -> cons2(rev12(x,l),rev22(x,l))
        rev12(0(),nil()) -> 0()
        rev12(s1(x),nil()) -> s1(x)
        rev12(x,cons2(y,l)) -> rev12(y,l)
        rev22(x,nil()) -> nil()
        rev22(x,cons2(y,l)) -> rev1(cons2(x,rev22(y,l)))
        map2(f,nil()) -> nil()
        map2(f,cons2(x,xs)) -> cons2(app(f,x),map2(f,xs))
        filter2(f,nil()) -> nil()
        filter2(f,cons2(x,xs)) -> filter24(app(f,x),f,x,xs)
        filter24(true(),f,x,xs) -> cons2(x,filter2(f,xs))
        filter24(false(),f,x,xs) -> filter2(f,xs)
        app(rev(),x8) -> rev1(x8)
        app(cons1(x7),x8) -> cons2(x7,x8)
        app(cons(),x8) -> cons1(x8)
        app(rev11(x7),x8) -> rev12(x7,x8)
        app(rev1(),x8) -> rev11(x8)
        app(rev21(x7),x8) -> rev22(x7,x8)
        app(rev2(),x8) -> rev21(x8)
        app(s(),x8) -> s1(x8)
        app(map1(x7),x8) -> map2(x7,x8)
        app(map(),x8) -> map1(x8)
        app(filter1(x7),x8) -> filter2(x7,x8)
        app(filter(),x8) -> filter1(x8)
        app(filter23(x7,x6,x5),x8) -> filter24(x7,x6,x5,x8)
        app(filter22(x7,x6),x8) -> filter23(x7,x6,x8)
        app(filter21(x7),x8) -> filter22(x7,x8)
        app(filter2(),x8) -> filter21(x8)
      SCC Processor:
       #sccs: 0
       #rules: 0
       #arcs: 20/25
       
     
     DPs:
      rev{1,#}(cons2(x,l)) -> rev2{2,#}(x,l)
      rev2{2,#}(x,cons2(y,l)) -> rev2{2,#}(y,l)
      rev2{2,#}(x,cons2(y,l)) -> rev{1,#}(cons2(x,rev22(y,l)))
     TRS:
      rev1(nil()) -> nil()
      rev1(cons2(x,l)) -> cons2(rev12(x,l),rev22(x,l))
      rev12(0(),nil()) -> 0()
      rev12(s1(x),nil()) -> s1(x)
      rev12(x,cons2(y,l)) -> rev12(y,l)
      rev22(x,nil()) -> nil()
      rev22(x,cons2(y,l)) -> rev1(cons2(x,rev22(y,l)))
      map2(f,nil()) -> nil()
      map2(f,cons2(x,xs)) -> cons2(app(f,x),map2(f,xs))
      filter2(f,nil()) -> nil()
      filter2(f,cons2(x,xs)) -> filter24(app(f,x),f,x,xs)
      filter24(true(),f,x,xs) -> cons2(x,filter2(f,xs))
      filter24(false(),f,x,xs) -> filter2(f,xs)
      app(rev(),x8) -> rev1(x8)
      app(cons1(x7),x8) -> cons2(x7,x8)
      app(cons(),x8) -> cons1(x8)
      app(rev11(x7),x8) -> rev12(x7,x8)
      app(rev1(),x8) -> rev11(x8)
      app(rev21(x7),x8) -> rev22(x7,x8)
      app(rev2(),x8) -> rev21(x8)
      app(s(),x8) -> s1(x8)
      app(map1(x7),x8) -> map2(x7,x8)
      app(map(),x8) -> map1(x8)
      app(filter1(x7),x8) -> filter2(x7,x8)
      app(filter(),x8) -> filter1(x8)
      app(filter23(x7,x6,x5),x8) -> filter24(x7,x6,x5,x8)
      app(filter22(x7,x6),x8) -> filter23(x7,x6,x8)
      app(filter21(x7),x8) -> filter22(x7,x8)
      app(filter2(),x8) -> filter21(x8)
     Usable Rule Processor:
      DPs:
       rev{1,#}(cons2(x,l)) -> rev2{2,#}(x,l)
       rev2{2,#}(x,cons2(y,l)) -> rev2{2,#}(y,l)
       rev2{2,#}(x,cons2(y,l)) -> rev{1,#}(cons2(x,rev22(y,l)))
      TRS:
       rev22(x,nil()) -> nil()
       rev22(x,cons2(y,l)) -> rev1(cons2(x,rev22(y,l)))
       rev1(cons2(x,l)) -> cons2(rev12(x,l),rev22(x,l))
       rev12(0(),nil()) -> 0()
       rev12(s1(x),nil()) -> s1(x)
       rev12(x,cons2(y,l)) -> rev12(y,l)
      Arctic Interpretation Processor:
       dimension: 1
       usable rules:
        rev22(x,nil()) -> nil()
        rev22(x,cons2(y,l)) -> rev1(cons2(x,rev22(y,l)))
        rev1(cons2(x,l)) -> cons2(rev12(x,l),rev22(x,l))
       interpretation:
        [rev2{2,#}](x0, x1) = x1,
        
        [rev{1,#}](x0) = x0 + 0,
        
        [s1](x0) = x0 + 0,
        
        [rev22](x0, x1) = x1,
        
        [rev12](x0, x1) = 7,
        
        [cons2](x0, x1) = 2x1 + 0,
        
        [rev1](x0) = x0 + 0,
        
        [0] = 4,
        
        [nil] = 3
       orientation:
        rev{1,#}(cons2(x,l)) = 2l + 0 >= l = rev2{2,#}(x,l)
        
        rev2{2,#}(x,cons2(y,l)) = 2l + 0 >= l = rev2{2,#}(y,l)
        
        rev2{2,#}(x,cons2(y,l)) = 2l + 0 >= 2l + 0 = rev{1,#}(cons2(x,rev22(y,l)))
        
        rev22(x,nil()) = 3 >= 3 = nil()
        
        rev22(x,cons2(y,l)) = 2l + 0 >= 2l + 0 = rev1(cons2(x,rev22(y,l)))
        
        rev1(cons2(x,l)) = 2l + 0 >= 2l + 0 = cons2(rev12(x,l),rev22(x,l))
        
        rev12(0(),nil()) = 7 >= 4 = 0()
        
        rev12(s1(x),nil()) = 7 >= x + 0 = s1(x)
        
        rev12(x,cons2(y,l)) = 7 >= 7 = rev12(y,l)
       problem:
        DPs:
         rev2{2,#}(x,cons2(y,l)) -> rev{1,#}(cons2(x,rev22(y,l)))
        TRS:
         rev22(x,nil()) -> nil()
         rev22(x,cons2(y,l)) -> rev1(cons2(x,rev22(y,l)))
         rev1(cons2(x,l)) -> cons2(rev12(x,l),rev22(x,l))
         rev12(0(),nil()) -> 0()
         rev12(s1(x),nil()) -> s1(x)
         rev12(x,cons2(y,l)) -> rev12(y,l)
       Restore Modifier:
        DPs:
         rev2{2,#}(x,cons2(y,l)) -> rev{1,#}(cons2(x,rev22(y,l)))
        TRS:
         rev1(nil()) -> nil()
         rev1(cons2(x,l)) -> cons2(rev12(x,l),rev22(x,l))
         rev12(0(),nil()) -> 0()
         rev12(s1(x),nil()) -> s1(x)
         rev12(x,cons2(y,l)) -> rev12(y,l)
         rev22(x,nil()) -> nil()
         rev22(x,cons2(y,l)) -> rev1(cons2(x,rev22(y,l)))
         map2(f,nil()) -> nil()
         map2(f,cons2(x,xs)) -> cons2(app(f,x),map2(f,xs))
         filter2(f,nil()) -> nil()
         filter2(f,cons2(x,xs)) -> filter24(app(f,x),f,x,xs)
         filter24(true(),f,x,xs) -> cons2(x,filter2(f,xs))
         filter24(false(),f,x,xs) -> filter2(f,xs)
         app(rev(),x8) -> rev1(x8)
         app(cons1(x7),x8) -> cons2(x7,x8)
         app(cons(),x8) -> cons1(x8)
         app(rev11(x7),x8) -> rev12(x7,x8)
         app(rev1(),x8) -> rev11(x8)
         app(rev21(x7),x8) -> rev22(x7,x8)
         app(rev2(),x8) -> rev21(x8)
         app(s(),x8) -> s1(x8)
         app(map1(x7),x8) -> map2(x7,x8)
         app(map(),x8) -> map1(x8)
         app(filter1(x7),x8) -> filter2(x7,x8)
         app(filter(),x8) -> filter1(x8)
         app(filter23(x7,x6,x5),x8) -> filter24(x7,x6,x5,x8)
         app(filter22(x7,x6),x8) -> filter23(x7,x6,x8)
         app(filter21(x7),x8) -> filter22(x7,x8)
         app(filter2(),x8) -> filter21(x8)
        SCC Processor:
         #sccs: 0
         #rules: 0
         #arcs: 5/1
         
     
     DPs:
      rev1{2,#}(x,cons2(y,l)) -> rev1{2,#}(y,l)
     TRS:
      rev1(nil()) -> nil()
      rev1(cons2(x,l)) -> cons2(rev12(x,l),rev22(x,l))
      rev12(0(),nil()) -> 0()
      rev12(s1(x),nil()) -> s1(x)
      rev12(x,cons2(y,l)) -> rev12(y,l)
      rev22(x,nil()) -> nil()
      rev22(x,cons2(y,l)) -> rev1(cons2(x,rev22(y,l)))
      map2(f,nil()) -> nil()
      map2(f,cons2(x,xs)) -> cons2(app(f,x),map2(f,xs))
      filter2(f,nil()) -> nil()
      filter2(f,cons2(x,xs)) -> filter24(app(f,x),f,x,xs)
      filter24(true(),f,x,xs) -> cons2(x,filter2(f,xs))
      filter24(false(),f,x,xs) -> filter2(f,xs)
      app(rev(),x8) -> rev1(x8)
      app(cons1(x7),x8) -> cons2(x7,x8)
      app(cons(),x8) -> cons1(x8)
      app(rev11(x7),x8) -> rev12(x7,x8)
      app(rev1(),x8) -> rev11(x8)
      app(rev21(x7),x8) -> rev22(x7,x8)
      app(rev2(),x8) -> rev21(x8)
      app(s(),x8) -> s1(x8)
      app(map1(x7),x8) -> map2(x7,x8)
      app(map(),x8) -> map1(x8)
      app(filter1(x7),x8) -> filter2(x7,x8)
      app(filter(),x8) -> filter1(x8)
      app(filter23(x7,x6,x5),x8) -> filter24(x7,x6,x5,x8)
      app(filter22(x7,x6),x8) -> filter23(x7,x6,x8)
      app(filter21(x7),x8) -> filter22(x7,x8)
      app(filter2(),x8) -> filter21(x8)
     Subterm Criterion Processor:
      simple projection:
       pi(rev1{2,#}) = 1
      problem:
       DPs:
        
       TRS:
        rev1(nil()) -> nil()
        rev1(cons2(x,l)) -> cons2(rev12(x,l),rev22(x,l))
        rev12(0(),nil()) -> 0()
        rev12(s1(x),nil()) -> s1(x)
        rev12(x,cons2(y,l)) -> rev12(y,l)
        rev22(x,nil()) -> nil()
        rev22(x,cons2(y,l)) -> rev1(cons2(x,rev22(y,l)))
        map2(f,nil()) -> nil()
        map2(f,cons2(x,xs)) -> cons2(app(f,x),map2(f,xs))
        filter2(f,nil()) -> nil()
        filter2(f,cons2(x,xs)) -> filter24(app(f,x),f,x,xs)
        filter24(true(),f,x,xs) -> cons2(x,filter2(f,xs))
        filter24(false(),f,x,xs) -> filter2(f,xs)
        app(rev(),x8) -> rev1(x8)
        app(cons1(x7),x8) -> cons2(x7,x8)
        app(cons(),x8) -> cons1(x8)
        app(rev11(x7),x8) -> rev12(x7,x8)
        app(rev1(),x8) -> rev11(x8)
        app(rev21(x7),x8) -> rev22(x7,x8)
        app(rev2(),x8) -> rev21(x8)
        app(s(),x8) -> s1(x8)
        app(map1(x7),x8) -> map2(x7,x8)
        app(map(),x8) -> map1(x8)
        app(filter1(x7),x8) -> filter2(x7,x8)
        app(filter(),x8) -> filter1(x8)
        app(filter23(x7,x6,x5),x8) -> filter24(x7,x6,x5,x8)
        app(filter22(x7,x6),x8) -> filter23(x7,x6,x8)
        app(filter21(x7),x8) -> filter22(x7,x8)
        app(filter2(),x8) -> filter21(x8)
      Qed