YES

Problem:
 active(fst(0(),Z)) -> mark(nil())
 active(fst(s(X),cons(Y,Z))) -> mark(cons(Y,fst(X,Z)))
 active(from(X)) -> mark(cons(X,from(s(X))))
 active(add(0(),X)) -> mark(X)
 active(add(s(X),Y)) -> mark(s(add(X,Y)))
 active(len(nil())) -> mark(0())
 active(len(cons(X,Z))) -> mark(s(len(Z)))
 active(cons(X1,X2)) -> cons(active(X1),X2)
 active(fst(X1,X2)) -> fst(active(X1),X2)
 active(fst(X1,X2)) -> fst(X1,active(X2))
 active(from(X)) -> from(active(X))
 active(add(X1,X2)) -> add(active(X1),X2)
 active(add(X1,X2)) -> add(X1,active(X2))
 active(len(X)) -> len(active(X))
 cons(mark(X1),X2) -> mark(cons(X1,X2))
 fst(mark(X1),X2) -> mark(fst(X1,X2))
 fst(X1,mark(X2)) -> mark(fst(X1,X2))
 from(mark(X)) -> mark(from(X))
 add(mark(X1),X2) -> mark(add(X1,X2))
 add(X1,mark(X2)) -> mark(add(X1,X2))
 len(mark(X)) -> mark(len(X))
 proper(0()) -> ok(0())
 proper(s(X)) -> s(proper(X))
 proper(nil()) -> ok(nil())
 proper(cons(X1,X2)) -> cons(proper(X1),proper(X2))
 proper(fst(X1,X2)) -> fst(proper(X1),proper(X2))
 proper(from(X)) -> from(proper(X))
 proper(add(X1,X2)) -> add(proper(X1),proper(X2))
 proper(len(X)) -> len(proper(X))
 s(ok(X)) -> ok(s(X))
 cons(ok(X1),ok(X2)) -> ok(cons(X1,X2))
 fst(ok(X1),ok(X2)) -> ok(fst(X1,X2))
 from(ok(X)) -> ok(from(X))
 add(ok(X1),ok(X2)) -> ok(add(X1,X2))
 len(ok(X)) -> ok(len(X))
 top(mark(X)) -> top(proper(X))
 top(ok(X)) -> top(active(X))

Proof:
 DP Processor:
  DPs:
   active#(fst(s(X),cons(Y,Z))) -> fst#(X,Z)
   active#(fst(s(X),cons(Y,Z))) -> cons#(Y,fst(X,Z))
   active#(from(X)) -> s#(X)
   active#(from(X)) -> from#(s(X))
   active#(from(X)) -> cons#(X,from(s(X)))
   active#(add(s(X),Y)) -> add#(X,Y)
   active#(add(s(X),Y)) -> s#(add(X,Y))
   active#(len(cons(X,Z))) -> len#(Z)
   active#(len(cons(X,Z))) -> s#(len(Z))
   active#(cons(X1,X2)) -> active#(X1)
   active#(cons(X1,X2)) -> cons#(active(X1),X2)
   active#(fst(X1,X2)) -> active#(X1)
   active#(fst(X1,X2)) -> fst#(active(X1),X2)
   active#(fst(X1,X2)) -> active#(X2)
   active#(fst(X1,X2)) -> fst#(X1,active(X2))
   active#(from(X)) -> active#(X)
   active#(from(X)) -> from#(active(X))
   active#(add(X1,X2)) -> active#(X1)
   active#(add(X1,X2)) -> add#(active(X1),X2)
   active#(add(X1,X2)) -> active#(X2)
   active#(add(X1,X2)) -> add#(X1,active(X2))
   active#(len(X)) -> active#(X)
   active#(len(X)) -> len#(active(X))
   cons#(mark(X1),X2) -> cons#(X1,X2)
   fst#(mark(X1),X2) -> fst#(X1,X2)
   fst#(X1,mark(X2)) -> fst#(X1,X2)
   from#(mark(X)) -> from#(X)
   add#(mark(X1),X2) -> add#(X1,X2)
   add#(X1,mark(X2)) -> add#(X1,X2)
   len#(mark(X)) -> len#(X)
   proper#(s(X)) -> proper#(X)
   proper#(s(X)) -> s#(proper(X))
   proper#(cons(X1,X2)) -> proper#(X2)
   proper#(cons(X1,X2)) -> proper#(X1)
   proper#(cons(X1,X2)) -> cons#(proper(X1),proper(X2))
   proper#(fst(X1,X2)) -> proper#(X2)
   proper#(fst(X1,X2)) -> proper#(X1)
   proper#(fst(X1,X2)) -> fst#(proper(X1),proper(X2))
   proper#(from(X)) -> proper#(X)
   proper#(from(X)) -> from#(proper(X))
   proper#(add(X1,X2)) -> proper#(X2)
   proper#(add(X1,X2)) -> proper#(X1)
   proper#(add(X1,X2)) -> add#(proper(X1),proper(X2))
   proper#(len(X)) -> proper#(X)
   proper#(len(X)) -> len#(proper(X))
   s#(ok(X)) -> s#(X)
   cons#(ok(X1),ok(X2)) -> cons#(X1,X2)
   fst#(ok(X1),ok(X2)) -> fst#(X1,X2)
   from#(ok(X)) -> from#(X)
   add#(ok(X1),ok(X2)) -> add#(X1,X2)
   len#(ok(X)) -> len#(X)
   top#(mark(X)) -> proper#(X)
   top#(mark(X)) -> top#(proper(X))
   top#(ok(X)) -> active#(X)
   top#(ok(X)) -> top#(active(X))
  TRS:
   active(fst(0(),Z)) -> mark(nil())
   active(fst(s(X),cons(Y,Z))) -> mark(cons(Y,fst(X,Z)))
   active(from(X)) -> mark(cons(X,from(s(X))))
   active(add(0(),X)) -> mark(X)
   active(add(s(X),Y)) -> mark(s(add(X,Y)))
   active(len(nil())) -> mark(0())
   active(len(cons(X,Z))) -> mark(s(len(Z)))
   active(cons(X1,X2)) -> cons(active(X1),X2)
   active(fst(X1,X2)) -> fst(active(X1),X2)
   active(fst(X1,X2)) -> fst(X1,active(X2))
   active(from(X)) -> from(active(X))
   active(add(X1,X2)) -> add(active(X1),X2)
   active(add(X1,X2)) -> add(X1,active(X2))
   active(len(X)) -> len(active(X))
   cons(mark(X1),X2) -> mark(cons(X1,X2))
   fst(mark(X1),X2) -> mark(fst(X1,X2))
   fst(X1,mark(X2)) -> mark(fst(X1,X2))
   from(mark(X)) -> mark(from(X))
   add(mark(X1),X2) -> mark(add(X1,X2))
   add(X1,mark(X2)) -> mark(add(X1,X2))
   len(mark(X)) -> mark(len(X))
   proper(0()) -> ok(0())
   proper(s(X)) -> s(proper(X))
   proper(nil()) -> ok(nil())
   proper(cons(X1,X2)) -> cons(proper(X1),proper(X2))
   proper(fst(X1,X2)) -> fst(proper(X1),proper(X2))
   proper(from(X)) -> from(proper(X))
   proper(add(X1,X2)) -> add(proper(X1),proper(X2))
   proper(len(X)) -> len(proper(X))
   s(ok(X)) -> ok(s(X))
   cons(ok(X1),ok(X2)) -> ok(cons(X1,X2))
   fst(ok(X1),ok(X2)) -> ok(fst(X1,X2))
   from(ok(X)) -> ok(from(X))
   add(ok(X1),ok(X2)) -> ok(add(X1,X2))
   len(ok(X)) -> ok(len(X))
   top(mark(X)) -> top(proper(X))
   top(ok(X)) -> top(active(X))
  TDG Processor:
   DPs:
    active#(fst(s(X),cons(Y,Z))) -> fst#(X,Z)
    active#(fst(s(X),cons(Y,Z))) -> cons#(Y,fst(X,Z))
    active#(from(X)) -> s#(X)
    active#(from(X)) -> from#(s(X))
    active#(from(X)) -> cons#(X,from(s(X)))
    active#(add(s(X),Y)) -> add#(X,Y)
    active#(add(s(X),Y)) -> s#(add(X,Y))
    active#(len(cons(X,Z))) -> len#(Z)
    active#(len(cons(X,Z))) -> s#(len(Z))
    active#(cons(X1,X2)) -> active#(X1)
    active#(cons(X1,X2)) -> cons#(active(X1),X2)
    active#(fst(X1,X2)) -> active#(X1)
    active#(fst(X1,X2)) -> fst#(active(X1),X2)
    active#(fst(X1,X2)) -> active#(X2)
    active#(fst(X1,X2)) -> fst#(X1,active(X2))
    active#(from(X)) -> active#(X)
    active#(from(X)) -> from#(active(X))
    active#(add(X1,X2)) -> active#(X1)
    active#(add(X1,X2)) -> add#(active(X1),X2)
    active#(add(X1,X2)) -> active#(X2)
    active#(add(X1,X2)) -> add#(X1,active(X2))
    active#(len(X)) -> active#(X)
    active#(len(X)) -> len#(active(X))
    cons#(mark(X1),X2) -> cons#(X1,X2)
    fst#(mark(X1),X2) -> fst#(X1,X2)
    fst#(X1,mark(X2)) -> fst#(X1,X2)
    from#(mark(X)) -> from#(X)
    add#(mark(X1),X2) -> add#(X1,X2)
    add#(X1,mark(X2)) -> add#(X1,X2)
    len#(mark(X)) -> len#(X)
    proper#(s(X)) -> proper#(X)
    proper#(s(X)) -> s#(proper(X))
    proper#(cons(X1,X2)) -> proper#(X2)
    proper#(cons(X1,X2)) -> proper#(X1)
    proper#(cons(X1,X2)) -> cons#(proper(X1),proper(X2))
    proper#(fst(X1,X2)) -> proper#(X2)
    proper#(fst(X1,X2)) -> proper#(X1)
    proper#(fst(X1,X2)) -> fst#(proper(X1),proper(X2))
    proper#(from(X)) -> proper#(X)
    proper#(from(X)) -> from#(proper(X))
    proper#(add(X1,X2)) -> proper#(X2)
    proper#(add(X1,X2)) -> proper#(X1)
    proper#(add(X1,X2)) -> add#(proper(X1),proper(X2))
    proper#(len(X)) -> proper#(X)
    proper#(len(X)) -> len#(proper(X))
    s#(ok(X)) -> s#(X)
    cons#(ok(X1),ok(X2)) -> cons#(X1,X2)
    fst#(ok(X1),ok(X2)) -> fst#(X1,X2)
    from#(ok(X)) -> from#(X)
    add#(ok(X1),ok(X2)) -> add#(X1,X2)
    len#(ok(X)) -> len#(X)
    top#(mark(X)) -> proper#(X)
    top#(mark(X)) -> top#(proper(X))
    top#(ok(X)) -> active#(X)
    top#(ok(X)) -> top#(active(X))
   TRS:
    active(fst(0(),Z)) -> mark(nil())
    active(fst(s(X),cons(Y,Z))) -> mark(cons(Y,fst(X,Z)))
    active(from(X)) -> mark(cons(X,from(s(X))))
    active(add(0(),X)) -> mark(X)
    active(add(s(X),Y)) -> mark(s(add(X,Y)))
    active(len(nil())) -> mark(0())
    active(len(cons(X,Z))) -> mark(s(len(Z)))
    active(cons(X1,X2)) -> cons(active(X1),X2)
    active(fst(X1,X2)) -> fst(active(X1),X2)
    active(fst(X1,X2)) -> fst(X1,active(X2))
    active(from(X)) -> from(active(X))
    active(add(X1,X2)) -> add(active(X1),X2)
    active(add(X1,X2)) -> add(X1,active(X2))
    active(len(X)) -> len(active(X))
    cons(mark(X1),X2) -> mark(cons(X1,X2))
    fst(mark(X1),X2) -> mark(fst(X1,X2))
    fst(X1,mark(X2)) -> mark(fst(X1,X2))
    from(mark(X)) -> mark(from(X))
    add(mark(X1),X2) -> mark(add(X1,X2))
    add(X1,mark(X2)) -> mark(add(X1,X2))
    len(mark(X)) -> mark(len(X))
    proper(0()) -> ok(0())
    proper(s(X)) -> s(proper(X))
    proper(nil()) -> ok(nil())
    proper(cons(X1,X2)) -> cons(proper(X1),proper(X2))
    proper(fst(X1,X2)) -> fst(proper(X1),proper(X2))
    proper(from(X)) -> from(proper(X))
    proper(add(X1,X2)) -> add(proper(X1),proper(X2))
    proper(len(X)) -> len(proper(X))
    s(ok(X)) -> ok(s(X))
    cons(ok(X1),ok(X2)) -> ok(cons(X1,X2))
    fst(ok(X1),ok(X2)) -> ok(fst(X1,X2))
    from(ok(X)) -> ok(from(X))
    add(ok(X1),ok(X2)) -> ok(add(X1,X2))
    len(ok(X)) -> ok(len(X))
    top(mark(X)) -> top(proper(X))
    top(ok(X)) -> top(active(X))
   graph:
    top#(ok(X)) -> top#(active(X)) -> top#(ok(X)) -> top#(active(X))
    top#(ok(X)) -> top#(active(X)) -> top#(ok(X)) -> active#(X)
    top#(ok(X)) -> top#(active(X)) ->
    top#(mark(X)) -> top#(proper(X))
    top#(ok(X)) -> top#(active(X)) -> top#(mark(X)) -> proper#(X)
    top#(ok(X)) -> active#(X) -> active#(len(X)) -> len#(active(X))
    top#(ok(X)) -> active#(X) -> active#(len(X)) -> active#(X)
    top#(ok(X)) -> active#(X) ->
    active#(add(X1,X2)) -> add#(X1,active(X2))
    top#(ok(X)) -> active#(X) -> active#(add(X1,X2)) -> active#(X2)
    top#(ok(X)) -> active#(X) ->
    active#(add(X1,X2)) -> add#(active(X1),X2)
    top#(ok(X)) -> active#(X) -> active#(add(X1,X2)) -> active#(X1)
    top#(ok(X)) -> active#(X) -> active#(from(X)) -> from#(active(X))
    top#(ok(X)) -> active#(X) -> active#(from(X)) -> active#(X)
    top#(ok(X)) -> active#(X) ->
    active#(fst(X1,X2)) -> fst#(X1,active(X2))
    top#(ok(X)) -> active#(X) -> active#(fst(X1,X2)) -> active#(X2)
    top#(ok(X)) -> active#(X) ->
    active#(fst(X1,X2)) -> fst#(active(X1),X2)
    top#(ok(X)) -> active#(X) -> active#(fst(X1,X2)) -> active#(X1)
    top#(ok(X)) -> active#(X) ->
    active#(cons(X1,X2)) -> cons#(active(X1),X2)
    top#(ok(X)) -> active#(X) -> active#(cons(X1,X2)) -> active#(X1)
    top#(ok(X)) -> active#(X) -> active#(len(cons(X,Z))) -> s#(len(Z))
    top#(ok(X)) -> active#(X) -> active#(len(cons(X,Z))) -> len#(Z)
    top#(ok(X)) -> active#(X) -> active#(add(s(X),Y)) -> s#(add(X,Y))
    top#(ok(X)) -> active#(X) -> active#(add(s(X),Y)) -> add#(X,Y)
    top#(ok(X)) -> active#(X) -> active#(from(X)) -> cons#(X,from(s(X)))
    top#(ok(X)) -> active#(X) -> active#(from(X)) -> from#(s(X))
    top#(ok(X)) -> active#(X) -> active#(from(X)) -> s#(X)
    top#(ok(X)) -> active#(X) ->
    active#(fst(s(X),cons(Y,Z))) -> cons#(Y,fst(X,Z))
    top#(ok(X)) -> active#(X) ->
    active#(fst(s(X),cons(Y,Z))) -> fst#(X,Z)
    top#(mark(X)) -> top#(proper(X)) ->
    top#(ok(X)) -> top#(active(X))
    top#(mark(X)) -> top#(proper(X)) -> top#(ok(X)) -> active#(X)
    top#(mark(X)) -> top#(proper(X)) ->
    top#(mark(X)) -> top#(proper(X))
    top#(mark(X)) -> top#(proper(X)) -> top#(mark(X)) -> proper#(X)
    top#(mark(X)) -> proper#(X) -> proper#(len(X)) -> len#(proper(X))
    top#(mark(X)) -> proper#(X) -> proper#(len(X)) -> proper#(X)
    top#(mark(X)) -> proper#(X) ->
    proper#(add(X1,X2)) -> add#(proper(X1),proper(X2))
    top#(mark(X)) -> proper#(X) -> proper#(add(X1,X2)) -> proper#(X1)
    top#(mark(X)) -> proper#(X) -> proper#(add(X1,X2)) -> proper#(X2)
    top#(mark(X)) -> proper#(X) -> proper#(from(X)) -> from#(proper(X))
    top#(mark(X)) -> proper#(X) -> proper#(from(X)) -> proper#(X)
    top#(mark(X)) -> proper#(X) ->
    proper#(fst(X1,X2)) -> fst#(proper(X1),proper(X2))
    top#(mark(X)) -> proper#(X) -> proper#(fst(X1,X2)) -> proper#(X1)
    top#(mark(X)) -> proper#(X) -> proper#(fst(X1,X2)) -> proper#(X2)
    top#(mark(X)) -> proper#(X) ->
    proper#(cons(X1,X2)) -> cons#(proper(X1),proper(X2))
    top#(mark(X)) -> proper#(X) -> proper#(cons(X1,X2)) -> proper#(X1)
    top#(mark(X)) -> proper#(X) -> proper#(cons(X1,X2)) -> proper#(X2)
    top#(mark(X)) -> proper#(X) -> proper#(s(X)) -> s#(proper(X))
    top#(mark(X)) -> proper#(X) -> proper#(s(X)) -> proper#(X)
    proper#(len(X)) -> proper#(X) ->
    proper#(len(X)) -> len#(proper(X))
    proper#(len(X)) -> proper#(X) -> proper#(len(X)) -> proper#(X)
    proper#(len(X)) -> proper#(X) ->
    proper#(add(X1,X2)) -> add#(proper(X1),proper(X2))
    proper#(len(X)) -> proper#(X) ->
    proper#(add(X1,X2)) -> proper#(X1)
    proper#(len(X)) -> proper#(X) ->
    proper#(add(X1,X2)) -> proper#(X2)
    proper#(len(X)) -> proper#(X) ->
    proper#(from(X)) -> from#(proper(X))
    proper#(len(X)) -> proper#(X) -> proper#(from(X)) -> proper#(X)
    proper#(len(X)) -> proper#(X) ->
    proper#(fst(X1,X2)) -> fst#(proper(X1),proper(X2))
    proper#(len(X)) -> proper#(X) ->
    proper#(fst(X1,X2)) -> proper#(X1)
    proper#(len(X)) -> proper#(X) ->
    proper#(fst(X1,X2)) -> proper#(X2)
    proper#(len(X)) -> proper#(X) ->
    proper#(cons(X1,X2)) -> cons#(proper(X1),proper(X2))
    proper#(len(X)) -> proper#(X) ->
    proper#(cons(X1,X2)) -> proper#(X1)
    proper#(len(X)) -> proper#(X) ->
    proper#(cons(X1,X2)) -> proper#(X2)
    proper#(len(X)) -> proper#(X) -> proper#(s(X)) -> s#(proper(X))
    proper#(len(X)) -> proper#(X) -> proper#(s(X)) -> proper#(X)
    proper#(len(X)) -> len#(proper(X)) -> len#(ok(X)) -> len#(X)
    proper#(len(X)) -> len#(proper(X)) ->
    len#(mark(X)) -> len#(X)
    proper#(add(X1,X2)) -> proper#(X2) ->
    proper#(len(X)) -> len#(proper(X))
    proper#(add(X1,X2)) -> proper#(X2) ->
    proper#(len(X)) -> proper#(X)
    proper#(add(X1,X2)) -> proper#(X2) ->
    proper#(add(X1,X2)) -> add#(proper(X1),proper(X2))
    proper#(add(X1,X2)) -> proper#(X2) ->
    proper#(add(X1,X2)) -> proper#(X1)
    proper#(add(X1,X2)) -> proper#(X2) ->
    proper#(add(X1,X2)) -> proper#(X2)
    proper#(add(X1,X2)) -> proper#(X2) ->
    proper#(from(X)) -> from#(proper(X))
    proper#(add(X1,X2)) -> proper#(X2) ->
    proper#(from(X)) -> proper#(X)
    proper#(add(X1,X2)) -> proper#(X2) ->
    proper#(fst(X1,X2)) -> fst#(proper(X1),proper(X2))
    proper#(add(X1,X2)) -> proper#(X2) ->
    proper#(fst(X1,X2)) -> proper#(X1)
    proper#(add(X1,X2)) -> proper#(X2) ->
    proper#(fst(X1,X2)) -> proper#(X2)
    proper#(add(X1,X2)) -> proper#(X2) ->
    proper#(cons(X1,X2)) -> cons#(proper(X1),proper(X2))
    proper#(add(X1,X2)) -> proper#(X2) ->
    proper#(cons(X1,X2)) -> proper#(X1)
    proper#(add(X1,X2)) -> proper#(X2) ->
    proper#(cons(X1,X2)) -> proper#(X2)
    proper#(add(X1,X2)) -> proper#(X2) ->
    proper#(s(X)) -> s#(proper(X))
    proper#(add(X1,X2)) -> proper#(X2) ->
    proper#(s(X)) -> proper#(X)
    proper#(add(X1,X2)) -> proper#(X1) ->
    proper#(len(X)) -> len#(proper(X))
    proper#(add(X1,X2)) -> proper#(X1) ->
    proper#(len(X)) -> proper#(X)
    proper#(add(X1,X2)) -> proper#(X1) ->
    proper#(add(X1,X2)) -> add#(proper(X1),proper(X2))
    proper#(add(X1,X2)) -> proper#(X1) ->
    proper#(add(X1,X2)) -> proper#(X1)
    proper#(add(X1,X2)) -> proper#(X1) ->
    proper#(add(X1,X2)) -> proper#(X2)
    proper#(add(X1,X2)) -> proper#(X1) ->
    proper#(from(X)) -> from#(proper(X))
    proper#(add(X1,X2)) -> proper#(X1) ->
    proper#(from(X)) -> proper#(X)
    proper#(add(X1,X2)) -> proper#(X1) ->
    proper#(fst(X1,X2)) -> fst#(proper(X1),proper(X2))
    proper#(add(X1,X2)) -> proper#(X1) ->
    proper#(fst(X1,X2)) -> proper#(X1)
    proper#(add(X1,X2)) -> proper#(X1) ->
    proper#(fst(X1,X2)) -> proper#(X2)
    proper#(add(X1,X2)) -> proper#(X1) ->
    proper#(cons(X1,X2)) -> cons#(proper(X1),proper(X2))
    proper#(add(X1,X2)) -> proper#(X1) ->
    proper#(cons(X1,X2)) -> proper#(X1)
    proper#(add(X1,X2)) -> proper#(X1) ->
    proper#(cons(X1,X2)) -> proper#(X2)
    proper#(add(X1,X2)) -> proper#(X1) ->
    proper#(s(X)) -> s#(proper(X))
    proper#(add(X1,X2)) -> proper#(X1) ->
    proper#(s(X)) -> proper#(X)
    proper#(add(X1,X2)) -> add#(proper(X1),proper(X2)) ->
    add#(ok(X1),ok(X2)) -> add#(X1,X2)
    proper#(add(X1,X2)) -> add#(proper(X1),proper(X2)) ->
    add#(X1,mark(X2)) -> add#(X1,X2)
    proper#(add(X1,X2)) -> add#(proper(X1),proper(X2)) ->
    add#(mark(X1),X2) -> add#(X1,X2)
    proper#(from(X)) -> proper#(X) ->
    proper#(len(X)) -> len#(proper(X))
    proper#(from(X)) -> proper#(X) -> proper#(len(X)) -> proper#(X)
    proper#(from(X)) -> proper#(X) ->
    proper#(add(X1,X2)) -> add#(proper(X1),proper(X2))
    proper#(from(X)) -> proper#(X) ->
    proper#(add(X1,X2)) -> proper#(X1)
    proper#(from(X)) -> proper#(X) ->
    proper#(add(X1,X2)) -> proper#(X2)
    proper#(from(X)) -> proper#(X) ->
    proper#(from(X)) -> from#(proper(X))
    proper#(from(X)) -> proper#(X) -> proper#(from(X)) -> proper#(X)
    proper#(from(X)) -> proper#(X) ->
    proper#(fst(X1,X2)) -> fst#(proper(X1),proper(X2))
    proper#(from(X)) -> proper#(X) ->
    proper#(fst(X1,X2)) -> proper#(X1)
    proper#(from(X)) -> proper#(X) ->
    proper#(fst(X1,X2)) -> proper#(X2)
    proper#(from(X)) -> proper#(X) ->
    proper#(cons(X1,X2)) -> cons#(proper(X1),proper(X2))
    proper#(from(X)) -> proper#(X) ->
    proper#(cons(X1,X2)) -> proper#(X1)
    proper#(from(X)) -> proper#(X) ->
    proper#(cons(X1,X2)) -> proper#(X2)
    proper#(from(X)) -> proper#(X) -> proper#(s(X)) -> s#(proper(X))
    proper#(from(X)) -> proper#(X) ->
    proper#(s(X)) -> proper#(X)
    proper#(from(X)) -> from#(proper(X)) ->
    from#(ok(X)) -> from#(X)
    proper#(from(X)) -> from#(proper(X)) ->
    from#(mark(X)) -> from#(X)
    proper#(cons(X1,X2)) -> proper#(X2) ->
    proper#(len(X)) -> len#(proper(X))
    proper#(cons(X1,X2)) -> proper#(X2) ->
    proper#(len(X)) -> proper#(X)
    proper#(cons(X1,X2)) -> proper#(X2) ->
    proper#(add(X1,X2)) -> add#(proper(X1),proper(X2))
    proper#(cons(X1,X2)) -> proper#(X2) ->
    proper#(add(X1,X2)) -> proper#(X1)
    proper#(cons(X1,X2)) -> proper#(X2) ->
    proper#(add(X1,X2)) -> proper#(X2)
    proper#(cons(X1,X2)) -> proper#(X2) ->
    proper#(from(X)) -> from#(proper(X))
    proper#(cons(X1,X2)) -> proper#(X2) ->
    proper#(from(X)) -> proper#(X)
    proper#(cons(X1,X2)) -> proper#(X2) ->
    proper#(fst(X1,X2)) -> fst#(proper(X1),proper(X2))
    proper#(cons(X1,X2)) -> proper#(X2) ->
    proper#(fst(X1,X2)) -> proper#(X1)
    proper#(cons(X1,X2)) -> proper#(X2) ->
    proper#(fst(X1,X2)) -> proper#(X2)
    proper#(cons(X1,X2)) -> proper#(X2) ->
    proper#(cons(X1,X2)) -> cons#(proper(X1),proper(X2))
    proper#(cons(X1,X2)) -> proper#(X2) ->
    proper#(cons(X1,X2)) -> proper#(X1)
    proper#(cons(X1,X2)) -> proper#(X2) ->
    proper#(cons(X1,X2)) -> proper#(X2)
    proper#(cons(X1,X2)) -> proper#(X2) ->
    proper#(s(X)) -> s#(proper(X))
    proper#(cons(X1,X2)) -> proper#(X2) ->
    proper#(s(X)) -> proper#(X)
    proper#(cons(X1,X2)) -> proper#(X1) ->
    proper#(len(X)) -> len#(proper(X))
    proper#(cons(X1,X2)) -> proper#(X1) ->
    proper#(len(X)) -> proper#(X)
    proper#(cons(X1,X2)) -> proper#(X1) ->
    proper#(add(X1,X2)) -> add#(proper(X1),proper(X2))
    proper#(cons(X1,X2)) -> proper#(X1) ->
    proper#(add(X1,X2)) -> proper#(X1)
    proper#(cons(X1,X2)) -> proper#(X1) ->
    proper#(add(X1,X2)) -> proper#(X2)
    proper#(cons(X1,X2)) -> proper#(X1) ->
    proper#(from(X)) -> from#(proper(X))
    proper#(cons(X1,X2)) -> proper#(X1) ->
    proper#(from(X)) -> proper#(X)
    proper#(cons(X1,X2)) -> proper#(X1) ->
    proper#(fst(X1,X2)) -> fst#(proper(X1),proper(X2))
    proper#(cons(X1,X2)) -> proper#(X1) ->
    proper#(fst(X1,X2)) -> proper#(X1)
    proper#(cons(X1,X2)) -> proper#(X1) ->
    proper#(fst(X1,X2)) -> proper#(X2)
    proper#(cons(X1,X2)) -> proper#(X1) ->
    proper#(cons(X1,X2)) -> cons#(proper(X1),proper(X2))
    proper#(cons(X1,X2)) -> proper#(X1) ->
    proper#(cons(X1,X2)) -> proper#(X1)
    proper#(cons(X1,X2)) -> proper#(X1) ->
    proper#(cons(X1,X2)) -> proper#(X2)
    proper#(cons(X1,X2)) -> proper#(X1) ->
    proper#(s(X)) -> s#(proper(X))
    proper#(cons(X1,X2)) -> proper#(X1) ->
    proper#(s(X)) -> proper#(X)
    proper#(cons(X1,X2)) -> cons#(proper(X1),proper(X2)) ->
    cons#(ok(X1),ok(X2)) -> cons#(X1,X2)
    proper#(cons(X1,X2)) -> cons#(proper(X1),proper(X2)) ->
    cons#(mark(X1),X2) -> cons#(X1,X2)
    proper#(s(X)) -> proper#(X) -> proper#(len(X)) -> len#(proper(X))
    proper#(s(X)) -> proper#(X) -> proper#(len(X)) -> proper#(X)
    proper#(s(X)) -> proper#(X) ->
    proper#(add(X1,X2)) -> add#(proper(X1),proper(X2))
    proper#(s(X)) -> proper#(X) -> proper#(add(X1,X2)) -> proper#(X1)
    proper#(s(X)) -> proper#(X) -> proper#(add(X1,X2)) -> proper#(X2)
    proper#(s(X)) -> proper#(X) -> proper#(from(X)) -> from#(proper(X))
    proper#(s(X)) -> proper#(X) -> proper#(from(X)) -> proper#(X)
    proper#(s(X)) -> proper#(X) ->
    proper#(fst(X1,X2)) -> fst#(proper(X1),proper(X2))
    proper#(s(X)) -> proper#(X) -> proper#(fst(X1,X2)) -> proper#(X1)
    proper#(s(X)) -> proper#(X) -> proper#(fst(X1,X2)) -> proper#(X2)
    proper#(s(X)) -> proper#(X) ->
    proper#(cons(X1,X2)) -> cons#(proper(X1),proper(X2))
    proper#(s(X)) -> proper#(X) -> proper#(cons(X1,X2)) -> proper#(X1)
    proper#(s(X)) -> proper#(X) -> proper#(cons(X1,X2)) -> proper#(X2)
    proper#(s(X)) -> proper#(X) -> proper#(s(X)) -> s#(proper(X))
    proper#(s(X)) -> proper#(X) -> proper#(s(X)) -> proper#(X)
    proper#(s(X)) -> s#(proper(X)) -> s#(ok(X)) -> s#(X)
    proper#(fst(X1,X2)) -> proper#(X2) ->
    proper#(len(X)) -> len#(proper(X))
    proper#(fst(X1,X2)) -> proper#(X2) ->
    proper#(len(X)) -> proper#(X)
    proper#(fst(X1,X2)) -> proper#(X2) ->
    proper#(add(X1,X2)) -> add#(proper(X1),proper(X2))
    proper#(fst(X1,X2)) -> proper#(X2) ->
    proper#(add(X1,X2)) -> proper#(X1)
    proper#(fst(X1,X2)) -> proper#(X2) ->
    proper#(add(X1,X2)) -> proper#(X2)
    proper#(fst(X1,X2)) -> proper#(X2) ->
    proper#(from(X)) -> from#(proper(X))
    proper#(fst(X1,X2)) -> proper#(X2) ->
    proper#(from(X)) -> proper#(X)
    proper#(fst(X1,X2)) -> proper#(X2) ->
    proper#(fst(X1,X2)) -> fst#(proper(X1),proper(X2))
    proper#(fst(X1,X2)) -> proper#(X2) ->
    proper#(fst(X1,X2)) -> proper#(X1)
    proper#(fst(X1,X2)) -> proper#(X2) ->
    proper#(fst(X1,X2)) -> proper#(X2)
    proper#(fst(X1,X2)) -> proper#(X2) ->
    proper#(cons(X1,X2)) -> cons#(proper(X1),proper(X2))
    proper#(fst(X1,X2)) -> proper#(X2) ->
    proper#(cons(X1,X2)) -> proper#(X1)
    proper#(fst(X1,X2)) -> proper#(X2) ->
    proper#(cons(X1,X2)) -> proper#(X2)
    proper#(fst(X1,X2)) -> proper#(X2) ->
    proper#(s(X)) -> s#(proper(X))
    proper#(fst(X1,X2)) -> proper#(X2) ->
    proper#(s(X)) -> proper#(X)
    proper#(fst(X1,X2)) -> proper#(X1) ->
    proper#(len(X)) -> len#(proper(X))
    proper#(fst(X1,X2)) -> proper#(X1) ->
    proper#(len(X)) -> proper#(X)
    proper#(fst(X1,X2)) -> proper#(X1) ->
    proper#(add(X1,X2)) -> add#(proper(X1),proper(X2))
    proper#(fst(X1,X2)) -> proper#(X1) ->
    proper#(add(X1,X2)) -> proper#(X1)
    proper#(fst(X1,X2)) -> proper#(X1) ->
    proper#(add(X1,X2)) -> proper#(X2)
    proper#(fst(X1,X2)) -> proper#(X1) ->
    proper#(from(X)) -> from#(proper(X))
    proper#(fst(X1,X2)) -> proper#(X1) ->
    proper#(from(X)) -> proper#(X)
    proper#(fst(X1,X2)) -> proper#(X1) ->
    proper#(fst(X1,X2)) -> fst#(proper(X1),proper(X2))
    proper#(fst(X1,X2)) -> proper#(X1) ->
    proper#(fst(X1,X2)) -> proper#(X1)
    proper#(fst(X1,X2)) -> proper#(X1) ->
    proper#(fst(X1,X2)) -> proper#(X2)
    proper#(fst(X1,X2)) -> proper#(X1) ->
    proper#(cons(X1,X2)) -> cons#(proper(X1),proper(X2))
    proper#(fst(X1,X2)) -> proper#(X1) ->
    proper#(cons(X1,X2)) -> proper#(X1)
    proper#(fst(X1,X2)) -> proper#(X1) ->
    proper#(cons(X1,X2)) -> proper#(X2)
    proper#(fst(X1,X2)) -> proper#(X1) ->
    proper#(s(X)) -> s#(proper(X))
    proper#(fst(X1,X2)) -> proper#(X1) ->
    proper#(s(X)) -> proper#(X)
    proper#(fst(X1,X2)) -> fst#(proper(X1),proper(X2)) ->
    fst#(ok(X1),ok(X2)) -> fst#(X1,X2)
    proper#(fst(X1,X2)) -> fst#(proper(X1),proper(X2)) ->
    fst#(X1,mark(X2)) -> fst#(X1,X2)
    proper#(fst(X1,X2)) -> fst#(proper(X1),proper(X2)) ->
    fst#(mark(X1),X2) -> fst#(X1,X2)
    len#(ok(X)) -> len#(X) -> len#(ok(X)) -> len#(X)
    len#(ok(X)) -> len#(X) -> len#(mark(X)) -> len#(X)
    len#(mark(X)) -> len#(X) -> len#(ok(X)) -> len#(X)
    len#(mark(X)) -> len#(X) -> len#(mark(X)) -> len#(X)
    add#(ok(X1),ok(X2)) -> add#(X1,X2) ->
    add#(ok(X1),ok(X2)) -> add#(X1,X2)
    add#(ok(X1),ok(X2)) -> add#(X1,X2) ->
    add#(X1,mark(X2)) -> add#(X1,X2)
    add#(ok(X1),ok(X2)) -> add#(X1,X2) ->
    add#(mark(X1),X2) -> add#(X1,X2)
    add#(mark(X1),X2) -> add#(X1,X2) ->
    add#(ok(X1),ok(X2)) -> add#(X1,X2)
    add#(mark(X1),X2) -> add#(X1,X2) ->
    add#(X1,mark(X2)) -> add#(X1,X2)
    add#(mark(X1),X2) -> add#(X1,X2) ->
    add#(mark(X1),X2) -> add#(X1,X2)
    add#(X1,mark(X2)) -> add#(X1,X2) ->
    add#(ok(X1),ok(X2)) -> add#(X1,X2)
    add#(X1,mark(X2)) -> add#(X1,X2) ->
    add#(X1,mark(X2)) -> add#(X1,X2)
    add#(X1,mark(X2)) -> add#(X1,X2) -> add#(mark(X1),X2) -> add#(X1,X2)
    from#(ok(X)) -> from#(X) -> from#(ok(X)) -> from#(X)
    from#(ok(X)) -> from#(X) -> from#(mark(X)) -> from#(X)
    from#(mark(X)) -> from#(X) -> from#(ok(X)) -> from#(X)
    from#(mark(X)) -> from#(X) -> from#(mark(X)) -> from#(X)
    s#(ok(X)) -> s#(X) -> s#(ok(X)) -> s#(X)
    cons#(ok(X1),ok(X2)) -> cons#(X1,X2) ->
    cons#(ok(X1),ok(X2)) -> cons#(X1,X2)
    cons#(ok(X1),ok(X2)) -> cons#(X1,X2) ->
    cons#(mark(X1),X2) -> cons#(X1,X2)
    cons#(mark(X1),X2) -> cons#(X1,X2) ->
    cons#(ok(X1),ok(X2)) -> cons#(X1,X2)
    cons#(mark(X1),X2) -> cons#(X1,X2) ->
    cons#(mark(X1),X2) -> cons#(X1,X2)
    fst#(ok(X1),ok(X2)) -> fst#(X1,X2) ->
    fst#(ok(X1),ok(X2)) -> fst#(X1,X2)
    fst#(ok(X1),ok(X2)) -> fst#(X1,X2) ->
    fst#(X1,mark(X2)) -> fst#(X1,X2)
    fst#(ok(X1),ok(X2)) -> fst#(X1,X2) ->
    fst#(mark(X1),X2) -> fst#(X1,X2)
    fst#(mark(X1),X2) -> fst#(X1,X2) ->
    fst#(ok(X1),ok(X2)) -> fst#(X1,X2)
    fst#(mark(X1),X2) -> fst#(X1,X2) ->
    fst#(X1,mark(X2)) -> fst#(X1,X2)
    fst#(mark(X1),X2) -> fst#(X1,X2) ->
    fst#(mark(X1),X2) -> fst#(X1,X2)
    fst#(X1,mark(X2)) -> fst#(X1,X2) ->
    fst#(ok(X1),ok(X2)) -> fst#(X1,X2)
    fst#(X1,mark(X2)) -> fst#(X1,X2) ->
    fst#(X1,mark(X2)) -> fst#(X1,X2)
    fst#(X1,mark(X2)) -> fst#(X1,X2) ->
    fst#(mark(X1),X2) -> fst#(X1,X2)
    active#(len(cons(X,Z))) -> len#(Z) -> len#(ok(X)) -> len#(X)
    active#(len(cons(X,Z))) -> len#(Z) ->
    len#(mark(X)) -> len#(X)
    active#(len(cons(X,Z))) -> s#(len(Z)) -> s#(ok(X)) -> s#(X)
    active#(len(X)) -> len#(active(X)) -> len#(ok(X)) -> len#(X)
    active#(len(X)) -> len#(active(X)) -> len#(mark(X)) -> len#(X)
    active#(len(X)) -> active#(X) ->
    active#(len(X)) -> len#(active(X))
    active#(len(X)) -> active#(X) -> active#(len(X)) -> active#(X)
    active#(len(X)) -> active#(X) ->
    active#(add(X1,X2)) -> add#(X1,active(X2))
    active#(len(X)) -> active#(X) ->
    active#(add(X1,X2)) -> active#(X2)
    active#(len(X)) -> active#(X) ->
    active#(add(X1,X2)) -> add#(active(X1),X2)
    active#(len(X)) -> active#(X) ->
    active#(add(X1,X2)) -> active#(X1)
    active#(len(X)) -> active#(X) ->
    active#(from(X)) -> from#(active(X))
    active#(len(X)) -> active#(X) -> active#(from(X)) -> active#(X)
    active#(len(X)) -> active#(X) ->
    active#(fst(X1,X2)) -> fst#(X1,active(X2))
    active#(len(X)) -> active#(X) ->
    active#(fst(X1,X2)) -> active#(X2)
    active#(len(X)) -> active#(X) ->
    active#(fst(X1,X2)) -> fst#(active(X1),X2)
    active#(len(X)) -> active#(X) ->
    active#(fst(X1,X2)) -> active#(X1)
    active#(len(X)) -> active#(X) ->
    active#(cons(X1,X2)) -> cons#(active(X1),X2)
    active#(len(X)) -> active#(X) ->
    active#(cons(X1,X2)) -> active#(X1)
    active#(len(X)) -> active#(X) ->
    active#(len(cons(X,Z))) -> s#(len(Z))
    active#(len(X)) -> active#(X) ->
    active#(len(cons(X,Z))) -> len#(Z)
    active#(len(X)) -> active#(X) ->
    active#(add(s(X),Y)) -> s#(add(X,Y))
    active#(len(X)) -> active#(X) -> active#(add(s(X),Y)) -> add#(X,Y)
    active#(len(X)) -> active#(X) ->
    active#(from(X)) -> cons#(X,from(s(X)))
    active#(len(X)) -> active#(X) -> active#(from(X)) -> from#(s(X))
    active#(len(X)) -> active#(X) -> active#(from(X)) -> s#(X)
    active#(len(X)) -> active#(X) ->
    active#(fst(s(X),cons(Y,Z))) -> cons#(Y,fst(X,Z))
    active#(len(X)) -> active#(X) ->
    active#(fst(s(X),cons(Y,Z))) -> fst#(X,Z)
    active#(add(s(X),Y)) -> add#(X,Y) ->
    add#(ok(X1),ok(X2)) -> add#(X1,X2)
    active#(add(s(X),Y)) -> add#(X,Y) ->
    add#(X1,mark(X2)) -> add#(X1,X2)
    active#(add(s(X),Y)) -> add#(X,Y) ->
    add#(mark(X1),X2) -> add#(X1,X2)
    active#(add(s(X),Y)) -> s#(add(X,Y)) ->
    s#(ok(X)) -> s#(X)
    active#(add(X1,X2)) -> add#(active(X1),X2) ->
    add#(ok(X1),ok(X2)) -> add#(X1,X2)
    active#(add(X1,X2)) -> add#(active(X1),X2) ->
    add#(X1,mark(X2)) -> add#(X1,X2)
    active#(add(X1,X2)) -> add#(active(X1),X2) ->
    add#(mark(X1),X2) -> add#(X1,X2)
    active#(add(X1,X2)) -> add#(X1,active(X2)) ->
    add#(ok(X1),ok(X2)) -> add#(X1,X2)
    active#(add(X1,X2)) -> add#(X1,active(X2)) ->
    add#(X1,mark(X2)) -> add#(X1,X2)
    active#(add(X1,X2)) -> add#(X1,active(X2)) ->
    add#(mark(X1),X2) -> add#(X1,X2)
    active#(add(X1,X2)) -> active#(X2) ->
    active#(len(X)) -> len#(active(X))
    active#(add(X1,X2)) -> active#(X2) ->
    active#(len(X)) -> active#(X)
    active#(add(X1,X2)) -> active#(X2) ->
    active#(add(X1,X2)) -> add#(X1,active(X2))
    active#(add(X1,X2)) -> active#(X2) ->
    active#(add(X1,X2)) -> active#(X2)
    active#(add(X1,X2)) -> active#(X2) ->
    active#(add(X1,X2)) -> add#(active(X1),X2)
    active#(add(X1,X2)) -> active#(X2) ->
    active#(add(X1,X2)) -> active#(X1)
    active#(add(X1,X2)) -> active#(X2) ->
    active#(from(X)) -> from#(active(X))
    active#(add(X1,X2)) -> active#(X2) ->
    active#(from(X)) -> active#(X)
    active#(add(X1,X2)) -> active#(X2) ->
    active#(fst(X1,X2)) -> fst#(X1,active(X2))
    active#(add(X1,X2)) -> active#(X2) ->
    active#(fst(X1,X2)) -> active#(X2)
    active#(add(X1,X2)) -> active#(X2) ->
    active#(fst(X1,X2)) -> fst#(active(X1),X2)
    active#(add(X1,X2)) -> active#(X2) ->
    active#(fst(X1,X2)) -> active#(X1)
    active#(add(X1,X2)) -> active#(X2) ->
    active#(cons(X1,X2)) -> cons#(active(X1),X2)
    active#(add(X1,X2)) -> active#(X2) ->
    active#(cons(X1,X2)) -> active#(X1)
    active#(add(X1,X2)) -> active#(X2) ->
    active#(len(cons(X,Z))) -> s#(len(Z))
    active#(add(X1,X2)) -> active#(X2) ->
    active#(len(cons(X,Z))) -> len#(Z)
    active#(add(X1,X2)) -> active#(X2) ->
    active#(add(s(X),Y)) -> s#(add(X,Y))
    active#(add(X1,X2)) -> active#(X2) ->
    active#(add(s(X),Y)) -> add#(X,Y)
    active#(add(X1,X2)) -> active#(X2) ->
    active#(from(X)) -> cons#(X,from(s(X)))
    active#(add(X1,X2)) -> active#(X2) ->
    active#(from(X)) -> from#(s(X))
    active#(add(X1,X2)) -> active#(X2) ->
    active#(from(X)) -> s#(X)
    active#(add(X1,X2)) -> active#(X2) ->
    active#(fst(s(X),cons(Y,Z))) -> cons#(Y,fst(X,Z))
    active#(add(X1,X2)) -> active#(X2) ->
    active#(fst(s(X),cons(Y,Z))) -> fst#(X,Z)
    active#(add(X1,X2)) -> active#(X1) ->
    active#(len(X)) -> len#(active(X))
    active#(add(X1,X2)) -> active#(X1) ->
    active#(len(X)) -> active#(X)
    active#(add(X1,X2)) -> active#(X1) ->
    active#(add(X1,X2)) -> add#(X1,active(X2))
    active#(add(X1,X2)) -> active#(X1) ->
    active#(add(X1,X2)) -> active#(X2)
    active#(add(X1,X2)) -> active#(X1) ->
    active#(add(X1,X2)) -> add#(active(X1),X2)
    active#(add(X1,X2)) -> active#(X1) ->
    active#(add(X1,X2)) -> active#(X1)
    active#(add(X1,X2)) -> active#(X1) ->
    active#(from(X)) -> from#(active(X))
    active#(add(X1,X2)) -> active#(X1) ->
    active#(from(X)) -> active#(X)
    active#(add(X1,X2)) -> active#(X1) ->
    active#(fst(X1,X2)) -> fst#(X1,active(X2))
    active#(add(X1,X2)) -> active#(X1) ->
    active#(fst(X1,X2)) -> active#(X2)
    active#(add(X1,X2)) -> active#(X1) ->
    active#(fst(X1,X2)) -> fst#(active(X1),X2)
    active#(add(X1,X2)) -> active#(X1) ->
    active#(fst(X1,X2)) -> active#(X1)
    active#(add(X1,X2)) -> active#(X1) ->
    active#(cons(X1,X2)) -> cons#(active(X1),X2)
    active#(add(X1,X2)) -> active#(X1) ->
    active#(cons(X1,X2)) -> active#(X1)
    active#(add(X1,X2)) -> active#(X1) ->
    active#(len(cons(X,Z))) -> s#(len(Z))
    active#(add(X1,X2)) -> active#(X1) ->
    active#(len(cons(X,Z))) -> len#(Z)
    active#(add(X1,X2)) -> active#(X1) ->
    active#(add(s(X),Y)) -> s#(add(X,Y))
    active#(add(X1,X2)) -> active#(X1) ->
    active#(add(s(X),Y)) -> add#(X,Y)
    active#(add(X1,X2)) -> active#(X1) ->
    active#(from(X)) -> cons#(X,from(s(X)))
    active#(add(X1,X2)) -> active#(X1) ->
    active#(from(X)) -> from#(s(X))
    active#(add(X1,X2)) -> active#(X1) ->
    active#(from(X)) -> s#(X)
    active#(add(X1,X2)) -> active#(X1) ->
    active#(fst(s(X),cons(Y,Z))) -> cons#(Y,fst(X,Z))
    active#(add(X1,X2)) -> active#(X1) ->
    active#(fst(s(X),cons(Y,Z))) -> fst#(X,Z)
    active#(from(X)) -> from#(s(X)) -> from#(ok(X)) -> from#(X)
    active#(from(X)) -> from#(s(X)) ->
    from#(mark(X)) -> from#(X)
    active#(from(X)) -> from#(active(X)) ->
    from#(ok(X)) -> from#(X)
    active#(from(X)) -> from#(active(X)) -> from#(mark(X)) -> from#(X)
    active#(from(X)) -> s#(X) -> s#(ok(X)) -> s#(X)
    active#(from(X)) -> cons#(X,from(s(X))) ->
    cons#(ok(X1),ok(X2)) -> cons#(X1,X2)
    active#(from(X)) -> cons#(X,from(s(X))) ->
    cons#(mark(X1),X2) -> cons#(X1,X2)
    active#(from(X)) -> active#(X) ->
    active#(len(X)) -> len#(active(X))
    active#(from(X)) -> active#(X) -> active#(len(X)) -> active#(X)
    active#(from(X)) -> active#(X) ->
    active#(add(X1,X2)) -> add#(X1,active(X2))
    active#(from(X)) -> active#(X) ->
    active#(add(X1,X2)) -> active#(X2)
    active#(from(X)) -> active#(X) ->
    active#(add(X1,X2)) -> add#(active(X1),X2)
    active#(from(X)) -> active#(X) ->
    active#(add(X1,X2)) -> active#(X1)
    active#(from(X)) -> active#(X) ->
    active#(from(X)) -> from#(active(X))
    active#(from(X)) -> active#(X) -> active#(from(X)) -> active#(X)
    active#(from(X)) -> active#(X) ->
    active#(fst(X1,X2)) -> fst#(X1,active(X2))
    active#(from(X)) -> active#(X) ->
    active#(fst(X1,X2)) -> active#(X2)
    active#(from(X)) -> active#(X) ->
    active#(fst(X1,X2)) -> fst#(active(X1),X2)
    active#(from(X)) -> active#(X) ->
    active#(fst(X1,X2)) -> active#(X1)
    active#(from(X)) -> active#(X) ->
    active#(cons(X1,X2)) -> cons#(active(X1),X2)
    active#(from(X)) -> active#(X) ->
    active#(cons(X1,X2)) -> active#(X1)
    active#(from(X)) -> active#(X) ->
    active#(len(cons(X,Z))) -> s#(len(Z))
    active#(from(X)) -> active#(X) ->
    active#(len(cons(X,Z))) -> len#(Z)
    active#(from(X)) -> active#(X) ->
    active#(add(s(X),Y)) -> s#(add(X,Y))
    active#(from(X)) -> active#(X) ->
    active#(add(s(X),Y)) -> add#(X,Y)
    active#(from(X)) -> active#(X) ->
    active#(from(X)) -> cons#(X,from(s(X)))
    active#(from(X)) -> active#(X) -> active#(from(X)) -> from#(s(X))
    active#(from(X)) -> active#(X) -> active#(from(X)) -> s#(X)
    active#(from(X)) -> active#(X) ->
    active#(fst(s(X),cons(Y,Z))) -> cons#(Y,fst(X,Z))
    active#(from(X)) -> active#(X) ->
    active#(fst(s(X),cons(Y,Z))) -> fst#(X,Z)
    active#(cons(X1,X2)) -> cons#(active(X1),X2) ->
    cons#(ok(X1),ok(X2)) -> cons#(X1,X2)
    active#(cons(X1,X2)) -> cons#(active(X1),X2) ->
    cons#(mark(X1),X2) -> cons#(X1,X2)
    active#(cons(X1,X2)) -> active#(X1) ->
    active#(len(X)) -> len#(active(X))
    active#(cons(X1,X2)) -> active#(X1) ->
    active#(len(X)) -> active#(X)
    active#(cons(X1,X2)) -> active#(X1) ->
    active#(add(X1,X2)) -> add#(X1,active(X2))
    active#(cons(X1,X2)) -> active#(X1) ->
    active#(add(X1,X2)) -> active#(X2)
    active#(cons(X1,X2)) -> active#(X1) ->
    active#(add(X1,X2)) -> add#(active(X1),X2)
    active#(cons(X1,X2)) -> active#(X1) ->
    active#(add(X1,X2)) -> active#(X1)
    active#(cons(X1,X2)) -> active#(X1) ->
    active#(from(X)) -> from#(active(X))
    active#(cons(X1,X2)) -> active#(X1) ->
    active#(from(X)) -> active#(X)
    active#(cons(X1,X2)) -> active#(X1) ->
    active#(fst(X1,X2)) -> fst#(X1,active(X2))
    active#(cons(X1,X2)) -> active#(X1) ->
    active#(fst(X1,X2)) -> active#(X2)
    active#(cons(X1,X2)) -> active#(X1) ->
    active#(fst(X1,X2)) -> fst#(active(X1),X2)
    active#(cons(X1,X2)) -> active#(X1) ->
    active#(fst(X1,X2)) -> active#(X1)
    active#(cons(X1,X2)) -> active#(X1) ->
    active#(cons(X1,X2)) -> cons#(active(X1),X2)
    active#(cons(X1,X2)) -> active#(X1) ->
    active#(cons(X1,X2)) -> active#(X1)
    active#(cons(X1,X2)) -> active#(X1) ->
    active#(len(cons(X,Z))) -> s#(len(Z))
    active#(cons(X1,X2)) -> active#(X1) ->
    active#(len(cons(X,Z))) -> len#(Z)
    active#(cons(X1,X2)) -> active#(X1) ->
    active#(add(s(X),Y)) -> s#(add(X,Y))
    active#(cons(X1,X2)) -> active#(X1) ->
    active#(add(s(X),Y)) -> add#(X,Y)
    active#(cons(X1,X2)) -> active#(X1) ->
    active#(from(X)) -> cons#(X,from(s(X)))
    active#(cons(X1,X2)) -> active#(X1) ->
    active#(from(X)) -> from#(s(X))
    active#(cons(X1,X2)) -> active#(X1) ->
    active#(from(X)) -> s#(X)
    active#(cons(X1,X2)) -> active#(X1) ->
    active#(fst(s(X),cons(Y,Z))) -> cons#(Y,fst(X,Z))
    active#(cons(X1,X2)) -> active#(X1) ->
    active#(fst(s(X),cons(Y,Z))) -> fst#(X,Z)
    active#(fst(s(X),cons(Y,Z))) -> cons#(Y,fst(X,Z)) ->
    cons#(ok(X1),ok(X2)) -> cons#(X1,X2)
    active#(fst(s(X),cons(Y,Z))) -> cons#(Y,fst(X,Z)) ->
    cons#(mark(X1),X2) -> cons#(X1,X2)
    active#(fst(s(X),cons(Y,Z))) -> fst#(X,Z) ->
    fst#(ok(X1),ok(X2)) -> fst#(X1,X2)
    active#(fst(s(X),cons(Y,Z))) -> fst#(X,Z) ->
    fst#(X1,mark(X2)) -> fst#(X1,X2)
    active#(fst(s(X),cons(Y,Z))) -> fst#(X,Z) ->
    fst#(mark(X1),X2) -> fst#(X1,X2)
    active#(fst(X1,X2)) -> fst#(active(X1),X2) ->
    fst#(ok(X1),ok(X2)) -> fst#(X1,X2)
    active#(fst(X1,X2)) -> fst#(active(X1),X2) ->
    fst#(X1,mark(X2)) -> fst#(X1,X2)
    active#(fst(X1,X2)) -> fst#(active(X1),X2) ->
    fst#(mark(X1),X2) -> fst#(X1,X2)
    active#(fst(X1,X2)) -> fst#(X1,active(X2)) ->
    fst#(ok(X1),ok(X2)) -> fst#(X1,X2)
    active#(fst(X1,X2)) -> fst#(X1,active(X2)) ->
    fst#(X1,mark(X2)) -> fst#(X1,X2)
    active#(fst(X1,X2)) -> fst#(X1,active(X2)) ->
    fst#(mark(X1),X2) -> fst#(X1,X2)
    active#(fst(X1,X2)) -> active#(X2) ->
    active#(len(X)) -> len#(active(X))
    active#(fst(X1,X2)) -> active#(X2) ->
    active#(len(X)) -> active#(X)
    active#(fst(X1,X2)) -> active#(X2) ->
    active#(add(X1,X2)) -> add#(X1,active(X2))
    active#(fst(X1,X2)) -> active#(X2) ->
    active#(add(X1,X2)) -> active#(X2)
    active#(fst(X1,X2)) -> active#(X2) ->
    active#(add(X1,X2)) -> add#(active(X1),X2)
    active#(fst(X1,X2)) -> active#(X2) ->
    active#(add(X1,X2)) -> active#(X1)
    active#(fst(X1,X2)) -> active#(X2) ->
    active#(from(X)) -> from#(active(X))
    active#(fst(X1,X2)) -> active#(X2) ->
    active#(from(X)) -> active#(X)
    active#(fst(X1,X2)) -> active#(X2) ->
    active#(fst(X1,X2)) -> fst#(X1,active(X2))
    active#(fst(X1,X2)) -> active#(X2) ->
    active#(fst(X1,X2)) -> active#(X2)
    active#(fst(X1,X2)) -> active#(X2) ->
    active#(fst(X1,X2)) -> fst#(active(X1),X2)
    active#(fst(X1,X2)) -> active#(X2) ->
    active#(fst(X1,X2)) -> active#(X1)
    active#(fst(X1,X2)) -> active#(X2) ->
    active#(cons(X1,X2)) -> cons#(active(X1),X2)
    active#(fst(X1,X2)) -> active#(X2) ->
    active#(cons(X1,X2)) -> active#(X1)
    active#(fst(X1,X2)) -> active#(X2) ->
    active#(len(cons(X,Z))) -> s#(len(Z))
    active#(fst(X1,X2)) -> active#(X2) ->
    active#(len(cons(X,Z))) -> len#(Z)
    active#(fst(X1,X2)) -> active#(X2) ->
    active#(add(s(X),Y)) -> s#(add(X,Y))
    active#(fst(X1,X2)) -> active#(X2) ->
    active#(add(s(X),Y)) -> add#(X,Y)
    active#(fst(X1,X2)) -> active#(X2) ->
    active#(from(X)) -> cons#(X,from(s(X)))
    active#(fst(X1,X2)) -> active#(X2) ->
    active#(from(X)) -> from#(s(X))
    active#(fst(X1,X2)) -> active#(X2) ->
    active#(from(X)) -> s#(X)
    active#(fst(X1,X2)) -> active#(X2) ->
    active#(fst(s(X),cons(Y,Z))) -> cons#(Y,fst(X,Z))
    active#(fst(X1,X2)) -> active#(X2) ->
    active#(fst(s(X),cons(Y,Z))) -> fst#(X,Z)
    active#(fst(X1,X2)) -> active#(X1) ->
    active#(len(X)) -> len#(active(X))
    active#(fst(X1,X2)) -> active#(X1) ->
    active#(len(X)) -> active#(X)
    active#(fst(X1,X2)) -> active#(X1) ->
    active#(add(X1,X2)) -> add#(X1,active(X2))
    active#(fst(X1,X2)) -> active#(X1) ->
    active#(add(X1,X2)) -> active#(X2)
    active#(fst(X1,X2)) -> active#(X1) ->
    active#(add(X1,X2)) -> add#(active(X1),X2)
    active#(fst(X1,X2)) -> active#(X1) ->
    active#(add(X1,X2)) -> active#(X1)
    active#(fst(X1,X2)) -> active#(X1) ->
    active#(from(X)) -> from#(active(X))
    active#(fst(X1,X2)) -> active#(X1) ->
    active#(from(X)) -> active#(X)
    active#(fst(X1,X2)) -> active#(X1) ->
    active#(fst(X1,X2)) -> fst#(X1,active(X2))
    active#(fst(X1,X2)) -> active#(X1) ->
    active#(fst(X1,X2)) -> active#(X2)
    active#(fst(X1,X2)) -> active#(X1) ->
    active#(fst(X1,X2)) -> fst#(active(X1),X2)
    active#(fst(X1,X2)) -> active#(X1) ->
    active#(fst(X1,X2)) -> active#(X1)
    active#(fst(X1,X2)) -> active#(X1) ->
    active#(cons(X1,X2)) -> cons#(active(X1),X2)
    active#(fst(X1,X2)) -> active#(X1) ->
    active#(cons(X1,X2)) -> active#(X1)
    active#(fst(X1,X2)) -> active#(X1) ->
    active#(len(cons(X,Z))) -> s#(len(Z))
    active#(fst(X1,X2)) -> active#(X1) ->
    active#(len(cons(X,Z))) -> len#(Z)
    active#(fst(X1,X2)) -> active#(X1) ->
    active#(add(s(X),Y)) -> s#(add(X,Y))
    active#(fst(X1,X2)) -> active#(X1) ->
    active#(add(s(X),Y)) -> add#(X,Y)
    active#(fst(X1,X2)) -> active#(X1) ->
    active#(from(X)) -> cons#(X,from(s(X)))
    active#(fst(X1,X2)) -> active#(X1) ->
    active#(from(X)) -> from#(s(X))
    active#(fst(X1,X2)) -> active#(X1) ->
    active#(from(X)) -> s#(X)
    active#(fst(X1,X2)) -> active#(X1) ->
    active#(fst(s(X),cons(Y,Z))) -> cons#(Y,fst(X,Z))
    active#(fst(X1,X2)) -> active#(X1) -> active#(fst(s(X),cons(Y,Z))) -> fst#(X,Z)
   SCC Processor:
    #sccs: 9
    #rules: 31
    #arcs: 421/3025
    DPs:
     top#(ok(X)) -> top#(active(X))
     top#(mark(X)) -> top#(proper(X))
    TRS:
     active(fst(0(),Z)) -> mark(nil())
     active(fst(s(X),cons(Y,Z))) -> mark(cons(Y,fst(X,Z)))
     active(from(X)) -> mark(cons(X,from(s(X))))
     active(add(0(),X)) -> mark(X)
     active(add(s(X),Y)) -> mark(s(add(X,Y)))
     active(len(nil())) -> mark(0())
     active(len(cons(X,Z))) -> mark(s(len(Z)))
     active(cons(X1,X2)) -> cons(active(X1),X2)
     active(fst(X1,X2)) -> fst(active(X1),X2)
     active(fst(X1,X2)) -> fst(X1,active(X2))
     active(from(X)) -> from(active(X))
     active(add(X1,X2)) -> add(active(X1),X2)
     active(add(X1,X2)) -> add(X1,active(X2))
     active(len(X)) -> len(active(X))
     cons(mark(X1),X2) -> mark(cons(X1,X2))
     fst(mark(X1),X2) -> mark(fst(X1,X2))
     fst(X1,mark(X2)) -> mark(fst(X1,X2))
     from(mark(X)) -> mark(from(X))
     add(mark(X1),X2) -> mark(add(X1,X2))
     add(X1,mark(X2)) -> mark(add(X1,X2))
     len(mark(X)) -> mark(len(X))
     proper(0()) -> ok(0())
     proper(s(X)) -> s(proper(X))
     proper(nil()) -> ok(nil())
     proper(cons(X1,X2)) -> cons(proper(X1),proper(X2))
     proper(fst(X1,X2)) -> fst(proper(X1),proper(X2))
     proper(from(X)) -> from(proper(X))
     proper(add(X1,X2)) -> add(proper(X1),proper(X2))
     proper(len(X)) -> len(proper(X))
     s(ok(X)) -> ok(s(X))
     cons(ok(X1),ok(X2)) -> ok(cons(X1,X2))
     fst(ok(X1),ok(X2)) -> ok(fst(X1,X2))
     from(ok(X)) -> ok(from(X))
     add(ok(X1),ok(X2)) -> ok(add(X1,X2))
     len(ok(X)) -> ok(len(X))
     top(mark(X)) -> top(proper(X))
     top(ok(X)) -> top(active(X))
    Matrix Interpretation Processor:
     dimension: 1
     interpretation:
      [top#](x0) = x0,
      
      [top](x0) = 0,
      
      [ok](x0) = x0,
      
      [proper](x0) = x0,
      
      [len](x0) = x0 + 1,
      
      [add](x0, x1) = x0 + x1 + 1,
      
      [from](x0) = x0 + 1,
      
      [cons](x0, x1) = x0,
      
      [s](x0) = 0,
      
      [mark](x0) = x0 + 1,
      
      [nil] = 0,
      
      [active](x0) = x0,
      
      [fst](x0, x1) = x0 + x1 + 1,
      
      [0] = 0
     orientation:
      top#(ok(X)) = X >= X = top#(active(X))
      
      top#(mark(X)) = X + 1 >= X = top#(proper(X))
      
      active(fst(0(),Z)) = Z + 1 >= 1 = mark(nil())
      
      active(fst(s(X),cons(Y,Z))) = Y + 1 >= Y + 1 = mark(cons(Y,fst(X,Z)))
      
      active(from(X)) = X + 1 >= X + 1 = mark(cons(X,from(s(X))))
      
      active(add(0(),X)) = X + 1 >= X + 1 = mark(X)
      
      active(add(s(X),Y)) = Y + 1 >= 1 = mark(s(add(X,Y)))
      
      active(len(nil())) = 1 >= 1 = mark(0())
      
      active(len(cons(X,Z))) = X + 1 >= 1 = mark(s(len(Z)))
      
      active(cons(X1,X2)) = X1 >= X1 = cons(active(X1),X2)
      
      active(fst(X1,X2)) = X1 + X2 + 1 >= X1 + X2 + 1 = fst(active(X1),X2)
      
      active(fst(X1,X2)) = X1 + X2 + 1 >= X1 + X2 + 1 = fst(X1,active(X2))
      
      active(from(X)) = X + 1 >= X + 1 = from(active(X))
      
      active(add(X1,X2)) = X1 + X2 + 1 >= X1 + X2 + 1 = add(active(X1),X2)
      
      active(add(X1,X2)) = X1 + X2 + 1 >= X1 + X2 + 1 = add(X1,active(X2))
      
      active(len(X)) = X + 1 >= X + 1 = len(active(X))
      
      cons(mark(X1),X2) = X1 + 1 >= X1 + 1 = mark(cons(X1,X2))
      
      fst(mark(X1),X2) = X1 + X2 + 2 >= X1 + X2 + 2 = mark(fst(X1,X2))
      
      fst(X1,mark(X2)) = X1 + X2 + 2 >= X1 + X2 + 2 = mark(fst(X1,X2))
      
      from(mark(X)) = X + 2 >= X + 2 = mark(from(X))
      
      add(mark(X1),X2) = X1 + X2 + 2 >= X1 + X2 + 2 = mark(add(X1,X2))
      
      add(X1,mark(X2)) = X1 + X2 + 2 >= X1 + X2 + 2 = mark(add(X1,X2))
      
      len(mark(X)) = X + 2 >= X + 2 = mark(len(X))
      
      proper(0()) = 0 >= 0 = ok(0())
      
      proper(s(X)) = 0 >= 0 = s(proper(X))
      
      proper(nil()) = 0 >= 0 = ok(nil())
      
      proper(cons(X1,X2)) = X1 >= X1 = cons(proper(X1),proper(X2))
      
      proper(fst(X1,X2)) = X1 + X2 + 1 >= X1 + X2 + 1 = fst(proper(X1),proper(X2))
      
      proper(from(X)) = X + 1 >= X + 1 = from(proper(X))
      
      proper(add(X1,X2)) = X1 + X2 + 1 >= X1 + X2 + 1 = add(proper(X1),proper(X2))
      
      proper(len(X)) = X + 1 >= X + 1 = len(proper(X))
      
      s(ok(X)) = 0 >= 0 = ok(s(X))
      
      cons(ok(X1),ok(X2)) = X1 >= X1 = ok(cons(X1,X2))
      
      fst(ok(X1),ok(X2)) = X1 + X2 + 1 >= X1 + X2 + 1 = ok(fst(X1,X2))
      
      from(ok(X)) = X + 1 >= X + 1 = ok(from(X))
      
      add(ok(X1),ok(X2)) = X1 + X2 + 1 >= X1 + X2 + 1 = ok(add(X1,X2))
      
      len(ok(X)) = X + 1 >= X + 1 = ok(len(X))
      
      top(mark(X)) = 0 >= 0 = top(proper(X))
      
      top(ok(X)) = 0 >= 0 = top(active(X))
     problem:
      DPs:
       top#(ok(X)) -> top#(active(X))
      TRS:
       active(fst(0(),Z)) -> mark(nil())
       active(fst(s(X),cons(Y,Z))) -> mark(cons(Y,fst(X,Z)))
       active(from(X)) -> mark(cons(X,from(s(X))))
       active(add(0(),X)) -> mark(X)
       active(add(s(X),Y)) -> mark(s(add(X,Y)))
       active(len(nil())) -> mark(0())
       active(len(cons(X,Z))) -> mark(s(len(Z)))
       active(cons(X1,X2)) -> cons(active(X1),X2)
       active(fst(X1,X2)) -> fst(active(X1),X2)
       active(fst(X1,X2)) -> fst(X1,active(X2))
       active(from(X)) -> from(active(X))
       active(add(X1,X2)) -> add(active(X1),X2)
       active(add(X1,X2)) -> add(X1,active(X2))
       active(len(X)) -> len(active(X))
       cons(mark(X1),X2) -> mark(cons(X1,X2))
       fst(mark(X1),X2) -> mark(fst(X1,X2))
       fst(X1,mark(X2)) -> mark(fst(X1,X2))
       from(mark(X)) -> mark(from(X))
       add(mark(X1),X2) -> mark(add(X1,X2))
       add(X1,mark(X2)) -> mark(add(X1,X2))
       len(mark(X)) -> mark(len(X))
       proper(0()) -> ok(0())
       proper(s(X)) -> s(proper(X))
       proper(nil()) -> ok(nil())
       proper(cons(X1,X2)) -> cons(proper(X1),proper(X2))
       proper(fst(X1,X2)) -> fst(proper(X1),proper(X2))
       proper(from(X)) -> from(proper(X))
       proper(add(X1,X2)) -> add(proper(X1),proper(X2))
       proper(len(X)) -> len(proper(X))
       s(ok(X)) -> ok(s(X))
       cons(ok(X1),ok(X2)) -> ok(cons(X1,X2))
       fst(ok(X1),ok(X2)) -> ok(fst(X1,X2))
       from(ok(X)) -> ok(from(X))
       add(ok(X1),ok(X2)) -> ok(add(X1,X2))
       len(ok(X)) -> ok(len(X))
       top(mark(X)) -> top(proper(X))
       top(ok(X)) -> top(active(X))
     Matrix Interpretation Processor:
      dimension: 1
      interpretation:
       [top#](x0) = x0,
       
       [top](x0) = 0,
       
       [ok](x0) = x0 + 1,
       
       [proper](x0) = x0 + 1,
       
       [len](x0) = x0,
       
       [add](x0, x1) = x1 + 1,
       
       [from](x0) = x0,
       
       [cons](x0, x1) = x1,
       
       [s](x0) = x0,
       
       [mark](x0) = x0,
       
       [nil] = 1,
       
       [active](x0) = x0,
       
       [fst](x0, x1) = x0,
       
       [0] = 1
      orientation:
       top#(ok(X)) = X + 1 >= X = top#(active(X))
       
       active(fst(0(),Z)) = 1 >= 1 = mark(nil())
       
       active(fst(s(X),cons(Y,Z))) = X >= X = mark(cons(Y,fst(X,Z)))
       
       active(from(X)) = X >= X = mark(cons(X,from(s(X))))
       
       active(add(0(),X)) = X + 1 >= X = mark(X)
       
       active(add(s(X),Y)) = Y + 1 >= Y + 1 = mark(s(add(X,Y)))
       
       active(len(nil())) = 1 >= 1 = mark(0())
       
       active(len(cons(X,Z))) = Z >= Z = mark(s(len(Z)))
       
       active(cons(X1,X2)) = X2 >= X2 = cons(active(X1),X2)
       
       active(fst(X1,X2)) = X1 >= X1 = fst(active(X1),X2)
       
       active(fst(X1,X2)) = X1 >= X1 = fst(X1,active(X2))
       
       active(from(X)) = X >= X = from(active(X))
       
       active(add(X1,X2)) = X2 + 1 >= X2 + 1 = add(active(X1),X2)
       
       active(add(X1,X2)) = X2 + 1 >= X2 + 1 = add(X1,active(X2))
       
       active(len(X)) = X >= X = len(active(X))
       
       cons(mark(X1),X2) = X2 >= X2 = mark(cons(X1,X2))
       
       fst(mark(X1),X2) = X1 >= X1 = mark(fst(X1,X2))
       
       fst(X1,mark(X2)) = X1 >= X1 = mark(fst(X1,X2))
       
       from(mark(X)) = X >= X = mark(from(X))
       
       add(mark(X1),X2) = X2 + 1 >= X2 + 1 = mark(add(X1,X2))
       
       add(X1,mark(X2)) = X2 + 1 >= X2 + 1 = mark(add(X1,X2))
       
       len(mark(X)) = X >= X = mark(len(X))
       
       proper(0()) = 2 >= 2 = ok(0())
       
       proper(s(X)) = X + 1 >= X + 1 = s(proper(X))
       
       proper(nil()) = 2 >= 2 = ok(nil())
       
       proper(cons(X1,X2)) = X2 + 1 >= X2 + 1 = cons(proper(X1),proper(X2))
       
       proper(fst(X1,X2)) = X1 + 1 >= X1 + 1 = fst(proper(X1),proper(X2))
       
       proper(from(X)) = X + 1 >= X + 1 = from(proper(X))
       
       proper(add(X1,X2)) = X2 + 2 >= X2 + 2 = add(proper(X1),proper(X2))
       
       proper(len(X)) = X + 1 >= X + 1 = len(proper(X))
       
       s(ok(X)) = X + 1 >= X + 1 = ok(s(X))
       
       cons(ok(X1),ok(X2)) = X2 + 1 >= X2 + 1 = ok(cons(X1,X2))
       
       fst(ok(X1),ok(X2)) = X1 + 1 >= X1 + 1 = ok(fst(X1,X2))
       
       from(ok(X)) = X + 1 >= X + 1 = ok(from(X))
       
       add(ok(X1),ok(X2)) = X2 + 2 >= X2 + 2 = ok(add(X1,X2))
       
       len(ok(X)) = X + 1 >= X + 1 = ok(len(X))
       
       top(mark(X)) = 0 >= 0 = top(proper(X))
       
       top(ok(X)) = 0 >= 0 = top(active(X))
      problem:
       DPs:
        
       TRS:
        active(fst(0(),Z)) -> mark(nil())
        active(fst(s(X),cons(Y,Z))) -> mark(cons(Y,fst(X,Z)))
        active(from(X)) -> mark(cons(X,from(s(X))))
        active(add(0(),X)) -> mark(X)
        active(add(s(X),Y)) -> mark(s(add(X,Y)))
        active(len(nil())) -> mark(0())
        active(len(cons(X,Z))) -> mark(s(len(Z)))
        active(cons(X1,X2)) -> cons(active(X1),X2)
        active(fst(X1,X2)) -> fst(active(X1),X2)
        active(fst(X1,X2)) -> fst(X1,active(X2))
        active(from(X)) -> from(active(X))
        active(add(X1,X2)) -> add(active(X1),X2)
        active(add(X1,X2)) -> add(X1,active(X2))
        active(len(X)) -> len(active(X))
        cons(mark(X1),X2) -> mark(cons(X1,X2))
        fst(mark(X1),X2) -> mark(fst(X1,X2))
        fst(X1,mark(X2)) -> mark(fst(X1,X2))
        from(mark(X)) -> mark(from(X))
        add(mark(X1),X2) -> mark(add(X1,X2))
        add(X1,mark(X2)) -> mark(add(X1,X2))
        len(mark(X)) -> mark(len(X))
        proper(0()) -> ok(0())
        proper(s(X)) -> s(proper(X))
        proper(nil()) -> ok(nil())
        proper(cons(X1,X2)) -> cons(proper(X1),proper(X2))
        proper(fst(X1,X2)) -> fst(proper(X1),proper(X2))
        proper(from(X)) -> from(proper(X))
        proper(add(X1,X2)) -> add(proper(X1),proper(X2))
        proper(len(X)) -> len(proper(X))
        s(ok(X)) -> ok(s(X))
        cons(ok(X1),ok(X2)) -> ok(cons(X1,X2))
        fst(ok(X1),ok(X2)) -> ok(fst(X1,X2))
        from(ok(X)) -> ok(from(X))
        add(ok(X1),ok(X2)) -> ok(add(X1,X2))
        len(ok(X)) -> ok(len(X))
        top(mark(X)) -> top(proper(X))
        top(ok(X)) -> top(active(X))
      Qed
    
    DPs:
     active#(cons(X1,X2)) -> active#(X1)
     active#(fst(X1,X2)) -> active#(X1)
     active#(fst(X1,X2)) -> active#(X2)
     active#(from(X)) -> active#(X)
     active#(add(X1,X2)) -> active#(X1)
     active#(add(X1,X2)) -> active#(X2)
     active#(len(X)) -> active#(X)
    TRS:
     active(fst(0(),Z)) -> mark(nil())
     active(fst(s(X),cons(Y,Z))) -> mark(cons(Y,fst(X,Z)))
     active(from(X)) -> mark(cons(X,from(s(X))))
     active(add(0(),X)) -> mark(X)
     active(add(s(X),Y)) -> mark(s(add(X,Y)))
     active(len(nil())) -> mark(0())
     active(len(cons(X,Z))) -> mark(s(len(Z)))
     active(cons(X1,X2)) -> cons(active(X1),X2)
     active(fst(X1,X2)) -> fst(active(X1),X2)
     active(fst(X1,X2)) -> fst(X1,active(X2))
     active(from(X)) -> from(active(X))
     active(add(X1,X2)) -> add(active(X1),X2)
     active(add(X1,X2)) -> add(X1,active(X2))
     active(len(X)) -> len(active(X))
     cons(mark(X1),X2) -> mark(cons(X1,X2))
     fst(mark(X1),X2) -> mark(fst(X1,X2))
     fst(X1,mark(X2)) -> mark(fst(X1,X2))
     from(mark(X)) -> mark(from(X))
     add(mark(X1),X2) -> mark(add(X1,X2))
     add(X1,mark(X2)) -> mark(add(X1,X2))
     len(mark(X)) -> mark(len(X))
     proper(0()) -> ok(0())
     proper(s(X)) -> s(proper(X))
     proper(nil()) -> ok(nil())
     proper(cons(X1,X2)) -> cons(proper(X1),proper(X2))
     proper(fst(X1,X2)) -> fst(proper(X1),proper(X2))
     proper(from(X)) -> from(proper(X))
     proper(add(X1,X2)) -> add(proper(X1),proper(X2))
     proper(len(X)) -> len(proper(X))
     s(ok(X)) -> ok(s(X))
     cons(ok(X1),ok(X2)) -> ok(cons(X1,X2))
     fst(ok(X1),ok(X2)) -> ok(fst(X1,X2))
     from(ok(X)) -> ok(from(X))
     add(ok(X1),ok(X2)) -> ok(add(X1,X2))
     len(ok(X)) -> ok(len(X))
     top(mark(X)) -> top(proper(X))
     top(ok(X)) -> top(active(X))
    Matrix Interpretation Processor:
     dimension: 1
     interpretation:
      [active#](x0) = x0 + 1,
      
      [top](x0) = 1,
      
      [ok](x0) = x0,
      
      [proper](x0) = x0,
      
      [len](x0) = x0 + 1,
      
      [add](x0, x1) = x0 + x1,
      
      [from](x0) = x0 + 1,
      
      [cons](x0, x1) = x0 + 1,
      
      [s](x0) = 1,
      
      [mark](x0) = 0,
      
      [nil] = 0,
      
      [active](x0) = x0,
      
      [fst](x0, x1) = x0 + x1 + 1,
      
      [0] = 0
     orientation:
      active#(cons(X1,X2)) = X1 + 2 >= X1 + 1 = active#(X1)
      
      active#(fst(X1,X2)) = X1 + X2 + 2 >= X1 + 1 = active#(X1)
      
      active#(fst(X1,X2)) = X1 + X2 + 2 >= X2 + 1 = active#(X2)
      
      active#(from(X)) = X + 2 >= X + 1 = active#(X)
      
      active#(add(X1,X2)) = X1 + X2 + 1 >= X1 + 1 = active#(X1)
      
      active#(add(X1,X2)) = X1 + X2 + 1 >= X2 + 1 = active#(X2)
      
      active#(len(X)) = X + 2 >= X + 1 = active#(X)
      
      active(fst(0(),Z)) = Z + 1 >= 0 = mark(nil())
      
      active(fst(s(X),cons(Y,Z))) = Y + 3 >= 0 = mark(cons(Y,fst(X,Z)))
      
      active(from(X)) = X + 1 >= 0 = mark(cons(X,from(s(X))))
      
      active(add(0(),X)) = X >= 0 = mark(X)
      
      active(add(s(X),Y)) = Y + 1 >= 0 = mark(s(add(X,Y)))
      
      active(len(nil())) = 1 >= 0 = mark(0())
      
      active(len(cons(X,Z))) = X + 2 >= 0 = mark(s(len(Z)))
      
      active(cons(X1,X2)) = X1 + 1 >= X1 + 1 = cons(active(X1),X2)
      
      active(fst(X1,X2)) = X1 + X2 + 1 >= X1 + X2 + 1 = fst(active(X1),X2)
      
      active(fst(X1,X2)) = X1 + X2 + 1 >= X1 + X2 + 1 = fst(X1,active(X2))
      
      active(from(X)) = X + 1 >= X + 1 = from(active(X))
      
      active(add(X1,X2)) = X1 + X2 >= X1 + X2 = add(active(X1),X2)
      
      active(add(X1,X2)) = X1 + X2 >= X1 + X2 = add(X1,active(X2))
      
      active(len(X)) = X + 1 >= X + 1 = len(active(X))
      
      cons(mark(X1),X2) = 1 >= 0 = mark(cons(X1,X2))
      
      fst(mark(X1),X2) = X2 + 1 >= 0 = mark(fst(X1,X2))
      
      fst(X1,mark(X2)) = X1 + 1 >= 0 = mark(fst(X1,X2))
      
      from(mark(X)) = 1 >= 0 = mark(from(X))
      
      add(mark(X1),X2) = X2 >= 0 = mark(add(X1,X2))
      
      add(X1,mark(X2)) = X1 >= 0 = mark(add(X1,X2))
      
      len(mark(X)) = 1 >= 0 = mark(len(X))
      
      proper(0()) = 0 >= 0 = ok(0())
      
      proper(s(X)) = 1 >= 1 = s(proper(X))
      
      proper(nil()) = 0 >= 0 = ok(nil())
      
      proper(cons(X1,X2)) = X1 + 1 >= X1 + 1 = cons(proper(X1),proper(X2))
      
      proper(fst(X1,X2)) = X1 + X2 + 1 >= X1 + X2 + 1 = fst(proper(X1),proper(X2))
      
      proper(from(X)) = X + 1 >= X + 1 = from(proper(X))
      
      proper(add(X1,X2)) = X1 + X2 >= X1 + X2 = add(proper(X1),proper(X2))
      
      proper(len(X)) = X + 1 >= X + 1 = len(proper(X))
      
      s(ok(X)) = 1 >= 1 = ok(s(X))
      
      cons(ok(X1),ok(X2)) = X1 + 1 >= X1 + 1 = ok(cons(X1,X2))
      
      fst(ok(X1),ok(X2)) = X1 + X2 + 1 >= X1 + X2 + 1 = ok(fst(X1,X2))
      
      from(ok(X)) = X + 1 >= X + 1 = ok(from(X))
      
      add(ok(X1),ok(X2)) = X1 + X2 >= X1 + X2 = ok(add(X1,X2))
      
      len(ok(X)) = X + 1 >= X + 1 = ok(len(X))
      
      top(mark(X)) = 1 >= 1 = top(proper(X))
      
      top(ok(X)) = 1 >= 1 = top(active(X))
     problem:
      DPs:
       active#(add(X1,X2)) -> active#(X1)
       active#(add(X1,X2)) -> active#(X2)
      TRS:
       active(fst(0(),Z)) -> mark(nil())
       active(fst(s(X),cons(Y,Z))) -> mark(cons(Y,fst(X,Z)))
       active(from(X)) -> mark(cons(X,from(s(X))))
       active(add(0(),X)) -> mark(X)
       active(add(s(X),Y)) -> mark(s(add(X,Y)))
       active(len(nil())) -> mark(0())
       active(len(cons(X,Z))) -> mark(s(len(Z)))
       active(cons(X1,X2)) -> cons(active(X1),X2)
       active(fst(X1,X2)) -> fst(active(X1),X2)
       active(fst(X1,X2)) -> fst(X1,active(X2))
       active(from(X)) -> from(active(X))
       active(add(X1,X2)) -> add(active(X1),X2)
       active(add(X1,X2)) -> add(X1,active(X2))
       active(len(X)) -> len(active(X))
       cons(mark(X1),X2) -> mark(cons(X1,X2))
       fst(mark(X1),X2) -> mark(fst(X1,X2))
       fst(X1,mark(X2)) -> mark(fst(X1,X2))
       from(mark(X)) -> mark(from(X))
       add(mark(X1),X2) -> mark(add(X1,X2))
       add(X1,mark(X2)) -> mark(add(X1,X2))
       len(mark(X)) -> mark(len(X))
       proper(0()) -> ok(0())
       proper(s(X)) -> s(proper(X))
       proper(nil()) -> ok(nil())
       proper(cons(X1,X2)) -> cons(proper(X1),proper(X2))
       proper(fst(X1,X2)) -> fst(proper(X1),proper(X2))
       proper(from(X)) -> from(proper(X))
       proper(add(X1,X2)) -> add(proper(X1),proper(X2))
       proper(len(X)) -> len(proper(X))
       s(ok(X)) -> ok(s(X))
       cons(ok(X1),ok(X2)) -> ok(cons(X1,X2))
       fst(ok(X1),ok(X2)) -> ok(fst(X1,X2))
       from(ok(X)) -> ok(from(X))
       add(ok(X1),ok(X2)) -> ok(add(X1,X2))
       len(ok(X)) -> ok(len(X))
       top(mark(X)) -> top(proper(X))
       top(ok(X)) -> top(active(X))
     Matrix Interpretation Processor:
      dimension: 1
      interpretation:
       [active#](x0) = x0 + 1,
       
       [top](x0) = 0,
       
       [ok](x0) = x0,
       
       [proper](x0) = x0,
       
       [len](x0) = 1,
       
       [add](x0, x1) = x0 + x1 + 1,
       
       [from](x0) = 1,
       
       [cons](x0, x1) = x0 + 1,
       
       [s](x0) = 0,
       
       [mark](x0) = 1,
       
       [nil] = 0,
       
       [active](x0) = x0,
       
       [fst](x0, x1) = x0 + 1,
       
       [0] = 0
      orientation:
       active#(add(X1,X2)) = X1 + X2 + 2 >= X1 + 1 = active#(X1)
       
       active#(add(X1,X2)) = X1 + X2 + 2 >= X2 + 1 = active#(X2)
       
       active(fst(0(),Z)) = 1 >= 1 = mark(nil())
       
       active(fst(s(X),cons(Y,Z))) = 1 >= 1 = mark(cons(Y,fst(X,Z)))
       
       active(from(X)) = 1 >= 1 = mark(cons(X,from(s(X))))
       
       active(add(0(),X)) = X + 1 >= 1 = mark(X)
       
       active(add(s(X),Y)) = Y + 1 >= 1 = mark(s(add(X,Y)))
       
       active(len(nil())) = 1 >= 1 = mark(0())
       
       active(len(cons(X,Z))) = 1 >= 1 = mark(s(len(Z)))
       
       active(cons(X1,X2)) = X1 + 1 >= X1 + 1 = cons(active(X1),X2)
       
       active(fst(X1,X2)) = X1 + 1 >= X1 + 1 = fst(active(X1),X2)
       
       active(fst(X1,X2)) = X1 + 1 >= X1 + 1 = fst(X1,active(X2))
       
       active(from(X)) = 1 >= 1 = from(active(X))
       
       active(add(X1,X2)) = X1 + X2 + 1 >= X1 + X2 + 1 = add(active(X1),X2)
       
       active(add(X1,X2)) = X1 + X2 + 1 >= X1 + X2 + 1 = add(X1,active(X2))
       
       active(len(X)) = 1 >= 1 = len(active(X))
       
       cons(mark(X1),X2) = 2 >= 1 = mark(cons(X1,X2))
       
       fst(mark(X1),X2) = 2 >= 1 = mark(fst(X1,X2))
       
       fst(X1,mark(X2)) = X1 + 1 >= 1 = mark(fst(X1,X2))
       
       from(mark(X)) = 1 >= 1 = mark(from(X))
       
       add(mark(X1),X2) = X2 + 2 >= 1 = mark(add(X1,X2))
       
       add(X1,mark(X2)) = X1 + 2 >= 1 = mark(add(X1,X2))
       
       len(mark(X)) = 1 >= 1 = mark(len(X))
       
       proper(0()) = 0 >= 0 = ok(0())
       
       proper(s(X)) = 0 >= 0 = s(proper(X))
       
       proper(nil()) = 0 >= 0 = ok(nil())
       
       proper(cons(X1,X2)) = X1 + 1 >= X1 + 1 = cons(proper(X1),proper(X2))
       
       proper(fst(X1,X2)) = X1 + 1 >= X1 + 1 = fst(proper(X1),proper(X2))
       
       proper(from(X)) = 1 >= 1 = from(proper(X))
       
       proper(add(X1,X2)) = X1 + X2 + 1 >= X1 + X2 + 1 = add(proper(X1),proper(X2))
       
       proper(len(X)) = 1 >= 1 = len(proper(X))
       
       s(ok(X)) = 0 >= 0 = ok(s(X))
       
       cons(ok(X1),ok(X2)) = X1 + 1 >= X1 + 1 = ok(cons(X1,X2))
       
       fst(ok(X1),ok(X2)) = X1 + 1 >= X1 + 1 = ok(fst(X1,X2))
       
       from(ok(X)) = 1 >= 1 = ok(from(X))
       
       add(ok(X1),ok(X2)) = X1 + X2 + 1 >= X1 + X2 + 1 = ok(add(X1,X2))
       
       len(ok(X)) = 1 >= 1 = ok(len(X))
       
       top(mark(X)) = 0 >= 0 = top(proper(X))
       
       top(ok(X)) = 0 >= 0 = top(active(X))
      problem:
       DPs:
        
       TRS:
        active(fst(0(),Z)) -> mark(nil())
        active(fst(s(X),cons(Y,Z))) -> mark(cons(Y,fst(X,Z)))
        active(from(X)) -> mark(cons(X,from(s(X))))
        active(add(0(),X)) -> mark(X)
        active(add(s(X),Y)) -> mark(s(add(X,Y)))
        active(len(nil())) -> mark(0())
        active(len(cons(X,Z))) -> mark(s(len(Z)))
        active(cons(X1,X2)) -> cons(active(X1),X2)
        active(fst(X1,X2)) -> fst(active(X1),X2)
        active(fst(X1,X2)) -> fst(X1,active(X2))
        active(from(X)) -> from(active(X))
        active(add(X1,X2)) -> add(active(X1),X2)
        active(add(X1,X2)) -> add(X1,active(X2))
        active(len(X)) -> len(active(X))
        cons(mark(X1),X2) -> mark(cons(X1,X2))
        fst(mark(X1),X2) -> mark(fst(X1,X2))
        fst(X1,mark(X2)) -> mark(fst(X1,X2))
        from(mark(X)) -> mark(from(X))
        add(mark(X1),X2) -> mark(add(X1,X2))
        add(X1,mark(X2)) -> mark(add(X1,X2))
        len(mark(X)) -> mark(len(X))
        proper(0()) -> ok(0())
        proper(s(X)) -> s(proper(X))
        proper(nil()) -> ok(nil())
        proper(cons(X1,X2)) -> cons(proper(X1),proper(X2))
        proper(fst(X1,X2)) -> fst(proper(X1),proper(X2))
        proper(from(X)) -> from(proper(X))
        proper(add(X1,X2)) -> add(proper(X1),proper(X2))
        proper(len(X)) -> len(proper(X))
        s(ok(X)) -> ok(s(X))
        cons(ok(X1),ok(X2)) -> ok(cons(X1,X2))
        fst(ok(X1),ok(X2)) -> ok(fst(X1,X2))
        from(ok(X)) -> ok(from(X))
        add(ok(X1),ok(X2)) -> ok(add(X1,X2))
        len(ok(X)) -> ok(len(X))
        top(mark(X)) -> top(proper(X))
        top(ok(X)) -> top(active(X))
      Qed
    
    DPs:
     proper#(s(X)) -> proper#(X)
     proper#(cons(X1,X2)) -> proper#(X2)
     proper#(cons(X1,X2)) -> proper#(X1)
     proper#(fst(X1,X2)) -> proper#(X2)
     proper#(fst(X1,X2)) -> proper#(X1)
     proper#(from(X)) -> proper#(X)
     proper#(add(X1,X2)) -> proper#(X2)
     proper#(add(X1,X2)) -> proper#(X1)
     proper#(len(X)) -> proper#(X)
    TRS:
     active(fst(0(),Z)) -> mark(nil())
     active(fst(s(X),cons(Y,Z))) -> mark(cons(Y,fst(X,Z)))
     active(from(X)) -> mark(cons(X,from(s(X))))
     active(add(0(),X)) -> mark(X)
     active(add(s(X),Y)) -> mark(s(add(X,Y)))
     active(len(nil())) -> mark(0())
     active(len(cons(X,Z))) -> mark(s(len(Z)))
     active(cons(X1,X2)) -> cons(active(X1),X2)
     active(fst(X1,X2)) -> fst(active(X1),X2)
     active(fst(X1,X2)) -> fst(X1,active(X2))
     active(from(X)) -> from(active(X))
     active(add(X1,X2)) -> add(active(X1),X2)
     active(add(X1,X2)) -> add(X1,active(X2))
     active(len(X)) -> len(active(X))
     cons(mark(X1),X2) -> mark(cons(X1,X2))
     fst(mark(X1),X2) -> mark(fst(X1,X2))
     fst(X1,mark(X2)) -> mark(fst(X1,X2))
     from(mark(X)) -> mark(from(X))
     add(mark(X1),X2) -> mark(add(X1,X2))
     add(X1,mark(X2)) -> mark(add(X1,X2))
     len(mark(X)) -> mark(len(X))
     proper(0()) -> ok(0())
     proper(s(X)) -> s(proper(X))
     proper(nil()) -> ok(nil())
     proper(cons(X1,X2)) -> cons(proper(X1),proper(X2))
     proper(fst(X1,X2)) -> fst(proper(X1),proper(X2))
     proper(from(X)) -> from(proper(X))
     proper(add(X1,X2)) -> add(proper(X1),proper(X2))
     proper(len(X)) -> len(proper(X))
     s(ok(X)) -> ok(s(X))
     cons(ok(X1),ok(X2)) -> ok(cons(X1,X2))
     fst(ok(X1),ok(X2)) -> ok(fst(X1,X2))
     from(ok(X)) -> ok(from(X))
     add(ok(X1),ok(X2)) -> ok(add(X1,X2))
     len(ok(X)) -> ok(len(X))
     top(mark(X)) -> top(proper(X))
     top(ok(X)) -> top(active(X))
    Matrix Interpretation Processor:
     dimension: 1
     interpretation:
      [proper#](x0) = x0 + 1,
      
      [top](x0) = 0,
      
      [ok](x0) = x0,
      
      [proper](x0) = x0,
      
      [len](x0) = x0 + 1,
      
      [add](x0, x1) = x0 + x1 + 1,
      
      [from](x0) = x0 + 1,
      
      [cons](x0, x1) = x0 + x1 + 1,
      
      [s](x0) = x0 + 1,
      
      [mark](x0) = 1,
      
      [nil] = 0,
      
      [active](x0) = x0,
      
      [fst](x0, x1) = x0 + x1 + 1,
      
      [0] = 0
     orientation:
      proper#(s(X)) = X + 2 >= X + 1 = proper#(X)
      
      proper#(cons(X1,X2)) = X1 + X2 + 2 >= X2 + 1 = proper#(X2)
      
      proper#(cons(X1,X2)) = X1 + X2 + 2 >= X1 + 1 = proper#(X1)
      
      proper#(fst(X1,X2)) = X1 + X2 + 2 >= X2 + 1 = proper#(X2)
      
      proper#(fst(X1,X2)) = X1 + X2 + 2 >= X1 + 1 = proper#(X1)
      
      proper#(from(X)) = X + 2 >= X + 1 = proper#(X)
      
      proper#(add(X1,X2)) = X1 + X2 + 2 >= X2 + 1 = proper#(X2)
      
      proper#(add(X1,X2)) = X1 + X2 + 2 >= X1 + 1 = proper#(X1)
      
      proper#(len(X)) = X + 2 >= X + 1 = proper#(X)
      
      active(fst(0(),Z)) = Z + 1 >= 1 = mark(nil())
      
      active(fst(s(X),cons(Y,Z))) = X + Y + Z + 3 >= 1 = mark(cons(Y,fst(X,Z)))
      
      active(from(X)) = X + 1 >= 1 = mark(cons(X,from(s(X))))
      
      active(add(0(),X)) = X + 1 >= 1 = mark(X)
      
      active(add(s(X),Y)) = X + Y + 2 >= 1 = mark(s(add(X,Y)))
      
      active(len(nil())) = 1 >= 1 = mark(0())
      
      active(len(cons(X,Z))) = X + Z + 2 >= 1 = mark(s(len(Z)))
      
      active(cons(X1,X2)) = X1 + X2 + 1 >= X1 + X2 + 1 = cons(active(X1),X2)
      
      active(fst(X1,X2)) = X1 + X2 + 1 >= X1 + X2 + 1 = fst(active(X1),X2)
      
      active(fst(X1,X2)) = X1 + X2 + 1 >= X1 + X2 + 1 = fst(X1,active(X2))
      
      active(from(X)) = X + 1 >= X + 1 = from(active(X))
      
      active(add(X1,X2)) = X1 + X2 + 1 >= X1 + X2 + 1 = add(active(X1),X2)
      
      active(add(X1,X2)) = X1 + X2 + 1 >= X1 + X2 + 1 = add(X1,active(X2))
      
      active(len(X)) = X + 1 >= X + 1 = len(active(X))
      
      cons(mark(X1),X2) = X2 + 2 >= 1 = mark(cons(X1,X2))
      
      fst(mark(X1),X2) = X2 + 2 >= 1 = mark(fst(X1,X2))
      
      fst(X1,mark(X2)) = X1 + 2 >= 1 = mark(fst(X1,X2))
      
      from(mark(X)) = 2 >= 1 = mark(from(X))
      
      add(mark(X1),X2) = X2 + 2 >= 1 = mark(add(X1,X2))
      
      add(X1,mark(X2)) = X1 + 2 >= 1 = mark(add(X1,X2))
      
      len(mark(X)) = 2 >= 1 = mark(len(X))
      
      proper(0()) = 0 >= 0 = ok(0())
      
      proper(s(X)) = X + 1 >= X + 1 = s(proper(X))
      
      proper(nil()) = 0 >= 0 = ok(nil())
      
      proper(cons(X1,X2)) = X1 + X2 + 1 >= X1 + X2 + 1 = cons(proper(X1),proper(X2))
      
      proper(fst(X1,X2)) = X1 + X2 + 1 >= X1 + X2 + 1 = fst(proper(X1),proper(X2))
      
      proper(from(X)) = X + 1 >= X + 1 = from(proper(X))
      
      proper(add(X1,X2)) = X1 + X2 + 1 >= X1 + X2 + 1 = add(proper(X1),proper(X2))
      
      proper(len(X)) = X + 1 >= X + 1 = len(proper(X))
      
      s(ok(X)) = X + 1 >= X + 1 = ok(s(X))
      
      cons(ok(X1),ok(X2)) = X1 + X2 + 1 >= X1 + X2 + 1 = ok(cons(X1,X2))
      
      fst(ok(X1),ok(X2)) = X1 + X2 + 1 >= X1 + X2 + 1 = ok(fst(X1,X2))
      
      from(ok(X)) = X + 1 >= X + 1 = ok(from(X))
      
      add(ok(X1),ok(X2)) = X1 + X2 + 1 >= X1 + X2 + 1 = ok(add(X1,X2))
      
      len(ok(X)) = X + 1 >= X + 1 = ok(len(X))
      
      top(mark(X)) = 0 >= 0 = top(proper(X))
      
      top(ok(X)) = 0 >= 0 = top(active(X))
     problem:
      DPs:
       
      TRS:
       active(fst(0(),Z)) -> mark(nil())
       active(fst(s(X),cons(Y,Z))) -> mark(cons(Y,fst(X,Z)))
       active(from(X)) -> mark(cons(X,from(s(X))))
       active(add(0(),X)) -> mark(X)
       active(add(s(X),Y)) -> mark(s(add(X,Y)))
       active(len(nil())) -> mark(0())
       active(len(cons(X,Z))) -> mark(s(len(Z)))
       active(cons(X1,X2)) -> cons(active(X1),X2)
       active(fst(X1,X2)) -> fst(active(X1),X2)
       active(fst(X1,X2)) -> fst(X1,active(X2))
       active(from(X)) -> from(active(X))
       active(add(X1,X2)) -> add(active(X1),X2)
       active(add(X1,X2)) -> add(X1,active(X2))
       active(len(X)) -> len(active(X))
       cons(mark(X1),X2) -> mark(cons(X1,X2))
       fst(mark(X1),X2) -> mark(fst(X1,X2))
       fst(X1,mark(X2)) -> mark(fst(X1,X2))
       from(mark(X)) -> mark(from(X))
       add(mark(X1),X2) -> mark(add(X1,X2))
       add(X1,mark(X2)) -> mark(add(X1,X2))
       len(mark(X)) -> mark(len(X))
       proper(0()) -> ok(0())
       proper(s(X)) -> s(proper(X))
       proper(nil()) -> ok(nil())
       proper(cons(X1,X2)) -> cons(proper(X1),proper(X2))
       proper(fst(X1,X2)) -> fst(proper(X1),proper(X2))
       proper(from(X)) -> from(proper(X))
       proper(add(X1,X2)) -> add(proper(X1),proper(X2))
       proper(len(X)) -> len(proper(X))
       s(ok(X)) -> ok(s(X))
       cons(ok(X1),ok(X2)) -> ok(cons(X1,X2))
       fst(ok(X1),ok(X2)) -> ok(fst(X1,X2))
       from(ok(X)) -> ok(from(X))
       add(ok(X1),ok(X2)) -> ok(add(X1,X2))
       len(ok(X)) -> ok(len(X))
       top(mark(X)) -> top(proper(X))
       top(ok(X)) -> top(active(X))
     Qed
    
    DPs:
     len#(mark(X)) -> len#(X)
     len#(ok(X)) -> len#(X)
    TRS:
     active(fst(0(),Z)) -> mark(nil())
     active(fst(s(X),cons(Y,Z))) -> mark(cons(Y,fst(X,Z)))
     active(from(X)) -> mark(cons(X,from(s(X))))
     active(add(0(),X)) -> mark(X)
     active(add(s(X),Y)) -> mark(s(add(X,Y)))
     active(len(nil())) -> mark(0())
     active(len(cons(X,Z))) -> mark(s(len(Z)))
     active(cons(X1,X2)) -> cons(active(X1),X2)
     active(fst(X1,X2)) -> fst(active(X1),X2)
     active(fst(X1,X2)) -> fst(X1,active(X2))
     active(from(X)) -> from(active(X))
     active(add(X1,X2)) -> add(active(X1),X2)
     active(add(X1,X2)) -> add(X1,active(X2))
     active(len(X)) -> len(active(X))
     cons(mark(X1),X2) -> mark(cons(X1,X2))
     fst(mark(X1),X2) -> mark(fst(X1,X2))
     fst(X1,mark(X2)) -> mark(fst(X1,X2))
     from(mark(X)) -> mark(from(X))
     add(mark(X1),X2) -> mark(add(X1,X2))
     add(X1,mark(X2)) -> mark(add(X1,X2))
     len(mark(X)) -> mark(len(X))
     proper(0()) -> ok(0())
     proper(s(X)) -> s(proper(X))
     proper(nil()) -> ok(nil())
     proper(cons(X1,X2)) -> cons(proper(X1),proper(X2))
     proper(fst(X1,X2)) -> fst(proper(X1),proper(X2))
     proper(from(X)) -> from(proper(X))
     proper(add(X1,X2)) -> add(proper(X1),proper(X2))
     proper(len(X)) -> len(proper(X))
     s(ok(X)) -> ok(s(X))
     cons(ok(X1),ok(X2)) -> ok(cons(X1,X2))
     fst(ok(X1),ok(X2)) -> ok(fst(X1,X2))
     from(ok(X)) -> ok(from(X))
     add(ok(X1),ok(X2)) -> ok(add(X1,X2))
     len(ok(X)) -> ok(len(X))
     top(mark(X)) -> top(proper(X))
     top(ok(X)) -> top(active(X))
    Matrix Interpretation Processor:
     dimension: 1
     interpretation:
      [len#](x0) = x0 + 1,
      
      [top](x0) = 0,
      
      [ok](x0) = x0,
      
      [proper](x0) = x0,
      
      [len](x0) = x0 + 1,
      
      [add](x0, x1) = x0 + x1 + 1,
      
      [from](x0) = x0,
      
      [cons](x0, x1) = x0,
      
      [s](x0) = 0,
      
      [mark](x0) = x0 + 1,
      
      [nil] = 0,
      
      [active](x0) = x0 + 1,
      
      [fst](x0, x1) = x0 + x1,
      
      [0] = 1
     orientation:
      len#(mark(X)) = X + 2 >= X + 1 = len#(X)
      
      len#(ok(X)) = X + 1 >= X + 1 = len#(X)
      
      active(fst(0(),Z)) = Z + 2 >= 1 = mark(nil())
      
      active(fst(s(X),cons(Y,Z))) = Y + 1 >= Y + 1 = mark(cons(Y,fst(X,Z)))
      
      active(from(X)) = X + 1 >= X + 1 = mark(cons(X,from(s(X))))
      
      active(add(0(),X)) = X + 3 >= X + 1 = mark(X)
      
      active(add(s(X),Y)) = Y + 2 >= 1 = mark(s(add(X,Y)))
      
      active(len(nil())) = 2 >= 2 = mark(0())
      
      active(len(cons(X,Z))) = X + 2 >= 1 = mark(s(len(Z)))
      
      active(cons(X1,X2)) = X1 + 1 >= X1 + 1 = cons(active(X1),X2)
      
      active(fst(X1,X2)) = X1 + X2 + 1 >= X1 + X2 + 1 = fst(active(X1),X2)
      
      active(fst(X1,X2)) = X1 + X2 + 1 >= X1 + X2 + 1 = fst(X1,active(X2))
      
      active(from(X)) = X + 1 >= X + 1 = from(active(X))
      
      active(add(X1,X2)) = X1 + X2 + 2 >= X1 + X2 + 2 = add(active(X1),X2)
      
      active(add(X1,X2)) = X1 + X2 + 2 >= X1 + X2 + 2 = add(X1,active(X2))
      
      active(len(X)) = X + 2 >= X + 2 = len(active(X))
      
      cons(mark(X1),X2) = X1 + 1 >= X1 + 1 = mark(cons(X1,X2))
      
      fst(mark(X1),X2) = X1 + X2 + 1 >= X1 + X2 + 1 = mark(fst(X1,X2))
      
      fst(X1,mark(X2)) = X1 + X2 + 1 >= X1 + X2 + 1 = mark(fst(X1,X2))
      
      from(mark(X)) = X + 1 >= X + 1 = mark(from(X))
      
      add(mark(X1),X2) = X1 + X2 + 2 >= X1 + X2 + 2 = mark(add(X1,X2))
      
      add(X1,mark(X2)) = X1 + X2 + 2 >= X1 + X2 + 2 = mark(add(X1,X2))
      
      len(mark(X)) = X + 2 >= X + 2 = mark(len(X))
      
      proper(0()) = 1 >= 1 = ok(0())
      
      proper(s(X)) = 0 >= 0 = s(proper(X))
      
      proper(nil()) = 0 >= 0 = ok(nil())
      
      proper(cons(X1,X2)) = X1 >= X1 = cons(proper(X1),proper(X2))
      
      proper(fst(X1,X2)) = X1 + X2 >= X1 + X2 = fst(proper(X1),proper(X2))
      
      proper(from(X)) = X >= X = from(proper(X))
      
      proper(add(X1,X2)) = X1 + X2 + 1 >= X1 + X2 + 1 = add(proper(X1),proper(X2))
      
      proper(len(X)) = X + 1 >= X + 1 = len(proper(X))
      
      s(ok(X)) = 0 >= 0 = ok(s(X))
      
      cons(ok(X1),ok(X2)) = X1 >= X1 = ok(cons(X1,X2))
      
      fst(ok(X1),ok(X2)) = X1 + X2 >= X1 + X2 = ok(fst(X1,X2))
      
      from(ok(X)) = X >= X = ok(from(X))
      
      add(ok(X1),ok(X2)) = X1 + X2 + 1 >= X1 + X2 + 1 = ok(add(X1,X2))
      
      len(ok(X)) = X + 1 >= X + 1 = ok(len(X))
      
      top(mark(X)) = 0 >= 0 = top(proper(X))
      
      top(ok(X)) = 0 >= 0 = top(active(X))
     problem:
      DPs:
       len#(ok(X)) -> len#(X)
      TRS:
       active(fst(0(),Z)) -> mark(nil())
       active(fst(s(X),cons(Y,Z))) -> mark(cons(Y,fst(X,Z)))
       active(from(X)) -> mark(cons(X,from(s(X))))
       active(add(0(),X)) -> mark(X)
       active(add(s(X),Y)) -> mark(s(add(X,Y)))
       active(len(nil())) -> mark(0())
       active(len(cons(X,Z))) -> mark(s(len(Z)))
       active(cons(X1,X2)) -> cons(active(X1),X2)
       active(fst(X1,X2)) -> fst(active(X1),X2)
       active(fst(X1,X2)) -> fst(X1,active(X2))
       active(from(X)) -> from(active(X))
       active(add(X1,X2)) -> add(active(X1),X2)
       active(add(X1,X2)) -> add(X1,active(X2))
       active(len(X)) -> len(active(X))
       cons(mark(X1),X2) -> mark(cons(X1,X2))
       fst(mark(X1),X2) -> mark(fst(X1,X2))
       fst(X1,mark(X2)) -> mark(fst(X1,X2))
       from(mark(X)) -> mark(from(X))
       add(mark(X1),X2) -> mark(add(X1,X2))
       add(X1,mark(X2)) -> mark(add(X1,X2))
       len(mark(X)) -> mark(len(X))
       proper(0()) -> ok(0())
       proper(s(X)) -> s(proper(X))
       proper(nil()) -> ok(nil())
       proper(cons(X1,X2)) -> cons(proper(X1),proper(X2))
       proper(fst(X1,X2)) -> fst(proper(X1),proper(X2))
       proper(from(X)) -> from(proper(X))
       proper(add(X1,X2)) -> add(proper(X1),proper(X2))
       proper(len(X)) -> len(proper(X))
       s(ok(X)) -> ok(s(X))
       cons(ok(X1),ok(X2)) -> ok(cons(X1,X2))
       fst(ok(X1),ok(X2)) -> ok(fst(X1,X2))
       from(ok(X)) -> ok(from(X))
       add(ok(X1),ok(X2)) -> ok(add(X1,X2))
       len(ok(X)) -> ok(len(X))
       top(mark(X)) -> top(proper(X))
       top(ok(X)) -> top(active(X))
     Matrix Interpretation Processor:
      dimension: 1
      interpretation:
       [len#](x0) = x0 + 1,
       
       [top](x0) = 0,
       
       [ok](x0) = x0 + 1,
       
       [proper](x0) = 1,
       
       [len](x0) = x0,
       
       [add](x0, x1) = x1,
       
       [from](x0) = x0,
       
       [cons](x0, x1) = x0,
       
       [s](x0) = x0,
       
       [mark](x0) = 0,
       
       [nil] = 0,
       
       [active](x0) = x0,
       
       [fst](x0, x1) = x0,
       
       [0] = 0
      orientation:
       len#(ok(X)) = X + 2 >= X + 1 = len#(X)
       
       active(fst(0(),Z)) = 0 >= 0 = mark(nil())
       
       active(fst(s(X),cons(Y,Z))) = X >= 0 = mark(cons(Y,fst(X,Z)))
       
       active(from(X)) = X >= 0 = mark(cons(X,from(s(X))))
       
       active(add(0(),X)) = X >= 0 = mark(X)
       
       active(add(s(X),Y)) = Y >= 0 = mark(s(add(X,Y)))
       
       active(len(nil())) = 0 >= 0 = mark(0())
       
       active(len(cons(X,Z))) = X >= 0 = mark(s(len(Z)))
       
       active(cons(X1,X2)) = X1 >= X1 = cons(active(X1),X2)
       
       active(fst(X1,X2)) = X1 >= X1 = fst(active(X1),X2)
       
       active(fst(X1,X2)) = X1 >= X1 = fst(X1,active(X2))
       
       active(from(X)) = X >= X = from(active(X))
       
       active(add(X1,X2)) = X2 >= X2 = add(active(X1),X2)
       
       active(add(X1,X2)) = X2 >= X2 = add(X1,active(X2))
       
       active(len(X)) = X >= X = len(active(X))
       
       cons(mark(X1),X2) = 0 >= 0 = mark(cons(X1,X2))
       
       fst(mark(X1),X2) = 0 >= 0 = mark(fst(X1,X2))
       
       fst(X1,mark(X2)) = X1 >= 0 = mark(fst(X1,X2))
       
       from(mark(X)) = 0 >= 0 = mark(from(X))
       
       add(mark(X1),X2) = X2 >= 0 = mark(add(X1,X2))
       
       add(X1,mark(X2)) = 0 >= 0 = mark(add(X1,X2))
       
       len(mark(X)) = 0 >= 0 = mark(len(X))
       
       proper(0()) = 1 >= 1 = ok(0())
       
       proper(s(X)) = 1 >= 1 = s(proper(X))
       
       proper(nil()) = 1 >= 1 = ok(nil())
       
       proper(cons(X1,X2)) = 1 >= 1 = cons(proper(X1),proper(X2))
       
       proper(fst(X1,X2)) = 1 >= 1 = fst(proper(X1),proper(X2))
       
       proper(from(X)) = 1 >= 1 = from(proper(X))
       
       proper(add(X1,X2)) = 1 >= 1 = add(proper(X1),proper(X2))
       
       proper(len(X)) = 1 >= 1 = len(proper(X))
       
       s(ok(X)) = X + 1 >= X + 1 = ok(s(X))
       
       cons(ok(X1),ok(X2)) = X1 + 1 >= X1 + 1 = ok(cons(X1,X2))
       
       fst(ok(X1),ok(X2)) = X1 + 1 >= X1 + 1 = ok(fst(X1,X2))
       
       from(ok(X)) = X + 1 >= X + 1 = ok(from(X))
       
       add(ok(X1),ok(X2)) = X2 + 1 >= X2 + 1 = ok(add(X1,X2))
       
       len(ok(X)) = X + 1 >= X + 1 = ok(len(X))
       
       top(mark(X)) = 0 >= 0 = top(proper(X))
       
       top(ok(X)) = 0 >= 0 = top(active(X))
      problem:
       DPs:
        
       TRS:
        active(fst(0(),Z)) -> mark(nil())
        active(fst(s(X),cons(Y,Z))) -> mark(cons(Y,fst(X,Z)))
        active(from(X)) -> mark(cons(X,from(s(X))))
        active(add(0(),X)) -> mark(X)
        active(add(s(X),Y)) -> mark(s(add(X,Y)))
        active(len(nil())) -> mark(0())
        active(len(cons(X,Z))) -> mark(s(len(Z)))
        active(cons(X1,X2)) -> cons(active(X1),X2)
        active(fst(X1,X2)) -> fst(active(X1),X2)
        active(fst(X1,X2)) -> fst(X1,active(X2))
        active(from(X)) -> from(active(X))
        active(add(X1,X2)) -> add(active(X1),X2)
        active(add(X1,X2)) -> add(X1,active(X2))
        active(len(X)) -> len(active(X))
        cons(mark(X1),X2) -> mark(cons(X1,X2))
        fst(mark(X1),X2) -> mark(fst(X1,X2))
        fst(X1,mark(X2)) -> mark(fst(X1,X2))
        from(mark(X)) -> mark(from(X))
        add(mark(X1),X2) -> mark(add(X1,X2))
        add(X1,mark(X2)) -> mark(add(X1,X2))
        len(mark(X)) -> mark(len(X))
        proper(0()) -> ok(0())
        proper(s(X)) -> s(proper(X))
        proper(nil()) -> ok(nil())
        proper(cons(X1,X2)) -> cons(proper(X1),proper(X2))
        proper(fst(X1,X2)) -> fst(proper(X1),proper(X2))
        proper(from(X)) -> from(proper(X))
        proper(add(X1,X2)) -> add(proper(X1),proper(X2))
        proper(len(X)) -> len(proper(X))
        s(ok(X)) -> ok(s(X))
        cons(ok(X1),ok(X2)) -> ok(cons(X1,X2))
        fst(ok(X1),ok(X2)) -> ok(fst(X1,X2))
        from(ok(X)) -> ok(from(X))
        add(ok(X1),ok(X2)) -> ok(add(X1,X2))
        len(ok(X)) -> ok(len(X))
        top(mark(X)) -> top(proper(X))
        top(ok(X)) -> top(active(X))
      Qed
    
    DPs:
     add#(mark(X1),X2) -> add#(X1,X2)
     add#(X1,mark(X2)) -> add#(X1,X2)
     add#(ok(X1),ok(X2)) -> add#(X1,X2)
    TRS:
     active(fst(0(),Z)) -> mark(nil())
     active(fst(s(X),cons(Y,Z))) -> mark(cons(Y,fst(X,Z)))
     active(from(X)) -> mark(cons(X,from(s(X))))
     active(add(0(),X)) -> mark(X)
     active(add(s(X),Y)) -> mark(s(add(X,Y)))
     active(len(nil())) -> mark(0())
     active(len(cons(X,Z))) -> mark(s(len(Z)))
     active(cons(X1,X2)) -> cons(active(X1),X2)
     active(fst(X1,X2)) -> fst(active(X1),X2)
     active(fst(X1,X2)) -> fst(X1,active(X2))
     active(from(X)) -> from(active(X))
     active(add(X1,X2)) -> add(active(X1),X2)
     active(add(X1,X2)) -> add(X1,active(X2))
     active(len(X)) -> len(active(X))
     cons(mark(X1),X2) -> mark(cons(X1,X2))
     fst(mark(X1),X2) -> mark(fst(X1,X2))
     fst(X1,mark(X2)) -> mark(fst(X1,X2))
     from(mark(X)) -> mark(from(X))
     add(mark(X1),X2) -> mark(add(X1,X2))
     add(X1,mark(X2)) -> mark(add(X1,X2))
     len(mark(X)) -> mark(len(X))
     proper(0()) -> ok(0())
     proper(s(X)) -> s(proper(X))
     proper(nil()) -> ok(nil())
     proper(cons(X1,X2)) -> cons(proper(X1),proper(X2))
     proper(fst(X1,X2)) -> fst(proper(X1),proper(X2))
     proper(from(X)) -> from(proper(X))
     proper(add(X1,X2)) -> add(proper(X1),proper(X2))
     proper(len(X)) -> len(proper(X))
     s(ok(X)) -> ok(s(X))
     cons(ok(X1),ok(X2)) -> ok(cons(X1,X2))
     fst(ok(X1),ok(X2)) -> ok(fst(X1,X2))
     from(ok(X)) -> ok(from(X))
     add(ok(X1),ok(X2)) -> ok(add(X1,X2))
     len(ok(X)) -> ok(len(X))
     top(mark(X)) -> top(proper(X))
     top(ok(X)) -> top(active(X))
    Matrix Interpretation Processor:
     dimension: 1
     interpretation:
      [add#](x0, x1) = x0,
      
      [top](x0) = 0,
      
      [ok](x0) = x0 + 1,
      
      [proper](x0) = 1,
      
      [len](x0) = x0,
      
      [add](x0, x1) = x1,
      
      [from](x0) = x0,
      
      [cons](x0, x1) = x1,
      
      [s](x0) = x0,
      
      [mark](x0) = x0,
      
      [nil] = 0,
      
      [active](x0) = x0,
      
      [fst](x0, x1) = x1,
      
      [0] = 0
     orientation:
      add#(mark(X1),X2) = X1 >= X1 = add#(X1,X2)
      
      add#(X1,mark(X2)) = X1 >= X1 = add#(X1,X2)
      
      add#(ok(X1),ok(X2)) = X1 + 1 >= X1 = add#(X1,X2)
      
      active(fst(0(),Z)) = Z >= 0 = mark(nil())
      
      active(fst(s(X),cons(Y,Z))) = Z >= Z = mark(cons(Y,fst(X,Z)))
      
      active(from(X)) = X >= X = mark(cons(X,from(s(X))))
      
      active(add(0(),X)) = X >= X = mark(X)
      
      active(add(s(X),Y)) = Y >= Y = mark(s(add(X,Y)))
      
      active(len(nil())) = 0 >= 0 = mark(0())
      
      active(len(cons(X,Z))) = Z >= Z = mark(s(len(Z)))
      
      active(cons(X1,X2)) = X2 >= X2 = cons(active(X1),X2)
      
      active(fst(X1,X2)) = X2 >= X2 = fst(active(X1),X2)
      
      active(fst(X1,X2)) = X2 >= X2 = fst(X1,active(X2))
      
      active(from(X)) = X >= X = from(active(X))
      
      active(add(X1,X2)) = X2 >= X2 = add(active(X1),X2)
      
      active(add(X1,X2)) = X2 >= X2 = add(X1,active(X2))
      
      active(len(X)) = X >= X = len(active(X))
      
      cons(mark(X1),X2) = X2 >= X2 = mark(cons(X1,X2))
      
      fst(mark(X1),X2) = X2 >= X2 = mark(fst(X1,X2))
      
      fst(X1,mark(X2)) = X2 >= X2 = mark(fst(X1,X2))
      
      from(mark(X)) = X >= X = mark(from(X))
      
      add(mark(X1),X2) = X2 >= X2 = mark(add(X1,X2))
      
      add(X1,mark(X2)) = X2 >= X2 = mark(add(X1,X2))
      
      len(mark(X)) = X >= X = mark(len(X))
      
      proper(0()) = 1 >= 1 = ok(0())
      
      proper(s(X)) = 1 >= 1 = s(proper(X))
      
      proper(nil()) = 1 >= 1 = ok(nil())
      
      proper(cons(X1,X2)) = 1 >= 1 = cons(proper(X1),proper(X2))
      
      proper(fst(X1,X2)) = 1 >= 1 = fst(proper(X1),proper(X2))
      
      proper(from(X)) = 1 >= 1 = from(proper(X))
      
      proper(add(X1,X2)) = 1 >= 1 = add(proper(X1),proper(X2))
      
      proper(len(X)) = 1 >= 1 = len(proper(X))
      
      s(ok(X)) = X + 1 >= X + 1 = ok(s(X))
      
      cons(ok(X1),ok(X2)) = X2 + 1 >= X2 + 1 = ok(cons(X1,X2))
      
      fst(ok(X1),ok(X2)) = X2 + 1 >= X2 + 1 = ok(fst(X1,X2))
      
      from(ok(X)) = X + 1 >= X + 1 = ok(from(X))
      
      add(ok(X1),ok(X2)) = X2 + 1 >= X2 + 1 = ok(add(X1,X2))
      
      len(ok(X)) = X + 1 >= X + 1 = ok(len(X))
      
      top(mark(X)) = 0 >= 0 = top(proper(X))
      
      top(ok(X)) = 0 >= 0 = top(active(X))
     problem:
      DPs:
       add#(mark(X1),X2) -> add#(X1,X2)
       add#(X1,mark(X2)) -> add#(X1,X2)
      TRS:
       active(fst(0(),Z)) -> mark(nil())
       active(fst(s(X),cons(Y,Z))) -> mark(cons(Y,fst(X,Z)))
       active(from(X)) -> mark(cons(X,from(s(X))))
       active(add(0(),X)) -> mark(X)
       active(add(s(X),Y)) -> mark(s(add(X,Y)))
       active(len(nil())) -> mark(0())
       active(len(cons(X,Z))) -> mark(s(len(Z)))
       active(cons(X1,X2)) -> cons(active(X1),X2)
       active(fst(X1,X2)) -> fst(active(X1),X2)
       active(fst(X1,X2)) -> fst(X1,active(X2))
       active(from(X)) -> from(active(X))
       active(add(X1,X2)) -> add(active(X1),X2)
       active(add(X1,X2)) -> add(X1,active(X2))
       active(len(X)) -> len(active(X))
       cons(mark(X1),X2) -> mark(cons(X1,X2))
       fst(mark(X1),X2) -> mark(fst(X1,X2))
       fst(X1,mark(X2)) -> mark(fst(X1,X2))
       from(mark(X)) -> mark(from(X))
       add(mark(X1),X2) -> mark(add(X1,X2))
       add(X1,mark(X2)) -> mark(add(X1,X2))
       len(mark(X)) -> mark(len(X))
       proper(0()) -> ok(0())
       proper(s(X)) -> s(proper(X))
       proper(nil()) -> ok(nil())
       proper(cons(X1,X2)) -> cons(proper(X1),proper(X2))
       proper(fst(X1,X2)) -> fst(proper(X1),proper(X2))
       proper(from(X)) -> from(proper(X))
       proper(add(X1,X2)) -> add(proper(X1),proper(X2))
       proper(len(X)) -> len(proper(X))
       s(ok(X)) -> ok(s(X))
       cons(ok(X1),ok(X2)) -> ok(cons(X1,X2))
       fst(ok(X1),ok(X2)) -> ok(fst(X1,X2))
       from(ok(X)) -> ok(from(X))
       add(ok(X1),ok(X2)) -> ok(add(X1,X2))
       len(ok(X)) -> ok(len(X))
       top(mark(X)) -> top(proper(X))
       top(ok(X)) -> top(active(X))
     Matrix Interpretation Processor:
      dimension: 1
      interpretation:
       [add#](x0, x1) = x0 + x1 + 1,
       
       [top](x0) = 0,
       
       [ok](x0) = x0,
       
       [proper](x0) = x0,
       
       [len](x0) = x0 + 1,
       
       [add](x0, x1) = x0 + x1,
       
       [from](x0) = x0,
       
       [cons](x0, x1) = x0,
       
       [s](x0) = 1,
       
       [mark](x0) = x0 + 1,
       
       [nil] = 0,
       
       [active](x0) = x0 + 1,
       
       [fst](x0, x1) = x0 + x1,
       
       [0] = 0
      orientation:
       add#(mark(X1),X2) = X1 + X2 + 2 >= X1 + X2 + 1 = add#(X1,X2)
       
       add#(X1,mark(X2)) = X1 + X2 + 2 >= X1 + X2 + 1 = add#(X1,X2)
       
       active(fst(0(),Z)) = Z + 1 >= 1 = mark(nil())
       
       active(fst(s(X),cons(Y,Z))) = Y + 2 >= Y + 1 = mark(cons(Y,fst(X,Z)))
       
       active(from(X)) = X + 1 >= X + 1 = mark(cons(X,from(s(X))))
       
       active(add(0(),X)) = X + 1 >= X + 1 = mark(X)
       
       active(add(s(X),Y)) = Y + 2 >= 2 = mark(s(add(X,Y)))
       
       active(len(nil())) = 2 >= 1 = mark(0())
       
       active(len(cons(X,Z))) = X + 2 >= 2 = mark(s(len(Z)))
       
       active(cons(X1,X2)) = X1 + 1 >= X1 + 1 = cons(active(X1),X2)
       
       active(fst(X1,X2)) = X1 + X2 + 1 >= X1 + X2 + 1 = fst(active(X1),X2)
       
       active(fst(X1,X2)) = X1 + X2 + 1 >= X1 + X2 + 1 = fst(X1,active(X2))
       
       active(from(X)) = X + 1 >= X + 1 = from(active(X))
       
       active(add(X1,X2)) = X1 + X2 + 1 >= X1 + X2 + 1 = add(active(X1),X2)
       
       active(add(X1,X2)) = X1 + X2 + 1 >= X1 + X2 + 1 = add(X1,active(X2))
       
       active(len(X)) = X + 2 >= X + 2 = len(active(X))
       
       cons(mark(X1),X2) = X1 + 1 >= X1 + 1 = mark(cons(X1,X2))
       
       fst(mark(X1),X2) = X1 + X2 + 1 >= X1 + X2 + 1 = mark(fst(X1,X2))
       
       fst(X1,mark(X2)) = X1 + X2 + 1 >= X1 + X2 + 1 = mark(fst(X1,X2))
       
       from(mark(X)) = X + 1 >= X + 1 = mark(from(X))
       
       add(mark(X1),X2) = X1 + X2 + 1 >= X1 + X2 + 1 = mark(add(X1,X2))
       
       add(X1,mark(X2)) = X1 + X2 + 1 >= X1 + X2 + 1 = mark(add(X1,X2))
       
       len(mark(X)) = X + 2 >= X + 2 = mark(len(X))
       
       proper(0()) = 0 >= 0 = ok(0())
       
       proper(s(X)) = 1 >= 1 = s(proper(X))
       
       proper(nil()) = 0 >= 0 = ok(nil())
       
       proper(cons(X1,X2)) = X1 >= X1 = cons(proper(X1),proper(X2))
       
       proper(fst(X1,X2)) = X1 + X2 >= X1 + X2 = fst(proper(X1),proper(X2))
       
       proper(from(X)) = X >= X = from(proper(X))
       
       proper(add(X1,X2)) = X1 + X2 >= X1 + X2 = add(proper(X1),proper(X2))
       
       proper(len(X)) = X + 1 >= X + 1 = len(proper(X))
       
       s(ok(X)) = 1 >= 1 = ok(s(X))
       
       cons(ok(X1),ok(X2)) = X1 >= X1 = ok(cons(X1,X2))
       
       fst(ok(X1),ok(X2)) = X1 + X2 >= X1 + X2 = ok(fst(X1,X2))
       
       from(ok(X)) = X >= X = ok(from(X))
       
       add(ok(X1),ok(X2)) = X1 + X2 >= X1 + X2 = ok(add(X1,X2))
       
       len(ok(X)) = X + 1 >= X + 1 = ok(len(X))
       
       top(mark(X)) = 0 >= 0 = top(proper(X))
       
       top(ok(X)) = 0 >= 0 = top(active(X))
      problem:
       DPs:
        
       TRS:
        active(fst(0(),Z)) -> mark(nil())
        active(fst(s(X),cons(Y,Z))) -> mark(cons(Y,fst(X,Z)))
        active(from(X)) -> mark(cons(X,from(s(X))))
        active(add(0(),X)) -> mark(X)
        active(add(s(X),Y)) -> mark(s(add(X,Y)))
        active(len(nil())) -> mark(0())
        active(len(cons(X,Z))) -> mark(s(len(Z)))
        active(cons(X1,X2)) -> cons(active(X1),X2)
        active(fst(X1,X2)) -> fst(active(X1),X2)
        active(fst(X1,X2)) -> fst(X1,active(X2))
        active(from(X)) -> from(active(X))
        active(add(X1,X2)) -> add(active(X1),X2)
        active(add(X1,X2)) -> add(X1,active(X2))
        active(len(X)) -> len(active(X))
        cons(mark(X1),X2) -> mark(cons(X1,X2))
        fst(mark(X1),X2) -> mark(fst(X1,X2))
        fst(X1,mark(X2)) -> mark(fst(X1,X2))
        from(mark(X)) -> mark(from(X))
        add(mark(X1),X2) -> mark(add(X1,X2))
        add(X1,mark(X2)) -> mark(add(X1,X2))
        len(mark(X)) -> mark(len(X))
        proper(0()) -> ok(0())
        proper(s(X)) -> s(proper(X))
        proper(nil()) -> ok(nil())
        proper(cons(X1,X2)) -> cons(proper(X1),proper(X2))
        proper(fst(X1,X2)) -> fst(proper(X1),proper(X2))
        proper(from(X)) -> from(proper(X))
        proper(add(X1,X2)) -> add(proper(X1),proper(X2))
        proper(len(X)) -> len(proper(X))
        s(ok(X)) -> ok(s(X))
        cons(ok(X1),ok(X2)) -> ok(cons(X1,X2))
        fst(ok(X1),ok(X2)) -> ok(fst(X1,X2))
        from(ok(X)) -> ok(from(X))
        add(ok(X1),ok(X2)) -> ok(add(X1,X2))
        len(ok(X)) -> ok(len(X))
        top(mark(X)) -> top(proper(X))
        top(ok(X)) -> top(active(X))
      Qed
    
    DPs:
     from#(mark(X)) -> from#(X)
     from#(ok(X)) -> from#(X)
    TRS:
     active(fst(0(),Z)) -> mark(nil())
     active(fst(s(X),cons(Y,Z))) -> mark(cons(Y,fst(X,Z)))
     active(from(X)) -> mark(cons(X,from(s(X))))
     active(add(0(),X)) -> mark(X)
     active(add(s(X),Y)) -> mark(s(add(X,Y)))
     active(len(nil())) -> mark(0())
     active(len(cons(X,Z))) -> mark(s(len(Z)))
     active(cons(X1,X2)) -> cons(active(X1),X2)
     active(fst(X1,X2)) -> fst(active(X1),X2)
     active(fst(X1,X2)) -> fst(X1,active(X2))
     active(from(X)) -> from(active(X))
     active(add(X1,X2)) -> add(active(X1),X2)
     active(add(X1,X2)) -> add(X1,active(X2))
     active(len(X)) -> len(active(X))
     cons(mark(X1),X2) -> mark(cons(X1,X2))
     fst(mark(X1),X2) -> mark(fst(X1,X2))
     fst(X1,mark(X2)) -> mark(fst(X1,X2))
     from(mark(X)) -> mark(from(X))
     add(mark(X1),X2) -> mark(add(X1,X2))
     add(X1,mark(X2)) -> mark(add(X1,X2))
     len(mark(X)) -> mark(len(X))
     proper(0()) -> ok(0())
     proper(s(X)) -> s(proper(X))
     proper(nil()) -> ok(nil())
     proper(cons(X1,X2)) -> cons(proper(X1),proper(X2))
     proper(fst(X1,X2)) -> fst(proper(X1),proper(X2))
     proper(from(X)) -> from(proper(X))
     proper(add(X1,X2)) -> add(proper(X1),proper(X2))
     proper(len(X)) -> len(proper(X))
     s(ok(X)) -> ok(s(X))
     cons(ok(X1),ok(X2)) -> ok(cons(X1,X2))
     fst(ok(X1),ok(X2)) -> ok(fst(X1,X2))
     from(ok(X)) -> ok(from(X))
     add(ok(X1),ok(X2)) -> ok(add(X1,X2))
     len(ok(X)) -> ok(len(X))
     top(mark(X)) -> top(proper(X))
     top(ok(X)) -> top(active(X))
    Matrix Interpretation Processor:
     dimension: 1
     interpretation:
      [from#](x0) = x0 + 1,
      
      [top](x0) = 0,
      
      [ok](x0) = x0,
      
      [proper](x0) = x0,
      
      [len](x0) = x0 + 1,
      
      [add](x0, x1) = x0 + x1 + 1,
      
      [from](x0) = x0,
      
      [cons](x0, x1) = x0,
      
      [s](x0) = 0,
      
      [mark](x0) = x0 + 1,
      
      [nil] = 0,
      
      [active](x0) = x0 + 1,
      
      [fst](x0, x1) = x0 + x1,
      
      [0] = 1
     orientation:
      from#(mark(X)) = X + 2 >= X + 1 = from#(X)
      
      from#(ok(X)) = X + 1 >= X + 1 = from#(X)
      
      active(fst(0(),Z)) = Z + 2 >= 1 = mark(nil())
      
      active(fst(s(X),cons(Y,Z))) = Y + 1 >= Y + 1 = mark(cons(Y,fst(X,Z)))
      
      active(from(X)) = X + 1 >= X + 1 = mark(cons(X,from(s(X))))
      
      active(add(0(),X)) = X + 3 >= X + 1 = mark(X)
      
      active(add(s(X),Y)) = Y + 2 >= 1 = mark(s(add(X,Y)))
      
      active(len(nil())) = 2 >= 2 = mark(0())
      
      active(len(cons(X,Z))) = X + 2 >= 1 = mark(s(len(Z)))
      
      active(cons(X1,X2)) = X1 + 1 >= X1 + 1 = cons(active(X1),X2)
      
      active(fst(X1,X2)) = X1 + X2 + 1 >= X1 + X2 + 1 = fst(active(X1),X2)
      
      active(fst(X1,X2)) = X1 + X2 + 1 >= X1 + X2 + 1 = fst(X1,active(X2))
      
      active(from(X)) = X + 1 >= X + 1 = from(active(X))
      
      active(add(X1,X2)) = X1 + X2 + 2 >= X1 + X2 + 2 = add(active(X1),X2)
      
      active(add(X1,X2)) = X1 + X2 + 2 >= X1 + X2 + 2 = add(X1,active(X2))
      
      active(len(X)) = X + 2 >= X + 2 = len(active(X))
      
      cons(mark(X1),X2) = X1 + 1 >= X1 + 1 = mark(cons(X1,X2))
      
      fst(mark(X1),X2) = X1 + X2 + 1 >= X1 + X2 + 1 = mark(fst(X1,X2))
      
      fst(X1,mark(X2)) = X1 + X2 + 1 >= X1 + X2 + 1 = mark(fst(X1,X2))
      
      from(mark(X)) = X + 1 >= X + 1 = mark(from(X))
      
      add(mark(X1),X2) = X1 + X2 + 2 >= X1 + X2 + 2 = mark(add(X1,X2))
      
      add(X1,mark(X2)) = X1 + X2 + 2 >= X1 + X2 + 2 = mark(add(X1,X2))
      
      len(mark(X)) = X + 2 >= X + 2 = mark(len(X))
      
      proper(0()) = 1 >= 1 = ok(0())
      
      proper(s(X)) = 0 >= 0 = s(proper(X))
      
      proper(nil()) = 0 >= 0 = ok(nil())
      
      proper(cons(X1,X2)) = X1 >= X1 = cons(proper(X1),proper(X2))
      
      proper(fst(X1,X2)) = X1 + X2 >= X1 + X2 = fst(proper(X1),proper(X2))
      
      proper(from(X)) = X >= X = from(proper(X))
      
      proper(add(X1,X2)) = X1 + X2 + 1 >= X1 + X2 + 1 = add(proper(X1),proper(X2))
      
      proper(len(X)) = X + 1 >= X + 1 = len(proper(X))
      
      s(ok(X)) = 0 >= 0 = ok(s(X))
      
      cons(ok(X1),ok(X2)) = X1 >= X1 = ok(cons(X1,X2))
      
      fst(ok(X1),ok(X2)) = X1 + X2 >= X1 + X2 = ok(fst(X1,X2))
      
      from(ok(X)) = X >= X = ok(from(X))
      
      add(ok(X1),ok(X2)) = X1 + X2 + 1 >= X1 + X2 + 1 = ok(add(X1,X2))
      
      len(ok(X)) = X + 1 >= X + 1 = ok(len(X))
      
      top(mark(X)) = 0 >= 0 = top(proper(X))
      
      top(ok(X)) = 0 >= 0 = top(active(X))
     problem:
      DPs:
       from#(ok(X)) -> from#(X)
      TRS:
       active(fst(0(),Z)) -> mark(nil())
       active(fst(s(X),cons(Y,Z))) -> mark(cons(Y,fst(X,Z)))
       active(from(X)) -> mark(cons(X,from(s(X))))
       active(add(0(),X)) -> mark(X)
       active(add(s(X),Y)) -> mark(s(add(X,Y)))
       active(len(nil())) -> mark(0())
       active(len(cons(X,Z))) -> mark(s(len(Z)))
       active(cons(X1,X2)) -> cons(active(X1),X2)
       active(fst(X1,X2)) -> fst(active(X1),X2)
       active(fst(X1,X2)) -> fst(X1,active(X2))
       active(from(X)) -> from(active(X))
       active(add(X1,X2)) -> add(active(X1),X2)
       active(add(X1,X2)) -> add(X1,active(X2))
       active(len(X)) -> len(active(X))
       cons(mark(X1),X2) -> mark(cons(X1,X2))
       fst(mark(X1),X2) -> mark(fst(X1,X2))
       fst(X1,mark(X2)) -> mark(fst(X1,X2))
       from(mark(X)) -> mark(from(X))
       add(mark(X1),X2) -> mark(add(X1,X2))
       add(X1,mark(X2)) -> mark(add(X1,X2))
       len(mark(X)) -> mark(len(X))
       proper(0()) -> ok(0())
       proper(s(X)) -> s(proper(X))
       proper(nil()) -> ok(nil())
       proper(cons(X1,X2)) -> cons(proper(X1),proper(X2))
       proper(fst(X1,X2)) -> fst(proper(X1),proper(X2))
       proper(from(X)) -> from(proper(X))
       proper(add(X1,X2)) -> add(proper(X1),proper(X2))
       proper(len(X)) -> len(proper(X))
       s(ok(X)) -> ok(s(X))
       cons(ok(X1),ok(X2)) -> ok(cons(X1,X2))
       fst(ok(X1),ok(X2)) -> ok(fst(X1,X2))
       from(ok(X)) -> ok(from(X))
       add(ok(X1),ok(X2)) -> ok(add(X1,X2))
       len(ok(X)) -> ok(len(X))
       top(mark(X)) -> top(proper(X))
       top(ok(X)) -> top(active(X))
     Matrix Interpretation Processor:
      dimension: 1
      interpretation:
       [from#](x0) = x0 + 1,
       
       [top](x0) = 0,
       
       [ok](x0) = x0 + 1,
       
       [proper](x0) = 1,
       
       [len](x0) = x0,
       
       [add](x0, x1) = x1,
       
       [from](x0) = x0,
       
       [cons](x0, x1) = x0,
       
       [s](x0) = x0,
       
       [mark](x0) = 0,
       
       [nil] = 0,
       
       [active](x0) = x0,
       
       [fst](x0, x1) = x0,
       
       [0] = 0
      orientation:
       from#(ok(X)) = X + 2 >= X + 1 = from#(X)
       
       active(fst(0(),Z)) = 0 >= 0 = mark(nil())
       
       active(fst(s(X),cons(Y,Z))) = X >= 0 = mark(cons(Y,fst(X,Z)))
       
       active(from(X)) = X >= 0 = mark(cons(X,from(s(X))))
       
       active(add(0(),X)) = X >= 0 = mark(X)
       
       active(add(s(X),Y)) = Y >= 0 = mark(s(add(X,Y)))
       
       active(len(nil())) = 0 >= 0 = mark(0())
       
       active(len(cons(X,Z))) = X >= 0 = mark(s(len(Z)))
       
       active(cons(X1,X2)) = X1 >= X1 = cons(active(X1),X2)
       
       active(fst(X1,X2)) = X1 >= X1 = fst(active(X1),X2)
       
       active(fst(X1,X2)) = X1 >= X1 = fst(X1,active(X2))
       
       active(from(X)) = X >= X = from(active(X))
       
       active(add(X1,X2)) = X2 >= X2 = add(active(X1),X2)
       
       active(add(X1,X2)) = X2 >= X2 = add(X1,active(X2))
       
       active(len(X)) = X >= X = len(active(X))
       
       cons(mark(X1),X2) = 0 >= 0 = mark(cons(X1,X2))
       
       fst(mark(X1),X2) = 0 >= 0 = mark(fst(X1,X2))
       
       fst(X1,mark(X2)) = X1 >= 0 = mark(fst(X1,X2))
       
       from(mark(X)) = 0 >= 0 = mark(from(X))
       
       add(mark(X1),X2) = X2 >= 0 = mark(add(X1,X2))
       
       add(X1,mark(X2)) = 0 >= 0 = mark(add(X1,X2))
       
       len(mark(X)) = 0 >= 0 = mark(len(X))
       
       proper(0()) = 1 >= 1 = ok(0())
       
       proper(s(X)) = 1 >= 1 = s(proper(X))
       
       proper(nil()) = 1 >= 1 = ok(nil())
       
       proper(cons(X1,X2)) = 1 >= 1 = cons(proper(X1),proper(X2))
       
       proper(fst(X1,X2)) = 1 >= 1 = fst(proper(X1),proper(X2))
       
       proper(from(X)) = 1 >= 1 = from(proper(X))
       
       proper(add(X1,X2)) = 1 >= 1 = add(proper(X1),proper(X2))
       
       proper(len(X)) = 1 >= 1 = len(proper(X))
       
       s(ok(X)) = X + 1 >= X + 1 = ok(s(X))
       
       cons(ok(X1),ok(X2)) = X1 + 1 >= X1 + 1 = ok(cons(X1,X2))
       
       fst(ok(X1),ok(X2)) = X1 + 1 >= X1 + 1 = ok(fst(X1,X2))
       
       from(ok(X)) = X + 1 >= X + 1 = ok(from(X))
       
       add(ok(X1),ok(X2)) = X2 + 1 >= X2 + 1 = ok(add(X1,X2))
       
       len(ok(X)) = X + 1 >= X + 1 = ok(len(X))
       
       top(mark(X)) = 0 >= 0 = top(proper(X))
       
       top(ok(X)) = 0 >= 0 = top(active(X))
      problem:
       DPs:
        
       TRS:
        active(fst(0(),Z)) -> mark(nil())
        active(fst(s(X),cons(Y,Z))) -> mark(cons(Y,fst(X,Z)))
        active(from(X)) -> mark(cons(X,from(s(X))))
        active(add(0(),X)) -> mark(X)
        active(add(s(X),Y)) -> mark(s(add(X,Y)))
        active(len(nil())) -> mark(0())
        active(len(cons(X,Z))) -> mark(s(len(Z)))
        active(cons(X1,X2)) -> cons(active(X1),X2)
        active(fst(X1,X2)) -> fst(active(X1),X2)
        active(fst(X1,X2)) -> fst(X1,active(X2))
        active(from(X)) -> from(active(X))
        active(add(X1,X2)) -> add(active(X1),X2)
        active(add(X1,X2)) -> add(X1,active(X2))
        active(len(X)) -> len(active(X))
        cons(mark(X1),X2) -> mark(cons(X1,X2))
        fst(mark(X1),X2) -> mark(fst(X1,X2))
        fst(X1,mark(X2)) -> mark(fst(X1,X2))
        from(mark(X)) -> mark(from(X))
        add(mark(X1),X2) -> mark(add(X1,X2))
        add(X1,mark(X2)) -> mark(add(X1,X2))
        len(mark(X)) -> mark(len(X))
        proper(0()) -> ok(0())
        proper(s(X)) -> s(proper(X))
        proper(nil()) -> ok(nil())
        proper(cons(X1,X2)) -> cons(proper(X1),proper(X2))
        proper(fst(X1,X2)) -> fst(proper(X1),proper(X2))
        proper(from(X)) -> from(proper(X))
        proper(add(X1,X2)) -> add(proper(X1),proper(X2))
        proper(len(X)) -> len(proper(X))
        s(ok(X)) -> ok(s(X))
        cons(ok(X1),ok(X2)) -> ok(cons(X1,X2))
        fst(ok(X1),ok(X2)) -> ok(fst(X1,X2))
        from(ok(X)) -> ok(from(X))
        add(ok(X1),ok(X2)) -> ok(add(X1,X2))
        len(ok(X)) -> ok(len(X))
        top(mark(X)) -> top(proper(X))
        top(ok(X)) -> top(active(X))
      Qed
    
    DPs:
     fst#(mark(X1),X2) -> fst#(X1,X2)
     fst#(X1,mark(X2)) -> fst#(X1,X2)
     fst#(ok(X1),ok(X2)) -> fst#(X1,X2)
    TRS:
     active(fst(0(),Z)) -> mark(nil())
     active(fst(s(X),cons(Y,Z))) -> mark(cons(Y,fst(X,Z)))
     active(from(X)) -> mark(cons(X,from(s(X))))
     active(add(0(),X)) -> mark(X)
     active(add(s(X),Y)) -> mark(s(add(X,Y)))
     active(len(nil())) -> mark(0())
     active(len(cons(X,Z))) -> mark(s(len(Z)))
     active(cons(X1,X2)) -> cons(active(X1),X2)
     active(fst(X1,X2)) -> fst(active(X1),X2)
     active(fst(X1,X2)) -> fst(X1,active(X2))
     active(from(X)) -> from(active(X))
     active(add(X1,X2)) -> add(active(X1),X2)
     active(add(X1,X2)) -> add(X1,active(X2))
     active(len(X)) -> len(active(X))
     cons(mark(X1),X2) -> mark(cons(X1,X2))
     fst(mark(X1),X2) -> mark(fst(X1,X2))
     fst(X1,mark(X2)) -> mark(fst(X1,X2))
     from(mark(X)) -> mark(from(X))
     add(mark(X1),X2) -> mark(add(X1,X2))
     add(X1,mark(X2)) -> mark(add(X1,X2))
     len(mark(X)) -> mark(len(X))
     proper(0()) -> ok(0())
     proper(s(X)) -> s(proper(X))
     proper(nil()) -> ok(nil())
     proper(cons(X1,X2)) -> cons(proper(X1),proper(X2))
     proper(fst(X1,X2)) -> fst(proper(X1),proper(X2))
     proper(from(X)) -> from(proper(X))
     proper(add(X1,X2)) -> add(proper(X1),proper(X2))
     proper(len(X)) -> len(proper(X))
     s(ok(X)) -> ok(s(X))
     cons(ok(X1),ok(X2)) -> ok(cons(X1,X2))
     fst(ok(X1),ok(X2)) -> ok(fst(X1,X2))
     from(ok(X)) -> ok(from(X))
     add(ok(X1),ok(X2)) -> ok(add(X1,X2))
     len(ok(X)) -> ok(len(X))
     top(mark(X)) -> top(proper(X))
     top(ok(X)) -> top(active(X))
    Matrix Interpretation Processor:
     dimension: 1
     interpretation:
      [fst#](x0, x1) = x0,
      
      [top](x0) = 0,
      
      [ok](x0) = x0 + 1,
      
      [proper](x0) = 1,
      
      [len](x0) = x0,
      
      [add](x0, x1) = x1,
      
      [from](x0) = x0,
      
      [cons](x0, x1) = x1,
      
      [s](x0) = x0,
      
      [mark](x0) = x0,
      
      [nil] = 0,
      
      [active](x0) = x0,
      
      [fst](x0, x1) = x1,
      
      [0] = 0
     orientation:
      fst#(mark(X1),X2) = X1 >= X1 = fst#(X1,X2)
      
      fst#(X1,mark(X2)) = X1 >= X1 = fst#(X1,X2)
      
      fst#(ok(X1),ok(X2)) = X1 + 1 >= X1 = fst#(X1,X2)
      
      active(fst(0(),Z)) = Z >= 0 = mark(nil())
      
      active(fst(s(X),cons(Y,Z))) = Z >= Z = mark(cons(Y,fst(X,Z)))
      
      active(from(X)) = X >= X = mark(cons(X,from(s(X))))
      
      active(add(0(),X)) = X >= X = mark(X)
      
      active(add(s(X),Y)) = Y >= Y = mark(s(add(X,Y)))
      
      active(len(nil())) = 0 >= 0 = mark(0())
      
      active(len(cons(X,Z))) = Z >= Z = mark(s(len(Z)))
      
      active(cons(X1,X2)) = X2 >= X2 = cons(active(X1),X2)
      
      active(fst(X1,X2)) = X2 >= X2 = fst(active(X1),X2)
      
      active(fst(X1,X2)) = X2 >= X2 = fst(X1,active(X2))
      
      active(from(X)) = X >= X = from(active(X))
      
      active(add(X1,X2)) = X2 >= X2 = add(active(X1),X2)
      
      active(add(X1,X2)) = X2 >= X2 = add(X1,active(X2))
      
      active(len(X)) = X >= X = len(active(X))
      
      cons(mark(X1),X2) = X2 >= X2 = mark(cons(X1,X2))
      
      fst(mark(X1),X2) = X2 >= X2 = mark(fst(X1,X2))
      
      fst(X1,mark(X2)) = X2 >= X2 = mark(fst(X1,X2))
      
      from(mark(X)) = X >= X = mark(from(X))
      
      add(mark(X1),X2) = X2 >= X2 = mark(add(X1,X2))
      
      add(X1,mark(X2)) = X2 >= X2 = mark(add(X1,X2))
      
      len(mark(X)) = X >= X = mark(len(X))
      
      proper(0()) = 1 >= 1 = ok(0())
      
      proper(s(X)) = 1 >= 1 = s(proper(X))
      
      proper(nil()) = 1 >= 1 = ok(nil())
      
      proper(cons(X1,X2)) = 1 >= 1 = cons(proper(X1),proper(X2))
      
      proper(fst(X1,X2)) = 1 >= 1 = fst(proper(X1),proper(X2))
      
      proper(from(X)) = 1 >= 1 = from(proper(X))
      
      proper(add(X1,X2)) = 1 >= 1 = add(proper(X1),proper(X2))
      
      proper(len(X)) = 1 >= 1 = len(proper(X))
      
      s(ok(X)) = X + 1 >= X + 1 = ok(s(X))
      
      cons(ok(X1),ok(X2)) = X2 + 1 >= X2 + 1 = ok(cons(X1,X2))
      
      fst(ok(X1),ok(X2)) = X2 + 1 >= X2 + 1 = ok(fst(X1,X2))
      
      from(ok(X)) = X + 1 >= X + 1 = ok(from(X))
      
      add(ok(X1),ok(X2)) = X2 + 1 >= X2 + 1 = ok(add(X1,X2))
      
      len(ok(X)) = X + 1 >= X + 1 = ok(len(X))
      
      top(mark(X)) = 0 >= 0 = top(proper(X))
      
      top(ok(X)) = 0 >= 0 = top(active(X))
     problem:
      DPs:
       fst#(mark(X1),X2) -> fst#(X1,X2)
       fst#(X1,mark(X2)) -> fst#(X1,X2)
      TRS:
       active(fst(0(),Z)) -> mark(nil())
       active(fst(s(X),cons(Y,Z))) -> mark(cons(Y,fst(X,Z)))
       active(from(X)) -> mark(cons(X,from(s(X))))
       active(add(0(),X)) -> mark(X)
       active(add(s(X),Y)) -> mark(s(add(X,Y)))
       active(len(nil())) -> mark(0())
       active(len(cons(X,Z))) -> mark(s(len(Z)))
       active(cons(X1,X2)) -> cons(active(X1),X2)
       active(fst(X1,X2)) -> fst(active(X1),X2)
       active(fst(X1,X2)) -> fst(X1,active(X2))
       active(from(X)) -> from(active(X))
       active(add(X1,X2)) -> add(active(X1),X2)
       active(add(X1,X2)) -> add(X1,active(X2))
       active(len(X)) -> len(active(X))
       cons(mark(X1),X2) -> mark(cons(X1,X2))
       fst(mark(X1),X2) -> mark(fst(X1,X2))
       fst(X1,mark(X2)) -> mark(fst(X1,X2))
       from(mark(X)) -> mark(from(X))
       add(mark(X1),X2) -> mark(add(X1,X2))
       add(X1,mark(X2)) -> mark(add(X1,X2))
       len(mark(X)) -> mark(len(X))
       proper(0()) -> ok(0())
       proper(s(X)) -> s(proper(X))
       proper(nil()) -> ok(nil())
       proper(cons(X1,X2)) -> cons(proper(X1),proper(X2))
       proper(fst(X1,X2)) -> fst(proper(X1),proper(X2))
       proper(from(X)) -> from(proper(X))
       proper(add(X1,X2)) -> add(proper(X1),proper(X2))
       proper(len(X)) -> len(proper(X))
       s(ok(X)) -> ok(s(X))
       cons(ok(X1),ok(X2)) -> ok(cons(X1,X2))
       fst(ok(X1),ok(X2)) -> ok(fst(X1,X2))
       from(ok(X)) -> ok(from(X))
       add(ok(X1),ok(X2)) -> ok(add(X1,X2))
       len(ok(X)) -> ok(len(X))
       top(mark(X)) -> top(proper(X))
       top(ok(X)) -> top(active(X))
     Matrix Interpretation Processor:
      dimension: 1
      interpretation:
       [fst#](x0, x1) = x0 + x1 + 1,
       
       [top](x0) = 0,
       
       [ok](x0) = x0,
       
       [proper](x0) = x0,
       
       [len](x0) = x0 + 1,
       
       [add](x0, x1) = x0 + x1,
       
       [from](x0) = x0,
       
       [cons](x0, x1) = x0,
       
       [s](x0) = 1,
       
       [mark](x0) = x0 + 1,
       
       [nil] = 0,
       
       [active](x0) = x0 + 1,
       
       [fst](x0, x1) = x0 + x1,
       
       [0] = 0
      orientation:
       fst#(mark(X1),X2) = X1 + X2 + 2 >= X1 + X2 + 1 = fst#(X1,X2)
       
       fst#(X1,mark(X2)) = X1 + X2 + 2 >= X1 + X2 + 1 = fst#(X1,X2)
       
       active(fst(0(),Z)) = Z + 1 >= 1 = mark(nil())
       
       active(fst(s(X),cons(Y,Z))) = Y + 2 >= Y + 1 = mark(cons(Y,fst(X,Z)))
       
       active(from(X)) = X + 1 >= X + 1 = mark(cons(X,from(s(X))))
       
       active(add(0(),X)) = X + 1 >= X + 1 = mark(X)
       
       active(add(s(X),Y)) = Y + 2 >= 2 = mark(s(add(X,Y)))
       
       active(len(nil())) = 2 >= 1 = mark(0())
       
       active(len(cons(X,Z))) = X + 2 >= 2 = mark(s(len(Z)))
       
       active(cons(X1,X2)) = X1 + 1 >= X1 + 1 = cons(active(X1),X2)
       
       active(fst(X1,X2)) = X1 + X2 + 1 >= X1 + X2 + 1 = fst(active(X1),X2)
       
       active(fst(X1,X2)) = X1 + X2 + 1 >= X1 + X2 + 1 = fst(X1,active(X2))
       
       active(from(X)) = X + 1 >= X + 1 = from(active(X))
       
       active(add(X1,X2)) = X1 + X2 + 1 >= X1 + X2 + 1 = add(active(X1),X2)
       
       active(add(X1,X2)) = X1 + X2 + 1 >= X1 + X2 + 1 = add(X1,active(X2))
       
       active(len(X)) = X + 2 >= X + 2 = len(active(X))
       
       cons(mark(X1),X2) = X1 + 1 >= X1 + 1 = mark(cons(X1,X2))
       
       fst(mark(X1),X2) = X1 + X2 + 1 >= X1 + X2 + 1 = mark(fst(X1,X2))
       
       fst(X1,mark(X2)) = X1 + X2 + 1 >= X1 + X2 + 1 = mark(fst(X1,X2))
       
       from(mark(X)) = X + 1 >= X + 1 = mark(from(X))
       
       add(mark(X1),X2) = X1 + X2 + 1 >= X1 + X2 + 1 = mark(add(X1,X2))
       
       add(X1,mark(X2)) = X1 + X2 + 1 >= X1 + X2 + 1 = mark(add(X1,X2))
       
       len(mark(X)) = X + 2 >= X + 2 = mark(len(X))
       
       proper(0()) = 0 >= 0 = ok(0())
       
       proper(s(X)) = 1 >= 1 = s(proper(X))
       
       proper(nil()) = 0 >= 0 = ok(nil())
       
       proper(cons(X1,X2)) = X1 >= X1 = cons(proper(X1),proper(X2))
       
       proper(fst(X1,X2)) = X1 + X2 >= X1 + X2 = fst(proper(X1),proper(X2))
       
       proper(from(X)) = X >= X = from(proper(X))
       
       proper(add(X1,X2)) = X1 + X2 >= X1 + X2 = add(proper(X1),proper(X2))
       
       proper(len(X)) = X + 1 >= X + 1 = len(proper(X))
       
       s(ok(X)) = 1 >= 1 = ok(s(X))
       
       cons(ok(X1),ok(X2)) = X1 >= X1 = ok(cons(X1,X2))
       
       fst(ok(X1),ok(X2)) = X1 + X2 >= X1 + X2 = ok(fst(X1,X2))
       
       from(ok(X)) = X >= X = ok(from(X))
       
       add(ok(X1),ok(X2)) = X1 + X2 >= X1 + X2 = ok(add(X1,X2))
       
       len(ok(X)) = X + 1 >= X + 1 = ok(len(X))
       
       top(mark(X)) = 0 >= 0 = top(proper(X))
       
       top(ok(X)) = 0 >= 0 = top(active(X))
      problem:
       DPs:
        
       TRS:
        active(fst(0(),Z)) -> mark(nil())
        active(fst(s(X),cons(Y,Z))) -> mark(cons(Y,fst(X,Z)))
        active(from(X)) -> mark(cons(X,from(s(X))))
        active(add(0(),X)) -> mark(X)
        active(add(s(X),Y)) -> mark(s(add(X,Y)))
        active(len(nil())) -> mark(0())
        active(len(cons(X,Z))) -> mark(s(len(Z)))
        active(cons(X1,X2)) -> cons(active(X1),X2)
        active(fst(X1,X2)) -> fst(active(X1),X2)
        active(fst(X1,X2)) -> fst(X1,active(X2))
        active(from(X)) -> from(active(X))
        active(add(X1,X2)) -> add(active(X1),X2)
        active(add(X1,X2)) -> add(X1,active(X2))
        active(len(X)) -> len(active(X))
        cons(mark(X1),X2) -> mark(cons(X1,X2))
        fst(mark(X1),X2) -> mark(fst(X1,X2))
        fst(X1,mark(X2)) -> mark(fst(X1,X2))
        from(mark(X)) -> mark(from(X))
        add(mark(X1),X2) -> mark(add(X1,X2))
        add(X1,mark(X2)) -> mark(add(X1,X2))
        len(mark(X)) -> mark(len(X))
        proper(0()) -> ok(0())
        proper(s(X)) -> s(proper(X))
        proper(nil()) -> ok(nil())
        proper(cons(X1,X2)) -> cons(proper(X1),proper(X2))
        proper(fst(X1,X2)) -> fst(proper(X1),proper(X2))
        proper(from(X)) -> from(proper(X))
        proper(add(X1,X2)) -> add(proper(X1),proper(X2))
        proper(len(X)) -> len(proper(X))
        s(ok(X)) -> ok(s(X))
        cons(ok(X1),ok(X2)) -> ok(cons(X1,X2))
        fst(ok(X1),ok(X2)) -> ok(fst(X1,X2))
        from(ok(X)) -> ok(from(X))
        add(ok(X1),ok(X2)) -> ok(add(X1,X2))
        len(ok(X)) -> ok(len(X))
        top(mark(X)) -> top(proper(X))
        top(ok(X)) -> top(active(X))
      Qed
    
    DPs:
     cons#(mark(X1),X2) -> cons#(X1,X2)
     cons#(ok(X1),ok(X2)) -> cons#(X1,X2)
    TRS:
     active(fst(0(),Z)) -> mark(nil())
     active(fst(s(X),cons(Y,Z))) -> mark(cons(Y,fst(X,Z)))
     active(from(X)) -> mark(cons(X,from(s(X))))
     active(add(0(),X)) -> mark(X)
     active(add(s(X),Y)) -> mark(s(add(X,Y)))
     active(len(nil())) -> mark(0())
     active(len(cons(X,Z))) -> mark(s(len(Z)))
     active(cons(X1,X2)) -> cons(active(X1),X2)
     active(fst(X1,X2)) -> fst(active(X1),X2)
     active(fst(X1,X2)) -> fst(X1,active(X2))
     active(from(X)) -> from(active(X))
     active(add(X1,X2)) -> add(active(X1),X2)
     active(add(X1,X2)) -> add(X1,active(X2))
     active(len(X)) -> len(active(X))
     cons(mark(X1),X2) -> mark(cons(X1,X2))
     fst(mark(X1),X2) -> mark(fst(X1,X2))
     fst(X1,mark(X2)) -> mark(fst(X1,X2))
     from(mark(X)) -> mark(from(X))
     add(mark(X1),X2) -> mark(add(X1,X2))
     add(X1,mark(X2)) -> mark(add(X1,X2))
     len(mark(X)) -> mark(len(X))
     proper(0()) -> ok(0())
     proper(s(X)) -> s(proper(X))
     proper(nil()) -> ok(nil())
     proper(cons(X1,X2)) -> cons(proper(X1),proper(X2))
     proper(fst(X1,X2)) -> fst(proper(X1),proper(X2))
     proper(from(X)) -> from(proper(X))
     proper(add(X1,X2)) -> add(proper(X1),proper(X2))
     proper(len(X)) -> len(proper(X))
     s(ok(X)) -> ok(s(X))
     cons(ok(X1),ok(X2)) -> ok(cons(X1,X2))
     fst(ok(X1),ok(X2)) -> ok(fst(X1,X2))
     from(ok(X)) -> ok(from(X))
     add(ok(X1),ok(X2)) -> ok(add(X1,X2))
     len(ok(X)) -> ok(len(X))
     top(mark(X)) -> top(proper(X))
     top(ok(X)) -> top(active(X))
    Matrix Interpretation Processor:
     dimension: 1
     interpretation:
      [cons#](x0, x1) = x0 + 1,
      
      [top](x0) = 0,
      
      [ok](x0) = x0,
      
      [proper](x0) = x0,
      
      [len](x0) = x0,
      
      [add](x0, x1) = x0 + x1,
      
      [from](x0) = x0,
      
      [cons](x0, x1) = x0,
      
      [s](x0) = 0,
      
      [mark](x0) = x0 + 1,
      
      [nil] = 1,
      
      [active](x0) = x0 + 1,
      
      [fst](x0, x1) = x0 + x1 + 1,
      
      [0] = 0
     orientation:
      cons#(mark(X1),X2) = X1 + 2 >= X1 + 1 = cons#(X1,X2)
      
      cons#(ok(X1),ok(X2)) = X1 + 1 >= X1 + 1 = cons#(X1,X2)
      
      active(fst(0(),Z)) = Z + 2 >= 2 = mark(nil())
      
      active(fst(s(X),cons(Y,Z))) = Y + 2 >= Y + 1 = mark(cons(Y,fst(X,Z)))
      
      active(from(X)) = X + 1 >= X + 1 = mark(cons(X,from(s(X))))
      
      active(add(0(),X)) = X + 1 >= X + 1 = mark(X)
      
      active(add(s(X),Y)) = Y + 1 >= 1 = mark(s(add(X,Y)))
      
      active(len(nil())) = 2 >= 1 = mark(0())
      
      active(len(cons(X,Z))) = X + 1 >= 1 = mark(s(len(Z)))
      
      active(cons(X1,X2)) = X1 + 1 >= X1 + 1 = cons(active(X1),X2)
      
      active(fst(X1,X2)) = X1 + X2 + 2 >= X1 + X2 + 2 = fst(active(X1),X2)
      
      active(fst(X1,X2)) = X1 + X2 + 2 >= X1 + X2 + 2 = fst(X1,active(X2))
      
      active(from(X)) = X + 1 >= X + 1 = from(active(X))
      
      active(add(X1,X2)) = X1 + X2 + 1 >= X1 + X2 + 1 = add(active(X1),X2)
      
      active(add(X1,X2)) = X1 + X2 + 1 >= X1 + X2 + 1 = add(X1,active(X2))
      
      active(len(X)) = X + 1 >= X + 1 = len(active(X))
      
      cons(mark(X1),X2) = X1 + 1 >= X1 + 1 = mark(cons(X1,X2))
      
      fst(mark(X1),X2) = X1 + X2 + 2 >= X1 + X2 + 2 = mark(fst(X1,X2))
      
      fst(X1,mark(X2)) = X1 + X2 + 2 >= X1 + X2 + 2 = mark(fst(X1,X2))
      
      from(mark(X)) = X + 1 >= X + 1 = mark(from(X))
      
      add(mark(X1),X2) = X1 + X2 + 1 >= X1 + X2 + 1 = mark(add(X1,X2))
      
      add(X1,mark(X2)) = X1 + X2 + 1 >= X1 + X2 + 1 = mark(add(X1,X2))
      
      len(mark(X)) = X + 1 >= X + 1 = mark(len(X))
      
      proper(0()) = 0 >= 0 = ok(0())
      
      proper(s(X)) = 0 >= 0 = s(proper(X))
      
      proper(nil()) = 1 >= 1 = ok(nil())
      
      proper(cons(X1,X2)) = X1 >= X1 = cons(proper(X1),proper(X2))
      
      proper(fst(X1,X2)) = X1 + X2 + 1 >= X1 + X2 + 1 = fst(proper(X1),proper(X2))
      
      proper(from(X)) = X >= X = from(proper(X))
      
      proper(add(X1,X2)) = X1 + X2 >= X1 + X2 = add(proper(X1),proper(X2))
      
      proper(len(X)) = X >= X = len(proper(X))
      
      s(ok(X)) = 0 >= 0 = ok(s(X))
      
      cons(ok(X1),ok(X2)) = X1 >= X1 = ok(cons(X1,X2))
      
      fst(ok(X1),ok(X2)) = X1 + X2 + 1 >= X1 + X2 + 1 = ok(fst(X1,X2))
      
      from(ok(X)) = X >= X = ok(from(X))
      
      add(ok(X1),ok(X2)) = X1 + X2 >= X1 + X2 = ok(add(X1,X2))
      
      len(ok(X)) = X >= X = ok(len(X))
      
      top(mark(X)) = 0 >= 0 = top(proper(X))
      
      top(ok(X)) = 0 >= 0 = top(active(X))
     problem:
      DPs:
       cons#(ok(X1),ok(X2)) -> cons#(X1,X2)
      TRS:
       active(fst(0(),Z)) -> mark(nil())
       active(fst(s(X),cons(Y,Z))) -> mark(cons(Y,fst(X,Z)))
       active(from(X)) -> mark(cons(X,from(s(X))))
       active(add(0(),X)) -> mark(X)
       active(add(s(X),Y)) -> mark(s(add(X,Y)))
       active(len(nil())) -> mark(0())
       active(len(cons(X,Z))) -> mark(s(len(Z)))
       active(cons(X1,X2)) -> cons(active(X1),X2)
       active(fst(X1,X2)) -> fst(active(X1),X2)
       active(fst(X1,X2)) -> fst(X1,active(X2))
       active(from(X)) -> from(active(X))
       active(add(X1,X2)) -> add(active(X1),X2)
       active(add(X1,X2)) -> add(X1,active(X2))
       active(len(X)) -> len(active(X))
       cons(mark(X1),X2) -> mark(cons(X1,X2))
       fst(mark(X1),X2) -> mark(fst(X1,X2))
       fst(X1,mark(X2)) -> mark(fst(X1,X2))
       from(mark(X)) -> mark(from(X))
       add(mark(X1),X2) -> mark(add(X1,X2))
       add(X1,mark(X2)) -> mark(add(X1,X2))
       len(mark(X)) -> mark(len(X))
       proper(0()) -> ok(0())
       proper(s(X)) -> s(proper(X))
       proper(nil()) -> ok(nil())
       proper(cons(X1,X2)) -> cons(proper(X1),proper(X2))
       proper(fst(X1,X2)) -> fst(proper(X1),proper(X2))
       proper(from(X)) -> from(proper(X))
       proper(add(X1,X2)) -> add(proper(X1),proper(X2))
       proper(len(X)) -> len(proper(X))
       s(ok(X)) -> ok(s(X))
       cons(ok(X1),ok(X2)) -> ok(cons(X1,X2))
       fst(ok(X1),ok(X2)) -> ok(fst(X1,X2))
       from(ok(X)) -> ok(from(X))
       add(ok(X1),ok(X2)) -> ok(add(X1,X2))
       len(ok(X)) -> ok(len(X))
       top(mark(X)) -> top(proper(X))
       top(ok(X)) -> top(active(X))
     Matrix Interpretation Processor:
      dimension: 1
      interpretation:
       [cons#](x0, x1) = x1 + 1,
       
       [top](x0) = 0,
       
       [ok](x0) = x0 + 1,
       
       [proper](x0) = 1,
       
       [len](x0) = x0,
       
       [add](x0, x1) = x0,
       
       [from](x0) = x0,
       
       [cons](x0, x1) = x1,
       
       [s](x0) = x0,
       
       [mark](x0) = 0,
       
       [nil] = 0,
       
       [active](x0) = x0 + 1,
       
       [fst](x0, x1) = x0,
       
       [0] = 0
      orientation:
       cons#(ok(X1),ok(X2)) = X2 + 2 >= X2 + 1 = cons#(X1,X2)
       
       active(fst(0(),Z)) = 1 >= 0 = mark(nil())
       
       active(fst(s(X),cons(Y,Z))) = X + 1 >= 0 = mark(cons(Y,fst(X,Z)))
       
       active(from(X)) = X + 1 >= 0 = mark(cons(X,from(s(X))))
       
       active(add(0(),X)) = 1 >= 0 = mark(X)
       
       active(add(s(X),Y)) = X + 1 >= 0 = mark(s(add(X,Y)))
       
       active(len(nil())) = 1 >= 0 = mark(0())
       
       active(len(cons(X,Z))) = Z + 1 >= 0 = mark(s(len(Z)))
       
       active(cons(X1,X2)) = X2 + 1 >= X2 = cons(active(X1),X2)
       
       active(fst(X1,X2)) = X1 + 1 >= X1 + 1 = fst(active(X1),X2)
       
       active(fst(X1,X2)) = X1 + 1 >= X1 = fst(X1,active(X2))
       
       active(from(X)) = X + 1 >= X + 1 = from(active(X))
       
       active(add(X1,X2)) = X1 + 1 >= X1 + 1 = add(active(X1),X2)
       
       active(add(X1,X2)) = X1 + 1 >= X1 = add(X1,active(X2))
       
       active(len(X)) = X + 1 >= X + 1 = len(active(X))
       
       cons(mark(X1),X2) = X2 >= 0 = mark(cons(X1,X2))
       
       fst(mark(X1),X2) = 0 >= 0 = mark(fst(X1,X2))
       
       fst(X1,mark(X2)) = X1 >= 0 = mark(fst(X1,X2))
       
       from(mark(X)) = 0 >= 0 = mark(from(X))
       
       add(mark(X1),X2) = 0 >= 0 = mark(add(X1,X2))
       
       add(X1,mark(X2)) = X1 >= 0 = mark(add(X1,X2))
       
       len(mark(X)) = 0 >= 0 = mark(len(X))
       
       proper(0()) = 1 >= 1 = ok(0())
       
       proper(s(X)) = 1 >= 1 = s(proper(X))
       
       proper(nil()) = 1 >= 1 = ok(nil())
       
       proper(cons(X1,X2)) = 1 >= 1 = cons(proper(X1),proper(X2))
       
       proper(fst(X1,X2)) = 1 >= 1 = fst(proper(X1),proper(X2))
       
       proper(from(X)) = 1 >= 1 = from(proper(X))
       
       proper(add(X1,X2)) = 1 >= 1 = add(proper(X1),proper(X2))
       
       proper(len(X)) = 1 >= 1 = len(proper(X))
       
       s(ok(X)) = X + 1 >= X + 1 = ok(s(X))
       
       cons(ok(X1),ok(X2)) = X2 + 1 >= X2 + 1 = ok(cons(X1,X2))
       
       fst(ok(X1),ok(X2)) = X1 + 1 >= X1 + 1 = ok(fst(X1,X2))
       
       from(ok(X)) = X + 1 >= X + 1 = ok(from(X))
       
       add(ok(X1),ok(X2)) = X1 + 1 >= X1 + 1 = ok(add(X1,X2))
       
       len(ok(X)) = X + 1 >= X + 1 = ok(len(X))
       
       top(mark(X)) = 0 >= 0 = top(proper(X))
       
       top(ok(X)) = 0 >= 0 = top(active(X))
      problem:
       DPs:
        
       TRS:
        active(fst(0(),Z)) -> mark(nil())
        active(fst(s(X),cons(Y,Z))) -> mark(cons(Y,fst(X,Z)))
        active(from(X)) -> mark(cons(X,from(s(X))))
        active(add(0(),X)) -> mark(X)
        active(add(s(X),Y)) -> mark(s(add(X,Y)))
        active(len(nil())) -> mark(0())
        active(len(cons(X,Z))) -> mark(s(len(Z)))
        active(cons(X1,X2)) -> cons(active(X1),X2)
        active(fst(X1,X2)) -> fst(active(X1),X2)
        active(fst(X1,X2)) -> fst(X1,active(X2))
        active(from(X)) -> from(active(X))
        active(add(X1,X2)) -> add(active(X1),X2)
        active(add(X1,X2)) -> add(X1,active(X2))
        active(len(X)) -> len(active(X))
        cons(mark(X1),X2) -> mark(cons(X1,X2))
        fst(mark(X1),X2) -> mark(fst(X1,X2))
        fst(X1,mark(X2)) -> mark(fst(X1,X2))
        from(mark(X)) -> mark(from(X))
        add(mark(X1),X2) -> mark(add(X1,X2))
        add(X1,mark(X2)) -> mark(add(X1,X2))
        len(mark(X)) -> mark(len(X))
        proper(0()) -> ok(0())
        proper(s(X)) -> s(proper(X))
        proper(nil()) -> ok(nil())
        proper(cons(X1,X2)) -> cons(proper(X1),proper(X2))
        proper(fst(X1,X2)) -> fst(proper(X1),proper(X2))
        proper(from(X)) -> from(proper(X))
        proper(add(X1,X2)) -> add(proper(X1),proper(X2))
        proper(len(X)) -> len(proper(X))
        s(ok(X)) -> ok(s(X))
        cons(ok(X1),ok(X2)) -> ok(cons(X1,X2))
        fst(ok(X1),ok(X2)) -> ok(fst(X1,X2))
        from(ok(X)) -> ok(from(X))
        add(ok(X1),ok(X2)) -> ok(add(X1,X2))
        len(ok(X)) -> ok(len(X))
        top(mark(X)) -> top(proper(X))
        top(ok(X)) -> top(active(X))
      Qed
    
    DPs:
     s#(ok(X)) -> s#(X)
    TRS:
     active(fst(0(),Z)) -> mark(nil())
     active(fst(s(X),cons(Y,Z))) -> mark(cons(Y,fst(X,Z)))
     active(from(X)) -> mark(cons(X,from(s(X))))
     active(add(0(),X)) -> mark(X)
     active(add(s(X),Y)) -> mark(s(add(X,Y)))
     active(len(nil())) -> mark(0())
     active(len(cons(X,Z))) -> mark(s(len(Z)))
     active(cons(X1,X2)) -> cons(active(X1),X2)
     active(fst(X1,X2)) -> fst(active(X1),X2)
     active(fst(X1,X2)) -> fst(X1,active(X2))
     active(from(X)) -> from(active(X))
     active(add(X1,X2)) -> add(active(X1),X2)
     active(add(X1,X2)) -> add(X1,active(X2))
     active(len(X)) -> len(active(X))
     cons(mark(X1),X2) -> mark(cons(X1,X2))
     fst(mark(X1),X2) -> mark(fst(X1,X2))
     fst(X1,mark(X2)) -> mark(fst(X1,X2))
     from(mark(X)) -> mark(from(X))
     add(mark(X1),X2) -> mark(add(X1,X2))
     add(X1,mark(X2)) -> mark(add(X1,X2))
     len(mark(X)) -> mark(len(X))
     proper(0()) -> ok(0())
     proper(s(X)) -> s(proper(X))
     proper(nil()) -> ok(nil())
     proper(cons(X1,X2)) -> cons(proper(X1),proper(X2))
     proper(fst(X1,X2)) -> fst(proper(X1),proper(X2))
     proper(from(X)) -> from(proper(X))
     proper(add(X1,X2)) -> add(proper(X1),proper(X2))
     proper(len(X)) -> len(proper(X))
     s(ok(X)) -> ok(s(X))
     cons(ok(X1),ok(X2)) -> ok(cons(X1,X2))
     fst(ok(X1),ok(X2)) -> ok(fst(X1,X2))
     from(ok(X)) -> ok(from(X))
     add(ok(X1),ok(X2)) -> ok(add(X1,X2))
     len(ok(X)) -> ok(len(X))
     top(mark(X)) -> top(proper(X))
     top(ok(X)) -> top(active(X))
    Matrix Interpretation Processor:
     dimension: 1
     interpretation:
      [s#](x0) = x0 + 1,
      
      [top](x0) = 0,
      
      [ok](x0) = x0 + 1,
      
      [proper](x0) = 1,
      
      [len](x0) = x0,
      
      [add](x0, x1) = x1,
      
      [from](x0) = x0,
      
      [cons](x0, x1) = x0,
      
      [s](x0) = x0,
      
      [mark](x0) = 0,
      
      [nil] = 0,
      
      [active](x0) = x0,
      
      [fst](x0, x1) = x0,
      
      [0] = 0
     orientation:
      s#(ok(X)) = X + 2 >= X + 1 = s#(X)
      
      active(fst(0(),Z)) = 0 >= 0 = mark(nil())
      
      active(fst(s(X),cons(Y,Z))) = X >= 0 = mark(cons(Y,fst(X,Z)))
      
      active(from(X)) = X >= 0 = mark(cons(X,from(s(X))))
      
      active(add(0(),X)) = X >= 0 = mark(X)
      
      active(add(s(X),Y)) = Y >= 0 = mark(s(add(X,Y)))
      
      active(len(nil())) = 0 >= 0 = mark(0())
      
      active(len(cons(X,Z))) = X >= 0 = mark(s(len(Z)))
      
      active(cons(X1,X2)) = X1 >= X1 = cons(active(X1),X2)
      
      active(fst(X1,X2)) = X1 >= X1 = fst(active(X1),X2)
      
      active(fst(X1,X2)) = X1 >= X1 = fst(X1,active(X2))
      
      active(from(X)) = X >= X = from(active(X))
      
      active(add(X1,X2)) = X2 >= X2 = add(active(X1),X2)
      
      active(add(X1,X2)) = X2 >= X2 = add(X1,active(X2))
      
      active(len(X)) = X >= X = len(active(X))
      
      cons(mark(X1),X2) = 0 >= 0 = mark(cons(X1,X2))
      
      fst(mark(X1),X2) = 0 >= 0 = mark(fst(X1,X2))
      
      fst(X1,mark(X2)) = X1 >= 0 = mark(fst(X1,X2))
      
      from(mark(X)) = 0 >= 0 = mark(from(X))
      
      add(mark(X1),X2) = X2 >= 0 = mark(add(X1,X2))
      
      add(X1,mark(X2)) = 0 >= 0 = mark(add(X1,X2))
      
      len(mark(X)) = 0 >= 0 = mark(len(X))
      
      proper(0()) = 1 >= 1 = ok(0())
      
      proper(s(X)) = 1 >= 1 = s(proper(X))
      
      proper(nil()) = 1 >= 1 = ok(nil())
      
      proper(cons(X1,X2)) = 1 >= 1 = cons(proper(X1),proper(X2))
      
      proper(fst(X1,X2)) = 1 >= 1 = fst(proper(X1),proper(X2))
      
      proper(from(X)) = 1 >= 1 = from(proper(X))
      
      proper(add(X1,X2)) = 1 >= 1 = add(proper(X1),proper(X2))
      
      proper(len(X)) = 1 >= 1 = len(proper(X))
      
      s(ok(X)) = X + 1 >= X + 1 = ok(s(X))
      
      cons(ok(X1),ok(X2)) = X1 + 1 >= X1 + 1 = ok(cons(X1,X2))
      
      fst(ok(X1),ok(X2)) = X1 + 1 >= X1 + 1 = ok(fst(X1,X2))
      
      from(ok(X)) = X + 1 >= X + 1 = ok(from(X))
      
      add(ok(X1),ok(X2)) = X2 + 1 >= X2 + 1 = ok(add(X1,X2))
      
      len(ok(X)) = X + 1 >= X + 1 = ok(len(X))
      
      top(mark(X)) = 0 >= 0 = top(proper(X))
      
      top(ok(X)) = 0 >= 0 = top(active(X))
     problem:
      DPs:
       
      TRS:
       active(fst(0(),Z)) -> mark(nil())
       active(fst(s(X),cons(Y,Z))) -> mark(cons(Y,fst(X,Z)))
       active(from(X)) -> mark(cons(X,from(s(X))))
       active(add(0(),X)) -> mark(X)
       active(add(s(X),Y)) -> mark(s(add(X,Y)))
       active(len(nil())) -> mark(0())
       active(len(cons(X,Z))) -> mark(s(len(Z)))
       active(cons(X1,X2)) -> cons(active(X1),X2)
       active(fst(X1,X2)) -> fst(active(X1),X2)
       active(fst(X1,X2)) -> fst(X1,active(X2))
       active(from(X)) -> from(active(X))
       active(add(X1,X2)) -> add(active(X1),X2)
       active(add(X1,X2)) -> add(X1,active(X2))
       active(len(X)) -> len(active(X))
       cons(mark(X1),X2) -> mark(cons(X1,X2))
       fst(mark(X1),X2) -> mark(fst(X1,X2))
       fst(X1,mark(X2)) -> mark(fst(X1,X2))
       from(mark(X)) -> mark(from(X))
       add(mark(X1),X2) -> mark(add(X1,X2))
       add(X1,mark(X2)) -> mark(add(X1,X2))
       len(mark(X)) -> mark(len(X))
       proper(0()) -> ok(0())
       proper(s(X)) -> s(proper(X))
       proper(nil()) -> ok(nil())
       proper(cons(X1,X2)) -> cons(proper(X1),proper(X2))
       proper(fst(X1,X2)) -> fst(proper(X1),proper(X2))
       proper(from(X)) -> from(proper(X))
       proper(add(X1,X2)) -> add(proper(X1),proper(X2))
       proper(len(X)) -> len(proper(X))
       s(ok(X)) -> ok(s(X))
       cons(ok(X1),ok(X2)) -> ok(cons(X1,X2))
       fst(ok(X1),ok(X2)) -> ok(fst(X1,X2))
       from(ok(X)) -> ok(from(X))
       add(ok(X1),ok(X2)) -> ok(add(X1,X2))
       len(ok(X)) -> ok(len(X))
       top(mark(X)) -> top(proper(X))
       top(ok(X)) -> top(active(X))
     Qed