MAYBE
TRS:
 {                     sieve(mark(X)) -> mark(sieve(X)),
                         sieve(ok(X)) -> ok(sieve(X)),
                        from(mark(X)) -> mark(from(X)),
                          from(ok(X)) -> ok(from(X)),
                           s(mark(X)) -> mark(s(X)),
                             s(ok(X)) -> ok(s(X)),
                     active(sieve(X)) -> sieve(active(X)),
            active(sieve(cons(X, Y))) -> mark(cons(X, filter(X, sieve(Y)))),
                      active(from(X)) -> mark(cons(X, from(s(X)))),
                      active(from(X)) -> from(active(X)),
                         active(s(X)) -> s(active(X)),
                     active(primes()) -> mark(sieve(from(s(s(0()))))),
                 active(cons(X1, X2)) -> cons(active(X1), X2),
                      active(head(X)) -> head(active(X)),
             active(head(cons(X, Y))) -> mark(X),
                      active(tail(X)) -> tail(active(X)),
             active(tail(cons(X, Y))) -> mark(Y),
               active(if(X1, X2, X3)) -> if(active(X1), X2, X3),
             active(if(true(), X, Y)) -> mark(X),
            active(if(false(), X, Y)) -> mark(Y),
              active(divides(X1, X2)) -> divides(X1, active(X2)),
              active(divides(X1, X2)) -> divides(active(X1), X2),
               active(filter(X1, X2)) -> filter(X1, active(X2)),
               active(filter(X1, X2)) -> filter(active(X1), X2),
  active(filter(s(s(X)), cons(Y, Z))) -> mark(if(divides(s(s(X)), Y), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y))))),
                   cons(mark(X1), X2) -> mark(cons(X1, X2)),
                 cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)),
                        head(mark(X)) -> mark(head(X)),
                          head(ok(X)) -> ok(head(X)),
                        tail(mark(X)) -> mark(tail(X)),
                          tail(ok(X)) -> ok(tail(X)),
                 if(mark(X1), X2, X3) -> mark(if(X1, X2, X3)),
           if(ok(X1), ok(X2), ok(X3)) -> ok(if(X1, X2, X3)),
                divides(X1, mark(X2)) -> mark(divides(X1, X2)),
                divides(mark(X1), X2) -> mark(divides(X1, X2)),
              divides(ok(X1), ok(X2)) -> ok(divides(X1, X2)),
                 filter(X1, mark(X2)) -> mark(filter(X1, X2)),
                 filter(mark(X1), X2) -> mark(filter(X1, X2)),
               filter(ok(X1), ok(X2)) -> ok(filter(X1, X2)),
                     proper(sieve(X)) -> sieve(proper(X)),
                      proper(from(X)) -> from(proper(X)),
                         proper(s(X)) -> s(proper(X)),
                          proper(0()) -> ok(0()),
                     proper(primes()) -> ok(primes()),
                 proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)),
                      proper(head(X)) -> head(proper(X)),
                      proper(tail(X)) -> tail(proper(X)),
               proper(if(X1, X2, X3)) -> if(proper(X1), proper(X2), proper(X3)),
                       proper(true()) -> ok(true()),
                      proper(false()) -> ok(false()),
              proper(divides(X1, X2)) -> divides(proper(X1), proper(X2)),
               proper(filter(X1, X2)) -> filter(proper(X1), proper(X2)),
                         top(mark(X)) -> top(proper(X)),
                           top(ok(X)) -> top(active(X))}
 DP:
  Strict:
   {                     sieve#(mark(X)) -> sieve#(X),
                           sieve#(ok(X)) -> sieve#(X),
                          from#(mark(X)) -> from#(X),
                            from#(ok(X)) -> from#(X),
                             s#(mark(X)) -> s#(X),
                               s#(ok(X)) -> s#(X),
                       active#(sieve(X)) -> sieve#(active(X)),
                       active#(sieve(X)) -> active#(X),
              active#(sieve(cons(X, Y))) -> sieve#(Y),
              active#(sieve(cons(X, Y))) -> cons#(X, filter(X, sieve(Y))),
              active#(sieve(cons(X, Y))) -> filter#(X, sieve(Y)),
                        active#(from(X)) -> from#(s(X)),
                        active#(from(X)) -> from#(active(X)),
                        active#(from(X)) -> s#(X),
                        active#(from(X)) -> active#(X),
                        active#(from(X)) -> cons#(X, from(s(X))),
                           active#(s(X)) -> s#(active(X)),
                           active#(s(X)) -> active#(X),
                       active#(primes()) -> sieve#(from(s(s(0())))),
                       active#(primes()) -> from#(s(s(0()))),
                       active#(primes()) -> s#(s(0())),
                       active#(primes()) -> s#(0()),
                   active#(cons(X1, X2)) -> active#(X1),
                   active#(cons(X1, X2)) -> cons#(active(X1), X2),
                        active#(head(X)) -> active#(X),
                        active#(head(X)) -> head#(active(X)),
                        active#(tail(X)) -> active#(X),
                        active#(tail(X)) -> tail#(active(X)),
                 active#(if(X1, X2, X3)) -> active#(X1),
                 active#(if(X1, X2, X3)) -> if#(active(X1), X2, X3),
                active#(divides(X1, X2)) -> active#(X1),
                active#(divides(X1, X2)) -> active#(X2),
                active#(divides(X1, X2)) -> divides#(X1, active(X2)),
                active#(divides(X1, X2)) -> divides#(active(X1), X2),
                 active#(filter(X1, X2)) -> active#(X1),
                 active#(filter(X1, X2)) -> active#(X2),
                 active#(filter(X1, X2)) -> filter#(X1, active(X2)),
                 active#(filter(X1, X2)) -> filter#(active(X1), X2),
    active#(filter(s(s(X)), cons(Y, Z))) -> sieve#(Y),
    active#(filter(s(s(X)), cons(Y, Z))) -> cons#(Y, filter(X, sieve(Y))),
    active#(filter(s(s(X)), cons(Y, Z))) -> if#(divides(s(s(X)), Y), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y)))),
    active#(filter(s(s(X)), cons(Y, Z))) -> divides#(s(s(X)), Y),
    active#(filter(s(s(X)), cons(Y, Z))) -> filter#(X, sieve(Y)),
    active#(filter(s(s(X)), cons(Y, Z))) -> filter#(s(s(X)), Z),
                     cons#(mark(X1), X2) -> cons#(X1, X2),
                   cons#(ok(X1), ok(X2)) -> cons#(X1, X2),
                          head#(mark(X)) -> head#(X),
                            head#(ok(X)) -> head#(X),
                          tail#(mark(X)) -> tail#(X),
                            tail#(ok(X)) -> tail#(X),
                   if#(mark(X1), X2, X3) -> if#(X1, X2, X3),
             if#(ok(X1), ok(X2), ok(X3)) -> if#(X1, X2, X3),
                  divides#(X1, mark(X2)) -> divides#(X1, X2),
                  divides#(mark(X1), X2) -> divides#(X1, X2),
                divides#(ok(X1), ok(X2)) -> divides#(X1, X2),
                   filter#(X1, mark(X2)) -> filter#(X1, X2),
                   filter#(mark(X1), X2) -> filter#(X1, X2),
                 filter#(ok(X1), ok(X2)) -> filter#(X1, X2),
                       proper#(sieve(X)) -> sieve#(proper(X)),
                       proper#(sieve(X)) -> proper#(X),
                        proper#(from(X)) -> from#(proper(X)),
                        proper#(from(X)) -> proper#(X),
                           proper#(s(X)) -> s#(proper(X)),
                           proper#(s(X)) -> proper#(X),
                   proper#(cons(X1, X2)) -> cons#(proper(X1), proper(X2)),
                   proper#(cons(X1, X2)) -> proper#(X1),
                   proper#(cons(X1, X2)) -> proper#(X2),
                        proper#(head(X)) -> head#(proper(X)),
                        proper#(head(X)) -> proper#(X),
                        proper#(tail(X)) -> tail#(proper(X)),
                        proper#(tail(X)) -> proper#(X),
                 proper#(if(X1, X2, X3)) -> if#(proper(X1), proper(X2), proper(X3)),
                 proper#(if(X1, X2, X3)) -> proper#(X1),
                 proper#(if(X1, X2, X3)) -> proper#(X2),
                 proper#(if(X1, X2, X3)) -> proper#(X3),
                proper#(divides(X1, X2)) -> divides#(proper(X1), proper(X2)),
                proper#(divides(X1, X2)) -> proper#(X1),
                proper#(divides(X1, X2)) -> proper#(X2),
                 proper#(filter(X1, X2)) -> filter#(proper(X1), proper(X2)),
                 proper#(filter(X1, X2)) -> proper#(X1),
                 proper#(filter(X1, X2)) -> proper#(X2),
                           top#(mark(X)) -> proper#(X),
                           top#(mark(X)) -> top#(proper(X)),
                             top#(ok(X)) -> active#(X),
                             top#(ok(X)) -> top#(active(X))}
  Weak:
  {                     sieve(mark(X)) -> mark(sieve(X)),
                          sieve(ok(X)) -> ok(sieve(X)),
                         from(mark(X)) -> mark(from(X)),
                           from(ok(X)) -> ok(from(X)),
                            s(mark(X)) -> mark(s(X)),
                              s(ok(X)) -> ok(s(X)),
                      active(sieve(X)) -> sieve(active(X)),
             active(sieve(cons(X, Y))) -> mark(cons(X, filter(X, sieve(Y)))),
                       active(from(X)) -> mark(cons(X, from(s(X)))),
                       active(from(X)) -> from(active(X)),
                          active(s(X)) -> s(active(X)),
                      active(primes()) -> mark(sieve(from(s(s(0()))))),
                  active(cons(X1, X2)) -> cons(active(X1), X2),
                       active(head(X)) -> head(active(X)),
              active(head(cons(X, Y))) -> mark(X),
                       active(tail(X)) -> tail(active(X)),
              active(tail(cons(X, Y))) -> mark(Y),
                active(if(X1, X2, X3)) -> if(active(X1), X2, X3),
              active(if(true(), X, Y)) -> mark(X),
             active(if(false(), X, Y)) -> mark(Y),
               active(divides(X1, X2)) -> divides(X1, active(X2)),
               active(divides(X1, X2)) -> divides(active(X1), X2),
                active(filter(X1, X2)) -> filter(X1, active(X2)),
                active(filter(X1, X2)) -> filter(active(X1), X2),
   active(filter(s(s(X)), cons(Y, Z))) -> mark(if(divides(s(s(X)), Y), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y))))),
                    cons(mark(X1), X2) -> mark(cons(X1, X2)),
                  cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)),
                         head(mark(X)) -> mark(head(X)),
                           head(ok(X)) -> ok(head(X)),
                         tail(mark(X)) -> mark(tail(X)),
                           tail(ok(X)) -> ok(tail(X)),
                  if(mark(X1), X2, X3) -> mark(if(X1, X2, X3)),
            if(ok(X1), ok(X2), ok(X3)) -> ok(if(X1, X2, X3)),
                 divides(X1, mark(X2)) -> mark(divides(X1, X2)),
                 divides(mark(X1), X2) -> mark(divides(X1, X2)),
               divides(ok(X1), ok(X2)) -> ok(divides(X1, X2)),
                  filter(X1, mark(X2)) -> mark(filter(X1, X2)),
                  filter(mark(X1), X2) -> mark(filter(X1, X2)),
                filter(ok(X1), ok(X2)) -> ok(filter(X1, X2)),
                      proper(sieve(X)) -> sieve(proper(X)),
                       proper(from(X)) -> from(proper(X)),
                          proper(s(X)) -> s(proper(X)),
                           proper(0()) -> ok(0()),
                      proper(primes()) -> ok(primes()),
                  proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)),
                       proper(head(X)) -> head(proper(X)),
                       proper(tail(X)) -> tail(proper(X)),
                proper(if(X1, X2, X3)) -> if(proper(X1), proper(X2), proper(X3)),
                        proper(true()) -> ok(true()),
                       proper(false()) -> ok(false()),
               proper(divides(X1, X2)) -> divides(proper(X1), proper(X2)),
                proper(filter(X1, X2)) -> filter(proper(X1), proper(X2)),
                          top(mark(X)) -> top(proper(X)),
                            top(ok(X)) -> top(active(X))}
  EDG:
   {
    (active#(filter(s(s(X)), cons(Y, Z))) -> cons#(Y, filter(X, sieve(Y))), cons#(ok(X1), ok(X2)) -> cons#(X1, X2))
    (active#(filter(s(s(X)), cons(Y, Z))) -> cons#(Y, filter(X, sieve(Y))), cons#(mark(X1), X2) -> cons#(X1, X2))
    (active#(sieve(X)) -> sieve#(active(X)), sieve#(ok(X)) -> sieve#(X))
    (active#(sieve(X)) -> sieve#(active(X)), sieve#(mark(X)) -> sieve#(X))
    (active#(from(X)) -> from#(active(X)), from#(ok(X)) -> from#(X))
    (active#(from(X)) -> from#(active(X)), from#(mark(X)) -> from#(X))
    (active#(head(X)) -> head#(active(X)), head#(ok(X)) -> head#(X))
    (active#(head(X)) -> head#(active(X)), head#(mark(X)) -> head#(X))
    (proper#(sieve(X)) -> sieve#(proper(X)), sieve#(ok(X)) -> sieve#(X))
    (proper#(sieve(X)) -> sieve#(proper(X)), sieve#(mark(X)) -> sieve#(X))
    (proper#(s(X)) -> s#(proper(X)), s#(ok(X)) -> s#(X))
    (proper#(s(X)) -> s#(proper(X)), s#(mark(X)) -> s#(X))
    (proper#(tail(X)) -> tail#(proper(X)), tail#(ok(X)) -> tail#(X))
    (proper#(tail(X)) -> tail#(proper(X)), tail#(mark(X)) -> tail#(X))
    (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))
    (active#(filter(s(s(X)), cons(Y, Z))) -> sieve#(Y), sieve#(ok(X)) -> sieve#(X))
    (active#(filter(s(s(X)), cons(Y, Z))) -> sieve#(Y), sieve#(mark(X)) -> sieve#(X))
    (active#(divides(X1, X2)) -> divides#(X1, active(X2)), divides#(ok(X1), ok(X2)) -> divides#(X1, X2))
    (active#(divides(X1, X2)) -> divides#(X1, active(X2)), divides#(mark(X1), X2) -> divides#(X1, X2))
    (active#(divides(X1, X2)) -> divides#(X1, active(X2)), divides#(X1, mark(X2)) -> divides#(X1, X2))
    (active#(filter(s(s(X)), cons(Y, Z))) -> filter#(X, sieve(Y)), filter#(ok(X1), ok(X2)) -> filter#(X1, X2))
    (active#(filter(s(s(X)), cons(Y, Z))) -> filter#(X, sieve(Y)), filter#(mark(X1), X2) -> filter#(X1, X2))
    (active#(filter(s(s(X)), cons(Y, Z))) -> filter#(X, sieve(Y)), filter#(X1, mark(X2)) -> filter#(X1, X2))
    (proper#(divides(X1, X2)) -> divides#(proper(X1), proper(X2)), divides#(ok(X1), ok(X2)) -> divides#(X1, X2))
    (proper#(divides(X1, X2)) -> divides#(proper(X1), proper(X2)), divides#(mark(X1), X2) -> divides#(X1, X2))
    (proper#(divides(X1, X2)) -> divides#(proper(X1), proper(X2)), divides#(X1, mark(X2)) -> divides#(X1, X2))
    (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#(filter(X1, X2)) -> filter#(active(X1), X2), filter#(ok(X1), ok(X2)) -> filter#(X1, X2))
    (active#(filter(X1, X2)) -> filter#(active(X1), X2), filter#(mark(X1), X2) -> filter#(X1, X2))
    (active#(filter(X1, X2)) -> filter#(active(X1), X2), filter#(X1, mark(X2)) -> filter#(X1, X2))
    (if#(mark(X1), X2, X3) -> if#(X1, X2, X3), if#(ok(X1), ok(X2), ok(X3)) -> if#(X1, X2, X3))
    (if#(mark(X1), X2, X3) -> if#(X1, X2, X3), if#(mark(X1), X2, X3) -> if#(X1, X2, X3))
    (active#(filter(s(s(X)), cons(Y, Z))) -> if#(divides(s(s(X)), Y), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y)))), if#(ok(X1), ok(X2), ok(X3)) -> if#(X1, X2, X3))
    (active#(filter(s(s(X)), cons(Y, Z))) -> if#(divides(s(s(X)), Y), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y)))), if#(mark(X1), X2, X3) -> if#(X1, X2, X3))
    (active#(cons(X1, X2)) -> active#(X1), active#(filter(s(s(X)), cons(Y, Z))) -> filter#(s(s(X)), Z))
    (active#(cons(X1, X2)) -> active#(X1), active#(filter(s(s(X)), cons(Y, Z))) -> filter#(X, sieve(Y)))
    (active#(cons(X1, X2)) -> active#(X1), active#(filter(s(s(X)), cons(Y, Z))) -> divides#(s(s(X)), Y))
    (active#(cons(X1, X2)) -> active#(X1), active#(filter(s(s(X)), cons(Y, Z))) -> if#(divides(s(s(X)), Y), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y)))))
    (active#(cons(X1, X2)) -> active#(X1), active#(filter(s(s(X)), cons(Y, Z))) -> cons#(Y, filter(X, sieve(Y))))
    (active#(cons(X1, X2)) -> active#(X1), active#(filter(s(s(X)), cons(Y, Z))) -> sieve#(Y))
    (active#(cons(X1, X2)) -> active#(X1), active#(filter(X1, X2)) -> filter#(active(X1), X2))
    (active#(cons(X1, X2)) -> active#(X1), active#(filter(X1, X2)) -> filter#(X1, active(X2)))
    (active#(cons(X1, X2)) -> active#(X1), active#(filter(X1, X2)) -> active#(X2))
    (active#(cons(X1, X2)) -> active#(X1), active#(filter(X1, X2)) -> active#(X1))
    (active#(cons(X1, X2)) -> active#(X1), active#(divides(X1, X2)) -> divides#(active(X1), X2))
    (active#(cons(X1, X2)) -> active#(X1), active#(divides(X1, X2)) -> divides#(X1, active(X2)))
    (active#(cons(X1, X2)) -> active#(X1), active#(divides(X1, X2)) -> active#(X2))
    (active#(cons(X1, X2)) -> active#(X1), active#(divides(X1, X2)) -> active#(X1))
    (active#(cons(X1, X2)) -> active#(X1), active#(if(X1, X2, X3)) -> if#(active(X1), X2, X3))
    (active#(cons(X1, X2)) -> active#(X1), active#(if(X1, X2, X3)) -> active#(X1))
    (active#(cons(X1, X2)) -> active#(X1), active#(tail(X)) -> tail#(active(X)))
    (active#(cons(X1, X2)) -> active#(X1), active#(tail(X)) -> active#(X))
    (active#(cons(X1, X2)) -> active#(X1), active#(head(X)) -> head#(active(X)))
    (active#(cons(X1, X2)) -> active#(X1), active#(head(X)) -> active#(X))
    (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#(primes()) -> s#(0()))
    (active#(cons(X1, X2)) -> active#(X1), active#(primes()) -> s#(s(0())))
    (active#(cons(X1, X2)) -> active#(X1), active#(primes()) -> from#(s(s(0()))))
    (active#(cons(X1, X2)) -> active#(X1), active#(primes()) -> sieve#(from(s(s(0())))))
    (active#(cons(X1, X2)) -> active#(X1), active#(s(X)) -> active#(X))
    (active#(cons(X1, X2)) -> active#(X1), active#(s(X)) -> s#(active(X)))
    (active#(cons(X1, X2)) -> active#(X1), active#(from(X)) -> cons#(X, from(s(X))))
    (active#(cons(X1, X2)) -> active#(X1), active#(from(X)) -> active#(X))
    (active#(cons(X1, X2)) -> active#(X1), active#(from(X)) -> s#(X))
    (active#(cons(X1, X2)) -> active#(X1), active#(from(X)) -> from#(active(X)))
    (active#(cons(X1, X2)) -> active#(X1), active#(from(X)) -> from#(s(X)))
    (active#(cons(X1, X2)) -> active#(X1), active#(sieve(cons(X, Y))) -> filter#(X, sieve(Y)))
    (active#(cons(X1, X2)) -> active#(X1), active#(sieve(cons(X, Y))) -> cons#(X, filter(X, sieve(Y))))
    (active#(cons(X1, X2)) -> active#(X1), active#(sieve(cons(X, Y))) -> sieve#(Y))
    (active#(cons(X1, X2)) -> active#(X1), active#(sieve(X)) -> active#(X))
    (active#(cons(X1, X2)) -> active#(X1), active#(sieve(X)) -> sieve#(active(X)))
    (active#(divides(X1, X2)) -> active#(X1), active#(filter(s(s(X)), cons(Y, Z))) -> filter#(s(s(X)), Z))
    (active#(divides(X1, X2)) -> active#(X1), active#(filter(s(s(X)), cons(Y, Z))) -> filter#(X, sieve(Y)))
    (active#(divides(X1, X2)) -> active#(X1), active#(filter(s(s(X)), cons(Y, Z))) -> divides#(s(s(X)), Y))
    (active#(divides(X1, X2)) -> active#(X1), active#(filter(s(s(X)), cons(Y, Z))) -> if#(divides(s(s(X)), Y), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y)))))
    (active#(divides(X1, X2)) -> active#(X1), active#(filter(s(s(X)), cons(Y, Z))) -> cons#(Y, filter(X, sieve(Y))))
    (active#(divides(X1, X2)) -> active#(X1), active#(filter(s(s(X)), cons(Y, Z))) -> sieve#(Y))
    (active#(divides(X1, X2)) -> active#(X1), active#(filter(X1, X2)) -> filter#(active(X1), X2))
    (active#(divides(X1, X2)) -> active#(X1), active#(filter(X1, X2)) -> filter#(X1, active(X2)))
    (active#(divides(X1, X2)) -> active#(X1), active#(filter(X1, X2)) -> active#(X2))
    (active#(divides(X1, X2)) -> active#(X1), active#(filter(X1, X2)) -> active#(X1))
    (active#(divides(X1, X2)) -> active#(X1), active#(divides(X1, X2)) -> divides#(active(X1), X2))
    (active#(divides(X1, X2)) -> active#(X1), active#(divides(X1, X2)) -> divides#(X1, active(X2)))
    (active#(divides(X1, X2)) -> active#(X1), active#(divides(X1, X2)) -> active#(X2))
    (active#(divides(X1, X2)) -> active#(X1), active#(divides(X1, X2)) -> active#(X1))
    (active#(divides(X1, X2)) -> active#(X1), active#(if(X1, X2, X3)) -> if#(active(X1), X2, X3))
    (active#(divides(X1, X2)) -> active#(X1), active#(if(X1, X2, X3)) -> active#(X1))
    (active#(divides(X1, X2)) -> active#(X1), active#(tail(X)) -> tail#(active(X)))
    (active#(divides(X1, X2)) -> active#(X1), active#(tail(X)) -> active#(X))
    (active#(divides(X1, X2)) -> active#(X1), active#(head(X)) -> head#(active(X)))
    (active#(divides(X1, X2)) -> active#(X1), active#(head(X)) -> active#(X))
    (active#(divides(X1, X2)) -> active#(X1), active#(cons(X1, X2)) -> cons#(active(X1), X2))
    (active#(divides(X1, X2)) -> active#(X1), active#(cons(X1, X2)) -> active#(X1))
    (active#(divides(X1, X2)) -> active#(X1), active#(primes()) -> s#(0()))
    (active#(divides(X1, X2)) -> active#(X1), active#(primes()) -> s#(s(0())))
    (active#(divides(X1, X2)) -> active#(X1), active#(primes()) -> from#(s(s(0()))))
    (active#(divides(X1, X2)) -> active#(X1), active#(primes()) -> sieve#(from(s(s(0())))))
    (active#(divides(X1, X2)) -> active#(X1), active#(s(X)) -> active#(X))
    (active#(divides(X1, X2)) -> active#(X1), active#(s(X)) -> s#(active(X)))
    (active#(divides(X1, X2)) -> active#(X1), active#(from(X)) -> cons#(X, from(s(X))))
    (active#(divides(X1, X2)) -> active#(X1), active#(from(X)) -> active#(X))
    (active#(divides(X1, X2)) -> active#(X1), active#(from(X)) -> s#(X))
    (active#(divides(X1, X2)) -> active#(X1), active#(from(X)) -> from#(active(X)))
    (active#(divides(X1, X2)) -> active#(X1), active#(from(X)) -> from#(s(X)))
    (active#(divides(X1, X2)) -> active#(X1), active#(sieve(cons(X, Y))) -> filter#(X, sieve(Y)))
    (active#(divides(X1, X2)) -> active#(X1), active#(sieve(cons(X, Y))) -> cons#(X, filter(X, sieve(Y))))
    (active#(divides(X1, X2)) -> active#(X1), active#(sieve(cons(X, Y))) -> sieve#(Y))
    (active#(divides(X1, X2)) -> active#(X1), active#(sieve(X)) -> active#(X))
    (active#(divides(X1, X2)) -> active#(X1), active#(sieve(X)) -> sieve#(active(X)))
    (proper#(cons(X1, X2)) -> proper#(X1), proper#(filter(X1, X2)) -> proper#(X2))
    (proper#(cons(X1, X2)) -> proper#(X1), proper#(filter(X1, X2)) -> proper#(X1))
    (proper#(cons(X1, X2)) -> proper#(X1), proper#(filter(X1, X2)) -> filter#(proper(X1), proper(X2)))
    (proper#(cons(X1, X2)) -> proper#(X1), proper#(divides(X1, X2)) -> proper#(X2))
    (proper#(cons(X1, X2)) -> proper#(X1), proper#(divides(X1, X2)) -> proper#(X1))
    (proper#(cons(X1, X2)) -> proper#(X1), proper#(divides(X1, X2)) -> divides#(proper(X1), proper(X2)))
    (proper#(cons(X1, X2)) -> proper#(X1), proper#(if(X1, X2, X3)) -> proper#(X3))
    (proper#(cons(X1, X2)) -> proper#(X1), proper#(if(X1, X2, X3)) -> proper#(X2))
    (proper#(cons(X1, X2)) -> proper#(X1), proper#(if(X1, X2, X3)) -> proper#(X1))
    (proper#(cons(X1, X2)) -> proper#(X1), proper#(if(X1, X2, X3)) -> if#(proper(X1), proper(X2), proper(X3)))
    (proper#(cons(X1, X2)) -> proper#(X1), proper#(tail(X)) -> proper#(X))
    (proper#(cons(X1, X2)) -> proper#(X1), proper#(tail(X)) -> tail#(proper(X)))
    (proper#(cons(X1, X2)) -> proper#(X1), proper#(head(X)) -> proper#(X))
    (proper#(cons(X1, X2)) -> proper#(X1), proper#(head(X)) -> head#(proper(X)))
    (proper#(cons(X1, X2)) -> proper#(X1), proper#(cons(X1, X2)) -> proper#(X2))
    (proper#(cons(X1, X2)) -> proper#(X1), proper#(cons(X1, X2)) -> proper#(X1))
    (proper#(cons(X1, X2)) -> proper#(X1), proper#(cons(X1, X2)) -> cons#(proper(X1), proper(X2)))
    (proper#(cons(X1, X2)) -> proper#(X1), proper#(s(X)) -> proper#(X))
    (proper#(cons(X1, X2)) -> proper#(X1), proper#(s(X)) -> s#(proper(X)))
    (proper#(cons(X1, X2)) -> proper#(X1), proper#(from(X)) -> proper#(X))
    (proper#(cons(X1, X2)) -> proper#(X1), proper#(from(X)) -> from#(proper(X)))
    (proper#(cons(X1, X2)) -> proper#(X1), proper#(sieve(X)) -> proper#(X))
    (proper#(cons(X1, X2)) -> proper#(X1), proper#(sieve(X)) -> sieve#(proper(X)))
    (proper#(divides(X1, X2)) -> proper#(X1), proper#(filter(X1, X2)) -> proper#(X2))
    (proper#(divides(X1, X2)) -> proper#(X1), proper#(filter(X1, X2)) -> proper#(X1))
    (proper#(divides(X1, X2)) -> proper#(X1), proper#(filter(X1, X2)) -> filter#(proper(X1), proper(X2)))
    (proper#(divides(X1, X2)) -> proper#(X1), proper#(divides(X1, X2)) -> proper#(X2))
    (proper#(divides(X1, X2)) -> proper#(X1), proper#(divides(X1, X2)) -> proper#(X1))
    (proper#(divides(X1, X2)) -> proper#(X1), proper#(divides(X1, X2)) -> divides#(proper(X1), proper(X2)))
    (proper#(divides(X1, X2)) -> proper#(X1), proper#(if(X1, X2, X3)) -> proper#(X3))
    (proper#(divides(X1, X2)) -> proper#(X1), proper#(if(X1, X2, X3)) -> proper#(X2))
    (proper#(divides(X1, X2)) -> proper#(X1), proper#(if(X1, X2, X3)) -> proper#(X1))
    (proper#(divides(X1, X2)) -> proper#(X1), proper#(if(X1, X2, X3)) -> if#(proper(X1), proper(X2), proper(X3)))
    (proper#(divides(X1, X2)) -> proper#(X1), proper#(tail(X)) -> proper#(X))
    (proper#(divides(X1, X2)) -> proper#(X1), proper#(tail(X)) -> tail#(proper(X)))
    (proper#(divides(X1, X2)) -> proper#(X1), proper#(head(X)) -> proper#(X))
    (proper#(divides(X1, X2)) -> proper#(X1), proper#(head(X)) -> head#(proper(X)))
    (proper#(divides(X1, X2)) -> proper#(X1), proper#(cons(X1, X2)) -> proper#(X2))
    (proper#(divides(X1, X2)) -> proper#(X1), proper#(cons(X1, X2)) -> proper#(X1))
    (proper#(divides(X1, X2)) -> proper#(X1), proper#(cons(X1, X2)) -> cons#(proper(X1), proper(X2)))
    (proper#(divides(X1, X2)) -> proper#(X1), proper#(s(X)) -> proper#(X))
    (proper#(divides(X1, X2)) -> proper#(X1), proper#(s(X)) -> s#(proper(X)))
    (proper#(divides(X1, X2)) -> proper#(X1), proper#(from(X)) -> proper#(X))
    (proper#(divides(X1, X2)) -> proper#(X1), proper#(from(X)) -> from#(proper(X)))
    (proper#(divides(X1, X2)) -> proper#(X1), proper#(sieve(X)) -> proper#(X))
    (proper#(divides(X1, X2)) -> proper#(X1), proper#(sieve(X)) -> sieve#(proper(X)))
    (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))
    (divides#(X1, mark(X2)) -> divides#(X1, X2), divides#(ok(X1), ok(X2)) -> divides#(X1, X2))
    (divides#(X1, mark(X2)) -> divides#(X1, X2), divides#(mark(X1), X2) -> divides#(X1, X2))
    (divides#(X1, mark(X2)) -> divides#(X1, X2), divides#(X1, mark(X2)) -> divides#(X1, X2))
    (divides#(ok(X1), ok(X2)) -> divides#(X1, X2), divides#(ok(X1), ok(X2)) -> divides#(X1, X2))
    (divides#(ok(X1), ok(X2)) -> divides#(X1, X2), divides#(mark(X1), X2) -> divides#(X1, X2))
    (divides#(ok(X1), ok(X2)) -> divides#(X1, X2), divides#(X1, mark(X2)) -> divides#(X1, X2))
    (filter#(mark(X1), X2) -> filter#(X1, X2), filter#(ok(X1), ok(X2)) -> filter#(X1, X2))
    (filter#(mark(X1), X2) -> filter#(X1, X2), filter#(mark(X1), X2) -> filter#(X1, X2))
    (filter#(mark(X1), X2) -> filter#(X1, X2), filter#(X1, mark(X2)) -> filter#(X1, X2))
    (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(filter(X1, X2)) -> proper#(X2))
    (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(filter(X1, X2)) -> proper#(X1))
    (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(filter(X1, X2)) -> filter#(proper(X1), proper(X2)))
    (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(divides(X1, X2)) -> proper#(X2))
    (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(divides(X1, X2)) -> proper#(X1))
    (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(divides(X1, X2)) -> divides#(proper(X1), proper(X2)))
    (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(if(X1, X2, X3)) -> proper#(X3))
    (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(if(X1, X2, X3)) -> proper#(X2))
    (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(if(X1, X2, X3)) -> proper#(X1))
    (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(if(X1, X2, X3)) -> if#(proper(X1), proper(X2), proper(X3)))
    (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(tail(X)) -> proper#(X))
    (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(tail(X)) -> tail#(proper(X)))
    (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(head(X)) -> proper#(X))
    (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(head(X)) -> head#(proper(X)))
    (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(cons(X1, X2)) -> proper#(X2))
    (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(cons(X1, X2)) -> proper#(X1))
    (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(cons(X1, X2)) -> cons#(proper(X1), proper(X2)))
    (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(s(X)) -> proper#(X))
    (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(s(X)) -> s#(proper(X)))
    (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(from(X)) -> proper#(X))
    (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(from(X)) -> from#(proper(X)))
    (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(sieve(X)) -> proper#(X))
    (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(sieve(X)) -> sieve#(proper(X)))
    (sieve#(ok(X)) -> sieve#(X), sieve#(ok(X)) -> sieve#(X))
    (sieve#(ok(X)) -> sieve#(X), sieve#(mark(X)) -> sieve#(X))
    (from#(ok(X)) -> from#(X), from#(ok(X)) -> from#(X))
    (from#(ok(X)) -> from#(X), from#(mark(X)) -> from#(X))
    (s#(ok(X)) -> s#(X), s#(ok(X)) -> s#(X))
    (s#(ok(X)) -> s#(X), s#(mark(X)) -> s#(X))
    (active#(from(X)) -> s#(X), s#(ok(X)) -> s#(X))
    (active#(from(X)) -> s#(X), s#(mark(X)) -> s#(X))
    (active#(s(X)) -> active#(X), active#(filter(s(s(X)), cons(Y, Z))) -> filter#(s(s(X)), Z))
    (active#(s(X)) -> active#(X), active#(filter(s(s(X)), cons(Y, Z))) -> filter#(X, sieve(Y)))
    (active#(s(X)) -> active#(X), active#(filter(s(s(X)), cons(Y, Z))) -> divides#(s(s(X)), Y))
    (active#(s(X)) -> active#(X), active#(filter(s(s(X)), cons(Y, Z))) -> if#(divides(s(s(X)), Y), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y)))))
    (active#(s(X)) -> active#(X), active#(filter(s(s(X)), cons(Y, Z))) -> cons#(Y, filter(X, sieve(Y))))
    (active#(s(X)) -> active#(X), active#(filter(s(s(X)), cons(Y, Z))) -> sieve#(Y))
    (active#(s(X)) -> active#(X), active#(filter(X1, X2)) -> filter#(active(X1), X2))
    (active#(s(X)) -> active#(X), active#(filter(X1, X2)) -> filter#(X1, active(X2)))
    (active#(s(X)) -> active#(X), active#(filter(X1, X2)) -> active#(X2))
    (active#(s(X)) -> active#(X), active#(filter(X1, X2)) -> active#(X1))
    (active#(s(X)) -> active#(X), active#(divides(X1, X2)) -> divides#(active(X1), X2))
    (active#(s(X)) -> active#(X), active#(divides(X1, X2)) -> divides#(X1, active(X2)))
    (active#(s(X)) -> active#(X), active#(divides(X1, X2)) -> active#(X2))
    (active#(s(X)) -> active#(X), active#(divides(X1, X2)) -> active#(X1))
    (active#(s(X)) -> active#(X), active#(if(X1, X2, X3)) -> if#(active(X1), X2, X3))
    (active#(s(X)) -> active#(X), active#(if(X1, X2, X3)) -> active#(X1))
    (active#(s(X)) -> active#(X), active#(tail(X)) -> tail#(active(X)))
    (active#(s(X)) -> active#(X), active#(tail(X)) -> active#(X))
    (active#(s(X)) -> active#(X), active#(head(X)) -> head#(active(X)))
    (active#(s(X)) -> active#(X), active#(head(X)) -> active#(X))
    (active#(s(X)) -> active#(X), active#(cons(X1, X2)) -> cons#(active(X1), X2))
    (active#(s(X)) -> active#(X), active#(cons(X1, X2)) -> active#(X1))
    (active#(s(X)) -> active#(X), active#(primes()) -> s#(0()))
    (active#(s(X)) -> active#(X), active#(primes()) -> s#(s(0())))
    (active#(s(X)) -> active#(X), active#(primes()) -> from#(s(s(0()))))
    (active#(s(X)) -> active#(X), active#(primes()) -> sieve#(from(s(s(0())))))
    (active#(s(X)) -> active#(X), active#(s(X)) -> active#(X))
    (active#(s(X)) -> active#(X), active#(s(X)) -> s#(active(X)))
    (active#(s(X)) -> active#(X), active#(from(X)) -> cons#(X, from(s(X))))
    (active#(s(X)) -> active#(X), active#(from(X)) -> active#(X))
    (active#(s(X)) -> active#(X), active#(from(X)) -> s#(X))
    (active#(s(X)) -> active#(X), active#(from(X)) -> from#(active(X)))
    (active#(s(X)) -> active#(X), active#(from(X)) -> from#(s(X)))
    (active#(s(X)) -> active#(X), active#(sieve(cons(X, Y))) -> filter#(X, sieve(Y)))
    (active#(s(X)) -> active#(X), active#(sieve(cons(X, Y))) -> cons#(X, filter(X, sieve(Y))))
    (active#(s(X)) -> active#(X), active#(sieve(cons(X, Y))) -> sieve#(Y))
    (active#(s(X)) -> active#(X), active#(sieve(X)) -> active#(X))
    (active#(s(X)) -> active#(X), active#(sieve(X)) -> sieve#(active(X)))
    (active#(tail(X)) -> active#(X), active#(filter(s(s(X)), cons(Y, Z))) -> filter#(s(s(X)), Z))
    (active#(tail(X)) -> active#(X), active#(filter(s(s(X)), cons(Y, Z))) -> filter#(X, sieve(Y)))
    (active#(tail(X)) -> active#(X), active#(filter(s(s(X)), cons(Y, Z))) -> divides#(s(s(X)), Y))
    (active#(tail(X)) -> active#(X), active#(filter(s(s(X)), cons(Y, Z))) -> if#(divides(s(s(X)), Y), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y)))))
    (active#(tail(X)) -> active#(X), active#(filter(s(s(X)), cons(Y, Z))) -> cons#(Y, filter(X, sieve(Y))))
    (active#(tail(X)) -> active#(X), active#(filter(s(s(X)), cons(Y, Z))) -> sieve#(Y))
    (active#(tail(X)) -> active#(X), active#(filter(X1, X2)) -> filter#(active(X1), X2))
    (active#(tail(X)) -> active#(X), active#(filter(X1, X2)) -> filter#(X1, active(X2)))
    (active#(tail(X)) -> active#(X), active#(filter(X1, X2)) -> active#(X2))
    (active#(tail(X)) -> active#(X), active#(filter(X1, X2)) -> active#(X1))
    (active#(tail(X)) -> active#(X), active#(divides(X1, X2)) -> divides#(active(X1), X2))
    (active#(tail(X)) -> active#(X), active#(divides(X1, X2)) -> divides#(X1, active(X2)))
    (active#(tail(X)) -> active#(X), active#(divides(X1, X2)) -> active#(X2))
    (active#(tail(X)) -> active#(X), active#(divides(X1, X2)) -> active#(X1))
    (active#(tail(X)) -> active#(X), active#(if(X1, X2, X3)) -> if#(active(X1), X2, X3))
    (active#(tail(X)) -> active#(X), active#(if(X1, X2, X3)) -> active#(X1))
    (active#(tail(X)) -> active#(X), active#(tail(X)) -> tail#(active(X)))
    (active#(tail(X)) -> active#(X), active#(tail(X)) -> active#(X))
    (active#(tail(X)) -> active#(X), active#(head(X)) -> head#(active(X)))
    (active#(tail(X)) -> active#(X), active#(head(X)) -> active#(X))
    (active#(tail(X)) -> active#(X), active#(cons(X1, X2)) -> cons#(active(X1), X2))
    (active#(tail(X)) -> active#(X), active#(cons(X1, X2)) -> active#(X1))
    (active#(tail(X)) -> active#(X), active#(primes()) -> s#(0()))
    (active#(tail(X)) -> active#(X), active#(primes()) -> s#(s(0())))
    (active#(tail(X)) -> active#(X), active#(primes()) -> from#(s(s(0()))))
    (active#(tail(X)) -> active#(X), active#(primes()) -> sieve#(from(s(s(0())))))
    (active#(tail(X)) -> active#(X), active#(s(X)) -> active#(X))
    (active#(tail(X)) -> active#(X), active#(s(X)) -> s#(active(X)))
    (active#(tail(X)) -> active#(X), active#(from(X)) -> cons#(X, from(s(X))))
    (active#(tail(X)) -> active#(X), active#(from(X)) -> active#(X))
    (active#(tail(X)) -> active#(X), active#(from(X)) -> s#(X))
    (active#(tail(X)) -> active#(X), active#(from(X)) -> from#(active(X)))
    (active#(tail(X)) -> active#(X), active#(from(X)) -> from#(s(X)))
    (active#(tail(X)) -> active#(X), active#(sieve(cons(X, Y))) -> filter#(X, sieve(Y)))
    (active#(tail(X)) -> active#(X), active#(sieve(cons(X, Y))) -> cons#(X, filter(X, sieve(Y))))
    (active#(tail(X)) -> active#(X), active#(sieve(cons(X, Y))) -> sieve#(Y))
    (active#(tail(X)) -> active#(X), active#(sieve(X)) -> active#(X))
    (active#(tail(X)) -> active#(X), active#(sieve(X)) -> sieve#(active(X)))
    (head#(ok(X)) -> head#(X), head#(ok(X)) -> head#(X))
    (head#(ok(X)) -> head#(X), head#(mark(X)) -> head#(X))
    (tail#(ok(X)) -> tail#(X), tail#(ok(X)) -> tail#(X))
    (tail#(ok(X)) -> tail#(X), tail#(mark(X)) -> tail#(X))
    (proper#(from(X)) -> proper#(X), proper#(filter(X1, X2)) -> proper#(X2))
    (proper#(from(X)) -> proper#(X), proper#(filter(X1, X2)) -> proper#(X1))
    (proper#(from(X)) -> proper#(X), proper#(filter(X1, X2)) -> filter#(proper(X1), proper(X2)))
    (proper#(from(X)) -> proper#(X), proper#(divides(X1, X2)) -> proper#(X2))
    (proper#(from(X)) -> proper#(X), proper#(divides(X1, X2)) -> proper#(X1))
    (proper#(from(X)) -> proper#(X), proper#(divides(X1, X2)) -> divides#(proper(X1), proper(X2)))
    (proper#(from(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X3))
    (proper#(from(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X2))
    (proper#(from(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X1))
    (proper#(from(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> if#(proper(X1), proper(X2), proper(X3)))
    (proper#(from(X)) -> proper#(X), proper#(tail(X)) -> proper#(X))
    (proper#(from(X)) -> proper#(X), proper#(tail(X)) -> tail#(proper(X)))
    (proper#(from(X)) -> proper#(X), proper#(head(X)) -> proper#(X))
    (proper#(from(X)) -> proper#(X), proper#(head(X)) -> head#(proper(X)))
    (proper#(from(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X2))
    (proper#(from(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X1))
    (proper#(from(X)) -> proper#(X), proper#(cons(X1, X2)) -> cons#(proper(X1), proper(X2)))
    (proper#(from(X)) -> proper#(X), proper#(s(X)) -> proper#(X))
    (proper#(from(X)) -> proper#(X), proper#(s(X)) -> s#(proper(X)))
    (proper#(from(X)) -> proper#(X), proper#(from(X)) -> proper#(X))
    (proper#(from(X)) -> proper#(X), proper#(from(X)) -> from#(proper(X)))
    (proper#(from(X)) -> proper#(X), proper#(sieve(X)) -> proper#(X))
    (proper#(from(X)) -> proper#(X), proper#(sieve(X)) -> sieve#(proper(X)))
    (proper#(head(X)) -> proper#(X), proper#(filter(X1, X2)) -> proper#(X2))
    (proper#(head(X)) -> proper#(X), proper#(filter(X1, X2)) -> proper#(X1))
    (proper#(head(X)) -> proper#(X), proper#(filter(X1, X2)) -> filter#(proper(X1), proper(X2)))
    (proper#(head(X)) -> proper#(X), proper#(divides(X1, X2)) -> proper#(X2))
    (proper#(head(X)) -> proper#(X), proper#(divides(X1, X2)) -> proper#(X1))
    (proper#(head(X)) -> proper#(X), proper#(divides(X1, X2)) -> divides#(proper(X1), proper(X2)))
    (proper#(head(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X3))
    (proper#(head(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X2))
    (proper#(head(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X1))
    (proper#(head(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> if#(proper(X1), proper(X2), proper(X3)))
    (proper#(head(X)) -> proper#(X), proper#(tail(X)) -> proper#(X))
    (proper#(head(X)) -> proper#(X), proper#(tail(X)) -> tail#(proper(X)))
    (proper#(head(X)) -> proper#(X), proper#(head(X)) -> proper#(X))
    (proper#(head(X)) -> proper#(X), proper#(head(X)) -> head#(proper(X)))
    (proper#(head(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X2))
    (proper#(head(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X1))
    (proper#(head(X)) -> proper#(X), proper#(cons(X1, X2)) -> cons#(proper(X1), proper(X2)))
    (proper#(head(X)) -> proper#(X), proper#(s(X)) -> proper#(X))
    (proper#(head(X)) -> proper#(X), proper#(s(X)) -> s#(proper(X)))
    (proper#(head(X)) -> proper#(X), proper#(from(X)) -> proper#(X))
    (proper#(head(X)) -> proper#(X), proper#(from(X)) -> from#(proper(X)))
    (proper#(head(X)) -> proper#(X), proper#(sieve(X)) -> proper#(X))
    (proper#(head(X)) -> proper#(X), proper#(sieve(X)) -> sieve#(proper(X)))
    (top#(mark(X)) -> proper#(X), proper#(filter(X1, X2)) -> proper#(X2))
    (top#(mark(X)) -> proper#(X), proper#(filter(X1, X2)) -> proper#(X1))
    (top#(mark(X)) -> proper#(X), proper#(filter(X1, X2)) -> filter#(proper(X1), proper(X2)))
    (top#(mark(X)) -> proper#(X), proper#(divides(X1, X2)) -> proper#(X2))
    (top#(mark(X)) -> proper#(X), proper#(divides(X1, X2)) -> proper#(X1))
    (top#(mark(X)) -> proper#(X), proper#(divides(X1, X2)) -> divides#(proper(X1), proper(X2)))
    (top#(mark(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X3))
    (top#(mark(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X2))
    (top#(mark(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X1))
    (top#(mark(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> if#(proper(X1), proper(X2), proper(X3)))
    (top#(mark(X)) -> proper#(X), proper#(tail(X)) -> proper#(X))
    (top#(mark(X)) -> proper#(X), proper#(tail(X)) -> tail#(proper(X)))
    (top#(mark(X)) -> proper#(X), proper#(head(X)) -> proper#(X))
    (top#(mark(X)) -> proper#(X), proper#(head(X)) -> head#(proper(X)))
    (top#(mark(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X2))
    (top#(mark(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X1))
    (top#(mark(X)) -> proper#(X), proper#(cons(X1, X2)) -> cons#(proper(X1), proper(X2)))
    (top#(mark(X)) -> proper#(X), proper#(s(X)) -> proper#(X))
    (top#(mark(X)) -> proper#(X), proper#(s(X)) -> s#(proper(X)))
    (top#(mark(X)) -> proper#(X), proper#(from(X)) -> proper#(X))
    (top#(mark(X)) -> proper#(X), proper#(from(X)) -> from#(proper(X)))
    (top#(mark(X)) -> proper#(X), proper#(sieve(X)) -> proper#(X))
    (top#(mark(X)) -> proper#(X), proper#(sieve(X)) -> sieve#(proper(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#(divides(X1, X2)) -> active#(X2), active#(filter(s(s(X)), cons(Y, Z))) -> filter#(s(s(X)), Z))
    (active#(divides(X1, X2)) -> active#(X2), active#(filter(s(s(X)), cons(Y, Z))) -> filter#(X, sieve(Y)))
    (active#(divides(X1, X2)) -> active#(X2), active#(filter(s(s(X)), cons(Y, Z))) -> divides#(s(s(X)), Y))
    (active#(divides(X1, X2)) -> active#(X2), active#(filter(s(s(X)), cons(Y, Z))) -> if#(divides(s(s(X)), Y), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y)))))
    (active#(divides(X1, X2)) -> active#(X2), active#(filter(s(s(X)), cons(Y, Z))) -> cons#(Y, filter(X, sieve(Y))))
    (active#(divides(X1, X2)) -> active#(X2), active#(filter(s(s(X)), cons(Y, Z))) -> sieve#(Y))
    (active#(divides(X1, X2)) -> active#(X2), active#(filter(X1, X2)) -> filter#(active(X1), X2))
    (active#(divides(X1, X2)) -> active#(X2), active#(filter(X1, X2)) -> filter#(X1, active(X2)))
    (active#(divides(X1, X2)) -> active#(X2), active#(filter(X1, X2)) -> active#(X2))
    (active#(divides(X1, X2)) -> active#(X2), active#(filter(X1, X2)) -> active#(X1))
    (active#(divides(X1, X2)) -> active#(X2), active#(divides(X1, X2)) -> divides#(active(X1), X2))
    (active#(divides(X1, X2)) -> active#(X2), active#(divides(X1, X2)) -> divides#(X1, active(X2)))
    (active#(divides(X1, X2)) -> active#(X2), active#(divides(X1, X2)) -> active#(X2))
    (active#(divides(X1, X2)) -> active#(X2), active#(divides(X1, X2)) -> active#(X1))
    (active#(divides(X1, X2)) -> active#(X2), active#(if(X1, X2, X3)) -> if#(active(X1), X2, X3))
    (active#(divides(X1, X2)) -> active#(X2), active#(if(X1, X2, X3)) -> active#(X1))
    (active#(divides(X1, X2)) -> active#(X2), active#(tail(X)) -> tail#(active(X)))
    (active#(divides(X1, X2)) -> active#(X2), active#(tail(X)) -> active#(X))
    (active#(divides(X1, X2)) -> active#(X2), active#(head(X)) -> head#(active(X)))
    (active#(divides(X1, X2)) -> active#(X2), active#(head(X)) -> active#(X))
    (active#(divides(X1, X2)) -> active#(X2), active#(cons(X1, X2)) -> cons#(active(X1), X2))
    (active#(divides(X1, X2)) -> active#(X2), active#(cons(X1, X2)) -> active#(X1))
    (active#(divides(X1, X2)) -> active#(X2), active#(primes()) -> s#(0()))
    (active#(divides(X1, X2)) -> active#(X2), active#(primes()) -> s#(s(0())))
    (active#(divides(X1, X2)) -> active#(X2), active#(primes()) -> from#(s(s(0()))))
    (active#(divides(X1, X2)) -> active#(X2), active#(primes()) -> sieve#(from(s(s(0())))))
    (active#(divides(X1, X2)) -> active#(X2), active#(s(X)) -> active#(X))
    (active#(divides(X1, X2)) -> active#(X2), active#(s(X)) -> s#(active(X)))
    (active#(divides(X1, X2)) -> active#(X2), active#(from(X)) -> cons#(X, from(s(X))))
    (active#(divides(X1, X2)) -> active#(X2), active#(from(X)) -> active#(X))
    (active#(divides(X1, X2)) -> active#(X2), active#(from(X)) -> s#(X))
    (active#(divides(X1, X2)) -> active#(X2), active#(from(X)) -> from#(active(X)))
    (active#(divides(X1, X2)) -> active#(X2), active#(from(X)) -> from#(s(X)))
    (active#(divides(X1, X2)) -> active#(X2), active#(sieve(cons(X, Y))) -> filter#(X, sieve(Y)))
    (active#(divides(X1, X2)) -> active#(X2), active#(sieve(cons(X, Y))) -> cons#(X, filter(X, sieve(Y))))
    (active#(divides(X1, X2)) -> active#(X2), active#(sieve(cons(X, Y))) -> sieve#(Y))
    (active#(divides(X1, X2)) -> active#(X2), active#(sieve(X)) -> active#(X))
    (active#(divides(X1, X2)) -> active#(X2), active#(sieve(X)) -> sieve#(active(X)))
    (proper#(cons(X1, X2)) -> proper#(X2), proper#(filter(X1, X2)) -> proper#(X2))
    (proper#(cons(X1, X2)) -> proper#(X2), proper#(filter(X1, X2)) -> proper#(X1))
    (proper#(cons(X1, X2)) -> proper#(X2), proper#(filter(X1, X2)) -> filter#(proper(X1), proper(X2)))
    (proper#(cons(X1, X2)) -> proper#(X2), proper#(divides(X1, X2)) -> proper#(X2))
    (proper#(cons(X1, X2)) -> proper#(X2), proper#(divides(X1, X2)) -> proper#(X1))
    (proper#(cons(X1, X2)) -> proper#(X2), proper#(divides(X1, X2)) -> divides#(proper(X1), proper(X2)))
    (proper#(cons(X1, X2)) -> proper#(X2), proper#(if(X1, X2, X3)) -> proper#(X3))
    (proper#(cons(X1, X2)) -> proper#(X2), proper#(if(X1, X2, X3)) -> proper#(X2))
    (proper#(cons(X1, X2)) -> proper#(X2), proper#(if(X1, X2, X3)) -> proper#(X1))
    (proper#(cons(X1, X2)) -> proper#(X2), proper#(if(X1, X2, X3)) -> if#(proper(X1), proper(X2), proper(X3)))
    (proper#(cons(X1, X2)) -> proper#(X2), proper#(tail(X)) -> proper#(X))
    (proper#(cons(X1, X2)) -> proper#(X2), proper#(tail(X)) -> tail#(proper(X)))
    (proper#(cons(X1, X2)) -> proper#(X2), proper#(head(X)) -> proper#(X))
    (proper#(cons(X1, X2)) -> proper#(X2), proper#(head(X)) -> head#(proper(X)))
    (proper#(cons(X1, X2)) -> proper#(X2), proper#(cons(X1, X2)) -> proper#(X2))
    (proper#(cons(X1, X2)) -> proper#(X2), proper#(cons(X1, X2)) -> proper#(X1))
    (proper#(cons(X1, X2)) -> proper#(X2), proper#(cons(X1, X2)) -> cons#(proper(X1), proper(X2)))
    (proper#(cons(X1, X2)) -> proper#(X2), proper#(s(X)) -> proper#(X))
    (proper#(cons(X1, X2)) -> proper#(X2), proper#(s(X)) -> s#(proper(X)))
    (proper#(cons(X1, X2)) -> proper#(X2), proper#(from(X)) -> proper#(X))
    (proper#(cons(X1, X2)) -> proper#(X2), proper#(from(X)) -> from#(proper(X)))
    (proper#(cons(X1, X2)) -> proper#(X2), proper#(sieve(X)) -> proper#(X))
    (proper#(cons(X1, X2)) -> proper#(X2), proper#(sieve(X)) -> sieve#(proper(X)))
    (proper#(divides(X1, X2)) -> proper#(X2), proper#(filter(X1, X2)) -> proper#(X2))
    (proper#(divides(X1, X2)) -> proper#(X2), proper#(filter(X1, X2)) -> proper#(X1))
    (proper#(divides(X1, X2)) -> proper#(X2), proper#(filter(X1, X2)) -> filter#(proper(X1), proper(X2)))
    (proper#(divides(X1, X2)) -> proper#(X2), proper#(divides(X1, X2)) -> proper#(X2))
    (proper#(divides(X1, X2)) -> proper#(X2), proper#(divides(X1, X2)) -> proper#(X1))
    (proper#(divides(X1, X2)) -> proper#(X2), proper#(divides(X1, X2)) -> divides#(proper(X1), proper(X2)))
    (proper#(divides(X1, X2)) -> proper#(X2), proper#(if(X1, X2, X3)) -> proper#(X3))
    (proper#(divides(X1, X2)) -> proper#(X2), proper#(if(X1, X2, X3)) -> proper#(X2))
    (proper#(divides(X1, X2)) -> proper#(X2), proper#(if(X1, X2, X3)) -> proper#(X1))
    (proper#(divides(X1, X2)) -> proper#(X2), proper#(if(X1, X2, X3)) -> if#(proper(X1), proper(X2), proper(X3)))
    (proper#(divides(X1, X2)) -> proper#(X2), proper#(tail(X)) -> proper#(X))
    (proper#(divides(X1, X2)) -> proper#(X2), proper#(tail(X)) -> tail#(proper(X)))
    (proper#(divides(X1, X2)) -> proper#(X2), proper#(head(X)) -> proper#(X))
    (proper#(divides(X1, X2)) -> proper#(X2), proper#(head(X)) -> head#(proper(X)))
    (proper#(divides(X1, X2)) -> proper#(X2), proper#(cons(X1, X2)) -> proper#(X2))
    (proper#(divides(X1, X2)) -> proper#(X2), proper#(cons(X1, X2)) -> proper#(X1))
    (proper#(divides(X1, X2)) -> proper#(X2), proper#(cons(X1, X2)) -> cons#(proper(X1), proper(X2)))
    (proper#(divides(X1, X2)) -> proper#(X2), proper#(s(X)) -> proper#(X))
    (proper#(divides(X1, X2)) -> proper#(X2), proper#(s(X)) -> s#(proper(X)))
    (proper#(divides(X1, X2)) -> proper#(X2), proper#(from(X)) -> proper#(X))
    (proper#(divides(X1, X2)) -> proper#(X2), proper#(from(X)) -> from#(proper(X)))
    (proper#(divides(X1, X2)) -> proper#(X2), proper#(sieve(X)) -> proper#(X))
    (proper#(divides(X1, X2)) -> proper#(X2), proper#(sieve(X)) -> sieve#(proper(X)))
    (proper#(filter(X1, X2)) -> proper#(X2), proper#(sieve(X)) -> sieve#(proper(X)))
    (proper#(filter(X1, X2)) -> proper#(X2), proper#(sieve(X)) -> proper#(X))
    (proper#(filter(X1, X2)) -> proper#(X2), proper#(from(X)) -> from#(proper(X)))
    (proper#(filter(X1, X2)) -> proper#(X2), proper#(from(X)) -> proper#(X))
    (proper#(filter(X1, X2)) -> proper#(X2), proper#(s(X)) -> s#(proper(X)))
    (proper#(filter(X1, X2)) -> proper#(X2), proper#(s(X)) -> proper#(X))
    (proper#(filter(X1, X2)) -> proper#(X2), proper#(cons(X1, X2)) -> cons#(proper(X1), proper(X2)))
    (proper#(filter(X1, X2)) -> proper#(X2), proper#(cons(X1, X2)) -> proper#(X1))
    (proper#(filter(X1, X2)) -> proper#(X2), proper#(cons(X1, X2)) -> proper#(X2))
    (proper#(filter(X1, X2)) -> proper#(X2), proper#(head(X)) -> head#(proper(X)))
    (proper#(filter(X1, X2)) -> proper#(X2), proper#(head(X)) -> proper#(X))
    (proper#(filter(X1, X2)) -> proper#(X2), proper#(tail(X)) -> tail#(proper(X)))
    (proper#(filter(X1, X2)) -> proper#(X2), proper#(tail(X)) -> proper#(X))
    (proper#(filter(X1, X2)) -> proper#(X2), proper#(if(X1, X2, X3)) -> if#(proper(X1), proper(X2), proper(X3)))
    (proper#(filter(X1, X2)) -> proper#(X2), proper#(if(X1, X2, X3)) -> proper#(X1))
    (proper#(filter(X1, X2)) -> proper#(X2), proper#(if(X1, X2, X3)) -> proper#(X2))
    (proper#(filter(X1, X2)) -> proper#(X2), proper#(if(X1, X2, X3)) -> proper#(X3))
    (proper#(filter(X1, X2)) -> proper#(X2), proper#(divides(X1, X2)) -> divides#(proper(X1), proper(X2)))
    (proper#(filter(X1, X2)) -> proper#(X2), proper#(divides(X1, X2)) -> proper#(X1))
    (proper#(filter(X1, X2)) -> proper#(X2), proper#(divides(X1, X2)) -> proper#(X2))
    (proper#(filter(X1, X2)) -> proper#(X2), proper#(filter(X1, X2)) -> filter#(proper(X1), proper(X2)))
    (proper#(filter(X1, X2)) -> proper#(X2), proper#(filter(X1, X2)) -> proper#(X1))
    (proper#(filter(X1, X2)) -> proper#(X2), proper#(filter(X1, X2)) -> proper#(X2))
    (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(sieve(X)) -> sieve#(proper(X)))
    (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(sieve(X)) -> proper#(X))
    (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(from(X)) -> from#(proper(X)))
    (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(from(X)) -> proper#(X))
    (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(s(X)) -> s#(proper(X)))
    (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(s(X)) -> proper#(X))
    (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(cons(X1, X2)) -> cons#(proper(X1), proper(X2)))
    (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(cons(X1, X2)) -> proper#(X1))
    (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(cons(X1, X2)) -> proper#(X2))
    (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(head(X)) -> head#(proper(X)))
    (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(head(X)) -> proper#(X))
    (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(tail(X)) -> tail#(proper(X)))
    (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(tail(X)) -> proper#(X))
    (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(if(X1, X2, X3)) -> if#(proper(X1), proper(X2), proper(X3)))
    (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(if(X1, X2, X3)) -> proper#(X1))
    (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(if(X1, X2, X3)) -> proper#(X2))
    (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(if(X1, X2, X3)) -> proper#(X3))
    (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(divides(X1, X2)) -> divides#(proper(X1), proper(X2)))
    (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(divides(X1, X2)) -> proper#(X1))
    (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(divides(X1, X2)) -> proper#(X2))
    (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(filter(X1, X2)) -> filter#(proper(X1), proper(X2)))
    (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(filter(X1, X2)) -> proper#(X1))
    (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(filter(X1, X2)) -> proper#(X2))
    (active#(filter(X1, X2)) -> active#(X2), active#(sieve(X)) -> sieve#(active(X)))
    (active#(filter(X1, X2)) -> active#(X2), active#(sieve(X)) -> active#(X))
    (active#(filter(X1, X2)) -> active#(X2), active#(sieve(cons(X, Y))) -> sieve#(Y))
    (active#(filter(X1, X2)) -> active#(X2), active#(sieve(cons(X, Y))) -> cons#(X, filter(X, sieve(Y))))
    (active#(filter(X1, X2)) -> active#(X2), active#(sieve(cons(X, Y))) -> filter#(X, sieve(Y)))
    (active#(filter(X1, X2)) -> active#(X2), active#(from(X)) -> from#(s(X)))
    (active#(filter(X1, X2)) -> active#(X2), active#(from(X)) -> from#(active(X)))
    (active#(filter(X1, X2)) -> active#(X2), active#(from(X)) -> s#(X))
    (active#(filter(X1, X2)) -> active#(X2), active#(from(X)) -> active#(X))
    (active#(filter(X1, X2)) -> active#(X2), active#(from(X)) -> cons#(X, from(s(X))))
    (active#(filter(X1, X2)) -> active#(X2), active#(s(X)) -> s#(active(X)))
    (active#(filter(X1, X2)) -> active#(X2), active#(s(X)) -> active#(X))
    (active#(filter(X1, X2)) -> active#(X2), active#(primes()) -> sieve#(from(s(s(0())))))
    (active#(filter(X1, X2)) -> active#(X2), active#(primes()) -> from#(s(s(0()))))
    (active#(filter(X1, X2)) -> active#(X2), active#(primes()) -> s#(s(0())))
    (active#(filter(X1, X2)) -> active#(X2), active#(primes()) -> s#(0()))
    (active#(filter(X1, X2)) -> active#(X2), active#(cons(X1, X2)) -> active#(X1))
    (active#(filter(X1, X2)) -> active#(X2), active#(cons(X1, X2)) -> cons#(active(X1), X2))
    (active#(filter(X1, X2)) -> active#(X2), active#(head(X)) -> active#(X))
    (active#(filter(X1, X2)) -> active#(X2), active#(head(X)) -> head#(active(X)))
    (active#(filter(X1, X2)) -> active#(X2), active#(tail(X)) -> active#(X))
    (active#(filter(X1, X2)) -> active#(X2), active#(tail(X)) -> tail#(active(X)))
    (active#(filter(X1, X2)) -> active#(X2), active#(if(X1, X2, X3)) -> active#(X1))
    (active#(filter(X1, X2)) -> active#(X2), active#(if(X1, X2, X3)) -> if#(active(X1), X2, X3))
    (active#(filter(X1, X2)) -> active#(X2), active#(divides(X1, X2)) -> active#(X1))
    (active#(filter(X1, X2)) -> active#(X2), active#(divides(X1, X2)) -> active#(X2))
    (active#(filter(X1, X2)) -> active#(X2), active#(divides(X1, X2)) -> divides#(X1, active(X2)))
    (active#(filter(X1, X2)) -> active#(X2), active#(divides(X1, X2)) -> divides#(active(X1), X2))
    (active#(filter(X1, X2)) -> active#(X2), active#(filter(X1, X2)) -> active#(X1))
    (active#(filter(X1, X2)) -> active#(X2), active#(filter(X1, X2)) -> active#(X2))
    (active#(filter(X1, X2)) -> active#(X2), active#(filter(X1, X2)) -> filter#(X1, active(X2)))
    (active#(filter(X1, X2)) -> active#(X2), active#(filter(X1, X2)) -> filter#(active(X1), X2))
    (active#(filter(X1, X2)) -> active#(X2), active#(filter(s(s(X)), cons(Y, Z))) -> sieve#(Y))
    (active#(filter(X1, X2)) -> active#(X2), active#(filter(s(s(X)), cons(Y, Z))) -> cons#(Y, filter(X, sieve(Y))))
    (active#(filter(X1, X2)) -> active#(X2), active#(filter(s(s(X)), cons(Y, Z))) -> if#(divides(s(s(X)), Y), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y)))))
    (active#(filter(X1, X2)) -> active#(X2), active#(filter(s(s(X)), cons(Y, Z))) -> divides#(s(s(X)), Y))
    (active#(filter(X1, X2)) -> active#(X2), active#(filter(s(s(X)), cons(Y, Z))) -> filter#(X, sieve(Y)))
    (active#(filter(X1, X2)) -> active#(X2), active#(filter(s(s(X)), cons(Y, Z))) -> filter#(s(s(X)), Z))
    (active#(filter(s(s(X)), cons(Y, Z))) -> divides#(s(s(X)), Y), divides#(X1, mark(X2)) -> divides#(X1, X2))
    (active#(filter(s(s(X)), cons(Y, Z))) -> divides#(s(s(X)), Y), divides#(mark(X1), X2) -> divides#(X1, X2))
    (active#(filter(s(s(X)), cons(Y, Z))) -> divides#(s(s(X)), Y), divides#(ok(X1), ok(X2)) -> divides#(X1, X2))
    (top#(ok(X)) -> active#(X), active#(sieve(X)) -> sieve#(active(X)))
    (top#(ok(X)) -> active#(X), active#(sieve(X)) -> active#(X))
    (top#(ok(X)) -> active#(X), active#(sieve(cons(X, Y))) -> sieve#(Y))
    (top#(ok(X)) -> active#(X), active#(sieve(cons(X, Y))) -> cons#(X, filter(X, sieve(Y))))
    (top#(ok(X)) -> active#(X), active#(sieve(cons(X, Y))) -> filter#(X, sieve(Y)))
    (top#(ok(X)) -> active#(X), active#(from(X)) -> from#(s(X)))
    (top#(ok(X)) -> active#(X), active#(from(X)) -> from#(active(X)))
    (top#(ok(X)) -> active#(X), active#(from(X)) -> s#(X))
    (top#(ok(X)) -> active#(X), active#(from(X)) -> active#(X))
    (top#(ok(X)) -> active#(X), active#(from(X)) -> cons#(X, from(s(X))))
    (top#(ok(X)) -> active#(X), active#(s(X)) -> s#(active(X)))
    (top#(ok(X)) -> active#(X), active#(s(X)) -> active#(X))
    (top#(ok(X)) -> active#(X), active#(primes()) -> sieve#(from(s(s(0())))))
    (top#(ok(X)) -> active#(X), active#(primes()) -> from#(s(s(0()))))
    (top#(ok(X)) -> active#(X), active#(primes()) -> s#(s(0())))
    (top#(ok(X)) -> active#(X), active#(primes()) -> s#(0()))
    (top#(ok(X)) -> active#(X), active#(cons(X1, X2)) -> active#(X1))
    (top#(ok(X)) -> active#(X), active#(cons(X1, X2)) -> cons#(active(X1), X2))
    (top#(ok(X)) -> active#(X), active#(head(X)) -> active#(X))
    (top#(ok(X)) -> active#(X), active#(head(X)) -> head#(active(X)))
    (top#(ok(X)) -> active#(X), active#(tail(X)) -> active#(X))
    (top#(ok(X)) -> active#(X), active#(tail(X)) -> tail#(active(X)))
    (top#(ok(X)) -> active#(X), active#(if(X1, X2, X3)) -> active#(X1))
    (top#(ok(X)) -> active#(X), active#(if(X1, X2, X3)) -> if#(active(X1), X2, X3))
    (top#(ok(X)) -> active#(X), active#(divides(X1, X2)) -> active#(X1))
    (top#(ok(X)) -> active#(X), active#(divides(X1, X2)) -> active#(X2))
    (top#(ok(X)) -> active#(X), active#(divides(X1, X2)) -> divides#(X1, active(X2)))
    (top#(ok(X)) -> active#(X), active#(divides(X1, X2)) -> divides#(active(X1), X2))
    (top#(ok(X)) -> active#(X), active#(filter(X1, X2)) -> active#(X1))
    (top#(ok(X)) -> active#(X), active#(filter(X1, X2)) -> active#(X2))
    (top#(ok(X)) -> active#(X), active#(filter(X1, X2)) -> filter#(X1, active(X2)))
    (top#(ok(X)) -> active#(X), active#(filter(X1, X2)) -> filter#(active(X1), X2))
    (top#(ok(X)) -> active#(X), active#(filter(s(s(X)), cons(Y, Z))) -> sieve#(Y))
    (top#(ok(X)) -> active#(X), active#(filter(s(s(X)), cons(Y, Z))) -> cons#(Y, filter(X, sieve(Y))))
    (top#(ok(X)) -> active#(X), active#(filter(s(s(X)), cons(Y, Z))) -> if#(divides(s(s(X)), Y), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y)))))
    (top#(ok(X)) -> active#(X), active#(filter(s(s(X)), cons(Y, Z))) -> divides#(s(s(X)), Y))
    (top#(ok(X)) -> active#(X), active#(filter(s(s(X)), cons(Y, Z))) -> filter#(X, sieve(Y)))
    (top#(ok(X)) -> active#(X), active#(filter(s(s(X)), cons(Y, Z))) -> filter#(s(s(X)), Z))
    (proper#(tail(X)) -> proper#(X), proper#(sieve(X)) -> sieve#(proper(X)))
    (proper#(tail(X)) -> proper#(X), proper#(sieve(X)) -> proper#(X))
    (proper#(tail(X)) -> proper#(X), proper#(from(X)) -> from#(proper(X)))
    (proper#(tail(X)) -> proper#(X), proper#(from(X)) -> proper#(X))
    (proper#(tail(X)) -> proper#(X), proper#(s(X)) -> s#(proper(X)))
    (proper#(tail(X)) -> proper#(X), proper#(s(X)) -> proper#(X))
    (proper#(tail(X)) -> proper#(X), proper#(cons(X1, X2)) -> cons#(proper(X1), proper(X2)))
    (proper#(tail(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X1))
    (proper#(tail(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X2))
    (proper#(tail(X)) -> proper#(X), proper#(head(X)) -> head#(proper(X)))
    (proper#(tail(X)) -> proper#(X), proper#(head(X)) -> proper#(X))
    (proper#(tail(X)) -> proper#(X), proper#(tail(X)) -> tail#(proper(X)))
    (proper#(tail(X)) -> proper#(X), proper#(tail(X)) -> proper#(X))
    (proper#(tail(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> if#(proper(X1), proper(X2), proper(X3)))
    (proper#(tail(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X1))
    (proper#(tail(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X2))
    (proper#(tail(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X3))
    (proper#(tail(X)) -> proper#(X), proper#(divides(X1, X2)) -> divides#(proper(X1), proper(X2)))
    (proper#(tail(X)) -> proper#(X), proper#(divides(X1, X2)) -> proper#(X1))
    (proper#(tail(X)) -> proper#(X), proper#(divides(X1, X2)) -> proper#(X2))
    (proper#(tail(X)) -> proper#(X), proper#(filter(X1, X2)) -> filter#(proper(X1), proper(X2)))
    (proper#(tail(X)) -> proper#(X), proper#(filter(X1, X2)) -> proper#(X1))
    (proper#(tail(X)) -> proper#(X), proper#(filter(X1, X2)) -> proper#(X2))
    (proper#(s(X)) -> proper#(X), proper#(sieve(X)) -> sieve#(proper(X)))
    (proper#(s(X)) -> proper#(X), proper#(sieve(X)) -> proper#(X))
    (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#(s(X)) -> s#(proper(X)))
    (proper#(s(X)) -> proper#(X), proper#(s(X)) -> proper#(X))
    (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#(head(X)) -> head#(proper(X)))
    (proper#(s(X)) -> proper#(X), proper#(head(X)) -> proper#(X))
    (proper#(s(X)) -> proper#(X), proper#(tail(X)) -> tail#(proper(X)))
    (proper#(s(X)) -> proper#(X), proper#(tail(X)) -> proper#(X))
    (proper#(s(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> if#(proper(X1), proper(X2), proper(X3)))
    (proper#(s(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X1))
    (proper#(s(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X2))
    (proper#(s(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X3))
    (proper#(s(X)) -> proper#(X), proper#(divides(X1, X2)) -> divides#(proper(X1), proper(X2)))
    (proper#(s(X)) -> proper#(X), proper#(divides(X1, X2)) -> proper#(X1))
    (proper#(s(X)) -> proper#(X), proper#(divides(X1, X2)) -> proper#(X2))
    (proper#(s(X)) -> proper#(X), proper#(filter(X1, X2)) -> filter#(proper(X1), proper(X2)))
    (proper#(s(X)) -> proper#(X), proper#(filter(X1, X2)) -> proper#(X1))
    (proper#(s(X)) -> proper#(X), proper#(filter(X1, X2)) -> proper#(X2))
    (proper#(sieve(X)) -> proper#(X), proper#(sieve(X)) -> sieve#(proper(X)))
    (proper#(sieve(X)) -> proper#(X), proper#(sieve(X)) -> proper#(X))
    (proper#(sieve(X)) -> proper#(X), proper#(from(X)) -> from#(proper(X)))
    (proper#(sieve(X)) -> proper#(X), proper#(from(X)) -> proper#(X))
    (proper#(sieve(X)) -> proper#(X), proper#(s(X)) -> s#(proper(X)))
    (proper#(sieve(X)) -> proper#(X), proper#(s(X)) -> proper#(X))
    (proper#(sieve(X)) -> proper#(X), proper#(cons(X1, X2)) -> cons#(proper(X1), proper(X2)))
    (proper#(sieve(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X1))
    (proper#(sieve(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X2))
    (proper#(sieve(X)) -> proper#(X), proper#(head(X)) -> head#(proper(X)))
    (proper#(sieve(X)) -> proper#(X), proper#(head(X)) -> proper#(X))
    (proper#(sieve(X)) -> proper#(X), proper#(tail(X)) -> tail#(proper(X)))
    (proper#(sieve(X)) -> proper#(X), proper#(tail(X)) -> proper#(X))
    (proper#(sieve(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> if#(proper(X1), proper(X2), proper(X3)))
    (proper#(sieve(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X1))
    (proper#(sieve(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X2))
    (proper#(sieve(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X3))
    (proper#(sieve(X)) -> proper#(X), proper#(divides(X1, X2)) -> divides#(proper(X1), proper(X2)))
    (proper#(sieve(X)) -> proper#(X), proper#(divides(X1, X2)) -> proper#(X1))
    (proper#(sieve(X)) -> proper#(X), proper#(divides(X1, X2)) -> proper#(X2))
    (proper#(sieve(X)) -> proper#(X), proper#(filter(X1, X2)) -> filter#(proper(X1), proper(X2)))
    (proper#(sieve(X)) -> proper#(X), proper#(filter(X1, X2)) -> proper#(X1))
    (proper#(sieve(X)) -> proper#(X), proper#(filter(X1, X2)) -> proper#(X2))
    (tail#(mark(X)) -> tail#(X), tail#(mark(X)) -> tail#(X))
    (tail#(mark(X)) -> tail#(X), tail#(ok(X)) -> tail#(X))
    (head#(mark(X)) -> head#(X), head#(mark(X)) -> head#(X))
    (head#(mark(X)) -> head#(X), head#(ok(X)) -> head#(X))
    (active#(head(X)) -> active#(X), active#(sieve(X)) -> sieve#(active(X)))
    (active#(head(X)) -> active#(X), active#(sieve(X)) -> active#(X))
    (active#(head(X)) -> active#(X), active#(sieve(cons(X, Y))) -> sieve#(Y))
    (active#(head(X)) -> active#(X), active#(sieve(cons(X, Y))) -> cons#(X, filter(X, sieve(Y))))
    (active#(head(X)) -> active#(X), active#(sieve(cons(X, Y))) -> filter#(X, sieve(Y)))
    (active#(head(X)) -> active#(X), active#(from(X)) -> from#(s(X)))
    (active#(head(X)) -> active#(X), active#(from(X)) -> from#(active(X)))
    (active#(head(X)) -> active#(X), active#(from(X)) -> s#(X))
    (active#(head(X)) -> active#(X), active#(from(X)) -> active#(X))
    (active#(head(X)) -> active#(X), active#(from(X)) -> cons#(X, from(s(X))))
    (active#(head(X)) -> active#(X), active#(s(X)) -> s#(active(X)))
    (active#(head(X)) -> active#(X), active#(s(X)) -> active#(X))
    (active#(head(X)) -> active#(X), active#(primes()) -> sieve#(from(s(s(0())))))
    (active#(head(X)) -> active#(X), active#(primes()) -> from#(s(s(0()))))
    (active#(head(X)) -> active#(X), active#(primes()) -> s#(s(0())))
    (active#(head(X)) -> active#(X), active#(primes()) -> s#(0()))
    (active#(head(X)) -> active#(X), active#(cons(X1, X2)) -> active#(X1))
    (active#(head(X)) -> active#(X), active#(cons(X1, X2)) -> cons#(active(X1), X2))
    (active#(head(X)) -> active#(X), active#(head(X)) -> active#(X))
    (active#(head(X)) -> active#(X), active#(head(X)) -> head#(active(X)))
    (active#(head(X)) -> active#(X), active#(tail(X)) -> active#(X))
    (active#(head(X)) -> active#(X), active#(tail(X)) -> tail#(active(X)))
    (active#(head(X)) -> active#(X), active#(if(X1, X2, X3)) -> active#(X1))
    (active#(head(X)) -> active#(X), active#(if(X1, X2, X3)) -> if#(active(X1), X2, X3))
    (active#(head(X)) -> active#(X), active#(divides(X1, X2)) -> active#(X1))
    (active#(head(X)) -> active#(X), active#(divides(X1, X2)) -> active#(X2))
    (active#(head(X)) -> active#(X), active#(divides(X1, X2)) -> divides#(X1, active(X2)))
    (active#(head(X)) -> active#(X), active#(divides(X1, X2)) -> divides#(active(X1), X2))
    (active#(head(X)) -> active#(X), active#(filter(X1, X2)) -> active#(X1))
    (active#(head(X)) -> active#(X), active#(filter(X1, X2)) -> active#(X2))
    (active#(head(X)) -> active#(X), active#(filter(X1, X2)) -> filter#(X1, active(X2)))
    (active#(head(X)) -> active#(X), active#(filter(X1, X2)) -> filter#(active(X1), X2))
    (active#(head(X)) -> active#(X), active#(filter(s(s(X)), cons(Y, Z))) -> sieve#(Y))
    (active#(head(X)) -> active#(X), active#(filter(s(s(X)), cons(Y, Z))) -> cons#(Y, filter(X, sieve(Y))))
    (active#(head(X)) -> active#(X), active#(filter(s(s(X)), cons(Y, Z))) -> if#(divides(s(s(X)), Y), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y)))))
    (active#(head(X)) -> active#(X), active#(filter(s(s(X)), cons(Y, Z))) -> divides#(s(s(X)), Y))
    (active#(head(X)) -> active#(X), active#(filter(s(s(X)), cons(Y, Z))) -> filter#(X, sieve(Y)))
    (active#(head(X)) -> active#(X), active#(filter(s(s(X)), cons(Y, Z))) -> filter#(s(s(X)), Z))
    (active#(from(X)) -> active#(X), active#(sieve(X)) -> sieve#(active(X)))
    (active#(from(X)) -> active#(X), active#(sieve(X)) -> active#(X))
    (active#(from(X)) -> active#(X), active#(sieve(cons(X, Y))) -> sieve#(Y))
    (active#(from(X)) -> active#(X), active#(sieve(cons(X, Y))) -> cons#(X, filter(X, sieve(Y))))
    (active#(from(X)) -> active#(X), active#(sieve(cons(X, Y))) -> filter#(X, sieve(Y)))
    (active#(from(X)) -> active#(X), active#(from(X)) -> from#(s(X)))
    (active#(from(X)) -> active#(X), active#(from(X)) -> from#(active(X)))
    (active#(from(X)) -> active#(X), active#(from(X)) -> s#(X))
    (active#(from(X)) -> active#(X), active#(from(X)) -> active#(X))
    (active#(from(X)) -> active#(X), active#(from(X)) -> cons#(X, from(s(X))))
    (active#(from(X)) -> active#(X), active#(s(X)) -> s#(active(X)))
    (active#(from(X)) -> active#(X), active#(s(X)) -> active#(X))
    (active#(from(X)) -> active#(X), active#(primes()) -> sieve#(from(s(s(0())))))
    (active#(from(X)) -> active#(X), active#(primes()) -> from#(s(s(0()))))
    (active#(from(X)) -> active#(X), active#(primes()) -> s#(s(0())))
    (active#(from(X)) -> active#(X), active#(primes()) -> s#(0()))
    (active#(from(X)) -> active#(X), active#(cons(X1, X2)) -> active#(X1))
    (active#(from(X)) -> active#(X), active#(cons(X1, X2)) -> cons#(active(X1), X2))
    (active#(from(X)) -> active#(X), active#(head(X)) -> active#(X))
    (active#(from(X)) -> active#(X), active#(head(X)) -> head#(active(X)))
    (active#(from(X)) -> active#(X), active#(tail(X)) -> active#(X))
    (active#(from(X)) -> active#(X), active#(tail(X)) -> tail#(active(X)))
    (active#(from(X)) -> active#(X), active#(if(X1, X2, X3)) -> active#(X1))
    (active#(from(X)) -> active#(X), active#(if(X1, X2, X3)) -> if#(active(X1), X2, X3))
    (active#(from(X)) -> active#(X), active#(divides(X1, X2)) -> active#(X1))
    (active#(from(X)) -> active#(X), active#(divides(X1, X2)) -> active#(X2))
    (active#(from(X)) -> active#(X), active#(divides(X1, X2)) -> divides#(X1, active(X2)))
    (active#(from(X)) -> active#(X), active#(divides(X1, X2)) -> divides#(active(X1), X2))
    (active#(from(X)) -> active#(X), active#(filter(X1, X2)) -> active#(X1))
    (active#(from(X)) -> active#(X), active#(filter(X1, X2)) -> active#(X2))
    (active#(from(X)) -> active#(X), active#(filter(X1, X2)) -> filter#(X1, active(X2)))
    (active#(from(X)) -> active#(X), active#(filter(X1, X2)) -> filter#(active(X1), X2))
    (active#(from(X)) -> active#(X), active#(filter(s(s(X)), cons(Y, Z))) -> sieve#(Y))
    (active#(from(X)) -> active#(X), active#(filter(s(s(X)), cons(Y, Z))) -> cons#(Y, filter(X, sieve(Y))))
    (active#(from(X)) -> active#(X), active#(filter(s(s(X)), cons(Y, Z))) -> if#(divides(s(s(X)), Y), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y)))))
    (active#(from(X)) -> active#(X), active#(filter(s(s(X)), cons(Y, Z))) -> divides#(s(s(X)), Y))
    (active#(from(X)) -> active#(X), active#(filter(s(s(X)), cons(Y, Z))) -> filter#(X, sieve(Y)))
    (active#(from(X)) -> active#(X), active#(filter(s(s(X)), cons(Y, Z))) -> filter#(s(s(X)), Z))
    (active#(sieve(X)) -> active#(X), active#(sieve(X)) -> sieve#(active(X)))
    (active#(sieve(X)) -> active#(X), active#(sieve(X)) -> active#(X))
    (active#(sieve(X)) -> active#(X), active#(sieve(cons(X, Y))) -> sieve#(Y))
    (active#(sieve(X)) -> active#(X), active#(sieve(cons(X, Y))) -> cons#(X, filter(X, sieve(Y))))
    (active#(sieve(X)) -> active#(X), active#(sieve(cons(X, Y))) -> filter#(X, sieve(Y)))
    (active#(sieve(X)) -> active#(X), active#(from(X)) -> from#(s(X)))
    (active#(sieve(X)) -> active#(X), active#(from(X)) -> from#(active(X)))
    (active#(sieve(X)) -> active#(X), active#(from(X)) -> s#(X))
    (active#(sieve(X)) -> active#(X), active#(from(X)) -> active#(X))
    (active#(sieve(X)) -> active#(X), active#(from(X)) -> cons#(X, from(s(X))))
    (active#(sieve(X)) -> active#(X), active#(s(X)) -> s#(active(X)))
    (active#(sieve(X)) -> active#(X), active#(s(X)) -> active#(X))
    (active#(sieve(X)) -> active#(X), active#(primes()) -> sieve#(from(s(s(0())))))
    (active#(sieve(X)) -> active#(X), active#(primes()) -> from#(s(s(0()))))
    (active#(sieve(X)) -> active#(X), active#(primes()) -> s#(s(0())))
    (active#(sieve(X)) -> active#(X), active#(primes()) -> s#(0()))
    (active#(sieve(X)) -> active#(X), active#(cons(X1, X2)) -> active#(X1))
    (active#(sieve(X)) -> active#(X), active#(cons(X1, X2)) -> cons#(active(X1), X2))
    (active#(sieve(X)) -> active#(X), active#(head(X)) -> active#(X))
    (active#(sieve(X)) -> active#(X), active#(head(X)) -> head#(active(X)))
    (active#(sieve(X)) -> active#(X), active#(tail(X)) -> active#(X))
    (active#(sieve(X)) -> active#(X), active#(tail(X)) -> tail#(active(X)))
    (active#(sieve(X)) -> active#(X), active#(if(X1, X2, X3)) -> active#(X1))
    (active#(sieve(X)) -> active#(X), active#(if(X1, X2, X3)) -> if#(active(X1), X2, X3))
    (active#(sieve(X)) -> active#(X), active#(divides(X1, X2)) -> active#(X1))
    (active#(sieve(X)) -> active#(X), active#(divides(X1, X2)) -> active#(X2))
    (active#(sieve(X)) -> active#(X), active#(divides(X1, X2)) -> divides#(X1, active(X2)))
    (active#(sieve(X)) -> active#(X), active#(divides(X1, X2)) -> divides#(active(X1), X2))
    (active#(sieve(X)) -> active#(X), active#(filter(X1, X2)) -> active#(X1))
    (active#(sieve(X)) -> active#(X), active#(filter(X1, X2)) -> active#(X2))
    (active#(sieve(X)) -> active#(X), active#(filter(X1, X2)) -> filter#(X1, active(X2)))
    (active#(sieve(X)) -> active#(X), active#(filter(X1, X2)) -> filter#(active(X1), X2))
    (active#(sieve(X)) -> active#(X), active#(filter(s(s(X)), cons(Y, Z))) -> sieve#(Y))
    (active#(sieve(X)) -> active#(X), active#(filter(s(s(X)), cons(Y, Z))) -> cons#(Y, filter(X, sieve(Y))))
    (active#(sieve(X)) -> active#(X), active#(filter(s(s(X)), cons(Y, Z))) -> if#(divides(s(s(X)), Y), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y)))))
    (active#(sieve(X)) -> active#(X), active#(filter(s(s(X)), cons(Y, Z))) -> divides#(s(s(X)), Y))
    (active#(sieve(X)) -> active#(X), active#(filter(s(s(X)), cons(Y, Z))) -> filter#(X, sieve(Y)))
    (active#(sieve(X)) -> active#(X), active#(filter(s(s(X)), cons(Y, Z))) -> filter#(s(s(X)), Z))
    (s#(mark(X)) -> s#(X), s#(mark(X)) -> s#(X))
    (s#(mark(X)) -> s#(X), s#(ok(X)) -> s#(X))
    (from#(mark(X)) -> from#(X), from#(mark(X)) -> from#(X))
    (from#(mark(X)) -> from#(X), from#(ok(X)) -> from#(X))
    (sieve#(mark(X)) -> sieve#(X), sieve#(mark(X)) -> sieve#(X))
    (sieve#(mark(X)) -> sieve#(X), sieve#(ok(X)) -> sieve#(X))
    (active#(filter(s(s(X)), cons(Y, Z))) -> filter#(s(s(X)), Z), filter#(X1, mark(X2)) -> filter#(X1, X2))
    (active#(filter(s(s(X)), cons(Y, Z))) -> filter#(s(s(X)), Z), filter#(mark(X1), X2) -> filter#(X1, X2))
    (active#(filter(s(s(X)), cons(Y, Z))) -> filter#(s(s(X)), Z), filter#(ok(X1), ok(X2)) -> filter#(X1, X2))
    (filter#(ok(X1), ok(X2)) -> filter#(X1, X2), filter#(X1, mark(X2)) -> filter#(X1, X2))
    (filter#(ok(X1), ok(X2)) -> filter#(X1, X2), filter#(mark(X1), X2) -> filter#(X1, X2))
    (filter#(ok(X1), ok(X2)) -> filter#(X1, X2), filter#(ok(X1), ok(X2)) -> filter#(X1, X2))
    (filter#(X1, mark(X2)) -> filter#(X1, X2), filter#(X1, mark(X2)) -> filter#(X1, X2))
    (filter#(X1, mark(X2)) -> filter#(X1, X2), filter#(mark(X1), X2) -> filter#(X1, X2))
    (filter#(X1, mark(X2)) -> filter#(X1, X2), filter#(ok(X1), ok(X2)) -> filter#(X1, X2))
    (divides#(mark(X1), X2) -> divides#(X1, X2), divides#(X1, mark(X2)) -> divides#(X1, X2))
    (divides#(mark(X1), X2) -> divides#(X1, X2), divides#(mark(X1), X2) -> divides#(X1, X2))
    (divides#(mark(X1), X2) -> divides#(X1, X2), divides#(ok(X1), ok(X2)) -> divides#(X1, X2))
    (cons#(ok(X1), ok(X2)) -> cons#(X1, X2), cons#(mark(X1), X2) -> cons#(X1, X2))
    (cons#(ok(X1), ok(X2)) -> cons#(X1, X2), cons#(ok(X1), ok(X2)) -> cons#(X1, X2))
    (proper#(filter(X1, X2)) -> proper#(X1), proper#(sieve(X)) -> sieve#(proper(X)))
    (proper#(filter(X1, X2)) -> proper#(X1), proper#(sieve(X)) -> proper#(X))
    (proper#(filter(X1, X2)) -> proper#(X1), proper#(from(X)) -> from#(proper(X)))
    (proper#(filter(X1, X2)) -> proper#(X1), proper#(from(X)) -> proper#(X))
    (proper#(filter(X1, X2)) -> proper#(X1), proper#(s(X)) -> s#(proper(X)))
    (proper#(filter(X1, X2)) -> proper#(X1), proper#(s(X)) -> proper#(X))
    (proper#(filter(X1, X2)) -> proper#(X1), proper#(cons(X1, X2)) -> cons#(proper(X1), proper(X2)))
    (proper#(filter(X1, X2)) -> proper#(X1), proper#(cons(X1, X2)) -> proper#(X1))
    (proper#(filter(X1, X2)) -> proper#(X1), proper#(cons(X1, X2)) -> proper#(X2))
    (proper#(filter(X1, X2)) -> proper#(X1), proper#(head(X)) -> head#(proper(X)))
    (proper#(filter(X1, X2)) -> proper#(X1), proper#(head(X)) -> proper#(X))
    (proper#(filter(X1, X2)) -> proper#(X1), proper#(tail(X)) -> tail#(proper(X)))
    (proper#(filter(X1, X2)) -> proper#(X1), proper#(tail(X)) -> proper#(X))
    (proper#(filter(X1, X2)) -> proper#(X1), proper#(if(X1, X2, X3)) -> if#(proper(X1), proper(X2), proper(X3)))
    (proper#(filter(X1, X2)) -> proper#(X1), proper#(if(X1, X2, X3)) -> proper#(X1))
    (proper#(filter(X1, X2)) -> proper#(X1), proper#(if(X1, X2, X3)) -> proper#(X2))
    (proper#(filter(X1, X2)) -> proper#(X1), proper#(if(X1, X2, X3)) -> proper#(X3))
    (proper#(filter(X1, X2)) -> proper#(X1), proper#(divides(X1, X2)) -> divides#(proper(X1), proper(X2)))
    (proper#(filter(X1, X2)) -> proper#(X1), proper#(divides(X1, X2)) -> proper#(X1))
    (proper#(filter(X1, X2)) -> proper#(X1), proper#(divides(X1, X2)) -> proper#(X2))
    (proper#(filter(X1, X2)) -> proper#(X1), proper#(filter(X1, X2)) -> filter#(proper(X1), proper(X2)))
    (proper#(filter(X1, X2)) -> proper#(X1), proper#(filter(X1, X2)) -> proper#(X1))
    (proper#(filter(X1, X2)) -> proper#(X1), proper#(filter(X1, X2)) -> proper#(X2))
    (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(sieve(X)) -> sieve#(proper(X)))
    (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(sieve(X)) -> proper#(X))
    (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(from(X)) -> from#(proper(X)))
    (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(from(X)) -> proper#(X))
    (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(s(X)) -> s#(proper(X)))
    (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(s(X)) -> proper#(X))
    (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(cons(X1, X2)) -> cons#(proper(X1), proper(X2)))
    (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(cons(X1, X2)) -> proper#(X1))
    (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(cons(X1, X2)) -> proper#(X2))
    (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(head(X)) -> head#(proper(X)))
    (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(head(X)) -> proper#(X))
    (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(tail(X)) -> tail#(proper(X)))
    (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(tail(X)) -> proper#(X))
    (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(if(X1, X2, X3)) -> if#(proper(X1), proper(X2), proper(X3)))
    (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(if(X1, X2, X3)) -> proper#(X1))
    (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(if(X1, X2, X3)) -> proper#(X2))
    (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(if(X1, X2, X3)) -> proper#(X3))
    (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(divides(X1, X2)) -> divides#(proper(X1), proper(X2)))
    (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(divides(X1, X2)) -> proper#(X1))
    (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(divides(X1, X2)) -> proper#(X2))
    (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(filter(X1, X2)) -> filter#(proper(X1), proper(X2)))
    (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(filter(X1, X2)) -> proper#(X1))
    (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(filter(X1, X2)) -> proper#(X2))
    (active#(filter(X1, X2)) -> active#(X1), active#(sieve(X)) -> sieve#(active(X)))
    (active#(filter(X1, X2)) -> active#(X1), active#(sieve(X)) -> active#(X))
    (active#(filter(X1, X2)) -> active#(X1), active#(sieve(cons(X, Y))) -> sieve#(Y))
    (active#(filter(X1, X2)) -> active#(X1), active#(sieve(cons(X, Y))) -> cons#(X, filter(X, sieve(Y))))
    (active#(filter(X1, X2)) -> active#(X1), active#(sieve(cons(X, Y))) -> filter#(X, sieve(Y)))
    (active#(filter(X1, X2)) -> active#(X1), active#(from(X)) -> from#(s(X)))
    (active#(filter(X1, X2)) -> active#(X1), active#(from(X)) -> from#(active(X)))
    (active#(filter(X1, X2)) -> active#(X1), active#(from(X)) -> s#(X))
    (active#(filter(X1, X2)) -> active#(X1), active#(from(X)) -> active#(X))
    (active#(filter(X1, X2)) -> active#(X1), active#(from(X)) -> cons#(X, from(s(X))))
    (active#(filter(X1, X2)) -> active#(X1), active#(s(X)) -> s#(active(X)))
    (active#(filter(X1, X2)) -> active#(X1), active#(s(X)) -> active#(X))
    (active#(filter(X1, X2)) -> active#(X1), active#(primes()) -> sieve#(from(s(s(0())))))
    (active#(filter(X1, X2)) -> active#(X1), active#(primes()) -> from#(s(s(0()))))
    (active#(filter(X1, X2)) -> active#(X1), active#(primes()) -> s#(s(0())))
    (active#(filter(X1, X2)) -> active#(X1), active#(primes()) -> s#(0()))
    (active#(filter(X1, X2)) -> active#(X1), active#(cons(X1, X2)) -> active#(X1))
    (active#(filter(X1, X2)) -> active#(X1), active#(cons(X1, X2)) -> cons#(active(X1), X2))
    (active#(filter(X1, X2)) -> active#(X1), active#(head(X)) -> active#(X))
    (active#(filter(X1, X2)) -> active#(X1), active#(head(X)) -> head#(active(X)))
    (active#(filter(X1, X2)) -> active#(X1), active#(tail(X)) -> active#(X))
    (active#(filter(X1, X2)) -> active#(X1), active#(tail(X)) -> tail#(active(X)))
    (active#(filter(X1, X2)) -> active#(X1), active#(if(X1, X2, X3)) -> active#(X1))
    (active#(filter(X1, X2)) -> active#(X1), active#(if(X1, X2, X3)) -> if#(active(X1), X2, X3))
    (active#(filter(X1, X2)) -> active#(X1), active#(divides(X1, X2)) -> active#(X1))
    (active#(filter(X1, X2)) -> active#(X1), active#(divides(X1, X2)) -> active#(X2))
    (active#(filter(X1, X2)) -> active#(X1), active#(divides(X1, X2)) -> divides#(X1, active(X2)))
    (active#(filter(X1, X2)) -> active#(X1), active#(divides(X1, X2)) -> divides#(active(X1), X2))
    (active#(filter(X1, X2)) -> active#(X1), active#(filter(X1, X2)) -> active#(X1))
    (active#(filter(X1, X2)) -> active#(X1), active#(filter(X1, X2)) -> active#(X2))
    (active#(filter(X1, X2)) -> active#(X1), active#(filter(X1, X2)) -> filter#(X1, active(X2)))
    (active#(filter(X1, X2)) -> active#(X1), active#(filter(X1, X2)) -> filter#(active(X1), X2))
    (active#(filter(X1, X2)) -> active#(X1), active#(filter(s(s(X)), cons(Y, Z))) -> sieve#(Y))
    (active#(filter(X1, X2)) -> active#(X1), active#(filter(s(s(X)), cons(Y, Z))) -> cons#(Y, filter(X, sieve(Y))))
    (active#(filter(X1, X2)) -> active#(X1), active#(filter(s(s(X)), cons(Y, Z))) -> if#(divides(s(s(X)), Y), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y)))))
    (active#(filter(X1, X2)) -> active#(X1), active#(filter(s(s(X)), cons(Y, Z))) -> divides#(s(s(X)), Y))
    (active#(filter(X1, X2)) -> active#(X1), active#(filter(s(s(X)), cons(Y, Z))) -> filter#(X, sieve(Y)))
    (active#(filter(X1, X2)) -> active#(X1), active#(filter(s(s(X)), cons(Y, Z))) -> filter#(s(s(X)), Z))
    (active#(if(X1, X2, X3)) -> active#(X1), active#(sieve(X)) -> sieve#(active(X)))
    (active#(if(X1, X2, X3)) -> active#(X1), active#(sieve(X)) -> active#(X))
    (active#(if(X1, X2, X3)) -> active#(X1), active#(sieve(cons(X, Y))) -> sieve#(Y))
    (active#(if(X1, X2, X3)) -> active#(X1), active#(sieve(cons(X, Y))) -> cons#(X, filter(X, sieve(Y))))
    (active#(if(X1, X2, X3)) -> active#(X1), active#(sieve(cons(X, Y))) -> filter#(X, sieve(Y)))
    (active#(if(X1, X2, X3)) -> active#(X1), active#(from(X)) -> from#(s(X)))
    (active#(if(X1, X2, X3)) -> active#(X1), active#(from(X)) -> from#(active(X)))
    (active#(if(X1, X2, X3)) -> active#(X1), active#(from(X)) -> s#(X))
    (active#(if(X1, X2, X3)) -> active#(X1), active#(from(X)) -> active#(X))
    (active#(if(X1, X2, X3)) -> active#(X1), active#(from(X)) -> cons#(X, from(s(X))))
    (active#(if(X1, X2, X3)) -> active#(X1), active#(s(X)) -> s#(active(X)))
    (active#(if(X1, X2, X3)) -> active#(X1), active#(s(X)) -> active#(X))
    (active#(if(X1, X2, X3)) -> active#(X1), active#(primes()) -> sieve#(from(s(s(0())))))
    (active#(if(X1, X2, X3)) -> active#(X1), active#(primes()) -> from#(s(s(0()))))
    (active#(if(X1, X2, X3)) -> active#(X1), active#(primes()) -> s#(s(0())))
    (active#(if(X1, X2, X3)) -> active#(X1), active#(primes()) -> s#(0()))
    (active#(if(X1, X2, X3)) -> active#(X1), active#(cons(X1, X2)) -> active#(X1))
    (active#(if(X1, X2, X3)) -> active#(X1), active#(cons(X1, X2)) -> cons#(active(X1), X2))
    (active#(if(X1, X2, X3)) -> active#(X1), active#(head(X)) -> active#(X))
    (active#(if(X1, X2, X3)) -> active#(X1), active#(head(X)) -> head#(active(X)))
    (active#(if(X1, X2, X3)) -> active#(X1), active#(tail(X)) -> active#(X))
    (active#(if(X1, X2, X3)) -> active#(X1), active#(tail(X)) -> tail#(active(X)))
    (active#(if(X1, X2, X3)) -> active#(X1), active#(if(X1, X2, X3)) -> active#(X1))
    (active#(if(X1, X2, X3)) -> active#(X1), active#(if(X1, X2, X3)) -> if#(active(X1), X2, X3))
    (active#(if(X1, X2, X3)) -> active#(X1), active#(divides(X1, X2)) -> active#(X1))
    (active#(if(X1, X2, X3)) -> active#(X1), active#(divides(X1, X2)) -> active#(X2))
    (active#(if(X1, X2, X3)) -> active#(X1), active#(divides(X1, X2)) -> divides#(X1, active(X2)))
    (active#(if(X1, X2, X3)) -> active#(X1), active#(divides(X1, X2)) -> divides#(active(X1), X2))
    (active#(if(X1, X2, X3)) -> active#(X1), active#(filter(X1, X2)) -> active#(X1))
    (active#(if(X1, X2, X3)) -> active#(X1), active#(filter(X1, X2)) -> active#(X2))
    (active#(if(X1, X2, X3)) -> active#(X1), active#(filter(X1, X2)) -> filter#(X1, active(X2)))
    (active#(if(X1, X2, X3)) -> active#(X1), active#(filter(X1, X2)) -> filter#(active(X1), X2))
    (active#(if(X1, X2, X3)) -> active#(X1), active#(filter(s(s(X)), cons(Y, Z))) -> sieve#(Y))
    (active#(if(X1, X2, X3)) -> active#(X1), active#(filter(s(s(X)), cons(Y, Z))) -> cons#(Y, filter(X, sieve(Y))))
    (active#(if(X1, X2, X3)) -> active#(X1), active#(filter(s(s(X)), cons(Y, Z))) -> if#(divides(s(s(X)), Y), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y)))))
    (active#(if(X1, X2, X3)) -> active#(X1), active#(filter(s(s(X)), cons(Y, Z))) -> divides#(s(s(X)), Y))
    (active#(if(X1, X2, X3)) -> active#(X1), active#(filter(s(s(X)), cons(Y, Z))) -> filter#(X, sieve(Y)))
    (active#(if(X1, X2, X3)) -> active#(X1), active#(filter(s(s(X)), cons(Y, Z))) -> filter#(s(s(X)), Z))
    (proper#(if(X1, X2, X3)) -> if#(proper(X1), proper(X2), proper(X3)), if#(mark(X1), X2, X3) -> if#(X1, X2, X3))
    (proper#(if(X1, X2, X3)) -> if#(proper(X1), proper(X2), proper(X3)), if#(ok(X1), ok(X2), ok(X3)) -> if#(X1, X2, X3))
    (if#(ok(X1), ok(X2), ok(X3)) -> if#(X1, X2, X3), if#(mark(X1), X2, X3) -> if#(X1, X2, X3))
    (if#(ok(X1), ok(X2), ok(X3)) -> if#(X1, X2, X3), if#(ok(X1), ok(X2), ok(X3)) -> if#(X1, X2, X3))
    (active#(if(X1, X2, X3)) -> if#(active(X1), X2, X3), if#(mark(X1), X2, X3) -> if#(X1, X2, X3))
    (active#(if(X1, X2, X3)) -> if#(active(X1), X2, X3), if#(ok(X1), ok(X2), ok(X3)) -> if#(X1, X2, X3))
    (active#(divides(X1, X2)) -> divides#(active(X1), X2), divides#(X1, mark(X2)) -> divides#(X1, X2))
    (active#(divides(X1, X2)) -> divides#(active(X1), X2), divides#(mark(X1), X2) -> divides#(X1, X2))
    (active#(divides(X1, X2)) -> divides#(active(X1), X2), divides#(ok(X1), ok(X2)) -> divides#(X1, X2))
    (proper#(filter(X1, X2)) -> filter#(proper(X1), proper(X2)), filter#(X1, mark(X2)) -> filter#(X1, X2))
    (proper#(filter(X1, X2)) -> filter#(proper(X1), proper(X2)), filter#(mark(X1), X2) -> filter#(X1, X2))
    (proper#(filter(X1, X2)) -> filter#(proper(X1), proper(X2)), filter#(ok(X1), ok(X2)) -> filter#(X1, X2))
    (proper#(cons(X1, X2)) -> cons#(proper(X1), proper(X2)), cons#(mark(X1), X2) -> cons#(X1, X2))
    (proper#(cons(X1, X2)) -> cons#(proper(X1), proper(X2)), cons#(ok(X1), ok(X2)) -> cons#(X1, X2))
    (active#(filter(X1, X2)) -> filter#(X1, active(X2)), filter#(X1, mark(X2)) -> filter#(X1, X2))
    (active#(filter(X1, X2)) -> filter#(X1, active(X2)), filter#(mark(X1), X2) -> filter#(X1, X2))
    (active#(filter(X1, X2)) -> filter#(X1, active(X2)), filter#(ok(X1), ok(X2)) -> filter#(X1, X2))
    (active#(sieve(cons(X, Y))) -> filter#(X, sieve(Y)), filter#(X1, mark(X2)) -> filter#(X1, X2))
    (active#(sieve(cons(X, Y))) -> filter#(X, sieve(Y)), filter#(mark(X1), X2) -> filter#(X1, X2))
    (active#(sieve(cons(X, Y))) -> filter#(X, sieve(Y)), filter#(ok(X1), ok(X2)) -> filter#(X1, X2))
    (active#(sieve(cons(X, Y))) -> sieve#(Y), sieve#(mark(X)) -> sieve#(X))
    (active#(sieve(cons(X, Y))) -> sieve#(Y), sieve#(ok(X)) -> sieve#(X))
    (top#(mark(X)) -> top#(proper(X)), top#(mark(X)) -> proper#(X))
    (top#(mark(X)) -> top#(proper(X)), top#(mark(X)) -> top#(proper(X)))
    (top#(mark(X)) -> top#(proper(X)), top#(ok(X)) -> active#(X))
    (top#(mark(X)) -> top#(proper(X)), top#(ok(X)) -> top#(active(X)))
    (proper#(head(X)) -> head#(proper(X)), head#(mark(X)) -> head#(X))
    (proper#(head(X)) -> head#(proper(X)), head#(ok(X)) -> head#(X))
    (proper#(from(X)) -> from#(proper(X)), from#(mark(X)) -> from#(X))
    (proper#(from(X)) -> from#(proper(X)), from#(ok(X)) -> from#(X))
    (active#(tail(X)) -> tail#(active(X)), tail#(mark(X)) -> tail#(X))
    (active#(tail(X)) -> tail#(active(X)), tail#(ok(X)) -> tail#(X))
    (active#(s(X)) -> s#(active(X)), s#(mark(X)) -> s#(X))
    (active#(s(X)) -> s#(active(X)), s#(ok(X)) -> s#(X))
    (active#(from(X)) -> from#(s(X)), from#(mark(X)) -> from#(X))
    (active#(from(X)) -> from#(s(X)), from#(ok(X)) -> from#(X))
    (active#(sieve(cons(X, Y))) -> cons#(X, filter(X, sieve(Y))), cons#(mark(X1), X2) -> cons#(X1, X2))
    (active#(sieve(cons(X, Y))) -> cons#(X, filter(X, sieve(Y))), cons#(ok(X1), ok(X2)) -> cons#(X1, X2))
   }
   SCCS:
    Scc:
     {top#(mark(X)) -> top#(proper(X)),
        top#(ok(X)) -> top#(active(X))}
    Scc:
     {       proper#(sieve(X)) -> proper#(X),
              proper#(from(X)) -> proper#(X),
                 proper#(s(X)) -> proper#(X),
         proper#(cons(X1, X2)) -> proper#(X1),
         proper#(cons(X1, X2)) -> proper#(X2),
              proper#(head(X)) -> proper#(X),
              proper#(tail(X)) -> proper#(X),
       proper#(if(X1, X2, X3)) -> proper#(X1),
       proper#(if(X1, X2, X3)) -> proper#(X2),
       proper#(if(X1, X2, X3)) -> proper#(X3),
      proper#(divides(X1, X2)) -> proper#(X1),
      proper#(divides(X1, X2)) -> proper#(X2),
       proper#(filter(X1, X2)) -> proper#(X1),
       proper#(filter(X1, X2)) -> proper#(X2)}
    Scc:
     {  filter#(X1, mark(X2)) -> filter#(X1, X2),
        filter#(mark(X1), X2) -> filter#(X1, X2),
      filter#(ok(X1), ok(X2)) -> filter#(X1, X2)}
    Scc:
     {  divides#(X1, mark(X2)) -> divides#(X1, X2),
        divides#(mark(X1), X2) -> divides#(X1, X2),
      divides#(ok(X1), ok(X2)) -> divides#(X1, X2)}
    Scc:
     {      if#(mark(X1), X2, X3) -> if#(X1, X2, X3),
      if#(ok(X1), ok(X2), ok(X3)) -> if#(X1, X2, X3)}
    Scc:
     {tail#(mark(X)) -> tail#(X),
        tail#(ok(X)) -> tail#(X)}
    Scc:
     {head#(mark(X)) -> head#(X),
        head#(ok(X)) -> head#(X)}
    Scc:
     {  cons#(mark(X1), X2) -> cons#(X1, X2),
      cons#(ok(X1), ok(X2)) -> cons#(X1, X2)}
    Scc:
     {       active#(sieve(X)) -> active#(X),
              active#(from(X)) -> active#(X),
                 active#(s(X)) -> active#(X),
         active#(cons(X1, X2)) -> active#(X1),
              active#(head(X)) -> active#(X),
              active#(tail(X)) -> active#(X),
       active#(if(X1, X2, X3)) -> active#(X1),
      active#(divides(X1, X2)) -> active#(X1),
      active#(divides(X1, X2)) -> active#(X2),
       active#(filter(X1, X2)) -> active#(X1),
       active#(filter(X1, X2)) -> active#(X2)}
    Scc:
     {s#(mark(X)) -> s#(X),
        s#(ok(X)) -> s#(X)}
    Scc:
     {from#(mark(X)) -> from#(X),
        from#(ok(X)) -> from#(X)}
    Scc:
     {sieve#(mark(X)) -> sieve#(X),
        sieve#(ok(X)) -> sieve#(X)}
    SCC:
     Strict:
      {top#(mark(X)) -> top#(proper(X)),
         top#(ok(X)) -> top#(active(X))}
     Weak:
     {                     sieve(mark(X)) -> mark(sieve(X)),
                             sieve(ok(X)) -> ok(sieve(X)),
                            from(mark(X)) -> mark(from(X)),
                              from(ok(X)) -> ok(from(X)),
                               s(mark(X)) -> mark(s(X)),
                                 s(ok(X)) -> ok(s(X)),
                         active(sieve(X)) -> sieve(active(X)),
                active(sieve(cons(X, Y))) -> mark(cons(X, filter(X, sieve(Y)))),
                          active(from(X)) -> mark(cons(X, from(s(X)))),
                          active(from(X)) -> from(active(X)),
                             active(s(X)) -> s(active(X)),
                         active(primes()) -> mark(sieve(from(s(s(0()))))),
                     active(cons(X1, X2)) -> cons(active(X1), X2),
                          active(head(X)) -> head(active(X)),
                 active(head(cons(X, Y))) -> mark(X),
                          active(tail(X)) -> tail(active(X)),
                 active(tail(cons(X, Y))) -> mark(Y),
                   active(if(X1, X2, X3)) -> if(active(X1), X2, X3),
                 active(if(true(), X, Y)) -> mark(X),
                active(if(false(), X, Y)) -> mark(Y),
                  active(divides(X1, X2)) -> divides(X1, active(X2)),
                  active(divides(X1, X2)) -> divides(active(X1), X2),
                   active(filter(X1, X2)) -> filter(X1, active(X2)),
                   active(filter(X1, X2)) -> filter(active(X1), X2),
      active(filter(s(s(X)), cons(Y, Z))) -> mark(if(divides(s(s(X)), Y), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y))))),
                       cons(mark(X1), X2) -> mark(cons(X1, X2)),
                     cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)),
                            head(mark(X)) -> mark(head(X)),
                              head(ok(X)) -> ok(head(X)),
                            tail(mark(X)) -> mark(tail(X)),
                              tail(ok(X)) -> ok(tail(X)),
                     if(mark(X1), X2, X3) -> mark(if(X1, X2, X3)),
               if(ok(X1), ok(X2), ok(X3)) -> ok(if(X1, X2, X3)),
                    divides(X1, mark(X2)) -> mark(divides(X1, X2)),
                    divides(mark(X1), X2) -> mark(divides(X1, X2)),
                  divides(ok(X1), ok(X2)) -> ok(divides(X1, X2)),
                     filter(X1, mark(X2)) -> mark(filter(X1, X2)),
                     filter(mark(X1), X2) -> mark(filter(X1, X2)),
                   filter(ok(X1), ok(X2)) -> ok(filter(X1, X2)),
                         proper(sieve(X)) -> sieve(proper(X)),
                          proper(from(X)) -> from(proper(X)),
                             proper(s(X)) -> s(proper(X)),
                              proper(0()) -> ok(0()),
                         proper(primes()) -> ok(primes()),
                     proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)),
                          proper(head(X)) -> head(proper(X)),
                          proper(tail(X)) -> tail(proper(X)),
                   proper(if(X1, X2, X3)) -> if(proper(X1), proper(X2), proper(X3)),
                           proper(true()) -> ok(true()),
                          proper(false()) -> ok(false()),
                  proper(divides(X1, X2)) -> divides(proper(X1), proper(X2)),
                   proper(filter(X1, X2)) -> filter(proper(X1), proper(X2)),
                             top(mark(X)) -> top(proper(X)),
                               top(ok(X)) -> top(active(X))}
     Fail
    SCC:
     Strict:
      {       proper#(sieve(X)) -> proper#(X),
               proper#(from(X)) -> proper#(X),
                  proper#(s(X)) -> proper#(X),
          proper#(cons(X1, X2)) -> proper#(X1),
          proper#(cons(X1, X2)) -> proper#(X2),
               proper#(head(X)) -> proper#(X),
               proper#(tail(X)) -> proper#(X),
        proper#(if(X1, X2, X3)) -> proper#(X1),
        proper#(if(X1, X2, X3)) -> proper#(X2),
        proper#(if(X1, X2, X3)) -> proper#(X3),
       proper#(divides(X1, X2)) -> proper#(X1),
       proper#(divides(X1, X2)) -> proper#(X2),
        proper#(filter(X1, X2)) -> proper#(X1),
        proper#(filter(X1, X2)) -> proper#(X2)}
     Weak:
     {                     sieve(mark(X)) -> mark(sieve(X)),
                             sieve(ok(X)) -> ok(sieve(X)),
                            from(mark(X)) -> mark(from(X)),
                              from(ok(X)) -> ok(from(X)),
                               s(mark(X)) -> mark(s(X)),
                                 s(ok(X)) -> ok(s(X)),
                         active(sieve(X)) -> sieve(active(X)),
                active(sieve(cons(X, Y))) -> mark(cons(X, filter(X, sieve(Y)))),
                          active(from(X)) -> mark(cons(X, from(s(X)))),
                          active(from(X)) -> from(active(X)),
                             active(s(X)) -> s(active(X)),
                         active(primes()) -> mark(sieve(from(s(s(0()))))),
                     active(cons(X1, X2)) -> cons(active(X1), X2),
                          active(head(X)) -> head(active(X)),
                 active(head(cons(X, Y))) -> mark(X),
                          active(tail(X)) -> tail(active(X)),
                 active(tail(cons(X, Y))) -> mark(Y),
                   active(if(X1, X2, X3)) -> if(active(X1), X2, X3),
                 active(if(true(), X, Y)) -> mark(X),
                active(if(false(), X, Y)) -> mark(Y),
                  active(divides(X1, X2)) -> divides(X1, active(X2)),
                  active(divides(X1, X2)) -> divides(active(X1), X2),
                   active(filter(X1, X2)) -> filter(X1, active(X2)),
                   active(filter(X1, X2)) -> filter(active(X1), X2),
      active(filter(s(s(X)), cons(Y, Z))) -> mark(if(divides(s(s(X)), Y), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y))))),
                       cons(mark(X1), X2) -> mark(cons(X1, X2)),
                     cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)),
                            head(mark(X)) -> mark(head(X)),
                              head(ok(X)) -> ok(head(X)),
                            tail(mark(X)) -> mark(tail(X)),
                              tail(ok(X)) -> ok(tail(X)),
                     if(mark(X1), X2, X3) -> mark(if(X1, X2, X3)),
               if(ok(X1), ok(X2), ok(X3)) -> ok(if(X1, X2, X3)),
                    divides(X1, mark(X2)) -> mark(divides(X1, X2)),
                    divides(mark(X1), X2) -> mark(divides(X1, X2)),
                  divides(ok(X1), ok(X2)) -> ok(divides(X1, X2)),
                     filter(X1, mark(X2)) -> mark(filter(X1, X2)),
                     filter(mark(X1), X2) -> mark(filter(X1, X2)),
                   filter(ok(X1), ok(X2)) -> ok(filter(X1, X2)),
                         proper(sieve(X)) -> sieve(proper(X)),
                          proper(from(X)) -> from(proper(X)),
                             proper(s(X)) -> s(proper(X)),
                              proper(0()) -> ok(0()),
                         proper(primes()) -> ok(primes()),
                     proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)),
                          proper(head(X)) -> head(proper(X)),
                          proper(tail(X)) -> tail(proper(X)),
                   proper(if(X1, X2, X3)) -> if(proper(X1), proper(X2), proper(X3)),
                           proper(true()) -> ok(true()),
                          proper(false()) -> ok(false()),
                  proper(divides(X1, X2)) -> divides(proper(X1), proper(X2)),
                   proper(filter(X1, X2)) -> filter(proper(X1), proper(X2)),
                             top(mark(X)) -> top(proper(X)),
                               top(ok(X)) -> top(active(X))}
     SPSC:
      Simple Projection:
       pi(proper#) = 0
      Strict:
       {       proper#(sieve(X)) -> proper#(X),
                proper#(from(X)) -> proper#(X),
                   proper#(s(X)) -> proper#(X),
           proper#(cons(X1, X2)) -> proper#(X1),
           proper#(cons(X1, X2)) -> proper#(X2),
                proper#(head(X)) -> proper#(X),
                proper#(tail(X)) -> proper#(X),
         proper#(if(X1, X2, X3)) -> proper#(X1),
         proper#(if(X1, X2, X3)) -> proper#(X2),
         proper#(if(X1, X2, X3)) -> proper#(X3),
        proper#(divides(X1, X2)) -> proper#(X1),
         proper#(filter(X1, X2)) -> proper#(X1),
         proper#(filter(X1, X2)) -> proper#(X2)}
      EDG:
       {
        (proper#(from(X)) -> proper#(X), proper#(filter(X1, X2)) -> proper#(X2))
        (proper#(from(X)) -> proper#(X), proper#(filter(X1, X2)) -> proper#(X1))
        (proper#(from(X)) -> proper#(X), proper#(divides(X1, X2)) -> proper#(X1))
        (proper#(from(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X3))
        (proper#(from(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X2))
        (proper#(from(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X1))
        (proper#(from(X)) -> proper#(X), proper#(tail(X)) -> proper#(X))
        (proper#(from(X)) -> proper#(X), proper#(head(X)) -> proper#(X))
        (proper#(from(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X2))
        (proper#(from(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X1))
        (proper#(from(X)) -> proper#(X), proper#(s(X)) -> proper#(X))
        (proper#(from(X)) -> proper#(X), proper#(from(X)) -> proper#(X))
        (proper#(from(X)) -> proper#(X), proper#(sieve(X)) -> proper#(X))
        (proper#(head(X)) -> proper#(X), proper#(filter(X1, X2)) -> proper#(X2))
        (proper#(head(X)) -> proper#(X), proper#(filter(X1, X2)) -> proper#(X1))
        (proper#(head(X)) -> proper#(X), proper#(divides(X1, X2)) -> proper#(X1))
        (proper#(head(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X3))
        (proper#(head(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X2))
        (proper#(head(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X1))
        (proper#(head(X)) -> proper#(X), proper#(tail(X)) -> proper#(X))
        (proper#(head(X)) -> proper#(X), proper#(head(X)) -> proper#(X))
        (proper#(head(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X2))
        (proper#(head(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X1))
        (proper#(head(X)) -> proper#(X), proper#(s(X)) -> proper#(X))
        (proper#(head(X)) -> proper#(X), proper#(from(X)) -> proper#(X))
        (proper#(head(X)) -> proper#(X), proper#(sieve(X)) -> proper#(X))
        (proper#(cons(X1, X2)) -> proper#(X1), proper#(filter(X1, X2)) -> proper#(X2))
        (proper#(cons(X1, X2)) -> proper#(X1), proper#(filter(X1, X2)) -> proper#(X1))
        (proper#(cons(X1, X2)) -> proper#(X1), proper#(divides(X1, X2)) -> proper#(X1))
        (proper#(cons(X1, X2)) -> proper#(X1), proper#(if(X1, X2, X3)) -> proper#(X3))
        (proper#(cons(X1, X2)) -> proper#(X1), proper#(if(X1, X2, X3)) -> proper#(X2))
        (proper#(cons(X1, X2)) -> proper#(X1), proper#(if(X1, X2, X3)) -> proper#(X1))
        (proper#(cons(X1, X2)) -> proper#(X1), proper#(tail(X)) -> proper#(X))
        (proper#(cons(X1, X2)) -> proper#(X1), proper#(head(X)) -> proper#(X))
        (proper#(cons(X1, X2)) -> proper#(X1), proper#(cons(X1, X2)) -> proper#(X2))
        (proper#(cons(X1, X2)) -> proper#(X1), proper#(cons(X1, X2)) -> proper#(X1))
        (proper#(cons(X1, X2)) -> proper#(X1), proper#(s(X)) -> proper#(X))
        (proper#(cons(X1, X2)) -> proper#(X1), proper#(from(X)) -> proper#(X))
        (proper#(cons(X1, X2)) -> proper#(X1), proper#(sieve(X)) -> proper#(X))
        (proper#(divides(X1, X2)) -> proper#(X1), proper#(filter(X1, X2)) -> proper#(X2))
        (proper#(divides(X1, X2)) -> proper#(X1), proper#(filter(X1, X2)) -> proper#(X1))
        (proper#(divides(X1, X2)) -> proper#(X1), proper#(divides(X1, X2)) -> proper#(X1))
        (proper#(divides(X1, X2)) -> proper#(X1), proper#(if(X1, X2, X3)) -> proper#(X3))
        (proper#(divides(X1, X2)) -> proper#(X1), proper#(if(X1, X2, X3)) -> proper#(X2))
        (proper#(divides(X1, X2)) -> proper#(X1), proper#(if(X1, X2, X3)) -> proper#(X1))
        (proper#(divides(X1, X2)) -> proper#(X1), proper#(tail(X)) -> proper#(X))
        (proper#(divides(X1, X2)) -> proper#(X1), proper#(head(X)) -> proper#(X))
        (proper#(divides(X1, X2)) -> proper#(X1), proper#(cons(X1, X2)) -> proper#(X2))
        (proper#(divides(X1, X2)) -> proper#(X1), proper#(cons(X1, X2)) -> proper#(X1))
        (proper#(divides(X1, X2)) -> proper#(X1), proper#(s(X)) -> proper#(X))
        (proper#(divides(X1, X2)) -> proper#(X1), proper#(from(X)) -> proper#(X))
        (proper#(divides(X1, X2)) -> proper#(X1), proper#(sieve(X)) -> proper#(X))
        (proper#(cons(X1, X2)) -> proper#(X2), proper#(filter(X1, X2)) -> proper#(X2))
        (proper#(cons(X1, X2)) -> proper#(X2), proper#(filter(X1, X2)) -> proper#(X1))
        (proper#(cons(X1, X2)) -> proper#(X2), proper#(divides(X1, X2)) -> proper#(X1))
        (proper#(cons(X1, X2)) -> proper#(X2), proper#(if(X1, X2, X3)) -> proper#(X3))
        (proper#(cons(X1, X2)) -> proper#(X2), proper#(if(X1, X2, X3)) -> proper#(X2))
        (proper#(cons(X1, X2)) -> proper#(X2), proper#(if(X1, X2, X3)) -> proper#(X1))
        (proper#(cons(X1, X2)) -> proper#(X2), proper#(tail(X)) -> proper#(X))
        (proper#(cons(X1, X2)) -> proper#(X2), proper#(head(X)) -> proper#(X))
        (proper#(cons(X1, X2)) -> proper#(X2), proper#(cons(X1, X2)) -> proper#(X2))
        (proper#(cons(X1, X2)) -> proper#(X2), proper#(cons(X1, X2)) -> proper#(X1))
        (proper#(cons(X1, X2)) -> proper#(X2), proper#(s(X)) -> proper#(X))
        (proper#(cons(X1, X2)) -> proper#(X2), proper#(from(X)) -> proper#(X))
        (proper#(cons(X1, X2)) -> proper#(X2), proper#(sieve(X)) -> proper#(X))
        (proper#(filter(X1, X2)) -> proper#(X2), proper#(filter(X1, X2)) -> proper#(X2))
        (proper#(filter(X1, X2)) -> proper#(X2), proper#(filter(X1, X2)) -> proper#(X1))
        (proper#(filter(X1, X2)) -> proper#(X2), proper#(divides(X1, X2)) -> proper#(X1))
        (proper#(filter(X1, X2)) -> proper#(X2), proper#(if(X1, X2, X3)) -> proper#(X3))
        (proper#(filter(X1, X2)) -> proper#(X2), proper#(if(X1, X2, X3)) -> proper#(X2))
        (proper#(filter(X1, X2)) -> proper#(X2), proper#(if(X1, X2, X3)) -> proper#(X1))
        (proper#(filter(X1, X2)) -> proper#(X2), proper#(tail(X)) -> proper#(X))
        (proper#(filter(X1, X2)) -> proper#(X2), proper#(head(X)) -> proper#(X))
        (proper#(filter(X1, X2)) -> proper#(X2), proper#(cons(X1, X2)) -> proper#(X2))
        (proper#(filter(X1, X2)) -> proper#(X2), proper#(cons(X1, X2)) -> proper#(X1))
        (proper#(filter(X1, X2)) -> proper#(X2), proper#(s(X)) -> proper#(X))
        (proper#(filter(X1, X2)) -> proper#(X2), proper#(from(X)) -> proper#(X))
        (proper#(filter(X1, X2)) -> proper#(X2), proper#(sieve(X)) -> proper#(X))
        (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(sieve(X)) -> proper#(X))
        (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(from(X)) -> proper#(X))
        (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(s(X)) -> proper#(X))
        (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(cons(X1, X2)) -> proper#(X1))
        (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(cons(X1, X2)) -> proper#(X2))
        (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(head(X)) -> proper#(X))
        (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(tail(X)) -> proper#(X))
        (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(if(X1, X2, X3)) -> proper#(X1))
        (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(if(X1, X2, X3)) -> proper#(X2))
        (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(if(X1, X2, X3)) -> proper#(X3))
        (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(divides(X1, X2)) -> proper#(X1))
        (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(filter(X1, X2)) -> proper#(X1))
        (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(filter(X1, X2)) -> proper#(X2))
        (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(sieve(X)) -> proper#(X))
        (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(from(X)) -> proper#(X))
        (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(s(X)) -> proper#(X))
        (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(cons(X1, X2)) -> proper#(X1))
        (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(cons(X1, X2)) -> proper#(X2))
        (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(head(X)) -> proper#(X))
        (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(tail(X)) -> proper#(X))
        (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(if(X1, X2, X3)) -> proper#(X1))
        (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(if(X1, X2, X3)) -> proper#(X2))
        (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(if(X1, X2, X3)) -> proper#(X3))
        (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(divides(X1, X2)) -> proper#(X1))
        (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(filter(X1, X2)) -> proper#(X1))
        (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(filter(X1, X2)) -> proper#(X2))
        (proper#(filter(X1, X2)) -> proper#(X1), proper#(sieve(X)) -> proper#(X))
        (proper#(filter(X1, X2)) -> proper#(X1), proper#(from(X)) -> proper#(X))
        (proper#(filter(X1, X2)) -> proper#(X1), proper#(s(X)) -> proper#(X))
        (proper#(filter(X1, X2)) -> proper#(X1), proper#(cons(X1, X2)) -> proper#(X1))
        (proper#(filter(X1, X2)) -> proper#(X1), proper#(cons(X1, X2)) -> proper#(X2))
        (proper#(filter(X1, X2)) -> proper#(X1), proper#(head(X)) -> proper#(X))
        (proper#(filter(X1, X2)) -> proper#(X1), proper#(tail(X)) -> proper#(X))
        (proper#(filter(X1, X2)) -> proper#(X1), proper#(if(X1, X2, X3)) -> proper#(X1))
        (proper#(filter(X1, X2)) -> proper#(X1), proper#(if(X1, X2, X3)) -> proper#(X2))
        (proper#(filter(X1, X2)) -> proper#(X1), proper#(if(X1, X2, X3)) -> proper#(X3))
        (proper#(filter(X1, X2)) -> proper#(X1), proper#(divides(X1, X2)) -> proper#(X1))
        (proper#(filter(X1, X2)) -> proper#(X1), proper#(filter(X1, X2)) -> proper#(X1))
        (proper#(filter(X1, X2)) -> proper#(X1), proper#(filter(X1, X2)) -> proper#(X2))
        (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(sieve(X)) -> proper#(X))
        (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(from(X)) -> proper#(X))
        (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(s(X)) -> proper#(X))
        (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(cons(X1, X2)) -> proper#(X1))
        (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(cons(X1, X2)) -> proper#(X2))
        (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(head(X)) -> proper#(X))
        (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(tail(X)) -> proper#(X))
        (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(if(X1, X2, X3)) -> proper#(X1))
        (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(if(X1, X2, X3)) -> proper#(X2))
        (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(if(X1, X2, X3)) -> proper#(X3))
        (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(divides(X1, X2)) -> proper#(X1))
        (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(filter(X1, X2)) -> proper#(X1))
        (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(filter(X1, X2)) -> proper#(X2))
        (proper#(tail(X)) -> proper#(X), proper#(sieve(X)) -> proper#(X))
        (proper#(tail(X)) -> proper#(X), proper#(from(X)) -> proper#(X))
        (proper#(tail(X)) -> proper#(X), proper#(s(X)) -> proper#(X))
        (proper#(tail(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X1))
        (proper#(tail(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X2))
        (proper#(tail(X)) -> proper#(X), proper#(head(X)) -> proper#(X))
        (proper#(tail(X)) -> proper#(X), proper#(tail(X)) -> proper#(X))
        (proper#(tail(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X1))
        (proper#(tail(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X2))
        (proper#(tail(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X3))
        (proper#(tail(X)) -> proper#(X), proper#(divides(X1, X2)) -> proper#(X1))
        (proper#(tail(X)) -> proper#(X), proper#(filter(X1, X2)) -> proper#(X1))
        (proper#(tail(X)) -> proper#(X), proper#(filter(X1, X2)) -> proper#(X2))
        (proper#(s(X)) -> proper#(X), proper#(sieve(X)) -> proper#(X))
        (proper#(s(X)) -> proper#(X), proper#(from(X)) -> proper#(X))
        (proper#(s(X)) -> proper#(X), proper#(s(X)) -> proper#(X))
        (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#(head(X)) -> proper#(X))
        (proper#(s(X)) -> proper#(X), proper#(tail(X)) -> proper#(X))
        (proper#(s(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X1))
        (proper#(s(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X2))
        (proper#(s(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X3))
        (proper#(s(X)) -> proper#(X), proper#(divides(X1, X2)) -> proper#(X1))
        (proper#(s(X)) -> proper#(X), proper#(filter(X1, X2)) -> proper#(X1))
        (proper#(s(X)) -> proper#(X), proper#(filter(X1, X2)) -> proper#(X2))
        (proper#(sieve(X)) -> proper#(X), proper#(sieve(X)) -> proper#(X))
        (proper#(sieve(X)) -> proper#(X), proper#(from(X)) -> proper#(X))
        (proper#(sieve(X)) -> proper#(X), proper#(s(X)) -> proper#(X))
        (proper#(sieve(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X1))
        (proper#(sieve(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X2))
        (proper#(sieve(X)) -> proper#(X), proper#(head(X)) -> proper#(X))
        (proper#(sieve(X)) -> proper#(X), proper#(tail(X)) -> proper#(X))
        (proper#(sieve(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X1))
        (proper#(sieve(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X2))
        (proper#(sieve(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X3))
        (proper#(sieve(X)) -> proper#(X), proper#(divides(X1, X2)) -> proper#(X1))
        (proper#(sieve(X)) -> proper#(X), proper#(filter(X1, X2)) -> proper#(X1))
        (proper#(sieve(X)) -> proper#(X), proper#(filter(X1, X2)) -> proper#(X2))
       }
       SCCS:
        Scc:
         {       proper#(sieve(X)) -> proper#(X),
                  proper#(from(X)) -> proper#(X),
                     proper#(s(X)) -> proper#(X),
             proper#(cons(X1, X2)) -> proper#(X1),
             proper#(cons(X1, X2)) -> proper#(X2),
                  proper#(head(X)) -> proper#(X),
                  proper#(tail(X)) -> proper#(X),
           proper#(if(X1, X2, X3)) -> proper#(X1),
           proper#(if(X1, X2, X3)) -> proper#(X2),
           proper#(if(X1, X2, X3)) -> proper#(X3),
          proper#(divides(X1, X2)) -> proper#(X1),
           proper#(filter(X1, X2)) -> proper#(X1),
           proper#(filter(X1, X2)) -> proper#(X2)}
        SCC:
         Strict:
          {       proper#(sieve(X)) -> proper#(X),
                   proper#(from(X)) -> proper#(X),
                      proper#(s(X)) -> proper#(X),
              proper#(cons(X1, X2)) -> proper#(X1),
              proper#(cons(X1, X2)) -> proper#(X2),
                   proper#(head(X)) -> proper#(X),
                   proper#(tail(X)) -> proper#(X),
            proper#(if(X1, X2, X3)) -> proper#(X1),
            proper#(if(X1, X2, X3)) -> proper#(X2),
            proper#(if(X1, X2, X3)) -> proper#(X3),
           proper#(divides(X1, X2)) -> proper#(X1),
            proper#(filter(X1, X2)) -> proper#(X1),
            proper#(filter(X1, X2)) -> proper#(X2)}
         Weak:
         {                     sieve(mark(X)) -> mark(sieve(X)),
                                 sieve(ok(X)) -> ok(sieve(X)),
                                from(mark(X)) -> mark(from(X)),
                                  from(ok(X)) -> ok(from(X)),
                                   s(mark(X)) -> mark(s(X)),
                                     s(ok(X)) -> ok(s(X)),
                             active(sieve(X)) -> sieve(active(X)),
                    active(sieve(cons(X, Y))) -> mark(cons(X, filter(X, sieve(Y)))),
                              active(from(X)) -> mark(cons(X, from(s(X)))),
                              active(from(X)) -> from(active(X)),
                                 active(s(X)) -> s(active(X)),
                             active(primes()) -> mark(sieve(from(s(s(0()))))),
                         active(cons(X1, X2)) -> cons(active(X1), X2),
                              active(head(X)) -> head(active(X)),
                     active(head(cons(X, Y))) -> mark(X),
                              active(tail(X)) -> tail(active(X)),
                     active(tail(cons(X, Y))) -> mark(Y),
                       active(if(X1, X2, X3)) -> if(active(X1), X2, X3),
                     active(if(true(), X, Y)) -> mark(X),
                    active(if(false(), X, Y)) -> mark(Y),
                      active(divides(X1, X2)) -> divides(X1, active(X2)),
                      active(divides(X1, X2)) -> divides(active(X1), X2),
                       active(filter(X1, X2)) -> filter(X1, active(X2)),
                       active(filter(X1, X2)) -> filter(active(X1), X2),
          active(filter(s(s(X)), cons(Y, Z))) -> mark(if(divides(s(s(X)), Y), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y))))),
                           cons(mark(X1), X2) -> mark(cons(X1, X2)),
                         cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)),
                                head(mark(X)) -> mark(head(X)),
                                  head(ok(X)) -> ok(head(X)),
                                tail(mark(X)) -> mark(tail(X)),
                                  tail(ok(X)) -> ok(tail(X)),
                         if(mark(X1), X2, X3) -> mark(if(X1, X2, X3)),
                   if(ok(X1), ok(X2), ok(X3)) -> ok(if(X1, X2, X3)),
                        divides(X1, mark(X2)) -> mark(divides(X1, X2)),
                        divides(mark(X1), X2) -> mark(divides(X1, X2)),
                      divides(ok(X1), ok(X2)) -> ok(divides(X1, X2)),
                         filter(X1, mark(X2)) -> mark(filter(X1, X2)),
                         filter(mark(X1), X2) -> mark(filter(X1, X2)),
                       filter(ok(X1), ok(X2)) -> ok(filter(X1, X2)),
                             proper(sieve(X)) -> sieve(proper(X)),
                              proper(from(X)) -> from(proper(X)),
                                 proper(s(X)) -> s(proper(X)),
                                  proper(0()) -> ok(0()),
                             proper(primes()) -> ok(primes()),
                         proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)),
                              proper(head(X)) -> head(proper(X)),
                              proper(tail(X)) -> tail(proper(X)),
                       proper(if(X1, X2, X3)) -> if(proper(X1), proper(X2), proper(X3)),
                               proper(true()) -> ok(true()),
                              proper(false()) -> ok(false()),
                      proper(divides(X1, X2)) -> divides(proper(X1), proper(X2)),
                       proper(filter(X1, X2)) -> filter(proper(X1), proper(X2)),
                                 top(mark(X)) -> top(proper(X)),
                                   top(ok(X)) -> top(active(X))}
         SPSC:
          Simple Projection:
           pi(proper#) = 0
          Strict:
           {       proper#(sieve(X)) -> proper#(X),
                    proper#(from(X)) -> proper#(X),
                       proper#(s(X)) -> proper#(X),
               proper#(cons(X1, X2)) -> proper#(X1),
               proper#(cons(X1, X2)) -> proper#(X2),
                    proper#(head(X)) -> proper#(X),
                    proper#(tail(X)) -> proper#(X),
             proper#(if(X1, X2, X3)) -> proper#(X1),
             proper#(if(X1, X2, X3)) -> proper#(X2),
             proper#(if(X1, X2, X3)) -> proper#(X3),
            proper#(divides(X1, X2)) -> proper#(X1),
             proper#(filter(X1, X2)) -> proper#(X2)}
          EDG:
           {
            (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(filter(X1, X2)) -> proper#(X2))
            (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(divides(X1, X2)) -> proper#(X1))
            (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(if(X1, X2, X3)) -> proper#(X3))
            (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(if(X1, X2, X3)) -> proper#(X2))
            (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(if(X1, X2, X3)) -> proper#(X1))
            (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(tail(X)) -> proper#(X))
            (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(head(X)) -> proper#(X))
            (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(cons(X1, X2)) -> proper#(X2))
            (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(cons(X1, X2)) -> proper#(X1))
            (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(s(X)) -> proper#(X))
            (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(from(X)) -> proper#(X))
            (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(sieve(X)) -> proper#(X))
            (proper#(sieve(X)) -> proper#(X), proper#(filter(X1, X2)) -> proper#(X2))
            (proper#(sieve(X)) -> proper#(X), proper#(divides(X1, X2)) -> proper#(X1))
            (proper#(sieve(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X3))
            (proper#(sieve(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X2))
            (proper#(sieve(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X1))
            (proper#(sieve(X)) -> proper#(X), proper#(tail(X)) -> proper#(X))
            (proper#(sieve(X)) -> proper#(X), proper#(head(X)) -> proper#(X))
            (proper#(sieve(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X2))
            (proper#(sieve(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X1))
            (proper#(sieve(X)) -> proper#(X), proper#(s(X)) -> proper#(X))
            (proper#(sieve(X)) -> proper#(X), proper#(from(X)) -> proper#(X))
            (proper#(sieve(X)) -> proper#(X), proper#(sieve(X)) -> proper#(X))
            (proper#(s(X)) -> proper#(X), proper#(filter(X1, X2)) -> proper#(X2))
            (proper#(s(X)) -> proper#(X), proper#(divides(X1, X2)) -> proper#(X1))
            (proper#(s(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X3))
            (proper#(s(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X2))
            (proper#(s(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X1))
            (proper#(s(X)) -> proper#(X), proper#(tail(X)) -> proper#(X))
            (proper#(s(X)) -> proper#(X), proper#(head(X)) -> proper#(X))
            (proper#(s(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X2))
            (proper#(s(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X1))
            (proper#(s(X)) -> proper#(X), proper#(s(X)) -> proper#(X))
            (proper#(s(X)) -> proper#(X), proper#(from(X)) -> proper#(X))
            (proper#(s(X)) -> proper#(X), proper#(sieve(X)) -> proper#(X))
            (proper#(tail(X)) -> proper#(X), proper#(filter(X1, X2)) -> proper#(X2))
            (proper#(tail(X)) -> proper#(X), proper#(divides(X1, X2)) -> proper#(X1))
            (proper#(tail(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X3))
            (proper#(tail(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X2))
            (proper#(tail(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X1))
            (proper#(tail(X)) -> proper#(X), proper#(tail(X)) -> proper#(X))
            (proper#(tail(X)) -> proper#(X), proper#(head(X)) -> proper#(X))
            (proper#(tail(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X2))
            (proper#(tail(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X1))
            (proper#(tail(X)) -> proper#(X), proper#(s(X)) -> proper#(X))
            (proper#(tail(X)) -> proper#(X), proper#(from(X)) -> proper#(X))
            (proper#(tail(X)) -> proper#(X), proper#(sieve(X)) -> proper#(X))
            (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(filter(X1, X2)) -> proper#(X2))
            (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(divides(X1, X2)) -> proper#(X1))
            (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(if(X1, X2, X3)) -> proper#(X3))
            (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(if(X1, X2, X3)) -> proper#(X2))
            (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(if(X1, X2, X3)) -> proper#(X1))
            (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(tail(X)) -> proper#(X))
            (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(head(X)) -> proper#(X))
            (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(cons(X1, X2)) -> proper#(X2))
            (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(cons(X1, X2)) -> proper#(X1))
            (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(s(X)) -> proper#(X))
            (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(from(X)) -> proper#(X))
            (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(sieve(X)) -> proper#(X))
            (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(filter(X1, X2)) -> proper#(X2))
            (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(divides(X1, X2)) -> proper#(X1))
            (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(if(X1, X2, X3)) -> proper#(X3))
            (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(if(X1, X2, X3)) -> proper#(X2))
            (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(if(X1, X2, X3)) -> proper#(X1))
            (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(tail(X)) -> proper#(X))
            (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(head(X)) -> proper#(X))
            (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(cons(X1, X2)) -> proper#(X2))
            (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(cons(X1, X2)) -> proper#(X1))
            (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(s(X)) -> proper#(X))
            (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(from(X)) -> proper#(X))
            (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(sieve(X)) -> proper#(X))
            (proper#(divides(X1, X2)) -> proper#(X1), proper#(sieve(X)) -> proper#(X))
            (proper#(divides(X1, X2)) -> proper#(X1), proper#(from(X)) -> proper#(X))
            (proper#(divides(X1, X2)) -> proper#(X1), proper#(s(X)) -> proper#(X))
            (proper#(divides(X1, X2)) -> proper#(X1), proper#(cons(X1, X2)) -> proper#(X1))
            (proper#(divides(X1, X2)) -> proper#(X1), proper#(cons(X1, X2)) -> proper#(X2))
            (proper#(divides(X1, X2)) -> proper#(X1), proper#(head(X)) -> proper#(X))
            (proper#(divides(X1, X2)) -> proper#(X1), proper#(tail(X)) -> proper#(X))
            (proper#(divides(X1, X2)) -> proper#(X1), proper#(if(X1, X2, X3)) -> proper#(X1))
            (proper#(divides(X1, X2)) -> proper#(X1), proper#(if(X1, X2, X3)) -> proper#(X2))
            (proper#(divides(X1, X2)) -> proper#(X1), proper#(if(X1, X2, X3)) -> proper#(X3))
            (proper#(divides(X1, X2)) -> proper#(X1), proper#(divides(X1, X2)) -> proper#(X1))
            (proper#(divides(X1, X2)) -> proper#(X1), proper#(filter(X1, X2)) -> proper#(X2))
            (proper#(cons(X1, X2)) -> proper#(X1), proper#(sieve(X)) -> proper#(X))
            (proper#(cons(X1, X2)) -> proper#(X1), proper#(from(X)) -> proper#(X))
            (proper#(cons(X1, X2)) -> proper#(X1), proper#(s(X)) -> proper#(X))
            (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#(head(X)) -> proper#(X))
            (proper#(cons(X1, X2)) -> proper#(X1), proper#(tail(X)) -> proper#(X))
            (proper#(cons(X1, X2)) -> proper#(X1), proper#(if(X1, X2, X3)) -> proper#(X1))
            (proper#(cons(X1, X2)) -> proper#(X1), proper#(if(X1, X2, X3)) -> proper#(X2))
            (proper#(cons(X1, X2)) -> proper#(X1), proper#(if(X1, X2, X3)) -> proper#(X3))
            (proper#(cons(X1, X2)) -> proper#(X1), proper#(divides(X1, X2)) -> proper#(X1))
            (proper#(cons(X1, X2)) -> proper#(X1), proper#(filter(X1, X2)) -> proper#(X2))
            (proper#(head(X)) -> proper#(X), proper#(sieve(X)) -> proper#(X))
            (proper#(head(X)) -> proper#(X), proper#(from(X)) -> proper#(X))
            (proper#(head(X)) -> proper#(X), proper#(s(X)) -> proper#(X))
            (proper#(head(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X1))
            (proper#(head(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X2))
            (proper#(head(X)) -> proper#(X), proper#(head(X)) -> proper#(X))
            (proper#(head(X)) -> proper#(X), proper#(tail(X)) -> proper#(X))
            (proper#(head(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X1))
            (proper#(head(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X2))
            (proper#(head(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X3))
            (proper#(head(X)) -> proper#(X), proper#(divides(X1, X2)) -> proper#(X1))
            (proper#(head(X)) -> proper#(X), proper#(filter(X1, X2)) -> proper#(X2))
            (proper#(from(X)) -> proper#(X), proper#(sieve(X)) -> proper#(X))
            (proper#(from(X)) -> proper#(X), proper#(from(X)) -> proper#(X))
            (proper#(from(X)) -> proper#(X), proper#(s(X)) -> proper#(X))
            (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#(head(X)) -> proper#(X))
            (proper#(from(X)) -> proper#(X), proper#(tail(X)) -> proper#(X))
            (proper#(from(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X1))
            (proper#(from(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X2))
            (proper#(from(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X3))
            (proper#(from(X)) -> proper#(X), proper#(divides(X1, X2)) -> proper#(X1))
            (proper#(from(X)) -> proper#(X), proper#(filter(X1, X2)) -> proper#(X2))
            (proper#(filter(X1, X2)) -> proper#(X2), proper#(sieve(X)) -> proper#(X))
            (proper#(filter(X1, X2)) -> proper#(X2), proper#(from(X)) -> proper#(X))
            (proper#(filter(X1, X2)) -> proper#(X2), proper#(s(X)) -> proper#(X))
            (proper#(filter(X1, X2)) -> proper#(X2), proper#(cons(X1, X2)) -> proper#(X1))
            (proper#(filter(X1, X2)) -> proper#(X2), proper#(cons(X1, X2)) -> proper#(X2))
            (proper#(filter(X1, X2)) -> proper#(X2), proper#(head(X)) -> proper#(X))
            (proper#(filter(X1, X2)) -> proper#(X2), proper#(tail(X)) -> proper#(X))
            (proper#(filter(X1, X2)) -> proper#(X2), proper#(if(X1, X2, X3)) -> proper#(X1))
            (proper#(filter(X1, X2)) -> proper#(X2), proper#(if(X1, X2, X3)) -> proper#(X2))
            (proper#(filter(X1, X2)) -> proper#(X2), proper#(if(X1, X2, X3)) -> proper#(X3))
            (proper#(filter(X1, X2)) -> proper#(X2), proper#(divides(X1, X2)) -> proper#(X1))
            (proper#(filter(X1, X2)) -> proper#(X2), proper#(filter(X1, X2)) -> proper#(X2))
            (proper#(cons(X1, X2)) -> proper#(X2), proper#(sieve(X)) -> proper#(X))
            (proper#(cons(X1, X2)) -> proper#(X2), proper#(from(X)) -> proper#(X))
            (proper#(cons(X1, X2)) -> proper#(X2), proper#(s(X)) -> proper#(X))
            (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#(head(X)) -> proper#(X))
            (proper#(cons(X1, X2)) -> proper#(X2), proper#(tail(X)) -> proper#(X))
            (proper#(cons(X1, X2)) -> proper#(X2), proper#(if(X1, X2, X3)) -> proper#(X1))
            (proper#(cons(X1, X2)) -> proper#(X2), proper#(if(X1, X2, X3)) -> proper#(X2))
            (proper#(cons(X1, X2)) -> proper#(X2), proper#(if(X1, X2, X3)) -> proper#(X3))
            (proper#(cons(X1, X2)) -> proper#(X2), proper#(divides(X1, X2)) -> proper#(X1))
            (proper#(cons(X1, X2)) -> proper#(X2), proper#(filter(X1, X2)) -> proper#(X2))
           }
           SCCS:
            Scc:
             {       proper#(sieve(X)) -> proper#(X),
                      proper#(from(X)) -> proper#(X),
                         proper#(s(X)) -> proper#(X),
                 proper#(cons(X1, X2)) -> proper#(X1),
                 proper#(cons(X1, X2)) -> proper#(X2),
                      proper#(head(X)) -> proper#(X),
                      proper#(tail(X)) -> proper#(X),
               proper#(if(X1, X2, X3)) -> proper#(X1),
               proper#(if(X1, X2, X3)) -> proper#(X2),
               proper#(if(X1, X2, X3)) -> proper#(X3),
              proper#(divides(X1, X2)) -> proper#(X1),
               proper#(filter(X1, X2)) -> proper#(X2)}
            SCC:
             Strict:
              {       proper#(sieve(X)) -> proper#(X),
                       proper#(from(X)) -> proper#(X),
                          proper#(s(X)) -> proper#(X),
                  proper#(cons(X1, X2)) -> proper#(X1),
                  proper#(cons(X1, X2)) -> proper#(X2),
                       proper#(head(X)) -> proper#(X),
                       proper#(tail(X)) -> proper#(X),
                proper#(if(X1, X2, X3)) -> proper#(X1),
                proper#(if(X1, X2, X3)) -> proper#(X2),
                proper#(if(X1, X2, X3)) -> proper#(X3),
               proper#(divides(X1, X2)) -> proper#(X1),
                proper#(filter(X1, X2)) -> proper#(X2)}
             Weak:
             {                     sieve(mark(X)) -> mark(sieve(X)),
                                     sieve(ok(X)) -> ok(sieve(X)),
                                    from(mark(X)) -> mark(from(X)),
                                      from(ok(X)) -> ok(from(X)),
                                       s(mark(X)) -> mark(s(X)),
                                         s(ok(X)) -> ok(s(X)),
                                 active(sieve(X)) -> sieve(active(X)),
                        active(sieve(cons(X, Y))) -> mark(cons(X, filter(X, sieve(Y)))),
                                  active(from(X)) -> mark(cons(X, from(s(X)))),
                                  active(from(X)) -> from(active(X)),
                                     active(s(X)) -> s(active(X)),
                                 active(primes()) -> mark(sieve(from(s(s(0()))))),
                             active(cons(X1, X2)) -> cons(active(X1), X2),
                                  active(head(X)) -> head(active(X)),
                         active(head(cons(X, Y))) -> mark(X),
                                  active(tail(X)) -> tail(active(X)),
                         active(tail(cons(X, Y))) -> mark(Y),
                           active(if(X1, X2, X3)) -> if(active(X1), X2, X3),
                         active(if(true(), X, Y)) -> mark(X),
                        active(if(false(), X, Y)) -> mark(Y),
                          active(divides(X1, X2)) -> divides(X1, active(X2)),
                          active(divides(X1, X2)) -> divides(active(X1), X2),
                           active(filter(X1, X2)) -> filter(X1, active(X2)),
                           active(filter(X1, X2)) -> filter(active(X1), X2),
              active(filter(s(s(X)), cons(Y, Z))) -> mark(if(divides(s(s(X)), Y), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y))))),
                               cons(mark(X1), X2) -> mark(cons(X1, X2)),
                             cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)),
                                    head(mark(X)) -> mark(head(X)),
                                      head(ok(X)) -> ok(head(X)),
                                    tail(mark(X)) -> mark(tail(X)),
                                      tail(ok(X)) -> ok(tail(X)),
                             if(mark(X1), X2, X3) -> mark(if(X1, X2, X3)),
                       if(ok(X1), ok(X2), ok(X3)) -> ok(if(X1, X2, X3)),
                            divides(X1, mark(X2)) -> mark(divides(X1, X2)),
                            divides(mark(X1), X2) -> mark(divides(X1, X2)),
                          divides(ok(X1), ok(X2)) -> ok(divides(X1, X2)),
                             filter(X1, mark(X2)) -> mark(filter(X1, X2)),
                             filter(mark(X1), X2) -> mark(filter(X1, X2)),
                           filter(ok(X1), ok(X2)) -> ok(filter(X1, X2)),
                                 proper(sieve(X)) -> sieve(proper(X)),
                                  proper(from(X)) -> from(proper(X)),
                                     proper(s(X)) -> s(proper(X)),
                                      proper(0()) -> ok(0()),
                                 proper(primes()) -> ok(primes()),
                             proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)),
                                  proper(head(X)) -> head(proper(X)),
                                  proper(tail(X)) -> tail(proper(X)),
                           proper(if(X1, X2, X3)) -> if(proper(X1), proper(X2), proper(X3)),
                                   proper(true()) -> ok(true()),
                                  proper(false()) -> ok(false()),
                          proper(divides(X1, X2)) -> divides(proper(X1), proper(X2)),
                           proper(filter(X1, X2)) -> filter(proper(X1), proper(X2)),
                                     top(mark(X)) -> top(proper(X)),
                                       top(ok(X)) -> top(active(X))}
             SPSC:
              Simple Projection:
               pi(proper#) = 0
              Strict:
               {       proper#(sieve(X)) -> proper#(X),
                        proper#(from(X)) -> proper#(X),
                           proper#(s(X)) -> proper#(X),
                   proper#(cons(X1, X2)) -> proper#(X1),
                   proper#(cons(X1, X2)) -> proper#(X2),
                        proper#(head(X)) -> proper#(X),
                        proper#(tail(X)) -> proper#(X),
                 proper#(if(X1, X2, X3)) -> proper#(X1),
                 proper#(if(X1, X2, X3)) -> proper#(X2),
                 proper#(if(X1, X2, X3)) -> proper#(X3),
                proper#(divides(X1, X2)) -> proper#(X1)}
              EDG:
               {(proper#(from(X)) -> proper#(X), proper#(divides(X1, X2)) -> proper#(X1))
                (proper#(from(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X3))
                (proper#(from(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X2))
                (proper#(from(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X1))
                (proper#(from(X)) -> proper#(X), proper#(tail(X)) -> proper#(X))
                (proper#(from(X)) -> proper#(X), proper#(head(X)) -> proper#(X))
                (proper#(from(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X2))
                (proper#(from(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X1))
                (proper#(from(X)) -> proper#(X), proper#(s(X)) -> proper#(X))
                (proper#(from(X)) -> proper#(X), proper#(from(X)) -> proper#(X))
                (proper#(from(X)) -> proper#(X), proper#(sieve(X)) -> proper#(X))
                (proper#(head(X)) -> proper#(X), proper#(divides(X1, X2)) -> proper#(X1))
                (proper#(head(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X3))
                (proper#(head(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X2))
                (proper#(head(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X1))
                (proper#(head(X)) -> proper#(X), proper#(tail(X)) -> proper#(X))
                (proper#(head(X)) -> proper#(X), proper#(head(X)) -> proper#(X))
                (proper#(head(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X2))
                (proper#(head(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X1))
                (proper#(head(X)) -> proper#(X), proper#(s(X)) -> proper#(X))
                (proper#(head(X)) -> proper#(X), proper#(from(X)) -> proper#(X))
                (proper#(head(X)) -> proper#(X), proper#(sieve(X)) -> proper#(X))
                (proper#(cons(X1, X2)) -> proper#(X1), proper#(divides(X1, X2)) -> proper#(X1))
                (proper#(cons(X1, X2)) -> proper#(X1), proper#(if(X1, X2, X3)) -> proper#(X3))
                (proper#(cons(X1, X2)) -> proper#(X1), proper#(if(X1, X2, X3)) -> proper#(X2))
                (proper#(cons(X1, X2)) -> proper#(X1), proper#(if(X1, X2, X3)) -> proper#(X1))
                (proper#(cons(X1, X2)) -> proper#(X1), proper#(tail(X)) -> proper#(X))
                (proper#(cons(X1, X2)) -> proper#(X1), proper#(head(X)) -> proper#(X))
                (proper#(cons(X1, X2)) -> proper#(X1), proper#(cons(X1, X2)) -> proper#(X2))
                (proper#(cons(X1, X2)) -> proper#(X1), proper#(cons(X1, X2)) -> proper#(X1))
                (proper#(cons(X1, X2)) -> proper#(X1), proper#(s(X)) -> proper#(X))
                (proper#(cons(X1, X2)) -> proper#(X1), proper#(from(X)) -> proper#(X))
                (proper#(cons(X1, X2)) -> proper#(X1), proper#(sieve(X)) -> proper#(X))
                (proper#(divides(X1, X2)) -> proper#(X1), proper#(divides(X1, X2)) -> proper#(X1))
                (proper#(divides(X1, X2)) -> proper#(X1), proper#(if(X1, X2, X3)) -> proper#(X3))
                (proper#(divides(X1, X2)) -> proper#(X1), proper#(if(X1, X2, X3)) -> proper#(X2))
                (proper#(divides(X1, X2)) -> proper#(X1), proper#(if(X1, X2, X3)) -> proper#(X1))
                (proper#(divides(X1, X2)) -> proper#(X1), proper#(tail(X)) -> proper#(X))
                (proper#(divides(X1, X2)) -> proper#(X1), proper#(head(X)) -> proper#(X))
                (proper#(divides(X1, X2)) -> proper#(X1), proper#(cons(X1, X2)) -> proper#(X2))
                (proper#(divides(X1, X2)) -> proper#(X1), proper#(cons(X1, X2)) -> proper#(X1))
                (proper#(divides(X1, X2)) -> proper#(X1), proper#(s(X)) -> proper#(X))
                (proper#(divides(X1, X2)) -> proper#(X1), proper#(from(X)) -> proper#(X))
                (proper#(divides(X1, X2)) -> proper#(X1), proper#(sieve(X)) -> proper#(X))
                (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(divides(X1, X2)) -> proper#(X1))
                (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(if(X1, X2, X3)) -> proper#(X3))
                (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(if(X1, X2, X3)) -> proper#(X2))
                (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(if(X1, X2, X3)) -> proper#(X1))
                (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(tail(X)) -> proper#(X))
                (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(head(X)) -> proper#(X))
                (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(cons(X1, X2)) -> proper#(X2))
                (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(cons(X1, X2)) -> proper#(X1))
                (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(s(X)) -> proper#(X))
                (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(from(X)) -> proper#(X))
                (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(sieve(X)) -> proper#(X))
                (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(sieve(X)) -> proper#(X))
                (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(from(X)) -> proper#(X))
                (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(s(X)) -> proper#(X))
                (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(cons(X1, X2)) -> proper#(X1))
                (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(cons(X1, X2)) -> proper#(X2))
                (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(head(X)) -> proper#(X))
                (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(tail(X)) -> proper#(X))
                (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(if(X1, X2, X3)) -> proper#(X1))
                (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(if(X1, X2, X3)) -> proper#(X2))
                (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(if(X1, X2, X3)) -> proper#(X3))
                (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(divides(X1, X2)) -> proper#(X1))
                (proper#(cons(X1, X2)) -> proper#(X2), proper#(sieve(X)) -> proper#(X))
                (proper#(cons(X1, X2)) -> proper#(X2), proper#(from(X)) -> proper#(X))
                (proper#(cons(X1, X2)) -> proper#(X2), proper#(s(X)) -> proper#(X))
                (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#(head(X)) -> proper#(X))
                (proper#(cons(X1, X2)) -> proper#(X2), proper#(tail(X)) -> proper#(X))
                (proper#(cons(X1, X2)) -> proper#(X2), proper#(if(X1, X2, X3)) -> proper#(X1))
                (proper#(cons(X1, X2)) -> proper#(X2), proper#(if(X1, X2, X3)) -> proper#(X2))
                (proper#(cons(X1, X2)) -> proper#(X2), proper#(if(X1, X2, X3)) -> proper#(X3))
                (proper#(cons(X1, X2)) -> proper#(X2), proper#(divides(X1, X2)) -> proper#(X1))
                (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(sieve(X)) -> proper#(X))
                (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(from(X)) -> proper#(X))
                (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(s(X)) -> proper#(X))
                (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(cons(X1, X2)) -> proper#(X1))
                (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(cons(X1, X2)) -> proper#(X2))
                (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(head(X)) -> proper#(X))
                (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(tail(X)) -> proper#(X))
                (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(if(X1, X2, X3)) -> proper#(X1))
                (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(if(X1, X2, X3)) -> proper#(X2))
                (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(if(X1, X2, X3)) -> proper#(X3))
                (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(divides(X1, X2)) -> proper#(X1))
                (proper#(tail(X)) -> proper#(X), proper#(sieve(X)) -> proper#(X))
                (proper#(tail(X)) -> proper#(X), proper#(from(X)) -> proper#(X))
                (proper#(tail(X)) -> proper#(X), proper#(s(X)) -> proper#(X))
                (proper#(tail(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X1))
                (proper#(tail(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X2))
                (proper#(tail(X)) -> proper#(X), proper#(head(X)) -> proper#(X))
                (proper#(tail(X)) -> proper#(X), proper#(tail(X)) -> proper#(X))
                (proper#(tail(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X1))
                (proper#(tail(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X2))
                (proper#(tail(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X3))
                (proper#(tail(X)) -> proper#(X), proper#(divides(X1, X2)) -> proper#(X1))
                (proper#(s(X)) -> proper#(X), proper#(sieve(X)) -> proper#(X))
                (proper#(s(X)) -> proper#(X), proper#(from(X)) -> proper#(X))
                (proper#(s(X)) -> proper#(X), proper#(s(X)) -> proper#(X))
                (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#(head(X)) -> proper#(X))
                (proper#(s(X)) -> proper#(X), proper#(tail(X)) -> proper#(X))
                (proper#(s(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X1))
                (proper#(s(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X2))
                (proper#(s(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X3))
                (proper#(s(X)) -> proper#(X), proper#(divides(X1, X2)) -> proper#(X1))
                (proper#(sieve(X)) -> proper#(X), proper#(sieve(X)) -> proper#(X))
                (proper#(sieve(X)) -> proper#(X), proper#(from(X)) -> proper#(X))
                (proper#(sieve(X)) -> proper#(X), proper#(s(X)) -> proper#(X))
                (proper#(sieve(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X1))
                (proper#(sieve(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X2))
                (proper#(sieve(X)) -> proper#(X), proper#(head(X)) -> proper#(X))
                (proper#(sieve(X)) -> proper#(X), proper#(tail(X)) -> proper#(X))
                (proper#(sieve(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X1))
                (proper#(sieve(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X2))
                (proper#(sieve(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X3))
                (proper#(sieve(X)) -> proper#(X), proper#(divides(X1, X2)) -> proper#(X1))}
               SCCS:
                Scc:
                 {       proper#(sieve(X)) -> proper#(X),
                          proper#(from(X)) -> proper#(X),
                             proper#(s(X)) -> proper#(X),
                     proper#(cons(X1, X2)) -> proper#(X1),
                     proper#(cons(X1, X2)) -> proper#(X2),
                          proper#(head(X)) -> proper#(X),
                          proper#(tail(X)) -> proper#(X),
                   proper#(if(X1, X2, X3)) -> proper#(X1),
                   proper#(if(X1, X2, X3)) -> proper#(X2),
                   proper#(if(X1, X2, X3)) -> proper#(X3),
                  proper#(divides(X1, X2)) -> proper#(X1)}
                SCC:
                 Strict:
                  {       proper#(sieve(X)) -> proper#(X),
                           proper#(from(X)) -> proper#(X),
                              proper#(s(X)) -> proper#(X),
                      proper#(cons(X1, X2)) -> proper#(X1),
                      proper#(cons(X1, X2)) -> proper#(X2),
                           proper#(head(X)) -> proper#(X),
                           proper#(tail(X)) -> proper#(X),
                    proper#(if(X1, X2, X3)) -> proper#(X1),
                    proper#(if(X1, X2, X3)) -> proper#(X2),
                    proper#(if(X1, X2, X3)) -> proper#(X3),
                   proper#(divides(X1, X2)) -> proper#(X1)}
                 Weak:
                 {                     sieve(mark(X)) -> mark(sieve(X)),
                                         sieve(ok(X)) -> ok(sieve(X)),
                                        from(mark(X)) -> mark(from(X)),
                                          from(ok(X)) -> ok(from(X)),
                                           s(mark(X)) -> mark(s(X)),
                                             s(ok(X)) -> ok(s(X)),
                                     active(sieve(X)) -> sieve(active(X)),
                            active(sieve(cons(X, Y))) -> mark(cons(X, filter(X, sieve(Y)))),
                                      active(from(X)) -> mark(cons(X, from(s(X)))),
                                      active(from(X)) -> from(active(X)),
                                         active(s(X)) -> s(active(X)),
                                     active(primes()) -> mark(sieve(from(s(s(0()))))),
                                 active(cons(X1, X2)) -> cons(active(X1), X2),
                                      active(head(X)) -> head(active(X)),
                             active(head(cons(X, Y))) -> mark(X),
                                      active(tail(X)) -> tail(active(X)),
                             active(tail(cons(X, Y))) -> mark(Y),
                               active(if(X1, X2, X3)) -> if(active(X1), X2, X3),
                             active(if(true(), X, Y)) -> mark(X),
                            active(if(false(), X, Y)) -> mark(Y),
                              active(divides(X1, X2)) -> divides(X1, active(X2)),
                              active(divides(X1, X2)) -> divides(active(X1), X2),
                               active(filter(X1, X2)) -> filter(X1, active(X2)),
                               active(filter(X1, X2)) -> filter(active(X1), X2),
                  active(filter(s(s(X)), cons(Y, Z))) -> mark(if(divides(s(s(X)), Y), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y))))),
                                   cons(mark(X1), X2) -> mark(cons(X1, X2)),
                                 cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)),
                                        head(mark(X)) -> mark(head(X)),
                                          head(ok(X)) -> ok(head(X)),
                                        tail(mark(X)) -> mark(tail(X)),
                                          tail(ok(X)) -> ok(tail(X)),
                                 if(mark(X1), X2, X3) -> mark(if(X1, X2, X3)),
                           if(ok(X1), ok(X2), ok(X3)) -> ok(if(X1, X2, X3)),
                                divides(X1, mark(X2)) -> mark(divides(X1, X2)),
                                divides(mark(X1), X2) -> mark(divides(X1, X2)),
                              divides(ok(X1), ok(X2)) -> ok(divides(X1, X2)),
                                 filter(X1, mark(X2)) -> mark(filter(X1, X2)),
                                 filter(mark(X1), X2) -> mark(filter(X1, X2)),
                               filter(ok(X1), ok(X2)) -> ok(filter(X1, X2)),
                                     proper(sieve(X)) -> sieve(proper(X)),
                                      proper(from(X)) -> from(proper(X)),
                                         proper(s(X)) -> s(proper(X)),
                                          proper(0()) -> ok(0()),
                                     proper(primes()) -> ok(primes()),
                                 proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)),
                                      proper(head(X)) -> head(proper(X)),
                                      proper(tail(X)) -> tail(proper(X)),
                               proper(if(X1, X2, X3)) -> if(proper(X1), proper(X2), proper(X3)),
                                       proper(true()) -> ok(true()),
                                      proper(false()) -> ok(false()),
                              proper(divides(X1, X2)) -> divides(proper(X1), proper(X2)),
                               proper(filter(X1, X2)) -> filter(proper(X1), proper(X2)),
                                         top(mark(X)) -> top(proper(X)),
                                           top(ok(X)) -> top(active(X))}
                 SPSC:
                  Simple Projection:
                   pi(proper#) = 0
                  Strict:
                   {       proper#(sieve(X)) -> proper#(X),
                            proper#(from(X)) -> proper#(X),
                       proper#(cons(X1, X2)) -> proper#(X1),
                       proper#(cons(X1, X2)) -> proper#(X2),
                            proper#(head(X)) -> proper#(X),
                            proper#(tail(X)) -> proper#(X),
                     proper#(if(X1, X2, X3)) -> proper#(X1),
                     proper#(if(X1, X2, X3)) -> proper#(X2),
                     proper#(if(X1, X2, X3)) -> proper#(X3),
                    proper#(divides(X1, X2)) -> proper#(X1)}
                  EDG:
                   {(proper#(from(X)) -> proper#(X), proper#(divides(X1, X2)) -> proper#(X1))
                    (proper#(from(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X3))
                    (proper#(from(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X2))
                    (proper#(from(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X1))
                    (proper#(from(X)) -> proper#(X), proper#(tail(X)) -> proper#(X))
                    (proper#(from(X)) -> proper#(X), proper#(head(X)) -> proper#(X))
                    (proper#(from(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X2))
                    (proper#(from(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X1))
                    (proper#(from(X)) -> proper#(X), proper#(from(X)) -> proper#(X))
                    (proper#(from(X)) -> proper#(X), proper#(sieve(X)) -> proper#(X))
                    (proper#(tail(X)) -> proper#(X), proper#(divides(X1, X2)) -> proper#(X1))
                    (proper#(tail(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X3))
                    (proper#(tail(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X2))
                    (proper#(tail(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X1))
                    (proper#(tail(X)) -> proper#(X), proper#(tail(X)) -> proper#(X))
                    (proper#(tail(X)) -> proper#(X), proper#(head(X)) -> proper#(X))
                    (proper#(tail(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X2))
                    (proper#(tail(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X1))
                    (proper#(tail(X)) -> proper#(X), proper#(from(X)) -> proper#(X))
                    (proper#(tail(X)) -> proper#(X), proper#(sieve(X)) -> proper#(X))
                    (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(divides(X1, X2)) -> proper#(X1))
                    (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(if(X1, X2, X3)) -> proper#(X3))
                    (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(if(X1, X2, X3)) -> proper#(X2))
                    (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(if(X1, X2, X3)) -> proper#(X1))
                    (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(tail(X)) -> proper#(X))
                    (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(head(X)) -> proper#(X))
                    (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(cons(X1, X2)) -> proper#(X2))
                    (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(cons(X1, X2)) -> proper#(X1))
                    (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(from(X)) -> proper#(X))
                    (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(sieve(X)) -> proper#(X))
                    (proper#(cons(X1, X2)) -> proper#(X2), proper#(divides(X1, X2)) -> proper#(X1))
                    (proper#(cons(X1, X2)) -> proper#(X2), proper#(if(X1, X2, X3)) -> proper#(X3))
                    (proper#(cons(X1, X2)) -> proper#(X2), proper#(if(X1, X2, X3)) -> proper#(X2))
                    (proper#(cons(X1, X2)) -> proper#(X2), proper#(if(X1, X2, X3)) -> proper#(X1))
                    (proper#(cons(X1, X2)) -> proper#(X2), proper#(tail(X)) -> proper#(X))
                    (proper#(cons(X1, X2)) -> proper#(X2), proper#(head(X)) -> proper#(X))
                    (proper#(cons(X1, X2)) -> proper#(X2), proper#(cons(X1, X2)) -> proper#(X2))
                    (proper#(cons(X1, X2)) -> proper#(X2), proper#(cons(X1, X2)) -> proper#(X1))
                    (proper#(cons(X1, X2)) -> proper#(X2), proper#(from(X)) -> proper#(X))
                    (proper#(cons(X1, X2)) -> proper#(X2), proper#(sieve(X)) -> proper#(X))
                    (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(divides(X1, X2)) -> proper#(X1))
                    (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(if(X1, X2, X3)) -> proper#(X3))
                    (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(if(X1, X2, X3)) -> proper#(X2))
                    (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(if(X1, X2, X3)) -> proper#(X1))
                    (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(tail(X)) -> proper#(X))
                    (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(head(X)) -> proper#(X))
                    (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(cons(X1, X2)) -> proper#(X2))
                    (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(cons(X1, X2)) -> proper#(X1))
                    (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(from(X)) -> proper#(X))
                    (proper#(if(X1, X2, X3)) -> proper#(X3), proper#(sieve(X)) -> proper#(X))
                    (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(sieve(X)) -> proper#(X))
                    (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(from(X)) -> proper#(X))
                    (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(cons(X1, X2)) -> proper#(X1))
                    (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(cons(X1, X2)) -> proper#(X2))
                    (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(head(X)) -> proper#(X))
                    (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(tail(X)) -> proper#(X))
                    (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(if(X1, X2, X3)) -> proper#(X1))
                    (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(if(X1, X2, X3)) -> proper#(X2))
                    (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(if(X1, X2, X3)) -> proper#(X3))
                    (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(divides(X1, X2)) -> proper#(X1))
                    (proper#(divides(X1, X2)) -> proper#(X1), proper#(sieve(X)) -> proper#(X))
                    (proper#(divides(X1, X2)) -> proper#(X1), proper#(from(X)) -> proper#(X))
                    (proper#(divides(X1, X2)) -> proper#(X1), proper#(cons(X1, X2)) -> proper#(X1))
                    (proper#(divides(X1, X2)) -> proper#(X1), proper#(cons(X1, X2)) -> proper#(X2))
                    (proper#(divides(X1, X2)) -> proper#(X1), proper#(head(X)) -> proper#(X))
                    (proper#(divides(X1, X2)) -> proper#(X1), proper#(tail(X)) -> proper#(X))
                    (proper#(divides(X1, X2)) -> proper#(X1), proper#(if(X1, X2, X3)) -> proper#(X1))
                    (proper#(divides(X1, X2)) -> proper#(X1), proper#(if(X1, X2, X3)) -> proper#(X2))
                    (proper#(divides(X1, X2)) -> proper#(X1), proper#(if(X1, X2, X3)) -> proper#(X3))
                    (proper#(divides(X1, X2)) -> proper#(X1), proper#(divides(X1, X2)) -> proper#(X1))
                    (proper#(cons(X1, X2)) -> proper#(X1), proper#(sieve(X)) -> proper#(X))
                    (proper#(cons(X1, X2)) -> proper#(X1), proper#(from(X)) -> proper#(X))
                    (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#(head(X)) -> proper#(X))
                    (proper#(cons(X1, X2)) -> proper#(X1), proper#(tail(X)) -> proper#(X))
                    (proper#(cons(X1, X2)) -> proper#(X1), proper#(if(X1, X2, X3)) -> proper#(X1))
                    (proper#(cons(X1, X2)) -> proper#(X1), proper#(if(X1, X2, X3)) -> proper#(X2))
                    (proper#(cons(X1, X2)) -> proper#(X1), proper#(if(X1, X2, X3)) -> proper#(X3))
                    (proper#(cons(X1, X2)) -> proper#(X1), proper#(divides(X1, X2)) -> proper#(X1))
                    (proper#(head(X)) -> proper#(X), proper#(sieve(X)) -> proper#(X))
                    (proper#(head(X)) -> proper#(X), proper#(from(X)) -> proper#(X))
                    (proper#(head(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X1))
                    (proper#(head(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X2))
                    (proper#(head(X)) -> proper#(X), proper#(head(X)) -> proper#(X))
                    (proper#(head(X)) -> proper#(X), proper#(tail(X)) -> proper#(X))
                    (proper#(head(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X1))
                    (proper#(head(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X2))
                    (proper#(head(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X3))
                    (proper#(head(X)) -> proper#(X), proper#(divides(X1, X2)) -> proper#(X1))
                    (proper#(sieve(X)) -> proper#(X), proper#(sieve(X)) -> proper#(X))
                    (proper#(sieve(X)) -> proper#(X), proper#(from(X)) -> proper#(X))
                    (proper#(sieve(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X1))
                    (proper#(sieve(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X2))
                    (proper#(sieve(X)) -> proper#(X), proper#(head(X)) -> proper#(X))
                    (proper#(sieve(X)) -> proper#(X), proper#(tail(X)) -> proper#(X))
                    (proper#(sieve(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X1))
                    (proper#(sieve(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X2))
                    (proper#(sieve(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X3))
                    (proper#(sieve(X)) -> proper#(X), proper#(divides(X1, X2)) -> proper#(X1))}
                   SCCS:
                    Scc:
                     {       proper#(sieve(X)) -> proper#(X),
                              proper#(from(X)) -> proper#(X),
                         proper#(cons(X1, X2)) -> proper#(X1),
                         proper#(cons(X1, X2)) -> proper#(X2),
                              proper#(head(X)) -> proper#(X),
                              proper#(tail(X)) -> proper#(X),
                       proper#(if(X1, X2, X3)) -> proper#(X1),
                       proper#(if(X1, X2, X3)) -> proper#(X2),
                       proper#(if(X1, X2, X3)) -> proper#(X3),
                      proper#(divides(X1, X2)) -> proper#(X1)}
                    SCC:
                     Strict:
                      {       proper#(sieve(X)) -> proper#(X),
                               proper#(from(X)) -> proper#(X),
                          proper#(cons(X1, X2)) -> proper#(X1),
                          proper#(cons(X1, X2)) -> proper#(X2),
                               proper#(head(X)) -> proper#(X),
                               proper#(tail(X)) -> proper#(X),
                        proper#(if(X1, X2, X3)) -> proper#(X1),
                        proper#(if(X1, X2, X3)) -> proper#(X2),
                        proper#(if(X1, X2, X3)) -> proper#(X3),
                       proper#(divides(X1, X2)) -> proper#(X1)}
                     Weak:
                     {                     sieve(mark(X)) -> mark(sieve(X)),
                                             sieve(ok(X)) -> ok(sieve(X)),
                                            from(mark(X)) -> mark(from(X)),
                                              from(ok(X)) -> ok(from(X)),
                                               s(mark(X)) -> mark(s(X)),
                                                 s(ok(X)) -> ok(s(X)),
                                         active(sieve(X)) -> sieve(active(X)),
                                active(sieve(cons(X, Y))) -> mark(cons(X, filter(X, sieve(Y)))),
                                          active(from(X)) -> mark(cons(X, from(s(X)))),
                                          active(from(X)) -> from(active(X)),
                                             active(s(X)) -> s(active(X)),
                                         active(primes()) -> mark(sieve(from(s(s(0()))))),
                                     active(cons(X1, X2)) -> cons(active(X1), X2),
                                          active(head(X)) -> head(active(X)),
                                 active(head(cons(X, Y))) -> mark(X),
                                          active(tail(X)) -> tail(active(X)),
                                 active(tail(cons(X, Y))) -> mark(Y),
                                   active(if(X1, X2, X3)) -> if(active(X1), X2, X3),
                                 active(if(true(), X, Y)) -> mark(X),
                                active(if(false(), X, Y)) -> mark(Y),
                                  active(divides(X1, X2)) -> divides(X1, active(X2)),
                                  active(divides(X1, X2)) -> divides(active(X1), X2),
                                   active(filter(X1, X2)) -> filter(X1, active(X2)),
                                   active(filter(X1, X2)) -> filter(active(X1), X2),
                      active(filter(s(s(X)), cons(Y, Z))) -> mark(if(divides(s(s(X)), Y), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y))))),
                                       cons(mark(X1), X2) -> mark(cons(X1, X2)),
                                     cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)),
                                            head(mark(X)) -> mark(head(X)),
                                              head(ok(X)) -> ok(head(X)),
                                            tail(mark(X)) -> mark(tail(X)),
                                              tail(ok(X)) -> ok(tail(X)),
                                     if(mark(X1), X2, X3) -> mark(if(X1, X2, X3)),
                               if(ok(X1), ok(X2), ok(X3)) -> ok(if(X1, X2, X3)),
                                    divides(X1, mark(X2)) -> mark(divides(X1, X2)),
                                    divides(mark(X1), X2) -> mark(divides(X1, X2)),
                                  divides(ok(X1), ok(X2)) -> ok(divides(X1, X2)),
                                     filter(X1, mark(X2)) -> mark(filter(X1, X2)),
                                     filter(mark(X1), X2) -> mark(filter(X1, X2)),
                                   filter(ok(X1), ok(X2)) -> ok(filter(X1, X2)),
                                         proper(sieve(X)) -> sieve(proper(X)),
                                          proper(from(X)) -> from(proper(X)),
                                             proper(s(X)) -> s(proper(X)),
                                              proper(0()) -> ok(0()),
                                         proper(primes()) -> ok(primes()),
                                     proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)),
                                          proper(head(X)) -> head(proper(X)),
                                          proper(tail(X)) -> tail(proper(X)),
                                   proper(if(X1, X2, X3)) -> if(proper(X1), proper(X2), proper(X3)),
                                           proper(true()) -> ok(true()),
                                          proper(false()) -> ok(false()),
                                  proper(divides(X1, X2)) -> divides(proper(X1), proper(X2)),
                                   proper(filter(X1, X2)) -> filter(proper(X1), proper(X2)),
                                             top(mark(X)) -> top(proper(X)),
                                               top(ok(X)) -> top(active(X))}
                     SPSC:
                      Simple Projection:
                       pi(proper#) = 0
                      Strict:
                       {       proper#(sieve(X)) -> proper#(X),
                                proper#(from(X)) -> proper#(X),
                           proper#(cons(X1, X2)) -> proper#(X1),
                           proper#(cons(X1, X2)) -> proper#(X2),
                                proper#(head(X)) -> proper#(X),
                                proper#(tail(X)) -> proper#(X),
                         proper#(if(X1, X2, X3)) -> proper#(X1),
                         proper#(if(X1, X2, X3)) -> proper#(X2),
                        proper#(divides(X1, X2)) -> proper#(X1)}
                      EDG:
                       {(proper#(if(X1, X2, X3)) -> proper#(X2), proper#(divides(X1, X2)) -> proper#(X1))
                        (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(if(X1, X2, X3)) -> proper#(X2))
                        (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(if(X1, X2, X3)) -> proper#(X1))
                        (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(tail(X)) -> proper#(X))
                        (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(head(X)) -> proper#(X))
                        (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(cons(X1, X2)) -> proper#(X2))
                        (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(cons(X1, X2)) -> proper#(X1))
                        (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(from(X)) -> proper#(X))
                        (proper#(if(X1, X2, X3)) -> proper#(X2), proper#(sieve(X)) -> proper#(X))
                        (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(divides(X1, X2)) -> proper#(X1))
                        (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(if(X1, X2, X3)) -> proper#(X2))
                        (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(if(X1, X2, X3)) -> proper#(X1))
                        (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(tail(X)) -> proper#(X))
                        (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(head(X)) -> proper#(X))
                        (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(cons(X1, X2)) -> proper#(X2))
                        (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(cons(X1, X2)) -> proper#(X1))
                        (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(from(X)) -> proper#(X))
                        (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(sieve(X)) -> proper#(X))
                        (proper#(sieve(X)) -> proper#(X), proper#(divides(X1, X2)) -> proper#(X1))
                        (proper#(sieve(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X2))
                        (proper#(sieve(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X1))
                        (proper#(sieve(X)) -> proper#(X), proper#(tail(X)) -> proper#(X))
                        (proper#(sieve(X)) -> proper#(X), proper#(head(X)) -> proper#(X))
                        (proper#(sieve(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X2))
                        (proper#(sieve(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X1))
                        (proper#(sieve(X)) -> proper#(X), proper#(from(X)) -> proper#(X))
                        (proper#(sieve(X)) -> proper#(X), proper#(sieve(X)) -> proper#(X))
                        (proper#(head(X)) -> proper#(X), proper#(divides(X1, X2)) -> proper#(X1))
                        (proper#(head(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X2))
                        (proper#(head(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X1))
                        (proper#(head(X)) -> proper#(X), proper#(tail(X)) -> proper#(X))
                        (proper#(head(X)) -> proper#(X), proper#(head(X)) -> proper#(X))
                        (proper#(head(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X2))
                        (proper#(head(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X1))
                        (proper#(head(X)) -> proper#(X), proper#(from(X)) -> proper#(X))
                        (proper#(head(X)) -> proper#(X), proper#(sieve(X)) -> proper#(X))
                        (proper#(tail(X)) -> proper#(X), proper#(sieve(X)) -> proper#(X))
                        (proper#(tail(X)) -> proper#(X), proper#(from(X)) -> proper#(X))
                        (proper#(tail(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X1))
                        (proper#(tail(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X2))
                        (proper#(tail(X)) -> proper#(X), proper#(head(X)) -> proper#(X))
                        (proper#(tail(X)) -> proper#(X), proper#(tail(X)) -> proper#(X))
                        (proper#(tail(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X1))
                        (proper#(tail(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X2))
                        (proper#(tail(X)) -> proper#(X), proper#(divides(X1, X2)) -> proper#(X1))
                        (proper#(from(X)) -> proper#(X), proper#(sieve(X)) -> proper#(X))
                        (proper#(from(X)) -> proper#(X), proper#(from(X)) -> proper#(X))
                        (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#(head(X)) -> proper#(X))
                        (proper#(from(X)) -> proper#(X), proper#(tail(X)) -> proper#(X))
                        (proper#(from(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X1))
                        (proper#(from(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X2))
                        (proper#(from(X)) -> proper#(X), proper#(divides(X1, X2)) -> proper#(X1))
                        (proper#(divides(X1, X2)) -> proper#(X1), proper#(sieve(X)) -> proper#(X))
                        (proper#(divides(X1, X2)) -> proper#(X1), proper#(from(X)) -> proper#(X))
                        (proper#(divides(X1, X2)) -> proper#(X1), proper#(cons(X1, X2)) -> proper#(X1))
                        (proper#(divides(X1, X2)) -> proper#(X1), proper#(cons(X1, X2)) -> proper#(X2))
                        (proper#(divides(X1, X2)) -> proper#(X1), proper#(head(X)) -> proper#(X))
                        (proper#(divides(X1, X2)) -> proper#(X1), proper#(tail(X)) -> proper#(X))
                        (proper#(divides(X1, X2)) -> proper#(X1), proper#(if(X1, X2, X3)) -> proper#(X1))
                        (proper#(divides(X1, X2)) -> proper#(X1), proper#(if(X1, X2, X3)) -> proper#(X2))
                        (proper#(divides(X1, X2)) -> proper#(X1), proper#(divides(X1, X2)) -> proper#(X1))
                        (proper#(cons(X1, X2)) -> proper#(X1), proper#(sieve(X)) -> proper#(X))
                        (proper#(cons(X1, X2)) -> proper#(X1), proper#(from(X)) -> proper#(X))
                        (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#(head(X)) -> proper#(X))
                        (proper#(cons(X1, X2)) -> proper#(X1), proper#(tail(X)) -> proper#(X))
                        (proper#(cons(X1, X2)) -> proper#(X1), proper#(if(X1, X2, X3)) -> proper#(X1))
                        (proper#(cons(X1, X2)) -> proper#(X1), proper#(if(X1, X2, X3)) -> proper#(X2))
                        (proper#(cons(X1, X2)) -> proper#(X1), proper#(divides(X1, X2)) -> proper#(X1))
                        (proper#(cons(X1, X2)) -> proper#(X2), proper#(sieve(X)) -> proper#(X))
                        (proper#(cons(X1, X2)) -> proper#(X2), proper#(from(X)) -> proper#(X))
                        (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#(head(X)) -> proper#(X))
                        (proper#(cons(X1, X2)) -> proper#(X2), proper#(tail(X)) -> proper#(X))
                        (proper#(cons(X1, X2)) -> proper#(X2), proper#(if(X1, X2, X3)) -> proper#(X1))
                        (proper#(cons(X1, X2)) -> proper#(X2), proper#(if(X1, X2, X3)) -> proper#(X2))
                        (proper#(cons(X1, X2)) -> proper#(X2), proper#(divides(X1, X2)) -> proper#(X1))}
                       SCCS:
                        Scc:
                         {       proper#(sieve(X)) -> proper#(X),
                                  proper#(from(X)) -> proper#(X),
                             proper#(cons(X1, X2)) -> proper#(X1),
                             proper#(cons(X1, X2)) -> proper#(X2),
                                  proper#(head(X)) -> proper#(X),
                                  proper#(tail(X)) -> proper#(X),
                           proper#(if(X1, X2, X3)) -> proper#(X1),
                           proper#(if(X1, X2, X3)) -> proper#(X2),
                          proper#(divides(X1, X2)) -> proper#(X1)}
                        SCC:
                         Strict:
                          {       proper#(sieve(X)) -> proper#(X),
                                   proper#(from(X)) -> proper#(X),
                              proper#(cons(X1, X2)) -> proper#(X1),
                              proper#(cons(X1, X2)) -> proper#(X2),
                                   proper#(head(X)) -> proper#(X),
                                   proper#(tail(X)) -> proper#(X),
                            proper#(if(X1, X2, X3)) -> proper#(X1),
                            proper#(if(X1, X2, X3)) -> proper#(X2),
                           proper#(divides(X1, X2)) -> proper#(X1)}
                         Weak:
                         {                     sieve(mark(X)) -> mark(sieve(X)),
                                                 sieve(ok(X)) -> ok(sieve(X)),
                                                from(mark(X)) -> mark(from(X)),
                                                  from(ok(X)) -> ok(from(X)),
                                                   s(mark(X)) -> mark(s(X)),
                                                     s(ok(X)) -> ok(s(X)),
                                             active(sieve(X)) -> sieve(active(X)),
                                    active(sieve(cons(X, Y))) -> mark(cons(X, filter(X, sieve(Y)))),
                                              active(from(X)) -> mark(cons(X, from(s(X)))),
                                              active(from(X)) -> from(active(X)),
                                                 active(s(X)) -> s(active(X)),
                                             active(primes()) -> mark(sieve(from(s(s(0()))))),
                                         active(cons(X1, X2)) -> cons(active(X1), X2),
                                              active(head(X)) -> head(active(X)),
                                     active(head(cons(X, Y))) -> mark(X),
                                              active(tail(X)) -> tail(active(X)),
                                     active(tail(cons(X, Y))) -> mark(Y),
                                       active(if(X1, X2, X3)) -> if(active(X1), X2, X3),
                                     active(if(true(), X, Y)) -> mark(X),
                                    active(if(false(), X, Y)) -> mark(Y),
                                      active(divides(X1, X2)) -> divides(X1, active(X2)),
                                      active(divides(X1, X2)) -> divides(active(X1), X2),
                                       active(filter(X1, X2)) -> filter(X1, active(X2)),
                                       active(filter(X1, X2)) -> filter(active(X1), X2),
                          active(filter(s(s(X)), cons(Y, Z))) -> mark(if(divides(s(s(X)), Y), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y))))),
                                           cons(mark(X1), X2) -> mark(cons(X1, X2)),
                                         cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)),
                                                head(mark(X)) -> mark(head(X)),
                                                  head(ok(X)) -> ok(head(X)),
                                                tail(mark(X)) -> mark(tail(X)),
                                                  tail(ok(X)) -> ok(tail(X)),
                                         if(mark(X1), X2, X3) -> mark(if(X1, X2, X3)),
                                   if(ok(X1), ok(X2), ok(X3)) -> ok(if(X1, X2, X3)),
                                        divides(X1, mark(X2)) -> mark(divides(X1, X2)),
                                        divides(mark(X1), X2) -> mark(divides(X1, X2)),
                                      divides(ok(X1), ok(X2)) -> ok(divides(X1, X2)),
                                         filter(X1, mark(X2)) -> mark(filter(X1, X2)),
                                         filter(mark(X1), X2) -> mark(filter(X1, X2)),
                                       filter(ok(X1), ok(X2)) -> ok(filter(X1, X2)),
                                             proper(sieve(X)) -> sieve(proper(X)),
                                              proper(from(X)) -> from(proper(X)),
                                                 proper(s(X)) -> s(proper(X)),
                                                  proper(0()) -> ok(0()),
                                             proper(primes()) -> ok(primes()),
                                         proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)),
                                              proper(head(X)) -> head(proper(X)),
                                              proper(tail(X)) -> tail(proper(X)),
                                       proper(if(X1, X2, X3)) -> if(proper(X1), proper(X2), proper(X3)),
                                               proper(true()) -> ok(true()),
                                              proper(false()) -> ok(false()),
                                      proper(divides(X1, X2)) -> divides(proper(X1), proper(X2)),
                                       proper(filter(X1, X2)) -> filter(proper(X1), proper(X2)),
                                                 top(mark(X)) -> top(proper(X)),
                                                   top(ok(X)) -> top(active(X))}
                         SPSC:
                          Simple Projection:
                           pi(proper#) = 0
                          Strict:
                           {       proper#(sieve(X)) -> proper#(X),
                                    proper#(from(X)) -> proper#(X),
                               proper#(cons(X1, X2)) -> proper#(X1),
                               proper#(cons(X1, X2)) -> proper#(X2),
                                    proper#(head(X)) -> proper#(X),
                                    proper#(tail(X)) -> proper#(X),
                             proper#(if(X1, X2, X3)) -> proper#(X1),
                            proper#(divides(X1, X2)) -> proper#(X1)}
                          EDG:
                           {(proper#(cons(X1, X2)) -> proper#(X1), proper#(divides(X1, X2)) -> proper#(X1))
                            (proper#(cons(X1, X2)) -> proper#(X1), proper#(if(X1, X2, X3)) -> proper#(X1))
                            (proper#(cons(X1, X2)) -> proper#(X1), proper#(tail(X)) -> proper#(X))
                            (proper#(cons(X1, X2)) -> proper#(X1), proper#(head(X)) -> proper#(X))
                            (proper#(cons(X1, X2)) -> proper#(X1), proper#(cons(X1, X2)) -> proper#(X2))
                            (proper#(cons(X1, X2)) -> proper#(X1), proper#(cons(X1, X2)) -> proper#(X1))
                            (proper#(cons(X1, X2)) -> proper#(X1), proper#(from(X)) -> proper#(X))
                            (proper#(cons(X1, X2)) -> proper#(X1), proper#(sieve(X)) -> proper#(X))
                            (proper#(divides(X1, X2)) -> proper#(X1), proper#(divides(X1, X2)) -> proper#(X1))
                            (proper#(divides(X1, X2)) -> proper#(X1), proper#(if(X1, X2, X3)) -> proper#(X1))
                            (proper#(divides(X1, X2)) -> proper#(X1), proper#(tail(X)) -> proper#(X))
                            (proper#(divides(X1, X2)) -> proper#(X1), proper#(head(X)) -> proper#(X))
                            (proper#(divides(X1, X2)) -> proper#(X1), proper#(cons(X1, X2)) -> proper#(X2))
                            (proper#(divides(X1, X2)) -> proper#(X1), proper#(cons(X1, X2)) -> proper#(X1))
                            (proper#(divides(X1, X2)) -> proper#(X1), proper#(from(X)) -> proper#(X))
                            (proper#(divides(X1, X2)) -> proper#(X1), proper#(sieve(X)) -> proper#(X))
                            (proper#(from(X)) -> proper#(X), proper#(divides(X1, X2)) -> proper#(X1))
                            (proper#(from(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X1))
                            (proper#(from(X)) -> proper#(X), proper#(tail(X)) -> proper#(X))
                            (proper#(from(X)) -> proper#(X), proper#(head(X)) -> proper#(X))
                            (proper#(from(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X2))
                            (proper#(from(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X1))
                            (proper#(from(X)) -> proper#(X), proper#(from(X)) -> proper#(X))
                            (proper#(from(X)) -> proper#(X), proper#(sieve(X)) -> proper#(X))
                            (proper#(tail(X)) -> proper#(X), proper#(divides(X1, X2)) -> proper#(X1))
                            (proper#(tail(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X1))
                            (proper#(tail(X)) -> proper#(X), proper#(tail(X)) -> proper#(X))
                            (proper#(tail(X)) -> proper#(X), proper#(head(X)) -> proper#(X))
                            (proper#(tail(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X2))
                            (proper#(tail(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X1))
                            (proper#(tail(X)) -> proper#(X), proper#(from(X)) -> proper#(X))
                            (proper#(tail(X)) -> proper#(X), proper#(sieve(X)) -> proper#(X))
                            (proper#(head(X)) -> proper#(X), proper#(sieve(X)) -> proper#(X))
                            (proper#(head(X)) -> proper#(X), proper#(from(X)) -> proper#(X))
                            (proper#(head(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X1))
                            (proper#(head(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X2))
                            (proper#(head(X)) -> proper#(X), proper#(head(X)) -> proper#(X))
                            (proper#(head(X)) -> proper#(X), proper#(tail(X)) -> proper#(X))
                            (proper#(head(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X1))
                            (proper#(head(X)) -> proper#(X), proper#(divides(X1, X2)) -> proper#(X1))
                            (proper#(sieve(X)) -> proper#(X), proper#(sieve(X)) -> proper#(X))
                            (proper#(sieve(X)) -> proper#(X), proper#(from(X)) -> proper#(X))
                            (proper#(sieve(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X1))
                            (proper#(sieve(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X2))
                            (proper#(sieve(X)) -> proper#(X), proper#(head(X)) -> proper#(X))
                            (proper#(sieve(X)) -> proper#(X), proper#(tail(X)) -> proper#(X))
                            (proper#(sieve(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X1))
                            (proper#(sieve(X)) -> proper#(X), proper#(divides(X1, X2)) -> proper#(X1))
                            (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(sieve(X)) -> proper#(X))
                            (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(from(X)) -> proper#(X))
                            (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(cons(X1, X2)) -> proper#(X1))
                            (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(cons(X1, X2)) -> proper#(X2))
                            (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(head(X)) -> proper#(X))
                            (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(tail(X)) -> proper#(X))
                            (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(if(X1, X2, X3)) -> proper#(X1))
                            (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(divides(X1, X2)) -> proper#(X1))
                            (proper#(cons(X1, X2)) -> proper#(X2), proper#(sieve(X)) -> proper#(X))
                            (proper#(cons(X1, X2)) -> proper#(X2), proper#(from(X)) -> proper#(X))
                            (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#(head(X)) -> proper#(X))
                            (proper#(cons(X1, X2)) -> proper#(X2), proper#(tail(X)) -> proper#(X))
                            (proper#(cons(X1, X2)) -> proper#(X2), proper#(if(X1, X2, X3)) -> proper#(X1))
                            (proper#(cons(X1, X2)) -> proper#(X2), proper#(divides(X1, X2)) -> proper#(X1))}
                           SCCS:
                            Scc:
                             {       proper#(sieve(X)) -> proper#(X),
                                      proper#(from(X)) -> proper#(X),
                                 proper#(cons(X1, X2)) -> proper#(X1),
                                 proper#(cons(X1, X2)) -> proper#(X2),
                                      proper#(head(X)) -> proper#(X),
                                      proper#(tail(X)) -> proper#(X),
                               proper#(if(X1, X2, X3)) -> proper#(X1),
                              proper#(divides(X1, X2)) -> proper#(X1)}
                            SCC:
                             Strict:
                              {       proper#(sieve(X)) -> proper#(X),
                                       proper#(from(X)) -> proper#(X),
                                  proper#(cons(X1, X2)) -> proper#(X1),
                                  proper#(cons(X1, X2)) -> proper#(X2),
                                       proper#(head(X)) -> proper#(X),
                                       proper#(tail(X)) -> proper#(X),
                                proper#(if(X1, X2, X3)) -> proper#(X1),
                               proper#(divides(X1, X2)) -> proper#(X1)}
                             Weak:
                             {                     sieve(mark(X)) -> mark(sieve(X)),
                                                     sieve(ok(X)) -> ok(sieve(X)),
                                                    from(mark(X)) -> mark(from(X)),
                                                      from(ok(X)) -> ok(from(X)),
                                                       s(mark(X)) -> mark(s(X)),
                                                         s(ok(X)) -> ok(s(X)),
                                                 active(sieve(X)) -> sieve(active(X)),
                                        active(sieve(cons(X, Y))) -> mark(cons(X, filter(X, sieve(Y)))),
                                                  active(from(X)) -> mark(cons(X, from(s(X)))),
                                                  active(from(X)) -> from(active(X)),
                                                     active(s(X)) -> s(active(X)),
                                                 active(primes()) -> mark(sieve(from(s(s(0()))))),
                                             active(cons(X1, X2)) -> cons(active(X1), X2),
                                                  active(head(X)) -> head(active(X)),
                                         active(head(cons(X, Y))) -> mark(X),
                                                  active(tail(X)) -> tail(active(X)),
                                         active(tail(cons(X, Y))) -> mark(Y),
                                           active(if(X1, X2, X3)) -> if(active(X1), X2, X3),
                                         active(if(true(), X, Y)) -> mark(X),
                                        active(if(false(), X, Y)) -> mark(Y),
                                          active(divides(X1, X2)) -> divides(X1, active(X2)),
                                          active(divides(X1, X2)) -> divides(active(X1), X2),
                                           active(filter(X1, X2)) -> filter(X1, active(X2)),
                                           active(filter(X1, X2)) -> filter(active(X1), X2),
                              active(filter(s(s(X)), cons(Y, Z))) -> mark(if(divides(s(s(X)), Y), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y))))),
                                               cons(mark(X1), X2) -> mark(cons(X1, X2)),
                                             cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)),
                                                    head(mark(X)) -> mark(head(X)),
                                                      head(ok(X)) -> ok(head(X)),
                                                    tail(mark(X)) -> mark(tail(X)),
                                                      tail(ok(X)) -> ok(tail(X)),
                                             if(mark(X1), X2, X3) -> mark(if(X1, X2, X3)),
                                       if(ok(X1), ok(X2), ok(X3)) -> ok(if(X1, X2, X3)),
                                            divides(X1, mark(X2)) -> mark(divides(X1, X2)),
                                            divides(mark(X1), X2) -> mark(divides(X1, X2)),
                                          divides(ok(X1), ok(X2)) -> ok(divides(X1, X2)),
                                             filter(X1, mark(X2)) -> mark(filter(X1, X2)),
                                             filter(mark(X1), X2) -> mark(filter(X1, X2)),
                                           filter(ok(X1), ok(X2)) -> ok(filter(X1, X2)),
                                                 proper(sieve(X)) -> sieve(proper(X)),
                                                  proper(from(X)) -> from(proper(X)),
                                                     proper(s(X)) -> s(proper(X)),
                                                      proper(0()) -> ok(0()),
                                                 proper(primes()) -> ok(primes()),
                                             proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)),
                                                  proper(head(X)) -> head(proper(X)),
                                                  proper(tail(X)) -> tail(proper(X)),
                                           proper(if(X1, X2, X3)) -> if(proper(X1), proper(X2), proper(X3)),
                                                   proper(true()) -> ok(true()),
                                                  proper(false()) -> ok(false()),
                                          proper(divides(X1, X2)) -> divides(proper(X1), proper(X2)),
                                           proper(filter(X1, X2)) -> filter(proper(X1), proper(X2)),
                                                     top(mark(X)) -> top(proper(X)),
                                                       top(ok(X)) -> top(active(X))}
                             SPSC:
                              Simple Projection:
                               pi(proper#) = 0
                              Strict:
                               {       proper#(sieve(X)) -> proper#(X),
                                   proper#(cons(X1, X2)) -> proper#(X1),
                                   proper#(cons(X1, X2)) -> proper#(X2),
                                        proper#(head(X)) -> proper#(X),
                                        proper#(tail(X)) -> proper#(X),
                                 proper#(if(X1, X2, X3)) -> proper#(X1),
                                proper#(divides(X1, X2)) -> proper#(X1)}
                              EDG:
                               {(proper#(cons(X1, X2)) -> proper#(X1), proper#(divides(X1, X2)) -> proper#(X1))
                                (proper#(cons(X1, X2)) -> proper#(X1), proper#(if(X1, X2, X3)) -> proper#(X1))
                                (proper#(cons(X1, X2)) -> proper#(X1), proper#(tail(X)) -> proper#(X))
                                (proper#(cons(X1, X2)) -> proper#(X1), proper#(head(X)) -> proper#(X))
                                (proper#(cons(X1, X2)) -> proper#(X1), proper#(cons(X1, X2)) -> proper#(X2))
                                (proper#(cons(X1, X2)) -> proper#(X1), proper#(cons(X1, X2)) -> proper#(X1))
                                (proper#(cons(X1, X2)) -> proper#(X1), proper#(sieve(X)) -> proper#(X))
                                (proper#(divides(X1, X2)) -> proper#(X1), proper#(divides(X1, X2)) -> proper#(X1))
                                (proper#(divides(X1, X2)) -> proper#(X1), proper#(if(X1, X2, X3)) -> proper#(X1))
                                (proper#(divides(X1, X2)) -> proper#(X1), proper#(tail(X)) -> proper#(X))
                                (proper#(divides(X1, X2)) -> proper#(X1), proper#(head(X)) -> proper#(X))
                                (proper#(divides(X1, X2)) -> proper#(X1), proper#(cons(X1, X2)) -> proper#(X2))
                                (proper#(divides(X1, X2)) -> proper#(X1), proper#(cons(X1, X2)) -> proper#(X1))
                                (proper#(divides(X1, X2)) -> proper#(X1), proper#(sieve(X)) -> proper#(X))
                                (proper#(head(X)) -> proper#(X), proper#(divides(X1, X2)) -> proper#(X1))
                                (proper#(head(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X1))
                                (proper#(head(X)) -> proper#(X), proper#(tail(X)) -> proper#(X))
                                (proper#(head(X)) -> proper#(X), proper#(head(X)) -> proper#(X))
                                (proper#(head(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X2))
                                (proper#(head(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X1))
                                (proper#(head(X)) -> proper#(X), proper#(sieve(X)) -> proper#(X))
                                (proper#(tail(X)) -> proper#(X), proper#(sieve(X)) -> proper#(X))
                                (proper#(tail(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X1))
                                (proper#(tail(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X2))
                                (proper#(tail(X)) -> proper#(X), proper#(head(X)) -> proper#(X))
                                (proper#(tail(X)) -> proper#(X), proper#(tail(X)) -> proper#(X))
                                (proper#(tail(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X1))
                                (proper#(tail(X)) -> proper#(X), proper#(divides(X1, X2)) -> proper#(X1))
                                (proper#(sieve(X)) -> proper#(X), proper#(sieve(X)) -> proper#(X))
                                (proper#(sieve(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X1))
                                (proper#(sieve(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X2))
                                (proper#(sieve(X)) -> proper#(X), proper#(head(X)) -> proper#(X))
                                (proper#(sieve(X)) -> proper#(X), proper#(tail(X)) -> proper#(X))
                                (proper#(sieve(X)) -> proper#(X), proper#(if(X1, X2, X3)) -> proper#(X1))
                                (proper#(sieve(X)) -> proper#(X), proper#(divides(X1, X2)) -> proper#(X1))
                                (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(sieve(X)) -> proper#(X))
                                (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(cons(X1, X2)) -> proper#(X1))
                                (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(cons(X1, X2)) -> proper#(X2))
                                (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(head(X)) -> proper#(X))
                                (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(tail(X)) -> proper#(X))
                                (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(if(X1, X2, X3)) -> proper#(X1))
                                (proper#(if(X1, X2, X3)) -> proper#(X1), proper#(divides(X1, X2)) -> proper#(X1))
                                (proper#(cons(X1, X2)) -> proper#(X2), proper#(sieve(X)) -> proper#(X))
                                (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#(head(X)) -> proper#(X))
                                (proper#(cons(X1, X2)) -> proper#(X2), proper#(tail(X)) -> proper#(X))
                                (proper#(cons(X1, X2)) -> proper#(X2), proper#(if(X1, X2, X3)) -> proper#(X1))
                                (proper#(cons(X1, X2)) -> proper#(X2), proper#(divides(X1, X2)) -> proper#(X1))}
                               SCCS:
                                Scc:
                                 {       proper#(sieve(X)) -> proper#(X),
                                     proper#(cons(X1, X2)) -> proper#(X1),
                                     proper#(cons(X1, X2)) -> proper#(X2),
                                          proper#(head(X)) -> proper#(X),
                                          proper#(tail(X)) -> proper#(X),
                                   proper#(if(X1, X2, X3)) -> proper#(X1),
                                  proper#(divides(X1, X2)) -> proper#(X1)}
                                SCC:
                                 Strict:
                                  {       proper#(sieve(X)) -> proper#(X),
                                      proper#(cons(X1, X2)) -> proper#(X1),
                                      proper#(cons(X1, X2)) -> proper#(X2),
                                           proper#(head(X)) -> proper#(X),
                                           proper#(tail(X)) -> proper#(X),
                                    proper#(if(X1, X2, X3)) -> proper#(X1),
                                   proper#(divides(X1, X2)) -> proper#(X1)}
                                 Weak:
                                 {                     sieve(mark(X)) -> mark(sieve(X)),
                                                         sieve(ok(X)) -> ok(sieve(X)),
                                                        from(mark(X)) -> mark(from(X)),
                                                          from(ok(X)) -> ok(from(X)),
                                                           s(mark(X)) -> mark(s(X)),
                                                             s(ok(X)) -> ok(s(X)),
                                                     active(sieve(X)) -> sieve(active(X)),
                                            active(sieve(cons(X, Y))) -> mark(cons(X, filter(X, sieve(Y)))),
                                                      active(from(X)) -> mark(cons(X, from(s(X)))),
                                                      active(from(X)) -> from(active(X)),
                                                         active(s(X)) -> s(active(X)),
                                                     active(primes()) -> mark(sieve(from(s(s(0()))))),
                                                 active(cons(X1, X2)) -> cons(active(X1), X2),
                                                      active(head(X)) -> head(active(X)),
                                             active(head(cons(X, Y))) -> mark(X),
                                                      active(tail(X)) -> tail(active(X)),
                                             active(tail(cons(X, Y))) -> mark(Y),
                                               active(if(X1, X2, X3)) -> if(active(X1), X2, X3),
                                             active(if(true(), X, Y)) -> mark(X),
                                            active(if(false(), X, Y)) -> mark(Y),
                                              active(divides(X1, X2)) -> divides(X1, active(X2)),
                                              active(divides(X1, X2)) -> divides(active(X1), X2),
                                               active(filter(X1, X2)) -> filter(X1, active(X2)),
                                               active(filter(X1, X2)) -> filter(active(X1), X2),
                                  active(filter(s(s(X)), cons(Y, Z))) -> mark(if(divides(s(s(X)), Y), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y))))),
                                                   cons(mark(X1), X2) -> mark(cons(X1, X2)),
                                                 cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)),
                                                        head(mark(X)) -> mark(head(X)),
                                                          head(ok(X)) -> ok(head(X)),
                                                        tail(mark(X)) -> mark(tail(X)),
                                                          tail(ok(X)) -> ok(tail(X)),
                                                 if(mark(X1), X2, X3) -> mark(if(X1, X2, X3)),
                                           if(ok(X1), ok(X2), ok(X3)) -> ok(if(X1, X2, X3)),
                                                divides(X1, mark(X2)) -> mark(divides(X1, X2)),
                                                divides(mark(X1), X2) -> mark(divides(X1, X2)),
                                              divides(ok(X1), ok(X2)) -> ok(divides(X1, X2)),
                                                 filter(X1, mark(X2)) -> mark(filter(X1, X2)),
                                                 filter(mark(X1), X2) -> mark(filter(X1, X2)),
                                               filter(ok(X1), ok(X2)) -> ok(filter(X1, X2)),
                                                     proper(sieve(X)) -> sieve(proper(X)),
                                                      proper(from(X)) -> from(proper(X)),
                                                         proper(s(X)) -> s(proper(X)),
                                                          proper(0()) -> ok(0()),
                                                     proper(primes()) -> ok(primes()),
                                                 proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)),
                                                      proper(head(X)) -> head(proper(X)),
                                                      proper(tail(X)) -> tail(proper(X)),
                                               proper(if(X1, X2, X3)) -> if(proper(X1), proper(X2), proper(X3)),
                                                       proper(true()) -> ok(true()),
                                                      proper(false()) -> ok(false()),
                                              proper(divides(X1, X2)) -> divides(proper(X1), proper(X2)),
                                               proper(filter(X1, X2)) -> filter(proper(X1), proper(X2)),
                                                         top(mark(X)) -> top(proper(X)),
                                                           top(ok(X)) -> top(active(X))}
                                 SPSC:
                                  Simple Projection:
                                   pi(proper#) = 0
                                  Strict:
                                   {       proper#(sieve(X)) -> proper#(X),
                                       proper#(cons(X1, X2)) -> proper#(X1),
                                       proper#(cons(X1, X2)) -> proper#(X2),
                                            proper#(head(X)) -> proper#(X),
                                            proper#(tail(X)) -> proper#(X),
                                    proper#(divides(X1, X2)) -> proper#(X1)}
                                  EDG:
                                   {(proper#(sieve(X)) -> proper#(X), proper#(divides(X1, X2)) -> proper#(X1))
                                    (proper#(sieve(X)) -> proper#(X), proper#(tail(X)) -> proper#(X))
                                    (proper#(sieve(X)) -> proper#(X), proper#(head(X)) -> proper#(X))
                                    (proper#(sieve(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X2))
                                    (proper#(sieve(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X1))
                                    (proper#(sieve(X)) -> proper#(X), proper#(sieve(X)) -> proper#(X))
                                    (proper#(tail(X)) -> proper#(X), proper#(divides(X1, X2)) -> proper#(X1))
                                    (proper#(tail(X)) -> proper#(X), proper#(tail(X)) -> proper#(X))
                                    (proper#(tail(X)) -> proper#(X), proper#(head(X)) -> proper#(X))
                                    (proper#(tail(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X2))
                                    (proper#(tail(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X1))
                                    (proper#(tail(X)) -> proper#(X), proper#(sieve(X)) -> proper#(X))
                                    (proper#(divides(X1, X2)) -> proper#(X1), proper#(divides(X1, X2)) -> proper#(X1))
                                    (proper#(divides(X1, X2)) -> proper#(X1), proper#(tail(X)) -> proper#(X))
                                    (proper#(divides(X1, X2)) -> proper#(X1), proper#(head(X)) -> proper#(X))
                                    (proper#(divides(X1, X2)) -> proper#(X1), proper#(cons(X1, X2)) -> proper#(X2))
                                    (proper#(divides(X1, X2)) -> proper#(X1), proper#(cons(X1, X2)) -> proper#(X1))
                                    (proper#(divides(X1, X2)) -> proper#(X1), proper#(sieve(X)) -> proper#(X))
                                    (proper#(cons(X1, X2)) -> proper#(X1), proper#(sieve(X)) -> proper#(X))
                                    (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#(head(X)) -> proper#(X))
                                    (proper#(cons(X1, X2)) -> proper#(X1), proper#(tail(X)) -> proper#(X))
                                    (proper#(cons(X1, X2)) -> proper#(X1), proper#(divides(X1, X2)) -> proper#(X1))
                                    (proper#(head(X)) -> proper#(X), proper#(sieve(X)) -> proper#(X))
                                    (proper#(head(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X1))
                                    (proper#(head(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X2))
                                    (proper#(head(X)) -> proper#(X), proper#(head(X)) -> proper#(X))
                                    (proper#(head(X)) -> proper#(X), proper#(tail(X)) -> proper#(X))
                                    (proper#(head(X)) -> proper#(X), proper#(divides(X1, X2)) -> proper#(X1))
                                    (proper#(cons(X1, X2)) -> proper#(X2), proper#(sieve(X)) -> proper#(X))
                                    (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#(head(X)) -> proper#(X))
                                    (proper#(cons(X1, X2)) -> proper#(X2), proper#(tail(X)) -> proper#(X))
                                    (proper#(cons(X1, X2)) -> proper#(X2), proper#(divides(X1, X2)) -> proper#(X1))}
                                   SCCS:
                                    Scc:
                                     {       proper#(sieve(X)) -> proper#(X),
                                         proper#(cons(X1, X2)) -> proper#(X1),
                                         proper#(cons(X1, X2)) -> proper#(X2),
                                              proper#(head(X)) -> proper#(X),
                                              proper#(tail(X)) -> proper#(X),
                                      proper#(divides(X1, X2)) -> proper#(X1)}
                                    SCC:
                                     Strict:
                                      {       proper#(sieve(X)) -> proper#(X),
                                          proper#(cons(X1, X2)) -> proper#(X1),
                                          proper#(cons(X1, X2)) -> proper#(X2),
                                               proper#(head(X)) -> proper#(X),
                                               proper#(tail(X)) -> proper#(X),
                                       proper#(divides(X1, X2)) -> proper#(X1)}
                                     Weak:
                                     {                     sieve(mark(X)) -> mark(sieve(X)),
                                                             sieve(ok(X)) -> ok(sieve(X)),
                                                            from(mark(X)) -> mark(from(X)),
                                                              from(ok(X)) -> ok(from(X)),
                                                               s(mark(X)) -> mark(s(X)),
                                                                 s(ok(X)) -> ok(s(X)),
                                                         active(sieve(X)) -> sieve(active(X)),
                                                active(sieve(cons(X, Y))) -> mark(cons(X, filter(X, sieve(Y)))),
                                                          active(from(X)) -> mark(cons(X, from(s(X)))),
                                                          active(from(X)) -> from(active(X)),
                                                             active(s(X)) -> s(active(X)),
                                                         active(primes()) -> mark(sieve(from(s(s(0()))))),
                                                     active(cons(X1, X2)) -> cons(active(X1), X2),
                                                          active(head(X)) -> head(active(X)),
                                                 active(head(cons(X, Y))) -> mark(X),
                                                          active(tail(X)) -> tail(active(X)),
                                                 active(tail(cons(X, Y))) -> mark(Y),
                                                   active(if(X1, X2, X3)) -> if(active(X1), X2, X3),
                                                 active(if(true(), X, Y)) -> mark(X),
                                                active(if(false(), X, Y)) -> mark(Y),
                                                  active(divides(X1, X2)) -> divides(X1, active(X2)),
                                                  active(divides(X1, X2)) -> divides(active(X1), X2),
                                                   active(filter(X1, X2)) -> filter(X1, active(X2)),
                                                   active(filter(X1, X2)) -> filter(active(X1), X2),
                                      active(filter(s(s(X)), cons(Y, Z))) -> mark(if(divides(s(s(X)), Y), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y))))),
                                                       cons(mark(X1), X2) -> mark(cons(X1, X2)),
                                                     cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)),
                                                            head(mark(X)) -> mark(head(X)),
                                                              head(ok(X)) -> ok(head(X)),
                                                            tail(mark(X)) -> mark(tail(X)),
                                                              tail(ok(X)) -> ok(tail(X)),
                                                     if(mark(X1), X2, X3) -> mark(if(X1, X2, X3)),
                                               if(ok(X1), ok(X2), ok(X3)) -> ok(if(X1, X2, X3)),
                                                    divides(X1, mark(X2)) -> mark(divides(X1, X2)),
                                                    divides(mark(X1), X2) -> mark(divides(X1, X2)),
                                                  divides(ok(X1), ok(X2)) -> ok(divides(X1, X2)),
                                                     filter(X1, mark(X2)) -> mark(filter(X1, X2)),
                                                     filter(mark(X1), X2) -> mark(filter(X1, X2)),
                                                   filter(ok(X1), ok(X2)) -> ok(filter(X1, X2)),
                                                         proper(sieve(X)) -> sieve(proper(X)),
                                                          proper(from(X)) -> from(proper(X)),
                                                             proper(s(X)) -> s(proper(X)),
                                                              proper(0()) -> ok(0()),
                                                         proper(primes()) -> ok(primes()),
                                                     proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)),
                                                          proper(head(X)) -> head(proper(X)),
                                                          proper(tail(X)) -> tail(proper(X)),
                                                   proper(if(X1, X2, X3)) -> if(proper(X1), proper(X2), proper(X3)),
                                                           proper(true()) -> ok(true()),
                                                          proper(false()) -> ok(false()),
                                                  proper(divides(X1, X2)) -> divides(proper(X1), proper(X2)),
                                                   proper(filter(X1, X2)) -> filter(proper(X1), proper(X2)),
                                                             top(mark(X)) -> top(proper(X)),
                                                               top(ok(X)) -> top(active(X))}
                                     SPSC:
                                      Simple Projection:
                                       pi(proper#) = 0
                                      Strict:
                                       {   proper#(cons(X1, X2)) -> proper#(X1),
                                           proper#(cons(X1, X2)) -> proper#(X2),
                                                proper#(head(X)) -> proper#(X),
                                                proper#(tail(X)) -> proper#(X),
                                        proper#(divides(X1, X2)) -> proper#(X1)}
                                      EDG:
                                       {(proper#(tail(X)) -> proper#(X), proper#(divides(X1, X2)) -> proper#(X1))
                                        (proper#(tail(X)) -> proper#(X), proper#(tail(X)) -> proper#(X))
                                        (proper#(tail(X)) -> proper#(X), proper#(head(X)) -> proper#(X))
                                        (proper#(tail(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X2))
                                        (proper#(tail(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X1))
                                        (proper#(divides(X1, X2)) -> proper#(X1), proper#(divides(X1, X2)) -> proper#(X1))
                                        (proper#(divides(X1, X2)) -> proper#(X1), proper#(tail(X)) -> proper#(X))
                                        (proper#(divides(X1, X2)) -> proper#(X1), proper#(head(X)) -> proper#(X))
                                        (proper#(divides(X1, X2)) -> proper#(X1), proper#(cons(X1, X2)) -> proper#(X2))
                                        (proper#(divides(X1, X2)) -> proper#(X1), proper#(cons(X1, X2)) -> proper#(X1))
                                        (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#(head(X)) -> proper#(X))
                                        (proper#(cons(X1, X2)) -> proper#(X2), proper#(tail(X)) -> proper#(X))
                                        (proper#(cons(X1, X2)) -> proper#(X2), proper#(divides(X1, X2)) -> proper#(X1))
                                        (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#(head(X)) -> proper#(X))
                                        (proper#(cons(X1, X2)) -> proper#(X1), proper#(tail(X)) -> proper#(X))
                                        (proper#(cons(X1, X2)) -> proper#(X1), proper#(divides(X1, X2)) -> proper#(X1))
                                        (proper#(head(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X1))
                                        (proper#(head(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X2))
                                        (proper#(head(X)) -> proper#(X), proper#(head(X)) -> proper#(X))
                                        (proper#(head(X)) -> proper#(X), proper#(tail(X)) -> proper#(X))
                                        (proper#(head(X)) -> proper#(X), proper#(divides(X1, X2)) -> proper#(X1))}
                                       SCCS:
                                        Scc:
                                         {   proper#(cons(X1, X2)) -> proper#(X1),
                                             proper#(cons(X1, X2)) -> proper#(X2),
                                                  proper#(head(X)) -> proper#(X),
                                                  proper#(tail(X)) -> proper#(X),
                                          proper#(divides(X1, X2)) -> proper#(X1)}
                                        SCC:
                                         Strict:
                                          {   proper#(cons(X1, X2)) -> proper#(X1),
                                              proper#(cons(X1, X2)) -> proper#(X2),
                                                   proper#(head(X)) -> proper#(X),
                                                   proper#(tail(X)) -> proper#(X),
                                           proper#(divides(X1, X2)) -> proper#(X1)}
                                         Weak:
                                         {                     sieve(mark(X)) -> mark(sieve(X)),
                                                                 sieve(ok(X)) -> ok(sieve(X)),
                                                                from(mark(X)) -> mark(from(X)),
                                                                  from(ok(X)) -> ok(from(X)),
                                                                   s(mark(X)) -> mark(s(X)),
                                                                     s(ok(X)) -> ok(s(X)),
                                                             active(sieve(X)) -> sieve(active(X)),
                                                    active(sieve(cons(X, Y))) -> mark(cons(X, filter(X, sieve(Y)))),
                                                              active(from(X)) -> mark(cons(X, from(s(X)))),
                                                              active(from(X)) -> from(active(X)),
                                                                 active(s(X)) -> s(active(X)),
                                                             active(primes()) -> mark(sieve(from(s(s(0()))))),
                                                         active(cons(X1, X2)) -> cons(active(X1), X2),
                                                              active(head(X)) -> head(active(X)),
                                                     active(head(cons(X, Y))) -> mark(X),
                                                              active(tail(X)) -> tail(active(X)),
                                                     active(tail(cons(X, Y))) -> mark(Y),
                                                       active(if(X1, X2, X3)) -> if(active(X1), X2, X3),
                                                     active(if(true(), X, Y)) -> mark(X),
                                                    active(if(false(), X, Y)) -> mark(Y),
                                                      active(divides(X1, X2)) -> divides(X1, active(X2)),
                                                      active(divides(X1, X2)) -> divides(active(X1), X2),
                                                       active(filter(X1, X2)) -> filter(X1, active(X2)),
                                                       active(filter(X1, X2)) -> filter(active(X1), X2),
                                          active(filter(s(s(X)), cons(Y, Z))) -> mark(if(divides(s(s(X)), Y), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y))))),
                                                           cons(mark(X1), X2) -> mark(cons(X1, X2)),
                                                         cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)),
                                                                head(mark(X)) -> mark(head(X)),
                                                                  head(ok(X)) -> ok(head(X)),
                                                                tail(mark(X)) -> mark(tail(X)),
                                                                  tail(ok(X)) -> ok(tail(X)),
                                                         if(mark(X1), X2, X3) -> mark(if(X1, X2, X3)),
                                                   if(ok(X1), ok(X2), ok(X3)) -> ok(if(X1, X2, X3)),
                                                        divides(X1, mark(X2)) -> mark(divides(X1, X2)),
                                                        divides(mark(X1), X2) -> mark(divides(X1, X2)),
                                                      divides(ok(X1), ok(X2)) -> ok(divides(X1, X2)),
                                                         filter(X1, mark(X2)) -> mark(filter(X1, X2)),
                                                         filter(mark(X1), X2) -> mark(filter(X1, X2)),
                                                       filter(ok(X1), ok(X2)) -> ok(filter(X1, X2)),
                                                             proper(sieve(X)) -> sieve(proper(X)),
                                                              proper(from(X)) -> from(proper(X)),
                                                                 proper(s(X)) -> s(proper(X)),
                                                                  proper(0()) -> ok(0()),
                                                             proper(primes()) -> ok(primes()),
                                                         proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)),
                                                              proper(head(X)) -> head(proper(X)),
                                                              proper(tail(X)) -> tail(proper(X)),
                                                       proper(if(X1, X2, X3)) -> if(proper(X1), proper(X2), proper(X3)),
                                                               proper(true()) -> ok(true()),
                                                              proper(false()) -> ok(false()),
                                                      proper(divides(X1, X2)) -> divides(proper(X1), proper(X2)),
                                                       proper(filter(X1, X2)) -> filter(proper(X1), proper(X2)),
                                                                 top(mark(X)) -> top(proper(X)),
                                                                   top(ok(X)) -> top(active(X))}
                                         SPSC:
                                          Simple Projection:
                                           pi(proper#) = 0
                                          Strict:
                                           {   proper#(cons(X1, X2)) -> proper#(X1),
                                               proper#(cons(X1, X2)) -> proper#(X2),
                                                    proper#(head(X)) -> proper#(X),
                                            proper#(divides(X1, X2)) -> proper#(X1)}
                                          EDG:
                                           {(proper#(head(X)) -> proper#(X), proper#(divides(X1, X2)) -> proper#(X1))
                                            (proper#(head(X)) -> proper#(X), proper#(head(X)) -> proper#(X))
                                            (proper#(head(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X2))
                                            (proper#(head(X)) -> proper#(X), proper#(cons(X1, X2)) -> proper#(X1))
                                            (proper#(divides(X1, X2)) -> proper#(X1), proper#(divides(X1, X2)) -> proper#(X1))
                                            (proper#(divides(X1, X2)) -> proper#(X1), proper#(head(X)) -> proper#(X))
                                            (proper#(divides(X1, X2)) -> proper#(X1), proper#(cons(X1, X2)) -> proper#(X2))
                                            (proper#(divides(X1, X2)) -> proper#(X1), proper#(cons(X1, X2)) -> proper#(X1))
                                            (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#(head(X)) -> proper#(X))
                                            (proper#(cons(X1, X2)) -> proper#(X1), proper#(divides(X1, X2)) -> proper#(X1))
                                            (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#(head(X)) -> proper#(X))
                                            (proper#(cons(X1, X2)) -> proper#(X2), proper#(divides(X1, X2)) -> proper#(X1))}
                                           SCCS:
                                            Scc:
                                             {   proper#(cons(X1, X2)) -> proper#(X1),
                                                 proper#(cons(X1, X2)) -> proper#(X2),
                                                      proper#(head(X)) -> proper#(X),
                                              proper#(divides(X1, X2)) -> proper#(X1)}
                                            SCC:
                                             Strict:
                                              {   proper#(cons(X1, X2)) -> proper#(X1),
                                                  proper#(cons(X1, X2)) -> proper#(X2),
                                                       proper#(head(X)) -> proper#(X),
                                               proper#(divides(X1, X2)) -> proper#(X1)}
                                             Weak:
                                             {                     sieve(mark(X)) -> mark(sieve(X)),
                                                                     sieve(ok(X)) -> ok(sieve(X)),
                                                                    from(mark(X)) -> mark(from(X)),
                                                                      from(ok(X)) -> ok(from(X)),
                                                                       s(mark(X)) -> mark(s(X)),
                                                                         s(ok(X)) -> ok(s(X)),
                                                                 active(sieve(X)) -> sieve(active(X)),
                                                        active(sieve(cons(X, Y))) -> mark(cons(X, filter(X, sieve(Y)))),
                                                                  active(from(X)) -> mark(cons(X, from(s(X)))),
                                                                  active(from(X)) -> from(active(X)),
                                                                     active(s(X)) -> s(active(X)),
                                                                 active(primes()) -> mark(sieve(from(s(s(0()))))),
                                                             active(cons(X1, X2)) -> cons(active(X1), X2),
                                                                  active(head(X)) -> head(active(X)),
                                                         active(head(cons(X, Y))) -> mark(X),
                                                                  active(tail(X)) -> tail(active(X)),
                                                         active(tail(cons(X, Y))) -> mark(Y),
                                                           active(if(X1, X2, X3)) -> if(active(X1), X2, X3),
                                                         active(if(true(), X, Y)) -> mark(X),
                                                        active(if(false(), X, Y)) -> mark(Y),
                                                          active(divides(X1, X2)) -> divides(X1, active(X2)),
                                                          active(divides(X1, X2)) -> divides(active(X1), X2),
                                                           active(filter(X1, X2)) -> filter(X1, active(X2)),
                                                           active(filter(X1, X2)) -> filter(active(X1), X2),
                                              active(filter(s(s(X)), cons(Y, Z))) -> mark(if(divides(s(s(X)), Y), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y))))),
                                                               cons(mark(X1), X2) -> mark(cons(X1, X2)),
                                                             cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)),
                                                                    head(mark(X)) -> mark(head(X)),
                                                                      head(ok(X)) -> ok(head(X)),
                                                                    tail(mark(X)) -> mark(tail(X)),
                                                                      tail(ok(X)) -> ok(tail(X)),
                                                             if(mark(X1), X2, X3) -> mark(if(X1, X2, X3)),
                                                       if(ok(X1), ok(X2), ok(X3)) -> ok(if(X1, X2, X3)),
                                                            divides(X1, mark(X2)) -> mark(divides(X1, X2)),
                                                            divides(mark(X1), X2) -> mark(divides(X1, X2)),
                                                          divides(ok(X1), ok(X2)) -> ok(divides(X1, X2)),
                                                             filter(X1, mark(X2)) -> mark(filter(X1, X2)),
                                                             filter(mark(X1), X2) -> mark(filter(X1, X2)),
                                                           filter(ok(X1), ok(X2)) -> ok(filter(X1, X2)),
                                                                 proper(sieve(X)) -> sieve(proper(X)),
                                                                  proper(from(X)) -> from(proper(X)),
                                                                     proper(s(X)) -> s(proper(X)),
                                                                      proper(0()) -> ok(0()),
                                                                 proper(primes()) -> ok(primes()),
                                                             proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)),
                                                                  proper(head(X)) -> head(proper(X)),
                                                                  proper(tail(X)) -> tail(proper(X)),
                                                           proper(if(X1, X2, X3)) -> if(proper(X1), proper(X2), proper(X3)),
                                                                   proper(true()) -> ok(true()),
                                                                  proper(false()) -> ok(false()),
                                                          proper(divides(X1, X2)) -> divides(proper(X1), proper(X2)),
                                                           proper(filter(X1, X2)) -> filter(proper(X1), proper(X2)),
                                                                     top(mark(X)) -> top(proper(X)),
                                                                       top(ok(X)) -> top(active(X))}
                                             SPSC:
                                              Simple Projection:
                                               pi(proper#) = 0
                                              Strict:
                                               {   proper#(cons(X1, X2)) -> proper#(X1),
                                                   proper#(cons(X1, X2)) -> proper#(X2),
                                                proper#(divides(X1, X2)) -> proper#(X1)}
                                              EDG:
                                               {(proper#(cons(X1, X2)) -> proper#(X1), proper#(divides(X1, X2)) -> proper#(X1))
                                                (proper#(cons(X1, X2)) -> proper#(X1), proper#(cons(X1, X2)) -> proper#(X2))
                                                (proper#(cons(X1, X2)) -> proper#(X1), proper#(cons(X1, X2)) -> proper#(X1))
                                                (proper#(divides(X1, X2)) -> proper#(X1), proper#(cons(X1, X2)) -> proper#(X1))
                                                (proper#(divides(X1, X2)) -> proper#(X1), proper#(cons(X1, X2)) -> proper#(X2))
                                                (proper#(divides(X1, X2)) -> proper#(X1), proper#(divides(X1, X2)) -> proper#(X1))
                                                (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#(divides(X1, X2)) -> proper#(X1))}
                                               SCCS:
                                                Scc:
                                                 {   proper#(cons(X1, X2)) -> proper#(X1),
                                                     proper#(cons(X1, X2)) -> proper#(X2),
                                                  proper#(divides(X1, X2)) -> proper#(X1)}
                                                SCC:
                                                 Strict:
                                                  {   proper#(cons(X1, X2)) -> proper#(X1),
                                                      proper#(cons(X1, X2)) -> proper#(X2),
                                                   proper#(divides(X1, X2)) -> proper#(X1)}
                                                 Weak:
                                                 {                     sieve(mark(X)) -> mark(sieve(X)),
                                                                         sieve(ok(X)) -> ok(sieve(X)),
                                                                        from(mark(X)) -> mark(from(X)),
                                                                          from(ok(X)) -> ok(from(X)),
                                                                           s(mark(X)) -> mark(s(X)),
                                                                             s(ok(X)) -> ok(s(X)),
                                                                     active(sieve(X)) -> sieve(active(X)),
                                                            active(sieve(cons(X, Y))) -> mark(cons(X, filter(X, sieve(Y)))),
                                                                      active(from(X)) -> mark(cons(X, from(s(X)))),
                                                                      active(from(X)) -> from(active(X)),
                                                                         active(s(X)) -> s(active(X)),
                                                                     active(primes()) -> mark(sieve(from(s(s(0()))))),
                                                                 active(cons(X1, X2)) -> cons(active(X1), X2),
                                                                      active(head(X)) -> head(active(X)),
                                                             active(head(cons(X, Y))) -> mark(X),
                                                                      active(tail(X)) -> tail(active(X)),
                                                             active(tail(cons(X, Y))) -> mark(Y),
                                                               active(if(X1, X2, X3)) -> if(active(X1), X2, X3),
                                                             active(if(true(), X, Y)) -> mark(X),
                                                            active(if(false(), X, Y)) -> mark(Y),
                                                              active(divides(X1, X2)) -> divides(X1, active(X2)),
                                                              active(divides(X1, X2)) -> divides(active(X1), X2),
                                                               active(filter(X1, X2)) -> filter(X1, active(X2)),
                                                               active(filter(X1, X2)) -> filter(active(X1), X2),
                                                  active(filter(s(s(X)), cons(Y, Z))) -> mark(if(divides(s(s(X)), Y), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y))))),
                                                                   cons(mark(X1), X2) -> mark(cons(X1, X2)),
                                                                 cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)),
                                                                        head(mark(X)) -> mark(head(X)),
                                                                          head(ok(X)) -> ok(head(X)),
                                                                        tail(mark(X)) -> mark(tail(X)),
                                                                          tail(ok(X)) -> ok(tail(X)),
                                                                 if(mark(X1), X2, X3) -> mark(if(X1, X2, X3)),
                                                           if(ok(X1), ok(X2), ok(X3)) -> ok(if(X1, X2, X3)),
                                                                divides(X1, mark(X2)) -> mark(divides(X1, X2)),
                                                                divides(mark(X1), X2) -> mark(divides(X1, X2)),
                                                              divides(ok(X1), ok(X2)) -> ok(divides(X1, X2)),
                                                                 filter(X1, mark(X2)) -> mark(filter(X1, X2)),
                                                                 filter(mark(X1), X2) -> mark(filter(X1, X2)),
                                                               filter(ok(X1), ok(X2)) -> ok(filter(X1, X2)),
                                                                     proper(sieve(X)) -> sieve(proper(X)),
                                                                      proper(from(X)) -> from(proper(X)),
                                                                         proper(s(X)) -> s(proper(X)),
                                                                          proper(0()) -> ok(0()),
                                                                     proper(primes()) -> ok(primes()),
                                                                 proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)),
                                                                      proper(head(X)) -> head(proper(X)),
                                                                      proper(tail(X)) -> tail(proper(X)),
                                                               proper(if(X1, X2, X3)) -> if(proper(X1), proper(X2), proper(X3)),
                                                                       proper(true()) -> ok(true()),
                                                                      proper(false()) -> ok(false()),
                                                              proper(divides(X1, X2)) -> divides(proper(X1), proper(X2)),
                                                               proper(filter(X1, X2)) -> filter(proper(X1), proper(X2)),
                                                                         top(mark(X)) -> top(proper(X)),
                                                                           top(ok(X)) -> top(active(X))}
                                                 SPSC:
                                                  Simple Projection:
                                                   pi(proper#) = 0
                                                  Strict:
                                                   {   proper#(cons(X1, X2)) -> proper#(X1),
                                                    proper#(divides(X1, X2)) -> proper#(X1)}
                                                  EDG:
                                                   {(proper#(divides(X1, X2)) -> proper#(X1), proper#(divides(X1, X2)) -> proper#(X1))
                                                    (proper#(divides(X1, X2)) -> proper#(X1), proper#(cons(X1, X2)) -> proper#(X1))
                                                    (proper#(cons(X1, X2)) -> proper#(X1), proper#(cons(X1, X2)) -> proper#(X1))
                                                    (proper#(cons(X1, X2)) -> proper#(X1), proper#(divides(X1, X2)) -> proper#(X1))}
                                                   SCCS:
                                                    Scc:
                                                     {   proper#(cons(X1, X2)) -> proper#(X1),
                                                      proper#(divides(X1, X2)) -> proper#(X1)}
                                                    SCC:
                                                     Strict:
                                                      {   proper#(cons(X1, X2)) -> proper#(X1),
                                                       proper#(divides(X1, X2)) -> proper#(X1)}
                                                     Weak:
                                                     {                     sieve(mark(X)) -> mark(sieve(X)),
                                                                             sieve(ok(X)) -> ok(sieve(X)),
                                                                            from(mark(X)) -> mark(from(X)),
                                                                              from(ok(X)) -> ok(from(X)),
                                                                               s(mark(X)) -> mark(s(X)),
                                                                                 s(ok(X)) -> ok(s(X)),
                                                                         active(sieve(X)) -> sieve(active(X)),
                                                                active(sieve(cons(X, Y))) -> mark(cons(X, filter(X, sieve(Y)))),
                                                                          active(from(X)) -> mark(cons(X, from(s(X)))),
                                                                          active(from(X)) -> from(active(X)),
                                                                             active(s(X)) -> s(active(X)),
                                                                         active(primes()) -> mark(sieve(from(s(s(0()))))),
                                                                     active(cons(X1, X2)) -> cons(active(X1), X2),
                                                                          active(head(X)) -> head(active(X)),
                                                                 active(head(cons(X, Y))) -> mark(X),
                                                                          active(tail(X)) -> tail(active(X)),
                                                                 active(tail(cons(X, Y))) -> mark(Y),
                                                                   active(if(X1, X2, X3)) -> if(active(X1), X2, X3),
                                                                 active(if(true(), X, Y)) -> mark(X),
                                                                active(if(false(), X, Y)) -> mark(Y),
                                                                  active(divides(X1, X2)) -> divides(X1, active(X2)),
                                                                  active(divides(X1, X2)) -> divides(active(X1), X2),
                                                                   active(filter(X1, X2)) -> filter(X1, active(X2)),
                                                                   active(filter(X1, X2)) -> filter(active(X1), X2),
                                                      active(filter(s(s(X)), cons(Y, Z))) -> mark(if(divides(s(s(X)), Y), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y))))),
                                                                       cons(mark(X1), X2) -> mark(cons(X1, X2)),
                                                                     cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)),
                                                                            head(mark(X)) -> mark(head(X)),
                                                                              head(ok(X)) -> ok(head(X)),
                                                                            tail(mark(X)) -> mark(tail(X)),
                                                                              tail(ok(X)) -> ok(tail(X)),
                                                                     if(mark(X1), X2, X3) -> mark(if(X1, X2, X3)),
                                                               if(ok(X1), ok(X2), ok(X3)) -> ok(if(X1, X2, X3)),
                                                                    divides(X1, mark(X2)) -> mark(divides(X1, X2)),
                                                                    divides(mark(X1), X2) -> mark(divides(X1, X2)),
                                                                  divides(ok(X1), ok(X2)) -> ok(divides(X1, X2)),
                                                                     filter(X1, mark(X2)) -> mark(filter(X1, X2)),
                                                                     filter(mark(X1), X2) -> mark(filter(X1, X2)),
                                                                   filter(ok(X1), ok(X2)) -> ok(filter(X1, X2)),
                                                                         proper(sieve(X)) -> sieve(proper(X)),
                                                                          proper(from(X)) -> from(proper(X)),
                                                                             proper(s(X)) -> s(proper(X)),
                                                                              proper(0()) -> ok(0()),
                                                                         proper(primes()) -> ok(primes()),
                                                                     proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)),
                                                                          proper(head(X)) -> head(proper(X)),
                                                                          proper(tail(X)) -> tail(proper(X)),
                                                                   proper(if(X1, X2, X3)) -> if(proper(X1), proper(X2), proper(X3)),
                                                                           proper(true()) -> ok(true()),
                                                                          proper(false()) -> ok(false()),
                                                                  proper(divides(X1, X2)) -> divides(proper(X1), proper(X2)),
                                                                   proper(filter(X1, X2)) -> filter(proper(X1), proper(X2)),
                                                                             top(mark(X)) -> top(proper(X)),
                                                                               top(ok(X)) -> top(active(X))}
                                                     SPSC:
                                                      Simple Projection:
                                                       pi(proper#) = 0
                                                      Strict:
                                                       {proper#(divides(X1, X2)) -> proper#(X1)}
                                                      EDG:
                                                       {(proper#(divides(X1, X2)) -> proper#(X1), proper#(divides(X1, X2)) -> proper#(X1))}
                                                       SCCS:
                                                        Scc:
                                                         {proper#(divides(X1, X2)) -> proper#(X1)}
                                                        SCC:
                                                         Strict:
                                                          {proper#(divides(X1, X2)) -> proper#(X1)}
                                                         Weak:
                                                         {                     sieve(mark(X)) -> mark(sieve(X)),
                                                                                 sieve(ok(X)) -> ok(sieve(X)),
                                                                                from(mark(X)) -> mark(from(X)),
                                                                                  from(ok(X)) -> ok(from(X)),
                                                                                   s(mark(X)) -> mark(s(X)),
                                                                                     s(ok(X)) -> ok(s(X)),
                                                                             active(sieve(X)) -> sieve(active(X)),
                                                                    active(sieve(cons(X, Y))) -> mark(cons(X, filter(X, sieve(Y)))),
                                                                              active(from(X)) -> mark(cons(X, from(s(X)))),
                                                                              active(from(X)) -> from(active(X)),
                                                                                 active(s(X)) -> s(active(X)),
                                                                             active(primes()) -> mark(sieve(from(s(s(0()))))),
                                                                         active(cons(X1, X2)) -> cons(active(X1), X2),
                                                                              active(head(X)) -> head(active(X)),
                                                                     active(head(cons(X, Y))) -> mark(X),
                                                                              active(tail(X)) -> tail(active(X)),
                                                                     active(tail(cons(X, Y))) -> mark(Y),
                                                                       active(if(X1, X2, X3)) -> if(active(X1), X2, X3),
                                                                     active(if(true(), X, Y)) -> mark(X),
                                                                    active(if(false(), X, Y)) -> mark(Y),
                                                                      active(divides(X1, X2)) -> divides(X1, active(X2)),
                                                                      active(divides(X1, X2)) -> divides(active(X1), X2),
                                                                       active(filter(X1, X2)) -> filter(X1, active(X2)),
                                                                       active(filter(X1, X2)) -> filter(active(X1), X2),
                                                          active(filter(s(s(X)), cons(Y, Z))) -> mark(if(divides(s(s(X)), Y), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y))))),
                                                                           cons(mark(X1), X2) -> mark(cons(X1, X2)),
                                                                         cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)),
                                                                                head(mark(X)) -> mark(head(X)),
                                                                                  head(ok(X)) -> ok(head(X)),
                                                                                tail(mark(X)) -> mark(tail(X)),
                                                                                  tail(ok(X)) -> ok(tail(X)),
                                                                         if(mark(X1), X2, X3) -> mark(if(X1, X2, X3)),
                                                                   if(ok(X1), ok(X2), ok(X3)) -> ok(if(X1, X2, X3)),
                                                                        divides(X1, mark(X2)) -> mark(divides(X1, X2)),
                                                                        divides(mark(X1), X2) -> mark(divides(X1, X2)),
                                                                      divides(ok(X1), ok(X2)) -> ok(divides(X1, X2)),
                                                                         filter(X1, mark(X2)) -> mark(filter(X1, X2)),
                                                                         filter(mark(X1), X2) -> mark(filter(X1, X2)),
                                                                       filter(ok(X1), ok(X2)) -> ok(filter(X1, X2)),
                                                                             proper(sieve(X)) -> sieve(proper(X)),
                                                                              proper(from(X)) -> from(proper(X)),
                                                                                 proper(s(X)) -> s(proper(X)),
                                                                                  proper(0()) -> ok(0()),
                                                                             proper(primes()) -> ok(primes()),
                                                                         proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)),
                                                                              proper(head(X)) -> head(proper(X)),
                                                                              proper(tail(X)) -> tail(proper(X)),
                                                                       proper(if(X1, X2, X3)) -> if(proper(X1), proper(X2), proper(X3)),
                                                                               proper(true()) -> ok(true()),
                                                                              proper(false()) -> ok(false()),
                                                                      proper(divides(X1, X2)) -> divides(proper(X1), proper(X2)),
                                                                       proper(filter(X1, X2)) -> filter(proper(X1), proper(X2)),
                                                                                 top(mark(X)) -> top(proper(X)),
                                                                                   top(ok(X)) -> top(active(X))}
                                                         SPSC:
                                                          Simple Projection:
                                                           pi(proper#) = 0
                                                          Strict:
                                                           {}
                                                          Qed
    SCC:
     Strict:
      {  filter#(X1, mark(X2)) -> filter#(X1, X2),
         filter#(mark(X1), X2) -> filter#(X1, X2),
       filter#(ok(X1), ok(X2)) -> filter#(X1, X2)}
     Weak:
     {                     sieve(mark(X)) -> mark(sieve(X)),
                             sieve(ok(X)) -> ok(sieve(X)),
                            from(mark(X)) -> mark(from(X)),
                              from(ok(X)) -> ok(from(X)),
                               s(mark(X)) -> mark(s(X)),
                                 s(ok(X)) -> ok(s(X)),
                         active(sieve(X)) -> sieve(active(X)),
                active(sieve(cons(X, Y))) -> mark(cons(X, filter(X, sieve(Y)))),
                          active(from(X)) -> mark(cons(X, from(s(X)))),
                          active(from(X)) -> from(active(X)),
                             active(s(X)) -> s(active(X)),
                         active(primes()) -> mark(sieve(from(s(s(0()))))),
                     active(cons(X1, X2)) -> cons(active(X1), X2),
                          active(head(X)) -> head(active(X)),
                 active(head(cons(X, Y))) -> mark(X),
                          active(tail(X)) -> tail(active(X)),
                 active(tail(cons(X, Y))) -> mark(Y),
                   active(if(X1, X2, X3)) -> if(active(X1), X2, X3),
                 active(if(true(), X, Y)) -> mark(X),
                active(if(false(), X, Y)) -> mark(Y),
                  active(divides(X1, X2)) -> divides(X1, active(X2)),
                  active(divides(X1, X2)) -> divides(active(X1), X2),
                   active(filter(X1, X2)) -> filter(X1, active(X2)),
                   active(filter(X1, X2)) -> filter(active(X1), X2),
      active(filter(s(s(X)), cons(Y, Z))) -> mark(if(divides(s(s(X)), Y), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y))))),
                       cons(mark(X1), X2) -> mark(cons(X1, X2)),
                     cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)),
                            head(mark(X)) -> mark(head(X)),
                              head(ok(X)) -> ok(head(X)),
                            tail(mark(X)) -> mark(tail(X)),
                              tail(ok(X)) -> ok(tail(X)),
                     if(mark(X1), X2, X3) -> mark(if(X1, X2, X3)),
               if(ok(X1), ok(X2), ok(X3)) -> ok(if(X1, X2, X3)),
                    divides(X1, mark(X2)) -> mark(divides(X1, X2)),
                    divides(mark(X1), X2) -> mark(divides(X1, X2)),
                  divides(ok(X1), ok(X2)) -> ok(divides(X1, X2)),
                     filter(X1, mark(X2)) -> mark(filter(X1, X2)),
                     filter(mark(X1), X2) -> mark(filter(X1, X2)),
                   filter(ok(X1), ok(X2)) -> ok(filter(X1, X2)),
                         proper(sieve(X)) -> sieve(proper(X)),
                          proper(from(X)) -> from(proper(X)),
                             proper(s(X)) -> s(proper(X)),
                              proper(0()) -> ok(0()),
                         proper(primes()) -> ok(primes()),
                     proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)),
                          proper(head(X)) -> head(proper(X)),
                          proper(tail(X)) -> tail(proper(X)),
                   proper(if(X1, X2, X3)) -> if(proper(X1), proper(X2), proper(X3)),
                           proper(true()) -> ok(true()),
                          proper(false()) -> ok(false()),
                  proper(divides(X1, X2)) -> divides(proper(X1), proper(X2)),
                   proper(filter(X1, X2)) -> filter(proper(X1), proper(X2)),
                             top(mark(X)) -> top(proper(X)),
                               top(ok(X)) -> top(active(X))}
     SPSC:
      Simple Projection:
       pi(filter#) = 0
      Strict:
       {filter#(X1, mark(X2)) -> filter#(X1, X2),
        filter#(mark(X1), X2) -> filter#(X1, X2)}
      EDG:
       {(filter#(mark(X1), X2) -> filter#(X1, X2), filter#(mark(X1), X2) -> filter#(X1, X2))
        (filter#(mark(X1), X2) -> filter#(X1, X2), filter#(X1, mark(X2)) -> filter#(X1, X2))
        (filter#(X1, mark(X2)) -> filter#(X1, X2), filter#(X1, mark(X2)) -> filter#(X1, X2))
        (filter#(X1, mark(X2)) -> filter#(X1, X2), filter#(mark(X1), X2) -> filter#(X1, X2))}
       SCCS:
        Scc:
         {filter#(X1, mark(X2)) -> filter#(X1, X2),
          filter#(mark(X1), X2) -> filter#(X1, X2)}
        SCC:
         Strict:
          {filter#(X1, mark(X2)) -> filter#(X1, X2),
           filter#(mark(X1), X2) -> filter#(X1, X2)}
         Weak:
         {                     sieve(mark(X)) -> mark(sieve(X)),
                                 sieve(ok(X)) -> ok(sieve(X)),
                                from(mark(X)) -> mark(from(X)),
                                  from(ok(X)) -> ok(from(X)),
                                   s(mark(X)) -> mark(s(X)),
                                     s(ok(X)) -> ok(s(X)),
                             active(sieve(X)) -> sieve(active(X)),
                    active(sieve(cons(X, Y))) -> mark(cons(X, filter(X, sieve(Y)))),
                              active(from(X)) -> mark(cons(X, from(s(X)))),
                              active(from(X)) -> from(active(X)),
                                 active(s(X)) -> s(active(X)),
                             active(primes()) -> mark(sieve(from(s(s(0()))))),
                         active(cons(X1, X2)) -> cons(active(X1), X2),
                              active(head(X)) -> head(active(X)),
                     active(head(cons(X, Y))) -> mark(X),
                              active(tail(X)) -> tail(active(X)),
                     active(tail(cons(X, Y))) -> mark(Y),
                       active(if(X1, X2, X3)) -> if(active(X1), X2, X3),
                     active(if(true(), X, Y)) -> mark(X),
                    active(if(false(), X, Y)) -> mark(Y),
                      active(divides(X1, X2)) -> divides(X1, active(X2)),
                      active(divides(X1, X2)) -> divides(active(X1), X2),
                       active(filter(X1, X2)) -> filter(X1, active(X2)),
                       active(filter(X1, X2)) -> filter(active(X1), X2),
          active(filter(s(s(X)), cons(Y, Z))) -> mark(if(divides(s(s(X)), Y), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y))))),
                           cons(mark(X1), X2) -> mark(cons(X1, X2)),
                         cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)),
                                head(mark(X)) -> mark(head(X)),
                                  head(ok(X)) -> ok(head(X)),
                                tail(mark(X)) -> mark(tail(X)),
                                  tail(ok(X)) -> ok(tail(X)),
                         if(mark(X1), X2, X3) -> mark(if(X1, X2, X3)),
                   if(ok(X1), ok(X2), ok(X3)) -> ok(if(X1, X2, X3)),
                        divides(X1, mark(X2)) -> mark(divides(X1, X2)),
                        divides(mark(X1), X2) -> mark(divides(X1, X2)),
                      divides(ok(X1), ok(X2)) -> ok(divides(X1, X2)),
                         filter(X1, mark(X2)) -> mark(filter(X1, X2)),
                         filter(mark(X1), X2) -> mark(filter(X1, X2)),
                       filter(ok(X1), ok(X2)) -> ok(filter(X1, X2)),
                             proper(sieve(X)) -> sieve(proper(X)),
                              proper(from(X)) -> from(proper(X)),
                                 proper(s(X)) -> s(proper(X)),
                                  proper(0()) -> ok(0()),
                             proper(primes()) -> ok(primes()),
                         proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)),
                              proper(head(X)) -> head(proper(X)),
                              proper(tail(X)) -> tail(proper(X)),
                       proper(if(X1, X2, X3)) -> if(proper(X1), proper(X2), proper(X3)),
                               proper(true()) -> ok(true()),
                              proper(false()) -> ok(false()),
                      proper(divides(X1, X2)) -> divides(proper(X1), proper(X2)),
                       proper(filter(X1, X2)) -> filter(proper(X1), proper(X2)),
                                 top(mark(X)) -> top(proper(X)),
                                   top(ok(X)) -> top(active(X))}
         SPSC:
          Simple Projection:
           pi(filter#) = 0
          Strict:
           {filter#(X1, mark(X2)) -> filter#(X1, X2)}
          EDG:
           {(filter#(X1, mark(X2)) -> filter#(X1, X2), filter#(X1, mark(X2)) -> filter#(X1, X2))}
           SCCS:
            Scc:
             {filter#(X1, mark(X2)) -> filter#(X1, X2)}
            SCC:
             Strict:
              {filter#(X1, mark(X2)) -> filter#(X1, X2)}
             Weak:
             {                     sieve(mark(X)) -> mark(sieve(X)),
                                     sieve(ok(X)) -> ok(sieve(X)),
                                    from(mark(X)) -> mark(from(X)),
                                      from(ok(X)) -> ok(from(X)),
                                       s(mark(X)) -> mark(s(X)),
                                         s(ok(X)) -> ok(s(X)),
                                 active(sieve(X)) -> sieve(active(X)),
                        active(sieve(cons(X, Y))) -> mark(cons(X, filter(X, sieve(Y)))),
                                  active(from(X)) -> mark(cons(X, from(s(X)))),
                                  active(from(X)) -> from(active(X)),
                                     active(s(X)) -> s(active(X)),
                                 active(primes()) -> mark(sieve(from(s(s(0()))))),
                             active(cons(X1, X2)) -> cons(active(X1), X2),
                                  active(head(X)) -> head(active(X)),
                         active(head(cons(X, Y))) -> mark(X),
                                  active(tail(X)) -> tail(active(X)),
                         active(tail(cons(X, Y))) -> mark(Y),
                           active(if(X1, X2, X3)) -> if(active(X1), X2, X3),
                         active(if(true(), X, Y)) -> mark(X),
                        active(if(false(), X, Y)) -> mark(Y),
                          active(divides(X1, X2)) -> divides(X1, active(X2)),
                          active(divides(X1, X2)) -> divides(active(X1), X2),
                           active(filter(X1, X2)) -> filter(X1, active(X2)),
                           active(filter(X1, X2)) -> filter(active(X1), X2),
              active(filter(s(s(X)), cons(Y, Z))) -> mark(if(divides(s(s(X)), Y), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y))))),
                               cons(mark(X1), X2) -> mark(cons(X1, X2)),
                             cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)),
                                    head(mark(X)) -> mark(head(X)),
                                      head(ok(X)) -> ok(head(X)),
                                    tail(mark(X)) -> mark(tail(X)),
                                      tail(ok(X)) -> ok(tail(X)),
                             if(mark(X1), X2, X3) -> mark(if(X1, X2, X3)),
                       if(ok(X1), ok(X2), ok(X3)) -> ok(if(X1, X2, X3)),
                            divides(X1, mark(X2)) -> mark(divides(X1, X2)),
                            divides(mark(X1), X2) -> mark(divides(X1, X2)),
                          divides(ok(X1), ok(X2)) -> ok(divides(X1, X2)),
                             filter(X1, mark(X2)) -> mark(filter(X1, X2)),
                             filter(mark(X1), X2) -> mark(filter(X1, X2)),
                           filter(ok(X1), ok(X2)) -> ok(filter(X1, X2)),
                                 proper(sieve(X)) -> sieve(proper(X)),
                                  proper(from(X)) -> from(proper(X)),
                                     proper(s(X)) -> s(proper(X)),
                                      proper(0()) -> ok(0()),
                                 proper(primes()) -> ok(primes()),
                             proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)),
                                  proper(head(X)) -> head(proper(X)),
                                  proper(tail(X)) -> tail(proper(X)),
                           proper(if(X1, X2, X3)) -> if(proper(X1), proper(X2), proper(X3)),
                                   proper(true()) -> ok(true()),
                                  proper(false()) -> ok(false()),
                          proper(divides(X1, X2)) -> divides(proper(X1), proper(X2)),
                           proper(filter(X1, X2)) -> filter(proper(X1), proper(X2)),
                                     top(mark(X)) -> top(proper(X)),
                                       top(ok(X)) -> top(active(X))}
             SPSC:
              Simple Projection:
               pi(filter#) = 1
              Strict:
               {}
              Qed
    SCC:
     Strict:
      {  divides#(X1, mark(X2)) -> divides#(X1, X2),
         divides#(mark(X1), X2) -> divides#(X1, X2),
       divides#(ok(X1), ok(X2)) -> divides#(X1, X2)}
     Weak:
     {                     sieve(mark(X)) -> mark(sieve(X)),
                             sieve(ok(X)) -> ok(sieve(X)),
                            from(mark(X)) -> mark(from(X)),
                              from(ok(X)) -> ok(from(X)),
                               s(mark(X)) -> mark(s(X)),
                                 s(ok(X)) -> ok(s(X)),
                         active(sieve(X)) -> sieve(active(X)),
                active(sieve(cons(X, Y))) -> mark(cons(X, filter(X, sieve(Y)))),
                          active(from(X)) -> mark(cons(X, from(s(X)))),
                          active(from(X)) -> from(active(X)),
                             active(s(X)) -> s(active(X)),
                         active(primes()) -> mark(sieve(from(s(s(0()))))),
                     active(cons(X1, X2)) -> cons(active(X1), X2),
                          active(head(X)) -> head(active(X)),
                 active(head(cons(X, Y))) -> mark(X),
                          active(tail(X)) -> tail(active(X)),
                 active(tail(cons(X, Y))) -> mark(Y),
                   active(if(X1, X2, X3)) -> if(active(X1), X2, X3),
                 active(if(true(), X, Y)) -> mark(X),
                active(if(false(), X, Y)) -> mark(Y),
                  active(divides(X1, X2)) -> divides(X1, active(X2)),
                  active(divides(X1, X2)) -> divides(active(X1), X2),
                   active(filter(X1, X2)) -> filter(X1, active(X2)),
                   active(filter(X1, X2)) -> filter(active(X1), X2),
      active(filter(s(s(X)), cons(Y, Z))) -> mark(if(divides(s(s(X)), Y), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y))))),
                       cons(mark(X1), X2) -> mark(cons(X1, X2)),
                     cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)),
                            head(mark(X)) -> mark(head(X)),
                              head(ok(X)) -> ok(head(X)),
                            tail(mark(X)) -> mark(tail(X)),
                              tail(ok(X)) -> ok(tail(X)),
                     if(mark(X1), X2, X3) -> mark(if(X1, X2, X3)),
               if(ok(X1), ok(X2), ok(X3)) -> ok(if(X1, X2, X3)),
                    divides(X1, mark(X2)) -> mark(divides(X1, X2)),
                    divides(mark(X1), X2) -> mark(divides(X1, X2)),
                  divides(ok(X1), ok(X2)) -> ok(divides(X1, X2)),
                     filter(X1, mark(X2)) -> mark(filter(X1, X2)),
                     filter(mark(X1), X2) -> mark(filter(X1, X2)),
                   filter(ok(X1), ok(X2)) -> ok(filter(X1, X2)),
                         proper(sieve(X)) -> sieve(proper(X)),
                          proper(from(X)) -> from(proper(X)),
                             proper(s(X)) -> s(proper(X)),
                              proper(0()) -> ok(0()),
                         proper(primes()) -> ok(primes()),
                     proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)),
                          proper(head(X)) -> head(proper(X)),
                          proper(tail(X)) -> tail(proper(X)),
                   proper(if(X1, X2, X3)) -> if(proper(X1), proper(X2), proper(X3)),
                           proper(true()) -> ok(true()),
                          proper(false()) -> ok(false()),
                  proper(divides(X1, X2)) -> divides(proper(X1), proper(X2)),
                   proper(filter(X1, X2)) -> filter(proper(X1), proper(X2)),
                             top(mark(X)) -> top(proper(X)),
                               top(ok(X)) -> top(active(X))}
     SPSC:
      Simple Projection:
       pi(divides#) = 0
      Strict:
       {divides#(X1, mark(X2)) -> divides#(X1, X2),
        divides#(mark(X1), X2) -> divides#(X1, X2)}
      EDG:
       {(divides#(mark(X1), X2) -> divides#(X1, X2), divides#(mark(X1), X2) -> divides#(X1, X2))
        (divides#(mark(X1), X2) -> divides#(X1, X2), divides#(X1, mark(X2)) -> divides#(X1, X2))
        (divides#(X1, mark(X2)) -> divides#(X1, X2), divides#(X1, mark(X2)) -> divides#(X1, X2))
        (divides#(X1, mark(X2)) -> divides#(X1, X2), divides#(mark(X1), X2) -> divides#(X1, X2))}
       SCCS:
        Scc:
         {divides#(X1, mark(X2)) -> divides#(X1, X2),
          divides#(mark(X1), X2) -> divides#(X1, X2)}
        SCC:
         Strict:
          {divides#(X1, mark(X2)) -> divides#(X1, X2),
           divides#(mark(X1), X2) -> divides#(X1, X2)}
         Weak:
         {                     sieve(mark(X)) -> mark(sieve(X)),
                                 sieve(ok(X)) -> ok(sieve(X)),
                                from(mark(X)) -> mark(from(X)),
                                  from(ok(X)) -> ok(from(X)),
                                   s(mark(X)) -> mark(s(X)),
                                     s(ok(X)) -> ok(s(X)),
                             active(sieve(X)) -> sieve(active(X)),
                    active(sieve(cons(X, Y))) -> mark(cons(X, filter(X, sieve(Y)))),
                              active(from(X)) -> mark(cons(X, from(s(X)))),
                              active(from(X)) -> from(active(X)),
                                 active(s(X)) -> s(active(X)),
                             active(primes()) -> mark(sieve(from(s(s(0()))))),
                         active(cons(X1, X2)) -> cons(active(X1), X2),
                              active(head(X)) -> head(active(X)),
                     active(head(cons(X, Y))) -> mark(X),
                              active(tail(X)) -> tail(active(X)),
                     active(tail(cons(X, Y))) -> mark(Y),
                       active(if(X1, X2, X3)) -> if(active(X1), X2, X3),
                     active(if(true(), X, Y)) -> mark(X),
                    active(if(false(), X, Y)) -> mark(Y),
                      active(divides(X1, X2)) -> divides(X1, active(X2)),
                      active(divides(X1, X2)) -> divides(active(X1), X2),
                       active(filter(X1, X2)) -> filter(X1, active(X2)),
                       active(filter(X1, X2)) -> filter(active(X1), X2),
          active(filter(s(s(X)), cons(Y, Z))) -> mark(if(divides(s(s(X)), Y), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y))))),
                           cons(mark(X1), X2) -> mark(cons(X1, X2)),
                         cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)),
                                head(mark(X)) -> mark(head(X)),
                                  head(ok(X)) -> ok(head(X)),
                                tail(mark(X)) -> mark(tail(X)),
                                  tail(ok(X)) -> ok(tail(X)),
                         if(mark(X1), X2, X3) -> mark(if(X1, X2, X3)),
                   if(ok(X1), ok(X2), ok(X3)) -> ok(if(X1, X2, X3)),
                        divides(X1, mark(X2)) -> mark(divides(X1, X2)),
                        divides(mark(X1), X2) -> mark(divides(X1, X2)),
                      divides(ok(X1), ok(X2)) -> ok(divides(X1, X2)),
                         filter(X1, mark(X2)) -> mark(filter(X1, X2)),
                         filter(mark(X1), X2) -> mark(filter(X1, X2)),
                       filter(ok(X1), ok(X2)) -> ok(filter(X1, X2)),
                             proper(sieve(X)) -> sieve(proper(X)),
                              proper(from(X)) -> from(proper(X)),
                                 proper(s(X)) -> s(proper(X)),
                                  proper(0()) -> ok(0()),
                             proper(primes()) -> ok(primes()),
                         proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)),
                              proper(head(X)) -> head(proper(X)),
                              proper(tail(X)) -> tail(proper(X)),
                       proper(if(X1, X2, X3)) -> if(proper(X1), proper(X2), proper(X3)),
                               proper(true()) -> ok(true()),
                              proper(false()) -> ok(false()),
                      proper(divides(X1, X2)) -> divides(proper(X1), proper(X2)),
                       proper(filter(X1, X2)) -> filter(proper(X1), proper(X2)),
                                 top(mark(X)) -> top(proper(X)),
                                   top(ok(X)) -> top(active(X))}
         SPSC:
          Simple Projection:
           pi(divides#) = 0
          Strict:
           {divides#(X1, mark(X2)) -> divides#(X1, X2)}
          EDG:
           {(divides#(X1, mark(X2)) -> divides#(X1, X2), divides#(X1, mark(X2)) -> divides#(X1, X2))}
           SCCS:
            Scc:
             {divides#(X1, mark(X2)) -> divides#(X1, X2)}
            SCC:
             Strict:
              {divides#(X1, mark(X2)) -> divides#(X1, X2)}
             Weak:
             {                     sieve(mark(X)) -> mark(sieve(X)),
                                     sieve(ok(X)) -> ok(sieve(X)),
                                    from(mark(X)) -> mark(from(X)),
                                      from(ok(X)) -> ok(from(X)),
                                       s(mark(X)) -> mark(s(X)),
                                         s(ok(X)) -> ok(s(X)),
                                 active(sieve(X)) -> sieve(active(X)),
                        active(sieve(cons(X, Y))) -> mark(cons(X, filter(X, sieve(Y)))),
                                  active(from(X)) -> mark(cons(X, from(s(X)))),
                                  active(from(X)) -> from(active(X)),
                                     active(s(X)) -> s(active(X)),
                                 active(primes()) -> mark(sieve(from(s(s(0()))))),
                             active(cons(X1, X2)) -> cons(active(X1), X2),
                                  active(head(X)) -> head(active(X)),
                         active(head(cons(X, Y))) -> mark(X),
                                  active(tail(X)) -> tail(active(X)),
                         active(tail(cons(X, Y))) -> mark(Y),
                           active(if(X1, X2, X3)) -> if(active(X1), X2, X3),
                         active(if(true(), X, Y)) -> mark(X),
                        active(if(false(), X, Y)) -> mark(Y),
                          active(divides(X1, X2)) -> divides(X1, active(X2)),
                          active(divides(X1, X2)) -> divides(active(X1), X2),
                           active(filter(X1, X2)) -> filter(X1, active(X2)),
                           active(filter(X1, X2)) -> filter(active(X1), X2),
              active(filter(s(s(X)), cons(Y, Z))) -> mark(if(divides(s(s(X)), Y), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y))))),
                               cons(mark(X1), X2) -> mark(cons(X1, X2)),
                             cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)),
                                    head(mark(X)) -> mark(head(X)),
                                      head(ok(X)) -> ok(head(X)),
                                    tail(mark(X)) -> mark(tail(X)),
                                      tail(ok(X)) -> ok(tail(X)),
                             if(mark(X1), X2, X3) -> mark(if(X1, X2, X3)),
                       if(ok(X1), ok(X2), ok(X3)) -> ok(if(X1, X2, X3)),
                            divides(X1, mark(X2)) -> mark(divides(X1, X2)),
                            divides(mark(X1), X2) -> mark(divides(X1, X2)),
                          divides(ok(X1), ok(X2)) -> ok(divides(X1, X2)),
                             filter(X1, mark(X2)) -> mark(filter(X1, X2)),
                             filter(mark(X1), X2) -> mark(filter(X1, X2)),
                           filter(ok(X1), ok(X2)) -> ok(filter(X1, X2)),
                                 proper(sieve(X)) -> sieve(proper(X)),
                                  proper(from(X)) -> from(proper(X)),
                                     proper(s(X)) -> s(proper(X)),
                                      proper(0()) -> ok(0()),
                                 proper(primes()) -> ok(primes()),
                             proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)),
                                  proper(head(X)) -> head(proper(X)),
                                  proper(tail(X)) -> tail(proper(X)),
                           proper(if(X1, X2, X3)) -> if(proper(X1), proper(X2), proper(X3)),
                                   proper(true()) -> ok(true()),
                                  proper(false()) -> ok(false()),
                          proper(divides(X1, X2)) -> divides(proper(X1), proper(X2)),
                           proper(filter(X1, X2)) -> filter(proper(X1), proper(X2)),
                                     top(mark(X)) -> top(proper(X)),
                                       top(ok(X)) -> top(active(X))}
             SPSC:
              Simple Projection:
               pi(divides#) = 1
              Strict:
               {}
              Qed
    SCC:
     Strict:
      {      if#(mark(X1), X2, X3) -> if#(X1, X2, X3),
       if#(ok(X1), ok(X2), ok(X3)) -> if#(X1, X2, X3)}
     Weak:
     {                     sieve(mark(X)) -> mark(sieve(X)),
                             sieve(ok(X)) -> ok(sieve(X)),
                            from(mark(X)) -> mark(from(X)),
                              from(ok(X)) -> ok(from(X)),
                               s(mark(X)) -> mark(s(X)),
                                 s(ok(X)) -> ok(s(X)),
                         active(sieve(X)) -> sieve(active(X)),
                active(sieve(cons(X, Y))) -> mark(cons(X, filter(X, sieve(Y)))),
                          active(from(X)) -> mark(cons(X, from(s(X)))),
                          active(from(X)) -> from(active(X)),
                             active(s(X)) -> s(active(X)),
                         active(primes()) -> mark(sieve(from(s(s(0()))))),
                     active(cons(X1, X2)) -> cons(active(X1), X2),
                          active(head(X)) -> head(active(X)),
                 active(head(cons(X, Y))) -> mark(X),
                          active(tail(X)) -> tail(active(X)),
                 active(tail(cons(X, Y))) -> mark(Y),
                   active(if(X1, X2, X3)) -> if(active(X1), X2, X3),
                 active(if(true(), X, Y)) -> mark(X),
                active(if(false(), X, Y)) -> mark(Y),
                  active(divides(X1, X2)) -> divides(X1, active(X2)),
                  active(divides(X1, X2)) -> divides(active(X1), X2),
                   active(filter(X1, X2)) -> filter(X1, active(X2)),
                   active(filter(X1, X2)) -> filter(active(X1), X2),
      active(filter(s(s(X)), cons(Y, Z))) -> mark(if(divides(s(s(X)), Y), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y))))),
                       cons(mark(X1), X2) -> mark(cons(X1, X2)),
                     cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)),
                            head(mark(X)) -> mark(head(X)),
                              head(ok(X)) -> ok(head(X)),
                            tail(mark(X)) -> mark(tail(X)),
                              tail(ok(X)) -> ok(tail(X)),
                     if(mark(X1), X2, X3) -> mark(if(X1, X2, X3)),
               if(ok(X1), ok(X2), ok(X3)) -> ok(if(X1, X2, X3)),
                    divides(X1, mark(X2)) -> mark(divides(X1, X2)),
                    divides(mark(X1), X2) -> mark(divides(X1, X2)),
                  divides(ok(X1), ok(X2)) -> ok(divides(X1, X2)),
                     filter(X1, mark(X2)) -> mark(filter(X1, X2)),
                     filter(mark(X1), X2) -> mark(filter(X1, X2)),
                   filter(ok(X1), ok(X2)) -> ok(filter(X1, X2)),
                         proper(sieve(X)) -> sieve(proper(X)),
                          proper(from(X)) -> from(proper(X)),
                             proper(s(X)) -> s(proper(X)),
                              proper(0()) -> ok(0()),
                         proper(primes()) -> ok(primes()),
                     proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)),
                          proper(head(X)) -> head(proper(X)),
                          proper(tail(X)) -> tail(proper(X)),
                   proper(if(X1, X2, X3)) -> if(proper(X1), proper(X2), proper(X3)),
                           proper(true()) -> ok(true()),
                          proper(false()) -> ok(false()),
                  proper(divides(X1, X2)) -> divides(proper(X1), proper(X2)),
                   proper(filter(X1, X2)) -> filter(proper(X1), proper(X2)),
                             top(mark(X)) -> top(proper(X)),
                               top(ok(X)) -> top(active(X))}
     SPSC:
      Simple Projection:
       pi(if#) = 0
      Strict:
       {if#(mark(X1), X2, X3) -> if#(X1, X2, X3)}
      EDG:
       {(if#(mark(X1), X2, X3) -> if#(X1, X2, X3), if#(mark(X1), X2, X3) -> if#(X1, X2, X3))}
       SCCS:
        Scc:
         {if#(mark(X1), X2, X3) -> if#(X1, X2, X3)}
        SCC:
         Strict:
          {if#(mark(X1), X2, X3) -> if#(X1, X2, X3)}
         Weak:
         {                     sieve(mark(X)) -> mark(sieve(X)),
                                 sieve(ok(X)) -> ok(sieve(X)),
                                from(mark(X)) -> mark(from(X)),
                                  from(ok(X)) -> ok(from(X)),
                                   s(mark(X)) -> mark(s(X)),
                                     s(ok(X)) -> ok(s(X)),
                             active(sieve(X)) -> sieve(active(X)),
                    active(sieve(cons(X, Y))) -> mark(cons(X, filter(X, sieve(Y)))),
                              active(from(X)) -> mark(cons(X, from(s(X)))),
                              active(from(X)) -> from(active(X)),
                                 active(s(X)) -> s(active(X)),
                             active(primes()) -> mark(sieve(from(s(s(0()))))),
                         active(cons(X1, X2)) -> cons(active(X1), X2),
                              active(head(X)) -> head(active(X)),
                     active(head(cons(X, Y))) -> mark(X),
                              active(tail(X)) -> tail(active(X)),
                     active(tail(cons(X, Y))) -> mark(Y),
                       active(if(X1, X2, X3)) -> if(active(X1), X2, X3),
                     active(if(true(), X, Y)) -> mark(X),
                    active(if(false(), X, Y)) -> mark(Y),
                      active(divides(X1, X2)) -> divides(X1, active(X2)),
                      active(divides(X1, X2)) -> divides(active(X1), X2),
                       active(filter(X1, X2)) -> filter(X1, active(X2)),
                       active(filter(X1, X2)) -> filter(active(X1), X2),
          active(filter(s(s(X)), cons(Y, Z))) -> mark(if(divides(s(s(X)), Y), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y))))),
                           cons(mark(X1), X2) -> mark(cons(X1, X2)),
                         cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)),
                                head(mark(X)) -> mark(head(X)),
                                  head(ok(X)) -> ok(head(X)),
                                tail(mark(X)) -> mark(tail(X)),
                                  tail(ok(X)) -> ok(tail(X)),
                         if(mark(X1), X2, X3) -> mark(if(X1, X2, X3)),
                   if(ok(X1), ok(X2), ok(X3)) -> ok(if(X1, X2, X3)),
                        divides(X1, mark(X2)) -> mark(divides(X1, X2)),
                        divides(mark(X1), X2) -> mark(divides(X1, X2)),
                      divides(ok(X1), ok(X2)) -> ok(divides(X1, X2)),
                         filter(X1, mark(X2)) -> mark(filter(X1, X2)),
                         filter(mark(X1), X2) -> mark(filter(X1, X2)),
                       filter(ok(X1), ok(X2)) -> ok(filter(X1, X2)),
                             proper(sieve(X)) -> sieve(proper(X)),
                              proper(from(X)) -> from(proper(X)),
                                 proper(s(X)) -> s(proper(X)),
                                  proper(0()) -> ok(0()),
                             proper(primes()) -> ok(primes()),
                         proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)),
                              proper(head(X)) -> head(proper(X)),
                              proper(tail(X)) -> tail(proper(X)),
                       proper(if(X1, X2, X3)) -> if(proper(X1), proper(X2), proper(X3)),
                               proper(true()) -> ok(true()),
                              proper(false()) -> ok(false()),
                      proper(divides(X1, X2)) -> divides(proper(X1), proper(X2)),
                       proper(filter(X1, X2)) -> filter(proper(X1), proper(X2)),
                                 top(mark(X)) -> top(proper(X)),
                                   top(ok(X)) -> top(active(X))}
         SPSC:
          Simple Projection:
           pi(if#) = 0
          Strict:
           {}
          Qed
    SCC:
     Strict:
      {tail#(mark(X)) -> tail#(X),
         tail#(ok(X)) -> tail#(X)}
     Weak:
     {                     sieve(mark(X)) -> mark(sieve(X)),
                             sieve(ok(X)) -> ok(sieve(X)),
                            from(mark(X)) -> mark(from(X)),
                              from(ok(X)) -> ok(from(X)),
                               s(mark(X)) -> mark(s(X)),
                                 s(ok(X)) -> ok(s(X)),
                         active(sieve(X)) -> sieve(active(X)),
                active(sieve(cons(X, Y))) -> mark(cons(X, filter(X, sieve(Y)))),
                          active(from(X)) -> mark(cons(X, from(s(X)))),
                          active(from(X)) -> from(active(X)),
                             active(s(X)) -> s(active(X)),
                         active(primes()) -> mark(sieve(from(s(s(0()))))),
                     active(cons(X1, X2)) -> cons(active(X1), X2),
                          active(head(X)) -> head(active(X)),
                 active(head(cons(X, Y))) -> mark(X),
                          active(tail(X)) -> tail(active(X)),
                 active(tail(cons(X, Y))) -> mark(Y),
                   active(if(X1, X2, X3)) -> if(active(X1), X2, X3),
                 active(if(true(), X, Y)) -> mark(X),
                active(if(false(), X, Y)) -> mark(Y),
                  active(divides(X1, X2)) -> divides(X1, active(X2)),
                  active(divides(X1, X2)) -> divides(active(X1), X2),
                   active(filter(X1, X2)) -> filter(X1, active(X2)),
                   active(filter(X1, X2)) -> filter(active(X1), X2),
      active(filter(s(s(X)), cons(Y, Z))) -> mark(if(divides(s(s(X)), Y), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y))))),
                       cons(mark(X1), X2) -> mark(cons(X1, X2)),
                     cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)),
                            head(mark(X)) -> mark(head(X)),
                              head(ok(X)) -> ok(head(X)),
                            tail(mark(X)) -> mark(tail(X)),
                              tail(ok(X)) -> ok(tail(X)),
                     if(mark(X1), X2, X3) -> mark(if(X1, X2, X3)),
               if(ok(X1), ok(X2), ok(X3)) -> ok(if(X1, X2, X3)),
                    divides(X1, mark(X2)) -> mark(divides(X1, X2)),
                    divides(mark(X1), X2) -> mark(divides(X1, X2)),
                  divides(ok(X1), ok(X2)) -> ok(divides(X1, X2)),
                     filter(X1, mark(X2)) -> mark(filter(X1, X2)),
                     filter(mark(X1), X2) -> mark(filter(X1, X2)),
                   filter(ok(X1), ok(X2)) -> ok(filter(X1, X2)),
                         proper(sieve(X)) -> sieve(proper(X)),
                          proper(from(X)) -> from(proper(X)),
                             proper(s(X)) -> s(proper(X)),
                              proper(0()) -> ok(0()),
                         proper(primes()) -> ok(primes()),
                     proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)),
                          proper(head(X)) -> head(proper(X)),
                          proper(tail(X)) -> tail(proper(X)),
                   proper(if(X1, X2, X3)) -> if(proper(X1), proper(X2), proper(X3)),
                           proper(true()) -> ok(true()),
                          proper(false()) -> ok(false()),
                  proper(divides(X1, X2)) -> divides(proper(X1), proper(X2)),
                   proper(filter(X1, X2)) -> filter(proper(X1), proper(X2)),
                             top(mark(X)) -> top(proper(X)),
                               top(ok(X)) -> top(active(X))}
     SPSC:
      Simple Projection:
       pi(tail#) = 0
      Strict:
       {tail#(ok(X)) -> tail#(X)}
      EDG:
       {(tail#(ok(X)) -> tail#(X), tail#(ok(X)) -> tail#(X))}
       SCCS:
        Scc:
         {tail#(ok(X)) -> tail#(X)}
        SCC:
         Strict:
          {tail#(ok(X)) -> tail#(X)}
         Weak:
         {                     sieve(mark(X)) -> mark(sieve(X)),
                                 sieve(ok(X)) -> ok(sieve(X)),
                                from(mark(X)) -> mark(from(X)),
                                  from(ok(X)) -> ok(from(X)),
                                   s(mark(X)) -> mark(s(X)),
                                     s(ok(X)) -> ok(s(X)),
                             active(sieve(X)) -> sieve(active(X)),
                    active(sieve(cons(X, Y))) -> mark(cons(X, filter(X, sieve(Y)))),
                              active(from(X)) -> mark(cons(X, from(s(X)))),
                              active(from(X)) -> from(active(X)),
                                 active(s(X)) -> s(active(X)),
                             active(primes()) -> mark(sieve(from(s(s(0()))))),
                         active(cons(X1, X2)) -> cons(active(X1), X2),
                              active(head(X)) -> head(active(X)),
                     active(head(cons(X, Y))) -> mark(X),
                              active(tail(X)) -> tail(active(X)),
                     active(tail(cons(X, Y))) -> mark(Y),
                       active(if(X1, X2, X3)) -> if(active(X1), X2, X3),
                     active(if(true(), X, Y)) -> mark(X),
                    active(if(false(), X, Y)) -> mark(Y),
                      active(divides(X1, X2)) -> divides(X1, active(X2)),
                      active(divides(X1, X2)) -> divides(active(X1), X2),
                       active(filter(X1, X2)) -> filter(X1, active(X2)),
                       active(filter(X1, X2)) -> filter(active(X1), X2),
          active(filter(s(s(X)), cons(Y, Z))) -> mark(if(divides(s(s(X)), Y), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y))))),
                           cons(mark(X1), X2) -> mark(cons(X1, X2)),
                         cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)),
                                head(mark(X)) -> mark(head(X)),
                                  head(ok(X)) -> ok(head(X)),
                                tail(mark(X)) -> mark(tail(X)),
                                  tail(ok(X)) -> ok(tail(X)),
                         if(mark(X1), X2, X3) -> mark(if(X1, X2, X3)),
                   if(ok(X1), ok(X2), ok(X3)) -> ok(if(X1, X2, X3)),
                        divides(X1, mark(X2)) -> mark(divides(X1, X2)),
                        divides(mark(X1), X2) -> mark(divides(X1, X2)),
                      divides(ok(X1), ok(X2)) -> ok(divides(X1, X2)),
                         filter(X1, mark(X2)) -> mark(filter(X1, X2)),
                         filter(mark(X1), X2) -> mark(filter(X1, X2)),
                       filter(ok(X1), ok(X2)) -> ok(filter(X1, X2)),
                             proper(sieve(X)) -> sieve(proper(X)),
                              proper(from(X)) -> from(proper(X)),
                                 proper(s(X)) -> s(proper(X)),
                                  proper(0()) -> ok(0()),
                             proper(primes()) -> ok(primes()),
                         proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)),
                              proper(head(X)) -> head(proper(X)),
                              proper(tail(X)) -> tail(proper(X)),
                       proper(if(X1, X2, X3)) -> if(proper(X1), proper(X2), proper(X3)),
                               proper(true()) -> ok(true()),
                              proper(false()) -> ok(false()),
                      proper(divides(X1, X2)) -> divides(proper(X1), proper(X2)),
                       proper(filter(X1, X2)) -> filter(proper(X1), proper(X2)),
                                 top(mark(X)) -> top(proper(X)),
                                   top(ok(X)) -> top(active(X))}
         SPSC:
          Simple Projection:
           pi(tail#) = 0
          Strict:
           {}
          Qed
    SCC:
     Strict:
      {head#(mark(X)) -> head#(X),
         head#(ok(X)) -> head#(X)}
     Weak:
     {                     sieve(mark(X)) -> mark(sieve(X)),
                             sieve(ok(X)) -> ok(sieve(X)),
                            from(mark(X)) -> mark(from(X)),
                              from(ok(X)) -> ok(from(X)),
                               s(mark(X)) -> mark(s(X)),
                                 s(ok(X)) -> ok(s(X)),
                         active(sieve(X)) -> sieve(active(X)),
                active(sieve(cons(X, Y))) -> mark(cons(X, filter(X, sieve(Y)))),
                          active(from(X)) -> mark(cons(X, from(s(X)))),
                          active(from(X)) -> from(active(X)),
                             active(s(X)) -> s(active(X)),
                         active(primes()) -> mark(sieve(from(s(s(0()))))),
                     active(cons(X1, X2)) -> cons(active(X1), X2),
                          active(head(X)) -> head(active(X)),
                 active(head(cons(X, Y))) -> mark(X),
                          active(tail(X)) -> tail(active(X)),
                 active(tail(cons(X, Y))) -> mark(Y),
                   active(if(X1, X2, X3)) -> if(active(X1), X2, X3),
                 active(if(true(), X, Y)) -> mark(X),
                active(if(false(), X, Y)) -> mark(Y),
                  active(divides(X1, X2)) -> divides(X1, active(X2)),
                  active(divides(X1, X2)) -> divides(active(X1), X2),
                   active(filter(X1, X2)) -> filter(X1, active(X2)),
                   active(filter(X1, X2)) -> filter(active(X1), X2),
      active(filter(s(s(X)), cons(Y, Z))) -> mark(if(divides(s(s(X)), Y), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y))))),
                       cons(mark(X1), X2) -> mark(cons(X1, X2)),
                     cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)),
                            head(mark(X)) -> mark(head(X)),
                              head(ok(X)) -> ok(head(X)),
                            tail(mark(X)) -> mark(tail(X)),
                              tail(ok(X)) -> ok(tail(X)),
                     if(mark(X1), X2, X3) -> mark(if(X1, X2, X3)),
               if(ok(X1), ok(X2), ok(X3)) -> ok(if(X1, X2, X3)),
                    divides(X1, mark(X2)) -> mark(divides(X1, X2)),
                    divides(mark(X1), X2) -> mark(divides(X1, X2)),
                  divides(ok(X1), ok(X2)) -> ok(divides(X1, X2)),
                     filter(X1, mark(X2)) -> mark(filter(X1, X2)),
                     filter(mark(X1), X2) -> mark(filter(X1, X2)),
                   filter(ok(X1), ok(X2)) -> ok(filter(X1, X2)),
                         proper(sieve(X)) -> sieve(proper(X)),
                          proper(from(X)) -> from(proper(X)),
                             proper(s(X)) -> s(proper(X)),
                              proper(0()) -> ok(0()),
                         proper(primes()) -> ok(primes()),
                     proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)),
                          proper(head(X)) -> head(proper(X)),
                          proper(tail(X)) -> tail(proper(X)),
                   proper(if(X1, X2, X3)) -> if(proper(X1), proper(X2), proper(X3)),
                           proper(true()) -> ok(true()),
                          proper(false()) -> ok(false()),
                  proper(divides(X1, X2)) -> divides(proper(X1), proper(X2)),
                   proper(filter(X1, X2)) -> filter(proper(X1), proper(X2)),
                             top(mark(X)) -> top(proper(X)),
                               top(ok(X)) -> top(active(X))}
     SPSC:
      Simple Projection:
       pi(head#) = 0
      Strict:
       {head#(ok(X)) -> head#(X)}
      EDG:
       {(head#(ok(X)) -> head#(X), head#(ok(X)) -> head#(X))}
       SCCS:
        Scc:
         {head#(ok(X)) -> head#(X)}
        SCC:
         Strict:
          {head#(ok(X)) -> head#(X)}
         Weak:
         {                     sieve(mark(X)) -> mark(sieve(X)),
                                 sieve(ok(X)) -> ok(sieve(X)),
                                from(mark(X)) -> mark(from(X)),
                                  from(ok(X)) -> ok(from(X)),
                                   s(mark(X)) -> mark(s(X)),
                                     s(ok(X)) -> ok(s(X)),
                             active(sieve(X)) -> sieve(active(X)),
                    active(sieve(cons(X, Y))) -> mark(cons(X, filter(X, sieve(Y)))),
                              active(from(X)) -> mark(cons(X, from(s(X)))),
                              active(from(X)) -> from(active(X)),
                                 active(s(X)) -> s(active(X)),
                             active(primes()) -> mark(sieve(from(s(s(0()))))),
                         active(cons(X1, X2)) -> cons(active(X1), X2),
                              active(head(X)) -> head(active(X)),
                     active(head(cons(X, Y))) -> mark(X),
                              active(tail(X)) -> tail(active(X)),
                     active(tail(cons(X, Y))) -> mark(Y),
                       active(if(X1, X2, X3)) -> if(active(X1), X2, X3),
                     active(if(true(), X, Y)) -> mark(X),
                    active(if(false(), X, Y)) -> mark(Y),
                      active(divides(X1, X2)) -> divides(X1, active(X2)),
                      active(divides(X1, X2)) -> divides(active(X1), X2),
                       active(filter(X1, X2)) -> filter(X1, active(X2)),
                       active(filter(X1, X2)) -> filter(active(X1), X2),
          active(filter(s(s(X)), cons(Y, Z))) -> mark(if(divides(s(s(X)), Y), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y))))),
                           cons(mark(X1), X2) -> mark(cons(X1, X2)),
                         cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)),
                                head(mark(X)) -> mark(head(X)),
                                  head(ok(X)) -> ok(head(X)),
                                tail(mark(X)) -> mark(tail(X)),
                                  tail(ok(X)) -> ok(tail(X)),
                         if(mark(X1), X2, X3) -> mark(if(X1, X2, X3)),
                   if(ok(X1), ok(X2), ok(X3)) -> ok(if(X1, X2, X3)),
                        divides(X1, mark(X2)) -> mark(divides(X1, X2)),
                        divides(mark(X1), X2) -> mark(divides(X1, X2)),
                      divides(ok(X1), ok(X2)) -> ok(divides(X1, X2)),
                         filter(X1, mark(X2)) -> mark(filter(X1, X2)),
                         filter(mark(X1), X2) -> mark(filter(X1, X2)),
                       filter(ok(X1), ok(X2)) -> ok(filter(X1, X2)),
                             proper(sieve(X)) -> sieve(proper(X)),
                              proper(from(X)) -> from(proper(X)),
                                 proper(s(X)) -> s(proper(X)),
                                  proper(0()) -> ok(0()),
                             proper(primes()) -> ok(primes()),
                         proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)),
                              proper(head(X)) -> head(proper(X)),
                              proper(tail(X)) -> tail(proper(X)),
                       proper(if(X1, X2, X3)) -> if(proper(X1), proper(X2), proper(X3)),
                               proper(true()) -> ok(true()),
                              proper(false()) -> ok(false()),
                      proper(divides(X1, X2)) -> divides(proper(X1), proper(X2)),
                       proper(filter(X1, X2)) -> filter(proper(X1), proper(X2)),
                                 top(mark(X)) -> top(proper(X)),
                                   top(ok(X)) -> top(active(X))}
         SPSC:
          Simple Projection:
           pi(head#) = 0
          Strict:
           {}
          Qed
    SCC:
     Strict:
      {  cons#(mark(X1), X2) -> cons#(X1, X2),
       cons#(ok(X1), ok(X2)) -> cons#(X1, X2)}
     Weak:
     {                     sieve(mark(X)) -> mark(sieve(X)),
                             sieve(ok(X)) -> ok(sieve(X)),
                            from(mark(X)) -> mark(from(X)),
                              from(ok(X)) -> ok(from(X)),
                               s(mark(X)) -> mark(s(X)),
                                 s(ok(X)) -> ok(s(X)),
                         active(sieve(X)) -> sieve(active(X)),
                active(sieve(cons(X, Y))) -> mark(cons(X, filter(X, sieve(Y)))),
                          active(from(X)) -> mark(cons(X, from(s(X)))),
                          active(from(X)) -> from(active(X)),
                             active(s(X)) -> s(active(X)),
                         active(primes()) -> mark(sieve(from(s(s(0()))))),
                     active(cons(X1, X2)) -> cons(active(X1), X2),
                          active(head(X)) -> head(active(X)),
                 active(head(cons(X, Y))) -> mark(X),
                          active(tail(X)) -> tail(active(X)),
                 active(tail(cons(X, Y))) -> mark(Y),
                   active(if(X1, X2, X3)) -> if(active(X1), X2, X3),
                 active(if(true(), X, Y)) -> mark(X),
                active(if(false(), X, Y)) -> mark(Y),
                  active(divides(X1, X2)) -> divides(X1, active(X2)),
                  active(divides(X1, X2)) -> divides(active(X1), X2),
                   active(filter(X1, X2)) -> filter(X1, active(X2)),
                   active(filter(X1, X2)) -> filter(active(X1), X2),
      active(filter(s(s(X)), cons(Y, Z))) -> mark(if(divides(s(s(X)), Y), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y))))),
                       cons(mark(X1), X2) -> mark(cons(X1, X2)),
                     cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)),
                            head(mark(X)) -> mark(head(X)),
                              head(ok(X)) -> ok(head(X)),
                            tail(mark(X)) -> mark(tail(X)),
                              tail(ok(X)) -> ok(tail(X)),
                     if(mark(X1), X2, X3) -> mark(if(X1, X2, X3)),
               if(ok(X1), ok(X2), ok(X3)) -> ok(if(X1, X2, X3)),
                    divides(X1, mark(X2)) -> mark(divides(X1, X2)),
                    divides(mark(X1), X2) -> mark(divides(X1, X2)),
                  divides(ok(X1), ok(X2)) -> ok(divides(X1, X2)),
                     filter(X1, mark(X2)) -> mark(filter(X1, X2)),
                     filter(mark(X1), X2) -> mark(filter(X1, X2)),
                   filter(ok(X1), ok(X2)) -> ok(filter(X1, X2)),
                         proper(sieve(X)) -> sieve(proper(X)),
                          proper(from(X)) -> from(proper(X)),
                             proper(s(X)) -> s(proper(X)),
                              proper(0()) -> ok(0()),
                         proper(primes()) -> ok(primes()),
                     proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)),
                          proper(head(X)) -> head(proper(X)),
                          proper(tail(X)) -> tail(proper(X)),
                   proper(if(X1, X2, X3)) -> if(proper(X1), proper(X2), proper(X3)),
                           proper(true()) -> ok(true()),
                          proper(false()) -> ok(false()),
                  proper(divides(X1, X2)) -> divides(proper(X1), proper(X2)),
                   proper(filter(X1, X2)) -> filter(proper(X1), proper(X2)),
                             top(mark(X)) -> top(proper(X)),
                               top(ok(X)) -> top(active(X))}
     SPSC:
      Simple Projection:
       pi(cons#) = 0
      Strict:
       {cons#(mark(X1), X2) -> cons#(X1, X2)}
      EDG:
       {(cons#(mark(X1), X2) -> cons#(X1, X2), cons#(mark(X1), X2) -> cons#(X1, X2))}
       SCCS:
        Scc:
         {cons#(mark(X1), X2) -> cons#(X1, X2)}
        SCC:
         Strict:
          {cons#(mark(X1), X2) -> cons#(X1, X2)}
         Weak:
         {                     sieve(mark(X)) -> mark(sieve(X)),
                                 sieve(ok(X)) -> ok(sieve(X)),
                                from(mark(X)) -> mark(from(X)),
                                  from(ok(X)) -> ok(from(X)),
                                   s(mark(X)) -> mark(s(X)),
                                     s(ok(X)) -> ok(s(X)),
                             active(sieve(X)) -> sieve(active(X)),
                    active(sieve(cons(X, Y))) -> mark(cons(X, filter(X, sieve(Y)))),
                              active(from(X)) -> mark(cons(X, from(s(X)))),
                              active(from(X)) -> from(active(X)),
                                 active(s(X)) -> s(active(X)),
                             active(primes()) -> mark(sieve(from(s(s(0()))))),
                         active(cons(X1, X2)) -> cons(active(X1), X2),
                              active(head(X)) -> head(active(X)),
                     active(head(cons(X, Y))) -> mark(X),
                              active(tail(X)) -> tail(active(X)),
                     active(tail(cons(X, Y))) -> mark(Y),
                       active(if(X1, X2, X3)) -> if(active(X1), X2, X3),
                     active(if(true(), X, Y)) -> mark(X),
                    active(if(false(), X, Y)) -> mark(Y),
                      active(divides(X1, X2)) -> divides(X1, active(X2)),
                      active(divides(X1, X2)) -> divides(active(X1), X2),
                       active(filter(X1, X2)) -> filter(X1, active(X2)),
                       active(filter(X1, X2)) -> filter(active(X1), X2),
          active(filter(s(s(X)), cons(Y, Z))) -> mark(if(divides(s(s(X)), Y), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y))))),
                           cons(mark(X1), X2) -> mark(cons(X1, X2)),
                         cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)),
                                head(mark(X)) -> mark(head(X)),
                                  head(ok(X)) -> ok(head(X)),
                                tail(mark(X)) -> mark(tail(X)),
                                  tail(ok(X)) -> ok(tail(X)),
                         if(mark(X1), X2, X3) -> mark(if(X1, X2, X3)),
                   if(ok(X1), ok(X2), ok(X3)) -> ok(if(X1, X2, X3)),
                        divides(X1, mark(X2)) -> mark(divides(X1, X2)),
                        divides(mark(X1), X2) -> mark(divides(X1, X2)),
                      divides(ok(X1), ok(X2)) -> ok(divides(X1, X2)),
                         filter(X1, mark(X2)) -> mark(filter(X1, X2)),
                         filter(mark(X1), X2) -> mark(filter(X1, X2)),
                       filter(ok(X1), ok(X2)) -> ok(filter(X1, X2)),
                             proper(sieve(X)) -> sieve(proper(X)),
                              proper(from(X)) -> from(proper(X)),
                                 proper(s(X)) -> s(proper(X)),
                                  proper(0()) -> ok(0()),
                             proper(primes()) -> ok(primes()),
                         proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)),
                              proper(head(X)) -> head(proper(X)),
                              proper(tail(X)) -> tail(proper(X)),
                       proper(if(X1, X2, X3)) -> if(proper(X1), proper(X2), proper(X3)),
                               proper(true()) -> ok(true()),
                              proper(false()) -> ok(false()),
                      proper(divides(X1, X2)) -> divides(proper(X1), proper(X2)),
                       proper(filter(X1, X2)) -> filter(proper(X1), proper(X2)),
                                 top(mark(X)) -> top(proper(X)),
                                   top(ok(X)) -> top(active(X))}
         SPSC:
          Simple Projection:
           pi(cons#) = 0
          Strict:
           {}
          Qed
    SCC:
     Strict:
      {       active#(sieve(X)) -> active#(X),
               active#(from(X)) -> active#(X),
                  active#(s(X)) -> active#(X),
          active#(cons(X1, X2)) -> active#(X1),
               active#(head(X)) -> active#(X),
               active#(tail(X)) -> active#(X),
        active#(if(X1, X2, X3)) -> active#(X1),
       active#(divides(X1, X2)) -> active#(X1),
       active#(divides(X1, X2)) -> active#(X2),
        active#(filter(X1, X2)) -> active#(X1),
        active#(filter(X1, X2)) -> active#(X2)}
     Weak:
     {                     sieve(mark(X)) -> mark(sieve(X)),
                             sieve(ok(X)) -> ok(sieve(X)),
                            from(mark(X)) -> mark(from(X)),
                              from(ok(X)) -> ok(from(X)),
                               s(mark(X)) -> mark(s(X)),
                                 s(ok(X)) -> ok(s(X)),
                         active(sieve(X)) -> sieve(active(X)),
                active(sieve(cons(X, Y))) -> mark(cons(X, filter(X, sieve(Y)))),
                          active(from(X)) -> mark(cons(X, from(s(X)))),
                          active(from(X)) -> from(active(X)),
                             active(s(X)) -> s(active(X)),
                         active(primes()) -> mark(sieve(from(s(s(0()))))),
                     active(cons(X1, X2)) -> cons(active(X1), X2),
                          active(head(X)) -> head(active(X)),
                 active(head(cons(X, Y))) -> mark(X),
                          active(tail(X)) -> tail(active(X)),
                 active(tail(cons(X, Y))) -> mark(Y),
                   active(if(X1, X2, X3)) -> if(active(X1), X2, X3),
                 active(if(true(), X, Y)) -> mark(X),
                active(if(false(), X, Y)) -> mark(Y),
                  active(divides(X1, X2)) -> divides(X1, active(X2)),
                  active(divides(X1, X2)) -> divides(active(X1), X2),
                   active(filter(X1, X2)) -> filter(X1, active(X2)),
                   active(filter(X1, X2)) -> filter(active(X1), X2),
      active(filter(s(s(X)), cons(Y, Z))) -> mark(if(divides(s(s(X)), Y), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y))))),
                       cons(mark(X1), X2) -> mark(cons(X1, X2)),
                     cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)),
                            head(mark(X)) -> mark(head(X)),
                              head(ok(X)) -> ok(head(X)),
                            tail(mark(X)) -> mark(tail(X)),
                              tail(ok(X)) -> ok(tail(X)),
                     if(mark(X1), X2, X3) -> mark(if(X1, X2, X3)),
               if(ok(X1), ok(X2), ok(X3)) -> ok(if(X1, X2, X3)),
                    divides(X1, mark(X2)) -> mark(divides(X1, X2)),
                    divides(mark(X1), X2) -> mark(divides(X1, X2)),
                  divides(ok(X1), ok(X2)) -> ok(divides(X1, X2)),
                     filter(X1, mark(X2)) -> mark(filter(X1, X2)),
                     filter(mark(X1), X2) -> mark(filter(X1, X2)),
                   filter(ok(X1), ok(X2)) -> ok(filter(X1, X2)),
                         proper(sieve(X)) -> sieve(proper(X)),
                          proper(from(X)) -> from(proper(X)),
                             proper(s(X)) -> s(proper(X)),
                              proper(0()) -> ok(0()),
                         proper(primes()) -> ok(primes()),
                     proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)),
                          proper(head(X)) -> head(proper(X)),
                          proper(tail(X)) -> tail(proper(X)),
                   proper(if(X1, X2, X3)) -> if(proper(X1), proper(X2), proper(X3)),
                           proper(true()) -> ok(true()),
                          proper(false()) -> ok(false()),
                  proper(divides(X1, X2)) -> divides(proper(X1), proper(X2)),
                   proper(filter(X1, X2)) -> filter(proper(X1), proper(X2)),
                             top(mark(X)) -> top(proper(X)),
                               top(ok(X)) -> top(active(X))}
     SPSC:
      Simple Projection:
       pi(active#) = 0
      Strict:
       {       active#(sieve(X)) -> active#(X),
                active#(from(X)) -> active#(X),
           active#(cons(X1, X2)) -> active#(X1),
                active#(head(X)) -> active#(X),
                active#(tail(X)) -> active#(X),
         active#(if(X1, X2, X3)) -> active#(X1),
        active#(divides(X1, X2)) -> active#(X1),
        active#(divides(X1, X2)) -> active#(X2),
         active#(filter(X1, X2)) -> active#(X1),
         active#(filter(X1, X2)) -> active#(X2)}
      EDG:
       {(active#(from(X)) -> active#(X), active#(filter(X1, X2)) -> active#(X2))
        (active#(from(X)) -> active#(X), active#(filter(X1, X2)) -> active#(X1))
        (active#(from(X)) -> active#(X), active#(divides(X1, X2)) -> active#(X2))
        (active#(from(X)) -> active#(X), active#(divides(X1, X2)) -> active#(X1))
        (active#(from(X)) -> active#(X), active#(if(X1, X2, X3)) -> active#(X1))
        (active#(from(X)) -> active#(X), active#(tail(X)) -> active#(X))
        (active#(from(X)) -> active#(X), active#(head(X)) -> active#(X))
        (active#(from(X)) -> active#(X), active#(cons(X1, X2)) -> active#(X1))
        (active#(from(X)) -> active#(X), active#(from(X)) -> active#(X))
        (active#(from(X)) -> active#(X), active#(sieve(X)) -> active#(X))
        (active#(tail(X)) -> active#(X), active#(filter(X1, X2)) -> active#(X2))
        (active#(tail(X)) -> active#(X), active#(filter(X1, X2)) -> active#(X1))
        (active#(tail(X)) -> active#(X), active#(divides(X1, X2)) -> active#(X2))
        (active#(tail(X)) -> active#(X), active#(divides(X1, X2)) -> active#(X1))
        (active#(tail(X)) -> active#(X), active#(if(X1, X2, X3)) -> active#(X1))
        (active#(tail(X)) -> active#(X), active#(tail(X)) -> active#(X))
        (active#(tail(X)) -> active#(X), active#(head(X)) -> active#(X))
        (active#(tail(X)) -> active#(X), active#(cons(X1, X2)) -> active#(X1))
        (active#(tail(X)) -> active#(X), active#(from(X)) -> active#(X))
        (active#(tail(X)) -> active#(X), active#(sieve(X)) -> active#(X))
        (active#(if(X1, X2, X3)) -> active#(X1), active#(filter(X1, X2)) -> active#(X2))
        (active#(if(X1, X2, X3)) -> active#(X1), active#(filter(X1, X2)) -> active#(X1))
        (active#(if(X1, X2, X3)) -> active#(X1), active#(divides(X1, X2)) -> active#(X2))
        (active#(if(X1, X2, X3)) -> active#(X1), active#(divides(X1, X2)) -> active#(X1))
        (active#(if(X1, X2, X3)) -> active#(X1), active#(if(X1, X2, X3)) -> active#(X1))
        (active#(if(X1, X2, X3)) -> active#(X1), active#(tail(X)) -> active#(X))
        (active#(if(X1, X2, X3)) -> active#(X1), active#(head(X)) -> active#(X))
        (active#(if(X1, X2, X3)) -> active#(X1), active#(cons(X1, X2)) -> active#(X1))
        (active#(if(X1, X2, X3)) -> active#(X1), active#(from(X)) -> active#(X))
        (active#(if(X1, X2, X3)) -> active#(X1), active#(sieve(X)) -> active#(X))
        (active#(filter(X1, X2)) -> active#(X1), active#(filter(X1, X2)) -> active#(X2))
        (active#(filter(X1, X2)) -> active#(X1), active#(filter(X1, X2)) -> active#(X1))
        (active#(filter(X1, X2)) -> active#(X1), active#(divides(X1, X2)) -> active#(X2))
        (active#(filter(X1, X2)) -> active#(X1), active#(divides(X1, X2)) -> active#(X1))
        (active#(filter(X1, X2)) -> active#(X1), active#(if(X1, X2, X3)) -> active#(X1))
        (active#(filter(X1, X2)) -> active#(X1), active#(tail(X)) -> active#(X))
        (active#(filter(X1, X2)) -> active#(X1), active#(head(X)) -> active#(X))
        (active#(filter(X1, X2)) -> active#(X1), active#(cons(X1, X2)) -> active#(X1))
        (active#(filter(X1, X2)) -> active#(X1), active#(from(X)) -> active#(X))
        (active#(filter(X1, X2)) -> active#(X1), active#(sieve(X)) -> active#(X))
        (active#(filter(X1, X2)) -> active#(X2), active#(filter(X1, X2)) -> active#(X2))
        (active#(filter(X1, X2)) -> active#(X2), active#(filter(X1, X2)) -> active#(X1))
        (active#(filter(X1, X2)) -> active#(X2), active#(divides(X1, X2)) -> active#(X2))
        (active#(filter(X1, X2)) -> active#(X2), active#(divides(X1, X2)) -> active#(X1))
        (active#(filter(X1, X2)) -> active#(X2), active#(if(X1, X2, X3)) -> active#(X1))
        (active#(filter(X1, X2)) -> active#(X2), active#(tail(X)) -> active#(X))
        (active#(filter(X1, X2)) -> active#(X2), active#(head(X)) -> active#(X))
        (active#(filter(X1, X2)) -> active#(X2), active#(cons(X1, X2)) -> active#(X1))
        (active#(filter(X1, X2)) -> active#(X2), active#(from(X)) -> active#(X))
        (active#(filter(X1, X2)) -> active#(X2), active#(sieve(X)) -> active#(X))
        (active#(divides(X1, X2)) -> active#(X2), active#(sieve(X)) -> active#(X))
        (active#(divides(X1, X2)) -> active#(X2), active#(from(X)) -> active#(X))
        (active#(divides(X1, X2)) -> active#(X2), active#(cons(X1, X2)) -> active#(X1))
        (active#(divides(X1, X2)) -> active#(X2), active#(head(X)) -> active#(X))
        (active#(divides(X1, X2)) -> active#(X2), active#(tail(X)) -> active#(X))
        (active#(divides(X1, X2)) -> active#(X2), active#(if(X1, X2, X3)) -> active#(X1))
        (active#(divides(X1, X2)) -> active#(X2), active#(divides(X1, X2)) -> active#(X1))
        (active#(divides(X1, X2)) -> active#(X2), active#(divides(X1, X2)) -> active#(X2))
        (active#(divides(X1, X2)) -> active#(X2), active#(filter(X1, X2)) -> active#(X1))
        (active#(divides(X1, X2)) -> active#(X2), active#(filter(X1, X2)) -> active#(X2))
        (active#(divides(X1, X2)) -> active#(X1), active#(sieve(X)) -> active#(X))
        (active#(divides(X1, X2)) -> active#(X1), active#(from(X)) -> active#(X))
        (active#(divides(X1, X2)) -> active#(X1), active#(cons(X1, X2)) -> active#(X1))
        (active#(divides(X1, X2)) -> active#(X1), active#(head(X)) -> active#(X))
        (active#(divides(X1, X2)) -> active#(X1), active#(tail(X)) -> active#(X))
        (active#(divides(X1, X2)) -> active#(X1), active#(if(X1, X2, X3)) -> active#(X1))
        (active#(divides(X1, X2)) -> active#(X1), active#(divides(X1, X2)) -> active#(X1))
        (active#(divides(X1, X2)) -> active#(X1), active#(divides(X1, X2)) -> active#(X2))
        (active#(divides(X1, X2)) -> active#(X1), active#(filter(X1, X2)) -> active#(X1))
        (active#(divides(X1, X2)) -> active#(X1), active#(filter(X1, X2)) -> active#(X2))
        (active#(cons(X1, X2)) -> active#(X1), active#(sieve(X)) -> active#(X))
        (active#(cons(X1, X2)) -> active#(X1), active#(from(X)) -> active#(X))
        (active#(cons(X1, X2)) -> active#(X1), active#(cons(X1, X2)) -> active#(X1))
        (active#(cons(X1, X2)) -> active#(X1), active#(head(X)) -> active#(X))
        (active#(cons(X1, X2)) -> active#(X1), active#(tail(X)) -> active#(X))
        (active#(cons(X1, X2)) -> active#(X1), active#(if(X1, X2, X3)) -> active#(X1))
        (active#(cons(X1, X2)) -> active#(X1), active#(divides(X1, X2)) -> active#(X1))
        (active#(cons(X1, X2)) -> active#(X1), active#(divides(X1, X2)) -> active#(X2))
        (active#(cons(X1, X2)) -> active#(X1), active#(filter(X1, X2)) -> active#(X1))
        (active#(cons(X1, X2)) -> active#(X1), active#(filter(X1, X2)) -> active#(X2))
        (active#(head(X)) -> active#(X), active#(sieve(X)) -> active#(X))
        (active#(head(X)) -> active#(X), active#(from(X)) -> active#(X))
        (active#(head(X)) -> active#(X), active#(cons(X1, X2)) -> active#(X1))
        (active#(head(X)) -> active#(X), active#(head(X)) -> active#(X))
        (active#(head(X)) -> active#(X), active#(tail(X)) -> active#(X))
        (active#(head(X)) -> active#(X), active#(if(X1, X2, X3)) -> active#(X1))
        (active#(head(X)) -> active#(X), active#(divides(X1, X2)) -> active#(X1))
        (active#(head(X)) -> active#(X), active#(divides(X1, X2)) -> active#(X2))
        (active#(head(X)) -> active#(X), active#(filter(X1, X2)) -> active#(X1))
        (active#(head(X)) -> active#(X), active#(filter(X1, X2)) -> active#(X2))
        (active#(sieve(X)) -> active#(X), active#(sieve(X)) -> active#(X))
        (active#(sieve(X)) -> active#(X), active#(from(X)) -> active#(X))
        (active#(sieve(X)) -> active#(X), active#(cons(X1, X2)) -> active#(X1))
        (active#(sieve(X)) -> active#(X), active#(head(X)) -> active#(X))
        (active#(sieve(X)) -> active#(X), active#(tail(X)) -> active#(X))
        (active#(sieve(X)) -> active#(X), active#(if(X1, X2, X3)) -> active#(X1))
        (active#(sieve(X)) -> active#(X), active#(divides(X1, X2)) -> active#(X1))
        (active#(sieve(X)) -> active#(X), active#(divides(X1, X2)) -> active#(X2))
        (active#(sieve(X)) -> active#(X), active#(filter(X1, X2)) -> active#(X1))
        (active#(sieve(X)) -> active#(X), active#(filter(X1, X2)) -> active#(X2))}
       SCCS:
        Scc:
         {       active#(sieve(X)) -> active#(X),
                  active#(from(X)) -> active#(X),
             active#(cons(X1, X2)) -> active#(X1),
                  active#(head(X)) -> active#(X),
                  active#(tail(X)) -> active#(X),
           active#(if(X1, X2, X3)) -> active#(X1),
          active#(divides(X1, X2)) -> active#(X1),
          active#(divides(X1, X2)) -> active#(X2),
           active#(filter(X1, X2)) -> active#(X1),
           active#(filter(X1, X2)) -> active#(X2)}
        SCC:
         Strict:
          {       active#(sieve(X)) -> active#(X),
                   active#(from(X)) -> active#(X),
              active#(cons(X1, X2)) -> active#(X1),
                   active#(head(X)) -> active#(X),
                   active#(tail(X)) -> active#(X),
            active#(if(X1, X2, X3)) -> active#(X1),
           active#(divides(X1, X2)) -> active#(X1),
           active#(divides(X1, X2)) -> active#(X2),
            active#(filter(X1, X2)) -> active#(X1),
            active#(filter(X1, X2)) -> active#(X2)}
         Weak:
         {                     sieve(mark(X)) -> mark(sieve(X)),
                                 sieve(ok(X)) -> ok(sieve(X)),
                                from(mark(X)) -> mark(from(X)),
                                  from(ok(X)) -> ok(from(X)),
                                   s(mark(X)) -> mark(s(X)),
                                     s(ok(X)) -> ok(s(X)),
                             active(sieve(X)) -> sieve(active(X)),
                    active(sieve(cons(X, Y))) -> mark(cons(X, filter(X, sieve(Y)))),
                              active(from(X)) -> mark(cons(X, from(s(X)))),
                              active(from(X)) -> from(active(X)),
                                 active(s(X)) -> s(active(X)),
                             active(primes()) -> mark(sieve(from(s(s(0()))))),
                         active(cons(X1, X2)) -> cons(active(X1), X2),
                              active(head(X)) -> head(active(X)),
                     active(head(cons(X, Y))) -> mark(X),
                              active(tail(X)) -> tail(active(X)),
                     active(tail(cons(X, Y))) -> mark(Y),
                       active(if(X1, X2, X3)) -> if(active(X1), X2, X3),
                     active(if(true(), X, Y)) -> mark(X),
                    active(if(false(), X, Y)) -> mark(Y),
                      active(divides(X1, X2)) -> divides(X1, active(X2)),
                      active(divides(X1, X2)) -> divides(active(X1), X2),
                       active(filter(X1, X2)) -> filter(X1, active(X2)),
                       active(filter(X1, X2)) -> filter(active(X1), X2),
          active(filter(s(s(X)), cons(Y, Z))) -> mark(if(divides(s(s(X)), Y), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y))))),
                           cons(mark(X1), X2) -> mark(cons(X1, X2)),
                         cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)),
                                head(mark(X)) -> mark(head(X)),
                                  head(ok(X)) -> ok(head(X)),
                                tail(mark(X)) -> mark(tail(X)),
                                  tail(ok(X)) -> ok(tail(X)),
                         if(mark(X1), X2, X3) -> mark(if(X1, X2, X3)),
                   if(ok(X1), ok(X2), ok(X3)) -> ok(if(X1, X2, X3)),
                        divides(X1, mark(X2)) -> mark(divides(X1, X2)),
                        divides(mark(X1), X2) -> mark(divides(X1, X2)),
                      divides(ok(X1), ok(X2)) -> ok(divides(X1, X2)),
                         filter(X1, mark(X2)) -> mark(filter(X1, X2)),
                         filter(mark(X1), X2) -> mark(filter(X1, X2)),
                       filter(ok(X1), ok(X2)) -> ok(filter(X1, X2)),
                             proper(sieve(X)) -> sieve(proper(X)),
                              proper(from(X)) -> from(proper(X)),
                                 proper(s(X)) -> s(proper(X)),
                                  proper(0()) -> ok(0()),
                             proper(primes()) -> ok(primes()),
                         proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)),
                              proper(head(X)) -> head(proper(X)),
                              proper(tail(X)) -> tail(proper(X)),
                       proper(if(X1, X2, X3)) -> if(proper(X1), proper(X2), proper(X3)),
                               proper(true()) -> ok(true()),
                              proper(false()) -> ok(false()),
                      proper(divides(X1, X2)) -> divides(proper(X1), proper(X2)),
                       proper(filter(X1, X2)) -> filter(proper(X1), proper(X2)),
                                 top(mark(X)) -> top(proper(X)),
                                   top(ok(X)) -> top(active(X))}
         SPSC:
          Simple Projection:
           pi(active#) = 0
          Strict:
           {       active#(sieve(X)) -> active#(X),
                    active#(from(X)) -> active#(X),
               active#(cons(X1, X2)) -> active#(X1),
                    active#(head(X)) -> active#(X),
                    active#(tail(X)) -> active#(X),
            active#(divides(X1, X2)) -> active#(X1),
            active#(divides(X1, X2)) -> active#(X2),
             active#(filter(X1, X2)) -> active#(X1),
             active#(filter(X1, X2)) -> active#(X2)}
          EDG:
           {(active#(filter(X1, X2)) -> active#(X2), active#(filter(X1, X2)) -> active#(X2))
            (active#(filter(X1, X2)) -> active#(X2), active#(filter(X1, X2)) -> active#(X1))
            (active#(filter(X1, X2)) -> active#(X2), active#(divides(X1, X2)) -> active#(X2))
            (active#(filter(X1, X2)) -> active#(X2), active#(divides(X1, X2)) -> active#(X1))
            (active#(filter(X1, X2)) -> active#(X2), active#(tail(X)) -> active#(X))
            (active#(filter(X1, X2)) -> active#(X2), active#(head(X)) -> active#(X))
            (active#(filter(X1, X2)) -> active#(X2), active#(cons(X1, X2)) -> active#(X1))
            (active#(filter(X1, X2)) -> active#(X2), active#(from(X)) -> active#(X))
            (active#(filter(X1, X2)) -> active#(X2), active#(sieve(X)) -> active#(X))
            (active#(divides(X1, X2)) -> active#(X1), active#(filter(X1, X2)) -> active#(X2))
            (active#(divides(X1, X2)) -> active#(X1), active#(filter(X1, X2)) -> active#(X1))
            (active#(divides(X1, X2)) -> active#(X1), active#(divides(X1, X2)) -> active#(X2))
            (active#(divides(X1, X2)) -> active#(X1), active#(divides(X1, X2)) -> active#(X1))
            (active#(divides(X1, X2)) -> active#(X1), active#(tail(X)) -> active#(X))
            (active#(divides(X1, X2)) -> active#(X1), active#(head(X)) -> active#(X))
            (active#(divides(X1, X2)) -> active#(X1), active#(cons(X1, X2)) -> active#(X1))
            (active#(divides(X1, X2)) -> active#(X1), active#(from(X)) -> active#(X))
            (active#(divides(X1, X2)) -> active#(X1), active#(sieve(X)) -> active#(X))
            (active#(sieve(X)) -> active#(X), active#(filter(X1, X2)) -> active#(X2))
            (active#(sieve(X)) -> active#(X), active#(filter(X1, X2)) -> active#(X1))
            (active#(sieve(X)) -> active#(X), active#(divides(X1, X2)) -> active#(X2))
            (active#(sieve(X)) -> active#(X), active#(divides(X1, X2)) -> active#(X1))
            (active#(sieve(X)) -> active#(X), active#(tail(X)) -> active#(X))
            (active#(sieve(X)) -> active#(X), active#(head(X)) -> active#(X))
            (active#(sieve(X)) -> active#(X), active#(cons(X1, X2)) -> active#(X1))
            (active#(sieve(X)) -> active#(X), active#(from(X)) -> active#(X))
            (active#(sieve(X)) -> active#(X), active#(sieve(X)) -> active#(X))
            (active#(head(X)) -> active#(X), active#(filter(X1, X2)) -> active#(X2))
            (active#(head(X)) -> active#(X), active#(filter(X1, X2)) -> active#(X1))
            (active#(head(X)) -> active#(X), active#(divides(X1, X2)) -> active#(X2))
            (active#(head(X)) -> active#(X), active#(divides(X1, X2)) -> active#(X1))
            (active#(head(X)) -> active#(X), active#(tail(X)) -> active#(X))
            (active#(head(X)) -> active#(X), active#(head(X)) -> active#(X))
            (active#(head(X)) -> active#(X), active#(cons(X1, X2)) -> active#(X1))
            (active#(head(X)) -> active#(X), active#(from(X)) -> active#(X))
            (active#(head(X)) -> active#(X), active#(sieve(X)) -> active#(X))
            (active#(tail(X)) -> active#(X), active#(sieve(X)) -> active#(X))
            (active#(tail(X)) -> active#(X), active#(from(X)) -> active#(X))
            (active#(tail(X)) -> active#(X), active#(cons(X1, X2)) -> active#(X1))
            (active#(tail(X)) -> active#(X), active#(head(X)) -> active#(X))
            (active#(tail(X)) -> active#(X), active#(tail(X)) -> active#(X))
            (active#(tail(X)) -> active#(X), active#(divides(X1, X2)) -> active#(X1))
            (active#(tail(X)) -> active#(X), active#(divides(X1, X2)) -> active#(X2))
            (active#(tail(X)) -> active#(X), active#(filter(X1, X2)) -> active#(X1))
            (active#(tail(X)) -> active#(X), active#(filter(X1, X2)) -> active#(X2))
            (active#(from(X)) -> active#(X), active#(sieve(X)) -> active#(X))
            (active#(from(X)) -> active#(X), active#(from(X)) -> active#(X))
            (active#(from(X)) -> active#(X), active#(cons(X1, X2)) -> active#(X1))
            (active#(from(X)) -> active#(X), active#(head(X)) -> active#(X))
            (active#(from(X)) -> active#(X), active#(tail(X)) -> active#(X))
            (active#(from(X)) -> active#(X), active#(divides(X1, X2)) -> active#(X1))
            (active#(from(X)) -> active#(X), active#(divides(X1, X2)) -> active#(X2))
            (active#(from(X)) -> active#(X), active#(filter(X1, X2)) -> active#(X1))
            (active#(from(X)) -> active#(X), active#(filter(X1, X2)) -> active#(X2))
            (active#(filter(X1, X2)) -> active#(X1), active#(sieve(X)) -> active#(X))
            (active#(filter(X1, X2)) -> active#(X1), active#(from(X)) -> active#(X))
            (active#(filter(X1, X2)) -> active#(X1), active#(cons(X1, X2)) -> active#(X1))
            (active#(filter(X1, X2)) -> active#(X1), active#(head(X)) -> active#(X))
            (active#(filter(X1, X2)) -> active#(X1), active#(tail(X)) -> active#(X))
            (active#(filter(X1, X2)) -> active#(X1), active#(divides(X1, X2)) -> active#(X1))
            (active#(filter(X1, X2)) -> active#(X1), active#(divides(X1, X2)) -> active#(X2))
            (active#(filter(X1, X2)) -> active#(X1), active#(filter(X1, X2)) -> active#(X1))
            (active#(filter(X1, X2)) -> active#(X1), active#(filter(X1, X2)) -> active#(X2))
            (active#(cons(X1, X2)) -> active#(X1), active#(sieve(X)) -> active#(X))
            (active#(cons(X1, X2)) -> active#(X1), active#(from(X)) -> active#(X))
            (active#(cons(X1, X2)) -> active#(X1), active#(cons(X1, X2)) -> active#(X1))
            (active#(cons(X1, X2)) -> active#(X1), active#(head(X)) -> active#(X))
            (active#(cons(X1, X2)) -> active#(X1), active#(tail(X)) -> active#(X))
            (active#(cons(X1, X2)) -> active#(X1), active#(divides(X1, X2)) -> active#(X1))
            (active#(cons(X1, X2)) -> active#(X1), active#(divides(X1, X2)) -> active#(X2))
            (active#(cons(X1, X2)) -> active#(X1), active#(filter(X1, X2)) -> active#(X1))
            (active#(cons(X1, X2)) -> active#(X1), active#(filter(X1, X2)) -> active#(X2))
            (active#(divides(X1, X2)) -> active#(X2), active#(sieve(X)) -> active#(X))
            (active#(divides(X1, X2)) -> active#(X2), active#(from(X)) -> active#(X))
            (active#(divides(X1, X2)) -> active#(X2), active#(cons(X1, X2)) -> active#(X1))
            (active#(divides(X1, X2)) -> active#(X2), active#(head(X)) -> active#(X))
            (active#(divides(X1, X2)) -> active#(X2), active#(tail(X)) -> active#(X))
            (active#(divides(X1, X2)) -> active#(X2), active#(divides(X1, X2)) -> active#(X1))
            (active#(divides(X1, X2)) -> active#(X2), active#(divides(X1, X2)) -> active#(X2))
            (active#(divides(X1, X2)) -> active#(X2), active#(filter(X1, X2)) -> active#(X1))
            (active#(divides(X1, X2)) -> active#(X2), active#(filter(X1, X2)) -> active#(X2))}
           SCCS:
            Scc:
             {       active#(sieve(X)) -> active#(X),
                      active#(from(X)) -> active#(X),
                 active#(cons(X1, X2)) -> active#(X1),
                      active#(head(X)) -> active#(X),
                      active#(tail(X)) -> active#(X),
              active#(divides(X1, X2)) -> active#(X1),
              active#(divides(X1, X2)) -> active#(X2),
               active#(filter(X1, X2)) -> active#(X1),
               active#(filter(X1, X2)) -> active#(X2)}
            SCC:
             Strict:
              {       active#(sieve(X)) -> active#(X),
                       active#(from(X)) -> active#(X),
                  active#(cons(X1, X2)) -> active#(X1),
                       active#(head(X)) -> active#(X),
                       active#(tail(X)) -> active#(X),
               active#(divides(X1, X2)) -> active#(X1),
               active#(divides(X1, X2)) -> active#(X2),
                active#(filter(X1, X2)) -> active#(X1),
                active#(filter(X1, X2)) -> active#(X2)}
             Weak:
             {                     sieve(mark(X)) -> mark(sieve(X)),
                                     sieve(ok(X)) -> ok(sieve(X)),
                                    from(mark(X)) -> mark(from(X)),
                                      from(ok(X)) -> ok(from(X)),
                                       s(mark(X)) -> mark(s(X)),
                                         s(ok(X)) -> ok(s(X)),
                                 active(sieve(X)) -> sieve(active(X)),
                        active(sieve(cons(X, Y))) -> mark(cons(X, filter(X, sieve(Y)))),
                                  active(from(X)) -> mark(cons(X, from(s(X)))),
                                  active(from(X)) -> from(active(X)),
                                     active(s(X)) -> s(active(X)),
                                 active(primes()) -> mark(sieve(from(s(s(0()))))),
                             active(cons(X1, X2)) -> cons(active(X1), X2),
                                  active(head(X)) -> head(active(X)),
                         active(head(cons(X, Y))) -> mark(X),
                                  active(tail(X)) -> tail(active(X)),
                         active(tail(cons(X, Y))) -> mark(Y),
                           active(if(X1, X2, X3)) -> if(active(X1), X2, X3),
                         active(if(true(), X, Y)) -> mark(X),
                        active(if(false(), X, Y)) -> mark(Y),
                          active(divides(X1, X2)) -> divides(X1, active(X2)),
                          active(divides(X1, X2)) -> divides(active(X1), X2),
                           active(filter(X1, X2)) -> filter(X1, active(X2)),
                           active(filter(X1, X2)) -> filter(active(X1), X2),
              active(filter(s(s(X)), cons(Y, Z))) -> mark(if(divides(s(s(X)), Y), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y))))),
                               cons(mark(X1), X2) -> mark(cons(X1, X2)),
                             cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)),
                                    head(mark(X)) -> mark(head(X)),
                                      head(ok(X)) -> ok(head(X)),
                                    tail(mark(X)) -> mark(tail(X)),
                                      tail(ok(X)) -> ok(tail(X)),
                             if(mark(X1), X2, X3) -> mark(if(X1, X2, X3)),
                       if(ok(X1), ok(X2), ok(X3)) -> ok(if(X1, X2, X3)),
                            divides(X1, mark(X2)) -> mark(divides(X1, X2)),
                            divides(mark(X1), X2) -> mark(divides(X1, X2)),
                          divides(ok(X1), ok(X2)) -> ok(divides(X1, X2)),
                             filter(X1, mark(X2)) -> mark(filter(X1, X2)),
                             filter(mark(X1), X2) -> mark(filter(X1, X2)),
                           filter(ok(X1), ok(X2)) -> ok(filter(X1, X2)),
                                 proper(sieve(X)) -> sieve(proper(X)),
                                  proper(from(X)) -> from(proper(X)),
                                     proper(s(X)) -> s(proper(X)),
                                      proper(0()) -> ok(0()),
                                 proper(primes()) -> ok(primes()),
                             proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)),
                                  proper(head(X)) -> head(proper(X)),
                                  proper(tail(X)) -> tail(proper(X)),
                           proper(if(X1, X2, X3)) -> if(proper(X1), proper(X2), proper(X3)),
                                   proper(true()) -> ok(true()),
                                  proper(false()) -> ok(false()),
                          proper(divides(X1, X2)) -> divides(proper(X1), proper(X2)),
                           proper(filter(X1, X2)) -> filter(proper(X1), proper(X2)),
                                     top(mark(X)) -> top(proper(X)),
                                       top(ok(X)) -> top(active(X))}
             SPSC:
              Simple Projection:
               pi(active#) = 0
              Strict:
               {       active#(sieve(X)) -> active#(X),
                        active#(from(X)) -> active#(X),
                   active#(cons(X1, X2)) -> active#(X1),
                        active#(head(X)) -> active#(X),
                        active#(tail(X)) -> active#(X),
                active#(divides(X1, X2)) -> active#(X1),
                active#(divides(X1, X2)) -> active#(X2),
                 active#(filter(X1, X2)) -> active#(X2)}
              EDG:
               {(active#(filter(X1, X2)) -> active#(X2), active#(filter(X1, X2)) -> active#(X2))
                (active#(filter(X1, X2)) -> active#(X2), active#(divides(X1, X2)) -> active#(X2))
                (active#(filter(X1, X2)) -> active#(X2), active#(divides(X1, X2)) -> active#(X1))
                (active#(filter(X1, X2)) -> active#(X2), active#(tail(X)) -> active#(X))
                (active#(filter(X1, X2)) -> active#(X2), active#(head(X)) -> active#(X))
                (active#(filter(X1, X2)) -> active#(X2), active#(cons(X1, X2)) -> active#(X1))
                (active#(filter(X1, X2)) -> active#(X2), active#(from(X)) -> active#(X))
                (active#(filter(X1, X2)) -> active#(X2), active#(sieve(X)) -> active#(X))
                (active#(divides(X1, X2)) -> active#(X1), active#(filter(X1, X2)) -> active#(X2))
                (active#(divides(X1, X2)) -> active#(X1), active#(divides(X1, X2)) -> active#(X2))
                (active#(divides(X1, X2)) -> active#(X1), active#(divides(X1, X2)) -> active#(X1))
                (active#(divides(X1, X2)) -> active#(X1), active#(tail(X)) -> active#(X))
                (active#(divides(X1, X2)) -> active#(X1), active#(head(X)) -> active#(X))
                (active#(divides(X1, X2)) -> active#(X1), active#(cons(X1, X2)) -> active#(X1))
                (active#(divides(X1, X2)) -> active#(X1), active#(from(X)) -> active#(X))
                (active#(divides(X1, X2)) -> active#(X1), active#(sieve(X)) -> active#(X))
                (active#(from(X)) -> active#(X), active#(filter(X1, X2)) -> active#(X2))
                (active#(from(X)) -> active#(X), active#(divides(X1, X2)) -> active#(X2))
                (active#(from(X)) -> active#(X), active#(divides(X1, X2)) -> active#(X1))
                (active#(from(X)) -> active#(X), active#(tail(X)) -> active#(X))
                (active#(from(X)) -> active#(X), active#(head(X)) -> active#(X))
                (active#(from(X)) -> active#(X), active#(cons(X1, X2)) -> active#(X1))
                (active#(from(X)) -> active#(X), active#(from(X)) -> active#(X))
                (active#(from(X)) -> active#(X), active#(sieve(X)) -> active#(X))
                (active#(tail(X)) -> active#(X), active#(filter(X1, X2)) -> active#(X2))
                (active#(tail(X)) -> active#(X), active#(divides(X1, X2)) -> active#(X2))
                (active#(tail(X)) -> active#(X), active#(divides(X1, X2)) -> active#(X1))
                (active#(tail(X)) -> active#(X), active#(tail(X)) -> active#(X))
                (active#(tail(X)) -> active#(X), active#(head(X)) -> active#(X))
                (active#(tail(X)) -> active#(X), active#(cons(X1, X2)) -> active#(X1))
                (active#(tail(X)) -> active#(X), active#(from(X)) -> active#(X))
                (active#(tail(X)) -> active#(X), active#(sieve(X)) -> active#(X))
                (active#(head(X)) -> active#(X), active#(sieve(X)) -> active#(X))
                (active#(head(X)) -> active#(X), active#(from(X)) -> active#(X))
                (active#(head(X)) -> active#(X), active#(cons(X1, X2)) -> active#(X1))
                (active#(head(X)) -> active#(X), active#(head(X)) -> active#(X))
                (active#(head(X)) -> active#(X), active#(tail(X)) -> active#(X))
                (active#(head(X)) -> active#(X), active#(divides(X1, X2)) -> active#(X1))
                (active#(head(X)) -> active#(X), active#(divides(X1, X2)) -> active#(X2))
                (active#(head(X)) -> active#(X), active#(filter(X1, X2)) -> active#(X2))
                (active#(sieve(X)) -> active#(X), active#(sieve(X)) -> active#(X))
                (active#(sieve(X)) -> active#(X), active#(from(X)) -> active#(X))
                (active#(sieve(X)) -> active#(X), active#(cons(X1, X2)) -> active#(X1))
                (active#(sieve(X)) -> active#(X), active#(head(X)) -> active#(X))
                (active#(sieve(X)) -> active#(X), active#(tail(X)) -> active#(X))
                (active#(sieve(X)) -> active#(X), active#(divides(X1, X2)) -> active#(X1))
                (active#(sieve(X)) -> active#(X), active#(divides(X1, X2)) -> active#(X2))
                (active#(sieve(X)) -> active#(X), active#(filter(X1, X2)) -> active#(X2))
                (active#(cons(X1, X2)) -> active#(X1), active#(sieve(X)) -> active#(X))
                (active#(cons(X1, X2)) -> active#(X1), active#(from(X)) -> active#(X))
                (active#(cons(X1, X2)) -> active#(X1), active#(cons(X1, X2)) -> active#(X1))
                (active#(cons(X1, X2)) -> active#(X1), active#(head(X)) -> active#(X))
                (active#(cons(X1, X2)) -> active#(X1), active#(tail(X)) -> active#(X))
                (active#(cons(X1, X2)) -> active#(X1), active#(divides(X1, X2)) -> active#(X1))
                (active#(cons(X1, X2)) -> active#(X1), active#(divides(X1, X2)) -> active#(X2))
                (active#(cons(X1, X2)) -> active#(X1), active#(filter(X1, X2)) -> active#(X2))
                (active#(divides(X1, X2)) -> active#(X2), active#(sieve(X)) -> active#(X))
                (active#(divides(X1, X2)) -> active#(X2), active#(from(X)) -> active#(X))
                (active#(divides(X1, X2)) -> active#(X2), active#(cons(X1, X2)) -> active#(X1))
                (active#(divides(X1, X2)) -> active#(X2), active#(head(X)) -> active#(X))
                (active#(divides(X1, X2)) -> active#(X2), active#(tail(X)) -> active#(X))
                (active#(divides(X1, X2)) -> active#(X2), active#(divides(X1, X2)) -> active#(X1))
                (active#(divides(X1, X2)) -> active#(X2), active#(divides(X1, X2)) -> active#(X2))
                (active#(divides(X1, X2)) -> active#(X2), active#(filter(X1, X2)) -> active#(X2))}
               SCCS:
                Scc:
                 {       active#(sieve(X)) -> active#(X),
                          active#(from(X)) -> active#(X),
                     active#(cons(X1, X2)) -> active#(X1),
                          active#(head(X)) -> active#(X),
                          active#(tail(X)) -> active#(X),
                  active#(divides(X1, X2)) -> active#(X1),
                  active#(divides(X1, X2)) -> active#(X2),
                   active#(filter(X1, X2)) -> active#(X2)}
                SCC:
                 Strict:
                  {       active#(sieve(X)) -> active#(X),
                           active#(from(X)) -> active#(X),
                      active#(cons(X1, X2)) -> active#(X1),
                           active#(head(X)) -> active#(X),
                           active#(tail(X)) -> active#(X),
                   active#(divides(X1, X2)) -> active#(X1),
                   active#(divides(X1, X2)) -> active#(X2),
                    active#(filter(X1, X2)) -> active#(X2)}
                 Weak:
                 {                     sieve(mark(X)) -> mark(sieve(X)),
                                         sieve(ok(X)) -> ok(sieve(X)),
                                        from(mark(X)) -> mark(from(X)),
                                          from(ok(X)) -> ok(from(X)),
                                           s(mark(X)) -> mark(s(X)),
                                             s(ok(X)) -> ok(s(X)),
                                     active(sieve(X)) -> sieve(active(X)),
                            active(sieve(cons(X, Y))) -> mark(cons(X, filter(X, sieve(Y)))),
                                      active(from(X)) -> mark(cons(X, from(s(X)))),
                                      active(from(X)) -> from(active(X)),
                                         active(s(X)) -> s(active(X)),
                                     active(primes()) -> mark(sieve(from(s(s(0()))))),
                                 active(cons(X1, X2)) -> cons(active(X1), X2),
                                      active(head(X)) -> head(active(X)),
                             active(head(cons(X, Y))) -> mark(X),
                                      active(tail(X)) -> tail(active(X)),
                             active(tail(cons(X, Y))) -> mark(Y),
                               active(if(X1, X2, X3)) -> if(active(X1), X2, X3),
                             active(if(true(), X, Y)) -> mark(X),
                            active(if(false(), X, Y)) -> mark(Y),
                              active(divides(X1, X2)) -> divides(X1, active(X2)),
                              active(divides(X1, X2)) -> divides(active(X1), X2),
                               active(filter(X1, X2)) -> filter(X1, active(X2)),
                               active(filter(X1, X2)) -> filter(active(X1), X2),
                  active(filter(s(s(X)), cons(Y, Z))) -> mark(if(divides(s(s(X)), Y), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y))))),
                                   cons(mark(X1), X2) -> mark(cons(X1, X2)),
                                 cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)),
                                        head(mark(X)) -> mark(head(X)),
                                          head(ok(X)) -> ok(head(X)),
                                        tail(mark(X)) -> mark(tail(X)),
                                          tail(ok(X)) -> ok(tail(X)),
                                 if(mark(X1), X2, X3) -> mark(if(X1, X2, X3)),
                           if(ok(X1), ok(X2), ok(X3)) -> ok(if(X1, X2, X3)),
                                divides(X1, mark(X2)) -> mark(divides(X1, X2)),
                                divides(mark(X1), X2) -> mark(divides(X1, X2)),
                              divides(ok(X1), ok(X2)) -> ok(divides(X1, X2)),
                                 filter(X1, mark(X2)) -> mark(filter(X1, X2)),
                                 filter(mark(X1), X2) -> mark(filter(X1, X2)),
                               filter(ok(X1), ok(X2)) -> ok(filter(X1, X2)),
                                     proper(sieve(X)) -> sieve(proper(X)),
                                      proper(from(X)) -> from(proper(X)),
                                         proper(s(X)) -> s(proper(X)),
                                          proper(0()) -> ok(0()),
                                     proper(primes()) -> ok(primes()),
                                 proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)),
                                      proper(head(X)) -> head(proper(X)),
                                      proper(tail(X)) -> tail(proper(X)),
                               proper(if(X1, X2, X3)) -> if(proper(X1), proper(X2), proper(X3)),
                                       proper(true()) -> ok(true()),
                                      proper(false()) -> ok(false()),
                              proper(divides(X1, X2)) -> divides(proper(X1), proper(X2)),
                               proper(filter(X1, X2)) -> filter(proper(X1), proper(X2)),
                                         top(mark(X)) -> top(proper(X)),
                                           top(ok(X)) -> top(active(X))}
                 SPSC:
                  Simple Projection:
                   pi(active#) = 0
                  Strict:
                   {       active#(sieve(X)) -> active#(X),
                            active#(from(X)) -> active#(X),
                       active#(cons(X1, X2)) -> active#(X1),
                            active#(head(X)) -> active#(X),
                            active#(tail(X)) -> active#(X),
                    active#(divides(X1, X2)) -> active#(X1),
                    active#(divides(X1, X2)) -> active#(X2)}
                  EDG:
                   {(active#(cons(X1, X2)) -> active#(X1), active#(divides(X1, X2)) -> active#(X2))
                    (active#(cons(X1, X2)) -> active#(X1), active#(divides(X1, X2)) -> active#(X1))
                    (active#(cons(X1, X2)) -> active#(X1), active#(tail(X)) -> active#(X))
                    (active#(cons(X1, X2)) -> active#(X1), active#(head(X)) -> active#(X))
                    (active#(cons(X1, X2)) -> active#(X1), active#(cons(X1, X2)) -> active#(X1))
                    (active#(cons(X1, X2)) -> active#(X1), active#(from(X)) -> active#(X))
                    (active#(cons(X1, X2)) -> active#(X1), active#(sieve(X)) -> active#(X))
                    (active#(sieve(X)) -> active#(X), active#(divides(X1, X2)) -> active#(X2))
                    (active#(sieve(X)) -> active#(X), active#(divides(X1, X2)) -> active#(X1))
                    (active#(sieve(X)) -> active#(X), active#(tail(X)) -> active#(X))
                    (active#(sieve(X)) -> active#(X), active#(head(X)) -> active#(X))
                    (active#(sieve(X)) -> active#(X), active#(cons(X1, X2)) -> active#(X1))
                    (active#(sieve(X)) -> active#(X), active#(from(X)) -> active#(X))
                    (active#(sieve(X)) -> active#(X), active#(sieve(X)) -> active#(X))
                    (active#(head(X)) -> active#(X), active#(divides(X1, X2)) -> active#(X2))
                    (active#(head(X)) -> active#(X), active#(divides(X1, X2)) -> active#(X1))
                    (active#(head(X)) -> active#(X), active#(tail(X)) -> active#(X))
                    (active#(head(X)) -> active#(X), active#(head(X)) -> active#(X))
                    (active#(head(X)) -> active#(X), active#(cons(X1, X2)) -> active#(X1))
                    (active#(head(X)) -> active#(X), active#(from(X)) -> active#(X))
                    (active#(head(X)) -> active#(X), active#(sieve(X)) -> active#(X))
                    (active#(tail(X)) -> active#(X), active#(sieve(X)) -> active#(X))
                    (active#(tail(X)) -> active#(X), active#(from(X)) -> active#(X))
                    (active#(tail(X)) -> active#(X), active#(cons(X1, X2)) -> active#(X1))
                    (active#(tail(X)) -> active#(X), active#(head(X)) -> active#(X))
                    (active#(tail(X)) -> active#(X), active#(tail(X)) -> active#(X))
                    (active#(tail(X)) -> active#(X), active#(divides(X1, X2)) -> active#(X1))
                    (active#(tail(X)) -> active#(X), active#(divides(X1, X2)) -> active#(X2))
                    (active#(from(X)) -> active#(X), active#(sieve(X)) -> active#(X))
                    (active#(from(X)) -> active#(X), active#(from(X)) -> active#(X))
                    (active#(from(X)) -> active#(X), active#(cons(X1, X2)) -> active#(X1))
                    (active#(from(X)) -> active#(X), active#(head(X)) -> active#(X))
                    (active#(from(X)) -> active#(X), active#(tail(X)) -> active#(X))
                    (active#(from(X)) -> active#(X), active#(divides(X1, X2)) -> active#(X1))
                    (active#(from(X)) -> active#(X), active#(divides(X1, X2)) -> active#(X2))
                    (active#(divides(X1, X2)) -> active#(X1), active#(sieve(X)) -> active#(X))
                    (active#(divides(X1, X2)) -> active#(X1), active#(from(X)) -> active#(X))
                    (active#(divides(X1, X2)) -> active#(X1), active#(cons(X1, X2)) -> active#(X1))
                    (active#(divides(X1, X2)) -> active#(X1), active#(head(X)) -> active#(X))
                    (active#(divides(X1, X2)) -> active#(X1), active#(tail(X)) -> active#(X))
                    (active#(divides(X1, X2)) -> active#(X1), active#(divides(X1, X2)) -> active#(X1))
                    (active#(divides(X1, X2)) -> active#(X1), active#(divides(X1, X2)) -> active#(X2))
                    (active#(divides(X1, X2)) -> active#(X2), active#(sieve(X)) -> active#(X))
                    (active#(divides(X1, X2)) -> active#(X2), active#(from(X)) -> active#(X))
                    (active#(divides(X1, X2)) -> active#(X2), active#(cons(X1, X2)) -> active#(X1))
                    (active#(divides(X1, X2)) -> active#(X2), active#(head(X)) -> active#(X))
                    (active#(divides(X1, X2)) -> active#(X2), active#(tail(X)) -> active#(X))
                    (active#(divides(X1, X2)) -> active#(X2), active#(divides(X1, X2)) -> active#(X1))
                    (active#(divides(X1, X2)) -> active#(X2), active#(divides(X1, X2)) -> active#(X2))}
                   SCCS:
                    Scc:
                     {       active#(sieve(X)) -> active#(X),
                              active#(from(X)) -> active#(X),
                         active#(cons(X1, X2)) -> active#(X1),
                              active#(head(X)) -> active#(X),
                              active#(tail(X)) -> active#(X),
                      active#(divides(X1, X2)) -> active#(X1),
                      active#(divides(X1, X2)) -> active#(X2)}
                    SCC:
                     Strict:
                      {       active#(sieve(X)) -> active#(X),
                               active#(from(X)) -> active#(X),
                          active#(cons(X1, X2)) -> active#(X1),
                               active#(head(X)) -> active#(X),
                               active#(tail(X)) -> active#(X),
                       active#(divides(X1, X2)) -> active#(X1),
                       active#(divides(X1, X2)) -> active#(X2)}
                     Weak:
                     {                     sieve(mark(X)) -> mark(sieve(X)),
                                             sieve(ok(X)) -> ok(sieve(X)),
                                            from(mark(X)) -> mark(from(X)),
                                              from(ok(X)) -> ok(from(X)),
                                               s(mark(X)) -> mark(s(X)),
                                                 s(ok(X)) -> ok(s(X)),
                                         active(sieve(X)) -> sieve(active(X)),
                                active(sieve(cons(X, Y))) -> mark(cons(X, filter(X, sieve(Y)))),
                                          active(from(X)) -> mark(cons(X, from(s(X)))),
                                          active(from(X)) -> from(active(X)),
                                             active(s(X)) -> s(active(X)),
                                         active(primes()) -> mark(sieve(from(s(s(0()))))),
                                     active(cons(X1, X2)) -> cons(active(X1), X2),
                                          active(head(X)) -> head(active(X)),
                                 active(head(cons(X, Y))) -> mark(X),
                                          active(tail(X)) -> tail(active(X)),
                                 active(tail(cons(X, Y))) -> mark(Y),
                                   active(if(X1, X2, X3)) -> if(active(X1), X2, X3),
                                 active(if(true(), X, Y)) -> mark(X),
                                active(if(false(), X, Y)) -> mark(Y),
                                  active(divides(X1, X2)) -> divides(X1, active(X2)),
                                  active(divides(X1, X2)) -> divides(active(X1), X2),
                                   active(filter(X1, X2)) -> filter(X1, active(X2)),
                                   active(filter(X1, X2)) -> filter(active(X1), X2),
                      active(filter(s(s(X)), cons(Y, Z))) -> mark(if(divides(s(s(X)), Y), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y))))),
                                       cons(mark(X1), X2) -> mark(cons(X1, X2)),
                                     cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)),
                                            head(mark(X)) -> mark(head(X)),
                                              head(ok(X)) -> ok(head(X)),
                                            tail(mark(X)) -> mark(tail(X)),
                                              tail(ok(X)) -> ok(tail(X)),
                                     if(mark(X1), X2, X3) -> mark(if(X1, X2, X3)),
                               if(ok(X1), ok(X2), ok(X3)) -> ok(if(X1, X2, X3)),
                                    divides(X1, mark(X2)) -> mark(divides(X1, X2)),
                                    divides(mark(X1), X2) -> mark(divides(X1, X2)),
                                  divides(ok(X1), ok(X2)) -> ok(divides(X1, X2)),
                                     filter(X1, mark(X2)) -> mark(filter(X1, X2)),
                                     filter(mark(X1), X2) -> mark(filter(X1, X2)),
                                   filter(ok(X1), ok(X2)) -> ok(filter(X1, X2)),
                                         proper(sieve(X)) -> sieve(proper(X)),
                                          proper(from(X)) -> from(proper(X)),
                                             proper(s(X)) -> s(proper(X)),
                                              proper(0()) -> ok(0()),
                                         proper(primes()) -> ok(primes()),
                                     proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)),
                                          proper(head(X)) -> head(proper(X)),
                                          proper(tail(X)) -> tail(proper(X)),
                                   proper(if(X1, X2, X3)) -> if(proper(X1), proper(X2), proper(X3)),
                                           proper(true()) -> ok(true()),
                                          proper(false()) -> ok(false()),
                                  proper(divides(X1, X2)) -> divides(proper(X1), proper(X2)),
                                   proper(filter(X1, X2)) -> filter(proper(X1), proper(X2)),
                                             top(mark(X)) -> top(proper(X)),
                                               top(ok(X)) -> top(active(X))}
                     SPSC:
                      Simple Projection:
                       pi(active#) = 0
                      Strict:
                       {       active#(sieve(X)) -> active#(X),
                                active#(from(X)) -> active#(X),
                           active#(cons(X1, X2)) -> active#(X1),
                                active#(head(X)) -> active#(X),
                                active#(tail(X)) -> active#(X),
                        active#(divides(X1, X2)) -> active#(X2)}
                      EDG:
                       {(active#(sieve(X)) -> active#(X), active#(divides(X1, X2)) -> active#(X2))
                        (active#(sieve(X)) -> active#(X), active#(tail(X)) -> active#(X))
                        (active#(sieve(X)) -> active#(X), active#(head(X)) -> active#(X))
                        (active#(sieve(X)) -> active#(X), active#(cons(X1, X2)) -> active#(X1))
                        (active#(sieve(X)) -> active#(X), active#(from(X)) -> active#(X))
                        (active#(sieve(X)) -> active#(X), active#(sieve(X)) -> active#(X))
                        (active#(head(X)) -> active#(X), active#(divides(X1, X2)) -> active#(X2))
                        (active#(head(X)) -> active#(X), active#(tail(X)) -> active#(X))
                        (active#(head(X)) -> active#(X), active#(head(X)) -> active#(X))
                        (active#(head(X)) -> active#(X), active#(cons(X1, X2)) -> active#(X1))
                        (active#(head(X)) -> active#(X), active#(from(X)) -> active#(X))
                        (active#(head(X)) -> active#(X), active#(sieve(X)) -> active#(X))
                        (active#(cons(X1, X2)) -> active#(X1), active#(divides(X1, X2)) -> active#(X2))
                        (active#(cons(X1, X2)) -> active#(X1), active#(tail(X)) -> active#(X))
                        (active#(cons(X1, X2)) -> active#(X1), active#(head(X)) -> active#(X))
                        (active#(cons(X1, X2)) -> active#(X1), active#(cons(X1, X2)) -> active#(X1))
                        (active#(cons(X1, X2)) -> active#(X1), active#(from(X)) -> active#(X))
                        (active#(cons(X1, X2)) -> active#(X1), active#(sieve(X)) -> active#(X))
                        (active#(tail(X)) -> active#(X), active#(sieve(X)) -> active#(X))
                        (active#(tail(X)) -> active#(X), active#(from(X)) -> active#(X))
                        (active#(tail(X)) -> active#(X), active#(cons(X1, X2)) -> active#(X1))
                        (active#(tail(X)) -> active#(X), active#(head(X)) -> active#(X))
                        (active#(tail(X)) -> active#(X), active#(tail(X)) -> active#(X))
                        (active#(tail(X)) -> active#(X), active#(divides(X1, X2)) -> active#(X2))
                        (active#(from(X)) -> active#(X), active#(sieve(X)) -> active#(X))
                        (active#(from(X)) -> active#(X), active#(from(X)) -> active#(X))
                        (active#(from(X)) -> active#(X), active#(cons(X1, X2)) -> active#(X1))
                        (active#(from(X)) -> active#(X), active#(head(X)) -> active#(X))
                        (active#(from(X)) -> active#(X), active#(tail(X)) -> active#(X))
                        (active#(from(X)) -> active#(X), active#(divides(X1, X2)) -> active#(X2))
                        (active#(divides(X1, X2)) -> active#(X2), active#(sieve(X)) -> active#(X))
                        (active#(divides(X1, X2)) -> active#(X2), active#(from(X)) -> active#(X))
                        (active#(divides(X1, X2)) -> active#(X2), active#(cons(X1, X2)) -> active#(X1))
                        (active#(divides(X1, X2)) -> active#(X2), active#(head(X)) -> active#(X))
                        (active#(divides(X1, X2)) -> active#(X2), active#(tail(X)) -> active#(X))
                        (active#(divides(X1, X2)) -> active#(X2), active#(divides(X1, X2)) -> active#(X2))}
                       SCCS:
                        Scc:
                         {       active#(sieve(X)) -> active#(X),
                                  active#(from(X)) -> active#(X),
                             active#(cons(X1, X2)) -> active#(X1),
                                  active#(head(X)) -> active#(X),
                                  active#(tail(X)) -> active#(X),
                          active#(divides(X1, X2)) -> active#(X2)}
                        SCC:
                         Strict:
                          {       active#(sieve(X)) -> active#(X),
                                   active#(from(X)) -> active#(X),
                              active#(cons(X1, X2)) -> active#(X1),
                                   active#(head(X)) -> active#(X),
                                   active#(tail(X)) -> active#(X),
                           active#(divides(X1, X2)) -> active#(X2)}
                         Weak:
                         {                     sieve(mark(X)) -> mark(sieve(X)),
                                                 sieve(ok(X)) -> ok(sieve(X)),
                                                from(mark(X)) -> mark(from(X)),
                                                  from(ok(X)) -> ok(from(X)),
                                                   s(mark(X)) -> mark(s(X)),
                                                     s(ok(X)) -> ok(s(X)),
                                             active(sieve(X)) -> sieve(active(X)),
                                    active(sieve(cons(X, Y))) -> mark(cons(X, filter(X, sieve(Y)))),
                                              active(from(X)) -> mark(cons(X, from(s(X)))),
                                              active(from(X)) -> from(active(X)),
                                                 active(s(X)) -> s(active(X)),
                                             active(primes()) -> mark(sieve(from(s(s(0()))))),
                                         active(cons(X1, X2)) -> cons(active(X1), X2),
                                              active(head(X)) -> head(active(X)),
                                     active(head(cons(X, Y))) -> mark(X),
                                              active(tail(X)) -> tail(active(X)),
                                     active(tail(cons(X, Y))) -> mark(Y),
                                       active(if(X1, X2, X3)) -> if(active(X1), X2, X3),
                                     active(if(true(), X, Y)) -> mark(X),
                                    active(if(false(), X, Y)) -> mark(Y),
                                      active(divides(X1, X2)) -> divides(X1, active(X2)),
                                      active(divides(X1, X2)) -> divides(active(X1), X2),
                                       active(filter(X1, X2)) -> filter(X1, active(X2)),
                                       active(filter(X1, X2)) -> filter(active(X1), X2),
                          active(filter(s(s(X)), cons(Y, Z))) -> mark(if(divides(s(s(X)), Y), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y))))),
                                           cons(mark(X1), X2) -> mark(cons(X1, X2)),
                                         cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)),
                                                head(mark(X)) -> mark(head(X)),
                                                  head(ok(X)) -> ok(head(X)),
                                                tail(mark(X)) -> mark(tail(X)),
                                                  tail(ok(X)) -> ok(tail(X)),
                                         if(mark(X1), X2, X3) -> mark(if(X1, X2, X3)),
                                   if(ok(X1), ok(X2), ok(X3)) -> ok(if(X1, X2, X3)),
                                        divides(X1, mark(X2)) -> mark(divides(X1, X2)),
                                        divides(mark(X1), X2) -> mark(divides(X1, X2)),
                                      divides(ok(X1), ok(X2)) -> ok(divides(X1, X2)),
                                         filter(X1, mark(X2)) -> mark(filter(X1, X2)),
                                         filter(mark(X1), X2) -> mark(filter(X1, X2)),
                                       filter(ok(X1), ok(X2)) -> ok(filter(X1, X2)),
                                             proper(sieve(X)) -> sieve(proper(X)),
                                              proper(from(X)) -> from(proper(X)),
                                                 proper(s(X)) -> s(proper(X)),
                                                  proper(0()) -> ok(0()),
                                             proper(primes()) -> ok(primes()),
                                         proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)),
                                              proper(head(X)) -> head(proper(X)),
                                              proper(tail(X)) -> tail(proper(X)),
                                       proper(if(X1, X2, X3)) -> if(proper(X1), proper(X2), proper(X3)),
                                               proper(true()) -> ok(true()),
                                              proper(false()) -> ok(false()),
                                      proper(divides(X1, X2)) -> divides(proper(X1), proper(X2)),
                                       proper(filter(X1, X2)) -> filter(proper(X1), proper(X2)),
                                                 top(mark(X)) -> top(proper(X)),
                                                   top(ok(X)) -> top(active(X))}
                         SPSC:
                          Simple Projection:
                           pi(active#) = 0
                          Strict:
                           {       active#(sieve(X)) -> active#(X),
                                    active#(from(X)) -> active#(X),
                               active#(cons(X1, X2)) -> active#(X1),
                                    active#(head(X)) -> active#(X),
                            active#(divides(X1, X2)) -> active#(X2)}
                          EDG:
                           {(active#(from(X)) -> active#(X), active#(divides(X1, X2)) -> active#(X2))
                            (active#(from(X)) -> active#(X), active#(head(X)) -> active#(X))
                            (active#(from(X)) -> active#(X), active#(cons(X1, X2)) -> active#(X1))
                            (active#(from(X)) -> active#(X), active#(from(X)) -> active#(X))
                            (active#(from(X)) -> active#(X), active#(sieve(X)) -> active#(X))
                            (active#(cons(X1, X2)) -> active#(X1), active#(divides(X1, X2)) -> active#(X2))
                            (active#(cons(X1, X2)) -> active#(X1), active#(head(X)) -> active#(X))
                            (active#(cons(X1, X2)) -> active#(X1), active#(cons(X1, X2)) -> active#(X1))
                            (active#(cons(X1, X2)) -> active#(X1), active#(from(X)) -> active#(X))
                            (active#(cons(X1, X2)) -> active#(X1), active#(sieve(X)) -> active#(X))
                            (active#(divides(X1, X2)) -> active#(X2), active#(sieve(X)) -> active#(X))
                            (active#(divides(X1, X2)) -> active#(X2), active#(from(X)) -> active#(X))
                            (active#(divides(X1, X2)) -> active#(X2), active#(cons(X1, X2)) -> active#(X1))
                            (active#(divides(X1, X2)) -> active#(X2), active#(head(X)) -> active#(X))
                            (active#(divides(X1, X2)) -> active#(X2), active#(divides(X1, X2)) -> active#(X2))
                            (active#(head(X)) -> active#(X), active#(sieve(X)) -> active#(X))
                            (active#(head(X)) -> active#(X), active#(from(X)) -> active#(X))
                            (active#(head(X)) -> active#(X), active#(cons(X1, X2)) -> active#(X1))
                            (active#(head(X)) -> active#(X), active#(head(X)) -> active#(X))
                            (active#(head(X)) -> active#(X), active#(divides(X1, X2)) -> active#(X2))
                            (active#(sieve(X)) -> active#(X), active#(sieve(X)) -> active#(X))
                            (active#(sieve(X)) -> active#(X), active#(from(X)) -> active#(X))
                            (active#(sieve(X)) -> active#(X), active#(cons(X1, X2)) -> active#(X1))
                            (active#(sieve(X)) -> active#(X), active#(head(X)) -> active#(X))
                            (active#(sieve(X)) -> active#(X), active#(divides(X1, X2)) -> active#(X2))}
                           SCCS:
                            Scc:
                             {       active#(sieve(X)) -> active#(X),
                                      active#(from(X)) -> active#(X),
                                 active#(cons(X1, X2)) -> active#(X1),
                                      active#(head(X)) -> active#(X),
                              active#(divides(X1, X2)) -> active#(X2)}
                            SCC:
                             Strict:
                              {       active#(sieve(X)) -> active#(X),
                                       active#(from(X)) -> active#(X),
                                  active#(cons(X1, X2)) -> active#(X1),
                                       active#(head(X)) -> active#(X),
                               active#(divides(X1, X2)) -> active#(X2)}
                             Weak:
                             {                     sieve(mark(X)) -> mark(sieve(X)),
                                                     sieve(ok(X)) -> ok(sieve(X)),
                                                    from(mark(X)) -> mark(from(X)),
                                                      from(ok(X)) -> ok(from(X)),
                                                       s(mark(X)) -> mark(s(X)),
                                                         s(ok(X)) -> ok(s(X)),
                                                 active(sieve(X)) -> sieve(active(X)),
                                        active(sieve(cons(X, Y))) -> mark(cons(X, filter(X, sieve(Y)))),
                                                  active(from(X)) -> mark(cons(X, from(s(X)))),
                                                  active(from(X)) -> from(active(X)),
                                                     active(s(X)) -> s(active(X)),
                                                 active(primes()) -> mark(sieve(from(s(s(0()))))),
                                             active(cons(X1, X2)) -> cons(active(X1), X2),
                                                  active(head(X)) -> head(active(X)),
                                         active(head(cons(X, Y))) -> mark(X),
                                                  active(tail(X)) -> tail(active(X)),
                                         active(tail(cons(X, Y))) -> mark(Y),
                                           active(if(X1, X2, X3)) -> if(active(X1), X2, X3),
                                         active(if(true(), X, Y)) -> mark(X),
                                        active(if(false(), X, Y)) -> mark(Y),
                                          active(divides(X1, X2)) -> divides(X1, active(X2)),
                                          active(divides(X1, X2)) -> divides(active(X1), X2),
                                           active(filter(X1, X2)) -> filter(X1, active(X2)),
                                           active(filter(X1, X2)) -> filter(active(X1), X2),
                              active(filter(s(s(X)), cons(Y, Z))) -> mark(if(divides(s(s(X)), Y), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y))))),
                                               cons(mark(X1), X2) -> mark(cons(X1, X2)),
                                             cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)),
                                                    head(mark(X)) -> mark(head(X)),
                                                      head(ok(X)) -> ok(head(X)),
                                                    tail(mark(X)) -> mark(tail(X)),
                                                      tail(ok(X)) -> ok(tail(X)),
                                             if(mark(X1), X2, X3) -> mark(if(X1, X2, X3)),
                                       if(ok(X1), ok(X2), ok(X3)) -> ok(if(X1, X2, X3)),
                                            divides(X1, mark(X2)) -> mark(divides(X1, X2)),
                                            divides(mark(X1), X2) -> mark(divides(X1, X2)),
                                          divides(ok(X1), ok(X2)) -> ok(divides(X1, X2)),
                                             filter(X1, mark(X2)) -> mark(filter(X1, X2)),
                                             filter(mark(X1), X2) -> mark(filter(X1, X2)),
                                           filter(ok(X1), ok(X2)) -> ok(filter(X1, X2)),
                                                 proper(sieve(X)) -> sieve(proper(X)),
                                                  proper(from(X)) -> from(proper(X)),
                                                     proper(s(X)) -> s(proper(X)),
                                                      proper(0()) -> ok(0()),
                                                 proper(primes()) -> ok(primes()),
                                             proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)),
                                                  proper(head(X)) -> head(proper(X)),
                                                  proper(tail(X)) -> tail(proper(X)),
                                           proper(if(X1, X2, X3)) -> if(proper(X1), proper(X2), proper(X3)),
                                                   proper(true()) -> ok(true()),
                                                  proper(false()) -> ok(false()),
                                          proper(divides(X1, X2)) -> divides(proper(X1), proper(X2)),
                                           proper(filter(X1, X2)) -> filter(proper(X1), proper(X2)),
                                                     top(mark(X)) -> top(proper(X)),
                                                       top(ok(X)) -> top(active(X))}
                             SPSC:
                              Simple Projection:
                               pi(active#) = 0
                              Strict:
                               {       active#(sieve(X)) -> active#(X),
                                        active#(from(X)) -> active#(X),
                                   active#(cons(X1, X2)) -> active#(X1),
                                active#(divides(X1, X2)) -> active#(X2)}
                              EDG:
                               {(active#(sieve(X)) -> active#(X), active#(divides(X1, X2)) -> active#(X2))
                                (active#(sieve(X)) -> active#(X), active#(cons(X1, X2)) -> active#(X1))
                                (active#(sieve(X)) -> active#(X), active#(from(X)) -> active#(X))
                                (active#(sieve(X)) -> active#(X), active#(sieve(X)) -> active#(X))
                                (active#(cons(X1, X2)) -> active#(X1), active#(divides(X1, X2)) -> active#(X2))
                                (active#(cons(X1, X2)) -> active#(X1), active#(cons(X1, X2)) -> active#(X1))
                                (active#(cons(X1, X2)) -> active#(X1), active#(from(X)) -> active#(X))
                                (active#(cons(X1, X2)) -> active#(X1), active#(sieve(X)) -> active#(X))
                                (active#(from(X)) -> active#(X), active#(sieve(X)) -> active#(X))
                                (active#(from(X)) -> active#(X), active#(from(X)) -> active#(X))
                                (active#(from(X)) -> active#(X), active#(cons(X1, X2)) -> active#(X1))
                                (active#(from(X)) -> active#(X), active#(divides(X1, X2)) -> active#(X2))
                                (active#(divides(X1, X2)) -> active#(X2), active#(sieve(X)) -> active#(X))
                                (active#(divides(X1, X2)) -> active#(X2), active#(from(X)) -> active#(X))
                                (active#(divides(X1, X2)) -> active#(X2), active#(cons(X1, X2)) -> active#(X1))
                                (active#(divides(X1, X2)) -> active#(X2), active#(divides(X1, X2)) -> active#(X2))}
                               SCCS:
                                Scc:
                                 {       active#(sieve(X)) -> active#(X),
                                          active#(from(X)) -> active#(X),
                                     active#(cons(X1, X2)) -> active#(X1),
                                  active#(divides(X1, X2)) -> active#(X2)}
                                SCC:
                                 Strict:
                                  {       active#(sieve(X)) -> active#(X),
                                           active#(from(X)) -> active#(X),
                                      active#(cons(X1, X2)) -> active#(X1),
                                   active#(divides(X1, X2)) -> active#(X2)}
                                 Weak:
                                 {                     sieve(mark(X)) -> mark(sieve(X)),
                                                         sieve(ok(X)) -> ok(sieve(X)),
                                                        from(mark(X)) -> mark(from(X)),
                                                          from(ok(X)) -> ok(from(X)),
                                                           s(mark(X)) -> mark(s(X)),
                                                             s(ok(X)) -> ok(s(X)),
                                                     active(sieve(X)) -> sieve(active(X)),
                                            active(sieve(cons(X, Y))) -> mark(cons(X, filter(X, sieve(Y)))),
                                                      active(from(X)) -> mark(cons(X, from(s(X)))),
                                                      active(from(X)) -> from(active(X)),
                                                         active(s(X)) -> s(active(X)),
                                                     active(primes()) -> mark(sieve(from(s(s(0()))))),
                                                 active(cons(X1, X2)) -> cons(active(X1), X2),
                                                      active(head(X)) -> head(active(X)),
                                             active(head(cons(X, Y))) -> mark(X),
                                                      active(tail(X)) -> tail(active(X)),
                                             active(tail(cons(X, Y))) -> mark(Y),
                                               active(if(X1, X2, X3)) -> if(active(X1), X2, X3),
                                             active(if(true(), X, Y)) -> mark(X),
                                            active(if(false(), X, Y)) -> mark(Y),
                                              active(divides(X1, X2)) -> divides(X1, active(X2)),
                                              active(divides(X1, X2)) -> divides(active(X1), X2),
                                               active(filter(X1, X2)) -> filter(X1, active(X2)),
                                               active(filter(X1, X2)) -> filter(active(X1), X2),
                                  active(filter(s(s(X)), cons(Y, Z))) -> mark(if(divides(s(s(X)), Y), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y))))),
                                                   cons(mark(X1), X2) -> mark(cons(X1, X2)),
                                                 cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)),
                                                        head(mark(X)) -> mark(head(X)),
                                                          head(ok(X)) -> ok(head(X)),
                                                        tail(mark(X)) -> mark(tail(X)),
                                                          tail(ok(X)) -> ok(tail(X)),
                                                 if(mark(X1), X2, X3) -> mark(if(X1, X2, X3)),
                                           if(ok(X1), ok(X2), ok(X3)) -> ok(if(X1, X2, X3)),
                                                divides(X1, mark(X2)) -> mark(divides(X1, X2)),
                                                divides(mark(X1), X2) -> mark(divides(X1, X2)),
                                              divides(ok(X1), ok(X2)) -> ok(divides(X1, X2)),
                                                 filter(X1, mark(X2)) -> mark(filter(X1, X2)),
                                                 filter(mark(X1), X2) -> mark(filter(X1, X2)),
                                               filter(ok(X1), ok(X2)) -> ok(filter(X1, X2)),
                                                     proper(sieve(X)) -> sieve(proper(X)),
                                                      proper(from(X)) -> from(proper(X)),
                                                         proper(s(X)) -> s(proper(X)),
                                                          proper(0()) -> ok(0()),
                                                     proper(primes()) -> ok(primes()),
                                                 proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)),
                                                      proper(head(X)) -> head(proper(X)),
                                                      proper(tail(X)) -> tail(proper(X)),
                                               proper(if(X1, X2, X3)) -> if(proper(X1), proper(X2), proper(X3)),
                                                       proper(true()) -> ok(true()),
                                                      proper(false()) -> ok(false()),
                                              proper(divides(X1, X2)) -> divides(proper(X1), proper(X2)),
                                               proper(filter(X1, X2)) -> filter(proper(X1), proper(X2)),
                                                         top(mark(X)) -> top(proper(X)),
                                                           top(ok(X)) -> top(active(X))}
                                 SPSC:
                                  Simple Projection:
                                   pi(active#) = 0
                                  Strict:
                                   {       active#(sieve(X)) -> active#(X),
                                            active#(from(X)) -> active#(X),
                                    active#(divides(X1, X2)) -> active#(X2)}
                                  EDG:
                                   {(active#(sieve(X)) -> active#(X), active#(divides(X1, X2)) -> active#(X2))
                                    (active#(sieve(X)) -> active#(X), active#(from(X)) -> active#(X))
                                    (active#(sieve(X)) -> active#(X), active#(sieve(X)) -> active#(X))
                                    (active#(from(X)) -> active#(X), active#(sieve(X)) -> active#(X))
                                    (active#(from(X)) -> active#(X), active#(from(X)) -> active#(X))
                                    (active#(from(X)) -> active#(X), active#(divides(X1, X2)) -> active#(X2))
                                    (active#(divides(X1, X2)) -> active#(X2), active#(sieve(X)) -> active#(X))
                                    (active#(divides(X1, X2)) -> active#(X2), active#(from(X)) -> active#(X))
                                    (active#(divides(X1, X2)) -> active#(X2), active#(divides(X1, X2)) -> active#(X2))}
                                   SCCS:
                                    Scc:
                                     {       active#(sieve(X)) -> active#(X),
                                              active#(from(X)) -> active#(X),
                                      active#(divides(X1, X2)) -> active#(X2)}
                                    SCC:
                                     Strict:
                                      {       active#(sieve(X)) -> active#(X),
                                               active#(from(X)) -> active#(X),
                                       active#(divides(X1, X2)) -> active#(X2)}
                                     Weak:
                                     {                     sieve(mark(X)) -> mark(sieve(X)),
                                                             sieve(ok(X)) -> ok(sieve(X)),
                                                            from(mark(X)) -> mark(from(X)),
                                                              from(ok(X)) -> ok(from(X)),
                                                               s(mark(X)) -> mark(s(X)),
                                                                 s(ok(X)) -> ok(s(X)),
                                                         active(sieve(X)) -> sieve(active(X)),
                                                active(sieve(cons(X, Y))) -> mark(cons(X, filter(X, sieve(Y)))),
                                                          active(from(X)) -> mark(cons(X, from(s(X)))),
                                                          active(from(X)) -> from(active(X)),
                                                             active(s(X)) -> s(active(X)),
                                                         active(primes()) -> mark(sieve(from(s(s(0()))))),
                                                     active(cons(X1, X2)) -> cons(active(X1), X2),
                                                          active(head(X)) -> head(active(X)),
                                                 active(head(cons(X, Y))) -> mark(X),
                                                          active(tail(X)) -> tail(active(X)),
                                                 active(tail(cons(X, Y))) -> mark(Y),
                                                   active(if(X1, X2, X3)) -> if(active(X1), X2, X3),
                                                 active(if(true(), X, Y)) -> mark(X),
                                                active(if(false(), X, Y)) -> mark(Y),
                                                  active(divides(X1, X2)) -> divides(X1, active(X2)),
                                                  active(divides(X1, X2)) -> divides(active(X1), X2),
                                                   active(filter(X1, X2)) -> filter(X1, active(X2)),
                                                   active(filter(X1, X2)) -> filter(active(X1), X2),
                                      active(filter(s(s(X)), cons(Y, Z))) -> mark(if(divides(s(s(X)), Y), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y))))),
                                                       cons(mark(X1), X2) -> mark(cons(X1, X2)),
                                                     cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)),
                                                            head(mark(X)) -> mark(head(X)),
                                                              head(ok(X)) -> ok(head(X)),
                                                            tail(mark(X)) -> mark(tail(X)),
                                                              tail(ok(X)) -> ok(tail(X)),
                                                     if(mark(X1), X2, X3) -> mark(if(X1, X2, X3)),
                                               if(ok(X1), ok(X2), ok(X3)) -> ok(if(X1, X2, X3)),
                                                    divides(X1, mark(X2)) -> mark(divides(X1, X2)),
                                                    divides(mark(X1), X2) -> mark(divides(X1, X2)),
                                                  divides(ok(X1), ok(X2)) -> ok(divides(X1, X2)),
                                                     filter(X1, mark(X2)) -> mark(filter(X1, X2)),
                                                     filter(mark(X1), X2) -> mark(filter(X1, X2)),
                                                   filter(ok(X1), ok(X2)) -> ok(filter(X1, X2)),
                                                         proper(sieve(X)) -> sieve(proper(X)),
                                                          proper(from(X)) -> from(proper(X)),
                                                             proper(s(X)) -> s(proper(X)),
                                                              proper(0()) -> ok(0()),
                                                         proper(primes()) -> ok(primes()),
                                                     proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)),
                                                          proper(head(X)) -> head(proper(X)),
                                                          proper(tail(X)) -> tail(proper(X)),
                                                   proper(if(X1, X2, X3)) -> if(proper(X1), proper(X2), proper(X3)),
                                                           proper(true()) -> ok(true()),
                                                          proper(false()) -> ok(false()),
                                                  proper(divides(X1, X2)) -> divides(proper(X1), proper(X2)),
                                                   proper(filter(X1, X2)) -> filter(proper(X1), proper(X2)),
                                                             top(mark(X)) -> top(proper(X)),
                                                               top(ok(X)) -> top(active(X))}
                                     SPSC:
                                      Simple Projection:
                                       pi(active#) = 0
                                      Strict:
                                       {       active#(sieve(X)) -> active#(X),
                                        active#(divides(X1, X2)) -> active#(X2)}
                                      EDG:
                                       {(active#(divides(X1, X2)) -> active#(X2), active#(divides(X1, X2)) -> active#(X2))
                                        (active#(divides(X1, X2)) -> active#(X2), active#(sieve(X)) -> active#(X))
                                        (active#(sieve(X)) -> active#(X), active#(sieve(X)) -> active#(X))
                                        (active#(sieve(X)) -> active#(X), active#(divides(X1, X2)) -> active#(X2))}
                                       SCCS:
                                        Scc:
                                         {       active#(sieve(X)) -> active#(X),
                                          active#(divides(X1, X2)) -> active#(X2)}
                                        SCC:
                                         Strict:
                                          {       active#(sieve(X)) -> active#(X),
                                           active#(divides(X1, X2)) -> active#(X2)}
                                         Weak:
                                         {                     sieve(mark(X)) -> mark(sieve(X)),
                                                                 sieve(ok(X)) -> ok(sieve(X)),
                                                                from(mark(X)) -> mark(from(X)),
                                                                  from(ok(X)) -> ok(from(X)),
                                                                   s(mark(X)) -> mark(s(X)),
                                                                     s(ok(X)) -> ok(s(X)),
                                                             active(sieve(X)) -> sieve(active(X)),
                                                    active(sieve(cons(X, Y))) -> mark(cons(X, filter(X, sieve(Y)))),
                                                              active(from(X)) -> mark(cons(X, from(s(X)))),
                                                              active(from(X)) -> from(active(X)),
                                                                 active(s(X)) -> s(active(X)),
                                                             active(primes()) -> mark(sieve(from(s(s(0()))))),
                                                         active(cons(X1, X2)) -> cons(active(X1), X2),
                                                              active(head(X)) -> head(active(X)),
                                                     active(head(cons(X, Y))) -> mark(X),
                                                              active(tail(X)) -> tail(active(X)),
                                                     active(tail(cons(X, Y))) -> mark(Y),
                                                       active(if(X1, X2, X3)) -> if(active(X1), X2, X3),
                                                     active(if(true(), X, Y)) -> mark(X),
                                                    active(if(false(), X, Y)) -> mark(Y),
                                                      active(divides(X1, X2)) -> divides(X1, active(X2)),
                                                      active(divides(X1, X2)) -> divides(active(X1), X2),
                                                       active(filter(X1, X2)) -> filter(X1, active(X2)),
                                                       active(filter(X1, X2)) -> filter(active(X1), X2),
                                          active(filter(s(s(X)), cons(Y, Z))) -> mark(if(divides(s(s(X)), Y), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y))))),
                                                           cons(mark(X1), X2) -> mark(cons(X1, X2)),
                                                         cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)),
                                                                head(mark(X)) -> mark(head(X)),
                                                                  head(ok(X)) -> ok(head(X)),
                                                                tail(mark(X)) -> mark(tail(X)),
                                                                  tail(ok(X)) -> ok(tail(X)),
                                                         if(mark(X1), X2, X3) -> mark(if(X1, X2, X3)),
                                                   if(ok(X1), ok(X2), ok(X3)) -> ok(if(X1, X2, X3)),
                                                        divides(X1, mark(X2)) -> mark(divides(X1, X2)),
                                                        divides(mark(X1), X2) -> mark(divides(X1, X2)),
                                                      divides(ok(X1), ok(X2)) -> ok(divides(X1, X2)),
                                                         filter(X1, mark(X2)) -> mark(filter(X1, X2)),
                                                         filter(mark(X1), X2) -> mark(filter(X1, X2)),
                                                       filter(ok(X1), ok(X2)) -> ok(filter(X1, X2)),
                                                             proper(sieve(X)) -> sieve(proper(X)),
                                                              proper(from(X)) -> from(proper(X)),
                                                                 proper(s(X)) -> s(proper(X)),
                                                                  proper(0()) -> ok(0()),
                                                             proper(primes()) -> ok(primes()),
                                                         proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)),
                                                              proper(head(X)) -> head(proper(X)),
                                                              proper(tail(X)) -> tail(proper(X)),
                                                       proper(if(X1, X2, X3)) -> if(proper(X1), proper(X2), proper(X3)),
                                                               proper(true()) -> ok(true()),
                                                              proper(false()) -> ok(false()),
                                                      proper(divides(X1, X2)) -> divides(proper(X1), proper(X2)),
                                                       proper(filter(X1, X2)) -> filter(proper(X1), proper(X2)),
                                                                 top(mark(X)) -> top(proper(X)),
                                                                   top(ok(X)) -> top(active(X))}
                                         SPSC:
                                          Simple Projection:
                                           pi(active#) = 0
                                          Strict:
                                           {active#(divides(X1, X2)) -> active#(X2)}
                                          EDG:
                                           {(active#(divides(X1, X2)) -> active#(X2), active#(divides(X1, X2)) -> active#(X2))}
                                           SCCS:
                                            Scc:
                                             {active#(divides(X1, X2)) -> active#(X2)}
                                            SCC:
                                             Strict:
                                              {active#(divides(X1, X2)) -> active#(X2)}
                                             Weak:
                                             {                     sieve(mark(X)) -> mark(sieve(X)),
                                                                     sieve(ok(X)) -> ok(sieve(X)),
                                                                    from(mark(X)) -> mark(from(X)),
                                                                      from(ok(X)) -> ok(from(X)),
                                                                       s(mark(X)) -> mark(s(X)),
                                                                         s(ok(X)) -> ok(s(X)),
                                                                 active(sieve(X)) -> sieve(active(X)),
                                                        active(sieve(cons(X, Y))) -> mark(cons(X, filter(X, sieve(Y)))),
                                                                  active(from(X)) -> mark(cons(X, from(s(X)))),
                                                                  active(from(X)) -> from(active(X)),
                                                                     active(s(X)) -> s(active(X)),
                                                                 active(primes()) -> mark(sieve(from(s(s(0()))))),
                                                             active(cons(X1, X2)) -> cons(active(X1), X2),
                                                                  active(head(X)) -> head(active(X)),
                                                         active(head(cons(X, Y))) -> mark(X),
                                                                  active(tail(X)) -> tail(active(X)),
                                                         active(tail(cons(X, Y))) -> mark(Y),
                                                           active(if(X1, X2, X3)) -> if(active(X1), X2, X3),
                                                         active(if(true(), X, Y)) -> mark(X),
                                                        active(if(false(), X, Y)) -> mark(Y),
                                                          active(divides(X1, X2)) -> divides(X1, active(X2)),
                                                          active(divides(X1, X2)) -> divides(active(X1), X2),
                                                           active(filter(X1, X2)) -> filter(X1, active(X2)),
                                                           active(filter(X1, X2)) -> filter(active(X1), X2),
                                              active(filter(s(s(X)), cons(Y, Z))) -> mark(if(divides(s(s(X)), Y), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y))))),
                                                               cons(mark(X1), X2) -> mark(cons(X1, X2)),
                                                             cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)),
                                                                    head(mark(X)) -> mark(head(X)),
                                                                      head(ok(X)) -> ok(head(X)),
                                                                    tail(mark(X)) -> mark(tail(X)),
                                                                      tail(ok(X)) -> ok(tail(X)),
                                                             if(mark(X1), X2, X3) -> mark(if(X1, X2, X3)),
                                                       if(ok(X1), ok(X2), ok(X3)) -> ok(if(X1, X2, X3)),
                                                            divides(X1, mark(X2)) -> mark(divides(X1, X2)),
                                                            divides(mark(X1), X2) -> mark(divides(X1, X2)),
                                                          divides(ok(X1), ok(X2)) -> ok(divides(X1, X2)),
                                                             filter(X1, mark(X2)) -> mark(filter(X1, X2)),
                                                             filter(mark(X1), X2) -> mark(filter(X1, X2)),
                                                           filter(ok(X1), ok(X2)) -> ok(filter(X1, X2)),
                                                                 proper(sieve(X)) -> sieve(proper(X)),
                                                                  proper(from(X)) -> from(proper(X)),
                                                                     proper(s(X)) -> s(proper(X)),
                                                                      proper(0()) -> ok(0()),
                                                                 proper(primes()) -> ok(primes()),
                                                             proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)),
                                                                  proper(head(X)) -> head(proper(X)),
                                                                  proper(tail(X)) -> tail(proper(X)),
                                                           proper(if(X1, X2, X3)) -> if(proper(X1), proper(X2), proper(X3)),
                                                                   proper(true()) -> ok(true()),
                                                                  proper(false()) -> ok(false()),
                                                          proper(divides(X1, X2)) -> divides(proper(X1), proper(X2)),
                                                           proper(filter(X1, X2)) -> filter(proper(X1), proper(X2)),
                                                                     top(mark(X)) -> top(proper(X)),
                                                                       top(ok(X)) -> top(active(X))}
                                             SPSC:
                                              Simple Projection:
                                               pi(active#) = 0
                                              Strict:
                                               {}
                                              Qed
    SCC:
     Strict:
      {s#(mark(X)) -> s#(X),
         s#(ok(X)) -> s#(X)}
     Weak:
     {                     sieve(mark(X)) -> mark(sieve(X)),
                             sieve(ok(X)) -> ok(sieve(X)),
                            from(mark(X)) -> mark(from(X)),
                              from(ok(X)) -> ok(from(X)),
                               s(mark(X)) -> mark(s(X)),
                                 s(ok(X)) -> ok(s(X)),
                         active(sieve(X)) -> sieve(active(X)),
                active(sieve(cons(X, Y))) -> mark(cons(X, filter(X, sieve(Y)))),
                          active(from(X)) -> mark(cons(X, from(s(X)))),
                          active(from(X)) -> from(active(X)),
                             active(s(X)) -> s(active(X)),
                         active(primes()) -> mark(sieve(from(s(s(0()))))),
                     active(cons(X1, X2)) -> cons(active(X1), X2),
                          active(head(X)) -> head(active(X)),
                 active(head(cons(X, Y))) -> mark(X),
                          active(tail(X)) -> tail(active(X)),
                 active(tail(cons(X, Y))) -> mark(Y),
                   active(if(X1, X2, X3)) -> if(active(X1), X2, X3),
                 active(if(true(), X, Y)) -> mark(X),
                active(if(false(), X, Y)) -> mark(Y),
                  active(divides(X1, X2)) -> divides(X1, active(X2)),
                  active(divides(X1, X2)) -> divides(active(X1), X2),
                   active(filter(X1, X2)) -> filter(X1, active(X2)),
                   active(filter(X1, X2)) -> filter(active(X1), X2),
      active(filter(s(s(X)), cons(Y, Z))) -> mark(if(divides(s(s(X)), Y), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y))))),
                       cons(mark(X1), X2) -> mark(cons(X1, X2)),
                     cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)),
                            head(mark(X)) -> mark(head(X)),
                              head(ok(X)) -> ok(head(X)),
                            tail(mark(X)) -> mark(tail(X)),
                              tail(ok(X)) -> ok(tail(X)),
                     if(mark(X1), X2, X3) -> mark(if(X1, X2, X3)),
               if(ok(X1), ok(X2), ok(X3)) -> ok(if(X1, X2, X3)),
                    divides(X1, mark(X2)) -> mark(divides(X1, X2)),
                    divides(mark(X1), X2) -> mark(divides(X1, X2)),
                  divides(ok(X1), ok(X2)) -> ok(divides(X1, X2)),
                     filter(X1, mark(X2)) -> mark(filter(X1, X2)),
                     filter(mark(X1), X2) -> mark(filter(X1, X2)),
                   filter(ok(X1), ok(X2)) -> ok(filter(X1, X2)),
                         proper(sieve(X)) -> sieve(proper(X)),
                          proper(from(X)) -> from(proper(X)),
                             proper(s(X)) -> s(proper(X)),
                              proper(0()) -> ok(0()),
                         proper(primes()) -> ok(primes()),
                     proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)),
                          proper(head(X)) -> head(proper(X)),
                          proper(tail(X)) -> tail(proper(X)),
                   proper(if(X1, X2, X3)) -> if(proper(X1), proper(X2), proper(X3)),
                           proper(true()) -> ok(true()),
                          proper(false()) -> ok(false()),
                  proper(divides(X1, X2)) -> divides(proper(X1), proper(X2)),
                   proper(filter(X1, X2)) -> filter(proper(X1), proper(X2)),
                             top(mark(X)) -> top(proper(X)),
                               top(ok(X)) -> top(active(X))}
     SPSC:
      Simple Projection:
       pi(s#) = 0
      Strict:
       {s#(ok(X)) -> s#(X)}
      EDG:
       {(s#(ok(X)) -> s#(X), s#(ok(X)) -> s#(X))}
       SCCS:
        Scc:
         {s#(ok(X)) -> s#(X)}
        SCC:
         Strict:
          {s#(ok(X)) -> s#(X)}
         Weak:
         {                     sieve(mark(X)) -> mark(sieve(X)),
                                 sieve(ok(X)) -> ok(sieve(X)),
                                from(mark(X)) -> mark(from(X)),
                                  from(ok(X)) -> ok(from(X)),
                                   s(mark(X)) -> mark(s(X)),
                                     s(ok(X)) -> ok(s(X)),
                             active(sieve(X)) -> sieve(active(X)),
                    active(sieve(cons(X, Y))) -> mark(cons(X, filter(X, sieve(Y)))),
                              active(from(X)) -> mark(cons(X, from(s(X)))),
                              active(from(X)) -> from(active(X)),
                                 active(s(X)) -> s(active(X)),
                             active(primes()) -> mark(sieve(from(s(s(0()))))),
                         active(cons(X1, X2)) -> cons(active(X1), X2),
                              active(head(X)) -> head(active(X)),
                     active(head(cons(X, Y))) -> mark(X),
                              active(tail(X)) -> tail(active(X)),
                     active(tail(cons(X, Y))) -> mark(Y),
                       active(if(X1, X2, X3)) -> if(active(X1), X2, X3),
                     active(if(true(), X, Y)) -> mark(X),
                    active(if(false(), X, Y)) -> mark(Y),
                      active(divides(X1, X2)) -> divides(X1, active(X2)),
                      active(divides(X1, X2)) -> divides(active(X1), X2),
                       active(filter(X1, X2)) -> filter(X1, active(X2)),
                       active(filter(X1, X2)) -> filter(active(X1), X2),
          active(filter(s(s(X)), cons(Y, Z))) -> mark(if(divides(s(s(X)), Y), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y))))),
                           cons(mark(X1), X2) -> mark(cons(X1, X2)),
                         cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)),
                                head(mark(X)) -> mark(head(X)),
                                  head(ok(X)) -> ok(head(X)),
                                tail(mark(X)) -> mark(tail(X)),
                                  tail(ok(X)) -> ok(tail(X)),
                         if(mark(X1), X2, X3) -> mark(if(X1, X2, X3)),
                   if(ok(X1), ok(X2), ok(X3)) -> ok(if(X1, X2, X3)),
                        divides(X1, mark(X2)) -> mark(divides(X1, X2)),
                        divides(mark(X1), X2) -> mark(divides(X1, X2)),
                      divides(ok(X1), ok(X2)) -> ok(divides(X1, X2)),
                         filter(X1, mark(X2)) -> mark(filter(X1, X2)),
                         filter(mark(X1), X2) -> mark(filter(X1, X2)),
                       filter(ok(X1), ok(X2)) -> ok(filter(X1, X2)),
                             proper(sieve(X)) -> sieve(proper(X)),
                              proper(from(X)) -> from(proper(X)),
                                 proper(s(X)) -> s(proper(X)),
                                  proper(0()) -> ok(0()),
                             proper(primes()) -> ok(primes()),
                         proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)),
                              proper(head(X)) -> head(proper(X)),
                              proper(tail(X)) -> tail(proper(X)),
                       proper(if(X1, X2, X3)) -> if(proper(X1), proper(X2), proper(X3)),
                               proper(true()) -> ok(true()),
                              proper(false()) -> ok(false()),
                      proper(divides(X1, X2)) -> divides(proper(X1), proper(X2)),
                       proper(filter(X1, X2)) -> filter(proper(X1), proper(X2)),
                                 top(mark(X)) -> top(proper(X)),
                                   top(ok(X)) -> top(active(X))}
         SPSC:
          Simple Projection:
           pi(s#) = 0
          Strict:
           {}
          Qed
    SCC:
     Strict:
      {from#(mark(X)) -> from#(X),
         from#(ok(X)) -> from#(X)}
     Weak:
     {                     sieve(mark(X)) -> mark(sieve(X)),
                             sieve(ok(X)) -> ok(sieve(X)),
                            from(mark(X)) -> mark(from(X)),
                              from(ok(X)) -> ok(from(X)),
                               s(mark(X)) -> mark(s(X)),
                                 s(ok(X)) -> ok(s(X)),
                         active(sieve(X)) -> sieve(active(X)),
                active(sieve(cons(X, Y))) -> mark(cons(X, filter(X, sieve(Y)))),
                          active(from(X)) -> mark(cons(X, from(s(X)))),
                          active(from(X)) -> from(active(X)),
                             active(s(X)) -> s(active(X)),
                         active(primes()) -> mark(sieve(from(s(s(0()))))),
                     active(cons(X1, X2)) -> cons(active(X1), X2),
                          active(head(X)) -> head(active(X)),
                 active(head(cons(X, Y))) -> mark(X),
                          active(tail(X)) -> tail(active(X)),
                 active(tail(cons(X, Y))) -> mark(Y),
                   active(if(X1, X2, X3)) -> if(active(X1), X2, X3),
                 active(if(true(), X, Y)) -> mark(X),
                active(if(false(), X, Y)) -> mark(Y),
                  active(divides(X1, X2)) -> divides(X1, active(X2)),
                  active(divides(X1, X2)) -> divides(active(X1), X2),
                   active(filter(X1, X2)) -> filter(X1, active(X2)),
                   active(filter(X1, X2)) -> filter(active(X1), X2),
      active(filter(s(s(X)), cons(Y, Z))) -> mark(if(divides(s(s(X)), Y), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y))))),
                       cons(mark(X1), X2) -> mark(cons(X1, X2)),
                     cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)),
                            head(mark(X)) -> mark(head(X)),
                              head(ok(X)) -> ok(head(X)),
                            tail(mark(X)) -> mark(tail(X)),
                              tail(ok(X)) -> ok(tail(X)),
                     if(mark(X1), X2, X3) -> mark(if(X1, X2, X3)),
               if(ok(X1), ok(X2), ok(X3)) -> ok(if(X1, X2, X3)),
                    divides(X1, mark(X2)) -> mark(divides(X1, X2)),
                    divides(mark(X1), X2) -> mark(divides(X1, X2)),
                  divides(ok(X1), ok(X2)) -> ok(divides(X1, X2)),
                     filter(X1, mark(X2)) -> mark(filter(X1, X2)),
                     filter(mark(X1), X2) -> mark(filter(X1, X2)),
                   filter(ok(X1), ok(X2)) -> ok(filter(X1, X2)),
                         proper(sieve(X)) -> sieve(proper(X)),
                          proper(from(X)) -> from(proper(X)),
                             proper(s(X)) -> s(proper(X)),
                              proper(0()) -> ok(0()),
                         proper(primes()) -> ok(primes()),
                     proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)),
                          proper(head(X)) -> head(proper(X)),
                          proper(tail(X)) -> tail(proper(X)),
                   proper(if(X1, X2, X3)) -> if(proper(X1), proper(X2), proper(X3)),
                           proper(true()) -> ok(true()),
                          proper(false()) -> ok(false()),
                  proper(divides(X1, X2)) -> divides(proper(X1), proper(X2)),
                   proper(filter(X1, X2)) -> filter(proper(X1), proper(X2)),
                             top(mark(X)) -> top(proper(X)),
                               top(ok(X)) -> top(active(X))}
     SPSC:
      Simple Projection:
       pi(from#) = 0
      Strict:
       {from#(ok(X)) -> from#(X)}
      EDG:
       {(from#(ok(X)) -> from#(X), from#(ok(X)) -> from#(X))}
       SCCS:
        Scc:
         {from#(ok(X)) -> from#(X)}
        SCC:
         Strict:
          {from#(ok(X)) -> from#(X)}
         Weak:
         {                     sieve(mark(X)) -> mark(sieve(X)),
                                 sieve(ok(X)) -> ok(sieve(X)),
                                from(mark(X)) -> mark(from(X)),
                                  from(ok(X)) -> ok(from(X)),
                                   s(mark(X)) -> mark(s(X)),
                                     s(ok(X)) -> ok(s(X)),
                             active(sieve(X)) -> sieve(active(X)),
                    active(sieve(cons(X, Y))) -> mark(cons(X, filter(X, sieve(Y)))),
                              active(from(X)) -> mark(cons(X, from(s(X)))),
                              active(from(X)) -> from(active(X)),
                                 active(s(X)) -> s(active(X)),
                             active(primes()) -> mark(sieve(from(s(s(0()))))),
                         active(cons(X1, X2)) -> cons(active(X1), X2),
                              active(head(X)) -> head(active(X)),
                     active(head(cons(X, Y))) -> mark(X),
                              active(tail(X)) -> tail(active(X)),
                     active(tail(cons(X, Y))) -> mark(Y),
                       active(if(X1, X2, X3)) -> if(active(X1), X2, X3),
                     active(if(true(), X, Y)) -> mark(X),
                    active(if(false(), X, Y)) -> mark(Y),
                      active(divides(X1, X2)) -> divides(X1, active(X2)),
                      active(divides(X1, X2)) -> divides(active(X1), X2),
                       active(filter(X1, X2)) -> filter(X1, active(X2)),
                       active(filter(X1, X2)) -> filter(active(X1), X2),
          active(filter(s(s(X)), cons(Y, Z))) -> mark(if(divides(s(s(X)), Y), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y))))),
                           cons(mark(X1), X2) -> mark(cons(X1, X2)),
                         cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)),
                                head(mark(X)) -> mark(head(X)),
                                  head(ok(X)) -> ok(head(X)),
                                tail(mark(X)) -> mark(tail(X)),
                                  tail(ok(X)) -> ok(tail(X)),
                         if(mark(X1), X2, X3) -> mark(if(X1, X2, X3)),
                   if(ok(X1), ok(X2), ok(X3)) -> ok(if(X1, X2, X3)),
                        divides(X1, mark(X2)) -> mark(divides(X1, X2)),
                        divides(mark(X1), X2) -> mark(divides(X1, X2)),
                      divides(ok(X1), ok(X2)) -> ok(divides(X1, X2)),
                         filter(X1, mark(X2)) -> mark(filter(X1, X2)),
                         filter(mark(X1), X2) -> mark(filter(X1, X2)),
                       filter(ok(X1), ok(X2)) -> ok(filter(X1, X2)),
                             proper(sieve(X)) -> sieve(proper(X)),
                              proper(from(X)) -> from(proper(X)),
                                 proper(s(X)) -> s(proper(X)),
                                  proper(0()) -> ok(0()),
                             proper(primes()) -> ok(primes()),
                         proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)),
                              proper(head(X)) -> head(proper(X)),
                              proper(tail(X)) -> tail(proper(X)),
                       proper(if(X1, X2, X3)) -> if(proper(X1), proper(X2), proper(X3)),
                               proper(true()) -> ok(true()),
                              proper(false()) -> ok(false()),
                      proper(divides(X1, X2)) -> divides(proper(X1), proper(X2)),
                       proper(filter(X1, X2)) -> filter(proper(X1), proper(X2)),
                                 top(mark(X)) -> top(proper(X)),
                                   top(ok(X)) -> top(active(X))}
         SPSC:
          Simple Projection:
           pi(from#) = 0
          Strict:
           {}
          Qed
    SCC:
     Strict:
      {sieve#(mark(X)) -> sieve#(X),
         sieve#(ok(X)) -> sieve#(X)}
     Weak:
     {                     sieve(mark(X)) -> mark(sieve(X)),
                             sieve(ok(X)) -> ok(sieve(X)),
                            from(mark(X)) -> mark(from(X)),
                              from(ok(X)) -> ok(from(X)),
                               s(mark(X)) -> mark(s(X)),
                                 s(ok(X)) -> ok(s(X)),
                         active(sieve(X)) -> sieve(active(X)),
                active(sieve(cons(X, Y))) -> mark(cons(X, filter(X, sieve(Y)))),
                          active(from(X)) -> mark(cons(X, from(s(X)))),
                          active(from(X)) -> from(active(X)),
                             active(s(X)) -> s(active(X)),
                         active(primes()) -> mark(sieve(from(s(s(0()))))),
                     active(cons(X1, X2)) -> cons(active(X1), X2),
                          active(head(X)) -> head(active(X)),
                 active(head(cons(X, Y))) -> mark(X),
                          active(tail(X)) -> tail(active(X)),
                 active(tail(cons(X, Y))) -> mark(Y),
                   active(if(X1, X2, X3)) -> if(active(X1), X2, X3),
                 active(if(true(), X, Y)) -> mark(X),
                active(if(false(), X, Y)) -> mark(Y),
                  active(divides(X1, X2)) -> divides(X1, active(X2)),
                  active(divides(X1, X2)) -> divides(active(X1), X2),
                   active(filter(X1, X2)) -> filter(X1, active(X2)),
                   active(filter(X1, X2)) -> filter(active(X1), X2),
      active(filter(s(s(X)), cons(Y, Z))) -> mark(if(divides(s(s(X)), Y), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y))))),
                       cons(mark(X1), X2) -> mark(cons(X1, X2)),
                     cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)),
                            head(mark(X)) -> mark(head(X)),
                              head(ok(X)) -> ok(head(X)),
                            tail(mark(X)) -> mark(tail(X)),
                              tail(ok(X)) -> ok(tail(X)),
                     if(mark(X1), X2, X3) -> mark(if(X1, X2, X3)),
               if(ok(X1), ok(X2), ok(X3)) -> ok(if(X1, X2, X3)),
                    divides(X1, mark(X2)) -> mark(divides(X1, X2)),
                    divides(mark(X1), X2) -> mark(divides(X1, X2)),
                  divides(ok(X1), ok(X2)) -> ok(divides(X1, X2)),
                     filter(X1, mark(X2)) -> mark(filter(X1, X2)),
                     filter(mark(X1), X2) -> mark(filter(X1, X2)),
                   filter(ok(X1), ok(X2)) -> ok(filter(X1, X2)),
                         proper(sieve(X)) -> sieve(proper(X)),
                          proper(from(X)) -> from(proper(X)),
                             proper(s(X)) -> s(proper(X)),
                              proper(0()) -> ok(0()),
                         proper(primes()) -> ok(primes()),
                     proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)),
                          proper(head(X)) -> head(proper(X)),
                          proper(tail(X)) -> tail(proper(X)),
                   proper(if(X1, X2, X3)) -> if(proper(X1), proper(X2), proper(X3)),
                           proper(true()) -> ok(true()),
                          proper(false()) -> ok(false()),
                  proper(divides(X1, X2)) -> divides(proper(X1), proper(X2)),
                   proper(filter(X1, X2)) -> filter(proper(X1), proper(X2)),
                             top(mark(X)) -> top(proper(X)),
                               top(ok(X)) -> top(active(X))}
     SPSC:
      Simple Projection:
       pi(sieve#) = 0
      Strict:
       {sieve#(ok(X)) -> sieve#(X)}
      EDG:
       {(sieve#(ok(X)) -> sieve#(X), sieve#(ok(X)) -> sieve#(X))}
       SCCS:
        Scc:
         {sieve#(ok(X)) -> sieve#(X)}
        SCC:
         Strict:
          {sieve#(ok(X)) -> sieve#(X)}
         Weak:
         {                     sieve(mark(X)) -> mark(sieve(X)),
                                 sieve(ok(X)) -> ok(sieve(X)),
                                from(mark(X)) -> mark(from(X)),
                                  from(ok(X)) -> ok(from(X)),
                                   s(mark(X)) -> mark(s(X)),
                                     s(ok(X)) -> ok(s(X)),
                             active(sieve(X)) -> sieve(active(X)),
                    active(sieve(cons(X, Y))) -> mark(cons(X, filter(X, sieve(Y)))),
                              active(from(X)) -> mark(cons(X, from(s(X)))),
                              active(from(X)) -> from(active(X)),
                                 active(s(X)) -> s(active(X)),
                             active(primes()) -> mark(sieve(from(s(s(0()))))),
                         active(cons(X1, X2)) -> cons(active(X1), X2),
                              active(head(X)) -> head(active(X)),
                     active(head(cons(X, Y))) -> mark(X),
                              active(tail(X)) -> tail(active(X)),
                     active(tail(cons(X, Y))) -> mark(Y),
                       active(if(X1, X2, X3)) -> if(active(X1), X2, X3),
                     active(if(true(), X, Y)) -> mark(X),
                    active(if(false(), X, Y)) -> mark(Y),
                      active(divides(X1, X2)) -> divides(X1, active(X2)),
                      active(divides(X1, X2)) -> divides(active(X1), X2),
                       active(filter(X1, X2)) -> filter(X1, active(X2)),
                       active(filter(X1, X2)) -> filter(active(X1), X2),
          active(filter(s(s(X)), cons(Y, Z))) -> mark(if(divides(s(s(X)), Y), filter(s(s(X)), Z), cons(Y, filter(X, sieve(Y))))),
                           cons(mark(X1), X2) -> mark(cons(X1, X2)),
                         cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)),
                                head(mark(X)) -> mark(head(X)),
                                  head(ok(X)) -> ok(head(X)),
                                tail(mark(X)) -> mark(tail(X)),
                                  tail(ok(X)) -> ok(tail(X)),
                         if(mark(X1), X2, X3) -> mark(if(X1, X2, X3)),
                   if(ok(X1), ok(X2), ok(X3)) -> ok(if(X1, X2, X3)),
                        divides(X1, mark(X2)) -> mark(divides(X1, X2)),
                        divides(mark(X1), X2) -> mark(divides(X1, X2)),
                      divides(ok(X1), ok(X2)) -> ok(divides(X1, X2)),
                         filter(X1, mark(X2)) -> mark(filter(X1, X2)),
                         filter(mark(X1), X2) -> mark(filter(X1, X2)),
                       filter(ok(X1), ok(X2)) -> ok(filter(X1, X2)),
                             proper(sieve(X)) -> sieve(proper(X)),
                              proper(from(X)) -> from(proper(X)),
                                 proper(s(X)) -> s(proper(X)),
                                  proper(0()) -> ok(0()),
                             proper(primes()) -> ok(primes()),
                         proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)),
                              proper(head(X)) -> head(proper(X)),
                              proper(tail(X)) -> tail(proper(X)),
                       proper(if(X1, X2, X3)) -> if(proper(X1), proper(X2), proper(X3)),
                               proper(true()) -> ok(true()),
                              proper(false()) -> ok(false()),
                      proper(divides(X1, X2)) -> divides(proper(X1), proper(X2)),
                       proper(filter(X1, X2)) -> filter(proper(X1), proper(X2)),
                                 top(mark(X)) -> top(proper(X)),
                                   top(ok(X)) -> top(active(X))}
         SPSC:
          Simple Projection:
           pi(sieve#) = 0
          Strict:
           {}
          Qed