YES O(n^2) TRS: { filter(cons(X), 0(), M) -> cons(0()), filter(cons(X), s(N), M) -> cons(X), sieve(cons(0())) -> cons(0()), sieve(cons(s(N))) -> cons(s(N)), nats(N) -> cons(N), zprimes() -> sieve(nats(s(s(0())))) } Natural interpretation: Strict: { filter(cons(X), 0(), M) -> cons(0()), filter(cons(X), s(N), M) -> cons(X), sieve(cons(0())) -> cons(0()), sieve(cons(s(N))) -> cons(s(N)), nats(N) -> cons(N), zprimes() -> sieve(nats(s(s(0())))) } Weak: {} Interpretation class: deltarestricted [zprimes](delta) = + 2 + 3*delta [nats](delta, X0) = + 1*X0 + 1 + 0*X0*delta + 1*delta [sieve](delta, X0) = + 0*X0 + 1 + 1*X0*delta + 0*delta [s](delta, X0) = + 0*X0 + 0 + 1*X0*delta + 0*delta [filter](delta, X2, X1, X0) = + 0*X0 + 0*X1 + 1*X2 + 0 + 1*X0*delta + 1*X1*delta + 0*X2*delta + 1*delta [0](delta) = + 0 + 0*delta [cons](delta, X0) = + 1*X0 + 1 + 0*X0*delta + 0*delta nats_tau_1(delta) = delta/(1 + 0 * delta) sieve_tau_1(delta) = delta/(0 + 1 * delta) s_tau_1(delta) = delta/(0 + 1 * delta) filter_tau_1(delta) = delta/(1 + 0 * delta)filter_tau_2(delta) = delta/(0 + 1 * delta)filter_tau_3(delta) = delta/(0 + 1 * delta) cons_tau_1(delta) = delta/(1 + 0 * delta) Qed