YES
TRS:
 { 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),
       app(app(map(), fun), app(app(cons(), x), xs)) -> app(app(cons(), app(fun, x)), app(app(map(), fun), xs)),
                         app(app(map(), 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(filter(), fun), nil()) -> nil(),
                               app(f(), app(s(), x)) -> app(f(), x),
          app(g(), app(app(cons(), app(s(), x)), y)) -> app(s(), x),
                  app(g(), app(app(cons(), 0()), y)) -> app(g(), y),
                    app(h(), app(app(cons(), x), y)) -> app(h(), app(g(), app(app(cons(), x), y)))}
 DP:
  Strict:
   { app#(app(app(app(filter2(), true()), fun), x), xs) -> app#(app(cons(), x), app(app(filter(), fun), xs)),
     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#(filter(), fun),
    app#(app(app(app(filter2(), false()), fun), x), xs) -> app#(app(filter(), fun), xs),
    app#(app(app(app(filter2(), false()), fun), x), xs) -> app#(filter(), fun),
         app#(app(map(), fun), app(app(cons(), x), xs)) -> 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(map(), fun), app(app(cons(), x), xs)) -> app#(app(map(), fun), xs),
         app#(app(map(), fun), app(app(cons(), x), xs)) -> app#(cons(), app(fun, x)),
      app#(app(filter(), fun), app(app(cons(), x), xs)) -> app#(fun, x),
      app#(app(filter(), fun), app(app(cons(), x), xs)) -> app#(app(app(app(filter2(), app(fun, x)), fun), x), xs),
      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(filter2(), app(fun, x)), fun),
      app#(app(filter(), fun), app(app(cons(), x), xs)) -> app#(filter2(), app(fun, x)),
                                 app#(f(), app(s(), x)) -> app#(f(), x),
                    app#(g(), app(app(cons(), 0()), y)) -> app#(g(), y),
                      app#(h(), app(app(cons(), x), y)) -> app#(g(), app(app(cons(), x), y)),
                      app#(h(), app(app(cons(), x), y)) -> app#(h(), app(g(), app(app(cons(), x), y)))}
  Weak:
  { 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),
        app(app(map(), fun), app(app(cons(), x), xs)) -> app(app(cons(), app(fun, x)), app(app(map(), fun), xs)),
                          app(app(map(), 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(filter(), fun), nil()) -> nil(),
                                app(f(), app(s(), x)) -> app(f(), x),
           app(g(), app(app(cons(), app(s(), x)), y)) -> app(s(), x),
                   app(g(), app(app(cons(), 0()), y)) -> app(g(), y),
                     app(h(), app(app(cons(), x), y)) -> app(h(), app(g(), app(app(cons(), x), y)))}
  EDG:
   {(app#(h(), app(app(cons(), x), y)) -> app#(h(), app(g(), app(app(cons(), x), y))), app#(h(), app(app(cons(), x), y)) -> app#(h(), app(g(), app(app(cons(), x), y))))
    (app#(h(), app(app(cons(), x), y)) -> app#(h(), app(g(), app(app(cons(), x), y))), app#(h(), app(app(cons(), x), y)) -> app#(g(), app(app(cons(), x), y)))
    (app#(f(), app(s(), x)) -> app#(f(), x), app#(f(), app(s(), x)) -> app#(f(), x))
    (app#(app(app(app(filter2(), true()), fun), x), xs) -> app#(app(filter(), fun), xs), app#(app(filter(), fun), app(app(cons(), x), xs)) -> app#(filter2(), app(fun, x)))
    (app#(app(app(app(filter2(), true()), fun), x), xs) -> app#(app(filter(), fun), xs), app#(app(filter(), fun), app(app(cons(), x), xs)) -> app#(app(filter2(), app(fun, x)), fun))
    (app#(app(app(app(filter2(), true()), fun), x), xs) -> app#(app(filter(), fun), xs), app#(app(filter(), fun), app(app(cons(), x), xs)) -> app#(app(app(filter2(), app(fun, x)), fun), x))
    (app#(app(app(app(filter2(), true()), fun), x), xs) -> app#(app(filter(), fun), xs), 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(filter(), fun), xs), app#(app(filter(), fun), app(app(cons(), x), xs)) -> app#(fun, x))
    (app#(app(map(), fun), app(app(cons(), x), xs)) -> app#(fun, x), app#(h(), app(app(cons(), x), y)) -> app#(h(), app(g(), app(app(cons(), x), y))))
    (app#(app(map(), fun), app(app(cons(), x), xs)) -> app#(fun, x), app#(h(), app(app(cons(), x), y)) -> app#(g(), app(app(cons(), x), y)))
    (app#(app(map(), fun), app(app(cons(), x), xs)) -> app#(fun, x), app#(g(), app(app(cons(), 0()), y)) -> app#(g(), y))
    (app#(app(map(), fun), app(app(cons(), x), xs)) -> app#(fun, x), app#(f(), app(s(), x)) -> app#(f(), x))
    (app#(app(map(), 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(map(), fun), app(app(cons(), x), xs)) -> app#(fun, x), app#(app(filter(), fun), app(app(cons(), x), xs)) -> app#(app(filter2(), app(fun, x)), fun))
    (app#(app(map(), fun), app(app(cons(), x), xs)) -> app#(fun, x), app#(app(filter(), fun), app(app(cons(), x), xs)) -> app#(app(app(filter2(), app(fun, x)), fun), x))
    (app#(app(map(), fun), app(app(cons(), x), xs)) -> app#(fun, x), app#(app(filter(), fun), app(app(cons(), x), xs)) -> app#(app(app(app(filter2(), app(fun, x)), fun), x), xs))
    (app#(app(map(), fun), app(app(cons(), x), xs)) -> app#(fun, x), app#(app(filter(), fun), app(app(cons(), x), xs)) -> app#(fun, x))
    (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#(fun, x), 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#(app(cons(), app(fun, x)), 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#(fun, x))
    (app#(app(map(), fun), app(app(cons(), x), xs)) -> app#(fun, x), app#(app(app(app(filter2(), false()), fun), x), xs) -> app#(filter(), fun))
    (app#(app(map(), fun), app(app(cons(), x), xs)) -> app#(fun, x), app#(app(app(app(filter2(), false()), fun), x), xs) -> app#(app(filter(), fun), xs))
    (app#(app(map(), fun), app(app(cons(), x), xs)) -> app#(fun, x), app#(app(app(app(filter2(), true()), fun), x), xs) -> app#(filter(), fun))
    (app#(app(map(), fun), app(app(cons(), x), xs)) -> app#(fun, x), app#(app(app(app(filter2(), true()), fun), x), xs) -> app#(cons(), x))
    (app#(app(map(), fun), app(app(cons(), x), xs)) -> app#(fun, x), app#(app(app(app(filter2(), true()), fun), x), xs) -> app#(app(filter(), fun), xs))
    (app#(app(map(), fun), app(app(cons(), x), xs)) -> app#(fun, x), app#(app(app(app(filter2(), true()), fun), x), xs) -> app#(app(cons(), x), app(app(filter(), fun), xs)))
    (app#(app(filter(), fun), app(app(cons(), x), xs)) -> app#(fun, x), app#(h(), app(app(cons(), x), y)) -> app#(h(), app(g(), app(app(cons(), x), y))))
    (app#(app(filter(), fun), app(app(cons(), x), xs)) -> app#(fun, x), app#(h(), app(app(cons(), x), y)) -> app#(g(), app(app(cons(), x), y)))
    (app#(app(filter(), fun), app(app(cons(), x), xs)) -> app#(fun, x), app#(g(), app(app(cons(), 0()), y)) -> app#(g(), y))
    (app#(app(filter(), fun), app(app(cons(), x), xs)) -> app#(fun, x), app#(f(), app(s(), x)) -> app#(f(), x))
    (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#(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#(fun, x), 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#(fun, x), app#(app(filter(), fun), app(app(cons(), x), xs)) -> app#(app(app(app(filter2(), app(fun, x)), fun), x), xs))
    (app#(app(filter(), fun), app(app(cons(), x), xs)) -> app#(fun, x), app#(app(filter(), fun), app(app(cons(), x), xs)) -> app#(fun, x))
    (app#(app(filter(), 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(filter(), fun), app(app(cons(), x), xs)) -> app#(fun, x), app#(app(map(), fun), app(app(cons(), x), xs)) -> app#(app(map(), fun), xs))
    (app#(app(filter(), fun), app(app(cons(), x), xs)) -> 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(map(), fun), app(app(cons(), x), xs)) -> app#(fun, x))
    (app#(app(filter(), fun), app(app(cons(), x), xs)) -> app#(fun, x), app#(app(app(app(filter2(), false()), fun), x), xs) -> app#(filter(), fun))
    (app#(app(filter(), fun), app(app(cons(), x), xs)) -> app#(fun, x), app#(app(app(app(filter2(), false()), fun), x), xs) -> app#(app(filter(), fun), xs))
    (app#(app(filter(), fun), app(app(cons(), x), xs)) -> app#(fun, x), app#(app(app(app(filter2(), true()), fun), x), xs) -> app#(filter(), fun))
    (app#(app(filter(), fun), app(app(cons(), x), xs)) -> app#(fun, x), app#(app(app(app(filter2(), true()), fun), x), xs) -> app#(cons(), x))
    (app#(app(filter(), fun), app(app(cons(), x), xs)) -> app#(fun, x), app#(app(app(app(filter2(), true()), fun), x), xs) -> app#(app(filter(), fun), xs))
    (app#(app(filter(), fun), app(app(cons(), x), xs)) -> app#(fun, x), app#(app(app(app(filter2(), true()), fun), x), xs) -> app#(app(cons(), x), app(app(filter(), fun), xs)))
    (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#(app(map(), fun), xs), app#(app(map(), fun), app(app(cons(), x), xs)) -> app#(app(cons(), app(fun, x)), app(app(map(), fun), xs)))
    (app#(app(map(), fun), app(app(cons(), x), xs)) -> app#(app(map(), fun), xs), app#(app(map(), fun), app(app(cons(), x), xs)) -> app#(app(map(), fun), xs))
    (app#(app(map(), fun), app(app(cons(), x), xs)) -> app#(app(map(), fun), xs), app#(app(map(), fun), app(app(cons(), x), xs)) -> app#(cons(), app(fun, x)))
    (app#(app(app(app(filter2(), false()), fun), x), xs) -> app#(app(filter(), fun), xs), app#(app(filter(), fun), app(app(cons(), x), xs)) -> app#(fun, x))
    (app#(app(app(app(filter2(), false()), fun), x), xs) -> app#(app(filter(), fun), xs), 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(), false()), fun), x), xs) -> app#(app(filter(), fun), xs), app#(app(filter(), fun), app(app(cons(), x), xs)) -> app#(app(app(filter2(), app(fun, x)), fun), x))
    (app#(app(app(app(filter2(), false()), fun), x), xs) -> app#(app(filter(), fun), xs), app#(app(filter(), fun), app(app(cons(), x), xs)) -> app#(app(filter2(), app(fun, x)), fun))
    (app#(app(app(app(filter2(), false()), fun), x), xs) -> app#(app(filter(), fun), xs), app#(app(filter(), fun), app(app(cons(), x), xs)) -> app#(filter2(), app(fun, x)))
    (app#(h(), app(app(cons(), x), y)) -> app#(g(), app(app(cons(), x), y)), app#(g(), app(app(cons(), 0()), y)) -> app#(g(), y))
    (app#(g(), app(app(cons(), 0()), y)) -> app#(g(), y), app#(g(), app(app(cons(), 0()), y)) -> app#(g(), y))}
   SCCS:
    Scc:
     {app#(h(), app(app(cons(), x), y)) -> app#(h(), app(g(), app(app(cons(), x), y)))}
    Scc:
     {app#(g(), app(app(cons(), 0()), y)) -> app#(g(), y)}
    Scc:
     {app#(f(), app(s(), x)) -> app#(f(), x)}
    Scc:
     { app#(app(app(app(filter2(), true()), fun), x), xs) -> app#(app(filter(), fun), xs),
      app#(app(app(app(filter2(), false()), fun), x), xs) -> app#(app(filter(), fun), xs),
           app#(app(map(), fun), app(app(cons(), x), xs)) -> app#(fun, x),
           app#(app(map(), fun), app(app(cons(), x), xs)) -> app#(app(map(), fun), xs),
        app#(app(filter(), fun), app(app(cons(), x), xs)) -> app#(fun, x)}
    SCC:
     Strict:
      {app#(h(), app(app(cons(), x), y)) -> app#(h(), app(g(), app(app(cons(), x), y)))}
     Weak:
     { 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),
           app(app(map(), fun), app(app(cons(), x), xs)) -> app(app(cons(), app(fun, x)), app(app(map(), fun), xs)),
                             app(app(map(), 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(filter(), fun), nil()) -> nil(),
                                   app(f(), app(s(), x)) -> app(f(), x),
              app(g(), app(app(cons(), app(s(), x)), y)) -> app(s(), x),
                      app(g(), app(app(cons(), 0()), y)) -> app(g(), y),
                        app(h(), app(app(cons(), x), y)) -> app(h(), app(g(), app(app(cons(), x), y)))}
     POLY:
      Argument Filtering:
       pi(false) = [], pi(true) = [], pi(filter2) = [], pi(filter) = [], pi(map) = [], pi(nil) = [], pi(h) = [], pi(0) = [], pi(cons) = [], pi(g) = [], pi(s) = [], pi(f) = [], pi(app#) = 1, pi(app) = 0
      Usable Rules:
       {}
      Interpretation:
       [cons] = 1,
       [g] = 0
      Strict:
       {}
      Weak:
       { 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),
             app(app(map(), fun), app(app(cons(), x), xs)) -> app(app(cons(), app(fun, x)), app(app(map(), fun), xs)),
                               app(app(map(), 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(filter(), fun), nil()) -> nil(),
                                     app(f(), app(s(), x)) -> app(f(), x),
                app(g(), app(app(cons(), app(s(), x)), y)) -> app(s(), x),
                        app(g(), app(app(cons(), 0()), y)) -> app(g(), y),
                          app(h(), app(app(cons(), x), y)) -> app(h(), app(g(), app(app(cons(), x), y)))}
      Qed
    SCC:
     Strict:
      {app#(g(), app(app(cons(), 0()), y)) -> app#(g(), y)}
     Weak:
     { 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),
           app(app(map(), fun), app(app(cons(), x), xs)) -> app(app(cons(), app(fun, x)), app(app(map(), fun), xs)),
                             app(app(map(), 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(filter(), fun), nil()) -> nil(),
                                   app(f(), app(s(), x)) -> app(f(), x),
              app(g(), app(app(cons(), app(s(), x)), y)) -> app(s(), x),
                      app(g(), app(app(cons(), 0()), y)) -> app(g(), y),
                        app(h(), app(app(cons(), x), y)) -> app(h(), app(g(), app(app(cons(), x), y)))}
     SPSC:
      Simple Projection:
       pi(app#) = 1
      Strict:
       {}
      Qed
    SCC:
     Strict:
      {app#(f(), app(s(), x)) -> app#(f(), x)}
     Weak:
     { 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),
           app(app(map(), fun), app(app(cons(), x), xs)) -> app(app(cons(), app(fun, x)), app(app(map(), fun), xs)),
                             app(app(map(), 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(filter(), fun), nil()) -> nil(),
                                   app(f(), app(s(), x)) -> app(f(), x),
              app(g(), app(app(cons(), app(s(), x)), y)) -> app(s(), x),
                      app(g(), app(app(cons(), 0()), y)) -> app(g(), y),
                        app(h(), app(app(cons(), x), y)) -> app(h(), app(g(), app(app(cons(), x), y)))}
     SPSC:
      Simple Projection:
       pi(app#) = 1
      Strict:
       {}
      Qed
    SCC:
     Strict:
      { app#(app(app(app(filter2(), true()), fun), x), xs) -> app#(app(filter(), fun), xs),
       app#(app(app(app(filter2(), false()), fun), x), xs) -> app#(app(filter(), fun), xs),
            app#(app(map(), fun), app(app(cons(), x), xs)) -> app#(fun, x),
            app#(app(map(), fun), app(app(cons(), x), xs)) -> app#(app(map(), fun), xs),
         app#(app(filter(), fun), app(app(cons(), x), xs)) -> app#(fun, x)}
     Weak:
     { 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),
           app(app(map(), fun), app(app(cons(), x), xs)) -> app(app(cons(), app(fun, x)), app(app(map(), fun), xs)),
                             app(app(map(), 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(filter(), fun), nil()) -> nil(),
                                   app(f(), app(s(), x)) -> app(f(), x),
              app(g(), app(app(cons(), app(s(), x)), y)) -> app(s(), x),
                      app(g(), app(app(cons(), 0()), y)) -> app(g(), y),
                        app(h(), app(app(cons(), x), y)) -> app(h(), app(g(), app(app(cons(), x), y)))}
     SPSC:
      Simple Projection:
       pi(app#) = 1
      Strict:
       { app#(app(app(app(filter2(), true()), fun), x), xs) -> app#(app(filter(), fun), xs),
        app#(app(app(app(filter2(), false()), fun), x), xs) -> app#(app(filter(), fun), xs),
             app#(app(map(), fun), app(app(cons(), x), xs)) -> app#(fun, x),
          app#(app(filter(), fun), app(app(cons(), x), xs)) -> app#(fun, x)}
      EDG:
       {(app#(app(filter(), fun), app(app(cons(), x), xs)) -> app#(fun, x), app#(app(filter(), fun), app(app(cons(), x), xs)) -> app#(fun, x))
        (app#(app(filter(), fun), app(app(cons(), x), xs)) -> app#(fun, x), app#(app(map(), fun), app(app(cons(), x), xs)) -> app#(fun, x))
        (app#(app(filter(), fun), app(app(cons(), x), xs)) -> app#(fun, x), app#(app(app(app(filter2(), false()), fun), x), xs) -> app#(app(filter(), fun), xs))
        (app#(app(filter(), fun), app(app(cons(), x), xs)) -> app#(fun, x), app#(app(app(app(filter2(), true()), fun), x), xs) -> app#(app(filter(), fun), xs))
        (app#(app(app(app(filter2(), false()), fun), x), xs) -> app#(app(filter(), fun), xs), app#(app(filter(), fun), app(app(cons(), x), xs)) -> app#(fun, x))
        (app#(app(app(app(filter2(), true()), fun), x), xs) -> app#(app(filter(), fun), xs), app#(app(filter(), fun), app(app(cons(), x), xs)) -> app#(fun, x))
        (app#(app(map(), fun), app(app(cons(), x), xs)) -> app#(fun, x), app#(app(app(app(filter2(), true()), fun), x), xs) -> app#(app(filter(), fun), xs))
        (app#(app(map(), fun), app(app(cons(), x), xs)) -> app#(fun, x), app#(app(app(app(filter2(), false()), fun), x), xs) -> app#(app(filter(), fun), xs))
        (app#(app(map(), fun), app(app(cons(), x), xs)) -> app#(fun, x), app#(app(map(), fun), app(app(cons(), x), xs)) -> app#(fun, x))
        (app#(app(map(), fun), app(app(cons(), x), xs)) -> app#(fun, x), app#(app(filter(), fun), app(app(cons(), x), xs)) -> app#(fun, x))}
       SCCS:
        Scc:
         { app#(app(app(app(filter2(), true()), fun), x), xs) -> app#(app(filter(), fun), xs),
          app#(app(app(app(filter2(), false()), fun), x), xs) -> app#(app(filter(), fun), xs),
               app#(app(map(), fun), app(app(cons(), x), xs)) -> app#(fun, x),
            app#(app(filter(), fun), app(app(cons(), x), xs)) -> app#(fun, x)}
        SCC:
         Strict:
          { app#(app(app(app(filter2(), true()), fun), x), xs) -> app#(app(filter(), fun), xs),
           app#(app(app(app(filter2(), false()), fun), x), xs) -> app#(app(filter(), fun), xs),
                app#(app(map(), fun), app(app(cons(), x), xs)) -> app#(fun, x),
             app#(app(filter(), fun), app(app(cons(), x), xs)) -> app#(fun, x)}
         Weak:
         { 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),
               app(app(map(), fun), app(app(cons(), x), xs)) -> app(app(cons(), app(fun, x)), app(app(map(), fun), xs)),
                                 app(app(map(), 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(filter(), fun), nil()) -> nil(),
                                       app(f(), app(s(), x)) -> app(f(), x),
                  app(g(), app(app(cons(), app(s(), x)), y)) -> app(s(), x),
                          app(g(), app(app(cons(), 0()), y)) -> app(g(), y),
                            app(h(), app(app(cons(), x), y)) -> app(h(), app(g(), app(app(cons(), x), y)))}
         SPSC:
          Simple Projection:
           pi(app#) = 1
          Strict:
           { app#(app(app(app(filter2(), true()), fun), x), xs) -> app#(app(filter(), fun), xs),
            app#(app(app(app(filter2(), false()), fun), x), xs) -> app#(app(filter(), fun), xs),
              app#(app(filter(), fun), app(app(cons(), x), xs)) -> app#(fun, x)}
          EDG:
           {(app#(app(app(app(filter2(), false()), fun), x), xs) -> app#(app(filter(), fun), xs), app#(app(filter(), fun), app(app(cons(), x), xs)) -> app#(fun, x))
            (app#(app(filter(), fun), app(app(cons(), x), xs)) -> app#(fun, x), app#(app(app(app(filter2(), true()), fun), x), xs) -> app#(app(filter(), fun), xs))
            (app#(app(filter(), fun), app(app(cons(), x), xs)) -> app#(fun, x), app#(app(app(app(filter2(), false()), fun), x), xs) -> app#(app(filter(), fun), xs))
            (app#(app(filter(), fun), app(app(cons(), x), xs)) -> app#(fun, x), app#(app(filter(), fun), app(app(cons(), x), xs)) -> app#(fun, x))
            (app#(app(app(app(filter2(), true()), fun), x), xs) -> app#(app(filter(), fun), xs), app#(app(filter(), fun), app(app(cons(), x), xs)) -> app#(fun, x))}
           SCCS:
            Scc:
             { app#(app(app(app(filter2(), true()), fun), x), xs) -> app#(app(filter(), fun), xs),
              app#(app(app(app(filter2(), false()), fun), x), xs) -> app#(app(filter(), fun), xs),
                app#(app(filter(), fun), app(app(cons(), x), xs)) -> app#(fun, x)}
            SCC:
             Strict:
              { app#(app(app(app(filter2(), true()), fun), x), xs) -> app#(app(filter(), fun), xs),
               app#(app(app(app(filter2(), false()), fun), x), xs) -> app#(app(filter(), fun), xs),
                 app#(app(filter(), fun), app(app(cons(), x), xs)) -> app#(fun, x)}
             Weak:
             { 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),
                   app(app(map(), fun), app(app(cons(), x), xs)) -> app(app(cons(), app(fun, x)), app(app(map(), fun), xs)),
                                     app(app(map(), 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(filter(), fun), nil()) -> nil(),
                                           app(f(), app(s(), x)) -> app(f(), x),
                      app(g(), app(app(cons(), app(s(), x)), y)) -> app(s(), x),
                              app(g(), app(app(cons(), 0()), y)) -> app(g(), y),
                                app(h(), app(app(cons(), x), y)) -> app(h(), app(g(), app(app(cons(), x), y)))}
             SPSC:
              Simple Projection:
               pi(app#) = 1
              Strict:
               { app#(app(app(app(filter2(), true()), fun), x), xs) -> app#(app(filter(), fun), xs),
                app#(app(app(app(filter2(), false()), fun), x), xs) -> app#(app(filter(), fun), xs)}
              EDG:
               {}
               SCCS:
                
                Qed