MAYBE We are left with following problem, upon which TcT provides the certificate MAYBE. Strict Trs: { active(fact(X)) -> fact(active(X)) , active(fact(X)) -> mark(if(zero(X), s(0()), prod(X, fact(p(X))))) , 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(zero(X)) -> zero(active(X)) , active(zero(s(X))) -> mark(false()) , active(zero(0())) -> mark(true()) , active(s(X)) -> s(active(X)) , active(prod(X1, X2)) -> prod(X1, active(X2)) , active(prod(X1, X2)) -> prod(active(X1), X2) , active(prod(s(X), Y)) -> mark(add(Y, prod(X, Y))) , active(prod(0(), X)) -> mark(0()) , active(p(X)) -> p(active(X)) , active(p(s(X))) -> mark(X) , active(add(X1, X2)) -> add(X1, active(X2)) , active(add(X1, X2)) -> add(active(X1), X2) , active(add(s(X), Y)) -> mark(s(add(X, Y))) , active(add(0(), X)) -> mark(X) , fact(mark(X)) -> mark(fact(X)) , fact(ok(X)) -> ok(fact(X)) , if(mark(X1), X2, X3) -> mark(if(X1, X2, X3)) , if(ok(X1), ok(X2), ok(X3)) -> ok(if(X1, X2, X3)) , zero(mark(X)) -> mark(zero(X)) , zero(ok(X)) -> ok(zero(X)) , s(mark(X)) -> mark(s(X)) , s(ok(X)) -> ok(s(X)) , prod(X1, mark(X2)) -> mark(prod(X1, X2)) , prod(mark(X1), X2) -> mark(prod(X1, X2)) , prod(ok(X1), ok(X2)) -> ok(prod(X1, X2)) , p(mark(X)) -> mark(p(X)) , p(ok(X)) -> ok(p(X)) , add(X1, mark(X2)) -> mark(add(X1, X2)) , add(mark(X1), X2) -> mark(add(X1, X2)) , add(ok(X1), ok(X2)) -> ok(add(X1, X2)) , proper(fact(X)) -> fact(proper(X)) , proper(if(X1, X2, X3)) -> if(proper(X1), proper(X2), proper(X3)) , proper(zero(X)) -> zero(proper(X)) , proper(s(X)) -> s(proper(X)) , proper(0()) -> ok(0()) , proper(prod(X1, X2)) -> prod(proper(X1), proper(X2)) , proper(p(X)) -> p(proper(X)) , proper(add(X1, X2)) -> add(proper(X1), proper(X2)) , proper(true()) -> ok(true()) , proper(false()) -> ok(false()) , top(mark(X)) -> top(proper(X)) , top(ok(X)) -> top(active(X)) } Obligation: runtime complexity Answer: MAYBE None of the processors succeeded. Details of failed attempt(s): ----------------------------- 1) 'WithProblem (timeout of 60 seconds)' failed due to the following reason: Computation stopped due to timeout after 60.0 seconds. 2) 'Best' failed due to the following reason: None of the processors succeeded. Details of failed attempt(s): ----------------------------- 1) 'WithProblem (timeout of 30 seconds) (timeout of 60 seconds)' failed due to the following reason: Computation stopped due to timeout after 30.0 seconds. 2) 'Best' failed due to the following reason: None of the processors succeeded. Details of failed attempt(s): ----------------------------- 1) 'Polynomial Path Order (PS) (timeout of 60 seconds)' failed due to the following reason: The processor is inapplicable, reason: Processor only applicable for innermost runtime complexity analysis 2) 'bsearch-popstar (timeout of 60 seconds)' failed due to the following reason: The processor is inapplicable, reason: Processor only applicable for innermost runtime complexity analysis 3) 'Fastest (timeout of 5 seconds) (timeout of 60 seconds)' failed due to the following reason: None of the processors succeeded. Details of failed attempt(s): ----------------------------- 1) 'Bounds with minimal-enrichment and initial automaton 'match'' failed due to the following reason: match-boundness of the problem could not be verified. 2) 'Bounds with perSymbol-enrichment and initial automaton 'match'' failed due to the following reason: match-boundness of the problem could not be verified. 3) 'Innermost Weak Dependency Pairs (timeout of 60 seconds)' failed due to the following reason: We add the following weak dependency pairs: Strict DPs: { active^#(fact(X)) -> c_1(fact^#(active(X))) , active^#(fact(X)) -> c_2(if^#(zero(X), s(0()), prod(X, fact(p(X))))) , active^#(if(X1, X2, X3)) -> c_3(if^#(active(X1), X2, X3)) , active^#(if(true(), X, Y)) -> c_4(X) , active^#(if(false(), X, Y)) -> c_5(Y) , active^#(zero(X)) -> c_6(zero^#(active(X))) , active^#(zero(s(X))) -> c_7() , active^#(zero(0())) -> c_8() , active^#(s(X)) -> c_9(s^#(active(X))) , active^#(prod(X1, X2)) -> c_10(prod^#(X1, active(X2))) , active^#(prod(X1, X2)) -> c_11(prod^#(active(X1), X2)) , active^#(prod(s(X), Y)) -> c_12(add^#(Y, prod(X, Y))) , active^#(prod(0(), X)) -> c_13() , active^#(p(X)) -> c_14(p^#(active(X))) , active^#(p(s(X))) -> c_15(X) , active^#(add(X1, X2)) -> c_16(add^#(X1, active(X2))) , active^#(add(X1, X2)) -> c_17(add^#(active(X1), X2)) , active^#(add(s(X), Y)) -> c_18(s^#(add(X, Y))) , active^#(add(0(), X)) -> c_19(X) , fact^#(mark(X)) -> c_20(fact^#(X)) , fact^#(ok(X)) -> c_21(fact^#(X)) , if^#(mark(X1), X2, X3) -> c_22(if^#(X1, X2, X3)) , if^#(ok(X1), ok(X2), ok(X3)) -> c_23(if^#(X1, X2, X3)) , zero^#(mark(X)) -> c_24(zero^#(X)) , zero^#(ok(X)) -> c_25(zero^#(X)) , s^#(mark(X)) -> c_26(s^#(X)) , s^#(ok(X)) -> c_27(s^#(X)) , prod^#(X1, mark(X2)) -> c_28(prod^#(X1, X2)) , prod^#(mark(X1), X2) -> c_29(prod^#(X1, X2)) , prod^#(ok(X1), ok(X2)) -> c_30(prod^#(X1, X2)) , add^#(X1, mark(X2)) -> c_33(add^#(X1, X2)) , add^#(mark(X1), X2) -> c_34(add^#(X1, X2)) , add^#(ok(X1), ok(X2)) -> c_35(add^#(X1, X2)) , p^#(mark(X)) -> c_31(p^#(X)) , p^#(ok(X)) -> c_32(p^#(X)) , proper^#(fact(X)) -> c_36(fact^#(proper(X))) , proper^#(if(X1, X2, X3)) -> c_37(if^#(proper(X1), proper(X2), proper(X3))) , proper^#(zero(X)) -> c_38(zero^#(proper(X))) , proper^#(s(X)) -> c_39(s^#(proper(X))) , proper^#(0()) -> c_40() , proper^#(prod(X1, X2)) -> c_41(prod^#(proper(X1), proper(X2))) , proper^#(p(X)) -> c_42(p^#(proper(X))) , proper^#(add(X1, X2)) -> c_43(add^#(proper(X1), proper(X2))) , proper^#(true()) -> c_44() , proper^#(false()) -> c_45() , top^#(mark(X)) -> c_46(top^#(proper(X))) , top^#(ok(X)) -> c_47(top^#(active(X))) } and mark the set of starting terms. We are left with following problem, upon which TcT provides the certificate MAYBE. Strict DPs: { active^#(fact(X)) -> c_1(fact^#(active(X))) , active^#(fact(X)) -> c_2(if^#(zero(X), s(0()), prod(X, fact(p(X))))) , active^#(if(X1, X2, X3)) -> c_3(if^#(active(X1), X2, X3)) , active^#(if(true(), X, Y)) -> c_4(X) , active^#(if(false(), X, Y)) -> c_5(Y) , active^#(zero(X)) -> c_6(zero^#(active(X))) , active^#(zero(s(X))) -> c_7() , active^#(zero(0())) -> c_8() , active^#(s(X)) -> c_9(s^#(active(X))) , active^#(prod(X1, X2)) -> c_10(prod^#(X1, active(X2))) , active^#(prod(X1, X2)) -> c_11(prod^#(active(X1), X2)) , active^#(prod(s(X), Y)) -> c_12(add^#(Y, prod(X, Y))) , active^#(prod(0(), X)) -> c_13() , active^#(p(X)) -> c_14(p^#(active(X))) , active^#(p(s(X))) -> c_15(X) , active^#(add(X1, X2)) -> c_16(add^#(X1, active(X2))) , active^#(add(X1, X2)) -> c_17(add^#(active(X1), X2)) , active^#(add(s(X), Y)) -> c_18(s^#(add(X, Y))) , active^#(add(0(), X)) -> c_19(X) , fact^#(mark(X)) -> c_20(fact^#(X)) , fact^#(ok(X)) -> c_21(fact^#(X)) , if^#(mark(X1), X2, X3) -> c_22(if^#(X1, X2, X3)) , if^#(ok(X1), ok(X2), ok(X3)) -> c_23(if^#(X1, X2, X3)) , zero^#(mark(X)) -> c_24(zero^#(X)) , zero^#(ok(X)) -> c_25(zero^#(X)) , s^#(mark(X)) -> c_26(s^#(X)) , s^#(ok(X)) -> c_27(s^#(X)) , prod^#(X1, mark(X2)) -> c_28(prod^#(X1, X2)) , prod^#(mark(X1), X2) -> c_29(prod^#(X1, X2)) , prod^#(ok(X1), ok(X2)) -> c_30(prod^#(X1, X2)) , add^#(X1, mark(X2)) -> c_33(add^#(X1, X2)) , add^#(mark(X1), X2) -> c_34(add^#(X1, X2)) , add^#(ok(X1), ok(X2)) -> c_35(add^#(X1, X2)) , p^#(mark(X)) -> c_31(p^#(X)) , p^#(ok(X)) -> c_32(p^#(X)) , proper^#(fact(X)) -> c_36(fact^#(proper(X))) , proper^#(if(X1, X2, X3)) -> c_37(if^#(proper(X1), proper(X2), proper(X3))) , proper^#(zero(X)) -> c_38(zero^#(proper(X))) , proper^#(s(X)) -> c_39(s^#(proper(X))) , proper^#(0()) -> c_40() , proper^#(prod(X1, X2)) -> c_41(prod^#(proper(X1), proper(X2))) , proper^#(p(X)) -> c_42(p^#(proper(X))) , proper^#(add(X1, X2)) -> c_43(add^#(proper(X1), proper(X2))) , proper^#(true()) -> c_44() , proper^#(false()) -> c_45() , top^#(mark(X)) -> c_46(top^#(proper(X))) , top^#(ok(X)) -> c_47(top^#(active(X))) } Strict Trs: { active(fact(X)) -> fact(active(X)) , active(fact(X)) -> mark(if(zero(X), s(0()), prod(X, fact(p(X))))) , 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(zero(X)) -> zero(active(X)) , active(zero(s(X))) -> mark(false()) , active(zero(0())) -> mark(true()) , active(s(X)) -> s(active(X)) , active(prod(X1, X2)) -> prod(X1, active(X2)) , active(prod(X1, X2)) -> prod(active(X1), X2) , active(prod(s(X), Y)) -> mark(add(Y, prod(X, Y))) , active(prod(0(), X)) -> mark(0()) , active(p(X)) -> p(active(X)) , active(p(s(X))) -> mark(X) , active(add(X1, X2)) -> add(X1, active(X2)) , active(add(X1, X2)) -> add(active(X1), X2) , active(add(s(X), Y)) -> mark(s(add(X, Y))) , active(add(0(), X)) -> mark(X) , fact(mark(X)) -> mark(fact(X)) , fact(ok(X)) -> ok(fact(X)) , if(mark(X1), X2, X3) -> mark(if(X1, X2, X3)) , if(ok(X1), ok(X2), ok(X3)) -> ok(if(X1, X2, X3)) , zero(mark(X)) -> mark(zero(X)) , zero(ok(X)) -> ok(zero(X)) , s(mark(X)) -> mark(s(X)) , s(ok(X)) -> ok(s(X)) , prod(X1, mark(X2)) -> mark(prod(X1, X2)) , prod(mark(X1), X2) -> mark(prod(X1, X2)) , prod(ok(X1), ok(X2)) -> ok(prod(X1, X2)) , p(mark(X)) -> mark(p(X)) , p(ok(X)) -> ok(p(X)) , add(X1, mark(X2)) -> mark(add(X1, X2)) , add(mark(X1), X2) -> mark(add(X1, X2)) , add(ok(X1), ok(X2)) -> ok(add(X1, X2)) , proper(fact(X)) -> fact(proper(X)) , proper(if(X1, X2, X3)) -> if(proper(X1), proper(X2), proper(X3)) , proper(zero(X)) -> zero(proper(X)) , proper(s(X)) -> s(proper(X)) , proper(0()) -> ok(0()) , proper(prod(X1, X2)) -> prod(proper(X1), proper(X2)) , proper(p(X)) -> p(proper(X)) , proper(add(X1, X2)) -> add(proper(X1), proper(X2)) , proper(true()) -> ok(true()) , proper(false()) -> ok(false()) , top(mark(X)) -> top(proper(X)) , top(ok(X)) -> top(active(X)) } Obligation: runtime complexity Answer: MAYBE Consider the dependency graph: 1: active^#(fact(X)) -> c_1(fact^#(active(X))) -->_1 fact^#(ok(X)) -> c_21(fact^#(X)) :21 -->_1 fact^#(mark(X)) -> c_20(fact^#(X)) :20 2: active^#(fact(X)) -> c_2(if^#(zero(X), s(0()), prod(X, fact(p(X))))) -->_1 if^#(mark(X1), X2, X3) -> c_22(if^#(X1, X2, X3)) :22 3: active^#(if(X1, X2, X3)) -> c_3(if^#(active(X1), X2, X3)) -->_1 if^#(ok(X1), ok(X2), ok(X3)) -> c_23(if^#(X1, X2, X3)) :23 -->_1 if^#(mark(X1), X2, X3) -> c_22(if^#(X1, X2, X3)) :22 4: active^#(if(true(), X, Y)) -> c_4(X) -->_1 top^#(ok(X)) -> c_47(top^#(active(X))) :47 -->_1 top^#(mark(X)) -> c_46(top^#(proper(X))) :46 -->_1 proper^#(add(X1, X2)) -> c_43(add^#(proper(X1), proper(X2))) :43 -->_1 proper^#(p(X)) -> c_42(p^#(proper(X))) :42 -->_1 proper^#(prod(X1, X2)) -> c_41(prod^#(proper(X1), proper(X2))) :41 -->_1 proper^#(s(X)) -> c_39(s^#(proper(X))) :39 -->_1 proper^#(zero(X)) -> c_38(zero^#(proper(X))) :38 -->_1 proper^#(if(X1, X2, X3)) -> c_37(if^#(proper(X1), proper(X2), proper(X3))) :37 -->_1 proper^#(fact(X)) -> c_36(fact^#(proper(X))) :36 -->_1 p^#(ok(X)) -> c_32(p^#(X)) :35 -->_1 p^#(mark(X)) -> c_31(p^#(X)) :34 -->_1 add^#(ok(X1), ok(X2)) -> c_35(add^#(X1, X2)) :33 -->_1 add^#(mark(X1), X2) -> c_34(add^#(X1, X2)) :32 -->_1 add^#(X1, mark(X2)) -> c_33(add^#(X1, X2)) :31 -->_1 prod^#(ok(X1), ok(X2)) -> c_30(prod^#(X1, X2)) :30 -->_1 prod^#(mark(X1), X2) -> c_29(prod^#(X1, X2)) :29 -->_1 prod^#(X1, mark(X2)) -> c_28(prod^#(X1, X2)) :28 -->_1 s^#(ok(X)) -> c_27(s^#(X)) :27 -->_1 s^#(mark(X)) -> c_26(s^#(X)) :26 -->_1 zero^#(ok(X)) -> c_25(zero^#(X)) :25 -->_1 zero^#(mark(X)) -> c_24(zero^#(X)) :24 -->_1 if^#(ok(X1), ok(X2), ok(X3)) -> c_23(if^#(X1, X2, X3)) :23 -->_1 if^#(mark(X1), X2, X3) -> c_22(if^#(X1, X2, X3)) :22 -->_1 fact^#(ok(X)) -> c_21(fact^#(X)) :21 -->_1 fact^#(mark(X)) -> c_20(fact^#(X)) :20 -->_1 active^#(add(0(), X)) -> c_19(X) :19 -->_1 active^#(add(s(X), Y)) -> c_18(s^#(add(X, Y))) :18 -->_1 active^#(add(X1, X2)) -> c_17(add^#(active(X1), X2)) :17 -->_1 active^#(add(X1, X2)) -> c_16(add^#(X1, active(X2))) :16 -->_1 active^#(p(s(X))) -> c_15(X) :15 -->_1 active^#(p(X)) -> c_14(p^#(active(X))) :14 -->_1 active^#(prod(s(X), Y)) -> c_12(add^#(Y, prod(X, Y))) :12 -->_1 active^#(prod(X1, X2)) -> c_11(prod^#(active(X1), X2)) :11 -->_1 active^#(prod(X1, X2)) -> c_10(prod^#(X1, active(X2))) :10 -->_1 active^#(s(X)) -> c_9(s^#(active(X))) :9 -->_1 active^#(zero(X)) -> c_6(zero^#(active(X))) :6 -->_1 active^#(if(false(), X, Y)) -> c_5(Y) :5 -->_1 proper^#(false()) -> c_45() :45 -->_1 proper^#(true()) -> c_44() :44 -->_1 proper^#(0()) -> c_40() :40 -->_1 active^#(prod(0(), X)) -> c_13() :13 -->_1 active^#(zero(0())) -> c_8() :8 -->_1 active^#(zero(s(X))) -> c_7() :7 -->_1 active^#(if(true(), X, Y)) -> c_4(X) :4 -->_1 active^#(if(X1, X2, X3)) -> c_3(if^#(active(X1), X2, X3)) :3 -->_1 active^#(fact(X)) -> c_2(if^#(zero(X), s(0()), prod(X, fact(p(X))))) :2 -->_1 active^#(fact(X)) -> c_1(fact^#(active(X))) :1 5: active^#(if(false(), X, Y)) -> c_5(Y) -->_1 top^#(ok(X)) -> c_47(top^#(active(X))) :47 -->_1 top^#(mark(X)) -> c_46(top^#(proper(X))) :46 -->_1 proper^#(add(X1, X2)) -> c_43(add^#(proper(X1), proper(X2))) :43 -->_1 proper^#(p(X)) -> c_42(p^#(proper(X))) :42 -->_1 proper^#(prod(X1, X2)) -> c_41(prod^#(proper(X1), proper(X2))) :41 -->_1 proper^#(s(X)) -> c_39(s^#(proper(X))) :39 -->_1 proper^#(zero(X)) -> c_38(zero^#(proper(X))) :38 -->_1 proper^#(if(X1, X2, X3)) -> c_37(if^#(proper(X1), proper(X2), proper(X3))) :37 -->_1 proper^#(fact(X)) -> c_36(fact^#(proper(X))) :36 -->_1 p^#(ok(X)) -> c_32(p^#(X)) :35 -->_1 p^#(mark(X)) -> c_31(p^#(X)) :34 -->_1 add^#(ok(X1), ok(X2)) -> c_35(add^#(X1, X2)) :33 -->_1 add^#(mark(X1), X2) -> c_34(add^#(X1, X2)) :32 -->_1 add^#(X1, mark(X2)) -> c_33(add^#(X1, X2)) :31 -->_1 prod^#(ok(X1), ok(X2)) -> c_30(prod^#(X1, X2)) :30 -->_1 prod^#(mark(X1), X2) -> c_29(prod^#(X1, X2)) :29 -->_1 prod^#(X1, mark(X2)) -> c_28(prod^#(X1, X2)) :28 -->_1 s^#(ok(X)) -> c_27(s^#(X)) :27 -->_1 s^#(mark(X)) -> c_26(s^#(X)) :26 -->_1 zero^#(ok(X)) -> c_25(zero^#(X)) :25 -->_1 zero^#(mark(X)) -> c_24(zero^#(X)) :24 -->_1 if^#(ok(X1), ok(X2), ok(X3)) -> c_23(if^#(X1, X2, X3)) :23 -->_1 if^#(mark(X1), X2, X3) -> c_22(if^#(X1, X2, X3)) :22 -->_1 fact^#(ok(X)) -> c_21(fact^#(X)) :21 -->_1 fact^#(mark(X)) -> c_20(fact^#(X)) :20 -->_1 active^#(add(0(), X)) -> c_19(X) :19 -->_1 active^#(add(s(X), Y)) -> c_18(s^#(add(X, Y))) :18 -->_1 active^#(add(X1, X2)) -> c_17(add^#(active(X1), X2)) :17 -->_1 active^#(add(X1, X2)) -> c_16(add^#(X1, active(X2))) :16 -->_1 active^#(p(s(X))) -> c_15(X) :15 -->_1 active^#(p(X)) -> c_14(p^#(active(X))) :14 -->_1 active^#(prod(s(X), Y)) -> c_12(add^#(Y, prod(X, Y))) :12 -->_1 active^#(prod(X1, X2)) -> c_11(prod^#(active(X1), X2)) :11 -->_1 active^#(prod(X1, X2)) -> c_10(prod^#(X1, active(X2))) :10 -->_1 active^#(s(X)) -> c_9(s^#(active(X))) :9 -->_1 active^#(zero(X)) -> c_6(zero^#(active(X))) :6 -->_1 proper^#(false()) -> c_45() :45 -->_1 proper^#(true()) -> c_44() :44 -->_1 proper^#(0()) -> c_40() :40 -->_1 active^#(prod(0(), X)) -> c_13() :13 -->_1 active^#(zero(0())) -> c_8() :8 -->_1 active^#(zero(s(X))) -> c_7() :7 -->_1 active^#(if(false(), X, Y)) -> c_5(Y) :5 -->_1 active^#(if(true(), X, Y)) -> c_4(X) :4 -->_1 active^#(if(X1, X2, X3)) -> c_3(if^#(active(X1), X2, X3)) :3 -->_1 active^#(fact(X)) -> c_2(if^#(zero(X), s(0()), prod(X, fact(p(X))))) :2 -->_1 active^#(fact(X)) -> c_1(fact^#(active(X))) :1 6: active^#(zero(X)) -> c_6(zero^#(active(X))) -->_1 zero^#(ok(X)) -> c_25(zero^#(X)) :25 -->_1 zero^#(mark(X)) -> c_24(zero^#(X)) :24 7: active^#(zero(s(X))) -> c_7() 8: active^#(zero(0())) -> c_8() 9: active^#(s(X)) -> c_9(s^#(active(X))) -->_1 s^#(ok(X)) -> c_27(s^#(X)) :27 -->_1 s^#(mark(X)) -> c_26(s^#(X)) :26 10: active^#(prod(X1, X2)) -> c_10(prod^#(X1, active(X2))) -->_1 prod^#(ok(X1), ok(X2)) -> c_30(prod^#(X1, X2)) :30 -->_1 prod^#(mark(X1), X2) -> c_29(prod^#(X1, X2)) :29 -->_1 prod^#(X1, mark(X2)) -> c_28(prod^#(X1, X2)) :28 11: active^#(prod(X1, X2)) -> c_11(prod^#(active(X1), X2)) -->_1 prod^#(ok(X1), ok(X2)) -> c_30(prod^#(X1, X2)) :30 -->_1 prod^#(mark(X1), X2) -> c_29(prod^#(X1, X2)) :29 -->_1 prod^#(X1, mark(X2)) -> c_28(prod^#(X1, X2)) :28 12: active^#(prod(s(X), Y)) -> c_12(add^#(Y, prod(X, Y))) -->_1 add^#(ok(X1), ok(X2)) -> c_35(add^#(X1, X2)) :33 -->_1 add^#(mark(X1), X2) -> c_34(add^#(X1, X2)) :32 -->_1 add^#(X1, mark(X2)) -> c_33(add^#(X1, X2)) :31 13: active^#(prod(0(), X)) -> c_13() 14: active^#(p(X)) -> c_14(p^#(active(X))) -->_1 p^#(ok(X)) -> c_32(p^#(X)) :35 -->_1 p^#(mark(X)) -> c_31(p^#(X)) :34 15: active^#(p(s(X))) -> c_15(X) -->_1 top^#(ok(X)) -> c_47(top^#(active(X))) :47 -->_1 top^#(mark(X)) -> c_46(top^#(proper(X))) :46 -->_1 proper^#(add(X1, X2)) -> c_43(add^#(proper(X1), proper(X2))) :43 -->_1 proper^#(p(X)) -> c_42(p^#(proper(X))) :42 -->_1 proper^#(prod(X1, X2)) -> c_41(prod^#(proper(X1), proper(X2))) :41 -->_1 proper^#(s(X)) -> c_39(s^#(proper(X))) :39 -->_1 proper^#(zero(X)) -> c_38(zero^#(proper(X))) :38 -->_1 proper^#(if(X1, X2, X3)) -> c_37(if^#(proper(X1), proper(X2), proper(X3))) :37 -->_1 proper^#(fact(X)) -> c_36(fact^#(proper(X))) :36 -->_1 p^#(ok(X)) -> c_32(p^#(X)) :35 -->_1 p^#(mark(X)) -> c_31(p^#(X)) :34 -->_1 add^#(ok(X1), ok(X2)) -> c_35(add^#(X1, X2)) :33 -->_1 add^#(mark(X1), X2) -> c_34(add^#(X1, X2)) :32 -->_1 add^#(X1, mark(X2)) -> c_33(add^#(X1, X2)) :31 -->_1 prod^#(ok(X1), ok(X2)) -> c_30(prod^#(X1, X2)) :30 -->_1 prod^#(mark(X1), X2) -> c_29(prod^#(X1, X2)) :29 -->_1 prod^#(X1, mark(X2)) -> c_28(prod^#(X1, X2)) :28 -->_1 s^#(ok(X)) -> c_27(s^#(X)) :27 -->_1 s^#(mark(X)) -> c_26(s^#(X)) :26 -->_1 zero^#(ok(X)) -> c_25(zero^#(X)) :25 -->_1 zero^#(mark(X)) -> c_24(zero^#(X)) :24 -->_1 if^#(ok(X1), ok(X2), ok(X3)) -> c_23(if^#(X1, X2, X3)) :23 -->_1 if^#(mark(X1), X2, X3) -> c_22(if^#(X1, X2, X3)) :22 -->_1 fact^#(ok(X)) -> c_21(fact^#(X)) :21 -->_1 fact^#(mark(X)) -> c_20(fact^#(X)) :20 -->_1 active^#(add(0(), X)) -> c_19(X) :19 -->_1 active^#(add(s(X), Y)) -> c_18(s^#(add(X, Y))) :18 -->_1 active^#(add(X1, X2)) -> c_17(add^#(active(X1), X2)) :17 -->_1 active^#(add(X1, X2)) -> c_16(add^#(X1, active(X2))) :16 -->_1 proper^#(false()) -> c_45() :45 -->_1 proper^#(true()) -> c_44() :44 -->_1 proper^#(0()) -> c_40() :40 -->_1 active^#(p(s(X))) -> c_15(X) :15 -->_1 active^#(p(X)) -> c_14(p^#(active(X))) :14 -->_1 active^#(prod(0(), X)) -> c_13() :13 -->_1 active^#(prod(s(X), Y)) -> c_12(add^#(Y, prod(X, Y))) :12 -->_1 active^#(prod(X1, X2)) -> c_11(prod^#(active(X1), X2)) :11 -->_1 active^#(prod(X1, X2)) -> c_10(prod^#(X1, active(X2))) :10 -->_1 active^#(s(X)) -> c_9(s^#(active(X))) :9 -->_1 active^#(zero(0())) -> c_8() :8 -->_1 active^#(zero(s(X))) -> c_7() :7 -->_1 active^#(zero(X)) -> c_6(zero^#(active(X))) :6 -->_1 active^#(if(false(), X, Y)) -> c_5(Y) :5 -->_1 active^#(if(true(), X, Y)) -> c_4(X) :4 -->_1 active^#(if(X1, X2, X3)) -> c_3(if^#(active(X1), X2, X3)) :3 -->_1 active^#(fact(X)) -> c_2(if^#(zero(X), s(0()), prod(X, fact(p(X))))) :2 -->_1 active^#(fact(X)) -> c_1(fact^#(active(X))) :1 16: active^#(add(X1, X2)) -> c_16(add^#(X1, active(X2))) -->_1 add^#(ok(X1), ok(X2)) -> c_35(add^#(X1, X2)) :33 -->_1 add^#(mark(X1), X2) -> c_34(add^#(X1, X2)) :32 -->_1 add^#(X1, mark(X2)) -> c_33(add^#(X1, X2)) :31 17: active^#(add(X1, X2)) -> c_17(add^#(active(X1), X2)) -->_1 add^#(ok(X1), ok(X2)) -> c_35(add^#(X1, X2)) :33 -->_1 add^#(mark(X1), X2) -> c_34(add^#(X1, X2)) :32 -->_1 add^#(X1, mark(X2)) -> c_33(add^#(X1, X2)) :31 18: active^#(add(s(X), Y)) -> c_18(s^#(add(X, Y))) -->_1 s^#(ok(X)) -> c_27(s^#(X)) :27 -->_1 s^#(mark(X)) -> c_26(s^#(X)) :26 19: active^#(add(0(), X)) -> c_19(X) -->_1 top^#(ok(X)) -> c_47(top^#(active(X))) :47 -->_1 top^#(mark(X)) -> c_46(top^#(proper(X))) :46 -->_1 proper^#(add(X1, X2)) -> c_43(add^#(proper(X1), proper(X2))) :43 -->_1 proper^#(p(X)) -> c_42(p^#(proper(X))) :42 -->_1 proper^#(prod(X1, X2)) -> c_41(prod^#(proper(X1), proper(X2))) :41 -->_1 proper^#(s(X)) -> c_39(s^#(proper(X))) :39 -->_1 proper^#(zero(X)) -> c_38(zero^#(proper(X))) :38 -->_1 proper^#(if(X1, X2, X3)) -> c_37(if^#(proper(X1), proper(X2), proper(X3))) :37 -->_1 proper^#(fact(X)) -> c_36(fact^#(proper(X))) :36 -->_1 p^#(ok(X)) -> c_32(p^#(X)) :35 -->_1 p^#(mark(X)) -> c_31(p^#(X)) :34 -->_1 add^#(ok(X1), ok(X2)) -> c_35(add^#(X1, X2)) :33 -->_1 add^#(mark(X1), X2) -> c_34(add^#(X1, X2)) :32 -->_1 add^#(X1, mark(X2)) -> c_33(add^#(X1, X2)) :31 -->_1 prod^#(ok(X1), ok(X2)) -> c_30(prod^#(X1, X2)) :30 -->_1 prod^#(mark(X1), X2) -> c_29(prod^#(X1, X2)) :29 -->_1 prod^#(X1, mark(X2)) -> c_28(prod^#(X1, X2)) :28 -->_1 s^#(ok(X)) -> c_27(s^#(X)) :27 -->_1 s^#(mark(X)) -> c_26(s^#(X)) :26 -->_1 zero^#(ok(X)) -> c_25(zero^#(X)) :25 -->_1 zero^#(mark(X)) -> c_24(zero^#(X)) :24 -->_1 if^#(ok(X1), ok(X2), ok(X3)) -> c_23(if^#(X1, X2, X3)) :23 -->_1 if^#(mark(X1), X2, X3) -> c_22(if^#(X1, X2, X3)) :22 -->_1 fact^#(ok(X)) -> c_21(fact^#(X)) :21 -->_1 fact^#(mark(X)) -> c_20(fact^#(X)) :20 -->_1 proper^#(false()) -> c_45() :45 -->_1 proper^#(true()) -> c_44() :44 -->_1 proper^#(0()) -> c_40() :40 -->_1 active^#(add(0(), X)) -> c_19(X) :19 -->_1 active^#(add(s(X), Y)) -> c_18(s^#(add(X, Y))) :18 -->_1 active^#(add(X1, X2)) -> c_17(add^#(active(X1), X2)) :17 -->_1 active^#(add(X1, X2)) -> c_16(add^#(X1, active(X2))) :16 -->_1 active^#(p(s(X))) -> c_15(X) :15 -->_1 active^#(p(X)) -> c_14(p^#(active(X))) :14 -->_1 active^#(prod(0(), X)) -> c_13() :13 -->_1 active^#(prod(s(X), Y)) -> c_12(add^#(Y, prod(X, Y))) :12 -->_1 active^#(prod(X1, X2)) -> c_11(prod^#(active(X1), X2)) :11 -->_1 active^#(prod(X1, X2)) -> c_10(prod^#(X1, active(X2))) :10 -->_1 active^#(s(X)) -> c_9(s^#(active(X))) :9 -->_1 active^#(zero(0())) -> c_8() :8 -->_1 active^#(zero(s(X))) -> c_7() :7 -->_1 active^#(zero(X)) -> c_6(zero^#(active(X))) :6 -->_1 active^#(if(false(), X, Y)) -> c_5(Y) :5 -->_1 active^#(if(true(), X, Y)) -> c_4(X) :4 -->_1 active^#(if(X1, X2, X3)) -> c_3(if^#(active(X1), X2, X3)) :3 -->_1 active^#(fact(X)) -> c_2(if^#(zero(X), s(0()), prod(X, fact(p(X))))) :2 -->_1 active^#(fact(X)) -> c_1(fact^#(active(X))) :1 20: fact^#(mark(X)) -> c_20(fact^#(X)) -->_1 fact^#(ok(X)) -> c_21(fact^#(X)) :21 -->_1 fact^#(mark(X)) -> c_20(fact^#(X)) :20 21: fact^#(ok(X)) -> c_21(fact^#(X)) -->_1 fact^#(ok(X)) -> c_21(fact^#(X)) :21 -->_1 fact^#(mark(X)) -> c_20(fact^#(X)) :20 22: if^#(mark(X1), X2, X3) -> c_22(if^#(X1, X2, X3)) -->_1 if^#(ok(X1), ok(X2), ok(X3)) -> c_23(if^#(X1, X2, X3)) :23 -->_1 if^#(mark(X1), X2, X3) -> c_22(if^#(X1, X2, X3)) :22 23: if^#(ok(X1), ok(X2), ok(X3)) -> c_23(if^#(X1, X2, X3)) -->_1 if^#(ok(X1), ok(X2), ok(X3)) -> c_23(if^#(X1, X2, X3)) :23 -->_1 if^#(mark(X1), X2, X3) -> c_22(if^#(X1, X2, X3)) :22 24: zero^#(mark(X)) -> c_24(zero^#(X)) -->_1 zero^#(ok(X)) -> c_25(zero^#(X)) :25 -->_1 zero^#(mark(X)) -> c_24(zero^#(X)) :24 25: zero^#(ok(X)) -> c_25(zero^#(X)) -->_1 zero^#(ok(X)) -> c_25(zero^#(X)) :25 -->_1 zero^#(mark(X)) -> c_24(zero^#(X)) :24 26: s^#(mark(X)) -> c_26(s^#(X)) -->_1 s^#(ok(X)) -> c_27(s^#(X)) :27 -->_1 s^#(mark(X)) -> c_26(s^#(X)) :26 27: s^#(ok(X)) -> c_27(s^#(X)) -->_1 s^#(ok(X)) -> c_27(s^#(X)) :27 -->_1 s^#(mark(X)) -> c_26(s^#(X)) :26 28: prod^#(X1, mark(X2)) -> c_28(prod^#(X1, X2)) -->_1 prod^#(ok(X1), ok(X2)) -> c_30(prod^#(X1, X2)) :30 -->_1 prod^#(mark(X1), X2) -> c_29(prod^#(X1, X2)) :29 -->_1 prod^#(X1, mark(X2)) -> c_28(prod^#(X1, X2)) :28 29: prod^#(mark(X1), X2) -> c_29(prod^#(X1, X2)) -->_1 prod^#(ok(X1), ok(X2)) -> c_30(prod^#(X1, X2)) :30 -->_1 prod^#(mark(X1), X2) -> c_29(prod^#(X1, X2)) :29 -->_1 prod^#(X1, mark(X2)) -> c_28(prod^#(X1, X2)) :28 30: prod^#(ok(X1), ok(X2)) -> c_30(prod^#(X1, X2)) -->_1 prod^#(ok(X1), ok(X2)) -> c_30(prod^#(X1, X2)) :30 -->_1 prod^#(mark(X1), X2) -> c_29(prod^#(X1, X2)) :29 -->_1 prod^#(X1, mark(X2)) -> c_28(prod^#(X1, X2)) :28 31: add^#(X1, mark(X2)) -> c_33(add^#(X1, X2)) -->_1 add^#(ok(X1), ok(X2)) -> c_35(add^#(X1, X2)) :33 -->_1 add^#(mark(X1), X2) -> c_34(add^#(X1, X2)) :32 -->_1 add^#(X1, mark(X2)) -> c_33(add^#(X1, X2)) :31 32: add^#(mark(X1), X2) -> c_34(add^#(X1, X2)) -->_1 add^#(ok(X1), ok(X2)) -> c_35(add^#(X1, X2)) :33 -->_1 add^#(mark(X1), X2) -> c_34(add^#(X1, X2)) :32 -->_1 add^#(X1, mark(X2)) -> c_33(add^#(X1, X2)) :31 33: add^#(ok(X1), ok(X2)) -> c_35(add^#(X1, X2)) -->_1 add^#(ok(X1), ok(X2)) -> c_35(add^#(X1, X2)) :33 -->_1 add^#(mark(X1), X2) -> c_34(add^#(X1, X2)) :32 -->_1 add^#(X1, mark(X2)) -> c_33(add^#(X1, X2)) :31 34: p^#(mark(X)) -> c_31(p^#(X)) -->_1 p^#(ok(X)) -> c_32(p^#(X)) :35 -->_1 p^#(mark(X)) -> c_31(p^#(X)) :34 35: p^#(ok(X)) -> c_32(p^#(X)) -->_1 p^#(ok(X)) -> c_32(p^#(X)) :35 -->_1 p^#(mark(X)) -> c_31(p^#(X)) :34 36: proper^#(fact(X)) -> c_36(fact^#(proper(X))) -->_1 fact^#(ok(X)) -> c_21(fact^#(X)) :21 -->_1 fact^#(mark(X)) -> c_20(fact^#(X)) :20 37: proper^#(if(X1, X2, X3)) -> c_37(if^#(proper(X1), proper(X2), proper(X3))) -->_1 if^#(ok(X1), ok(X2), ok(X3)) -> c_23(if^#(X1, X2, X3)) :23 -->_1 if^#(mark(X1), X2, X3) -> c_22(if^#(X1, X2, X3)) :22 38: proper^#(zero(X)) -> c_38(zero^#(proper(X))) -->_1 zero^#(ok(X)) -> c_25(zero^#(X)) :25 -->_1 zero^#(mark(X)) -> c_24(zero^#(X)) :24 39: proper^#(s(X)) -> c_39(s^#(proper(X))) -->_1 s^#(ok(X)) -> c_27(s^#(X)) :27 -->_1 s^#(mark(X)) -> c_26(s^#(X)) :26 40: proper^#(0()) -> c_40() 41: proper^#(prod(X1, X2)) -> c_41(prod^#(proper(X1), proper(X2))) -->_1 prod^#(ok(X1), ok(X2)) -> c_30(prod^#(X1, X2)) :30 -->_1 prod^#(mark(X1), X2) -> c_29(prod^#(X1, X2)) :29 -->_1 prod^#(X1, mark(X2)) -> c_28(prod^#(X1, X2)) :28 42: proper^#(p(X)) -> c_42(p^#(proper(X))) -->_1 p^#(ok(X)) -> c_32(p^#(X)) :35 -->_1 p^#(mark(X)) -> c_31(p^#(X)) :34 43: proper^#(add(X1, X2)) -> c_43(add^#(proper(X1), proper(X2))) -->_1 add^#(ok(X1), ok(X2)) -> c_35(add^#(X1, X2)) :33 -->_1 add^#(mark(X1), X2) -> c_34(add^#(X1, X2)) :32 -->_1 add^#(X1, mark(X2)) -> c_33(add^#(X1, X2)) :31 44: proper^#(true()) -> c_44() 45: proper^#(false()) -> c_45() 46: top^#(mark(X)) -> c_46(top^#(proper(X))) -->_1 top^#(ok(X)) -> c_47(top^#(active(X))) :47 -->_1 top^#(mark(X)) -> c_46(top^#(proper(X))) :46 47: top^#(ok(X)) -> c_47(top^#(active(X))) -->_1 top^#(ok(X)) -> c_47(top^#(active(X))) :47 -->_1 top^#(mark(X)) -> c_46(top^#(proper(X))) :46 Only the nodes {20,21,22,23,24,25,26,27,28,30,29,31,33,32,34,35,40,44,45,46,47} are reachable from nodes {20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,40,44,45,46,47} that start derivation from marked basic terms. The nodes not reachable are removed from the problem. We are left with following problem, upon which TcT provides the certificate MAYBE. Strict DPs: { fact^#(mark(X)) -> c_20(fact^#(X)) , fact^#(ok(X)) -> c_21(fact^#(X)) , if^#(mark(X1), X2, X3) -> c_22(if^#(X1, X2, X3)) , if^#(ok(X1), ok(X2), ok(X3)) -> c_23(if^#(X1, X2, X3)) , zero^#(mark(X)) -> c_24(zero^#(X)) , zero^#(ok(X)) -> c_25(zero^#(X)) , s^#(mark(X)) -> c_26(s^#(X)) , s^#(ok(X)) -> c_27(s^#(X)) , prod^#(X1, mark(X2)) -> c_28(prod^#(X1, X2)) , prod^#(mark(X1), X2) -> c_29(prod^#(X1, X2)) , prod^#(ok(X1), ok(X2)) -> c_30(prod^#(X1, X2)) , add^#(X1, mark(X2)) -> c_33(add^#(X1, X2)) , add^#(mark(X1), X2) -> c_34(add^#(X1, X2)) , add^#(ok(X1), ok(X2)) -> c_35(add^#(X1, X2)) , p^#(mark(X)) -> c_31(p^#(X)) , p^#(ok(X)) -> c_32(p^#(X)) , proper^#(0()) -> c_40() , proper^#(true()) -> c_44() , proper^#(false()) -> c_45() , top^#(mark(X)) -> c_46(top^#(proper(X))) , top^#(ok(X)) -> c_47(top^#(active(X))) } Strict Trs: { active(fact(X)) -> fact(active(X)) , active(fact(X)) -> mark(if(zero(X), s(0()), prod(X, fact(p(X))))) , 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(zero(X)) -> zero(active(X)) , active(zero(s(X))) -> mark(false()) , active(zero(0())) -> mark(true()) , active(s(X)) -> s(active(X)) , active(prod(X1, X2)) -> prod(X1, active(X2)) , active(prod(X1, X2)) -> prod(active(X1), X2) , active(prod(s(X), Y)) -> mark(add(Y, prod(X, Y))) , active(prod(0(), X)) -> mark(0()) , active(p(X)) -> p(active(X)) , active(p(s(X))) -> mark(X) , active(add(X1, X2)) -> add(X1, active(X2)) , active(add(X1, X2)) -> add(active(X1), X2) , active(add(s(X), Y)) -> mark(s(add(X, Y))) , active(add(0(), X)) -> mark(X) , fact(mark(X)) -> mark(fact(X)) , fact(ok(X)) -> ok(fact(X)) , if(mark(X1), X2, X3) -> mark(if(X1, X2, X3)) , if(ok(X1), ok(X2), ok(X3)) -> ok(if(X1, X2, X3)) , zero(mark(X)) -> mark(zero(X)) , zero(ok(X)) -> ok(zero(X)) , s(mark(X)) -> mark(s(X)) , s(ok(X)) -> ok(s(X)) , prod(X1, mark(X2)) -> mark(prod(X1, X2)) , prod(mark(X1), X2) -> mark(prod(X1, X2)) , prod(ok(X1), ok(X2)) -> ok(prod(X1, X2)) , p(mark(X)) -> mark(p(X)) , p(ok(X)) -> ok(p(X)) , add(X1, mark(X2)) -> mark(add(X1, X2)) , add(mark(X1), X2) -> mark(add(X1, X2)) , add(ok(X1), ok(X2)) -> ok(add(X1, X2)) , proper(fact(X)) -> fact(proper(X)) , proper(if(X1, X2, X3)) -> if(proper(X1), proper(X2), proper(X3)) , proper(zero(X)) -> zero(proper(X)) , proper(s(X)) -> s(proper(X)) , proper(0()) -> ok(0()) , proper(prod(X1, X2)) -> prod(proper(X1), proper(X2)) , proper(p(X)) -> p(proper(X)) , proper(add(X1, X2)) -> add(proper(X1), proper(X2)) , proper(true()) -> ok(true()) , proper(false()) -> ok(false()) , top(mark(X)) -> top(proper(X)) , top(ok(X)) -> top(active(X)) } Obligation: runtime complexity Answer: MAYBE We estimate the number of application of {17,18,19} by applications of Pre({17,18,19}) = {}. Here rules are labeled as follows: DPs: { 1: fact^#(mark(X)) -> c_20(fact^#(X)) , 2: fact^#(ok(X)) -> c_21(fact^#(X)) , 3: if^#(mark(X1), X2, X3) -> c_22(if^#(X1, X2, X3)) , 4: if^#(ok(X1), ok(X2), ok(X3)) -> c_23(if^#(X1, X2, X3)) , 5: zero^#(mark(X)) -> c_24(zero^#(X)) , 6: zero^#(ok(X)) -> c_25(zero^#(X)) , 7: s^#(mark(X)) -> c_26(s^#(X)) , 8: s^#(ok(X)) -> c_27(s^#(X)) , 9: prod^#(X1, mark(X2)) -> c_28(prod^#(X1, X2)) , 10: prod^#(mark(X1), X2) -> c_29(prod^#(X1, X2)) , 11: prod^#(ok(X1), ok(X2)) -> c_30(prod^#(X1, X2)) , 12: add^#(X1, mark(X2)) -> c_33(add^#(X1, X2)) , 13: add^#(mark(X1), X2) -> c_34(add^#(X1, X2)) , 14: add^#(ok(X1), ok(X2)) -> c_35(add^#(X1, X2)) , 15: p^#(mark(X)) -> c_31(p^#(X)) , 16: p^#(ok(X)) -> c_32(p^#(X)) , 17: proper^#(0()) -> c_40() , 18: proper^#(true()) -> c_44() , 19: proper^#(false()) -> c_45() , 20: top^#(mark(X)) -> c_46(top^#(proper(X))) , 21: top^#(ok(X)) -> c_47(top^#(active(X))) } We are left with following problem, upon which TcT provides the certificate MAYBE. Strict DPs: { fact^#(mark(X)) -> c_20(fact^#(X)) , fact^#(ok(X)) -> c_21(fact^#(X)) , if^#(mark(X1), X2, X3) -> c_22(if^#(X1, X2, X3)) , if^#(ok(X1), ok(X2), ok(X3)) -> c_23(if^#(X1, X2, X3)) , zero^#(mark(X)) -> c_24(zero^#(X)) , zero^#(ok(X)) -> c_25(zero^#(X)) , s^#(mark(X)) -> c_26(s^#(X)) , s^#(ok(X)) -> c_27(s^#(X)) , prod^#(X1, mark(X2)) -> c_28(prod^#(X1, X2)) , prod^#(mark(X1), X2) -> c_29(prod^#(X1, X2)) , prod^#(ok(X1), ok(X2)) -> c_30(prod^#(X1, X2)) , add^#(X1, mark(X2)) -> c_33(add^#(X1, X2)) , add^#(mark(X1), X2) -> c_34(add^#(X1, X2)) , add^#(ok(X1), ok(X2)) -> c_35(add^#(X1, X2)) , p^#(mark(X)) -> c_31(p^#(X)) , p^#(ok(X)) -> c_32(p^#(X)) , top^#(mark(X)) -> c_46(top^#(proper(X))) , top^#(ok(X)) -> c_47(top^#(active(X))) } Strict Trs: { active(fact(X)) -> fact(active(X)) , active(fact(X)) -> mark(if(zero(X), s(0()), prod(X, fact(p(X))))) , 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(zero(X)) -> zero(active(X)) , active(zero(s(X))) -> mark(false()) , active(zero(0())) -> mark(true()) , active(s(X)) -> s(active(X)) , active(prod(X1, X2)) -> prod(X1, active(X2)) , active(prod(X1, X2)) -> prod(active(X1), X2) , active(prod(s(X), Y)) -> mark(add(Y, prod(X, Y))) , active(prod(0(), X)) -> mark(0()) , active(p(X)) -> p(active(X)) , active(p(s(X))) -> mark(X) , active(add(X1, X2)) -> add(X1, active(X2)) , active(add(X1, X2)) -> add(active(X1), X2) , active(add(s(X), Y)) -> mark(s(add(X, Y))) , active(add(0(), X)) -> mark(X) , fact(mark(X)) -> mark(fact(X)) , fact(ok(X)) -> ok(fact(X)) , if(mark(X1), X2, X3) -> mark(if(X1, X2, X3)) , if(ok(X1), ok(X2), ok(X3)) -> ok(if(X1, X2, X3)) , zero(mark(X)) -> mark(zero(X)) , zero(ok(X)) -> ok(zero(X)) , s(mark(X)) -> mark(s(X)) , s(ok(X)) -> ok(s(X)) , prod(X1, mark(X2)) -> mark(prod(X1, X2)) , prod(mark(X1), X2) -> mark(prod(X1, X2)) , prod(ok(X1), ok(X2)) -> ok(prod(X1, X2)) , p(mark(X)) -> mark(p(X)) , p(ok(X)) -> ok(p(X)) , add(X1, mark(X2)) -> mark(add(X1, X2)) , add(mark(X1), X2) -> mark(add(X1, X2)) , add(ok(X1), ok(X2)) -> ok(add(X1, X2)) , proper(fact(X)) -> fact(proper(X)) , proper(if(X1, X2, X3)) -> if(proper(X1), proper(X2), proper(X3)) , proper(zero(X)) -> zero(proper(X)) , proper(s(X)) -> s(proper(X)) , proper(0()) -> ok(0()) , proper(prod(X1, X2)) -> prod(proper(X1), proper(X2)) , proper(p(X)) -> p(proper(X)) , proper(add(X1, X2)) -> add(proper(X1), proper(X2)) , proper(true()) -> ok(true()) , proper(false()) -> ok(false()) , top(mark(X)) -> top(proper(X)) , top(ok(X)) -> top(active(X)) } Weak DPs: { proper^#(0()) -> c_40() , proper^#(true()) -> c_44() , proper^#(false()) -> c_45() } Obligation: runtime complexity Answer: MAYBE Empty strict component of the problem is NOT empty. Arrrr..