/export/starexec/sandbox2/solver/bin/starexec_run_FirstOrder /export/starexec/sandbox2/benchmark/theBenchmark.xml /export/starexec/sandbox2/output/output_files -------------------------------------------------------------------------------- YES We consider the system theBenchmark. We are asked to determine termination of the following first-order TRS. 0 : [] --> o U11 : [o * o] --> o U12 : [o] --> o U21 : [o] --> o U31 : [o * o] --> o U32 : [o] --> o U41 : [o * o] --> o U51 : [o * o * o] --> o U52 : [o * o * o] --> o U61 : [o] --> o U71 : [o * o * o] --> o U72 : [o * o * o] --> o active : [o] --> o isNat : [o] --> o mark : [o] --> o plus : [o * o] --> o s : [o] --> o tt : [] --> o x : [o * o] --> o active(U11(tt, X)) => mark(U12(isNat(X))) active(U12(tt)) => mark(tt) active(U21(tt)) => mark(tt) active(U31(tt, X)) => mark(U32(isNat(X))) active(U32(tt)) => mark(tt) active(U41(tt, X)) => mark(X) active(U51(tt, X, Y)) => mark(U52(isNat(Y), X, Y)) active(U52(tt, X, Y)) => mark(s(plus(Y, X))) active(U61(tt)) => mark(0) active(U71(tt, X, Y)) => mark(U72(isNat(Y), X, Y)) active(U72(tt, X, Y)) => mark(plus(x(Y, X), Y)) active(isNat(0)) => mark(tt) active(isNat(plus(X, Y))) => mark(U11(isNat(X), Y)) active(isNat(s(X))) => mark(U21(isNat(X))) active(isNat(x(X, Y))) => mark(U31(isNat(X), Y)) active(plus(X, 0)) => mark(U41(isNat(X), X)) active(plus(X, s(Y))) => mark(U51(isNat(Y), Y, X)) active(x(X, 0)) => mark(U61(isNat(X))) active(x(X, s(Y))) => mark(U71(isNat(Y), Y, X)) mark(U11(X, Y)) => active(U11(mark(X), Y)) mark(tt) => active(tt) mark(U12(X)) => active(U12(mark(X))) mark(isNat(X)) => active(isNat(X)) mark(U21(X)) => active(U21(mark(X))) mark(U31(X, Y)) => active(U31(mark(X), Y)) mark(U32(X)) => active(U32(mark(X))) mark(U41(X, Y)) => active(U41(mark(X), Y)) mark(U51(X, Y, Z)) => active(U51(mark(X), Y, Z)) mark(U52(X, Y, Z)) => active(U52(mark(X), Y, Z)) mark(s(X)) => active(s(mark(X))) mark(plus(X, Y)) => active(plus(mark(X), mark(Y))) mark(U61(X)) => active(U61(mark(X))) mark(0) => active(0) mark(U71(X, Y, Z)) => active(U71(mark(X), Y, Z)) mark(U72(X, Y, Z)) => active(U72(mark(X), Y, Z)) mark(x(X, Y)) => active(x(mark(X), mark(Y))) U11(mark(X), Y) => U11(X, Y) U11(X, mark(Y)) => U11(X, Y) U11(active(X), Y) => U11(X, Y) U11(X, active(Y)) => U11(X, Y) U12(mark(X)) => U12(X) U12(active(X)) => U12(X) isNat(mark(X)) => isNat(X) isNat(active(X)) => isNat(X) U21(mark(X)) => U21(X) U21(active(X)) => U21(X) U31(mark(X), Y) => U31(X, Y) U31(X, mark(Y)) => U31(X, Y) U31(active(X), Y) => U31(X, Y) U31(X, active(Y)) => U31(X, Y) U32(mark(X)) => U32(X) U32(active(X)) => U32(X) U41(mark(X), Y) => U41(X, Y) U41(X, mark(Y)) => U41(X, Y) U41(active(X), Y) => U41(X, Y) U41(X, active(Y)) => U41(X, Y) U51(mark(X), Y, Z) => U51(X, Y, Z) U51(X, mark(Y), Z) => U51(X, Y, Z) U51(X, Y, mark(Z)) => U51(X, Y, Z) U51(active(X), Y, Z) => U51(X, Y, Z) U51(X, active(Y), Z) => U51(X, Y, Z) U51(X, Y, active(Z)) => U51(X, Y, Z) U52(mark(X), Y, Z) => U52(X, Y, Z) U52(X, mark(Y), Z) => U52(X, Y, Z) U52(X, Y, mark(Z)) => U52(X, Y, Z) U52(active(X), Y, Z) => U52(X, Y, Z) U52(X, active(Y), Z) => U52(X, Y, Z) U52(X, Y, active(Z)) => U52(X, Y, Z) s(mark(X)) => s(X) s(active(X)) => s(X) plus(mark(X), Y) => plus(X, Y) plus(X, mark(Y)) => plus(X, Y) plus(active(X), Y) => plus(X, Y) plus(X, active(Y)) => plus(X, Y) U61(mark(X)) => U61(X) U61(active(X)) => U61(X) U71(mark(X), Y, Z) => U71(X, Y, Z) U71(X, mark(Y), Z) => U71(X, Y, Z) U71(X, Y, mark(Z)) => U71(X, Y, Z) U71(active(X), Y, Z) => U71(X, Y, Z) U71(X, active(Y), Z) => U71(X, Y, Z) U71(X, Y, active(Z)) => U71(X, Y, Z) U72(mark(X), Y, Z) => U72(X, Y, Z) U72(X, mark(Y), Z) => U72(X, Y, Z) U72(X, Y, mark(Z)) => U72(X, Y, Z) U72(active(X), Y, Z) => U72(X, Y, Z) U72(X, active(Y), Z) => U72(X, Y, Z) U72(X, Y, active(Z)) => U72(X, Y, Z) x(mark(X), Y) => x(X, Y) x(X, mark(Y)) => x(X, Y) x(active(X), Y) => x(X, Y) x(X, active(Y)) => x(X, Y) We use the dependency pair framework as described in [Kop12, Ch. 6/7], with static dependency pairs (see [KusIsoSakBla09] and the adaptation for AFSMs in [Kop12, Ch. 7.8]). We thus obtain the following dependency pair problem (P_0, R_0, minimal, formative): Dependency Pairs P_0: 0] active#(U11(tt, X)) =#> mark#(U12(isNat(X))) 1] active#(U11(tt, X)) =#> U12#(isNat(X)) 2] active#(U11(tt, X)) =#> isNat#(X) 3] active#(U12(tt)) =#> mark#(tt) 4] active#(U21(tt)) =#> mark#(tt) 5] active#(U31(tt, X)) =#> mark#(U32(isNat(X))) 6] active#(U31(tt, X)) =#> U32#(isNat(X)) 7] active#(U31(tt, X)) =#> isNat#(X) 8] active#(U32(tt)) =#> mark#(tt) 9] active#(U41(tt, X)) =#> mark#(X) 10] active#(U51(tt, X, Y)) =#> mark#(U52(isNat(Y), X, Y)) 11] active#(U51(tt, X, Y)) =#> U52#(isNat(Y), X, Y) 12] active#(U51(tt, X, Y)) =#> isNat#(Y) 13] active#(U52(tt, X, Y)) =#> mark#(s(plus(Y, X))) 14] active#(U52(tt, X, Y)) =#> s#(plus(Y, X)) 15] active#(U52(tt, X, Y)) =#> plus#(Y, X) 16] active#(U61(tt)) =#> mark#(0) 17] active#(U71(tt, X, Y)) =#> mark#(U72(isNat(Y), X, Y)) 18] active#(U71(tt, X, Y)) =#> U72#(isNat(Y), X, Y) 19] active#(U71(tt, X, Y)) =#> isNat#(Y) 20] active#(U72(tt, X, Y)) =#> mark#(plus(x(Y, X), Y)) 21] active#(U72(tt, X, Y)) =#> plus#(x(Y, X), Y) 22] active#(U72(tt, X, Y)) =#> x#(Y, X) 23] active#(isNat(0)) =#> mark#(tt) 24] active#(isNat(plus(X, Y))) =#> mark#(U11(isNat(X), Y)) 25] active#(isNat(plus(X, Y))) =#> U11#(isNat(X), Y) 26] active#(isNat(plus(X, Y))) =#> isNat#(X) 27] active#(isNat(s(X))) =#> mark#(U21(isNat(X))) 28] active#(isNat(s(X))) =#> U21#(isNat(X)) 29] active#(isNat(s(X))) =#> isNat#(X) 30] active#(isNat(x(X, Y))) =#> mark#(U31(isNat(X), Y)) 31] active#(isNat(x(X, Y))) =#> U31#(isNat(X), Y) 32] active#(isNat(x(X, Y))) =#> isNat#(X) 33] active#(plus(X, 0)) =#> mark#(U41(isNat(X), X)) 34] active#(plus(X, 0)) =#> U41#(isNat(X), X) 35] active#(plus(X, 0)) =#> isNat#(X) 36] active#(plus(X, s(Y))) =#> mark#(U51(isNat(Y), Y, X)) 37] active#(plus(X, s(Y))) =#> U51#(isNat(Y), Y, X) 38] active#(plus(X, s(Y))) =#> isNat#(Y) 39] active#(x(X, 0)) =#> mark#(U61(isNat(X))) 40] active#(x(X, 0)) =#> U61#(isNat(X)) 41] active#(x(X, 0)) =#> isNat#(X) 42] active#(x(X, s(Y))) =#> mark#(U71(isNat(Y), Y, X)) 43] active#(x(X, s(Y))) =#> U71#(isNat(Y), Y, X) 44] active#(x(X, s(Y))) =#> isNat#(Y) 45] mark#(U11(X, Y)) =#> active#(U11(mark(X), Y)) 46] mark#(U11(X, Y)) =#> U11#(mark(X), Y) 47] mark#(U11(X, Y)) =#> mark#(X) 48] mark#(tt) =#> active#(tt) 49] mark#(U12(X)) =#> active#(U12(mark(X))) 50] mark#(U12(X)) =#> U12#(mark(X)) 51] mark#(U12(X)) =#> mark#(X) 52] mark#(isNat(X)) =#> active#(isNat(X)) 53] mark#(isNat(X)) =#> isNat#(X) 54] mark#(U21(X)) =#> active#(U21(mark(X))) 55] mark#(U21(X)) =#> U21#(mark(X)) 56] mark#(U21(X)) =#> mark#(X) 57] mark#(U31(X, Y)) =#> active#(U31(mark(X), Y)) 58] mark#(U31(X, Y)) =#> U31#(mark(X), Y) 59] mark#(U31(X, Y)) =#> mark#(X) 60] mark#(U32(X)) =#> active#(U32(mark(X))) 61] mark#(U32(X)) =#> U32#(mark(X)) 62] mark#(U32(X)) =#> mark#(X) 63] mark#(U41(X, Y)) =#> active#(U41(mark(X), Y)) 64] mark#(U41(X, Y)) =#> U41#(mark(X), Y) 65] mark#(U41(X, Y)) =#> mark#(X) 66] mark#(U51(X, Y, Z)) =#> active#(U51(mark(X), Y, Z)) 67] mark#(U51(X, Y, Z)) =#> U51#(mark(X), Y, Z) 68] mark#(U51(X, Y, Z)) =#> mark#(X) 69] mark#(U52(X, Y, Z)) =#> active#(U52(mark(X), Y, Z)) 70] mark#(U52(X, Y, Z)) =#> U52#(mark(X), Y, Z) 71] mark#(U52(X, Y, Z)) =#> mark#(X) 72] mark#(s(X)) =#> active#(s(mark(X))) 73] mark#(s(X)) =#> s#(mark(X)) 74] mark#(s(X)) =#> mark#(X) 75] mark#(plus(X, Y)) =#> active#(plus(mark(X), mark(Y))) 76] mark#(plus(X, Y)) =#> plus#(mark(X), mark(Y)) 77] mark#(plus(X, Y)) =#> mark#(X) 78] mark#(plus(X, Y)) =#> mark#(Y) 79] mark#(U61(X)) =#> active#(U61(mark(X))) 80] mark#(U61(X)) =#> U61#(mark(X)) 81] mark#(U61(X)) =#> mark#(X) 82] mark#(0) =#> active#(0) 83] mark#(U71(X, Y, Z)) =#> active#(U71(mark(X), Y, Z)) 84] mark#(U71(X, Y, Z)) =#> U71#(mark(X), Y, Z) 85] mark#(U71(X, Y, Z)) =#> mark#(X) 86] mark#(U72(X, Y, Z)) =#> active#(U72(mark(X), Y, Z)) 87] mark#(U72(X, Y, Z)) =#> U72#(mark(X), Y, Z) 88] mark#(U72(X, Y, Z)) =#> mark#(X) 89] mark#(x(X, Y)) =#> active#(x(mark(X), mark(Y))) 90] mark#(x(X, Y)) =#> x#(mark(X), mark(Y)) 91] mark#(x(X, Y)) =#> mark#(X) 92] mark#(x(X, Y)) =#> mark#(Y) 93] U11#(mark(X), Y) =#> U11#(X, Y) 94] U11#(X, mark(Y)) =#> U11#(X, Y) 95] U11#(active(X), Y) =#> U11#(X, Y) 96] U11#(X, active(Y)) =#> U11#(X, Y) 97] U12#(mark(X)) =#> U12#(X) 98] U12#(active(X)) =#> U12#(X) 99] isNat#(mark(X)) =#> isNat#(X) 100] isNat#(active(X)) =#> isNat#(X) 101] U21#(mark(X)) =#> U21#(X) 102] U21#(active(X)) =#> U21#(X) 103] U31#(mark(X), Y) =#> U31#(X, Y) 104] U31#(X, mark(Y)) =#> U31#(X, Y) 105] U31#(active(X), Y) =#> U31#(X, Y) 106] U31#(X, active(Y)) =#> U31#(X, Y) 107] U32#(mark(X)) =#> U32#(X) 108] U32#(active(X)) =#> U32#(X) 109] U41#(mark(X), Y) =#> U41#(X, Y) 110] U41#(X, mark(Y)) =#> U41#(X, Y) 111] U41#(active(X), Y) =#> U41#(X, Y) 112] U41#(X, active(Y)) =#> U41#(X, Y) 113] U51#(mark(X), Y, Z) =#> U51#(X, Y, Z) 114] U51#(X, mark(Y), Z) =#> U51#(X, Y, Z) 115] U51#(X, Y, mark(Z)) =#> U51#(X, Y, Z) 116] U51#(active(X), Y, Z) =#> U51#(X, Y, Z) 117] U51#(X, active(Y), Z) =#> U51#(X, Y, Z) 118] U51#(X, Y, active(Z)) =#> U51#(X, Y, Z) 119] U52#(mark(X), Y, Z) =#> U52#(X, Y, Z) 120] U52#(X, mark(Y), Z) =#> U52#(X, Y, Z) 121] U52#(X, Y, mark(Z)) =#> U52#(X, Y, Z) 122] U52#(active(X), Y, Z) =#> U52#(X, Y, Z) 123] U52#(X, active(Y), Z) =#> U52#(X, Y, Z) 124] U52#(X, Y, active(Z)) =#> U52#(X, Y, Z) 125] s#(mark(X)) =#> s#(X) 126] s#(active(X)) =#> s#(X) 127] plus#(mark(X), Y) =#> plus#(X, Y) 128] plus#(X, mark(Y)) =#> plus#(X, Y) 129] plus#(active(X), Y) =#> plus#(X, Y) 130] plus#(X, active(Y)) =#> plus#(X, Y) 131] U61#(mark(X)) =#> U61#(X) 132] U61#(active(X)) =#> U61#(X) 133] U71#(mark(X), Y, Z) =#> U71#(X, Y, Z) 134] U71#(X, mark(Y), Z) =#> U71#(X, Y, Z) 135] U71#(X, Y, mark(Z)) =#> U71#(X, Y, Z) 136] U71#(active(X), Y, Z) =#> U71#(X, Y, Z) 137] U71#(X, active(Y), Z) =#> U71#(X, Y, Z) 138] U71#(X, Y, active(Z)) =#> U71#(X, Y, Z) 139] U72#(mark(X), Y, Z) =#> U72#(X, Y, Z) 140] U72#(X, mark(Y), Z) =#> U72#(X, Y, Z) 141] U72#(X, Y, mark(Z)) =#> U72#(X, Y, Z) 142] U72#(active(X), Y, Z) =#> U72#(X, Y, Z) 143] U72#(X, active(Y), Z) =#> U72#(X, Y, Z) 144] U72#(X, Y, active(Z)) =#> U72#(X, Y, Z) 145] x#(mark(X), Y) =#> x#(X, Y) 146] x#(X, mark(Y)) =#> x#(X, Y) 147] x#(active(X), Y) =#> x#(X, Y) 148] x#(X, active(Y)) =#> x#(X, Y) Rules R_0: active(U11(tt, X)) => mark(U12(isNat(X))) active(U12(tt)) => mark(tt) active(U21(tt)) => mark(tt) active(U31(tt, X)) => mark(U32(isNat(X))) active(U32(tt)) => mark(tt) active(U41(tt, X)) => mark(X) active(U51(tt, X, Y)) => mark(U52(isNat(Y), X, Y)) active(U52(tt, X, Y)) => mark(s(plus(Y, X))) active(U61(tt)) => mark(0) active(U71(tt, X, Y)) => mark(U72(isNat(Y), X, Y)) active(U72(tt, X, Y)) => mark(plus(x(Y, X), Y)) active(isNat(0)) => mark(tt) active(isNat(plus(X, Y))) => mark(U11(isNat(X), Y)) active(isNat(s(X))) => mark(U21(isNat(X))) active(isNat(x(X, Y))) => mark(U31(isNat(X), Y)) active(plus(X, 0)) => mark(U41(isNat(X), X)) active(plus(X, s(Y))) => mark(U51(isNat(Y), Y, X)) active(x(X, 0)) => mark(U61(isNat(X))) active(x(X, s(Y))) => mark(U71(isNat(Y), Y, X)) mark(U11(X, Y)) => active(U11(mark(X), Y)) mark(tt) => active(tt) mark(U12(X)) => active(U12(mark(X))) mark(isNat(X)) => active(isNat(X)) mark(U21(X)) => active(U21(mark(X))) mark(U31(X, Y)) => active(U31(mark(X), Y)) mark(U32(X)) => active(U32(mark(X))) mark(U41(X, Y)) => active(U41(mark(X), Y)) mark(U51(X, Y, Z)) => active(U51(mark(X), Y, Z)) mark(U52(X, Y, Z)) => active(U52(mark(X), Y, Z)) mark(s(X)) => active(s(mark(X))) mark(plus(X, Y)) => active(plus(mark(X), mark(Y))) mark(U61(X)) => active(U61(mark(X))) mark(0) => active(0) mark(U71(X, Y, Z)) => active(U71(mark(X), Y, Z)) mark(U72(X, Y, Z)) => active(U72(mark(X), Y, Z)) mark(x(X, Y)) => active(x(mark(X), mark(Y))) U11(mark(X), Y) => U11(X, Y) U11(X, mark(Y)) => U11(X, Y) U11(active(X), Y) => U11(X, Y) U11(X, active(Y)) => U11(X, Y) U12(mark(X)) => U12(X) U12(active(X)) => U12(X) isNat(mark(X)) => isNat(X) isNat(active(X)) => isNat(X) U21(mark(X)) => U21(X) U21(active(X)) => U21(X) U31(mark(X), Y) => U31(X, Y) U31(X, mark(Y)) => U31(X, Y) U31(active(X), Y) => U31(X, Y) U31(X, active(Y)) => U31(X, Y) U32(mark(X)) => U32(X) U32(active(X)) => U32(X) U41(mark(X), Y) => U41(X, Y) U41(X, mark(Y)) => U41(X, Y) U41(active(X), Y) => U41(X, Y) U41(X, active(Y)) => U41(X, Y) U51(mark(X), Y, Z) => U51(X, Y, Z) U51(X, mark(Y), Z) => U51(X, Y, Z) U51(X, Y, mark(Z)) => U51(X, Y, Z) U51(active(X), Y, Z) => U51(X, Y, Z) U51(X, active(Y), Z) => U51(X, Y, Z) U51(X, Y, active(Z)) => U51(X, Y, Z) U52(mark(X), Y, Z) => U52(X, Y, Z) U52(X, mark(Y), Z) => U52(X, Y, Z) U52(X, Y, mark(Z)) => U52(X, Y, Z) U52(active(X), Y, Z) => U52(X, Y, Z) U52(X, active(Y), Z) => U52(X, Y, Z) U52(X, Y, active(Z)) => U52(X, Y, Z) s(mark(X)) => s(X) s(active(X)) => s(X) plus(mark(X), Y) => plus(X, Y) plus(X, mark(Y)) => plus(X, Y) plus(active(X), Y) => plus(X, Y) plus(X, active(Y)) => plus(X, Y) U61(mark(X)) => U61(X) U61(active(X)) => U61(X) U71(mark(X), Y, Z) => U71(X, Y, Z) U71(X, mark(Y), Z) => U71(X, Y, Z) U71(X, Y, mark(Z)) => U71(X, Y, Z) U71(active(X), Y, Z) => U71(X, Y, Z) U71(X, active(Y), Z) => U71(X, Y, Z) U71(X, Y, active(Z)) => U71(X, Y, Z) U72(mark(X), Y, Z) => U72(X, Y, Z) U72(X, mark(Y), Z) => U72(X, Y, Z) U72(X, Y, mark(Z)) => U72(X, Y, Z) U72(active(X), Y, Z) => U72(X, Y, Z) U72(X, active(Y), Z) => U72(X, Y, Z) U72(X, Y, active(Z)) => U72(X, Y, Z) x(mark(X), Y) => x(X, Y) x(X, mark(Y)) => x(X, Y) x(active(X), Y) => x(X, Y) x(X, active(Y)) => x(X, Y) Thus, the original system is terminating if (P_0, R_0, minimal, formative) is finite. We consider the dependency pair problem (P_0, R_0, minimal, formative). We place the elements of P in a dependency graph approximation G (see e.g. [Kop12, Thm. 7.27, 7.29], as follows: * 0 : 49, 50, 51 * 1 : * 2 : 99, 100 * 3 : 48 * 4 : 48 * 5 : 60, 61, 62 * 6 : * 7 : 99, 100 * 8 : 48 * 9 : 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92 * 10 : 69, 70, 71 * 11 : 120, 121, 123, 124 * 12 : 99, 100 * 13 : 72, 73, 74 * 14 : * 15 : 127, 128, 129, 130 * 16 : 82 * 17 : 86, 87, 88 * 18 : 140, 141, 143, 144 * 19 : 99, 100 * 20 : 75, 76, 77, 78 * 21 : 128, 130 * 22 : 145, 146, 147, 148 * 23 : 48 * 24 : 45, 46, 47 * 25 : 94, 96 * 26 : 99, 100 * 27 : 54, 55, 56 * 28 : * 29 : 99, 100 * 30 : 57, 58, 59 * 31 : 104, 106 * 32 : 99, 100 * 33 : 63, 64, 65 * 34 : 110, 112 * 35 : 99, 100 * 36 : 66, 67, 68 * 37 : 114, 115, 117, 118 * 38 : 99, 100 * 39 : 79, 80, 81 * 40 : * 41 : 99, 100 * 42 : 83, 84, 85 * 43 : 134, 135, 137, 138 * 44 : 99, 100 * 45 : 0, 1, 2 * 46 : 93, 94, 95, 96 * 47 : 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92 * 48 : * 49 : 3 * 50 : 97, 98 * 51 : 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92 * 52 : 23, 24, 25, 26, 27, 28, 29, 30, 31, 32 * 53 : 99, 100 * 54 : 4 * 55 : 101, 102 * 56 : 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92 * 57 : 5, 6, 7 * 58 : 103, 104, 105, 106 * 59 : 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92 * 60 : 8 * 61 : 107, 108 * 62 : 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92 * 63 : 9 * 64 : 109, 110, 111, 112 * 65 : 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92 * 66 : 10, 11, 12 * 67 : 113, 114, 115, 116, 117, 118 * 68 : 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92 * 69 : 13, 14, 15 * 70 : 119, 120, 121, 122, 123, 124 * 71 : 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92 * 72 : * 73 : 125, 126 * 74 : 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92 * 75 : 33, 34, 35, 36, 37, 38 * 76 : 127, 128, 129, 130 * 77 : 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92 * 78 : 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92 * 79 : 16 * 80 : 131, 132 * 81 : 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92 * 82 : * 83 : 17, 18, 19 * 84 : 133, 134, 135, 136, 137, 138 * 85 : 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92 * 86 : 20, 21, 22 * 87 : 139, 140, 141, 142, 143, 144 * 88 : 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92 * 89 : 39, 40, 41, 42, 43, 44 * 90 : 145, 146, 147, 148 * 91 : 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92 * 92 : 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92 * 93 : 93, 94, 95, 96 * 94 : 93, 94, 95, 96 * 95 : 93, 94, 95, 96 * 96 : 93, 94, 95, 96 * 97 : 97, 98 * 98 : 97, 98 * 99 : 99, 100 * 100 : 99, 100 * 101 : 101, 102 * 102 : 101, 102 * 103 : 103, 104, 105, 106 * 104 : 103, 104, 105, 106 * 105 : 103, 104, 105, 106 * 106 : 103, 104, 105, 106 * 107 : 107, 108 * 108 : 107, 108 * 109 : 109, 110, 111, 112 * 110 : 109, 110, 111, 112 * 111 : 109, 110, 111, 112 * 112 : 109, 110, 111, 112 * 113 : 113, 114, 115, 116, 117, 118 * 114 : 113, 114, 115, 116, 117, 118 * 115 : 113, 114, 115, 116, 117, 118 * 116 : 113, 114, 115, 116, 117, 118 * 117 : 113, 114, 115, 116, 117, 118 * 118 : 113, 114, 115, 116, 117, 118 * 119 : 119, 120, 121, 122, 123, 124 * 120 : 119, 120, 121, 122, 123, 124 * 121 : 119, 120, 121, 122, 123, 124 * 122 : 119, 120, 121, 122, 123, 124 * 123 : 119, 120, 121, 122, 123, 124 * 124 : 119, 120, 121, 122, 123, 124 * 125 : 125, 126 * 126 : 125, 126 * 127 : 127, 128, 129, 130 * 128 : 127, 128, 129, 130 * 129 : 127, 128, 129, 130 * 130 : 127, 128, 129, 130 * 131 : 131, 132 * 132 : 131, 132 * 133 : 133, 134, 135, 136, 137, 138 * 134 : 133, 134, 135, 136, 137, 138 * 135 : 133, 134, 135, 136, 137, 138 * 136 : 133, 134, 135, 136, 137, 138 * 137 : 133, 134, 135, 136, 137, 138 * 138 : 133, 134, 135, 136, 137, 138 * 139 : 139, 140, 141, 142, 143, 144 * 140 : 139, 140, 141, 142, 143, 144 * 141 : 139, 140, 141, 142, 143, 144 * 142 : 139, 140, 141, 142, 143, 144 * 143 : 139, 140, 141, 142, 143, 144 * 144 : 139, 140, 141, 142, 143, 144 * 145 : 145, 146, 147, 148 * 146 : 145, 146, 147, 148 * 147 : 145, 146, 147, 148 * 148 : 145, 146, 147, 148 This graph has the following strongly connected components: P_1: active#(U11(tt, X)) =#> mark#(U12(isNat(X))) active#(U31(tt, X)) =#> mark#(U32(isNat(X))) active#(U41(tt, X)) =#> mark#(X) active#(U51(tt, X, Y)) =#> mark#(U52(isNat(Y), X, Y)) active#(U52(tt, X, Y)) =#> mark#(s(plus(Y, X))) active#(U71(tt, X, Y)) =#> mark#(U72(isNat(Y), X, Y)) active#(U72(tt, X, Y)) =#> mark#(plus(x(Y, X), Y)) active#(isNat(plus(X, Y))) =#> mark#(U11(isNat(X), Y)) active#(isNat(s(X))) =#> mark#(U21(isNat(X))) active#(isNat(x(X, Y))) =#> mark#(U31(isNat(X), Y)) active#(plus(X, 0)) =#> mark#(U41(isNat(X), X)) active#(plus(X, s(Y))) =#> mark#(U51(isNat(Y), Y, X)) active#(x(X, 0)) =#> mark#(U61(isNat(X))) active#(x(X, s(Y))) =#> mark#(U71(isNat(Y), Y, X)) mark#(U11(X, Y)) =#> active#(U11(mark(X), Y)) mark#(U11(X, Y)) =#> mark#(X) mark#(U12(X)) =#> mark#(X) mark#(isNat(X)) =#> active#(isNat(X)) mark#(U21(X)) =#> mark#(X) mark#(U31(X, Y)) =#> active#(U31(mark(X), Y)) mark#(U31(X, Y)) =#> mark#(X) mark#(U32(X)) =#> mark#(X) mark#(U41(X, Y)) =#> active#(U41(mark(X), Y)) mark#(U41(X, Y)) =#> mark#(X) mark#(U51(X, Y, Z)) =#> active#(U51(mark(X), Y, Z)) mark#(U51(X, Y, Z)) =#> mark#(X) mark#(U52(X, Y, Z)) =#> active#(U52(mark(X), Y, Z)) mark#(U52(X, Y, Z)) =#> mark#(X) mark#(s(X)) =#> mark#(X) mark#(plus(X, Y)) =#> active#(plus(mark(X), mark(Y))) mark#(plus(X, Y)) =#> mark#(X) mark#(plus(X, Y)) =#> mark#(Y) mark#(U61(X)) =#> mark#(X) mark#(U71(X, Y, Z)) =#> active#(U71(mark(X), Y, Z)) mark#(U71(X, Y, Z)) =#> mark#(X) mark#(U72(X, Y, Z)) =#> active#(U72(mark(X), Y, Z)) mark#(U72(X, Y, Z)) =#> mark#(X) mark#(x(X, Y)) =#> active#(x(mark(X), mark(Y))) mark#(x(X, Y)) =#> mark#(X) mark#(x(X, Y)) =#> mark#(Y) P_2: U11#(mark(X), Y) =#> U11#(X, Y) U11#(X, mark(Y)) =#> U11#(X, Y) U11#(active(X), Y) =#> U11#(X, Y) U11#(X, active(Y)) =#> U11#(X, Y) P_3: U12#(mark(X)) =#> U12#(X) U12#(active(X)) =#> U12#(X) P_4: isNat#(mark(X)) =#> isNat#(X) isNat#(active(X)) =#> isNat#(X) P_5: U21#(mark(X)) =#> U21#(X) U21#(active(X)) =#> U21#(X) P_6: U31#(mark(X), Y) =#> U31#(X, Y) U31#(X, mark(Y)) =#> U31#(X, Y) U31#(active(X), Y) =#> U31#(X, Y) U31#(X, active(Y)) =#> U31#(X, Y) P_7: U32#(mark(X)) =#> U32#(X) U32#(active(X)) =#> U32#(X) P_8: U41#(mark(X), Y) =#> U41#(X, Y) U41#(X, mark(Y)) =#> U41#(X, Y) U41#(active(X), Y) =#> U41#(X, Y) U41#(X, active(Y)) =#> U41#(X, Y) P_9: U51#(mark(X), Y, Z) =#> U51#(X, Y, Z) U51#(X, mark(Y), Z) =#> U51#(X, Y, Z) U51#(X, Y, mark(Z)) =#> U51#(X, Y, Z) U51#(active(X), Y, Z) =#> U51#(X, Y, Z) U51#(X, active(Y), Z) =#> U51#(X, Y, Z) U51#(X, Y, active(Z)) =#> U51#(X, Y, Z) P_10: U52#(mark(X), Y, Z) =#> U52#(X, Y, Z) U52#(X, mark(Y), Z) =#> U52#(X, Y, Z) U52#(X, Y, mark(Z)) =#> U52#(X, Y, Z) U52#(active(X), Y, Z) =#> U52#(X, Y, Z) U52#(X, active(Y), Z) =#> U52#(X, Y, Z) U52#(X, Y, active(Z)) =#> U52#(X, Y, Z) P_11: s#(mark(X)) =#> s#(X) s#(active(X)) =#> s#(X) P_12: plus#(mark(X), Y) =#> plus#(X, Y) plus#(X, mark(Y)) =#> plus#(X, Y) plus#(active(X), Y) =#> plus#(X, Y) plus#(X, active(Y)) =#> plus#(X, Y) P_13: U61#(mark(X)) =#> U61#(X) U61#(active(X)) =#> U61#(X) P_14: U71#(mark(X), Y, Z) =#> U71#(X, Y, Z) U71#(X, mark(Y), Z) =#> U71#(X, Y, Z) U71#(X, Y, mark(Z)) =#> U71#(X, Y, Z) U71#(active(X), Y, Z) =#> U71#(X, Y, Z) U71#(X, active(Y), Z) =#> U71#(X, Y, Z) U71#(X, Y, active(Z)) =#> U71#(X, Y, Z) P_15: U72#(mark(X), Y, Z) =#> U72#(X, Y, Z) U72#(X, mark(Y), Z) =#> U72#(X, Y, Z) U72#(X, Y, mark(Z)) =#> U72#(X, Y, Z) U72#(active(X), Y, Z) =#> U72#(X, Y, Z) U72#(X, active(Y), Z) =#> U72#(X, Y, Z) U72#(X, Y, active(Z)) =#> U72#(X, Y, Z) P_16: x#(mark(X), Y) =#> x#(X, Y) x#(X, mark(Y)) =#> x#(X, Y) x#(active(X), Y) =#> x#(X, Y) x#(X, active(Y)) =#> x#(X, Y) By [Kop12, Thm. 7.31], we may replace any dependency pair problem (P_0, R_0, m, f) by (P_1, R_0, m, f), (P_2, R_0, m, f), (P_3, R_0, m, f), (P_4, R_0, m, f), (P_5, R_0, m, f), (P_6, R_0, m, f), (P_7, R_0, m, f), (P_8, R_0, m, f), (P_9, R_0, m, f), (P_10, R_0, m, f), (P_11, R_0, m, f), (P_12, R_0, m, f), (P_13, R_0, m, f), (P_14, R_0, m, f), (P_15, R_0, m, f) and (P_16, R_0, m, f). Thus, the original system is terminating if each of (P_1, R_0, minimal, formative), (P_2, R_0, minimal, formative), (P_3, R_0, minimal, formative), (P_4, R_0, minimal, formative), (P_5, R_0, minimal, formative), (P_6, R_0, minimal, formative), (P_7, R_0, minimal, formative), (P_8, R_0, minimal, formative), (P_9, R_0, minimal, formative), (P_10, R_0, minimal, formative), (P_11, R_0, minimal, formative), (P_12, R_0, minimal, formative), (P_13, R_0, minimal, formative), (P_14, R_0, minimal, formative), (P_15, R_0, minimal, formative) and (P_16, R_0, minimal, formative) is finite. We consider the dependency pair problem (P_16, R_0, minimal, formative). We apply the subterm criterion with the following projection function: nu(x#) = 1 Thus, we can orient the dependency pairs as follows: nu(x#(mark(X), Y)) = mark(X) |> X = nu(x#(X, Y)) nu(x#(X, mark(Y))) = X = X = nu(x#(X, Y)) nu(x#(active(X), Y)) = active(X) |> X = nu(x#(X, Y)) nu(x#(X, active(Y))) = X = X = nu(x#(X, Y)) By [Kop12, Thm. 7.35], we may replace a dependency pair problem (P_16, R_0, minimal, f) by (P_17, R_0, minimal, f), where P_17 contains: x#(X, mark(Y)) =#> x#(X, Y) x#(X, active(Y)) =#> x#(X, Y) Thus, the original system is terminating if each of (P_1, R_0, minimal, formative), (P_2, R_0, minimal, formative), (P_3, R_0, minimal, formative), (P_4, R_0, minimal, formative), (P_5, R_0, minimal, formative), (P_6, R_0, minimal, formative), (P_7, R_0, minimal, formative), (P_8, R_0, minimal, formative), (P_9, R_0, minimal, formative), (P_10, R_0, minimal, formative), (P_11, R_0, minimal, formative), (P_12, R_0, minimal, formative), (P_13, R_0, minimal, formative), (P_14, R_0, minimal, formative), (P_15, R_0, minimal, formative) and (P_17, R_0, minimal, formative) is finite. We consider the dependency pair problem (P_17, R_0, minimal, formative). We apply the subterm criterion with the following projection function: nu(x#) = 2 Thus, we can orient the dependency pairs as follows: nu(x#(X, mark(Y))) = mark(Y) |> Y = nu(x#(X, Y)) nu(x#(X, active(Y))) = active(Y) |> Y = nu(x#(X, Y)) By [Kop12, Thm. 7.35], we may replace a dependency pair problem (P_17, R_0, minimal, f) by ({}, R_0, minimal, f). By the empty set processor [Kop12, Thm. 7.15] this problem may be immediately removed. Thus, the original system is terminating if each of (P_1, R_0, minimal, formative), (P_2, R_0, minimal, formative), (P_3, R_0, minimal, formative), (P_4, R_0, minimal, formative), (P_5, R_0, minimal, formative), (P_6, R_0, minimal, formative), (P_7, R_0, minimal, formative), (P_8, R_0, minimal, formative), (P_9, R_0, minimal, formative), (P_10, R_0, minimal, formative), (P_11, R_0, minimal, formative), (P_12, R_0, minimal, formative), (P_13, R_0, minimal, formative), (P_14, R_0, minimal, formative) and (P_15, R_0, minimal, formative) is finite. We consider the dependency pair problem (P_15, R_0, minimal, formative). We apply the subterm criterion with the following projection function: nu(U72#) = 1 Thus, we can orient the dependency pairs as follows: nu(U72#(mark(X), Y, Z)) = mark(X) |> X = nu(U72#(X, Y, Z)) nu(U72#(X, mark(Y), Z)) = X = X = nu(U72#(X, Y, Z)) nu(U72#(X, Y, mark(Z))) = X = X = nu(U72#(X, Y, Z)) nu(U72#(active(X), Y, Z)) = active(X) |> X = nu(U72#(X, Y, Z)) nu(U72#(X, active(Y), Z)) = X = X = nu(U72#(X, Y, Z)) nu(U72#(X, Y, active(Z))) = X = X = nu(U72#(X, Y, Z)) By [Kop12, Thm. 7.35], we may replace a dependency pair problem (P_15, R_0, minimal, f) by (P_18, R_0, minimal, f), where P_18 contains: U72#(X, mark(Y), Z) =#> U72#(X, Y, Z) U72#(X, Y, mark(Z)) =#> U72#(X, Y, Z) U72#(X, active(Y), Z) =#> U72#(X, Y, Z) U72#(X, Y, active(Z)) =#> U72#(X, Y, Z) Thus, the original system is terminating if each of (P_1, R_0, minimal, formative), (P_2, R_0, minimal, formative), (P_3, R_0, minimal, formative), (P_4, R_0, minimal, formative), (P_5, R_0, minimal, formative), (P_6, R_0, minimal, formative), (P_7, R_0, minimal, formative), (P_8, R_0, minimal, formative), (P_9, R_0, minimal, formative), (P_10, R_0, minimal, formative), (P_11, R_0, minimal, formative), (P_12, R_0, minimal, formative), (P_13, R_0, minimal, formative), (P_14, R_0, minimal, formative) and (P_18, R_0, minimal, formative) is finite. We consider the dependency pair problem (P_18, R_0, minimal, formative). We apply the subterm criterion with the following projection function: nu(U72#) = 2 Thus, we can orient the dependency pairs as follows: nu(U72#(X, mark(Y), Z)) = mark(Y) |> Y = nu(U72#(X, Y, Z)) nu(U72#(X, Y, mark(Z))) = Y = Y = nu(U72#(X, Y, Z)) nu(U72#(X, active(Y), Z)) = active(Y) |> Y = nu(U72#(X, Y, Z)) nu(U72#(X, Y, active(Z))) = Y = Y = nu(U72#(X, Y, Z)) By [Kop12, Thm. 7.35], we may replace a dependency pair problem (P_18, R_0, minimal, f) by (P_19, R_0, minimal, f), where P_19 contains: U72#(X, Y, mark(Z)) =#> U72#(X, Y, Z) U72#(X, Y, active(Z)) =#> U72#(X, Y, Z) Thus, the original system is terminating if each of (P_1, R_0, minimal, formative), (P_2, R_0, minimal, formative), (P_3, R_0, minimal, formative), (P_4, R_0, minimal, formative), (P_5, R_0, minimal, formative), (P_6, R_0, minimal, formative), (P_7, R_0, minimal, formative), (P_8, R_0, minimal, formative), (P_9, R_0, minimal, formative), (P_10, R_0, minimal, formative), (P_11, R_0, minimal, formative), (P_12, R_0, minimal, formative), (P_13, R_0, minimal, formative), (P_14, R_0, minimal, formative) and (P_19, R_0, minimal, formative) is finite. We consider the dependency pair problem (P_19, R_0, minimal, formative). We apply the subterm criterion with the following projection function: nu(U72#) = 3 Thus, we can orient the dependency pairs as follows: nu(U72#(X, Y, mark(Z))) = mark(Z) |> Z = nu(U72#(X, Y, Z)) nu(U72#(X, Y, active(Z))) = active(Z) |> Z = nu(U72#(X, Y, Z)) By [Kop12, Thm. 7.35], we may replace a dependency pair problem (P_19, R_0, minimal, f) by ({}, R_0, minimal, f). By the empty set processor [Kop12, Thm. 7.15] this problem may be immediately removed. Thus, the original system is terminating if each of (P_1, R_0, minimal, formative), (P_2, R_0, minimal, formative), (P_3, R_0, minimal, formative), (P_4, R_0, minimal, formative), (P_5, R_0, minimal, formative), (P_6, R_0, minimal, formative), (P_7, R_0, minimal, formative), (P_8, R_0, minimal, formative), (P_9, R_0, minimal, formative), (P_10, R_0, minimal, formative), (P_11, R_0, minimal, formative), (P_12, R_0, minimal, formative), (P_13, R_0, minimal, formative) and (P_14, R_0, minimal, formative) is finite. We consider the dependency pair problem (P_14, R_0, minimal, formative). We apply the subterm criterion with the following projection function: nu(U71#) = 1 Thus, we can orient the dependency pairs as follows: nu(U71#(mark(X), Y, Z)) = mark(X) |> X = nu(U71#(X, Y, Z)) nu(U71#(X, mark(Y), Z)) = X = X = nu(U71#(X, Y, Z)) nu(U71#(X, Y, mark(Z))) = X = X = nu(U71#(X, Y, Z)) nu(U71#(active(X), Y, Z)) = active(X) |> X = nu(U71#(X, Y, Z)) nu(U71#(X, active(Y), Z)) = X = X = nu(U71#(X, Y, Z)) nu(U71#(X, Y, active(Z))) = X = X = nu(U71#(X, Y, Z)) By [Kop12, Thm. 7.35], we may replace a dependency pair problem (P_14, R_0, minimal, f) by (P_20, R_0, minimal, f), where P_20 contains: U71#(X, mark(Y), Z) =#> U71#(X, Y, Z) U71#(X, Y, mark(Z)) =#> U71#(X, Y, Z) U71#(X, active(Y), Z) =#> U71#(X, Y, Z) U71#(X, Y, active(Z)) =#> U71#(X, Y, Z) Thus, the original system is terminating if each of (P_1, R_0, minimal, formative), (P_2, R_0, minimal, formative), (P_3, R_0, minimal, formative), (P_4, R_0, minimal, formative), (P_5, R_0, minimal, formative), (P_6, R_0, minimal, formative), (P_7, R_0, minimal, formative), (P_8, R_0, minimal, formative), (P_9, R_0, minimal, formative), (P_10, R_0, minimal, formative), (P_11, R_0, minimal, formative), (P_12, R_0, minimal, formative), (P_13, R_0, minimal, formative) and (P_20, R_0, minimal, formative) is finite. We consider the dependency pair problem (P_20, R_0, minimal, formative). We apply the subterm criterion with the following projection function: nu(U71#) = 2 Thus, we can orient the dependency pairs as follows: nu(U71#(X, mark(Y), Z)) = mark(Y) |> Y = nu(U71#(X, Y, Z)) nu(U71#(X, Y, mark(Z))) = Y = Y = nu(U71#(X, Y, Z)) nu(U71#(X, active(Y), Z)) = active(Y) |> Y = nu(U71#(X, Y, Z)) nu(U71#(X, Y, active(Z))) = Y = Y = nu(U71#(X, Y, Z)) By [Kop12, Thm. 7.35], we may replace a dependency pair problem (P_20, R_0, minimal, f) by (P_21, R_0, minimal, f), where P_21 contains: U71#(X, Y, mark(Z)) =#> U71#(X, Y, Z) U71#(X, Y, active(Z)) =#> U71#(X, Y, Z) Thus, the original system is terminating if each of (P_1, R_0, minimal, formative), (P_2, R_0, minimal, formative), (P_3, R_0, minimal, formative), (P_4, R_0, minimal, formative), (P_5, R_0, minimal, formative), (P_6, R_0, minimal, formative), (P_7, R_0, minimal, formative), (P_8, R_0, minimal, formative), (P_9, R_0, minimal, formative), (P_10, R_0, minimal, formative), (P_11, R_0, minimal, formative), (P_12, R_0, minimal, formative), (P_13, R_0, minimal, formative) and (P_21, R_0, minimal, formative) is finite. We consider the dependency pair problem (P_21, R_0, minimal, formative). We apply the subterm criterion with the following projection function: nu(U71#) = 3 Thus, we can orient the dependency pairs as follows: nu(U71#(X, Y, mark(Z))) = mark(Z) |> Z = nu(U71#(X, Y, Z)) nu(U71#(X, Y, active(Z))) = active(Z) |> Z = nu(U71#(X, Y, Z)) By [Kop12, Thm. 7.35], we may replace a dependency pair problem (P_21, R_0, minimal, f) by ({}, R_0, minimal, f). By the empty set processor [Kop12, Thm. 7.15] this problem may be immediately removed. Thus, the original system is terminating if each of (P_1, R_0, minimal, formative), (P_2, R_0, minimal, formative), (P_3, R_0, minimal, formative), (P_4, R_0, minimal, formative), (P_5, R_0, minimal, formative), (P_6, R_0, minimal, formative), (P_7, R_0, minimal, formative), (P_8, R_0, minimal, formative), (P_9, R_0, minimal, formative), (P_10, R_0, minimal, formative), (P_11, R_0, minimal, formative), (P_12, R_0, minimal, formative) and (P_13, R_0, minimal, formative) is finite. We consider the dependency pair problem (P_13, R_0, minimal, formative). We apply the subterm criterion with the following projection function: nu(U61#) = 1 Thus, we can orient the dependency pairs as follows: nu(U61#(mark(X))) = mark(X) |> X = nu(U61#(X)) nu(U61#(active(X))) = active(X) |> X = nu(U61#(X)) By [Kop12, Thm. 7.35], we may replace a dependency pair problem (P_13, R_0, minimal, f) by ({}, R_0, minimal, f). By the empty set processor [Kop12, Thm. 7.15] this problem may be immediately removed. Thus, the original system is terminating if each of (P_1, R_0, minimal, formative), (P_2, R_0, minimal, formative), (P_3, R_0, minimal, formative), (P_4, R_0, minimal, formative), (P_5, R_0, minimal, formative), (P_6, R_0, minimal, formative), (P_7, R_0, minimal, formative), (P_8, R_0, minimal, formative), (P_9, R_0, minimal, formative), (P_10, R_0, minimal, formative), (P_11, R_0, minimal, formative) and (P_12, R_0, minimal, formative) is finite. We consider the dependency pair problem (P_12, R_0, minimal, formative). We apply the subterm criterion with the following projection function: nu(plus#) = 1 Thus, we can orient the dependency pairs as follows: nu(plus#(mark(X), Y)) = mark(X) |> X = nu(plus#(X, Y)) nu(plus#(X, mark(Y))) = X = X = nu(plus#(X, Y)) nu(plus#(active(X), Y)) = active(X) |> X = nu(plus#(X, Y)) nu(plus#(X, active(Y))) = X = X = nu(plus#(X, Y)) By [Kop12, Thm. 7.35], we may replace a dependency pair problem (P_12, R_0, minimal, f) by (P_22, R_0, minimal, f), where P_22 contains: plus#(X, mark(Y)) =#> plus#(X, Y) plus#(X, active(Y)) =#> plus#(X, Y) Thus, the original system is terminating if each of (P_1, R_0, minimal, formative), (P_2, R_0, minimal, formative), (P_3, R_0, minimal, formative), (P_4, R_0, minimal, formative), (P_5, R_0, minimal, formative), (P_6, R_0, minimal, formative), (P_7, R_0, minimal, formative), (P_8, R_0, minimal, formative), (P_9, R_0, minimal, formative), (P_10, R_0, minimal, formative), (P_11, R_0, minimal, formative) and (P_22, R_0, minimal, formative) is finite. We consider the dependency pair problem (P_22, R_0, minimal, formative). We apply the subterm criterion with the following projection function: nu(plus#) = 2 Thus, we can orient the dependency pairs as follows: nu(plus#(X, mark(Y))) = mark(Y) |> Y = nu(plus#(X, Y)) nu(plus#(X, active(Y))) = active(Y) |> Y = nu(plus#(X, Y)) By [Kop12, Thm. 7.35], we may replace a dependency pair problem (P_22, R_0, minimal, f) by ({}, R_0, minimal, f). By the empty set processor [Kop12, Thm. 7.15] this problem may be immediately removed. Thus, the original system is terminating if each of (P_1, R_0, minimal, formative), (P_2, R_0, minimal, formative), (P_3, R_0, minimal, formative), (P_4, R_0, minimal, formative), (P_5, R_0, minimal, formative), (P_6, R_0, minimal, formative), (P_7, R_0, minimal, formative), (P_8, R_0, minimal, formative), (P_9, R_0, minimal, formative), (P_10, R_0, minimal, formative) and (P_11, R_0, minimal, formative) is finite. We consider the dependency pair problem (P_11, R_0, minimal, formative). We apply the subterm criterion with the following projection function: nu(s#) = 1 Thus, we can orient the dependency pairs as follows: nu(s#(mark(X))) = mark(X) |> X = nu(s#(X)) nu(s#(active(X))) = active(X) |> X = nu(s#(X)) By [Kop12, Thm. 7.35], we may replace a dependency pair problem (P_11, R_0, minimal, f) by ({}, R_0, minimal, f). By the empty set processor [Kop12, Thm. 7.15] this problem may be immediately removed. Thus, the original system is terminating if each of (P_1, R_0, minimal, formative), (P_2, R_0, minimal, formative), (P_3, R_0, minimal, formative), (P_4, R_0, minimal, formative), (P_5, R_0, minimal, formative), (P_6, R_0, minimal, formative), (P_7, R_0, minimal, formative), (P_8, R_0, minimal, formative), (P_9, R_0, minimal, formative) and (P_10, R_0, minimal, formative) is finite. We consider the dependency pair problem (P_10, R_0, minimal, formative). We apply the subterm criterion with the following projection function: nu(U52#) = 1 Thus, we can orient the dependency pairs as follows: nu(U52#(mark(X), Y, Z)) = mark(X) |> X = nu(U52#(X, Y, Z)) nu(U52#(X, mark(Y), Z)) = X = X = nu(U52#(X, Y, Z)) nu(U52#(X, Y, mark(Z))) = X = X = nu(U52#(X, Y, Z)) nu(U52#(active(X), Y, Z)) = active(X) |> X = nu(U52#(X, Y, Z)) nu(U52#(X, active(Y), Z)) = X = X = nu(U52#(X, Y, Z)) nu(U52#(X, Y, active(Z))) = X = X = nu(U52#(X, Y, Z)) By [Kop12, Thm. 7.35], we may replace a dependency pair problem (P_10, R_0, minimal, f) by (P_23, R_0, minimal, f), where P_23 contains: U52#(X, mark(Y), Z) =#> U52#(X, Y, Z) U52#(X, Y, mark(Z)) =#> U52#(X, Y, Z) U52#(X, active(Y), Z) =#> U52#(X, Y, Z) U52#(X, Y, active(Z)) =#> U52#(X, Y, Z) Thus, the original system is terminating if each of (P_1, R_0, minimal, formative), (P_2, R_0, minimal, formative), (P_3, R_0, minimal, formative), (P_4, R_0, minimal, formative), (P_5, R_0, minimal, formative), (P_6, R_0, minimal, formative), (P_7, R_0, minimal, formative), (P_8, R_0, minimal, formative), (P_9, R_0, minimal, formative) and (P_23, R_0, minimal, formative) is finite. We consider the dependency pair problem (P_23, R_0, minimal, formative). We apply the subterm criterion with the following projection function: nu(U52#) = 2 Thus, we can orient the dependency pairs as follows: nu(U52#(X, mark(Y), Z)) = mark(Y) |> Y = nu(U52#(X, Y, Z)) nu(U52#(X, Y, mark(Z))) = Y = Y = nu(U52#(X, Y, Z)) nu(U52#(X, active(Y), Z)) = active(Y) |> Y = nu(U52#(X, Y, Z)) nu(U52#(X, Y, active(Z))) = Y = Y = nu(U52#(X, Y, Z)) By [Kop12, Thm. 7.35], we may replace a dependency pair problem (P_23, R_0, minimal, f) by (P_24, R_0, minimal, f), where P_24 contains: U52#(X, Y, mark(Z)) =#> U52#(X, Y, Z) U52#(X, Y, active(Z)) =#> U52#(X, Y, Z) Thus, the original system is terminating if each of (P_1, R_0, minimal, formative), (P_2, R_0, minimal, formative), (P_3, R_0, minimal, formative), (P_4, R_0, minimal, formative), (P_5, R_0, minimal, formative), (P_6, R_0, minimal, formative), (P_7, R_0, minimal, formative), (P_8, R_0, minimal, formative), (P_9, R_0, minimal, formative) and (P_24, R_0, minimal, formative) is finite. We consider the dependency pair problem (P_24, R_0, minimal, formative). We apply the subterm criterion with the following projection function: nu(U52#) = 3 Thus, we can orient the dependency pairs as follows: nu(U52#(X, Y, mark(Z))) = mark(Z) |> Z = nu(U52#(X, Y, Z)) nu(U52#(X, Y, active(Z))) = active(Z) |> Z = nu(U52#(X, Y, Z)) By [Kop12, Thm. 7.35], we may replace a dependency pair problem (P_24, R_0, minimal, f) by ({}, R_0, minimal, f). By the empty set processor [Kop12, Thm. 7.15] this problem may be immediately removed. Thus, the original system is terminating if each of (P_1, R_0, minimal, formative), (P_2, R_0, minimal, formative), (P_3, R_0, minimal, formative), (P_4, R_0, minimal, formative), (P_5, R_0, minimal, formative), (P_6, R_0, minimal, formative), (P_7, R_0, minimal, formative), (P_8, R_0, minimal, formative) and (P_9, R_0, minimal, formative) is finite. We consider the dependency pair problem (P_9, R_0, minimal, formative). We apply the subterm criterion with the following projection function: nu(U51#) = 1 Thus, we can orient the dependency pairs as follows: nu(U51#(mark(X), Y, Z)) = mark(X) |> X = nu(U51#(X, Y, Z)) nu(U51#(X, mark(Y), Z)) = X = X = nu(U51#(X, Y, Z)) nu(U51#(X, Y, mark(Z))) = X = X = nu(U51#(X, Y, Z)) nu(U51#(active(X), Y, Z)) = active(X) |> X = nu(U51#(X, Y, Z)) nu(U51#(X, active(Y), Z)) = X = X = nu(U51#(X, Y, Z)) nu(U51#(X, Y, active(Z))) = X = X = nu(U51#(X, Y, Z)) By [Kop12, Thm. 7.35], we may replace a dependency pair problem (P_9, R_0, minimal, f) by (P_25, R_0, minimal, f), where P_25 contains: U51#(X, mark(Y), Z) =#> U51#(X, Y, Z) U51#(X, Y, mark(Z)) =#> U51#(X, Y, Z) U51#(X, active(Y), Z) =#> U51#(X, Y, Z) U51#(X, Y, active(Z)) =#> U51#(X, Y, Z) Thus, the original system is terminating if each of (P_1, R_0, minimal, formative), (P_2, R_0, minimal, formative), (P_3, R_0, minimal, formative), (P_4, R_0, minimal, formative), (P_5, R_0, minimal, formative), (P_6, R_0, minimal, formative), (P_7, R_0, minimal, formative), (P_8, R_0, minimal, formative) and (P_25, R_0, minimal, formative) is finite. We consider the dependency pair problem (P_25, R_0, minimal, formative). We apply the subterm criterion with the following projection function: nu(U51#) = 2 Thus, we can orient the dependency pairs as follows: nu(U51#(X, mark(Y), Z)) = mark(Y) |> Y = nu(U51#(X, Y, Z)) nu(U51#(X, Y, mark(Z))) = Y = Y = nu(U51#(X, Y, Z)) nu(U51#(X, active(Y), Z)) = active(Y) |> Y = nu(U51#(X, Y, Z)) nu(U51#(X, Y, active(Z))) = Y = Y = nu(U51#(X, Y, Z)) By [Kop12, Thm. 7.35], we may replace a dependency pair problem (P_25, R_0, minimal, f) by (P_26, R_0, minimal, f), where P_26 contains: U51#(X, Y, mark(Z)) =#> U51#(X, Y, Z) U51#(X, Y, active(Z)) =#> U51#(X, Y, Z) Thus, the original system is terminating if each of (P_1, R_0, minimal, formative), (P_2, R_0, minimal, formative), (P_3, R_0, minimal, formative), (P_4, R_0, minimal, formative), (P_5, R_0, minimal, formative), (P_6, R_0, minimal, formative), (P_7, R_0, minimal, formative), (P_8, R_0, minimal, formative) and (P_26, R_0, minimal, formative) is finite. We consider the dependency pair problem (P_26, R_0, minimal, formative). We apply the subterm criterion with the following projection function: nu(U51#) = 3 Thus, we can orient the dependency pairs as follows: nu(U51#(X, Y, mark(Z))) = mark(Z) |> Z = nu(U51#(X, Y, Z)) nu(U51#(X, Y, active(Z))) = active(Z) |> Z = nu(U51#(X, Y, Z)) By [Kop12, Thm. 7.35], we may replace a dependency pair problem (P_26, R_0, minimal, f) by ({}, R_0, minimal, f). By the empty set processor [Kop12, Thm. 7.15] this problem may be immediately removed. Thus, the original system is terminating if each of (P_1, R_0, minimal, formative), (P_2, R_0, minimal, formative), (P_3, R_0, minimal, formative), (P_4, R_0, minimal, formative), (P_5, R_0, minimal, formative), (P_6, R_0, minimal, formative), (P_7, R_0, minimal, formative) and (P_8, R_0, minimal, formative) is finite. We consider the dependency pair problem (P_8, R_0, minimal, formative). We apply the subterm criterion with the following projection function: nu(U41#) = 1 Thus, we can orient the dependency pairs as follows: nu(U41#(mark(X), Y)) = mark(X) |> X = nu(U41#(X, Y)) nu(U41#(X, mark(Y))) = X = X = nu(U41#(X, Y)) nu(U41#(active(X), Y)) = active(X) |> X = nu(U41#(X, Y)) nu(U41#(X, active(Y))) = X = X = nu(U41#(X, Y)) By [Kop12, Thm. 7.35], we may replace a dependency pair problem (P_8, R_0, minimal, f) by (P_27, R_0, minimal, f), where P_27 contains: U41#(X, mark(Y)) =#> U41#(X, Y) U41#(X, active(Y)) =#> U41#(X, Y) Thus, the original system is terminating if each of (P_1, R_0, minimal, formative), (P_2, R_0, minimal, formative), (P_3, R_0, minimal, formative), (P_4, R_0, minimal, formative), (P_5, R_0, minimal, formative), (P_6, R_0, minimal, formative), (P_7, R_0, minimal, formative) and (P_27, R_0, minimal, formative) is finite. We consider the dependency pair problem (P_27, R_0, minimal, formative). We apply the subterm criterion with the following projection function: nu(U41#) = 2 Thus, we can orient the dependency pairs as follows: nu(U41#(X, mark(Y))) = mark(Y) |> Y = nu(U41#(X, Y)) nu(U41#(X, active(Y))) = active(Y) |> Y = nu(U41#(X, Y)) By [Kop12, Thm. 7.35], we may replace a dependency pair problem (P_27, R_0, minimal, f) by ({}, R_0, minimal, f). By the empty set processor [Kop12, Thm. 7.15] this problem may be immediately removed. Thus, the original system is terminating if each of (P_1, R_0, minimal, formative), (P_2, R_0, minimal, formative), (P_3, R_0, minimal, formative), (P_4, R_0, minimal, formative), (P_5, R_0, minimal, formative), (P_6, R_0, minimal, formative) and (P_7, R_0, minimal, formative) is finite. We consider the dependency pair problem (P_7, R_0, minimal, formative). We apply the subterm criterion with the following projection function: nu(U32#) = 1 Thus, we can orient the dependency pairs as follows: nu(U32#(mark(X))) = mark(X) |> X = nu(U32#(X)) nu(U32#(active(X))) = active(X) |> X = nu(U32#(X)) By [Kop12, Thm. 7.35], we may replace a dependency pair problem (P_7, R_0, minimal, f) by ({}, R_0, minimal, f). By the empty set processor [Kop12, Thm. 7.15] this problem may be immediately removed. Thus, the original system is terminating if each of (P_1, R_0, minimal, formative), (P_2, R_0, minimal, formative), (P_3, R_0, minimal, formative), (P_4, R_0, minimal, formative), (P_5, R_0, minimal, formative) and (P_6, R_0, minimal, formative) is finite. We consider the dependency pair problem (P_6, R_0, minimal, formative). We apply the subterm criterion with the following projection function: nu(U31#) = 1 Thus, we can orient the dependency pairs as follows: nu(U31#(mark(X), Y)) = mark(X) |> X = nu(U31#(X, Y)) nu(U31#(X, mark(Y))) = X = X = nu(U31#(X, Y)) nu(U31#(active(X), Y)) = active(X) |> X = nu(U31#(X, Y)) nu(U31#(X, active(Y))) = X = X = nu(U31#(X, Y)) By [Kop12, Thm. 7.35], we may replace a dependency pair problem (P_6, R_0, minimal, f) by (P_28, R_0, minimal, f), where P_28 contains: U31#(X, mark(Y)) =#> U31#(X, Y) U31#(X, active(Y)) =#> U31#(X, Y) Thus, the original system is terminating if each of (P_1, R_0, minimal, formative), (P_2, R_0, minimal, formative), (P_3, R_0, minimal, formative), (P_4, R_0, minimal, formative), (P_5, R_0, minimal, formative) and (P_28, R_0, minimal, formative) is finite. We consider the dependency pair problem (P_28, R_0, minimal, formative). We apply the subterm criterion with the following projection function: nu(U31#) = 2 Thus, we can orient the dependency pairs as follows: nu(U31#(X, mark(Y))) = mark(Y) |> Y = nu(U31#(X, Y)) nu(U31#(X, active(Y))) = active(Y) |> Y = nu(U31#(X, Y)) By [Kop12, Thm. 7.35], we may replace a dependency pair problem (P_28, R_0, minimal, f) by ({}, R_0, minimal, f). By the empty set processor [Kop12, Thm. 7.15] this problem may be immediately removed. Thus, the original system is terminating if each of (P_1, R_0, minimal, formative), (P_2, R_0, minimal, formative), (P_3, R_0, minimal, formative), (P_4, R_0, minimal, formative) and (P_5, R_0, minimal, formative) is finite. We consider the dependency pair problem (P_5, R_0, minimal, formative). We apply the subterm criterion with the following projection function: nu(U21#) = 1 Thus, we can orient the dependency pairs as follows: nu(U21#(mark(X))) = mark(X) |> X = nu(U21#(X)) nu(U21#(active(X))) = active(X) |> X = nu(U21#(X)) By [Kop12, Thm. 7.35], we may replace a dependency pair problem (P_5, R_0, minimal, f) by ({}, R_0, minimal, f). By the empty set processor [Kop12, Thm. 7.15] this problem may be immediately removed. Thus, the original system is terminating if each of (P_1, R_0, minimal, formative), (P_2, R_0, minimal, formative), (P_3, R_0, minimal, formative) and (P_4, R_0, minimal, formative) is finite. We consider the dependency pair problem (P_4, R_0, minimal, formative). We apply the subterm criterion with the following projection function: nu(isNat#) = 1 Thus, we can orient the dependency pairs as follows: nu(isNat#(mark(X))) = mark(X) |> X = nu(isNat#(X)) nu(isNat#(active(X))) = active(X) |> X = nu(isNat#(X)) By [Kop12, Thm. 7.35], we may replace a dependency pair problem (P_4, R_0, minimal, f) by ({}, R_0, minimal, f). By the empty set processor [Kop12, Thm. 7.15] this problem may be immediately removed. Thus, the original system is terminating if each of (P_1, R_0, minimal, formative), (P_2, R_0, minimal, formative) and (P_3, R_0, minimal, formative) is finite. We consider the dependency pair problem (P_3, R_0, minimal, formative). We apply the subterm criterion with the following projection function: nu(U12#) = 1 Thus, we can orient the dependency pairs as follows: nu(U12#(mark(X))) = mark(X) |> X = nu(U12#(X)) nu(U12#(active(X))) = active(X) |> X = nu(U12#(X)) By [Kop12, Thm. 7.35], we may replace a dependency pair problem (P_3, R_0, minimal, f) by ({}, R_0, minimal, f). By the empty set processor [Kop12, Thm. 7.15] this problem may be immediately removed. Thus, the original system is terminating if each of (P_1, R_0, minimal, formative) and (P_2, R_0, minimal, formative) is finite. We consider the dependency pair problem (P_2, R_0, minimal, formative). We apply the subterm criterion with the following projection function: nu(U11#) = 1 Thus, we can orient the dependency pairs as follows: nu(U11#(mark(X), Y)) = mark(X) |> X = nu(U11#(X, Y)) nu(U11#(X, mark(Y))) = X = X = nu(U11#(X, Y)) nu(U11#(active(X), Y)) = active(X) |> X = nu(U11#(X, Y)) nu(U11#(X, active(Y))) = X = X = nu(U11#(X, Y)) By [Kop12, Thm. 7.35], we may replace a dependency pair problem (P_2, R_0, minimal, f) by (P_29, R_0, minimal, f), where P_29 contains: U11#(X, mark(Y)) =#> U11#(X, Y) U11#(X, active(Y)) =#> U11#(X, Y) Thus, the original system is terminating if each of (P_1, R_0, minimal, formative) and (P_29, R_0, minimal, formative) is finite. We consider the dependency pair problem (P_29, R_0, minimal, formative). We apply the subterm criterion with the following projection function: nu(U11#) = 2 Thus, we can orient the dependency pairs as follows: nu(U11#(X, mark(Y))) = mark(Y) |> Y = nu(U11#(X, Y)) nu(U11#(X, active(Y))) = active(Y) |> Y = nu(U11#(X, Y)) By [Kop12, Thm. 7.35], we may replace a dependency pair problem (P_29, R_0, minimal, f) by ({}, R_0, minimal, f). By the empty set processor [Kop12, Thm. 7.15] this problem may be immediately removed. Thus, the original system is terminating if (P_1, R_0, minimal, formative) is finite. We consider the dependency pair problem (P_1, R_0, minimal, formative). We will use the reduction pair processor [Kop12, Thm. 7.16]. It suffices to find a standard reduction pair [Kop12, Def. 6.69]. Thus, we must orient: active#(U11(tt, X)) >? mark#(U12(isNat(X))) active#(U31(tt, X)) >? mark#(U32(isNat(X))) active#(U41(tt, X)) >? mark#(X) active#(U51(tt, X, Y)) >? mark#(U52(isNat(Y), X, Y)) active#(U52(tt, X, Y)) >? mark#(s(plus(Y, X))) active#(U71(tt, X, Y)) >? mark#(U72(isNat(Y), X, Y)) active#(U72(tt, X, Y)) >? mark#(plus(x(Y, X), Y)) active#(isNat(plus(X, Y))) >? mark#(U11(isNat(X), Y)) active#(isNat(s(X))) >? mark#(U21(isNat(X))) active#(isNat(x(X, Y))) >? mark#(U31(isNat(X), Y)) active#(plus(X, 0)) >? mark#(U41(isNat(X), X)) active#(plus(X, s(Y))) >? mark#(U51(isNat(Y), Y, X)) active#(x(X, 0)) >? mark#(U61(isNat(X))) active#(x(X, s(Y))) >? mark#(U71(isNat(Y), Y, X)) mark#(U11(X, Y)) >? active#(U11(mark(X), Y)) mark#(U11(X, Y)) >? mark#(X) mark#(U12(X)) >? mark#(X) mark#(isNat(X)) >? active#(isNat(X)) mark#(U21(X)) >? mark#(X) mark#(U31(X, Y)) >? active#(U31(mark(X), Y)) mark#(U31(X, Y)) >? mark#(X) mark#(U32(X)) >? mark#(X) mark#(U41(X, Y)) >? active#(U41(mark(X), Y)) mark#(U41(X, Y)) >? mark#(X) mark#(U51(X, Y, Z)) >? active#(U51(mark(X), Y, Z)) mark#(U51(X, Y, Z)) >? mark#(X) mark#(U52(X, Y, Z)) >? active#(U52(mark(X), Y, Z)) mark#(U52(X, Y, Z)) >? mark#(X) mark#(s(X)) >? mark#(X) mark#(plus(X, Y)) >? active#(plus(mark(X), mark(Y))) mark#(plus(X, Y)) >? mark#(X) mark#(plus(X, Y)) >? mark#(Y) mark#(U61(X)) >? mark#(X) mark#(U71(X, Y, Z)) >? active#(U71(mark(X), Y, Z)) mark#(U71(X, Y, Z)) >? mark#(X) mark#(U72(X, Y, Z)) >? active#(U72(mark(X), Y, Z)) mark#(U72(X, Y, Z)) >? mark#(X) mark#(x(X, Y)) >? active#(x(mark(X), mark(Y))) mark#(x(X, Y)) >? mark#(X) mark#(x(X, Y)) >? mark#(Y) active(U11(tt, X)) >= mark(U12(isNat(X))) active(U12(tt)) >= mark(tt) active(U21(tt)) >= mark(tt) active(U31(tt, X)) >= mark(U32(isNat(X))) active(U32(tt)) >= mark(tt) active(U41(tt, X)) >= mark(X) active(U51(tt, X, Y)) >= mark(U52(isNat(Y), X, Y)) active(U52(tt, X, Y)) >= mark(s(plus(Y, X))) active(U61(tt)) >= mark(0) active(U71(tt, X, Y)) >= mark(U72(isNat(Y), X, Y)) active(U72(tt, X, Y)) >= mark(plus(x(Y, X), Y)) active(isNat(0)) >= mark(tt) active(isNat(plus(X, Y))) >= mark(U11(isNat(X), Y)) active(isNat(s(X))) >= mark(U21(isNat(X))) active(isNat(x(X, Y))) >= mark(U31(isNat(X), Y)) active(plus(X, 0)) >= mark(U41(isNat(X), X)) active(plus(X, s(Y))) >= mark(U51(isNat(Y), Y, X)) active(x(X, 0)) >= mark(U61(isNat(X))) active(x(X, s(Y))) >= mark(U71(isNat(Y), Y, X)) mark(U11(X, Y)) >= active(U11(mark(X), Y)) mark(tt) >= active(tt) mark(U12(X)) >= active(U12(mark(X))) mark(isNat(X)) >= active(isNat(X)) mark(U21(X)) >= active(U21(mark(X))) mark(U31(X, Y)) >= active(U31(mark(X), Y)) mark(U32(X)) >= active(U32(mark(X))) mark(U41(X, Y)) >= active(U41(mark(X), Y)) mark(U51(X, Y, Z)) >= active(U51(mark(X), Y, Z)) mark(U52(X, Y, Z)) >= active(U52(mark(X), Y, Z)) mark(s(X)) >= active(s(mark(X))) mark(plus(X, Y)) >= active(plus(mark(X), mark(Y))) mark(U61(X)) >= active(U61(mark(X))) mark(0) >= active(0) mark(U71(X, Y, Z)) >= active(U71(mark(X), Y, Z)) mark(U72(X, Y, Z)) >= active(U72(mark(X), Y, Z)) mark(x(X, Y)) >= active(x(mark(X), mark(Y))) U11(mark(X), Y) >= U11(X, Y) U11(X, mark(Y)) >= U11(X, Y) U11(active(X), Y) >= U11(X, Y) U11(X, active(Y)) >= U11(X, Y) U12(mark(X)) >= U12(X) U12(active(X)) >= U12(X) isNat(mark(X)) >= isNat(X) isNat(active(X)) >= isNat(X) U21(mark(X)) >= U21(X) U21(active(X)) >= U21(X) U31(mark(X), Y) >= U31(X, Y) U31(X, mark(Y)) >= U31(X, Y) U31(active(X), Y) >= U31(X, Y) U31(X, active(Y)) >= U31(X, Y) U32(mark(X)) >= U32(X) U32(active(X)) >= U32(X) U41(mark(X), Y) >= U41(X, Y) U41(X, mark(Y)) >= U41(X, Y) U41(active(X), Y) >= U41(X, Y) U41(X, active(Y)) >= U41(X, Y) U51(mark(X), Y, Z) >= U51(X, Y, Z) U51(X, mark(Y), Z) >= U51(X, Y, Z) U51(X, Y, mark(Z)) >= U51(X, Y, Z) U51(active(X), Y, Z) >= U51(X, Y, Z) U51(X, active(Y), Z) >= U51(X, Y, Z) U51(X, Y, active(Z)) >= U51(X, Y, Z) U52(mark(X), Y, Z) >= U52(X, Y, Z) U52(X, mark(Y), Z) >= U52(X, Y, Z) U52(X, Y, mark(Z)) >= U52(X, Y, Z) U52(active(X), Y, Z) >= U52(X, Y, Z) U52(X, active(Y), Z) >= U52(X, Y, Z) U52(X, Y, active(Z)) >= U52(X, Y, Z) s(mark(X)) >= s(X) s(active(X)) >= s(X) plus(mark(X), Y) >= plus(X, Y) plus(X, mark(Y)) >= plus(X, Y) plus(active(X), Y) >= plus(X, Y) plus(X, active(Y)) >= plus(X, Y) U61(mark(X)) >= U61(X) U61(active(X)) >= U61(X) U71(mark(X), Y, Z) >= U71(X, Y, Z) U71(X, mark(Y), Z) >= U71(X, Y, Z) U71(X, Y, mark(Z)) >= U71(X, Y, Z) U71(active(X), Y, Z) >= U71(X, Y, Z) U71(X, active(Y), Z) >= U71(X, Y, Z) U71(X, Y, active(Z)) >= U71(X, Y, Z) U72(mark(X), Y, Z) >= U72(X, Y, Z) U72(X, mark(Y), Z) >= U72(X, Y, Z) U72(X, Y, mark(Z)) >= U72(X, Y, Z) U72(active(X), Y, Z) >= U72(X, Y, Z) U72(X, active(Y), Z) >= U72(X, Y, Z) U72(X, Y, active(Z)) >= U72(X, Y, Z) x(mark(X), Y) >= x(X, Y) x(X, mark(Y)) >= x(X, Y) x(active(X), Y) >= x(X, Y) x(X, active(Y)) >= x(X, Y) Since this representation is not advantageous for the higher-order recursive path ordering, we present the strict requirements in their unextended form, which is not problematic since for any F, s and substituion gamma: (F s)gamma beta-reduces to F(s)gamma.) We use a recursive path ordering as defined in [Kop12, Chapter 5]. Argument functions: [[0]] = _|_ [[U11(x_1, x_2)]] = x_1 [[U12(x_1)]] = x_1 [[U21(x_1)]] = x_1 [[U31(x_1, x_2)]] = x_1 [[U32(x_1)]] = x_1 [[U61(x_1)]] = x_1 [[active(x_1)]] = x_1 [[isNat(x_1)]] = isNat [[mark(x_1)]] = x_1 We choose Lex = {} and Mul = {U41, U51, U52, U71, U72, active#, isNat, mark#, plus, s, tt, x}, and the following precedence: active# = mark# > U71 = U72 = x > U51 = U52 = plus > U41 > s > isNat = tt Taking the argument function into account, and fixing the greater / greater equal choices, the constraints can be denoted as follows: active#(tt) >= mark#(isNat) active#(tt) >= mark#(isNat) active#(U41(tt, X)) >= mark#(X) active#(U51(tt, X, Y)) >= mark#(U52(isNat, X, Y)) active#(U52(tt, X, Y)) >= mark#(s(plus(Y, X))) active#(U71(tt, X, Y)) >= mark#(U72(isNat, X, Y)) active#(U72(tt, X, Y)) > mark#(plus(x(Y, X), Y)) active#(isNat) >= mark#(isNat) active#(isNat) >= mark#(isNat) active#(isNat) >= mark#(isNat) active#(plus(X, _|_)) >= mark#(U41(isNat, X)) active#(plus(X, s(Y))) >= mark#(U51(isNat, Y, X)) active#(x(X, _|_)) >= mark#(isNat) active#(x(X, s(Y))) >= mark#(U71(isNat, Y, X)) mark#(X) >= active#(X) mark#(X) >= mark#(X) mark#(X) >= mark#(X) mark#(isNat) >= active#(isNat) mark#(X) >= mark#(X) mark#(X) >= active#(X) mark#(X) >= mark#(X) mark#(X) >= mark#(X) mark#(U41(X, Y)) >= active#(U41(X, Y)) mark#(U41(X, Y)) >= mark#(X) mark#(U51(X, Y, Z)) >= active#(U51(X, Y, Z)) mark#(U51(X, Y, Z)) >= mark#(X) mark#(U52(X, Y, Z)) >= active#(U52(X, Y, Z)) mark#(U52(X, Y, Z)) >= mark#(X) mark#(s(X)) >= mark#(X) mark#(plus(X, Y)) >= active#(plus(X, Y)) mark#(plus(X, Y)) >= mark#(X) mark#(plus(X, Y)) >= mark#(Y) mark#(X) >= mark#(X) mark#(U71(X, Y, Z)) >= active#(U71(X, Y, Z)) mark#(U71(X, Y, Z)) >= mark#(X) mark#(U72(X, Y, Z)) >= active#(U72(X, Y, Z)) mark#(U72(X, Y, Z)) >= mark#(X) mark#(x(X, Y)) >= active#(x(X, Y)) mark#(x(X, Y)) >= mark#(X) mark#(x(X, Y)) >= mark#(Y) tt >= isNat tt >= tt tt >= tt tt >= isNat tt >= tt U41(tt, X) >= X U51(tt, X, Y) >= U52(isNat, X, Y) U52(tt, X, Y) >= s(plus(Y, X)) tt >= _|_ U71(tt, X, Y) >= U72(isNat, X, Y) U72(tt, X, Y) >= plus(x(Y, X), Y) isNat >= tt isNat >= isNat isNat >= isNat isNat >= isNat plus(X, _|_) >= U41(isNat, X) plus(X, s(Y)) >= U51(isNat, Y, X) x(X, _|_) >= isNat x(X, s(Y)) >= U71(isNat, Y, X) X >= X tt >= tt X >= X isNat >= isNat X >= X X >= X X >= X U41(X, Y) >= U41(X, Y) U51(X, Y, Z) >= U51(X, Y, Z) U52(X, Y, Z) >= U52(X, Y, Z) s(X) >= s(X) plus(X, Y) >= plus(X, Y) X >= X _|_ >= _|_ U71(X, Y, Z) >= U71(X, Y, Z) U72(X, Y, Z) >= U72(X, Y, Z) x(X, Y) >= x(X, Y) X >= X X >= X X >= X X >= X X >= X X >= X isNat >= isNat isNat >= isNat X >= X X >= X X >= X X >= X X >= X X >= X X >= X X >= X U41(X, Y) >= U41(X, Y) U41(X, Y) >= U41(X, Y) U41(X, Y) >= U41(X, Y) U41(X, Y) >= U41(X, Y) U51(X, Y, Z) >= U51(X, Y, Z) U51(X, Y, Z) >= U51(X, Y, Z) U51(X, Y, Z) >= U51(X, Y, Z) U51(X, Y, Z) >= U51(X, Y, Z) U51(X, Y, Z) >= U51(X, Y, Z) U51(X, Y, Z) >= U51(X, Y, Z) U52(X, Y, Z) >= U52(X, Y, Z) U52(X, Y, Z) >= U52(X, Y, Z) U52(X, Y, Z) >= U52(X, Y, Z) U52(X, Y, Z) >= U52(X, Y, Z) U52(X, Y, Z) >= U52(X, Y, Z) U52(X, Y, Z) >= U52(X, Y, Z) s(X) >= s(X) s(X) >= s(X) plus(X, Y) >= plus(X, Y) plus(X, Y) >= plus(X, Y) plus(X, Y) >= plus(X, Y) plus(X, Y) >= plus(X, Y) X >= X X >= X U71(X, Y, Z) >= U71(X, Y, Z) U71(X, Y, Z) >= U71(X, Y, Z) U71(X, Y, Z) >= U71(X, Y, Z) U71(X, Y, Z) >= U71(X, Y, Z) U71(X, Y, Z) >= U71(X, Y, Z) U71(X, Y, Z) >= U71(X, Y, Z) U72(X, Y, Z) >= U72(X, Y, Z) U72(X, Y, Z) >= U72(X, Y, Z) U72(X, Y, Z) >= U72(X, Y, Z) U72(X, Y, Z) >= U72(X, Y, Z) U72(X, Y, Z) >= U72(X, Y, Z) U72(X, Y, Z) >= U72(X, Y, Z) x(X, Y) >= x(X, Y) x(X, Y) >= x(X, Y) x(X, Y) >= x(X, Y) x(X, Y) >= x(X, Y) With these choices, we have: 1] active#(tt) >= mark#(isNat) because active# = mark#, active# in Mul and [2], by (Fun) 2] tt >= isNat because tt = isNat, by (Fun) 3] active#(tt) >= mark#(isNat) because active# = mark#, active# in Mul and [4], by (Fun) 4] tt >= isNat because tt = isNat, by (Fun) 5] active#(U41(tt, X)) >= mark#(X) because active# = mark#, active# in Mul and [6], by (Fun) 6] U41(tt, X) >= X because [7], by (Star) 7] U41*(tt, X) >= X because [8], by (Select) 8] X >= X by (Meta) 9] active#(U51(tt, X, Y)) >= mark#(U52(isNat, X, Y)) because active# = mark#, active# in Mul and [10], by (Fun) 10] U51(tt, X, Y) >= U52(isNat, X, Y) because U51 = U52, U51 in Mul, [11], [12] and [13], by (Fun) 11] tt >= isNat because tt = isNat, by (Fun) 12] X >= X by (Meta) 13] Y >= Y by (Meta) 14] active#(U52(tt, X, Y)) >= mark#(s(plus(Y, X))) because active# = mark#, active# in Mul and [15], by (Fun) 15] U52(tt, X, Y) >= s(plus(Y, X)) because [16], by (Star) 16] U52*(tt, X, Y) >= s(plus(Y, X)) because U52 > s and [17], by (Copy) 17] U52*(tt, X, Y) >= plus(Y, X) because U52 = plus, U52 in Mul, [12] and [13], by (Stat) 18] active#(U71(tt, X, Y)) >= mark#(U72(isNat, X, Y)) because active# = mark#, active# in Mul and [19], by (Fun) 19] U71(tt, X, Y) >= U72(isNat, X, Y) because U71 = U72, U71 in Mul, [11], [12] and [13], by (Fun) 20] active#(U72(tt, X, Y)) > mark#(plus(x(Y, X), Y)) because [21], by definition 21] active#*(U72(tt, X, Y)) >= mark#(plus(x(Y, X), Y)) because active# = mark#, active# in Mul and [22], by (Stat) 22] U72(tt, X, Y) > plus(x(Y, X), Y) because [23], by definition 23] U72*(tt, X, Y) >= plus(x(Y, X), Y) because U72 > plus, [24] and [25], by (Copy) 24] U72*(tt, X, Y) >= x(Y, X) because U72 = x, U72 in Mul, [12] and [13], by (Stat) 25] U72*(tt, X, Y) >= Y because [13], by (Select) 26] active#(isNat) >= mark#(isNat) because active# = mark#, active# in Mul and [27], by (Fun) 27] isNat >= isNat because isNat in Mul, by (Fun) 28] active#(isNat) >= mark#(isNat) because active# = mark#, active# in Mul and [29], by (Fun) 29] isNat >= isNat because isNat in Mul, by (Fun) 30] active#(isNat) >= mark#(isNat) because active# = mark#, active# in Mul and [31], by (Fun) 31] isNat >= isNat because isNat in Mul, by (Fun) 32] active#(plus(X, _|_)) >= mark#(U41(isNat, X)) because active# = mark#, active# in Mul and [33], by (Fun) 33] plus(X, _|_) >= U41(isNat, X) because [34], by (Star) 34] plus*(X, _|_) >= U41(isNat, X) because plus > U41, [35] and [36], by (Copy) 35] plus*(X, _|_) >= isNat because plus > isNat, by (Copy) 36] plus*(X, _|_) >= X because [13], by (Select) 37] active#(plus(X, s(Y))) >= mark#(U51(isNat, Y, X)) because [38], by (Star) 38] active#*(plus(X, s(Y))) >= mark#(U51(isNat, Y, X)) because active# = mark#, active# in Mul and [39], by (Stat) 39] plus(X, s(Y)) > U51(isNat, Y, X) because [40], by definition 40] plus*(X, s(Y)) >= U51(isNat, Y, X) because plus = U51, plus in Mul, [13], [41] and [43], by (Stat) 41] s(Y) > isNat because [42], by definition 42] s*(Y) >= isNat because s > isNat, by (Copy) 43] s(Y) > Y because [44], by definition 44] s*(Y) >= Y because [12], by (Select) 45] active#(x(X, _|_)) >= mark#(isNat) because active# = mark#, active# in Mul and [46], by (Fun) 46] x(X, _|_) >= isNat because [47], by (Star) 47] x*(X, _|_) >= isNat because x > isNat, by (Copy) 48] active#(x(X, s(Y))) >= mark#(U71(isNat, Y, X)) because active# = mark#, active# in Mul and [49], by (Fun) 49] x(X, s(Y)) >= U71(isNat, Y, X) because [50], by (Star) 50] x*(X, s(Y)) >= U71(isNat, Y, X) because x = U71, x in Mul, [13], [41] and [43], by (Stat) 51] mark#(X) >= active#(X) because mark# = active#, mark# in Mul and [52], by (Fun) 52] X >= X by (Meta) 53] mark#(X) >= mark#(X) because mark# in Mul and [52], by (Fun) 54] mark#(X) >= mark#(X) because mark# in Mul and [55], by (Fun) 55] X >= X by (Meta) 56] mark#(isNat) >= active#(isNat) because mark# = active#, mark# in Mul and [57], by (Fun) 57] isNat >= isNat because isNat in Mul, by (Fun) 58] mark#(X) >= mark#(X) because mark# in Mul and [59], by (Fun) 59] X >= X by (Meta) 60] mark#(X) >= active#(X) because mark# = active#, mark# in Mul and [61], by (Fun) 61] X >= X by (Meta) 62] mark#(X) >= mark#(X) because mark# in Mul and [61], by (Fun) 63] mark#(X) >= mark#(X) because mark# in Mul and [64], by (Fun) 64] X >= X by (Meta) 65] mark#(U41(X, Y)) >= active#(U41(X, Y)) because mark# = active#, mark# in Mul and [66], by (Fun) 66] U41(X, Y) >= U41(X, Y) because U41 in Mul, [67] and [68], by (Fun) 67] X >= X by (Meta) 68] Y >= Y by (Meta) 69] mark#(U41(X, Y)) >= mark#(X) because mark# in Mul and [70], by (Fun) 70] U41(X, Y) >= X because [71], by (Star) 71] U41*(X, Y) >= X because [67], by (Select) 72] mark#(U51(X, Y, Z)) >= active#(U51(X, Y, Z)) because mark# = active#, mark# in Mul and [73], by (Fun) 73] U51(X, Y, Z) >= U51(X, Y, Z) because U51 in Mul, [67], [68] and [74], by (Fun) 74] Z >= Z by (Meta) 75] mark#(U51(X, Y, Z)) >= mark#(X) because mark# in Mul and [76], by (Fun) 76] U51(X, Y, Z) >= X because [77], by (Star) 77] U51*(X, Y, Z) >= X because [67], by (Select) 78] mark#(U52(X, Y, Z)) >= active#(U52(X, Y, Z)) because mark# = active#, mark# in Mul and [79], by (Fun) 79] U52(X, Y, Z) >= U52(X, Y, Z) because U52 in Mul, [67], [68] and [74], by (Fun) 80] mark#(U52(X, Y, Z)) >= mark#(X) because mark# in Mul and [81], by (Fun) 81] U52(X, Y, Z) >= X because [82], by (Star) 82] U52*(X, Y, Z) >= X because [67], by (Select) 83] mark#(s(X)) >= mark#(X) because mark# in Mul and [84], by (Fun) 84] s(X) >= X because [85], by (Star) 85] s*(X) >= X because [64], by (Select) 86] mark#(plus(X, Y)) >= active#(plus(X, Y)) because mark# = active#, mark# in Mul and [87], by (Fun) 87] plus(X, Y) >= plus(X, Y) because plus in Mul, [67] and [88], by (Fun) 88] Y >= Y by (Meta) 89] mark#(plus(X, Y)) >= mark#(X) because mark# in Mul and [90], by (Fun) 90] plus(X, Y) >= X because [91], by (Star) 91] plus*(X, Y) >= X because [67], by (Select) 92] mark#(plus(X, Y)) >= mark#(Y) because mark# in Mul and [93], by (Fun) 93] plus(X, Y) >= Y because [94], by (Star) 94] plus*(X, Y) >= Y because [88], by (Select) 95] mark#(X) >= mark#(X) because mark# in Mul and [96], by (Fun) 96] X >= X by (Meta) 97] mark#(U71(X, Y, Z)) >= active#(U71(X, Y, Z)) because mark# = active#, mark# in Mul and [98], by (Fun) 98] U71(X, Y, Z) >= U71(X, Y, Z) because U71 in Mul, [67], [88] and [74], by (Fun) 99] mark#(U71(X, Y, Z)) >= mark#(X) because mark# in Mul and [100], by (Fun) 100] U71(X, Y, Z) >= X because [101], by (Star) 101] U71*(X, Y, Z) >= X because [67], by (Select) 102] mark#(U72(X, Y, Z)) >= active#(U72(X, Y, Z)) because mark# = active#, mark# in Mul and [103], by (Fun) 103] U72(X, Y, Z) >= U72(X, Y, Z) because U72 in Mul, [67], [88] and [74], by (Fun) 104] mark#(U72(X, Y, Z)) >= mark#(X) because mark# in Mul and [105], by (Fun) 105] U72(X, Y, Z) >= X because [106], by (Star) 106] U72*(X, Y, Z) >= X because [67], by (Select) 107] mark#(x(X, Y)) >= active#(x(X, Y)) because mark# = active#, mark# in Mul and [108], by (Fun) 108] x(X, Y) >= x(X, Y) because x in Mul, [67] and [88], by (Fun) 109] mark#(x(X, Y)) >= mark#(X) because mark# in Mul and [110], by (Fun) 110] x(X, Y) >= X because [111], by (Star) 111] x*(X, Y) >= X because [67], by (Select) 112] mark#(x(X, Y)) >= mark#(Y) because mark# in Mul and [113], by (Fun) 113] x(X, Y) >= Y because [114], by (Star) 114] x*(X, Y) >= Y because [88], by (Select) 115] tt >= isNat because tt = isNat, by (Fun) 116] tt >= tt by (Fun) 117] tt >= tt by (Fun) 118] tt >= isNat because tt = isNat, by (Fun) 119] tt >= tt by (Fun) 120] U41(tt, X) >= X because [7], by (Star) 121] U51(tt, X, Y) >= U52(isNat, X, Y) because U51 = U52, U51 in Mul, [11], [12] and [13], by (Fun) 122] U52(tt, X, Y) >= s(plus(Y, X)) because [16], by (Star) 123] tt >= _|_ by (Bot) 124] U71(tt, X, Y) >= U72(isNat, X, Y) because U71 = U72, U71 in Mul, [11], [12] and [13], by (Fun) 125] U72(tt, X, Y) >= plus(x(Y, X), Y) because [23], by (Star) 126] isNat >= tt because isNat = tt, by (Fun) 127] isNat >= isNat because isNat in Mul, by (Fun) 128] isNat >= isNat because isNat in Mul, by (Fun) 129] isNat >= isNat because isNat in Mul, by (Fun) 130] plus(X, _|_) >= U41(isNat, X) because [34], by (Star) 131] plus(X, s(Y)) >= U51(isNat, Y, X) because [40], by (Star) 132] x(X, _|_) >= isNat because [47], by (Star) 133] x(X, s(Y)) >= U71(isNat, Y, X) because [50], by (Star) 134] X >= X by (Meta) 135] tt >= tt by (Fun) 136] X >= X by (Meta) 137] isNat >= isNat because isNat in Mul, by (Fun) 138] X >= X by (Meta) 139] X >= X by (Meta) 140] X >= X by (Meta) 141] U41(X, Y) >= U41(X, Y) because U41 in Mul, [67] and [88], by (Fun) 142] U51(X, Y, Z) >= U51(X, Y, Z) because U51 in Mul, [67], [88] and [74], by (Fun) 143] U52(X, Y, Z) >= U52(X, Y, Z) because U52 in Mul, [67], [88] and [74], by (Fun) 144] s(X) >= s(X) because s in Mul and [145], by (Fun) 145] X >= X by (Meta) 146] plus(X, Y) >= plus(X, Y) because plus in Mul, [67] and [88], by (Fun) 147] X >= X by (Meta) 148] _|_ >= _|_ by (Bot) 149] U71(X, Y, Z) >= U71(X, Y, Z) because U71 in Mul, [67], [88] and [74], by (Fun) 150] U72(X, Y, Z) >= U72(X, Y, Z) because U72 in Mul, [67], [88] and [74], by (Fun) 151] x(X, Y) >= x(X, Y) because x in Mul, [67] and [88], by (Fun) 152] X >= X by (Meta) 153] X >= X by (Meta) 154] X >= X by (Meta) 155] X >= X by (Meta) 156] X >= X by (Meta) 157] X >= X by (Meta) 158] isNat >= isNat because isNat in Mul, by (Fun) 159] isNat >= isNat because isNat in Mul, by (Fun) 160] X >= X by (Meta) 161] X >= X by (Meta) 162] X >= X by (Meta) 163] X >= X by (Meta) 164] X >= X by (Meta) 165] X >= X by (Meta) 166] X >= X by (Meta) 167] X >= X by (Meta) 168] U41(X, Y) >= U41(X, Y) because U41 in Mul, [169] and [88], by (Fun) 169] X >= X by (Meta) 170] U41(X, Y) >= U41(X, Y) because U41 in Mul, [67] and [171], by (Fun) 171] Y >= Y by (Meta) 172] U41(X, Y) >= U41(X, Y) because U41 in Mul, [173] and [88], by (Fun) 173] X >= X by (Meta) 174] U41(X, Y) >= U41(X, Y) because U41 in Mul, [67] and [175], by (Fun) 175] Y >= Y by (Meta) 176] U51(X, Y, Z) >= U51(X, Y, Z) because U51 in Mul, [169], [88] and [74], by (Fun) 177] U51(X, Y, Z) >= U51(X, Y, Z) because U51 in Mul, [67], [171] and [74], by (Fun) 178] U51(X, Y, Z) >= U51(X, Y, Z) because U51 in Mul, [67], [88] and [179], by (Fun) 179] Z >= Z by (Meta) 180] U51(X, Y, Z) >= U51(X, Y, Z) because U51 in Mul, [173], [88] and [74], by (Fun) 181] U51(X, Y, Z) >= U51(X, Y, Z) because U51 in Mul, [67], [175] and [74], by (Fun) 182] U51(X, Y, Z) >= U51(X, Y, Z) because U51 in Mul, [67], [88] and [183], by (Fun) 183] Z >= Z by (Meta) 184] U52(X, Y, Z) >= U52(X, Y, Z) because U52 in Mul, [169], [88] and [74], by (Fun) 185] U52(X, Y, Z) >= U52(X, Y, Z) because U52 in Mul, [67], [171] and [74], by (Fun) 186] U52(X, Y, Z) >= U52(X, Y, Z) because U52 in Mul, [67], [88] and [179], by (Fun) 187] U52(X, Y, Z) >= U52(X, Y, Z) because U52 in Mul, [173], [88] and [74], by (Fun) 188] U52(X, Y, Z) >= U52(X, Y, Z) because U52 in Mul, [67], [175] and [74], by (Fun) 189] U52(X, Y, Z) >= U52(X, Y, Z) because U52 in Mul, [67], [88] and [183], by (Fun) 190] s(X) >= s(X) because s in Mul and [191], by (Fun) 191] X >= X by (Meta) 192] s(X) >= s(X) because s in Mul and [193], by (Fun) 193] X >= X by (Meta) 194] plus(X, Y) >= plus(X, Y) because plus in Mul, [169] and [88], by (Fun) 195] plus(X, Y) >= plus(X, Y) because plus in Mul, [67] and [171], by (Fun) 196] plus(X, Y) >= plus(X, Y) because plus in Mul, [173] and [88], by (Fun) 197] plus(X, Y) >= plus(X, Y) because plus in Mul, [67] and [175], by (Fun) 198] X >= X by (Meta) 199] X >= X by (Meta) 200] U71(X, Y, Z) >= U71(X, Y, Z) because U71 in Mul, [169], [88] and [74], by (Fun) 201] U71(X, Y, Z) >= U71(X, Y, Z) because U71 in Mul, [67], [171] and [74], by (Fun) 202] U71(X, Y, Z) >= U71(X, Y, Z) because U71 in Mul, [67], [88] and [179], by (Fun) 203] U71(X, Y, Z) >= U71(X, Y, Z) because U71 in Mul, [173], [88] and [74], by (Fun) 204] U71(X, Y, Z) >= U71(X, Y, Z) because U71 in Mul, [67], [175] and [74], by (Fun) 205] U71(X, Y, Z) >= U71(X, Y, Z) because U71 in Mul, [67], [88] and [183], by (Fun) 206] U72(X, Y, Z) >= U72(X, Y, Z) because U72 in Mul, [169], [88] and [74], by (Fun) 207] U72(X, Y, Z) >= U72(X, Y, Z) because U72 in Mul, [67], [171] and [74], by (Fun) 208] U72(X, Y, Z) >= U72(X, Y, Z) because U72 in Mul, [67], [88] and [179], by (Fun) 209] U72(X, Y, Z) >= U72(X, Y, Z) because U72 in Mul, [173], [88] and [74], by (Fun) 210] U72(X, Y, Z) >= U72(X, Y, Z) because U72 in Mul, [67], [175] and [74], by (Fun) 211] U72(X, Y, Z) >= U72(X, Y, Z) because U72 in Mul, [67], [88] and [183], by (Fun) 212] x(X, Y) >= x(X, Y) because x in Mul, [169] and [88], by (Fun) 213] x(X, Y) >= x(X, Y) because x in Mul, [67] and [171], by (Fun) 214] x(X, Y) >= x(X, Y) because x in Mul, [173] and [88], by (Fun) 215] x(X, Y) >= x(X, Y) because x in Mul, [67] and [175], by (Fun) By the observations in [Kop12, Sec. 6.6], this reduction pair suffices; we may thus replace the dependency pair problem (P_1, R_0, minimal, formative) by (P_30, R_0, minimal, formative), where P_30 consists of: active#(U11(tt, X)) =#> mark#(U12(isNat(X))) active#(U31(tt, X)) =#> mark#(U32(isNat(X))) active#(U41(tt, X)) =#> mark#(X) active#(U51(tt, X, Y)) =#> mark#(U52(isNat(Y), X, Y)) active#(U52(tt, X, Y)) =#> mark#(s(plus(Y, X))) active#(U71(tt, X, Y)) =#> mark#(U72(isNat(Y), X, Y)) active#(isNat(plus(X, Y))) =#> mark#(U11(isNat(X), Y)) active#(isNat(s(X))) =#> mark#(U21(isNat(X))) active#(isNat(x(X, Y))) =#> mark#(U31(isNat(X), Y)) active#(plus(X, 0)) =#> mark#(U41(isNat(X), X)) active#(plus(X, s(Y))) =#> mark#(U51(isNat(Y), Y, X)) active#(x(X, 0)) =#> mark#(U61(isNat(X))) active#(x(X, s(Y))) =#> mark#(U71(isNat(Y), Y, X)) mark#(U11(X, Y)) =#> active#(U11(mark(X), Y)) mark#(U11(X, Y)) =#> mark#(X) mark#(U12(X)) =#> mark#(X) mark#(isNat(X)) =#> active#(isNat(X)) mark#(U21(X)) =#> mark#(X) mark#(U31(X, Y)) =#> active#(U31(mark(X), Y)) mark#(U31(X, Y)) =#> mark#(X) mark#(U32(X)) =#> mark#(X) mark#(U41(X, Y)) =#> active#(U41(mark(X), Y)) mark#(U41(X, Y)) =#> mark#(X) mark#(U51(X, Y, Z)) =#> active#(U51(mark(X), Y, Z)) mark#(U51(X, Y, Z)) =#> mark#(X) mark#(U52(X, Y, Z)) =#> active#(U52(mark(X), Y, Z)) mark#(U52(X, Y, Z)) =#> mark#(X) mark#(s(X)) =#> mark#(X) mark#(plus(X, Y)) =#> active#(plus(mark(X), mark(Y))) mark#(plus(X, Y)) =#> mark#(X) mark#(plus(X, Y)) =#> mark#(Y) mark#(U61(X)) =#> mark#(X) mark#(U71(X, Y, Z)) =#> active#(U71(mark(X), Y, Z)) mark#(U71(X, Y, Z)) =#> mark#(X) mark#(U72(X, Y, Z)) =#> active#(U72(mark(X), Y, Z)) mark#(U72(X, Y, Z)) =#> mark#(X) mark#(x(X, Y)) =#> active#(x(mark(X), mark(Y))) mark#(x(X, Y)) =#> mark#(X) mark#(x(X, Y)) =#> mark#(Y) Thus, the original system is terminating if (P_30, R_0, minimal, formative) is finite. We consider the dependency pair problem (P_30, R_0, minimal, formative). We place the elements of P in a dependency graph approximation G (see e.g. [Kop12, Thm. 7.27, 7.29], as follows: * 0 : 15 * 1 : 20 * 2 : 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38 * 3 : 25, 26 * 4 : 27 * 5 : 34, 35 * 6 : 13, 14 * 7 : 17 * 8 : 18, 19 * 9 : 21, 22 * 10 : 23, 24 * 11 : 31 * 12 : 32, 33 * 13 : 0 * 14 : 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38 * 15 : 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38 * 16 : 6, 7, 8 * 17 : 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38 * 18 : 1 * 19 : 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38 * 20 : 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38 * 21 : 2 * 22 : 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38 * 23 : 3 * 24 : 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38 * 25 : 4 * 26 : 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38 * 27 : 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38 * 28 : 9, 10 * 29 : 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38 * 30 : 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38 * 31 : 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38 * 32 : 5 * 33 : 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38 * 34 : * 35 : 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38 * 36 : 11, 12 * 37 : 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38 * 38 : 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38 This graph has the following strongly connected components: P_31: active#(U11(tt, X)) =#> mark#(U12(isNat(X))) active#(U31(tt, X)) =#> mark#(U32(isNat(X))) active#(U41(tt, X)) =#> mark#(X) active#(U51(tt, X, Y)) =#> mark#(U52(isNat(Y), X, Y)) active#(U52(tt, X, Y)) =#> mark#(s(plus(Y, X))) active#(U71(tt, X, Y)) =#> mark#(U72(isNat(Y), X, Y)) active#(isNat(plus(X, Y))) =#> mark#(U11(isNat(X), Y)) active#(isNat(s(X))) =#> mark#(U21(isNat(X))) active#(isNat(x(X, Y))) =#> mark#(U31(isNat(X), Y)) active#(plus(X, 0)) =#> mark#(U41(isNat(X), X)) active#(plus(X, s(Y))) =#> mark#(U51(isNat(Y), Y, X)) active#(x(X, 0)) =#> mark#(U61(isNat(X))) active#(x(X, s(Y))) =#> mark#(U71(isNat(Y), Y, X)) mark#(U11(X, Y)) =#> active#(U11(mark(X), Y)) mark#(U11(X, Y)) =#> mark#(X) mark#(U12(X)) =#> mark#(X) mark#(isNat(X)) =#> active#(isNat(X)) mark#(U21(X)) =#> mark#(X) mark#(U31(X, Y)) =#> active#(U31(mark(X), Y)) mark#(U31(X, Y)) =#> mark#(X) mark#(U32(X)) =#> mark#(X) mark#(U41(X, Y)) =#> active#(U41(mark(X), Y)) mark#(U41(X, Y)) =#> mark#(X) mark#(U51(X, Y, Z)) =#> active#(U51(mark(X), Y, Z)) mark#(U51(X, Y, Z)) =#> mark#(X) mark#(U52(X, Y, Z)) =#> active#(U52(mark(X), Y, Z)) mark#(U52(X, Y, Z)) =#> mark#(X) mark#(s(X)) =#> mark#(X) mark#(plus(X, Y)) =#> active#(plus(mark(X), mark(Y))) mark#(plus(X, Y)) =#> mark#(X) mark#(plus(X, Y)) =#> mark#(Y) mark#(U61(X)) =#> mark#(X) mark#(U71(X, Y, Z)) =#> active#(U71(mark(X), Y, Z)) mark#(U71(X, Y, Z)) =#> mark#(X) mark#(U72(X, Y, Z)) =#> mark#(X) mark#(x(X, Y)) =#> active#(x(mark(X), mark(Y))) mark#(x(X, Y)) =#> mark#(X) mark#(x(X, Y)) =#> mark#(Y) By [Kop12, Thm. 7.31], we may replace any dependency pair problem (P_30, R_0, m, f) by (P_31, R_0, m, f). Thus, the original system is terminating if (P_31, R_0, minimal, formative) is finite. We consider the dependency pair problem (P_31, R_0, minimal, formative). We will use the reduction pair processor [Kop12, Thm. 7.16]. It suffices to find a standard reduction pair [Kop12, Def. 6.69]. Thus, we must orient: active#(U11(tt, X)) >? mark#(U12(isNat(X))) active#(U31(tt, X)) >? mark#(U32(isNat(X))) active#(U41(tt, X)) >? mark#(X) active#(U51(tt, X, Y)) >? mark#(U52(isNat(Y), X, Y)) active#(U52(tt, X, Y)) >? mark#(s(plus(Y, X))) active#(U71(tt, X, Y)) >? mark#(U72(isNat(Y), X, Y)) active#(isNat(plus(X, Y))) >? mark#(U11(isNat(X), Y)) active#(isNat(s(X))) >? mark#(U21(isNat(X))) active#(isNat(x(X, Y))) >? mark#(U31(isNat(X), Y)) active#(plus(X, 0)) >? mark#(U41(isNat(X), X)) active#(plus(X, s(Y))) >? mark#(U51(isNat(Y), Y, X)) active#(x(X, 0)) >? mark#(U61(isNat(X))) active#(x(X, s(Y))) >? mark#(U71(isNat(Y), Y, X)) mark#(U11(X, Y)) >? active#(U11(mark(X), Y)) mark#(U11(X, Y)) >? mark#(X) mark#(U12(X)) >? mark#(X) mark#(isNat(X)) >? active#(isNat(X)) mark#(U21(X)) >? mark#(X) mark#(U31(X, Y)) >? active#(U31(mark(X), Y)) mark#(U31(X, Y)) >? mark#(X) mark#(U32(X)) >? mark#(X) mark#(U41(X, Y)) >? active#(U41(mark(X), Y)) mark#(U41(X, Y)) >? mark#(X) mark#(U51(X, Y, Z)) >? active#(U51(mark(X), Y, Z)) mark#(U51(X, Y, Z)) >? mark#(X) mark#(U52(X, Y, Z)) >? active#(U52(mark(X), Y, Z)) mark#(U52(X, Y, Z)) >? mark#(X) mark#(s(X)) >? mark#(X) mark#(plus(X, Y)) >? active#(plus(mark(X), mark(Y))) mark#(plus(X, Y)) >? mark#(X) mark#(plus(X, Y)) >? mark#(Y) mark#(U61(X)) >? mark#(X) mark#(U71(X, Y, Z)) >? active#(U71(mark(X), Y, Z)) mark#(U71(X, Y, Z)) >? mark#(X) mark#(U72(X, Y, Z)) >? mark#(X) mark#(x(X, Y)) >? active#(x(mark(X), mark(Y))) mark#(x(X, Y)) >? mark#(X) mark#(x(X, Y)) >? mark#(Y) active(U11(tt, X)) >= mark(U12(isNat(X))) active(U12(tt)) >= mark(tt) active(U21(tt)) >= mark(tt) active(U31(tt, X)) >= mark(U32(isNat(X))) active(U32(tt)) >= mark(tt) active(U41(tt, X)) >= mark(X) active(U51(tt, X, Y)) >= mark(U52(isNat(Y), X, Y)) active(U52(tt, X, Y)) >= mark(s(plus(Y, X))) active(U61(tt)) >= mark(0) active(U71(tt, X, Y)) >= mark(U72(isNat(Y), X, Y)) active(U72(tt, X, Y)) >= mark(plus(x(Y, X), Y)) active(isNat(0)) >= mark(tt) active(isNat(plus(X, Y))) >= mark(U11(isNat(X), Y)) active(isNat(s(X))) >= mark(U21(isNat(X))) active(isNat(x(X, Y))) >= mark(U31(isNat(X), Y)) active(plus(X, 0)) >= mark(U41(isNat(X), X)) active(plus(X, s(Y))) >= mark(U51(isNat(Y), Y, X)) active(x(X, 0)) >= mark(U61(isNat(X))) active(x(X, s(Y))) >= mark(U71(isNat(Y), Y, X)) mark(U11(X, Y)) >= active(U11(mark(X), Y)) mark(tt) >= active(tt) mark(U12(X)) >= active(U12(mark(X))) mark(isNat(X)) >= active(isNat(X)) mark(U21(X)) >= active(U21(mark(X))) mark(U31(X, Y)) >= active(U31(mark(X), Y)) mark(U32(X)) >= active(U32(mark(X))) mark(U41(X, Y)) >= active(U41(mark(X), Y)) mark(U51(X, Y, Z)) >= active(U51(mark(X), Y, Z)) mark(U52(X, Y, Z)) >= active(U52(mark(X), Y, Z)) mark(s(X)) >= active(s(mark(X))) mark(plus(X, Y)) >= active(plus(mark(X), mark(Y))) mark(U61(X)) >= active(U61(mark(X))) mark(0) >= active(0) mark(U71(X, Y, Z)) >= active(U71(mark(X), Y, Z)) mark(U72(X, Y, Z)) >= active(U72(mark(X), Y, Z)) mark(x(X, Y)) >= active(x(mark(X), mark(Y))) U11(mark(X), Y) >= U11(X, Y) U11(X, mark(Y)) >= U11(X, Y) U11(active(X), Y) >= U11(X, Y) U11(X, active(Y)) >= U11(X, Y) U12(mark(X)) >= U12(X) U12(active(X)) >= U12(X) isNat(mark(X)) >= isNat(X) isNat(active(X)) >= isNat(X) U21(mark(X)) >= U21(X) U21(active(X)) >= U21(X) U31(mark(X), Y) >= U31(X, Y) U31(X, mark(Y)) >= U31(X, Y) U31(active(X), Y) >= U31(X, Y) U31(X, active(Y)) >= U31(X, Y) U32(mark(X)) >= U32(X) U32(active(X)) >= U32(X) U41(mark(X), Y) >= U41(X, Y) U41(X, mark(Y)) >= U41(X, Y) U41(active(X), Y) >= U41(X, Y) U41(X, active(Y)) >= U41(X, Y) U51(mark(X), Y, Z) >= U51(X, Y, Z) U51(X, mark(Y), Z) >= U51(X, Y, Z) U51(X, Y, mark(Z)) >= U51(X, Y, Z) U51(active(X), Y, Z) >= U51(X, Y, Z) U51(X, active(Y), Z) >= U51(X, Y, Z) U51(X, Y, active(Z)) >= U51(X, Y, Z) U52(mark(X), Y, Z) >= U52(X, Y, Z) U52(X, mark(Y), Z) >= U52(X, Y, Z) U52(X, Y, mark(Z)) >= U52(X, Y, Z) U52(active(X), Y, Z) >= U52(X, Y, Z) U52(X, active(Y), Z) >= U52(X, Y, Z) U52(X, Y, active(Z)) >= U52(X, Y, Z) s(mark(X)) >= s(X) s(active(X)) >= s(X) plus(mark(X), Y) >= plus(X, Y) plus(X, mark(Y)) >= plus(X, Y) plus(active(X), Y) >= plus(X, Y) plus(X, active(Y)) >= plus(X, Y) U61(mark(X)) >= U61(X) U61(active(X)) >= U61(X) U71(mark(X), Y, Z) >= U71(X, Y, Z) U71(X, mark(Y), Z) >= U71(X, Y, Z) U71(X, Y, mark(Z)) >= U71(X, Y, Z) U71(active(X), Y, Z) >= U71(X, Y, Z) U71(X, active(Y), Z) >= U71(X, Y, Z) U71(X, Y, active(Z)) >= U71(X, Y, Z) U72(mark(X), Y, Z) >= U72(X, Y, Z) U72(X, mark(Y), Z) >= U72(X, Y, Z) U72(X, Y, mark(Z)) >= U72(X, Y, Z) U72(active(X), Y, Z) >= U72(X, Y, Z) U72(X, active(Y), Z) >= U72(X, Y, Z) U72(X, Y, active(Z)) >= U72(X, Y, Z) x(mark(X), Y) >= x(X, Y) x(X, mark(Y)) >= x(X, Y) x(active(X), Y) >= x(X, Y) x(X, active(Y)) >= x(X, Y) Since this representation is not advantageous for the higher-order recursive path ordering, we present the strict requirements in their unextended form, which is not problematic since for any F, s and substituion gamma: (F s)gamma beta-reduces to F(s)gamma.) We use a recursive path ordering as defined in [Kop12, Chapter 5]. Argument functions: [[U11(x_1, x_2)]] = x_1 [[U12(x_1)]] = x_1 [[U21(x_1)]] = x_1 [[U31(x_1, x_2)]] = x_1 [[U32(x_1)]] = x_1 [[U61(x_1)]] = x_1 [[active(x_1)]] = x_1 [[isNat(x_1)]] = isNat [[mark(x_1)]] = x_1 We choose Lex = {} and Mul = {0, U41, U51, U52, U71, U72, active#, isNat, mark#, plus, s, tt, x}, and the following precedence: U71 = U72 = x > active# = mark# > U41 = U51 = U52 = plus > s > 0 = isNat = tt Taking the argument function into account, and fixing the greater / greater equal choices, the constraints can be denoted as follows: active#(tt) >= mark#(isNat) active#(tt) >= mark#(isNat) active#(U41(tt, X)) >= mark#(X) active#(U51(tt, X, Y)) >= mark#(U52(isNat, X, Y)) active#(U52(tt, X, Y)) >= mark#(s(plus(Y, X))) active#(U71(tt, X, Y)) >= mark#(U72(isNat, X, Y)) active#(isNat) >= mark#(isNat) active#(isNat) >= mark#(isNat) active#(isNat) >= mark#(isNat) active#(plus(X, 0)) >= mark#(U41(isNat, X)) active#(plus(X, s(Y))) >= mark#(U51(isNat, Y, X)) active#(x(X, 0)) > mark#(isNat) active#(x(X, s(Y))) >= mark#(U71(isNat, Y, X)) mark#(X) >= active#(X) mark#(X) >= mark#(X) mark#(X) >= mark#(X) mark#(isNat) >= active#(isNat) mark#(X) >= mark#(X) mark#(X) >= active#(X) mark#(X) >= mark#(X) mark#(X) >= mark#(X) mark#(U41(X, Y)) >= active#(U41(X, Y)) mark#(U41(X, Y)) >= mark#(X) mark#(U51(X, Y, Z)) >= active#(U51(X, Y, Z)) mark#(U51(X, Y, Z)) >= mark#(X) mark#(U52(X, Y, Z)) >= active#(U52(X, Y, Z)) mark#(U52(X, Y, Z)) >= mark#(X) mark#(s(X)) >= mark#(X) mark#(plus(X, Y)) >= active#(plus(X, Y)) mark#(plus(X, Y)) >= mark#(X) mark#(plus(X, Y)) > mark#(Y) mark#(X) >= mark#(X) mark#(U71(X, Y, Z)) >= active#(U71(X, Y, Z)) mark#(U71(X, Y, Z)) >= mark#(X) mark#(U72(X, Y, Z)) >= mark#(X) mark#(x(X, Y)) >= active#(x(X, Y)) mark#(x(X, Y)) >= mark#(X) mark#(x(X, Y)) >= mark#(Y) tt >= isNat tt >= tt tt >= tt tt >= isNat tt >= tt U41(tt, X) >= X U51(tt, X, Y) >= U52(isNat, X, Y) U52(tt, X, Y) >= s(plus(Y, X)) tt >= 0 U71(tt, X, Y) >= U72(isNat, X, Y) U72(tt, X, Y) >= plus(x(Y, X), Y) isNat >= tt isNat >= isNat isNat >= isNat isNat >= isNat plus(X, 0) >= U41(isNat, X) plus(X, s(Y)) >= U51(isNat, Y, X) x(X, 0) >= isNat x(X, s(Y)) >= U71(isNat, Y, X) X >= X tt >= tt X >= X isNat >= isNat X >= X X >= X X >= X U41(X, Y) >= U41(X, Y) U51(X, Y, Z) >= U51(X, Y, Z) U52(X, Y, Z) >= U52(X, Y, Z) s(X) >= s(X) plus(X, Y) >= plus(X, Y) X >= X 0 >= 0 U71(X, Y, Z) >= U71(X, Y, Z) U72(X, Y, Z) >= U72(X, Y, Z) x(X, Y) >= x(X, Y) X >= X X >= X X >= X X >= X X >= X X >= X isNat >= isNat isNat >= isNat X >= X X >= X X >= X X >= X X >= X X >= X X >= X X >= X U41(X, Y) >= U41(X, Y) U41(X, Y) >= U41(X, Y) U41(X, Y) >= U41(X, Y) U41(X, Y) >= U41(X, Y) U51(X, Y, Z) >= U51(X, Y, Z) U51(X, Y, Z) >= U51(X, Y, Z) U51(X, Y, Z) >= U51(X, Y, Z) U51(X, Y, Z) >= U51(X, Y, Z) U51(X, Y, Z) >= U51(X, Y, Z) U51(X, Y, Z) >= U51(X, Y, Z) U52(X, Y, Z) >= U52(X, Y, Z) U52(X, Y, Z) >= U52(X, Y, Z) U52(X, Y, Z) >= U52(X, Y, Z) U52(X, Y, Z) >= U52(X, Y, Z) U52(X, Y, Z) >= U52(X, Y, Z) U52(X, Y, Z) >= U52(X, Y, Z) s(X) >= s(X) s(X) >= s(X) plus(X, Y) >= plus(X, Y) plus(X, Y) >= plus(X, Y) plus(X, Y) >= plus(X, Y) plus(X, Y) >= plus(X, Y) X >= X X >= X U71(X, Y, Z) >= U71(X, Y, Z) U71(X, Y, Z) >= U71(X, Y, Z) U71(X, Y, Z) >= U71(X, Y, Z) U71(X, Y, Z) >= U71(X, Y, Z) U71(X, Y, Z) >= U71(X, Y, Z) U71(X, Y, Z) >= U71(X, Y, Z) U72(X, Y, Z) >= U72(X, Y, Z) U72(X, Y, Z) >= U72(X, Y, Z) U72(X, Y, Z) >= U72(X, Y, Z) U72(X, Y, Z) >= U72(X, Y, Z) U72(X, Y, Z) >= U72(X, Y, Z) U72(X, Y, Z) >= U72(X, Y, Z) x(X, Y) >= x(X, Y) x(X, Y) >= x(X, Y) x(X, Y) >= x(X, Y) x(X, Y) >= x(X, Y) With these choices, we have: 1] active#(tt) >= mark#(isNat) because active# = mark#, active# in Mul and [2], by (Fun) 2] tt >= isNat because tt = isNat, by (Fun) 3] active#(tt) >= mark#(isNat) because active# = mark#, active# in Mul and [4], by (Fun) 4] tt >= isNat because tt = isNat, by (Fun) 5] active#(U41(tt, X)) >= mark#(X) because active# = mark#, active# in Mul and [6], by (Fun) 6] U41(tt, X) >= X because [7], by (Star) 7] U41*(tt, X) >= X because [8], by (Select) 8] X >= X by (Meta) 9] active#(U51(tt, X, Y)) >= mark#(U52(isNat, X, Y)) because active# = mark#, active# in Mul and [10], by (Fun) 10] U51(tt, X, Y) >= U52(isNat, X, Y) because U51 = U52, U51 in Mul, [11], [12] and [13], by (Fun) 11] tt >= isNat because tt = isNat, by (Fun) 12] X >= X by (Meta) 13] Y >= Y by (Meta) 14] active#(U52(tt, X, Y)) >= mark#(s(plus(Y, X))) because active# = mark#, active# in Mul and [15], by (Fun) 15] U52(tt, X, Y) >= s(plus(Y, X)) because [16], by (Star) 16] U52*(tt, X, Y) >= s(plus(Y, X)) because U52 > s and [17], by (Copy) 17] U52*(tt, X, Y) >= plus(Y, X) because U52 = plus, U52 in Mul, [12] and [13], by (Stat) 18] active#(U71(tt, X, Y)) >= mark#(U72(isNat, X, Y)) because active# = mark#, active# in Mul and [19], by (Fun) 19] U71(tt, X, Y) >= U72(isNat, X, Y) because U71 = U72, U71 in Mul, [11], [12] and [13], by (Fun) 20] active#(isNat) >= mark#(isNat) because active# = mark#, active# in Mul and [21], by (Fun) 21] isNat >= isNat because isNat in Mul, by (Fun) 22] active#(isNat) >= mark#(isNat) because active# = mark#, active# in Mul and [23], by (Fun) 23] isNat >= isNat because isNat in Mul, by (Fun) 24] active#(isNat) >= mark#(isNat) because active# = mark#, active# in Mul and [25], by (Fun) 25] isNat >= isNat because isNat in Mul, by (Fun) 26] active#(plus(X, 0)) >= mark#(U41(isNat, X)) because active# = mark#, active# in Mul and [27], by (Fun) 27] plus(X, 0) >= U41(isNat, X) because plus = U41, plus in Mul, [13] and [28], by (Fun) 28] 0 >= isNat because 0 = isNat, by (Fun) 29] active#(plus(X, s(Y))) >= mark#(U51(isNat, Y, X)) because active# = mark#, active# in Mul and [30], by (Fun) 30] plus(X, s(Y)) >= U51(isNat, Y, X) because [31], by (Star) 31] plus*(X, s(Y)) >= U51(isNat, Y, X) because plus = U51, plus in Mul, [13], [32] and [34], by (Stat) 32] s(Y) > isNat because [33], by definition 33] s*(Y) >= isNat because s > isNat, by (Copy) 34] s(Y) > Y because [35], by definition 35] s*(Y) >= Y because [12], by (Select) 36] active#(x(X, 0)) > mark#(isNat) because [37], by definition 37] active#*(x(X, 0)) >= mark#(isNat) because [38], by (Select) 38] x(X, 0) >= mark#(isNat) because [39], by (Star) 39] x*(X, 0) >= mark#(isNat) because x > mark# and [40], by (Copy) 40] x*(X, 0) >= isNat because [28], by (Select) 41] active#(x(X, s(Y))) >= mark#(U71(isNat, Y, X)) because active# = mark#, active# in Mul and [42], by (Fun) 42] x(X, s(Y)) >= U71(isNat, Y, X) because [43], by (Star) 43] x*(X, s(Y)) >= U71(isNat, Y, X) because x = U71, x in Mul, [13], [32] and [34], by (Stat) 44] mark#(X) >= active#(X) because mark# = active#, mark# in Mul and [45], by (Fun) 45] X >= X by (Meta) 46] mark#(X) >= mark#(X) because mark# in Mul and [45], by (Fun) 47] mark#(X) >= mark#(X) because mark# in Mul and [48], by (Fun) 48] X >= X by (Meta) 49] mark#(isNat) >= active#(isNat) because mark# = active#, mark# in Mul and [50], by (Fun) 50] isNat >= isNat because isNat in Mul, by (Fun) 51] mark#(X) >= mark#(X) because mark# in Mul and [52], by (Fun) 52] X >= X by (Meta) 53] mark#(X) >= active#(X) because mark# = active#, mark# in Mul and [54], by (Fun) 54] X >= X by (Meta) 55] mark#(X) >= mark#(X) because mark# in Mul and [54], by (Fun) 56] mark#(X) >= mark#(X) because mark# in Mul and [57], by (Fun) 57] X >= X by (Meta) 58] mark#(U41(X, Y)) >= active#(U41(X, Y)) because mark# = active#, mark# in Mul and [59], by (Fun) 59] U41(X, Y) >= U41(X, Y) because U41 in Mul, [60] and [61], by (Fun) 60] X >= X by (Meta) 61] Y >= Y by (Meta) 62] mark#(U41(X, Y)) >= mark#(X) because [63], by (Star) 63] mark#*(U41(X, Y)) >= mark#(X) because mark# in Mul and [64], by (Stat) 64] U41(X, Y) > X because [65], by definition 65] U41*(X, Y) >= X because [60], by (Select) 66] mark#(U51(X, Y, Z)) >= active#(U51(X, Y, Z)) because mark# = active#, mark# in Mul and [67], by (Fun) 67] U51(X, Y, Z) >= U51(X, Y, Z) because U51 in Mul, [60], [61] and [68], by (Fun) 68] Z >= Z by (Meta) 69] mark#(U51(X, Y, Z)) >= mark#(X) because mark# in Mul and [70], by (Fun) 70] U51(X, Y, Z) >= X because [71], by (Star) 71] U51*(X, Y, Z) >= X because [60], by (Select) 72] mark#(U52(X, Y, Z)) >= active#(U52(X, Y, Z)) because mark# = active#, mark# in Mul and [73], by (Fun) 73] U52(X, Y, Z) >= U52(X, Y, Z) because U52 in Mul, [60], [61] and [68], by (Fun) 74] mark#(U52(X, Y, Z)) >= mark#(X) because mark# in Mul and [75], by (Fun) 75] U52(X, Y, Z) >= X because [76], by (Star) 76] U52*(X, Y, Z) >= X because [60], by (Select) 77] mark#(s(X)) >= mark#(X) because mark# in Mul and [78], by (Fun) 78] s(X) >= X because [79], by (Star) 79] s*(X) >= X because [57], by (Select) 80] mark#(plus(X, Y)) >= active#(plus(X, Y)) because mark# = active#, mark# in Mul and [81], by (Fun) 81] plus(X, Y) >= plus(X, Y) because plus in Mul, [60] and [82], by (Fun) 82] Y >= Y by (Meta) 83] mark#(plus(X, Y)) >= mark#(X) because [84], by (Star) 84] mark#*(plus(X, Y)) >= mark#(X) because mark# in Mul and [85], by (Stat) 85] plus(X, Y) > X because [86], by definition 86] plus*(X, Y) >= X because [60], by (Select) 87] mark#(plus(X, Y)) > mark#(Y) because [88], by definition 88] mark#*(plus(X, Y)) >= mark#(Y) because mark# in Mul and [89], by (Stat) 89] plus(X, Y) > Y because [90], by definition 90] plus*(X, Y) >= Y because [82], by (Select) 91] mark#(X) >= mark#(X) because mark# in Mul and [92], by (Fun) 92] X >= X by (Meta) 93] mark#(U71(X, Y, Z)) >= active#(U71(X, Y, Z)) because mark# = active#, mark# in Mul and [94], by (Fun) 94] U71(X, Y, Z) >= U71(X, Y, Z) because U71 in Mul, [60], [82] and [68], by (Fun) 95] mark#(U71(X, Y, Z)) >= mark#(X) because [96], by (Star) 96] mark#*(U71(X, Y, Z)) >= mark#(X) because [97], by (Select) 97] U71(X, Y, Z) >= mark#(X) because [98], by (Star) 98] U71*(X, Y, Z) >= mark#(X) because U71 > mark# and [99], by (Copy) 99] U71*(X, Y, Z) >= X because [60], by (Select) 100] mark#(U72(X, Y, Z)) >= mark#(X) because mark# in Mul and [101], by (Fun) 101] U72(X, Y, Z) >= X because [102], by (Star) 102] U72*(X, Y, Z) >= X because [60], by (Select) 103] mark#(x(X, Y)) >= active#(x(X, Y)) because mark# = active#, mark# in Mul and [104], by (Fun) 104] x(X, Y) >= x(X, Y) because x in Mul, [60] and [82], by (Fun) 105] mark#(x(X, Y)) >= mark#(X) because mark# in Mul and [106], by (Fun) 106] x(X, Y) >= X because [107], by (Star) 107] x*(X, Y) >= X because [60], by (Select) 108] mark#(x(X, Y)) >= mark#(Y) because mark# in Mul and [109], by (Fun) 109] x(X, Y) >= Y because [110], by (Star) 110] x*(X, Y) >= Y because [82], by (Select) 111] tt >= isNat because tt = isNat, by (Fun) 112] tt >= tt by (Fun) 113] tt >= tt by (Fun) 114] tt >= isNat because tt = isNat, by (Fun) 115] tt >= tt by (Fun) 116] U41(tt, X) >= X because [7], by (Star) 117] U51(tt, X, Y) >= U52(isNat, X, Y) because U51 = U52, U51 in Mul, [11], [12] and [13], by (Fun) 118] U52(tt, X, Y) >= s(plus(Y, X)) because [16], by (Star) 119] tt >= 0 because tt = 0, by (Fun) 120] U71(tt, X, Y) >= U72(isNat, X, Y) because U71 = U72, U71 in Mul, [11], [12] and [13], by (Fun) 121] U72(tt, X, Y) >= plus(x(Y, X), Y) because [122], by (Star) 122] U72*(tt, X, Y) >= plus(x(Y, X), Y) because U72 > plus, [123] and [124], by (Copy) 123] U72*(tt, X, Y) >= x(Y, X) because U72 = x, U72 in Mul, [12] and [13], by (Stat) 124] U72*(tt, X, Y) >= Y because [13], by (Select) 125] isNat >= tt because isNat = tt, by (Fun) 126] isNat >= isNat because isNat in Mul, by (Fun) 127] isNat >= isNat because isNat in Mul, by (Fun) 128] isNat >= isNat because isNat in Mul, by (Fun) 129] plus(X, 0) >= U41(isNat, X) because plus = U41, plus in Mul, [13] and [28], by (Fun) 130] plus(X, s(Y)) >= U51(isNat, Y, X) because [31], by (Star) 131] x(X, 0) >= isNat because [40], by (Star) 132] x(X, s(Y)) >= U71(isNat, Y, X) because [43], by (Star) 133] X >= X by (Meta) 134] tt >= tt by (Fun) 135] X >= X by (Meta) 136] isNat >= isNat because isNat in Mul, by (Fun) 137] X >= X by (Meta) 138] X >= X by (Meta) 139] X >= X by (Meta) 140] U41(X, Y) >= U41(X, Y) because U41 in Mul, [60] and [82], by (Fun) 141] U51(X, Y, Z) >= U51(X, Y, Z) because U51 in Mul, [60], [82] and [68], by (Fun) 142] U52(X, Y, Z) >= U52(X, Y, Z) because U52 in Mul, [60], [82] and [68], by (Fun) 143] s(X) >= s(X) because s in Mul and [144], by (Fun) 144] X >= X by (Meta) 145] plus(X, Y) >= plus(X, Y) because plus in Mul, [60] and [82], by (Fun) 146] X >= X by (Meta) 147] 0 >= 0 by (Fun) 148] U71(X, Y, Z) >= U71(X, Y, Z) because U71 in Mul, [60], [82] and [68], by (Fun) 149] U72(X, Y, Z) >= U72(X, Y, Z) because U72 in Mul, [60], [82] and [68], by (Fun) 150] x(X, Y) >= x(X, Y) because x in Mul, [60] and [82], by (Fun) 151] X >= X by (Meta) 152] X >= X by (Meta) 153] X >= X by (Meta) 154] X >= X by (Meta) 155] X >= X by (Meta) 156] X >= X by (Meta) 157] isNat >= isNat because isNat in Mul, by (Fun) 158] isNat >= isNat because isNat in Mul, by (Fun) 159] X >= X by (Meta) 160] X >= X by (Meta) 161] X >= X by (Meta) 162] X >= X by (Meta) 163] X >= X by (Meta) 164] X >= X by (Meta) 165] X >= X by (Meta) 166] X >= X by (Meta) 167] U41(X, Y) >= U41(X, Y) because U41 in Mul, [168] and [82], by (Fun) 168] X >= X by (Meta) 169] U41(X, Y) >= U41(X, Y) because U41 in Mul, [60] and [170], by (Fun) 170] Y >= Y by (Meta) 171] U41(X, Y) >= U41(X, Y) because U41 in Mul, [172] and [82], by (Fun) 172] X >= X by (Meta) 173] U41(X, Y) >= U41(X, Y) because U41 in Mul, [60] and [174], by (Fun) 174] Y >= Y by (Meta) 175] U51(X, Y, Z) >= U51(X, Y, Z) because U51 in Mul, [168], [82] and [68], by (Fun) 176] U51(X, Y, Z) >= U51(X, Y, Z) because U51 in Mul, [60], [170] and [68], by (Fun) 177] U51(X, Y, Z) >= U51(X, Y, Z) because U51 in Mul, [60], [82] and [178], by (Fun) 178] Z >= Z by (Meta) 179] U51(X, Y, Z) >= U51(X, Y, Z) because U51 in Mul, [172], [82] and [68], by (Fun) 180] U51(X, Y, Z) >= U51(X, Y, Z) because U51 in Mul, [60], [174] and [68], by (Fun) 181] U51(X, Y, Z) >= U51(X, Y, Z) because U51 in Mul, [60], [82] and [182], by (Fun) 182] Z >= Z by (Meta) 183] U52(X, Y, Z) >= U52(X, Y, Z) because U52 in Mul, [168], [82] and [68], by (Fun) 184] U52(X, Y, Z) >= U52(X, Y, Z) because U52 in Mul, [60], [170] and [68], by (Fun) 185] U52(X, Y, Z) >= U52(X, Y, Z) because U52 in Mul, [60], [82] and [178], by (Fun) 186] U52(X, Y, Z) >= U52(X, Y, Z) because U52 in Mul, [172], [82] and [68], by (Fun) 187] U52(X, Y, Z) >= U52(X, Y, Z) because U52 in Mul, [60], [174] and [68], by (Fun) 188] U52(X, Y, Z) >= U52(X, Y, Z) because U52 in Mul, [60], [82] and [182], by (Fun) 189] s(X) >= s(X) because s in Mul and [190], by (Fun) 190] X >= X by (Meta) 191] s(X) >= s(X) because s in Mul and [192], by (Fun) 192] X >= X by (Meta) 193] plus(X, Y) >= plus(X, Y) because plus in Mul, [168] and [82], by (Fun) 194] plus(X, Y) >= plus(X, Y) because plus in Mul, [60] and [170], by (Fun) 195] plus(X, Y) >= plus(X, Y) because plus in Mul, [172] and [82], by (Fun) 196] plus(X, Y) >= plus(X, Y) because plus in Mul, [60] and [174], by (Fun) 197] X >= X by (Meta) 198] X >= X by (Meta) 199] U71(X, Y, Z) >= U71(X, Y, Z) because U71 in Mul, [168], [82] and [68], by (Fun) 200] U71(X, Y, Z) >= U71(X, Y, Z) because U71 in Mul, [60], [170] and [68], by (Fun) 201] U71(X, Y, Z) >= U71(X, Y, Z) because U71 in Mul, [60], [82] and [178], by (Fun) 202] U71(X, Y, Z) >= U71(X, Y, Z) because U71 in Mul, [172], [82] and [68], by (Fun) 203] U71(X, Y, Z) >= U71(X, Y, Z) because U71 in Mul, [60], [174] and [68], by (Fun) 204] U71(X, Y, Z) >= U71(X, Y, Z) because U71 in Mul, [60], [82] and [182], by (Fun) 205] U72(X, Y, Z) >= U72(X, Y, Z) because U72 in Mul, [168], [82] and [68], by (Fun) 206] U72(X, Y, Z) >= U72(X, Y, Z) because U72 in Mul, [60], [170] and [68], by (Fun) 207] U72(X, Y, Z) >= U72(X, Y, Z) because U72 in Mul, [60], [82] and [178], by (Fun) 208] U72(X, Y, Z) >= U72(X, Y, Z) because U72 in Mul, [172], [82] and [68], by (Fun) 209] U72(X, Y, Z) >= U72(X, Y, Z) because U72 in Mul, [60], [174] and [68], by (Fun) 210] U72(X, Y, Z) >= U72(X, Y, Z) because U72 in Mul, [60], [82] and [182], by (Fun) 211] x(X, Y) >= x(X, Y) because x in Mul, [168] and [82], by (Fun) 212] x(X, Y) >= x(X, Y) because x in Mul, [60] and [170], by (Fun) 213] x(X, Y) >= x(X, Y) because x in Mul, [172] and [82], by (Fun) 214] x(X, Y) >= x(X, Y) because x in Mul, [60] and [174], by (Fun) By the observations in [Kop12, Sec. 6.6], this reduction pair suffices; we may thus replace the dependency pair problem (P_31, R_0, minimal, formative) by (P_32, R_0, minimal, formative), where P_32 consists of: active#(U11(tt, X)) =#> mark#(U12(isNat(X))) active#(U31(tt, X)) =#> mark#(U32(isNat(X))) active#(U41(tt, X)) =#> mark#(X) active#(U51(tt, X, Y)) =#> mark#(U52(isNat(Y), X, Y)) active#(U52(tt, X, Y)) =#> mark#(s(plus(Y, X))) active#(U71(tt, X, Y)) =#> mark#(U72(isNat(Y), X, Y)) active#(isNat(plus(X, Y))) =#> mark#(U11(isNat(X), Y)) active#(isNat(s(X))) =#> mark#(U21(isNat(X))) active#(isNat(x(X, Y))) =#> mark#(U31(isNat(X), Y)) active#(plus(X, 0)) =#> mark#(U41(isNat(X), X)) active#(plus(X, s(Y))) =#> mark#(U51(isNat(Y), Y, X)) active#(x(X, s(Y))) =#> mark#(U71(isNat(Y), Y, X)) mark#(U11(X, Y)) =#> active#(U11(mark(X), Y)) mark#(U11(X, Y)) =#> mark#(X) mark#(U12(X)) =#> mark#(X) mark#(isNat(X)) =#> active#(isNat(X)) mark#(U21(X)) =#> mark#(X) mark#(U31(X, Y)) =#> active#(U31(mark(X), Y)) mark#(U31(X, Y)) =#> mark#(X) mark#(U32(X)) =#> mark#(X) mark#(U41(X, Y)) =#> active#(U41(mark(X), Y)) mark#(U41(X, Y)) =#> mark#(X) mark#(U51(X, Y, Z)) =#> active#(U51(mark(X), Y, Z)) mark#(U51(X, Y, Z)) =#> mark#(X) mark#(U52(X, Y, Z)) =#> active#(U52(mark(X), Y, Z)) mark#(U52(X, Y, Z)) =#> mark#(X) mark#(s(X)) =#> mark#(X) mark#(plus(X, Y)) =#> active#(plus(mark(X), mark(Y))) mark#(plus(X, Y)) =#> mark#(X) mark#(U61(X)) =#> mark#(X) mark#(U71(X, Y, Z)) =#> active#(U71(mark(X), Y, Z)) mark#(U71(X, Y, Z)) =#> mark#(X) mark#(U72(X, Y, Z)) =#> mark#(X) mark#(x(X, Y)) =#> active#(x(mark(X), mark(Y))) mark#(x(X, Y)) =#> mark#(X) mark#(x(X, Y)) =#> mark#(Y) Thus, the original system is terminating if (P_32, R_0, minimal, formative) is finite. We consider the dependency pair problem (P_32, R_0, minimal, formative). We will use the reduction pair processor [Kop12, Thm. 7.16]. It suffices to find a standard reduction pair [Kop12, Def. 6.69]. Thus, we must orient: active#(U11(tt, X)) >? mark#(U12(isNat(X))) active#(U31(tt, X)) >? mark#(U32(isNat(X))) active#(U41(tt, X)) >? mark#(X) active#(U51(tt, X, Y)) >? mark#(U52(isNat(Y), X, Y)) active#(U52(tt, X, Y)) >? mark#(s(plus(Y, X))) active#(U71(tt, X, Y)) >? mark#(U72(isNat(Y), X, Y)) active#(isNat(plus(X, Y))) >? mark#(U11(isNat(X), Y)) active#(isNat(s(X))) >? mark#(U21(isNat(X))) active#(isNat(x(X, Y))) >? mark#(U31(isNat(X), Y)) active#(plus(X, 0)) >? mark#(U41(isNat(X), X)) active#(plus(X, s(Y))) >? mark#(U51(isNat(Y), Y, X)) active#(x(X, s(Y))) >? mark#(U71(isNat(Y), Y, X)) mark#(U11(X, Y)) >? active#(U11(mark(X), Y)) mark#(U11(X, Y)) >? mark#(X) mark#(U12(X)) >? mark#(X) mark#(isNat(X)) >? active#(isNat(X)) mark#(U21(X)) >? mark#(X) mark#(U31(X, Y)) >? active#(U31(mark(X), Y)) mark#(U31(X, Y)) >? mark#(X) mark#(U32(X)) >? mark#(X) mark#(U41(X, Y)) >? active#(U41(mark(X), Y)) mark#(U41(X, Y)) >? mark#(X) mark#(U51(X, Y, Z)) >? active#(U51(mark(X), Y, Z)) mark#(U51(X, Y, Z)) >? mark#(X) mark#(U52(X, Y, Z)) >? active#(U52(mark(X), Y, Z)) mark#(U52(X, Y, Z)) >? mark#(X) mark#(s(X)) >? mark#(X) mark#(plus(X, Y)) >? active#(plus(mark(X), mark(Y))) mark#(plus(X, Y)) >? mark#(X) mark#(U61(X)) >? mark#(X) mark#(U71(X, Y, Z)) >? active#(U71(mark(X), Y, Z)) mark#(U71(X, Y, Z)) >? mark#(X) mark#(U72(X, Y, Z)) >? mark#(X) mark#(x(X, Y)) >? active#(x(mark(X), mark(Y))) mark#(x(X, Y)) >? mark#(X) mark#(x(X, Y)) >? mark#(Y) active(U11(tt, X)) >= mark(U12(isNat(X))) active(U12(tt)) >= mark(tt) active(U21(tt)) >= mark(tt) active(U31(tt, X)) >= mark(U32(isNat(X))) active(U32(tt)) >= mark(tt) active(U41(tt, X)) >= mark(X) active(U51(tt, X, Y)) >= mark(U52(isNat(Y), X, Y)) active(U52(tt, X, Y)) >= mark(s(plus(Y, X))) active(U61(tt)) >= mark(0) active(U71(tt, X, Y)) >= mark(U72(isNat(Y), X, Y)) active(U72(tt, X, Y)) >= mark(plus(x(Y, X), Y)) active(isNat(0)) >= mark(tt) active(isNat(plus(X, Y))) >= mark(U11(isNat(X), Y)) active(isNat(s(X))) >= mark(U21(isNat(X))) active(isNat(x(X, Y))) >= mark(U31(isNat(X), Y)) active(plus(X, 0)) >= mark(U41(isNat(X), X)) active(plus(X, s(Y))) >= mark(U51(isNat(Y), Y, X)) active(x(X, 0)) >= mark(U61(isNat(X))) active(x(X, s(Y))) >= mark(U71(isNat(Y), Y, X)) mark(U11(X, Y)) >= active(U11(mark(X), Y)) mark(tt) >= active(tt) mark(U12(X)) >= active(U12(mark(X))) mark(isNat(X)) >= active(isNat(X)) mark(U21(X)) >= active(U21(mark(X))) mark(U31(X, Y)) >= active(U31(mark(X), Y)) mark(U32(X)) >= active(U32(mark(X))) mark(U41(X, Y)) >= active(U41(mark(X), Y)) mark(U51(X, Y, Z)) >= active(U51(mark(X), Y, Z)) mark(U52(X, Y, Z)) >= active(U52(mark(X), Y, Z)) mark(s(X)) >= active(s(mark(X))) mark(plus(X, Y)) >= active(plus(mark(X), mark(Y))) mark(U61(X)) >= active(U61(mark(X))) mark(0) >= active(0) mark(U71(X, Y, Z)) >= active(U71(mark(X), Y, Z)) mark(U72(X, Y, Z)) >= active(U72(mark(X), Y, Z)) mark(x(X, Y)) >= active(x(mark(X), mark(Y))) U11(mark(X), Y) >= U11(X, Y) U11(X, mark(Y)) >= U11(X, Y) U11(active(X), Y) >= U11(X, Y) U11(X, active(Y)) >= U11(X, Y) U12(mark(X)) >= U12(X) U12(active(X)) >= U12(X) isNat(mark(X)) >= isNat(X) isNat(active(X)) >= isNat(X) U21(mark(X)) >= U21(X) U21(active(X)) >= U21(X) U31(mark(X), Y) >= U31(X, Y) U31(X, mark(Y)) >= U31(X, Y) U31(active(X), Y) >= U31(X, Y) U31(X, active(Y)) >= U31(X, Y) U32(mark(X)) >= U32(X) U32(active(X)) >= U32(X) U41(mark(X), Y) >= U41(X, Y) U41(X, mark(Y)) >= U41(X, Y) U41(active(X), Y) >= U41(X, Y) U41(X, active(Y)) >= U41(X, Y) U51(mark(X), Y, Z) >= U51(X, Y, Z) U51(X, mark(Y), Z) >= U51(X, Y, Z) U51(X, Y, mark(Z)) >= U51(X, Y, Z) U51(active(X), Y, Z) >= U51(X, Y, Z) U51(X, active(Y), Z) >= U51(X, Y, Z) U51(X, Y, active(Z)) >= U51(X, Y, Z) U52(mark(X), Y, Z) >= U52(X, Y, Z) U52(X, mark(Y), Z) >= U52(X, Y, Z) U52(X, Y, mark(Z)) >= U52(X, Y, Z) U52(active(X), Y, Z) >= U52(X, Y, Z) U52(X, active(Y), Z) >= U52(X, Y, Z) U52(X, Y, active(Z)) >= U52(X, Y, Z) s(mark(X)) >= s(X) s(active(X)) >= s(X) plus(mark(X), Y) >= plus(X, Y) plus(X, mark(Y)) >= plus(X, Y) plus(active(X), Y) >= plus(X, Y) plus(X, active(Y)) >= plus(X, Y) U61(mark(X)) >= U61(X) U61(active(X)) >= U61(X) U71(mark(X), Y, Z) >= U71(X, Y, Z) U71(X, mark(Y), Z) >= U71(X, Y, Z) U71(X, Y, mark(Z)) >= U71(X, Y, Z) U71(active(X), Y, Z) >= U71(X, Y, Z) U71(X, active(Y), Z) >= U71(X, Y, Z) U71(X, Y, active(Z)) >= U71(X, Y, Z) U72(mark(X), Y, Z) >= U72(X, Y, Z) U72(X, mark(Y), Z) >= U72(X, Y, Z) U72(X, Y, mark(Z)) >= U72(X, Y, Z) U72(active(X), Y, Z) >= U72(X, Y, Z) U72(X, active(Y), Z) >= U72(X, Y, Z) U72(X, Y, active(Z)) >= U72(X, Y, Z) x(mark(X), Y) >= x(X, Y) x(X, mark(Y)) >= x(X, Y) x(active(X), Y) >= x(X, Y) x(X, active(Y)) >= x(X, Y) We orient these requirements with a polynomial interpretation in the natural numbers. The following interpretation satisfies the requirements: 0 = 1 U11 = \y0y1.2y0 U12 = \y0.y0 U21 = \y0.2y0 U31 = \y0y1.2y0 U32 = \y0.y0 U41 = \y0y1.y0 + y1 U51 = \y0y1y2.y2 + 2y0 U52 = \y0y1y2.y2 + 2y0 U61 = \y0.1 + y0 U71 = \y0y1y2.y1 + 2y0 + 2y2 U72 = \y0y1y2.y0 + y1 + 2y2 active = \y0.y0 active# = \y0.2y0 isNat = \y0.0 mark = \y0.y0 mark# = \y0.2y0 plus = \y0y1.y0 s = \y0.y0 tt = 0 x = \y0y1.y1 + 2y0 Using this interpretation, the requirements translate to: [[active#(U11(tt, _x0))]] = 0 >= 0 = [[mark#(U12(isNat(_x0)))]] [[active#(U31(tt, _x0))]] = 0 >= 0 = [[mark#(U32(isNat(_x0)))]] [[active#(U41(tt, _x0))]] = 2x0 >= 2x0 = [[mark#(_x0)]] [[active#(U51(tt, _x0, _x1))]] = 2x1 >= 2x1 = [[mark#(U52(isNat(_x1), _x0, _x1))]] [[active#(U52(tt, _x0, _x1))]] = 2x1 >= 2x1 = [[mark#(s(plus(_x1, _x0)))]] [[active#(U71(tt, _x0, _x1))]] = 2x0 + 4x1 >= 2x0 + 4x1 = [[mark#(U72(isNat(_x1), _x0, _x1))]] [[active#(isNat(plus(_x0, _x1)))]] = 0 >= 0 = [[mark#(U11(isNat(_x0), _x1))]] [[active#(isNat(s(_x0)))]] = 0 >= 0 = [[mark#(U21(isNat(_x0)))]] [[active#(isNat(x(_x0, _x1)))]] = 0 >= 0 = [[mark#(U31(isNat(_x0), _x1))]] [[active#(plus(_x0, 0))]] = 2x0 >= 2x0 = [[mark#(U41(isNat(_x0), _x0))]] [[active#(plus(_x0, s(_x1)))]] = 2x0 >= 2x0 = [[mark#(U51(isNat(_x1), _x1, _x0))]] [[active#(x(_x0, s(_x1)))]] = 2x1 + 4x0 >= 2x1 + 4x0 = [[mark#(U71(isNat(_x1), _x1, _x0))]] [[mark#(U11(_x0, _x1))]] = 4x0 >= 4x0 = [[active#(U11(mark(_x0), _x1))]] [[mark#(U11(_x0, _x1))]] = 4x0 >= 2x0 = [[mark#(_x0)]] [[mark#(U12(_x0))]] = 2x0 >= 2x0 = [[mark#(_x0)]] [[mark#(isNat(_x0))]] = 0 >= 0 = [[active#(isNat(_x0))]] [[mark#(U21(_x0))]] = 4x0 >= 2x0 = [[mark#(_x0)]] [[mark#(U31(_x0, _x1))]] = 4x0 >= 4x0 = [[active#(U31(mark(_x0), _x1))]] [[mark#(U31(_x0, _x1))]] = 4x0 >= 2x0 = [[mark#(_x0)]] [[mark#(U32(_x0))]] = 2x0 >= 2x0 = [[mark#(_x0)]] [[mark#(U41(_x0, _x1))]] = 2x0 + 2x1 >= 2x0 + 2x1 = [[active#(U41(mark(_x0), _x1))]] [[mark#(U41(_x0, _x1))]] = 2x0 + 2x1 >= 2x0 = [[mark#(_x0)]] [[mark#(U51(_x0, _x1, _x2))]] = 2x2 + 4x0 >= 2x2 + 4x0 = [[active#(U51(mark(_x0), _x1, _x2))]] [[mark#(U51(_x0, _x1, _x2))]] = 2x2 + 4x0 >= 2x0 = [[mark#(_x0)]] [[mark#(U52(_x0, _x1, _x2))]] = 2x2 + 4x0 >= 2x2 + 4x0 = [[active#(U52(mark(_x0), _x1, _x2))]] [[mark#(U52(_x0, _x1, _x2))]] = 2x2 + 4x0 >= 2x0 = [[mark#(_x0)]] [[mark#(s(_x0))]] = 2x0 >= 2x0 = [[mark#(_x0)]] [[mark#(plus(_x0, _x1))]] = 2x0 >= 2x0 = [[active#(plus(mark(_x0), mark(_x1)))]] [[mark#(plus(_x0, _x1))]] = 2x0 >= 2x0 = [[mark#(_x0)]] [[mark#(U61(_x0))]] = 2 + 2x0 > 2x0 = [[mark#(_x0)]] [[mark#(U71(_x0, _x1, _x2))]] = 2x1 + 4x0 + 4x2 >= 2x1 + 4x0 + 4x2 = [[active#(U71(mark(_x0), _x1, _x2))]] [[mark#(U71(_x0, _x1, _x2))]] = 2x1 + 4x0 + 4x2 >= 2x0 = [[mark#(_x0)]] [[mark#(U72(_x0, _x1, _x2))]] = 2x0 + 2x1 + 4x2 >= 2x0 = [[mark#(_x0)]] [[mark#(x(_x0, _x1))]] = 2x1 + 4x0 >= 2x1 + 4x0 = [[active#(x(mark(_x0), mark(_x1)))]] [[mark#(x(_x0, _x1))]] = 2x1 + 4x0 >= 2x0 = [[mark#(_x0)]] [[mark#(x(_x0, _x1))]] = 2x1 + 4x0 >= 2x1 = [[mark#(_x1)]] [[active(U11(tt, _x0))]] = 0 >= 0 = [[mark(U12(isNat(_x0)))]] [[active(U12(tt))]] = 0 >= 0 = [[mark(tt)]] [[active(U21(tt))]] = 0 >= 0 = [[mark(tt)]] [[active(U31(tt, _x0))]] = 0 >= 0 = [[mark(U32(isNat(_x0)))]] [[active(U32(tt))]] = 0 >= 0 = [[mark(tt)]] [[active(U41(tt, _x0))]] = x0 >= x0 = [[mark(_x0)]] [[active(U51(tt, _x0, _x1))]] = x1 >= x1 = [[mark(U52(isNat(_x1), _x0, _x1))]] [[active(U52(tt, _x0, _x1))]] = x1 >= x1 = [[mark(s(plus(_x1, _x0)))]] [[active(U61(tt))]] = 1 >= 1 = [[mark(0)]] [[active(U71(tt, _x0, _x1))]] = x0 + 2x1 >= x0 + 2x1 = [[mark(U72(isNat(_x1), _x0, _x1))]] [[active(U72(tt, _x0, _x1))]] = x0 + 2x1 >= x0 + 2x1 = [[mark(plus(x(_x1, _x0), _x1))]] [[active(isNat(0))]] = 0 >= 0 = [[mark(tt)]] [[active(isNat(plus(_x0, _x1)))]] = 0 >= 0 = [[mark(U11(isNat(_x0), _x1))]] [[active(isNat(s(_x0)))]] = 0 >= 0 = [[mark(U21(isNat(_x0)))]] [[active(isNat(x(_x0, _x1)))]] = 0 >= 0 = [[mark(U31(isNat(_x0), _x1))]] [[active(plus(_x0, 0))]] = x0 >= x0 = [[mark(U41(isNat(_x0), _x0))]] [[active(plus(_x0, s(_x1)))]] = x0 >= x0 = [[mark(U51(isNat(_x1), _x1, _x0))]] [[active(x(_x0, 0))]] = 1 + 2x0 >= 1 = [[mark(U61(isNat(_x0)))]] [[active(x(_x0, s(_x1)))]] = x1 + 2x0 >= x1 + 2x0 = [[mark(U71(isNat(_x1), _x1, _x0))]] [[mark(U11(_x0, _x1))]] = 2x0 >= 2x0 = [[active(U11(mark(_x0), _x1))]] [[mark(tt)]] = 0 >= 0 = [[active(tt)]] [[mark(U12(_x0))]] = x0 >= x0 = [[active(U12(mark(_x0)))]] [[mark(isNat(_x0))]] = 0 >= 0 = [[active(isNat(_x0))]] [[mark(U21(_x0))]] = 2x0 >= 2x0 = [[active(U21(mark(_x0)))]] [[mark(U31(_x0, _x1))]] = 2x0 >= 2x0 = [[active(U31(mark(_x0), _x1))]] [[mark(U32(_x0))]] = x0 >= x0 = [[active(U32(mark(_x0)))]] [[mark(U41(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active(U41(mark(_x0), _x1))]] [[mark(U51(_x0, _x1, _x2))]] = x2 + 2x0 >= x2 + 2x0 = [[active(U51(mark(_x0), _x1, _x2))]] [[mark(U52(_x0, _x1, _x2))]] = x2 + 2x0 >= x2 + 2x0 = [[active(U52(mark(_x0), _x1, _x2))]] [[mark(s(_x0))]] = x0 >= x0 = [[active(s(mark(_x0)))]] [[mark(plus(_x0, _x1))]] = x0 >= x0 = [[active(plus(mark(_x0), mark(_x1)))]] [[mark(U61(_x0))]] = 1 + x0 >= 1 + x0 = [[active(U61(mark(_x0)))]] [[mark(0)]] = 1 >= 1 = [[active(0)]] [[mark(U71(_x0, _x1, _x2))]] = x1 + 2x0 + 2x2 >= x1 + 2x0 + 2x2 = [[active(U71(mark(_x0), _x1, _x2))]] [[mark(U72(_x0, _x1, _x2))]] = x0 + x1 + 2x2 >= x0 + x1 + 2x2 = [[active(U72(mark(_x0), _x1, _x2))]] [[mark(x(_x0, _x1))]] = x1 + 2x0 >= x1 + 2x0 = [[active(x(mark(_x0), mark(_x1)))]] [[U11(mark(_x0), _x1)]] = 2x0 >= 2x0 = [[U11(_x0, _x1)]] [[U11(_x0, mark(_x1))]] = 2x0 >= 2x0 = [[U11(_x0, _x1)]] [[U11(active(_x0), _x1)]] = 2x0 >= 2x0 = [[U11(_x0, _x1)]] [[U11(_x0, active(_x1))]] = 2x0 >= 2x0 = [[U11(_x0, _x1)]] [[U12(mark(_x0))]] = x0 >= x0 = [[U12(_x0)]] [[U12(active(_x0))]] = x0 >= x0 = [[U12(_x0)]] [[isNat(mark(_x0))]] = 0 >= 0 = [[isNat(_x0)]] [[isNat(active(_x0))]] = 0 >= 0 = [[isNat(_x0)]] [[U21(mark(_x0))]] = 2x0 >= 2x0 = [[U21(_x0)]] [[U21(active(_x0))]] = 2x0 >= 2x0 = [[U21(_x0)]] [[U31(mark(_x0), _x1)]] = 2x0 >= 2x0 = [[U31(_x0, _x1)]] [[U31(_x0, mark(_x1))]] = 2x0 >= 2x0 = [[U31(_x0, _x1)]] [[U31(active(_x0), _x1)]] = 2x0 >= 2x0 = [[U31(_x0, _x1)]] [[U31(_x0, active(_x1))]] = 2x0 >= 2x0 = [[U31(_x0, _x1)]] [[U32(mark(_x0))]] = x0 >= x0 = [[U32(_x0)]] [[U32(active(_x0))]] = x0 >= x0 = [[U32(_x0)]] [[U41(mark(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U41(_x0, _x1)]] [[U41(_x0, mark(_x1))]] = x0 + x1 >= x0 + x1 = [[U41(_x0, _x1)]] [[U41(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U41(_x0, _x1)]] [[U41(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U41(_x0, _x1)]] [[U51(mark(_x0), _x1, _x2)]] = x2 + 2x0 >= x2 + 2x0 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, mark(_x1), _x2)]] = x2 + 2x0 >= x2 + 2x0 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, _x1, mark(_x2))]] = x2 + 2x0 >= x2 + 2x0 = [[U51(_x0, _x1, _x2)]] [[U51(active(_x0), _x1, _x2)]] = x2 + 2x0 >= x2 + 2x0 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, active(_x1), _x2)]] = x2 + 2x0 >= x2 + 2x0 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, _x1, active(_x2))]] = x2 + 2x0 >= x2 + 2x0 = [[U51(_x0, _x1, _x2)]] [[U52(mark(_x0), _x1, _x2)]] = x2 + 2x0 >= x2 + 2x0 = [[U52(_x0, _x1, _x2)]] [[U52(_x0, mark(_x1), _x2)]] = x2 + 2x0 >= x2 + 2x0 = [[U52(_x0, _x1, _x2)]] [[U52(_x0, _x1, mark(_x2))]] = x2 + 2x0 >= x2 + 2x0 = [[U52(_x0, _x1, _x2)]] [[U52(active(_x0), _x1, _x2)]] = x2 + 2x0 >= x2 + 2x0 = [[U52(_x0, _x1, _x2)]] [[U52(_x0, active(_x1), _x2)]] = x2 + 2x0 >= x2 + 2x0 = [[U52(_x0, _x1, _x2)]] [[U52(_x0, _x1, active(_x2))]] = x2 + 2x0 >= x2 + 2x0 = [[U52(_x0, _x1, _x2)]] [[s(mark(_x0))]] = x0 >= x0 = [[s(_x0)]] [[s(active(_x0))]] = x0 >= x0 = [[s(_x0)]] [[plus(mark(_x0), _x1)]] = x0 >= x0 = [[plus(_x0, _x1)]] [[plus(_x0, mark(_x1))]] = x0 >= x0 = [[plus(_x0, _x1)]] [[plus(active(_x0), _x1)]] = x0 >= x0 = [[plus(_x0, _x1)]] [[plus(_x0, active(_x1))]] = x0 >= x0 = [[plus(_x0, _x1)]] [[U61(mark(_x0))]] = 1 + x0 >= 1 + x0 = [[U61(_x0)]] [[U61(active(_x0))]] = 1 + x0 >= 1 + x0 = [[U61(_x0)]] [[U71(mark(_x0), _x1, _x2)]] = x1 + 2x0 + 2x2 >= x1 + 2x0 + 2x2 = [[U71(_x0, _x1, _x2)]] [[U71(_x0, mark(_x1), _x2)]] = x1 + 2x0 + 2x2 >= x1 + 2x0 + 2x2 = [[U71(_x0, _x1, _x2)]] [[U71(_x0, _x1, mark(_x2))]] = x1 + 2x0 + 2x2 >= x1 + 2x0 + 2x2 = [[U71(_x0, _x1, _x2)]] [[U71(active(_x0), _x1, _x2)]] = x1 + 2x0 + 2x2 >= x1 + 2x0 + 2x2 = [[U71(_x0, _x1, _x2)]] [[U71(_x0, active(_x1), _x2)]] = x1 + 2x0 + 2x2 >= x1 + 2x0 + 2x2 = [[U71(_x0, _x1, _x2)]] [[U71(_x0, _x1, active(_x2))]] = x1 + 2x0 + 2x2 >= x1 + 2x0 + 2x2 = [[U71(_x0, _x1, _x2)]] [[U72(mark(_x0), _x1, _x2)]] = x0 + x1 + 2x2 >= x0 + x1 + 2x2 = [[U72(_x0, _x1, _x2)]] [[U72(_x0, mark(_x1), _x2)]] = x0 + x1 + 2x2 >= x0 + x1 + 2x2 = [[U72(_x0, _x1, _x2)]] [[U72(_x0, _x1, mark(_x2))]] = x0 + x1 + 2x2 >= x0 + x1 + 2x2 = [[U72(_x0, _x1, _x2)]] [[U72(active(_x0), _x1, _x2)]] = x0 + x1 + 2x2 >= x0 + x1 + 2x2 = [[U72(_x0, _x1, _x2)]] [[U72(_x0, active(_x1), _x2)]] = x0 + x1 + 2x2 >= x0 + x1 + 2x2 = [[U72(_x0, _x1, _x2)]] [[U72(_x0, _x1, active(_x2))]] = x0 + x1 + 2x2 >= x0 + x1 + 2x2 = [[U72(_x0, _x1, _x2)]] [[x(mark(_x0), _x1)]] = x1 + 2x0 >= x1 + 2x0 = [[x(_x0, _x1)]] [[x(_x0, mark(_x1))]] = x1 + 2x0 >= x1 + 2x0 = [[x(_x0, _x1)]] [[x(active(_x0), _x1)]] = x1 + 2x0 >= x1 + 2x0 = [[x(_x0, _x1)]] [[x(_x0, active(_x1))]] = x1 + 2x0 >= x1 + 2x0 = [[x(_x0, _x1)]] By the observations in [Kop12, Sec. 6.6], this reduction pair suffices; we may thus replace the dependency pair problem (P_32, R_0, minimal, formative) by (P_33, R_0, minimal, formative), where P_33 consists of: active#(U11(tt, X)) =#> mark#(U12(isNat(X))) active#(U31(tt, X)) =#> mark#(U32(isNat(X))) active#(U41(tt, X)) =#> mark#(X) active#(U51(tt, X, Y)) =#> mark#(U52(isNat(Y), X, Y)) active#(U52(tt, X, Y)) =#> mark#(s(plus(Y, X))) active#(U71(tt, X, Y)) =#> mark#(U72(isNat(Y), X, Y)) active#(isNat(plus(X, Y))) =#> mark#(U11(isNat(X), Y)) active#(isNat(s(X))) =#> mark#(U21(isNat(X))) active#(isNat(x(X, Y))) =#> mark#(U31(isNat(X), Y)) active#(plus(X, 0)) =#> mark#(U41(isNat(X), X)) active#(plus(X, s(Y))) =#> mark#(U51(isNat(Y), Y, X)) active#(x(X, s(Y))) =#> mark#(U71(isNat(Y), Y, X)) mark#(U11(X, Y)) =#> active#(U11(mark(X), Y)) mark#(U11(X, Y)) =#> mark#(X) mark#(U12(X)) =#> mark#(X) mark#(isNat(X)) =#> active#(isNat(X)) mark#(U21(X)) =#> mark#(X) mark#(U31(X, Y)) =#> active#(U31(mark(X), Y)) mark#(U31(X, Y)) =#> mark#(X) mark#(U32(X)) =#> mark#(X) mark#(U41(X, Y)) =#> active#(U41(mark(X), Y)) mark#(U41(X, Y)) =#> mark#(X) mark#(U51(X, Y, Z)) =#> active#(U51(mark(X), Y, Z)) mark#(U51(X, Y, Z)) =#> mark#(X) mark#(U52(X, Y, Z)) =#> active#(U52(mark(X), Y, Z)) mark#(U52(X, Y, Z)) =#> mark#(X) mark#(s(X)) =#> mark#(X) mark#(plus(X, Y)) =#> active#(plus(mark(X), mark(Y))) mark#(plus(X, Y)) =#> mark#(X) mark#(U71(X, Y, Z)) =#> active#(U71(mark(X), Y, Z)) mark#(U71(X, Y, Z)) =#> mark#(X) mark#(U72(X, Y, Z)) =#> mark#(X) mark#(x(X, Y)) =#> active#(x(mark(X), mark(Y))) mark#(x(X, Y)) =#> mark#(X) mark#(x(X, Y)) =#> mark#(Y) Thus, the original system is terminating if (P_33, R_0, minimal, formative) is finite. We consider the dependency pair problem (P_33, R_0, minimal, formative). The formative rules of (P_33, R_0) are R_1 ::= active(U11(tt, X)) => mark(U12(isNat(X))) active(U12(tt)) => mark(tt) active(U21(tt)) => mark(tt) active(U31(tt, X)) => mark(U32(isNat(X))) active(U32(tt)) => mark(tt) active(U41(tt, X)) => mark(X) active(U51(tt, X, Y)) => mark(U52(isNat(Y), X, Y)) active(U52(tt, X, Y)) => mark(s(plus(Y, X))) active(U61(tt)) => mark(0) active(U71(tt, X, Y)) => mark(U72(isNat(Y), X, Y)) active(U72(tt, X, Y)) => mark(plus(x(Y, X), Y)) active(isNat(0)) => mark(tt) active(isNat(plus(X, Y))) => mark(U11(isNat(X), Y)) active(isNat(s(X))) => mark(U21(isNat(X))) active(isNat(x(X, Y))) => mark(U31(isNat(X), Y)) active(plus(X, 0)) => mark(U41(isNat(X), X)) active(plus(X, s(Y))) => mark(U51(isNat(Y), Y, X)) active(x(X, 0)) => mark(U61(isNat(X))) active(x(X, s(Y))) => mark(U71(isNat(Y), Y, X)) mark(U11(X, Y)) => active(U11(mark(X), Y)) mark(tt) => active(tt) mark(U12(X)) => active(U12(mark(X))) mark(isNat(X)) => active(isNat(X)) mark(U21(X)) => active(U21(mark(X))) mark(U31(X, Y)) => active(U31(mark(X), Y)) mark(U32(X)) => active(U32(mark(X))) mark(U41(X, Y)) => active(U41(mark(X), Y)) mark(U51(X, Y, Z)) => active(U51(mark(X), Y, Z)) mark(U52(X, Y, Z)) => active(U52(mark(X), Y, Z)) mark(s(X)) => active(s(mark(X))) mark(plus(X, Y)) => active(plus(mark(X), mark(Y))) mark(U61(X)) => active(U61(mark(X))) mark(0) => active(0) mark(U71(X, Y, Z)) => active(U71(mark(X), Y, Z)) mark(U72(X, Y, Z)) => active(U72(mark(X), Y, Z)) mark(x(X, Y)) => active(x(mark(X), mark(Y))) U11(mark(X), Y) => U11(X, Y) U11(X, mark(Y)) => U11(X, Y) U11(active(X), Y) => U11(X, Y) U11(X, active(Y)) => U11(X, Y) U12(mark(X)) => U12(X) U12(active(X)) => U12(X) isNat(mark(X)) => isNat(X) isNat(active(X)) => isNat(X) U21(mark(X)) => U21(X) U21(active(X)) => U21(X) U31(mark(X), Y) => U31(X, Y) U31(X, mark(Y)) => U31(X, Y) U31(active(X), Y) => U31(X, Y) U31(X, active(Y)) => U31(X, Y) U32(mark(X)) => U32(X) U32(active(X)) => U32(X) U41(mark(X), Y) => U41(X, Y) U41(X, mark(Y)) => U41(X, Y) U41(active(X), Y) => U41(X, Y) U41(X, active(Y)) => U41(X, Y) U51(mark(X), Y, Z) => U51(X, Y, Z) U51(X, mark(Y), Z) => U51(X, Y, Z) U51(X, Y, mark(Z)) => U51(X, Y, Z) U51(active(X), Y, Z) => U51(X, Y, Z) U51(X, active(Y), Z) => U51(X, Y, Z) U51(X, Y, active(Z)) => U51(X, Y, Z) U52(mark(X), Y, Z) => U52(X, Y, Z) U52(X, mark(Y), Z) => U52(X, Y, Z) U52(X, Y, mark(Z)) => U52(X, Y, Z) U52(active(X), Y, Z) => U52(X, Y, Z) U52(X, active(Y), Z) => U52(X, Y, Z) U52(X, Y, active(Z)) => U52(X, Y, Z) s(mark(X)) => s(X) s(active(X)) => s(X) plus(mark(X), Y) => plus(X, Y) plus(X, mark(Y)) => plus(X, Y) plus(active(X), Y) => plus(X, Y) plus(X, active(Y)) => plus(X, Y) U71(mark(X), Y, Z) => U71(X, Y, Z) U71(X, mark(Y), Z) => U71(X, Y, Z) U71(X, Y, mark(Z)) => U71(X, Y, Z) U71(active(X), Y, Z) => U71(X, Y, Z) U71(X, active(Y), Z) => U71(X, Y, Z) U71(X, Y, active(Z)) => U71(X, Y, Z) U72(mark(X), Y, Z) => U72(X, Y, Z) U72(X, mark(Y), Z) => U72(X, Y, Z) U72(X, Y, mark(Z)) => U72(X, Y, Z) U72(active(X), Y, Z) => U72(X, Y, Z) U72(X, active(Y), Z) => U72(X, Y, Z) U72(X, Y, active(Z)) => U72(X, Y, Z) x(mark(X), Y) => x(X, Y) x(X, mark(Y)) => x(X, Y) x(active(X), Y) => x(X, Y) x(X, active(Y)) => x(X, Y) By [Kop12, Thm. 7.17], we may replace the dependency pair problem (P_33, R_0, minimal, formative) by (P_33, R_1, minimal, formative). Thus, the original system is terminating if (P_33, R_1, minimal, formative) is finite. We consider the dependency pair problem (P_33, R_1, minimal, formative). We will use the reduction pair processor [Kop12, Thm. 7.16]. It suffices to find a standard reduction pair [Kop12, Def. 6.69]. Thus, we must orient: active#(U11(tt, X)) >? mark#(U12(isNat(X))) active#(U31(tt, X)) >? mark#(U32(isNat(X))) active#(U41(tt, X)) >? mark#(X) active#(U51(tt, X, Y)) >? mark#(U52(isNat(Y), X, Y)) active#(U52(tt, X, Y)) >? mark#(s(plus(Y, X))) active#(U71(tt, X, Y)) >? mark#(U72(isNat(Y), X, Y)) active#(isNat(plus(X, Y))) >? mark#(U11(isNat(X), Y)) active#(isNat(s(X))) >? mark#(U21(isNat(X))) active#(isNat(x(X, Y))) >? mark#(U31(isNat(X), Y)) active#(plus(X, 0)) >? mark#(U41(isNat(X), X)) active#(plus(X, s(Y))) >? mark#(U51(isNat(Y), Y, X)) active#(x(X, s(Y))) >? mark#(U71(isNat(Y), Y, X)) mark#(U11(X, Y)) >? active#(U11(mark(X), Y)) mark#(U11(X, Y)) >? mark#(X) mark#(U12(X)) >? mark#(X) mark#(isNat(X)) >? active#(isNat(X)) mark#(U21(X)) >? mark#(X) mark#(U31(X, Y)) >? active#(U31(mark(X), Y)) mark#(U31(X, Y)) >? mark#(X) mark#(U32(X)) >? mark#(X) mark#(U41(X, Y)) >? active#(U41(mark(X), Y)) mark#(U41(X, Y)) >? mark#(X) mark#(U51(X, Y, Z)) >? active#(U51(mark(X), Y, Z)) mark#(U51(X, Y, Z)) >? mark#(X) mark#(U52(X, Y, Z)) >? active#(U52(mark(X), Y, Z)) mark#(U52(X, Y, Z)) >? mark#(X) mark#(s(X)) >? mark#(X) mark#(plus(X, Y)) >? active#(plus(mark(X), mark(Y))) mark#(plus(X, Y)) >? mark#(X) mark#(U71(X, Y, Z)) >? active#(U71(mark(X), Y, Z)) mark#(U71(X, Y, Z)) >? mark#(X) mark#(U72(X, Y, Z)) >? mark#(X) mark#(x(X, Y)) >? active#(x(mark(X), mark(Y))) mark#(x(X, Y)) >? mark#(X) mark#(x(X, Y)) >? mark#(Y) active(U11(tt, X)) >= mark(U12(isNat(X))) active(U12(tt)) >= mark(tt) active(U21(tt)) >= mark(tt) active(U31(tt, X)) >= mark(U32(isNat(X))) active(U32(tt)) >= mark(tt) active(U41(tt, X)) >= mark(X) active(U51(tt, X, Y)) >= mark(U52(isNat(Y), X, Y)) active(U52(tt, X, Y)) >= mark(s(plus(Y, X))) active(U61(tt)) >= mark(0) active(U71(tt, X, Y)) >= mark(U72(isNat(Y), X, Y)) active(U72(tt, X, Y)) >= mark(plus(x(Y, X), Y)) active(isNat(0)) >= mark(tt) active(isNat(plus(X, Y))) >= mark(U11(isNat(X), Y)) active(isNat(s(X))) >= mark(U21(isNat(X))) active(isNat(x(X, Y))) >= mark(U31(isNat(X), Y)) active(plus(X, 0)) >= mark(U41(isNat(X), X)) active(plus(X, s(Y))) >= mark(U51(isNat(Y), Y, X)) active(x(X, 0)) >= mark(U61(isNat(X))) active(x(X, s(Y))) >= mark(U71(isNat(Y), Y, X)) mark(U11(X, Y)) >= active(U11(mark(X), Y)) mark(tt) >= active(tt) mark(U12(X)) >= active(U12(mark(X))) mark(isNat(X)) >= active(isNat(X)) mark(U21(X)) >= active(U21(mark(X))) mark(U31(X, Y)) >= active(U31(mark(X), Y)) mark(U32(X)) >= active(U32(mark(X))) mark(U41(X, Y)) >= active(U41(mark(X), Y)) mark(U51(X, Y, Z)) >= active(U51(mark(X), Y, Z)) mark(U52(X, Y, Z)) >= active(U52(mark(X), Y, Z)) mark(s(X)) >= active(s(mark(X))) mark(plus(X, Y)) >= active(plus(mark(X), mark(Y))) mark(U61(X)) >= active(U61(mark(X))) mark(0) >= active(0) mark(U71(X, Y, Z)) >= active(U71(mark(X), Y, Z)) mark(U72(X, Y, Z)) >= active(U72(mark(X), Y, Z)) mark(x(X, Y)) >= active(x(mark(X), mark(Y))) U11(mark(X), Y) >= U11(X, Y) U11(X, mark(Y)) >= U11(X, Y) U11(active(X), Y) >= U11(X, Y) U11(X, active(Y)) >= U11(X, Y) U12(mark(X)) >= U12(X) U12(active(X)) >= U12(X) isNat(mark(X)) >= isNat(X) isNat(active(X)) >= isNat(X) U21(mark(X)) >= U21(X) U21(active(X)) >= U21(X) U31(mark(X), Y) >= U31(X, Y) U31(X, mark(Y)) >= U31(X, Y) U31(active(X), Y) >= U31(X, Y) U31(X, active(Y)) >= U31(X, Y) U32(mark(X)) >= U32(X) U32(active(X)) >= U32(X) U41(mark(X), Y) >= U41(X, Y) U41(X, mark(Y)) >= U41(X, Y) U41(active(X), Y) >= U41(X, Y) U41(X, active(Y)) >= U41(X, Y) U51(mark(X), Y, Z) >= U51(X, Y, Z) U51(X, mark(Y), Z) >= U51(X, Y, Z) U51(X, Y, mark(Z)) >= U51(X, Y, Z) U51(active(X), Y, Z) >= U51(X, Y, Z) U51(X, active(Y), Z) >= U51(X, Y, Z) U51(X, Y, active(Z)) >= U51(X, Y, Z) U52(mark(X), Y, Z) >= U52(X, Y, Z) U52(X, mark(Y), Z) >= U52(X, Y, Z) U52(X, Y, mark(Z)) >= U52(X, Y, Z) U52(active(X), Y, Z) >= U52(X, Y, Z) U52(X, active(Y), Z) >= U52(X, Y, Z) U52(X, Y, active(Z)) >= U52(X, Y, Z) s(mark(X)) >= s(X) s(active(X)) >= s(X) plus(mark(X), Y) >= plus(X, Y) plus(X, mark(Y)) >= plus(X, Y) plus(active(X), Y) >= plus(X, Y) plus(X, active(Y)) >= plus(X, Y) U71(mark(X), Y, Z) >= U71(X, Y, Z) U71(X, mark(Y), Z) >= U71(X, Y, Z) U71(X, Y, mark(Z)) >= U71(X, Y, Z) U71(active(X), Y, Z) >= U71(X, Y, Z) U71(X, active(Y), Z) >= U71(X, Y, Z) U71(X, Y, active(Z)) >= U71(X, Y, Z) U72(mark(X), Y, Z) >= U72(X, Y, Z) U72(X, mark(Y), Z) >= U72(X, Y, Z) U72(X, Y, mark(Z)) >= U72(X, Y, Z) U72(active(X), Y, Z) >= U72(X, Y, Z) U72(X, active(Y), Z) >= U72(X, Y, Z) U72(X, Y, active(Z)) >= U72(X, Y, Z) x(mark(X), Y) >= x(X, Y) x(X, mark(Y)) >= x(X, Y) x(active(X), Y) >= x(X, Y) x(X, active(Y)) >= x(X, Y) We orient these requirements with a polynomial interpretation in the natural numbers. The following interpretation satisfies the requirements: 0 = 0 U11 = \y0y1.2y0 U12 = \y0.y0 U21 = \y0.y0 U31 = \y0y1.2y0 U32 = \y0.y0 U41 = \y0y1.y1 + 2y0 U51 = \y0y1y2.y2 + 2y0 U52 = \y0y1y2.y2 + 2y0 U61 = \y0.0 U71 = \y0y1y2.1 + y0 + y1 + y2 U72 = \y0y1y2.1 + y0 + y1 + y2 active = \y0.y0 active# = \y0.2y0 isNat = \y0.0 mark = \y0.y0 mark# = \y0.2y0 plus = \y0y1.y0 s = \y0.y0 tt = 0 x = \y0y1.1 + y0 + y1 Using this interpretation, the requirements translate to: [[active#(U11(tt, _x0))]] = 0 >= 0 = [[mark#(U12(isNat(_x0)))]] [[active#(U31(tt, _x0))]] = 0 >= 0 = [[mark#(U32(isNat(_x0)))]] [[active#(U41(tt, _x0))]] = 2x0 >= 2x0 = [[mark#(_x0)]] [[active#(U51(tt, _x0, _x1))]] = 2x1 >= 2x1 = [[mark#(U52(isNat(_x1), _x0, _x1))]] [[active#(U52(tt, _x0, _x1))]] = 2x1 >= 2x1 = [[mark#(s(plus(_x1, _x0)))]] [[active#(U71(tt, _x0, _x1))]] = 2 + 2x0 + 2x1 >= 2 + 2x0 + 2x1 = [[mark#(U72(isNat(_x1), _x0, _x1))]] [[active#(isNat(plus(_x0, _x1)))]] = 0 >= 0 = [[mark#(U11(isNat(_x0), _x1))]] [[active#(isNat(s(_x0)))]] = 0 >= 0 = [[mark#(U21(isNat(_x0)))]] [[active#(isNat(x(_x0, _x1)))]] = 0 >= 0 = [[mark#(U31(isNat(_x0), _x1))]] [[active#(plus(_x0, 0))]] = 2x0 >= 2x0 = [[mark#(U41(isNat(_x0), _x0))]] [[active#(plus(_x0, s(_x1)))]] = 2x0 >= 2x0 = [[mark#(U51(isNat(_x1), _x1, _x0))]] [[active#(x(_x0, s(_x1)))]] = 2 + 2x0 + 2x1 >= 2 + 2x0 + 2x1 = [[mark#(U71(isNat(_x1), _x1, _x0))]] [[mark#(U11(_x0, _x1))]] = 4x0 >= 4x0 = [[active#(U11(mark(_x0), _x1))]] [[mark#(U11(_x0, _x1))]] = 4x0 >= 2x0 = [[mark#(_x0)]] [[mark#(U12(_x0))]] = 2x0 >= 2x0 = [[mark#(_x0)]] [[mark#(isNat(_x0))]] = 0 >= 0 = [[active#(isNat(_x0))]] [[mark#(U21(_x0))]] = 2x0 >= 2x0 = [[mark#(_x0)]] [[mark#(U31(_x0, _x1))]] = 4x0 >= 4x0 = [[active#(U31(mark(_x0), _x1))]] [[mark#(U31(_x0, _x1))]] = 4x0 >= 2x0 = [[mark#(_x0)]] [[mark#(U32(_x0))]] = 2x0 >= 2x0 = [[mark#(_x0)]] [[mark#(U41(_x0, _x1))]] = 2x1 + 4x0 >= 2x1 + 4x0 = [[active#(U41(mark(_x0), _x1))]] [[mark#(U41(_x0, _x1))]] = 2x1 + 4x0 >= 2x0 = [[mark#(_x0)]] [[mark#(U51(_x0, _x1, _x2))]] = 2x2 + 4x0 >= 2x2 + 4x0 = [[active#(U51(mark(_x0), _x1, _x2))]] [[mark#(U51(_x0, _x1, _x2))]] = 2x2 + 4x0 >= 2x0 = [[mark#(_x0)]] [[mark#(U52(_x0, _x1, _x2))]] = 2x2 + 4x0 >= 2x2 + 4x0 = [[active#(U52(mark(_x0), _x1, _x2))]] [[mark#(U52(_x0, _x1, _x2))]] = 2x2 + 4x0 >= 2x0 = [[mark#(_x0)]] [[mark#(s(_x0))]] = 2x0 >= 2x0 = [[mark#(_x0)]] [[mark#(plus(_x0, _x1))]] = 2x0 >= 2x0 = [[active#(plus(mark(_x0), mark(_x1)))]] [[mark#(plus(_x0, _x1))]] = 2x0 >= 2x0 = [[mark#(_x0)]] [[mark#(U71(_x0, _x1, _x2))]] = 2 + 2x0 + 2x1 + 2x2 >= 2 + 2x0 + 2x1 + 2x2 = [[active#(U71(mark(_x0), _x1, _x2))]] [[mark#(U71(_x0, _x1, _x2))]] = 2 + 2x0 + 2x1 + 2x2 > 2x0 = [[mark#(_x0)]] [[mark#(U72(_x0, _x1, _x2))]] = 2 + 2x0 + 2x1 + 2x2 > 2x0 = [[mark#(_x0)]] [[mark#(x(_x0, _x1))]] = 2 + 2x0 + 2x1 >= 2 + 2x0 + 2x1 = [[active#(x(mark(_x0), mark(_x1)))]] [[mark#(x(_x0, _x1))]] = 2 + 2x0 + 2x1 > 2x0 = [[mark#(_x0)]] [[mark#(x(_x0, _x1))]] = 2 + 2x0 + 2x1 > 2x1 = [[mark#(_x1)]] [[active(U11(tt, _x0))]] = 0 >= 0 = [[mark(U12(isNat(_x0)))]] [[active(U12(tt))]] = 0 >= 0 = [[mark(tt)]] [[active(U21(tt))]] = 0 >= 0 = [[mark(tt)]] [[active(U31(tt, _x0))]] = 0 >= 0 = [[mark(U32(isNat(_x0)))]] [[active(U32(tt))]] = 0 >= 0 = [[mark(tt)]] [[active(U41(tt, _x0))]] = x0 >= x0 = [[mark(_x0)]] [[active(U51(tt, _x0, _x1))]] = x1 >= x1 = [[mark(U52(isNat(_x1), _x0, _x1))]] [[active(U52(tt, _x0, _x1))]] = x1 >= x1 = [[mark(s(plus(_x1, _x0)))]] [[active(U61(tt))]] = 0 >= 0 = [[mark(0)]] [[active(U71(tt, _x0, _x1))]] = 1 + x0 + x1 >= 1 + x0 + x1 = [[mark(U72(isNat(_x1), _x0, _x1))]] [[active(U72(tt, _x0, _x1))]] = 1 + x0 + x1 >= 1 + x0 + x1 = [[mark(plus(x(_x1, _x0), _x1))]] [[active(isNat(0))]] = 0 >= 0 = [[mark(tt)]] [[active(isNat(plus(_x0, _x1)))]] = 0 >= 0 = [[mark(U11(isNat(_x0), _x1))]] [[active(isNat(s(_x0)))]] = 0 >= 0 = [[mark(U21(isNat(_x0)))]] [[active(isNat(x(_x0, _x1)))]] = 0 >= 0 = [[mark(U31(isNat(_x0), _x1))]] [[active(plus(_x0, 0))]] = x0 >= x0 = [[mark(U41(isNat(_x0), _x0))]] [[active(plus(_x0, s(_x1)))]] = x0 >= x0 = [[mark(U51(isNat(_x1), _x1, _x0))]] [[active(x(_x0, 0))]] = 1 + x0 >= 0 = [[mark(U61(isNat(_x0)))]] [[active(x(_x0, s(_x1)))]] = 1 + x0 + x1 >= 1 + x0 + x1 = [[mark(U71(isNat(_x1), _x1, _x0))]] [[mark(U11(_x0, _x1))]] = 2x0 >= 2x0 = [[active(U11(mark(_x0), _x1))]] [[mark(tt)]] = 0 >= 0 = [[active(tt)]] [[mark(U12(_x0))]] = x0 >= x0 = [[active(U12(mark(_x0)))]] [[mark(isNat(_x0))]] = 0 >= 0 = [[active(isNat(_x0))]] [[mark(U21(_x0))]] = x0 >= x0 = [[active(U21(mark(_x0)))]] [[mark(U31(_x0, _x1))]] = 2x0 >= 2x0 = [[active(U31(mark(_x0), _x1))]] [[mark(U32(_x0))]] = x0 >= x0 = [[active(U32(mark(_x0)))]] [[mark(U41(_x0, _x1))]] = x1 + 2x0 >= x1 + 2x0 = [[active(U41(mark(_x0), _x1))]] [[mark(U51(_x0, _x1, _x2))]] = x2 + 2x0 >= x2 + 2x0 = [[active(U51(mark(_x0), _x1, _x2))]] [[mark(U52(_x0, _x1, _x2))]] = x2 + 2x0 >= x2 + 2x0 = [[active(U52(mark(_x0), _x1, _x2))]] [[mark(s(_x0))]] = x0 >= x0 = [[active(s(mark(_x0)))]] [[mark(plus(_x0, _x1))]] = x0 >= x0 = [[active(plus(mark(_x0), mark(_x1)))]] [[mark(U61(_x0))]] = 0 >= 0 = [[active(U61(mark(_x0)))]] [[mark(0)]] = 0 >= 0 = [[active(0)]] [[mark(U71(_x0, _x1, _x2))]] = 1 + x0 + x1 + x2 >= 1 + x0 + x1 + x2 = [[active(U71(mark(_x0), _x1, _x2))]] [[mark(U72(_x0, _x1, _x2))]] = 1 + x0 + x1 + x2 >= 1 + x0 + x1 + x2 = [[active(U72(mark(_x0), _x1, _x2))]] [[mark(x(_x0, _x1))]] = 1 + x0 + x1 >= 1 + x0 + x1 = [[active(x(mark(_x0), mark(_x1)))]] [[U11(mark(_x0), _x1)]] = 2x0 >= 2x0 = [[U11(_x0, _x1)]] [[U11(_x0, mark(_x1))]] = 2x0 >= 2x0 = [[U11(_x0, _x1)]] [[U11(active(_x0), _x1)]] = 2x0 >= 2x0 = [[U11(_x0, _x1)]] [[U11(_x0, active(_x1))]] = 2x0 >= 2x0 = [[U11(_x0, _x1)]] [[U12(mark(_x0))]] = x0 >= x0 = [[U12(_x0)]] [[U12(active(_x0))]] = x0 >= x0 = [[U12(_x0)]] [[isNat(mark(_x0))]] = 0 >= 0 = [[isNat(_x0)]] [[isNat(active(_x0))]] = 0 >= 0 = [[isNat(_x0)]] [[U21(mark(_x0))]] = x0 >= x0 = [[U21(_x0)]] [[U21(active(_x0))]] = x0 >= x0 = [[U21(_x0)]] [[U31(mark(_x0), _x1)]] = 2x0 >= 2x0 = [[U31(_x0, _x1)]] [[U31(_x0, mark(_x1))]] = 2x0 >= 2x0 = [[U31(_x0, _x1)]] [[U31(active(_x0), _x1)]] = 2x0 >= 2x0 = [[U31(_x0, _x1)]] [[U31(_x0, active(_x1))]] = 2x0 >= 2x0 = [[U31(_x0, _x1)]] [[U32(mark(_x0))]] = x0 >= x0 = [[U32(_x0)]] [[U32(active(_x0))]] = x0 >= x0 = [[U32(_x0)]] [[U41(mark(_x0), _x1)]] = x1 + 2x0 >= x1 + 2x0 = [[U41(_x0, _x1)]] [[U41(_x0, mark(_x1))]] = x1 + 2x0 >= x1 + 2x0 = [[U41(_x0, _x1)]] [[U41(active(_x0), _x1)]] = x1 + 2x0 >= x1 + 2x0 = [[U41(_x0, _x1)]] [[U41(_x0, active(_x1))]] = x1 + 2x0 >= x1 + 2x0 = [[U41(_x0, _x1)]] [[U51(mark(_x0), _x1, _x2)]] = x2 + 2x0 >= x2 + 2x0 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, mark(_x1), _x2)]] = x2 + 2x0 >= x2 + 2x0 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, _x1, mark(_x2))]] = x2 + 2x0 >= x2 + 2x0 = [[U51(_x0, _x1, _x2)]] [[U51(active(_x0), _x1, _x2)]] = x2 + 2x0 >= x2 + 2x0 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, active(_x1), _x2)]] = x2 + 2x0 >= x2 + 2x0 = [[U51(_x0, _x1, _x2)]] [[U51(_x0, _x1, active(_x2))]] = x2 + 2x0 >= x2 + 2x0 = [[U51(_x0, _x1, _x2)]] [[U52(mark(_x0), _x1, _x2)]] = x2 + 2x0 >= x2 + 2x0 = [[U52(_x0, _x1, _x2)]] [[U52(_x0, mark(_x1), _x2)]] = x2 + 2x0 >= x2 + 2x0 = [[U52(_x0, _x1, _x2)]] [[U52(_x0, _x1, mark(_x2))]] = x2 + 2x0 >= x2 + 2x0 = [[U52(_x0, _x1, _x2)]] [[U52(active(_x0), _x1, _x2)]] = x2 + 2x0 >= x2 + 2x0 = [[U52(_x0, _x1, _x2)]] [[U52(_x0, active(_x1), _x2)]] = x2 + 2x0 >= x2 + 2x0 = [[U52(_x0, _x1, _x2)]] [[U52(_x0, _x1, active(_x2))]] = x2 + 2x0 >= x2 + 2x0 = [[U52(_x0, _x1, _x2)]] [[s(mark(_x0))]] = x0 >= x0 = [[s(_x0)]] [[s(active(_x0))]] = x0 >= x0 = [[s(_x0)]] [[plus(mark(_x0), _x1)]] = x0 >= x0 = [[plus(_x0, _x1)]] [[plus(_x0, mark(_x1))]] = x0 >= x0 = [[plus(_x0, _x1)]] [[plus(active(_x0), _x1)]] = x0 >= x0 = [[plus(_x0, _x1)]] [[plus(_x0, active(_x1))]] = x0 >= x0 = [[plus(_x0, _x1)]] [[U71(mark(_x0), _x1, _x2)]] = 1 + x0 + x1 + x2 >= 1 + x0 + x1 + x2 = [[U71(_x0, _x1, _x2)]] [[U71(_x0, mark(_x1), _x2)]] = 1 + x0 + x1 + x2 >= 1 + x0 + x1 + x2 = [[U71(_x0, _x1, _x2)]] [[U71(_x0, _x1, mark(_x2))]] = 1 + x0 + x1 + x2 >= 1 + x0 + x1 + x2 = [[U71(_x0, _x1, _x2)]] [[U71(active(_x0), _x1, _x2)]] = 1 + x0 + x1 + x2 >= 1 + x0 + x1 + x2 = [[U71(_x0, _x1, _x2)]] [[U71(_x0, active(_x1), _x2)]] = 1 + x0 + x1 + x2 >= 1 + x0 + x1 + x2 = [[U71(_x0, _x1, _x2)]] [[U71(_x0, _x1, active(_x2))]] = 1 + x0 + x1 + x2 >= 1 + x0 + x1 + x2 = [[U71(_x0, _x1, _x2)]] [[U72(mark(_x0), _x1, _x2)]] = 1 + x0 + x1 + x2 >= 1 + x0 + x1 + x2 = [[U72(_x0, _x1, _x2)]] [[U72(_x0, mark(_x1), _x2)]] = 1 + x0 + x1 + x2 >= 1 + x0 + x1 + x2 = [[U72(_x0, _x1, _x2)]] [[U72(_x0, _x1, mark(_x2))]] = 1 + x0 + x1 + x2 >= 1 + x0 + x1 + x2 = [[U72(_x0, _x1, _x2)]] [[U72(active(_x0), _x1, _x2)]] = 1 + x0 + x1 + x2 >= 1 + x0 + x1 + x2 = [[U72(_x0, _x1, _x2)]] [[U72(_x0, active(_x1), _x2)]] = 1 + x0 + x1 + x2 >= 1 + x0 + x1 + x2 = [[U72(_x0, _x1, _x2)]] [[U72(_x0, _x1, active(_x2))]] = 1 + x0 + x1 + x2 >= 1 + x0 + x1 + x2 = [[U72(_x0, _x1, _x2)]] [[x(mark(_x0), _x1)]] = 1 + x0 + x1 >= 1 + x0 + x1 = [[x(_x0, _x1)]] [[x(_x0, mark(_x1))]] = 1 + x0 + x1 >= 1 + x0 + x1 = [[x(_x0, _x1)]] [[x(active(_x0), _x1)]] = 1 + x0 + x1 >= 1 + x0 + x1 = [[x(_x0, _x1)]] [[x(_x0, active(_x1))]] = 1 + x0 + x1 >= 1 + x0 + x1 = [[x(_x0, _x1)]] By the observations in [Kop12, Sec. 6.6], this reduction pair suffices; we may thus replace the dependency pair problem (P_33, R_1, minimal, formative) by (P_34, R_1, minimal, formative), where P_34 consists of: active#(U11(tt, X)) =#> mark#(U12(isNat(X))) active#(U31(tt, X)) =#> mark#(U32(isNat(X))) active#(U41(tt, X)) =#> mark#(X) active#(U51(tt, X, Y)) =#> mark#(U52(isNat(Y), X, Y)) active#(U52(tt, X, Y)) =#> mark#(s(plus(Y, X))) active#(U71(tt, X, Y)) =#> mark#(U72(isNat(Y), X, Y)) active#(isNat(plus(X, Y))) =#> mark#(U11(isNat(X), Y)) active#(isNat(s(X))) =#> mark#(U21(isNat(X))) active#(isNat(x(X, Y))) =#> mark#(U31(isNat(X), Y)) active#(plus(X, 0)) =#> mark#(U41(isNat(X), X)) active#(plus(X, s(Y))) =#> mark#(U51(isNat(Y), Y, X)) active#(x(X, s(Y))) =#> mark#(U71(isNat(Y), Y, X)) mark#(U11(X, Y)) =#> active#(U11(mark(X), Y)) mark#(U11(X, Y)) =#> mark#(X) mark#(U12(X)) =#> mark#(X) mark#(isNat(X)) =#> active#(isNat(X)) mark#(U21(X)) =#> mark#(X) mark#(U31(X, Y)) =#> active#(U31(mark(X), Y)) mark#(U31(X, Y)) =#> mark#(X) mark#(U32(X)) =#> mark#(X) mark#(U41(X, Y)) =#> active#(U41(mark(X), Y)) mark#(U41(X, Y)) =#> mark#(X) mark#(U51(X, Y, Z)) =#> active#(U51(mark(X), Y, Z)) mark#(U51(X, Y, Z)) =#> mark#(X) mark#(U52(X, Y, Z)) =#> active#(U52(mark(X), Y, Z)) mark#(U52(X, Y, Z)) =#> mark#(X) mark#(s(X)) =#> mark#(X) mark#(plus(X, Y)) =#> active#(plus(mark(X), mark(Y))) mark#(plus(X, Y)) =#> mark#(X) mark#(U71(X, Y, Z)) =#> active#(U71(mark(X), Y, Z)) mark#(x(X, Y)) =#> active#(x(mark(X), mark(Y))) Thus, the original system is terminating if (P_34, R_1, minimal, formative) is finite. We consider the dependency pair problem (P_34, R_1, minimal, formative). We place the elements of P in a dependency graph approximation G (see e.g. [Kop12, Thm. 7.27, 7.29], as follows: * 0 : 14 * 1 : 19 * 2 : 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30 * 3 : 24, 25 * 4 : 26 * 5 : * 6 : 12, 13 * 7 : 16 * 8 : 17, 18 * 9 : 20, 21 * 10 : 22, 23 * 11 : 29 * 12 : 0 * 13 : 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30 * 14 : 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30 * 15 : 6, 7, 8 * 16 : 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30 * 17 : 1 * 18 : 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30 * 19 : 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30 * 20 : 2 * 21 : 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30 * 22 : 3 * 23 : 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30 * 24 : 4 * 25 : 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30 * 26 : 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30 * 27 : 9, 10 * 28 : 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30 * 29 : 5 * 30 : 11 This graph has the following strongly connected components: P_35: active#(U11(tt, X)) =#> mark#(U12(isNat(X))) active#(U31(tt, X)) =#> mark#(U32(isNat(X))) active#(U41(tt, X)) =#> mark#(X) active#(U51(tt, X, Y)) =#> mark#(U52(isNat(Y), X, Y)) active#(U52(tt, X, Y)) =#> mark#(s(plus(Y, X))) active#(isNat(plus(X, Y))) =#> mark#(U11(isNat(X), Y)) active#(isNat(s(X))) =#> mark#(U21(isNat(X))) active#(isNat(x(X, Y))) =#> mark#(U31(isNat(X), Y)) active#(plus(X, 0)) =#> mark#(U41(isNat(X), X)) active#(plus(X, s(Y))) =#> mark#(U51(isNat(Y), Y, X)) mark#(U11(X, Y)) =#> active#(U11(mark(X), Y)) mark#(U11(X, Y)) =#> mark#(X) mark#(U12(X)) =#> mark#(X) mark#(isNat(X)) =#> active#(isNat(X)) mark#(U21(X)) =#> mark#(X) mark#(U31(X, Y)) =#> active#(U31(mark(X), Y)) mark#(U31(X, Y)) =#> mark#(X) mark#(U32(X)) =#> mark#(X) mark#(U41(X, Y)) =#> active#(U41(mark(X), Y)) mark#(U41(X, Y)) =#> mark#(X) mark#(U51(X, Y, Z)) =#> active#(U51(mark(X), Y, Z)) mark#(U51(X, Y, Z)) =#> mark#(X) mark#(U52(X, Y, Z)) =#> active#(U52(mark(X), Y, Z)) mark#(U52(X, Y, Z)) =#> mark#(X) mark#(s(X)) =#> mark#(X) mark#(plus(X, Y)) =#> active#(plus(mark(X), mark(Y))) mark#(plus(X, Y)) =#> mark#(X) By [Kop12, Thm. 7.31], we may replace any dependency pair problem (P_34, R_1, m, f) by (P_35, R_1, m, f). Thus, the original system is terminating if (P_35, R_1, minimal, formative) is finite. We consider the dependency pair problem (P_35, R_1, minimal, formative). The formative rules of (P_35, R_1) are R_2 ::= active(U11(tt, X)) => mark(U12(isNat(X))) active(U12(tt)) => mark(tt) active(U21(tt)) => mark(tt) active(U31(tt, X)) => mark(U32(isNat(X))) active(U32(tt)) => mark(tt) active(U41(tt, X)) => mark(X) active(U51(tt, X, Y)) => mark(U52(isNat(Y), X, Y)) active(U52(tt, X, Y)) => mark(s(plus(Y, X))) active(U61(tt)) => mark(0) active(U71(tt, X, Y)) => mark(U72(isNat(Y), X, Y)) active(U72(tt, X, Y)) => mark(plus(x(Y, X), Y)) active(isNat(0)) => mark(tt) active(isNat(plus(X, Y))) => mark(U11(isNat(X), Y)) active(isNat(s(X))) => mark(U21(isNat(X))) active(isNat(x(X, Y))) => mark(U31(isNat(X), Y)) active(plus(X, 0)) => mark(U41(isNat(X), X)) active(plus(X, s(Y))) => mark(U51(isNat(Y), Y, X)) active(x(X, 0)) => mark(U61(isNat(X))) active(x(X, s(Y))) => mark(U71(isNat(Y), Y, X)) mark(U11(X, Y)) => active(U11(mark(X), Y)) mark(tt) => active(tt) mark(U12(X)) => active(U12(mark(X))) mark(isNat(X)) => active(isNat(X)) mark(U21(X)) => active(U21(mark(X))) mark(U31(X, Y)) => active(U31(mark(X), Y)) mark(U32(X)) => active(U32(mark(X))) mark(U41(X, Y)) => active(U41(mark(X), Y)) mark(U51(X, Y, Z)) => active(U51(mark(X), Y, Z)) mark(U52(X, Y, Z)) => active(U52(mark(X), Y, Z)) mark(s(X)) => active(s(mark(X))) mark(plus(X, Y)) => active(plus(mark(X), mark(Y))) mark(U61(X)) => active(U61(mark(X))) mark(0) => active(0) mark(U71(X, Y, Z)) => active(U71(mark(X), Y, Z)) mark(U72(X, Y, Z)) => active(U72(mark(X), Y, Z)) mark(x(X, Y)) => active(x(mark(X), mark(Y))) U11(mark(X), Y) => U11(X, Y) U11(X, mark(Y)) => U11(X, Y) U11(active(X), Y) => U11(X, Y) U11(X, active(Y)) => U11(X, Y) U12(mark(X)) => U12(X) U12(active(X)) => U12(X) isNat(mark(X)) => isNat(X) isNat(active(X)) => isNat(X) U21(mark(X)) => U21(X) U21(active(X)) => U21(X) U31(mark(X), Y) => U31(X, Y) U31(X, mark(Y)) => U31(X, Y) U31(active(X), Y) => U31(X, Y) U31(X, active(Y)) => U31(X, Y) U32(mark(X)) => U32(X) U32(active(X)) => U32(X) U41(mark(X), Y) => U41(X, Y) U41(X, mark(Y)) => U41(X, Y) U41(active(X), Y) => U41(X, Y) U41(X, active(Y)) => U41(X, Y) U51(mark(X), Y, Z) => U51(X, Y, Z) U51(X, mark(Y), Z) => U51(X, Y, Z) U51(X, Y, mark(Z)) => U51(X, Y, Z) U51(active(X), Y, Z) => U51(X, Y, Z) U51(X, active(Y), Z) => U51(X, Y, Z) U51(X, Y, active(Z)) => U51(X, Y, Z) U52(mark(X), Y, Z) => U52(X, Y, Z) U52(X, mark(Y), Z) => U52(X, Y, Z) U52(X, Y, mark(Z)) => U52(X, Y, Z) U52(active(X), Y, Z) => U52(X, Y, Z) U52(X, active(Y), Z) => U52(X, Y, Z) U52(X, Y, active(Z)) => U52(X, Y, Z) s(mark(X)) => s(X) s(active(X)) => s(X) plus(mark(X), Y) => plus(X, Y) plus(X, mark(Y)) => plus(X, Y) plus(active(X), Y) => plus(X, Y) plus(X, active(Y)) => plus(X, Y) x(mark(X), Y) => x(X, Y) x(X, mark(Y)) => x(X, Y) x(active(X), Y) => x(X, Y) x(X, active(Y)) => x(X, Y) By [Kop12, Thm. 7.17], we may replace the dependency pair problem (P_35, R_1, minimal, formative) by (P_35, R_2, minimal, formative). Thus, the original system is terminating if (P_35, R_2, minimal, formative) is finite. We consider the dependency pair problem (P_35, R_2, minimal, formative). We will use the reduction pair processor [Kop12, Thm. 7.16]. It suffices to find a standard reduction pair [Kop12, Def. 6.69]. Thus, we must orient: active#(U11(tt, X)) >? mark#(U12(isNat(X))) active#(U31(tt, X)) >? mark#(U32(isNat(X))) active#(U41(tt, X)) >? mark#(X) active#(U51(tt, X, Y)) >? mark#(U52(isNat(Y), X, Y)) active#(U52(tt, X, Y)) >? mark#(s(plus(Y, X))) active#(isNat(plus(X, Y))) >? mark#(U11(isNat(X), Y)) active#(isNat(s(X))) >? mark#(U21(isNat(X))) active#(isNat(x(X, Y))) >? mark#(U31(isNat(X), Y)) active#(plus(X, 0)) >? mark#(U41(isNat(X), X)) active#(plus(X, s(Y))) >? mark#(U51(isNat(Y), Y, X)) mark#(U11(X, Y)) >? active#(U11(mark(X), Y)) mark#(U11(X, Y)) >? mark#(X) mark#(U12(X)) >? mark#(X) mark#(isNat(X)) >? active#(isNat(X)) mark#(U21(X)) >? mark#(X) mark#(U31(X, Y)) >? active#(U31(mark(X), Y)) mark#(U31(X, Y)) >? mark#(X) mark#(U32(X)) >? mark#(X) mark#(U41(X, Y)) >? active#(U41(mark(X), Y)) mark#(U41(X, Y)) >? mark#(X) mark#(U51(X, Y, Z)) >? active#(U51(mark(X), Y, Z)) mark#(U51(X, Y, Z)) >? mark#(X) mark#(U52(X, Y, Z)) >? active#(U52(mark(X), Y, Z)) mark#(U52(X, Y, Z)) >? mark#(X) mark#(s(X)) >? mark#(X) mark#(plus(X, Y)) >? active#(plus(mark(X), mark(Y))) mark#(plus(X, Y)) >? mark#(X) active(U11(tt, X)) >= mark(U12(isNat(X))) active(U12(tt)) >= mark(tt) active(U21(tt)) >= mark(tt) active(U31(tt, X)) >= mark(U32(isNat(X))) active(U32(tt)) >= mark(tt) active(U41(tt, X)) >= mark(X) active(U51(tt, X, Y)) >= mark(U52(isNat(Y), X, Y)) active(U52(tt, X, Y)) >= mark(s(plus(Y, X))) active(U61(tt)) >= mark(0) active(U71(tt, X, Y)) >= mark(U72(isNat(Y), X, Y)) active(U72(tt, X, Y)) >= mark(plus(x(Y, X), Y)) active(isNat(0)) >= mark(tt) active(isNat(plus(X, Y))) >= mark(U11(isNat(X), Y)) active(isNat(s(X))) >= mark(U21(isNat(X))) active(isNat(x(X, Y))) >= mark(U31(isNat(X), Y)) active(plus(X, 0)) >= mark(U41(isNat(X), X)) active(plus(X, s(Y))) >= mark(U51(isNat(Y), Y, X)) active(x(X, 0)) >= mark(U61(isNat(X))) active(x(X, s(Y))) >= mark(U71(isNat(Y), Y, X)) mark(U11(X, Y)) >= active(U11(mark(X), Y)) mark(tt) >= active(tt) mark(U12(X)) >= active(U12(mark(X))) mark(isNat(X)) >= active(isNat(X)) mark(U21(X)) >= active(U21(mark(X))) mark(U31(X, Y)) >= active(U31(mark(X), Y)) mark(U32(X)) >= active(U32(mark(X))) mark(U41(X, Y)) >= active(U41(mark(X), Y)) mark(U51(X, Y, Z)) >= active(U51(mark(X), Y, Z)) mark(U52(X, Y, Z)) >= active(U52(mark(X), Y, Z)) mark(s(X)) >= active(s(mark(X))) mark(plus(X, Y)) >= active(plus(mark(X), mark(Y))) mark(U61(X)) >= active(U61(mark(X))) mark(0) >= active(0) mark(U71(X, Y, Z)) >= active(U71(mark(X), Y, Z)) mark(U72(X, Y, Z)) >= active(U72(mark(X), Y, Z)) mark(x(X, Y)) >= active(x(mark(X), mark(Y))) U11(mark(X), Y) >= U11(X, Y) U11(X, mark(Y)) >= U11(X, Y) U11(active(X), Y) >= U11(X, Y) U11(X, active(Y)) >= U11(X, Y) U12(mark(X)) >= U12(X) U12(active(X)) >= U12(X) isNat(mark(X)) >= isNat(X) isNat(active(X)) >= isNat(X) U21(mark(X)) >= U21(X) U21(active(X)) >= U21(X) U31(mark(X), Y) >= U31(X, Y) U31(X, mark(Y)) >= U31(X, Y) U31(active(X), Y) >= U31(X, Y) U31(X, active(Y)) >= U31(X, Y) U32(mark(X)) >= U32(X) U32(active(X)) >= U32(X) U41(mark(X), Y) >= U41(X, Y) U41(X, mark(Y)) >= U41(X, Y) U41(active(X), Y) >= U41(X, Y) U41(X, active(Y)) >= U41(X, Y) U51(mark(X), Y, Z) >= U51(X, Y, Z) U51(X, mark(Y), Z) >= U51(X, Y, Z) U51(X, Y, mark(Z)) >= U51(X, Y, Z) U51(active(X), Y, Z) >= U51(X, Y, Z) U51(X, active(Y), Z) >= U51(X, Y, Z) U51(X, Y, active(Z)) >= U51(X, Y, Z) U52(mark(X), Y, Z) >= U52(X, Y, Z) U52(X, mark(Y), Z) >= U52(X, Y, Z) U52(X, Y, mark(Z)) >= U52(X, Y, Z) U52(active(X), Y, Z) >= U52(X, Y, Z) U52(X, active(Y), Z) >= U52(X, Y, Z) U52(X, Y, active(Z)) >= U52(X, Y, Z) s(mark(X)) >= s(X) s(active(X)) >= s(X) plus(mark(X), Y) >= plus(X, Y) plus(X, mark(Y)) >= plus(X, Y) plus(active(X), Y) >= plus(X, Y) plus(X, active(Y)) >= plus(X, Y) x(mark(X), Y) >= x(X, Y) x(X, mark(Y)) >= x(X, Y) x(active(X), Y) >= x(X, Y) x(X, active(Y)) >= x(X, Y) Since this representation is not advantageous for the higher-order recursive path ordering, we present the strict requirements in their unextended form, which is not problematic since for any F, s and substituion gamma: (F s)gamma beta-reduces to F(s)gamma.) We use a recursive path ordering as defined in [Kop12, Chapter 5]. Argument functions: [[0]] = _|_ [[U11(x_1, x_2)]] = x_1 [[U12(x_1)]] = x_1 [[U21(x_1)]] = x_1 [[U31(x_1, x_2)]] = x_1 [[U32(x_1)]] = x_1 [[U61(x_1)]] = x_1 [[active(x_1)]] = x_1 [[isNat(x_1)]] = isNat [[mark(x_1)]] = x_1 We choose Lex = {} and Mul = {U41, U51, U52, U71, U72, active#, isNat, mark#, plus, s, tt, x}, and the following precedence: U71 = U72 = x > U51 = U52 = plus > s > U41 > isNat = tt > active# = mark# Taking the argument function into account, and fixing the greater / greater equal choices, the constraints can be denoted as follows: active#(tt) >= mark#(isNat) active#(tt) >= mark#(isNat) active#(U41(tt, X)) >= mark#(X) active#(U51(tt, X, Y)) >= mark#(U52(isNat, X, Y)) active#(U52(tt, X, Y)) > mark#(s(plus(Y, X))) active#(isNat) >= mark#(isNat) active#(isNat) >= mark#(isNat) active#(isNat) >= mark#(isNat) active#(plus(X, _|_)) >= mark#(U41(isNat, X)) active#(plus(X, s(Y))) >= mark#(U51(isNat, Y, X)) mark#(X) >= active#(X) mark#(X) >= mark#(X) mark#(X) >= mark#(X) mark#(isNat) >= active#(isNat) mark#(X) >= mark#(X) mark#(X) >= active#(X) mark#(X) >= mark#(X) mark#(X) >= mark#(X) mark#(U41(X, Y)) >= active#(U41(X, Y)) mark#(U41(X, Y)) >= mark#(X) mark#(U51(X, Y, Z)) >= active#(U51(X, Y, Z)) mark#(U51(X, Y, Z)) >= mark#(X) mark#(U52(X, Y, Z)) >= active#(U52(X, Y, Z)) mark#(U52(X, Y, Z)) >= mark#(X) mark#(s(X)) >= mark#(X) mark#(plus(X, Y)) >= active#(plus(X, Y)) mark#(plus(X, Y)) >= mark#(X) tt >= isNat tt >= tt tt >= tt tt >= isNat tt >= tt U41(tt, X) >= X U51(tt, X, Y) >= U52(isNat, X, Y) U52(tt, X, Y) >= s(plus(Y, X)) tt >= _|_ U71(tt, X, Y) >= U72(isNat, X, Y) U72(tt, X, Y) >= plus(x(Y, X), Y) isNat >= tt isNat >= isNat isNat >= isNat isNat >= isNat plus(X, _|_) >= U41(isNat, X) plus(X, s(Y)) >= U51(isNat, Y, X) x(X, _|_) >= isNat x(X, s(Y)) >= U71(isNat, Y, X) X >= X tt >= tt X >= X isNat >= isNat X >= X X >= X X >= X U41(X, Y) >= U41(X, Y) U51(X, Y, Z) >= U51(X, Y, Z) U52(X, Y, Z) >= U52(X, Y, Z) s(X) >= s(X) plus(X, Y) >= plus(X, Y) X >= X _|_ >= _|_ U71(X, Y, Z) >= U71(X, Y, Z) U72(X, Y, Z) >= U72(X, Y, Z) x(X, Y) >= x(X, Y) X >= X X >= X X >= X X >= X X >= X X >= X isNat >= isNat isNat >= isNat X >= X X >= X X >= X X >= X X >= X X >= X X >= X X >= X U41(X, Y) >= U41(X, Y) U41(X, Y) >= U41(X, Y) U41(X, Y) >= U41(X, Y) U41(X, Y) >= U41(X, Y) U51(X, Y, Z) >= U51(X, Y, Z) U51(X, Y, Z) >= U51(X, Y, Z) U51(X, Y, Z) >= U51(X, Y, Z) U51(X, Y, Z) >= U51(X, Y, Z) U51(X, Y, Z) >= U51(X, Y, Z) U51(X, Y, Z) >= U51(X, Y, Z) U52(X, Y, Z) >= U52(X, Y, Z) U52(X, Y, Z) >= U52(X, Y, Z) U52(X, Y, Z) >= U52(X, Y, Z) U52(X, Y, Z) >= U52(X, Y, Z) U52(X, Y, Z) >= U52(X, Y, Z) U52(X, Y, Z) >= U52(X, Y, Z) s(X) >= s(X) s(X) >= s(X) plus(X, Y) >= plus(X, Y) plus(X, Y) >= plus(X, Y) plus(X, Y) >= plus(X, Y) plus(X, Y) >= plus(X, Y) x(X, Y) >= x(X, Y) x(X, Y) >= x(X, Y) x(X, Y) >= x(X, Y) x(X, Y) >= x(X, Y) With these choices, we have: 1] active#(tt) >= mark#(isNat) because active# = mark#, active# in Mul and [2], by (Fun) 2] tt >= isNat because tt = isNat, by (Fun) 3] active#(tt) >= mark#(isNat) because active# = mark#, active# in Mul and [4], by (Fun) 4] tt >= isNat because tt = isNat, by (Fun) 5] active#(U41(tt, X)) >= mark#(X) because active# = mark#, active# in Mul and [6], by (Fun) 6] U41(tt, X) >= X because [7], by (Star) 7] U41*(tt, X) >= X because [8], by (Select) 8] X >= X by (Meta) 9] active#(U51(tt, X, Y)) >= mark#(U52(isNat, X, Y)) because active# = mark#, active# in Mul and [10], by (Fun) 10] U51(tt, X, Y) >= U52(isNat, X, Y) because U51 = U52, U51 in Mul, [11], [12] and [13], by (Fun) 11] tt >= isNat because tt = isNat, by (Fun) 12] X >= X by (Meta) 13] Y >= Y by (Meta) 14] active#(U52(tt, X, Y)) > mark#(s(plus(Y, X))) because [15], by definition 15] active#*(U52(tt, X, Y)) >= mark#(s(plus(Y, X))) because active# = mark#, active# in Mul and [16], by (Stat) 16] U52(tt, X, Y) > s(plus(Y, X)) because [17], by definition 17] U52*(tt, X, Y) >= s(plus(Y, X)) because U52 > s and [18], by (Copy) 18] U52*(tt, X, Y) >= plus(Y, X) because U52 = plus, U52 in Mul, [12] and [13], by (Stat) 19] active#(isNat) >= mark#(isNat) because active# = mark#, active# in Mul and [20], by (Fun) 20] isNat >= isNat because isNat in Mul, by (Fun) 21] active#(isNat) >= mark#(isNat) because active# = mark#, active# in Mul and [22], by (Fun) 22] isNat >= isNat because isNat in Mul, by (Fun) 23] active#(isNat) >= mark#(isNat) because active# = mark#, active# in Mul and [24], by (Fun) 24] isNat >= isNat because isNat in Mul, by (Fun) 25] active#(plus(X, _|_)) >= mark#(U41(isNat, X)) because active# = mark#, active# in Mul and [26], by (Fun) 26] plus(X, _|_) >= U41(isNat, X) because [27], by (Star) 27] plus*(X, _|_) >= U41(isNat, X) because plus > U41, [28] and [29], by (Copy) 28] plus*(X, _|_) >= isNat because plus > isNat, by (Copy) 29] plus*(X, _|_) >= X because [13], by (Select) 30] active#(plus(X, s(Y))) >= mark#(U51(isNat, Y, X)) because active# = mark#, active# in Mul and [31], by (Fun) 31] plus(X, s(Y)) >= U51(isNat, Y, X) because [32], by (Star) 32] plus*(X, s(Y)) >= U51(isNat, Y, X) because plus = U51, plus in Mul, [13], [33] and [35], by (Stat) 33] s(Y) > isNat because [34], by definition 34] s*(Y) >= isNat because s > isNat, by (Copy) 35] s(Y) > Y because [36], by definition 36] s*(Y) >= Y because [12], by (Select) 37] mark#(X) >= active#(X) because mark# = active#, mark# in Mul and [38], by (Fun) 38] X >= X by (Meta) 39] mark#(X) >= mark#(X) because mark# in Mul and [38], by (Fun) 40] mark#(X) >= mark#(X) because mark# in Mul and [41], by (Fun) 41] X >= X by (Meta) 42] mark#(isNat) >= active#(isNat) because mark# = active#, mark# in Mul and [43], by (Fun) 43] isNat >= isNat because isNat in Mul, by (Fun) 44] mark#(X) >= mark#(X) because mark# in Mul and [45], by (Fun) 45] X >= X by (Meta) 46] mark#(X) >= active#(X) because mark# = active#, mark# in Mul and [47], by (Fun) 47] X >= X by (Meta) 48] mark#(X) >= mark#(X) because mark# in Mul and [47], by (Fun) 49] mark#(X) >= mark#(X) because mark# in Mul and [50], by (Fun) 50] X >= X by (Meta) 51] mark#(U41(X, Y)) >= active#(U41(X, Y)) because mark# = active#, mark# in Mul and [52], by (Fun) 52] U41(X, Y) >= U41(X, Y) because U41 in Mul, [53] and [54], by (Fun) 53] X >= X by (Meta) 54] Y >= Y by (Meta) 55] mark#(U41(X, Y)) >= mark#(X) because mark# in Mul and [56], by (Fun) 56] U41(X, Y) >= X because [57], by (Star) 57] U41*(X, Y) >= X because [53], by (Select) 58] mark#(U51(X, Y, Z)) >= active#(U51(X, Y, Z)) because mark# = active#, mark# in Mul and [59], by (Fun) 59] U51(X, Y, Z) >= U51(X, Y, Z) because U51 in Mul, [53], [54] and [60], by (Fun) 60] Z >= Z by (Meta) 61] mark#(U51(X, Y, Z)) >= mark#(X) because mark# in Mul and [62], by (Fun) 62] U51(X, Y, Z) >= X because [63], by (Star) 63] U51*(X, Y, Z) >= X because [53], by (Select) 64] mark#(U52(X, Y, Z)) >= active#(U52(X, Y, Z)) because mark# = active#, mark# in Mul and [65], by (Fun) 65] U52(X, Y, Z) >= U52(X, Y, Z) because U52 in Mul, [53], [54] and [60], by (Fun) 66] mark#(U52(X, Y, Z)) >= mark#(X) because mark# in Mul and [67], by (Fun) 67] U52(X, Y, Z) >= X because [68], by (Star) 68] U52*(X, Y, Z) >= X because [53], by (Select) 69] mark#(s(X)) >= mark#(X) because mark# in Mul and [70], by (Fun) 70] s(X) >= X because [71], by (Star) 71] s*(X) >= X because [50], by (Select) 72] mark#(plus(X, Y)) >= active#(plus(X, Y)) because mark# = active#, mark# in Mul and [73], by (Fun) 73] plus(X, Y) >= plus(X, Y) because plus in Mul, [53] and [74], by (Fun) 74] Y >= Y by (Meta) 75] mark#(plus(X, Y)) >= mark#(X) because mark# in Mul and [76], by (Fun) 76] plus(X, Y) >= X because [77], by (Star) 77] plus*(X, Y) >= X because [53], by (Select) 78] tt >= isNat because tt = isNat, by (Fun) 79] tt >= tt by (Fun) 80] tt >= tt by (Fun) 81] tt >= isNat because tt = isNat, by (Fun) 82] tt >= tt by (Fun) 83] U41(tt, X) >= X because [7], by (Star) 84] U51(tt, X, Y) >= U52(isNat, X, Y) because U51 = U52, U51 in Mul, [11], [12] and [13], by (Fun) 85] U52(tt, X, Y) >= s(plus(Y, X)) because [17], by (Star) 86] tt >= _|_ by (Bot) 87] U71(tt, X, Y) >= U72(isNat, X, Y) because U71 = U72, U71 in Mul, [11], [12] and [13], by (Fun) 88] U72(tt, X, Y) >= plus(x(Y, X), Y) because [89], by (Star) 89] U72*(tt, X, Y) >= plus(x(Y, X), Y) because U72 > plus, [90] and [91], by (Copy) 90] U72*(tt, X, Y) >= x(Y, X) because U72 = x, U72 in Mul, [12] and [13], by (Stat) 91] U72*(tt, X, Y) >= Y because [13], by (Select) 92] isNat >= tt because isNat = tt, by (Fun) 93] isNat >= isNat because isNat in Mul, by (Fun) 94] isNat >= isNat because isNat in Mul, by (Fun) 95] isNat >= isNat because isNat in Mul, by (Fun) 96] plus(X, _|_) >= U41(isNat, X) because [27], by (Star) 97] plus(X, s(Y)) >= U51(isNat, Y, X) because [32], by (Star) 98] x(X, _|_) >= isNat because [99], by (Star) 99] x*(X, _|_) >= isNat because x > isNat, by (Copy) 100] x(X, s(Y)) >= U71(isNat, Y, X) because [101], by (Star) 101] x*(X, s(Y)) >= U71(isNat, Y, X) because x = U71, x in Mul, [13], [33] and [35], by (Stat) 102] X >= X by (Meta) 103] tt >= tt by (Fun) 104] X >= X by (Meta) 105] isNat >= isNat because isNat in Mul, by (Fun) 106] X >= X by (Meta) 107] X >= X by (Meta) 108] X >= X by (Meta) 109] U41(X, Y) >= U41(X, Y) because U41 in Mul, [53] and [74], by (Fun) 110] U51(X, Y, Z) >= U51(X, Y, Z) because U51 in Mul, [53], [74] and [60], by (Fun) 111] U52(X, Y, Z) >= U52(X, Y, Z) because U52 in Mul, [53], [74] and [60], by (Fun) 112] s(X) >= s(X) because s in Mul and [113], by (Fun) 113] X >= X by (Meta) 114] plus(X, Y) >= plus(X, Y) because plus in Mul, [53] and [74], by (Fun) 115] X >= X by (Meta) 116] _|_ >= _|_ by (Bot) 117] U71(X, Y, Z) >= U71(X, Y, Z) because U71 in Mul, [53], [74] and [60], by (Fun) 118] U72(X, Y, Z) >= U72(X, Y, Z) because U72 in Mul, [53], [74] and [60], by (Fun) 119] x(X, Y) >= x(X, Y) because x in Mul, [53] and [74], by (Fun) 120] X >= X by (Meta) 121] X >= X by (Meta) 122] X >= X by (Meta) 123] X >= X by (Meta) 124] X >= X by (Meta) 125] X >= X by (Meta) 126] isNat >= isNat because isNat in Mul, by (Fun) 127] isNat >= isNat because isNat in Mul, by (Fun) 128] X >= X by (Meta) 129] X >= X by (Meta) 130] X >= X by (Meta) 131] X >= X by (Meta) 132] X >= X by (Meta) 133] X >= X by (Meta) 134] X >= X by (Meta) 135] X >= X by (Meta) 136] U41(X, Y) >= U41(X, Y) because U41 in Mul, [137] and [74], by (Fun) 137] X >= X by (Meta) 138] U41(X, Y) >= U41(X, Y) because U41 in Mul, [53] and [139], by (Fun) 139] Y >= Y by (Meta) 140] U41(X, Y) >= U41(X, Y) because U41 in Mul, [141] and [74], by (Fun) 141] X >= X by (Meta) 142] U41(X, Y) >= U41(X, Y) because U41 in Mul, [53] and [143], by (Fun) 143] Y >= Y by (Meta) 144] U51(X, Y, Z) >= U51(X, Y, Z) because U51 in Mul, [137], [74] and [60], by (Fun) 145] U51(X, Y, Z) >= U51(X, Y, Z) because U51 in Mul, [53], [139] and [60], by (Fun) 146] U51(X, Y, Z) >= U51(X, Y, Z) because U51 in Mul, [53], [74] and [147], by (Fun) 147] Z >= Z by (Meta) 148] U51(X, Y, Z) >= U51(X, Y, Z) because U51 in Mul, [141], [74] and [60], by (Fun) 149] U51(X, Y, Z) >= U51(X, Y, Z) because U51 in Mul, [53], [143] and [60], by (Fun) 150] U51(X, Y, Z) >= U51(X, Y, Z) because U51 in Mul, [53], [74] and [151], by (Fun) 151] Z >= Z by (Meta) 152] U52(X, Y, Z) >= U52(X, Y, Z) because U52 in Mul, [137], [74] and [60], by (Fun) 153] U52(X, Y, Z) >= U52(X, Y, Z) because U52 in Mul, [53], [139] and [60], by (Fun) 154] U52(X, Y, Z) >= U52(X, Y, Z) because U52 in Mul, [53], [74] and [147], by (Fun) 155] U52(X, Y, Z) >= U52(X, Y, Z) because U52 in Mul, [141], [74] and [60], by (Fun) 156] U52(X, Y, Z) >= U52(X, Y, Z) because U52 in Mul, [53], [143] and [60], by (Fun) 157] U52(X, Y, Z) >= U52(X, Y, Z) because U52 in Mul, [53], [74] and [151], by (Fun) 158] s(X) >= s(X) because s in Mul and [159], by (Fun) 159] X >= X by (Meta) 160] s(X) >= s(X) because s in Mul and [161], by (Fun) 161] X >= X by (Meta) 162] plus(X, Y) >= plus(X, Y) because plus in Mul, [137] and [74], by (Fun) 163] plus(X, Y) >= plus(X, Y) because plus in Mul, [53] and [139], by (Fun) 164] plus(X, Y) >= plus(X, Y) because plus in Mul, [141] and [74], by (Fun) 165] plus(X, Y) >= plus(X, Y) because plus in Mul, [53] and [143], by (Fun) 166] x(X, Y) >= x(X, Y) because x in Mul, [137] and [74], by (Fun) 167] x(X, Y) >= x(X, Y) because x in Mul, [53] and [139], by (Fun) 168] x(X, Y) >= x(X, Y) because x in Mul, [141] and [74], by (Fun) 169] x(X, Y) >= x(X, Y) because x in Mul, [53] and [143], by (Fun) By the observations in [Kop12, Sec. 6.6], this reduction pair suffices; we may thus replace the dependency pair problem (P_35, R_2, minimal, formative) by (P_36, R_2, minimal, formative), where P_36 consists of: active#(U11(tt, X)) =#> mark#(U12(isNat(X))) active#(U31(tt, X)) =#> mark#(U32(isNat(X))) active#(U41(tt, X)) =#> mark#(X) active#(U51(tt, X, Y)) =#> mark#(U52(isNat(Y), X, Y)) active#(isNat(plus(X, Y))) =#> mark#(U11(isNat(X), Y)) active#(isNat(s(X))) =#> mark#(U21(isNat(X))) active#(isNat(x(X, Y))) =#> mark#(U31(isNat(X), Y)) active#(plus(X, 0)) =#> mark#(U41(isNat(X), X)) active#(plus(X, s(Y))) =#> mark#(U51(isNat(Y), Y, X)) mark#(U11(X, Y)) =#> active#(U11(mark(X), Y)) mark#(U11(X, Y)) =#> mark#(X) mark#(U12(X)) =#> mark#(X) mark#(isNat(X)) =#> active#(isNat(X)) mark#(U21(X)) =#> mark#(X) mark#(U31(X, Y)) =#> active#(U31(mark(X), Y)) mark#(U31(X, Y)) =#> mark#(X) mark#(U32(X)) =#> mark#(X) mark#(U41(X, Y)) =#> active#(U41(mark(X), Y)) mark#(U41(X, Y)) =#> mark#(X) mark#(U51(X, Y, Z)) =#> active#(U51(mark(X), Y, Z)) mark#(U51(X, Y, Z)) =#> mark#(X) mark#(U52(X, Y, Z)) =#> active#(U52(mark(X), Y, Z)) mark#(U52(X, Y, Z)) =#> mark#(X) mark#(s(X)) =#> mark#(X) mark#(plus(X, Y)) =#> active#(plus(mark(X), mark(Y))) mark#(plus(X, Y)) =#> mark#(X) Thus, the original system is terminating if (P_36, R_2, minimal, formative) is finite. We consider the dependency pair problem (P_36, R_2, minimal, formative). We place the elements of P in a dependency graph approximation G (see e.g. [Kop12, Thm. 7.27, 7.29], as follows: * 0 : 11 * 1 : 16 * 2 : 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 * 3 : 21, 22 * 4 : 9, 10 * 5 : 13 * 6 : 14, 15 * 7 : 17, 18 * 8 : 19, 20 * 9 : 0 * 10 : 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 * 11 : 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 * 12 : 4, 5, 6 * 13 : 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 * 14 : 1 * 15 : 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 * 16 : 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 * 17 : 2 * 18 : 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 * 19 : 3 * 20 : 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 * 21 : * 22 : 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 * 23 : 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 * 24 : 7, 8 * 25 : 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 This graph has the following strongly connected components: P_37: active#(U11(tt, X)) =#> mark#(U12(isNat(X))) active#(U31(tt, X)) =#> mark#(U32(isNat(X))) active#(U41(tt, X)) =#> mark#(X) active#(U51(tt, X, Y)) =#> mark#(U52(isNat(Y), X, Y)) active#(isNat(plus(X, Y))) =#> mark#(U11(isNat(X), Y)) active#(isNat(s(X))) =#> mark#(U21(isNat(X))) active#(isNat(x(X, Y))) =#> mark#(U31(isNat(X), Y)) active#(plus(X, 0)) =#> mark#(U41(isNat(X), X)) active#(plus(X, s(Y))) =#> mark#(U51(isNat(Y), Y, X)) mark#(U11(X, Y)) =#> active#(U11(mark(X), Y)) mark#(U11(X, Y)) =#> mark#(X) mark#(U12(X)) =#> mark#(X) mark#(isNat(X)) =#> active#(isNat(X)) mark#(U21(X)) =#> mark#(X) mark#(U31(X, Y)) =#> active#(U31(mark(X), Y)) mark#(U31(X, Y)) =#> mark#(X) mark#(U32(X)) =#> mark#(X) mark#(U41(X, Y)) =#> active#(U41(mark(X), Y)) mark#(U41(X, Y)) =#> mark#(X) mark#(U51(X, Y, Z)) =#> active#(U51(mark(X), Y, Z)) mark#(U51(X, Y, Z)) =#> mark#(X) mark#(U52(X, Y, Z)) =#> mark#(X) mark#(s(X)) =#> mark#(X) mark#(plus(X, Y)) =#> active#(plus(mark(X), mark(Y))) mark#(plus(X, Y)) =#> mark#(X) By [Kop12, Thm. 7.31], we may replace any dependency pair problem (P_36, R_2, m, f) by (P_37, R_2, m, f). Thus, the original system is terminating if (P_37, R_2, minimal, formative) is finite. We consider the dependency pair problem (P_37, R_2, minimal, formative). We will use the reduction pair processor [Kop12, Thm. 7.16]. It suffices to find a standard reduction pair [Kop12, Def. 6.69]. Thus, we must orient: active#(U11(tt, X)) >? mark#(U12(isNat(X))) active#(U31(tt, X)) >? mark#(U32(isNat(X))) active#(U41(tt, X)) >? mark#(X) active#(U51(tt, X, Y)) >? mark#(U52(isNat(Y), X, Y)) active#(isNat(plus(X, Y))) >? mark#(U11(isNat(X), Y)) active#(isNat(s(X))) >? mark#(U21(isNat(X))) active#(isNat(x(X, Y))) >? mark#(U31(isNat(X), Y)) active#(plus(X, 0)) >? mark#(U41(isNat(X), X)) active#(plus(X, s(Y))) >? mark#(U51(isNat(Y), Y, X)) mark#(U11(X, Y)) >? active#(U11(mark(X), Y)) mark#(U11(X, Y)) >? mark#(X) mark#(U12(X)) >? mark#(X) mark#(isNat(X)) >? active#(isNat(X)) mark#(U21(X)) >? mark#(X) mark#(U31(X, Y)) >? active#(U31(mark(X), Y)) mark#(U31(X, Y)) >? mark#(X) mark#(U32(X)) >? mark#(X) mark#(U41(X, Y)) >? active#(U41(mark(X), Y)) mark#(U41(X, Y)) >? mark#(X) mark#(U51(X, Y, Z)) >? active#(U51(mark(X), Y, Z)) mark#(U51(X, Y, Z)) >? mark#(X) mark#(U52(X, Y, Z)) >? mark#(X) mark#(s(X)) >? mark#(X) mark#(plus(X, Y)) >? active#(plus(mark(X), mark(Y))) mark#(plus(X, Y)) >? mark#(X) active(U11(tt, X)) >= mark(U12(isNat(X))) active(U12(tt)) >= mark(tt) active(U21(tt)) >= mark(tt) active(U31(tt, X)) >= mark(U32(isNat(X))) active(U32(tt)) >= mark(tt) active(U41(tt, X)) >= mark(X) active(U51(tt, X, Y)) >= mark(U52(isNat(Y), X, Y)) active(U52(tt, X, Y)) >= mark(s(plus(Y, X))) active(U61(tt)) >= mark(0) active(U71(tt, X, Y)) >= mark(U72(isNat(Y), X, Y)) active(U72(tt, X, Y)) >= mark(plus(x(Y, X), Y)) active(isNat(0)) >= mark(tt) active(isNat(plus(X, Y))) >= mark(U11(isNat(X), Y)) active(isNat(s(X))) >= mark(U21(isNat(X))) active(isNat(x(X, Y))) >= mark(U31(isNat(X), Y)) active(plus(X, 0)) >= mark(U41(isNat(X), X)) active(plus(X, s(Y))) >= mark(U51(isNat(Y), Y, X)) active(x(X, 0)) >= mark(U61(isNat(X))) active(x(X, s(Y))) >= mark(U71(isNat(Y), Y, X)) mark(U11(X, Y)) >= active(U11(mark(X), Y)) mark(tt) >= active(tt) mark(U12(X)) >= active(U12(mark(X))) mark(isNat(X)) >= active(isNat(X)) mark(U21(X)) >= active(U21(mark(X))) mark(U31(X, Y)) >= active(U31(mark(X), Y)) mark(U32(X)) >= active(U32(mark(X))) mark(U41(X, Y)) >= active(U41(mark(X), Y)) mark(U51(X, Y, Z)) >= active(U51(mark(X), Y, Z)) mark(U52(X, Y, Z)) >= active(U52(mark(X), Y, Z)) mark(s(X)) >= active(s(mark(X))) mark(plus(X, Y)) >= active(plus(mark(X), mark(Y))) mark(U61(X)) >= active(U61(mark(X))) mark(0) >= active(0) mark(U71(X, Y, Z)) >= active(U71(mark(X), Y, Z)) mark(U72(X, Y, Z)) >= active(U72(mark(X), Y, Z)) mark(x(X, Y)) >= active(x(mark(X), mark(Y))) U11(mark(X), Y) >= U11(X, Y) U11(X, mark(Y)) >= U11(X, Y) U11(active(X), Y) >= U11(X, Y) U11(X, active(Y)) >= U11(X, Y) U12(mark(X)) >= U12(X) U12(active(X)) >= U12(X) isNat(mark(X)) >= isNat(X) isNat(active(X)) >= isNat(X) U21(mark(X)) >= U21(X) U21(active(X)) >= U21(X) U31(mark(X), Y) >= U31(X, Y) U31(X, mark(Y)) >= U31(X, Y) U31(active(X), Y) >= U31(X, Y) U31(X, active(Y)) >= U31(X, Y) U32(mark(X)) >= U32(X) U32(active(X)) >= U32(X) U41(mark(X), Y) >= U41(X, Y) U41(X, mark(Y)) >= U41(X, Y) U41(active(X), Y) >= U41(X, Y) U41(X, active(Y)) >= U41(X, Y) U51(mark(X), Y, Z) >= U51(X, Y, Z) U51(X, mark(Y), Z) >= U51(X, Y, Z) U51(X, Y, mark(Z)) >= U51(X, Y, Z) U51(active(X), Y, Z) >= U51(X, Y, Z) U51(X, active(Y), Z) >= U51(X, Y, Z) U51(X, Y, active(Z)) >= U51(X, Y, Z) U52(mark(X), Y, Z) >= U52(X, Y, Z) U52(X, mark(Y), Z) >= U52(X, Y, Z) U52(X, Y, mark(Z)) >= U52(X, Y, Z) U52(active(X), Y, Z) >= U52(X, Y, Z) U52(X, active(Y), Z) >= U52(X, Y, Z) U52(X, Y, active(Z)) >= U52(X, Y, Z) s(mark(X)) >= s(X) s(active(X)) >= s(X) plus(mark(X), Y) >= plus(X, Y) plus(X, mark(Y)) >= plus(X, Y) plus(active(X), Y) >= plus(X, Y) plus(X, active(Y)) >= plus(X, Y) x(mark(X), Y) >= x(X, Y) x(X, mark(Y)) >= x(X, Y) x(active(X), Y) >= x(X, Y) x(X, active(Y)) >= x(X, Y) Since this representation is not advantageous for the higher-order recursive path ordering, we present the strict requirements in their unextended form, which is not problematic since for any F, s and substituion gamma: (F s)gamma beta-reduces to F(s)gamma.) We use a recursive path ordering as defined in [Kop12, Chapter 5]. Argument functions: [[0]] = _|_ [[U11(x_1, x_2)]] = x_1 [[U12(x_1)]] = x_1 [[U21(x_1)]] = x_1 [[U31(x_1, x_2)]] = x_1 [[U32(x_1)]] = x_1 [[active(x_1)]] = x_1 [[isNat(x_1)]] = isNat [[mark(x_1)]] = x_1 We choose Lex = {} and Mul = {U41, U51, U52, U61, U71, U72, active#, isNat, mark#, plus, s, tt, x}, and the following precedence: U71 = U72 = x > active# = mark# > U51 = U52 = plus > U41 > s > isNat = tt > U61 Taking the argument function into account, and fixing the greater / greater equal choices, the constraints can be denoted as follows: active#(tt) >= mark#(isNat) active#(tt) >= mark#(isNat) active#(U41(tt, X)) >= mark#(X) active#(U51(tt, X, Y)) >= mark#(U52(isNat, X, Y)) active#(isNat) >= mark#(isNat) active#(isNat) >= mark#(isNat) active#(isNat) >= mark#(isNat) active#(plus(X, _|_)) > mark#(U41(isNat, X)) active#(plus(X, s(Y))) >= mark#(U51(isNat, Y, X)) mark#(X) >= active#(X) mark#(X) >= mark#(X) mark#(X) >= mark#(X) mark#(isNat) >= active#(isNat) mark#(X) >= mark#(X) mark#(X) >= active#(X) mark#(X) >= mark#(X) mark#(X) >= mark#(X) mark#(U41(X, Y)) >= active#(U41(X, Y)) mark#(U41(X, Y)) >= mark#(X) mark#(U51(X, Y, Z)) >= active#(U51(X, Y, Z)) mark#(U51(X, Y, Z)) >= mark#(X) mark#(U52(X, Y, Z)) >= mark#(X) mark#(s(X)) >= mark#(X) mark#(plus(X, Y)) >= active#(plus(X, Y)) mark#(plus(X, Y)) >= mark#(X) tt >= isNat tt >= tt tt >= tt tt >= isNat tt >= tt U41(tt, X) >= X U51(tt, X, Y) >= U52(isNat, X, Y) U52(tt, X, Y) >= s(plus(Y, X)) U61(tt) >= _|_ U71(tt, X, Y) >= U72(isNat, X, Y) U72(tt, X, Y) >= plus(x(Y, X), Y) isNat >= tt isNat >= isNat isNat >= isNat isNat >= isNat plus(X, _|_) >= U41(isNat, X) plus(X, s(Y)) >= U51(isNat, Y, X) x(X, _|_) >= U61(isNat) x(X, s(Y)) >= U71(isNat, Y, X) X >= X tt >= tt X >= X isNat >= isNat X >= X X >= X X >= X U41(X, Y) >= U41(X, Y) U51(X, Y, Z) >= U51(X, Y, Z) U52(X, Y, Z) >= U52(X, Y, Z) s(X) >= s(X) plus(X, Y) >= plus(X, Y) U61(X) >= U61(X) _|_ >= _|_ U71(X, Y, Z) >= U71(X, Y, Z) U72(X, Y, Z) >= U72(X, Y, Z) x(X, Y) >= x(X, Y) X >= X X >= X X >= X X >= X X >= X X >= X isNat >= isNat isNat >= isNat X >= X X >= X X >= X X >= X X >= X X >= X X >= X X >= X U41(X, Y) >= U41(X, Y) U41(X, Y) >= U41(X, Y) U41(X, Y) >= U41(X, Y) U41(X, Y) >= U41(X, Y) U51(X, Y, Z) >= U51(X, Y, Z) U51(X, Y, Z) >= U51(X, Y, Z) U51(X, Y, Z) >= U51(X, Y, Z) U51(X, Y, Z) >= U51(X, Y, Z) U51(X, Y, Z) >= U51(X, Y, Z) U51(X, Y, Z) >= U51(X, Y, Z) U52(X, Y, Z) >= U52(X, Y, Z) U52(X, Y, Z) >= U52(X, Y, Z) U52(X, Y, Z) >= U52(X, Y, Z) U52(X, Y, Z) >= U52(X, Y, Z) U52(X, Y, Z) >= U52(X, Y, Z) U52(X, Y, Z) >= U52(X, Y, Z) s(X) >= s(X) s(X) >= s(X) plus(X, Y) >= plus(X, Y) plus(X, Y) >= plus(X, Y) plus(X, Y) >= plus(X, Y) plus(X, Y) >= plus(X, Y) x(X, Y) >= x(X, Y) x(X, Y) >= x(X, Y) x(X, Y) >= x(X, Y) x(X, Y) >= x(X, Y) With these choices, we have: 1] active#(tt) >= mark#(isNat) because active# = mark#, active# in Mul and [2], by (Fun) 2] tt >= isNat because tt = isNat, by (Fun) 3] active#(tt) >= mark#(isNat) because active# = mark#, active# in Mul and [4], by (Fun) 4] tt >= isNat because tt = isNat, by (Fun) 5] active#(U41(tt, X)) >= mark#(X) because active# = mark#, active# in Mul and [6], by (Fun) 6] U41(tt, X) >= X because [7], by (Star) 7] U41*(tt, X) >= X because [8], by (Select) 8] X >= X by (Meta) 9] active#(U51(tt, X, Y)) >= mark#(U52(isNat, X, Y)) because active# = mark#, active# in Mul and [10], by (Fun) 10] U51(tt, X, Y) >= U52(isNat, X, Y) because U51 = U52, U51 in Mul, [11], [12] and [13], by (Fun) 11] tt >= isNat because tt = isNat, by (Fun) 12] X >= X by (Meta) 13] Y >= Y by (Meta) 14] active#(isNat) >= mark#(isNat) because active# = mark#, active# in Mul and [15], by (Fun) 15] isNat >= isNat because isNat in Mul, by (Fun) 16] active#(isNat) >= mark#(isNat) because active# = mark#, active# in Mul and [17], by (Fun) 17] isNat >= isNat because isNat in Mul, by (Fun) 18] active#(isNat) >= mark#(isNat) because active# = mark#, active# in Mul and [19], by (Fun) 19] isNat >= isNat because isNat in Mul, by (Fun) 20] active#(plus(X, _|_)) > mark#(U41(isNat, X)) because [21], by definition 21] active#*(plus(X, _|_)) >= mark#(U41(isNat, X)) because active# = mark#, active# in Mul and [22], by (Stat) 22] plus(X, _|_) > U41(isNat, X) because [23], by definition 23] plus*(X, _|_) >= U41(isNat, X) because plus > U41, [24] and [25], by (Copy) 24] plus*(X, _|_) >= isNat because plus > isNat, by (Copy) 25] plus*(X, _|_) >= X because [13], by (Select) 26] active#(plus(X, s(Y))) >= mark#(U51(isNat, Y, X)) because active# = mark#, active# in Mul and [27], by (Fun) 27] plus(X, s(Y)) >= U51(isNat, Y, X) because [28], by (Star) 28] plus*(X, s(Y)) >= U51(isNat, Y, X) because plus = U51, plus in Mul, [13], [29] and [31], by (Stat) 29] s(Y) > isNat because [30], by definition 30] s*(Y) >= isNat because s > isNat, by (Copy) 31] s(Y) > Y because [32], by definition 32] s*(Y) >= Y because [12], by (Select) 33] mark#(X) >= active#(X) because mark# = active#, mark# in Mul and [34], by (Fun) 34] X >= X by (Meta) 35] mark#(X) >= mark#(X) because mark# in Mul and [34], by (Fun) 36] mark#(X) >= mark#(X) because mark# in Mul and [37], by (Fun) 37] X >= X by (Meta) 38] mark#(isNat) >= active#(isNat) because mark# = active#, mark# in Mul and [39], by (Fun) 39] isNat >= isNat because isNat in Mul, by (Fun) 40] mark#(X) >= mark#(X) because mark# in Mul and [41], by (Fun) 41] X >= X by (Meta) 42] mark#(X) >= active#(X) because mark# = active#, mark# in Mul and [43], by (Fun) 43] X >= X by (Meta) 44] mark#(X) >= mark#(X) because mark# in Mul and [43], by (Fun) 45] mark#(X) >= mark#(X) because mark# in Mul and [46], by (Fun) 46] X >= X by (Meta) 47] mark#(U41(X, Y)) >= active#(U41(X, Y)) because mark# = active#, mark# in Mul and [48], by (Fun) 48] U41(X, Y) >= U41(X, Y) because U41 in Mul, [49] and [50], by (Fun) 49] X >= X by (Meta) 50] Y >= Y by (Meta) 51] mark#(U41(X, Y)) >= mark#(X) because mark# in Mul and [52], by (Fun) 52] U41(X, Y) >= X because [53], by (Star) 53] U41*(X, Y) >= X because [49], by (Select) 54] mark#(U51(X, Y, Z)) >= active#(U51(X, Y, Z)) because mark# = active#, mark# in Mul and [55], by (Fun) 55] U51(X, Y, Z) >= U51(X, Y, Z) because U51 in Mul, [49], [50] and [56], by (Fun) 56] Z >= Z by (Meta) 57] mark#(U51(X, Y, Z)) >= mark#(X) because mark# in Mul and [58], by (Fun) 58] U51(X, Y, Z) >= X because [59], by (Star) 59] U51*(X, Y, Z) >= X because [49], by (Select) 60] mark#(U52(X, Y, Z)) >= mark#(X) because [61], by (Star) 61] mark#*(U52(X, Y, Z)) >= mark#(X) because mark# in Mul and [62], by (Stat) 62] U52(X, Y, Z) > X because [63], by definition 63] U52*(X, Y, Z) >= X because [49], by (Select) 64] mark#(s(X)) >= mark#(X) because mark# in Mul and [65], by (Fun) 65] s(X) >= X because [66], by (Star) 66] s*(X) >= X because [46], by (Select) 67] mark#(plus(X, Y)) >= active#(plus(X, Y)) because mark# = active#, mark# in Mul and [68], by (Fun) 68] plus(X, Y) >= plus(X, Y) because plus in Mul, [49] and [69], by (Fun) 69] Y >= Y by (Meta) 70] mark#(plus(X, Y)) >= mark#(X) because mark# in Mul and [71], by (Fun) 71] plus(X, Y) >= X because [72], by (Star) 72] plus*(X, Y) >= X because [49], by (Select) 73] tt >= isNat because tt = isNat, by (Fun) 74] tt >= tt by (Fun) 75] tt >= tt by (Fun) 76] tt >= isNat because tt = isNat, by (Fun) 77] tt >= tt by (Fun) 78] U41(tt, X) >= X because [7], by (Star) 79] U51(tt, X, Y) >= U52(isNat, X, Y) because U51 = U52, U51 in Mul, [11], [12] and [13], by (Fun) 80] U52(tt, X, Y) >= s(plus(Y, X)) because [81], by (Star) 81] U52*(tt, X, Y) >= s(plus(Y, X)) because U52 > s and [82], by (Copy) 82] U52*(tt, X, Y) >= plus(Y, X) because U52 = plus, U52 in Mul, [12] and [13], by (Stat) 83] U61(tt) >= _|_ by (Bot) 84] U71(tt, X, Y) >= U72(isNat, X, Y) because U71 = U72, U71 in Mul, [11], [12] and [13], by (Fun) 85] U72(tt, X, Y) >= plus(x(Y, X), Y) because [86], by (Star) 86] U72*(tt, X, Y) >= plus(x(Y, X), Y) because U72 > plus, [87] and [88], by (Copy) 87] U72*(tt, X, Y) >= x(Y, X) because U72 = x, U72 in Mul, [12] and [13], by (Stat) 88] U72*(tt, X, Y) >= Y because [13], by (Select) 89] isNat >= tt because isNat = tt, by (Fun) 90] isNat >= isNat because isNat in Mul, by (Fun) 91] isNat >= isNat because isNat in Mul, by (Fun) 92] isNat >= isNat because isNat in Mul, by (Fun) 93] plus(X, _|_) >= U41(isNat, X) because [23], by (Star) 94] plus(X, s(Y)) >= U51(isNat, Y, X) because [28], by (Star) 95] x(X, _|_) >= U61(isNat) because [96], by (Star) 96] x*(X, _|_) >= U61(isNat) because x > U61 and [97], by (Copy) 97] x*(X, _|_) >= isNat because x > isNat, by (Copy) 98] x(X, s(Y)) >= U71(isNat, Y, X) because [99], by (Star) 99] x*(X, s(Y)) >= U71(isNat, Y, X) because x = U71, x in Mul, [13], [29] and [31], by (Stat) 100] X >= X by (Meta) 101] tt >= tt by (Fun) 102] X >= X by (Meta) 103] isNat >= isNat because isNat in Mul, by (Fun) 104] X >= X by (Meta) 105] X >= X by (Meta) 106] X >= X by (Meta) 107] U41(X, Y) >= U41(X, Y) because U41 in Mul, [49] and [69], by (Fun) 108] U51(X, Y, Z) >= U51(X, Y, Z) because U51 in Mul, [49], [69] and [56], by (Fun) 109] U52(X, Y, Z) >= U52(X, Y, Z) because U52 in Mul, [49], [69] and [56], by (Fun) 110] s(X) >= s(X) because s in Mul and [111], by (Fun) 111] X >= X by (Meta) 112] plus(X, Y) >= plus(X, Y) because plus in Mul, [49] and [69], by (Fun) 113] U61(X) >= U61(X) because U61 in Mul and [111], by (Fun) 114] _|_ >= _|_ by (Bot) 115] U71(X, Y, Z) >= U71(X, Y, Z) because U71 in Mul, [49], [69] and [56], by (Fun) 116] U72(X, Y, Z) >= U72(X, Y, Z) because U72 in Mul, [49], [69] and [56], by (Fun) 117] x(X, Y) >= x(X, Y) because x in Mul, [49] and [69], by (Fun) 118] X >= X by (Meta) 119] X >= X by (Meta) 120] X >= X by (Meta) 121] X >= X by (Meta) 122] X >= X by (Meta) 123] X >= X by (Meta) 124] isNat >= isNat because isNat in Mul, by (Fun) 125] isNat >= isNat because isNat in Mul, by (Fun) 126] X >= X by (Meta) 127] X >= X by (Meta) 128] X >= X by (Meta) 129] X >= X by (Meta) 130] X >= X by (Meta) 131] X >= X by (Meta) 132] X >= X by (Meta) 133] X >= X by (Meta) 134] U41(X, Y) >= U41(X, Y) because U41 in Mul, [135] and [69], by (Fun) 135] X >= X by (Meta) 136] U41(X, Y) >= U41(X, Y) because U41 in Mul, [49] and [137], by (Fun) 137] Y >= Y by (Meta) 138] U41(X, Y) >= U41(X, Y) because U41 in Mul, [139] and [69], by (Fun) 139] X >= X by (Meta) 140] U41(X, Y) >= U41(X, Y) because U41 in Mul, [49] and [141], by (Fun) 141] Y >= Y by (Meta) 142] U51(X, Y, Z) >= U51(X, Y, Z) because U51 in Mul, [135], [69] and [56], by (Fun) 143] U51(X, Y, Z) >= U51(X, Y, Z) because U51 in Mul, [49], [137] and [56], by (Fun) 144] U51(X, Y, Z) >= U51(X, Y, Z) because U51 in Mul, [49], [69] and [145], by (Fun) 145] Z >= Z by (Meta) 146] U51(X, Y, Z) >= U51(X, Y, Z) because U51 in Mul, [139], [69] and [56], by (Fun) 147] U51(X, Y, Z) >= U51(X, Y, Z) because U51 in Mul, [49], [141] and [56], by (Fun) 148] U51(X, Y, Z) >= U51(X, Y, Z) because U51 in Mul, [49], [69] and [149], by (Fun) 149] Z >= Z by (Meta) 150] U52(X, Y, Z) >= U52(X, Y, Z) because U52 in Mul, [135], [69] and [56], by (Fun) 151] U52(X, Y, Z) >= U52(X, Y, Z) because U52 in Mul, [49], [137] and [56], by (Fun) 152] U52(X, Y, Z) >= U52(X, Y, Z) because U52 in Mul, [49], [69] and [145], by (Fun) 153] U52(X, Y, Z) >= U52(X, Y, Z) because U52 in Mul, [139], [69] and [56], by (Fun) 154] U52(X, Y, Z) >= U52(X, Y, Z) because U52 in Mul, [49], [141] and [56], by (Fun) 155] U52(X, Y, Z) >= U52(X, Y, Z) because U52 in Mul, [49], [69] and [149], by (Fun) 156] s(X) >= s(X) because s in Mul and [157], by (Fun) 157] X >= X by (Meta) 158] s(X) >= s(X) because s in Mul and [159], by (Fun) 159] X >= X by (Meta) 160] plus(X, Y) >= plus(X, Y) because plus in Mul, [135] and [69], by (Fun) 161] plus(X, Y) >= plus(X, Y) because plus in Mul, [49] and [137], by (Fun) 162] plus(X, Y) >= plus(X, Y) because plus in Mul, [139] and [69], by (Fun) 163] plus(X, Y) >= plus(X, Y) because plus in Mul, [49] and [141], by (Fun) 164] x(X, Y) >= x(X, Y) because x in Mul, [135] and [69], by (Fun) 165] x(X, Y) >= x(X, Y) because x in Mul, [49] and [137], by (Fun) 166] x(X, Y) >= x(X, Y) because x in Mul, [139] and [69], by (Fun) 167] x(X, Y) >= x(X, Y) because x in Mul, [49] and [141], by (Fun) By the observations in [Kop12, Sec. 6.6], this reduction pair suffices; we may thus replace the dependency pair problem (P_37, R_2, minimal, formative) by (P_38, R_2, minimal, formative), where P_38 consists of: active#(U11(tt, X)) =#> mark#(U12(isNat(X))) active#(U31(tt, X)) =#> mark#(U32(isNat(X))) active#(U41(tt, X)) =#> mark#(X) active#(U51(tt, X, Y)) =#> mark#(U52(isNat(Y), X, Y)) active#(isNat(plus(X, Y))) =#> mark#(U11(isNat(X), Y)) active#(isNat(s(X))) =#> mark#(U21(isNat(X))) active#(isNat(x(X, Y))) =#> mark#(U31(isNat(X), Y)) active#(plus(X, s(Y))) =#> mark#(U51(isNat(Y), Y, X)) mark#(U11(X, Y)) =#> active#(U11(mark(X), Y)) mark#(U11(X, Y)) =#> mark#(X) mark#(U12(X)) =#> mark#(X) mark#(isNat(X)) =#> active#(isNat(X)) mark#(U21(X)) =#> mark#(X) mark#(U31(X, Y)) =#> active#(U31(mark(X), Y)) mark#(U31(X, Y)) =#> mark#(X) mark#(U32(X)) =#> mark#(X) mark#(U41(X, Y)) =#> active#(U41(mark(X), Y)) mark#(U41(X, Y)) =#> mark#(X) mark#(U51(X, Y, Z)) =#> active#(U51(mark(X), Y, Z)) mark#(U51(X, Y, Z)) =#> mark#(X) mark#(U52(X, Y, Z)) =#> mark#(X) mark#(s(X)) =#> mark#(X) mark#(plus(X, Y)) =#> active#(plus(mark(X), mark(Y))) mark#(plus(X, Y)) =#> mark#(X) Thus, the original system is terminating if (P_38, R_2, minimal, formative) is finite. We consider the dependency pair problem (P_38, R_2, minimal, formative). We will use the reduction pair processor [Kop12, Thm. 7.16]. It suffices to find a standard reduction pair [Kop12, Def. 6.69]. Thus, we must orient: active#(U11(tt, X)) >? mark#(U12(isNat(X))) active#(U31(tt, X)) >? mark#(U32(isNat(X))) active#(U41(tt, X)) >? mark#(X) active#(U51(tt, X, Y)) >? mark#(U52(isNat(Y), X, Y)) active#(isNat(plus(X, Y))) >? mark#(U11(isNat(X), Y)) active#(isNat(s(X))) >? mark#(U21(isNat(X))) active#(isNat(x(X, Y))) >? mark#(U31(isNat(X), Y)) active#(plus(X, s(Y))) >? mark#(U51(isNat(Y), Y, X)) mark#(U11(X, Y)) >? active#(U11(mark(X), Y)) mark#(U11(X, Y)) >? mark#(X) mark#(U12(X)) >? mark#(X) mark#(isNat(X)) >? active#(isNat(X)) mark#(U21(X)) >? mark#(X) mark#(U31(X, Y)) >? active#(U31(mark(X), Y)) mark#(U31(X, Y)) >? mark#(X) mark#(U32(X)) >? mark#(X) mark#(U41(X, Y)) >? active#(U41(mark(X), Y)) mark#(U41(X, Y)) >? mark#(X) mark#(U51(X, Y, Z)) >? active#(U51(mark(X), Y, Z)) mark#(U51(X, Y, Z)) >? mark#(X) mark#(U52(X, Y, Z)) >? mark#(X) mark#(s(X)) >? mark#(X) mark#(plus(X, Y)) >? active#(plus(mark(X), mark(Y))) mark#(plus(X, Y)) >? mark#(X) active(U11(tt, X)) >= mark(U12(isNat(X))) active(U12(tt)) >= mark(tt) active(U21(tt)) >= mark(tt) active(U31(tt, X)) >= mark(U32(isNat(X))) active(U32(tt)) >= mark(tt) active(U41(tt, X)) >= mark(X) active(U51(tt, X, Y)) >= mark(U52(isNat(Y), X, Y)) active(U52(tt, X, Y)) >= mark(s(plus(Y, X))) active(U61(tt)) >= mark(0) active(U71(tt, X, Y)) >= mark(U72(isNat(Y), X, Y)) active(U72(tt, X, Y)) >= mark(plus(x(Y, X), Y)) active(isNat(0)) >= mark(tt) active(isNat(plus(X, Y))) >= mark(U11(isNat(X), Y)) active(isNat(s(X))) >= mark(U21(isNat(X))) active(isNat(x(X, Y))) >= mark(U31(isNat(X), Y)) active(plus(X, 0)) >= mark(U41(isNat(X), X)) active(plus(X, s(Y))) >= mark(U51(isNat(Y), Y, X)) active(x(X, 0)) >= mark(U61(isNat(X))) active(x(X, s(Y))) >= mark(U71(isNat(Y), Y, X)) mark(U11(X, Y)) >= active(U11(mark(X), Y)) mark(tt) >= active(tt) mark(U12(X)) >= active(U12(mark(X))) mark(isNat(X)) >= active(isNat(X)) mark(U21(X)) >= active(U21(mark(X))) mark(U31(X, Y)) >= active(U31(mark(X), Y)) mark(U32(X)) >= active(U32(mark(X))) mark(U41(X, Y)) >= active(U41(mark(X), Y)) mark(U51(X, Y, Z)) >= active(U51(mark(X), Y, Z)) mark(U52(X, Y, Z)) >= active(U52(mark(X), Y, Z)) mark(s(X)) >= active(s(mark(X))) mark(plus(X, Y)) >= active(plus(mark(X), mark(Y))) mark(U61(X)) >= active(U61(mark(X))) mark(0) >= active(0) mark(U71(X, Y, Z)) >= active(U71(mark(X), Y, Z)) mark(U72(X, Y, Z)) >= active(U72(mark(X), Y, Z)) mark(x(X, Y)) >= active(x(mark(X), mark(Y))) U11(mark(X), Y) >= U11(X, Y) U11(X, mark(Y)) >= U11(X, Y) U11(active(X), Y) >= U11(X, Y) U11(X, active(Y)) >= U11(X, Y) U12(mark(X)) >= U12(X) U12(active(X)) >= U12(X) isNat(mark(X)) >= isNat(X) isNat(active(X)) >= isNat(X) U21(mark(X)) >= U21(X) U21(active(X)) >= U21(X) U31(mark(X), Y) >= U31(X, Y) U31(X, mark(Y)) >= U31(X, Y) U31(active(X), Y) >= U31(X, Y) U31(X, active(Y)) >= U31(X, Y) U32(mark(X)) >= U32(X) U32(active(X)) >= U32(X) U41(mark(X), Y) >= U41(X, Y) U41(X, mark(Y)) >= U41(X, Y) U41(active(X), Y) >= U41(X, Y) U41(X, active(Y)) >= U41(X, Y) U51(mark(X), Y, Z) >= U51(X, Y, Z) U51(X, mark(Y), Z) >= U51(X, Y, Z) U51(X, Y, mark(Z)) >= U51(X, Y, Z) U51(active(X), Y, Z) >= U51(X, Y, Z) U51(X, active(Y), Z) >= U51(X, Y, Z) U51(X, Y, active(Z)) >= U51(X, Y, Z) U52(mark(X), Y, Z) >= U52(X, Y, Z) U52(X, mark(Y), Z) >= U52(X, Y, Z) U52(X, Y, mark(Z)) >= U52(X, Y, Z) U52(active(X), Y, Z) >= U52(X, Y, Z) U52(X, active(Y), Z) >= U52(X, Y, Z) U52(X, Y, active(Z)) >= U52(X, Y, Z) s(mark(X)) >= s(X) s(active(X)) >= s(X) plus(mark(X), Y) >= plus(X, Y) plus(X, mark(Y)) >= plus(X, Y) plus(active(X), Y) >= plus(X, Y) plus(X, active(Y)) >= plus(X, Y) x(mark(X), Y) >= x(X, Y) x(X, mark(Y)) >= x(X, Y) x(active(X), Y) >= x(X, Y) x(X, active(Y)) >= x(X, Y) Since this representation is not advantageous for the higher-order recursive path ordering, we present the strict requirements in their unextended form, which is not problematic since for any F, s and substituion gamma: (F s)gamma beta-reduces to F(s)gamma.) We use a recursive path ordering as defined in [Kop12, Chapter 5]. Argument functions: [[0]] = _|_ [[U11(x_1, x_2)]] = x_1 [[U12(x_1)]] = x_1 [[U21(x_1)]] = x_1 [[U31(x_1, x_2)]] = x_1 [[U32(x_1)]] = x_1 [[U61(x_1)]] = _|_ [[active(x_1)]] = x_1 [[isNat(x_1)]] = _|_ [[mark(x_1)]] = x_1 [[tt]] = _|_ We choose Lex = {} and Mul = {U41, U51, U52, U71, U72, active#, mark#, plus, s, x}, and the following precedence: U71 = U72 = x > U51 = U52 = active# = mark# = plus > U41 > s Taking the argument function into account, and fixing the greater / greater equal choices, the constraints can be denoted as follows: active#(_|_) >= mark#(_|_) active#(_|_) >= mark#(_|_) active#(U41(_|_, X)) >= mark#(X) active#(U51(_|_, X, Y)) >= mark#(U52(_|_, X, Y)) active#(_|_) >= mark#(_|_) active#(_|_) >= mark#(_|_) active#(_|_) >= mark#(_|_) active#(plus(X, s(Y))) > mark#(U51(_|_, Y, X)) mark#(X) >= active#(X) mark#(X) >= mark#(X) mark#(X) >= mark#(X) mark#(_|_) >= active#(_|_) mark#(X) >= mark#(X) mark#(X) >= active#(X) mark#(X) >= mark#(X) mark#(X) >= mark#(X) mark#(U41(X, Y)) >= active#(U41(X, Y)) mark#(U41(X, Y)) >= mark#(X) mark#(U51(X, Y, Z)) >= active#(U51(X, Y, Z)) mark#(U51(X, Y, Z)) >= mark#(X) mark#(U52(X, Y, Z)) >= mark#(X) mark#(s(X)) >= mark#(X) mark#(plus(X, Y)) >= active#(plus(X, Y)) mark#(plus(X, Y)) >= mark#(X) _|_ >= _|_ _|_ >= _|_ _|_ >= _|_ _|_ >= _|_ _|_ >= _|_ U41(_|_, X) >= X U51(_|_, X, Y) >= U52(_|_, X, Y) U52(_|_, X, Y) >= s(plus(Y, X)) _|_ >= _|_ U71(_|_, X, Y) >= U72(_|_, X, Y) U72(_|_, X, Y) >= plus(x(Y, X), Y) _|_ >= _|_ _|_ >= _|_ _|_ >= _|_ _|_ >= _|_ plus(X, _|_) >= U41(_|_, X) plus(X, s(Y)) >= U51(_|_, Y, X) x(X, _|_) >= _|_ x(X, s(Y)) >= U71(_|_, Y, X) X >= X _|_ >= _|_ X >= X _|_ >= _|_ X >= X X >= X X >= X U41(X, Y) >= U41(X, Y) U51(X, Y, Z) >= U51(X, Y, Z) U52(X, Y, Z) >= U52(X, Y, Z) s(X) >= s(X) plus(X, Y) >= plus(X, Y) _|_ >= _|_ _|_ >= _|_ U71(X, Y, Z) >= U71(X, Y, Z) U72(X, Y, Z) >= U72(X, Y, Z) x(X, Y) >= x(X, Y) X >= X X >= X X >= X X >= X X >= X X >= X _|_ >= _|_ _|_ >= _|_ X >= X X >= X X >= X X >= X X >= X X >= X X >= X X >= X U41(X, Y) >= U41(X, Y) U41(X, Y) >= U41(X, Y) U41(X, Y) >= U41(X, Y) U41(X, Y) >= U41(X, Y) U51(X, Y, Z) >= U51(X, Y, Z) U51(X, Y, Z) >= U51(X, Y, Z) U51(X, Y, Z) >= U51(X, Y, Z) U51(X, Y, Z) >= U51(X, Y, Z) U51(X, Y, Z) >= U51(X, Y, Z) U51(X, Y, Z) >= U51(X, Y, Z) U52(X, Y, Z) >= U52(X, Y, Z) U52(X, Y, Z) >= U52(X, Y, Z) U52(X, Y, Z) >= U52(X, Y, Z) U52(X, Y, Z) >= U52(X, Y, Z) U52(X, Y, Z) >= U52(X, Y, Z) U52(X, Y, Z) >= U52(X, Y, Z) s(X) >= s(X) s(X) >= s(X) plus(X, Y) >= plus(X, Y) plus(X, Y) >= plus(X, Y) plus(X, Y) >= plus(X, Y) plus(X, Y) >= plus(X, Y) x(X, Y) >= x(X, Y) x(X, Y) >= x(X, Y) x(X, Y) >= x(X, Y) x(X, Y) >= x(X, Y) With these choices, we have: 1] active#(_|_) >= mark#(_|_) because active# = mark#, active# in Mul and [2], by (Fun) 2] _|_ >= _|_ by (Bot) 3] active#(_|_) >= mark#(_|_) because active# = mark#, active# in Mul and [4], by (Fun) 4] _|_ >= _|_ by (Bot) 5] active#(U41(_|_, X)) >= mark#(X) because active# = mark#, active# in Mul and [6], by (Fun) 6] U41(_|_, X) >= X because [7], by (Star) 7] U41*(_|_, X) >= X because [8], by (Select) 8] X >= X by (Meta) 9] active#(U51(_|_, X, Y)) >= mark#(U52(_|_, X, Y)) because active# = mark#, active# in Mul and [10], by (Fun) 10] U51(_|_, X, Y) >= U52(_|_, X, Y) because U51 = U52, U51 in Mul, [11], [12] and [13], by (Fun) 11] _|_ >= _|_ by (Bot) 12] X >= X by (Meta) 13] Y >= Y by (Meta) 14] active#(_|_) >= mark#(_|_) because active# = mark#, active# in Mul and [15], by (Fun) 15] _|_ >= _|_ by (Bot) 16] active#(_|_) >= mark#(_|_) because active# = mark#, active# in Mul and [17], by (Fun) 17] _|_ >= _|_ by (Bot) 18] active#(_|_) >= mark#(_|_) because active# = mark#, active# in Mul and [19], by (Fun) 19] _|_ >= _|_ by (Bot) 20] active#(plus(X, s(Y))) > mark#(U51(_|_, Y, X)) because [21], by definition 21] active#*(plus(X, s(Y))) >= mark#(U51(_|_, Y, X)) because active# = mark#, active# in Mul and [22], by (Stat) 22] plus(X, s(Y)) > U51(_|_, Y, X) because [23], by definition 23] plus*(X, s(Y)) >= U51(_|_, Y, X) because plus = U51, plus in Mul, [13], [24] and [26], by (Stat) 24] s(Y) > _|_ because [25], by definition 25] s*(Y) >= _|_ by (Bot) 26] s(Y) > Y because [27], by definition 27] s*(Y) >= Y because [12], by (Select) 28] mark#(X) >= active#(X) because mark# = active#, mark# in Mul and [29], by (Fun) 29] X >= X by (Meta) 30] mark#(X) >= mark#(X) because mark# in Mul and [29], by (Fun) 31] mark#(X) >= mark#(X) because mark# in Mul and [32], by (Fun) 32] X >= X by (Meta) 33] mark#(_|_) >= active#(_|_) because mark# = active#, mark# in Mul and [34], by (Fun) 34] _|_ >= _|_ by (Bot) 35] mark#(X) >= mark#(X) because mark# in Mul and [36], by (Fun) 36] X >= X by (Meta) 37] mark#(X) >= active#(X) because mark# = active#, mark# in Mul and [38], by (Fun) 38] X >= X by (Meta) 39] mark#(X) >= mark#(X) because mark# in Mul and [38], by (Fun) 40] mark#(X) >= mark#(X) because mark# in Mul and [41], by (Fun) 41] X >= X by (Meta) 42] mark#(U41(X, Y)) >= active#(U41(X, Y)) because mark# = active#, mark# in Mul and [43], by (Fun) 43] U41(X, Y) >= U41(X, Y) because U41 in Mul, [44] and [45], by (Fun) 44] X >= X by (Meta) 45] Y >= Y by (Meta) 46] mark#(U41(X, Y)) >= mark#(X) because [47], by (Star) 47] mark#*(U41(X, Y)) >= mark#(X) because mark# in Mul and [48], by (Stat) 48] U41(X, Y) > X because [49], by definition 49] U41*(X, Y) >= X because [44], by (Select) 50] mark#(U51(X, Y, Z)) >= active#(U51(X, Y, Z)) because mark# = active#, mark# in Mul and [51], by (Fun) 51] U51(X, Y, Z) >= U51(X, Y, Z) because U51 in Mul, [44], [45] and [52], by (Fun) 52] Z >= Z by (Meta) 53] mark#(U51(X, Y, Z)) >= mark#(X) because mark# in Mul and [54], by (Fun) 54] U51(X, Y, Z) >= X because [55], by (Star) 55] U51*(X, Y, Z) >= X because [44], by (Select) 56] mark#(U52(X, Y, Z)) >= mark#(X) because [57], by (Star) 57] mark#*(U52(X, Y, Z)) >= mark#(X) because [58], by (Select) 58] U52(X, Y, Z) >= mark#(X) because [59], by (Star) 59] U52*(X, Y, Z) >= mark#(X) because U52 = mark#, U52 in Mul and [44], by (Stat) 60] mark#(s(X)) >= mark#(X) because mark# in Mul and [61], by (Fun) 61] s(X) >= X because [62], by (Star) 62] s*(X) >= X because [41], by (Select) 63] mark#(plus(X, Y)) >= active#(plus(X, Y)) because mark# = active#, mark# in Mul and [64], by (Fun) 64] plus(X, Y) >= plus(X, Y) because plus in Mul, [44] and [65], by (Fun) 65] Y >= Y by (Meta) 66] mark#(plus(X, Y)) >= mark#(X) because [67], by (Star) 67] mark#*(plus(X, Y)) >= mark#(X) because [68], by (Select) 68] plus(X, Y) >= mark#(X) because [69], by (Star) 69] plus*(X, Y) >= mark#(X) because plus = mark#, plus in Mul and [44], by (Stat) 70] _|_ >= _|_ by (Bot) 71] _|_ >= _|_ by (Bot) 72] _|_ >= _|_ by (Bot) 73] _|_ >= _|_ by (Bot) 74] _|_ >= _|_ by (Bot) 75] U41(_|_, X) >= X because [7], by (Star) 76] U51(_|_, X, Y) >= U52(_|_, X, Y) because U51 = U52, U51 in Mul, [11], [12] and [13], by (Fun) 77] U52(_|_, X, Y) >= s(plus(Y, X)) because [78], by (Star) 78] U52*(_|_, X, Y) >= s(plus(Y, X)) because U52 > s and [79], by (Copy) 79] U52*(_|_, X, Y) >= plus(Y, X) because U52 = plus, U52 in Mul, [12] and [13], by (Stat) 80] _|_ >= _|_ by (Bot) 81] U71(_|_, X, Y) >= U72(_|_, X, Y) because U71 = U72, U71 in Mul, [11], [12] and [13], by (Fun) 82] U72(_|_, X, Y) >= plus(x(Y, X), Y) because [83], by (Star) 83] U72*(_|_, X, Y) >= plus(x(Y, X), Y) because U72 > plus, [84] and [85], by (Copy) 84] U72*(_|_, X, Y) >= x(Y, X) because U72 = x, U72 in Mul, [12] and [13], by (Stat) 85] U72*(_|_, X, Y) >= Y because [13], by (Select) 86] _|_ >= _|_ by (Bot) 87] _|_ >= _|_ by (Bot) 88] _|_ >= _|_ by (Bot) 89] _|_ >= _|_ by (Bot) 90] plus(X, _|_) >= U41(_|_, X) because [91], by (Star) 91] plus*(X, _|_) >= U41(_|_, X) because plus > U41, [92] and [93], by (Copy) 92] plus*(X, _|_) >= _|_ by (Bot) 93] plus*(X, _|_) >= X because [13], by (Select) 94] plus(X, s(Y)) >= U51(_|_, Y, X) because [23], by (Star) 95] x(X, _|_) >= _|_ by (Bot) 96] x(X, s(Y)) >= U71(_|_, Y, X) because [97], by (Star) 97] x*(X, s(Y)) >= U71(_|_, Y, X) because x = U71, x in Mul, [13], [24] and [26], by (Stat) 98] X >= X by (Meta) 99] _|_ >= _|_ by (Bot) 100] X >= X by (Meta) 101] _|_ >= _|_ by (Bot) 102] X >= X by (Meta) 103] X >= X by (Meta) 104] X >= X by (Meta) 105] U41(X, Y) >= U41(X, Y) because U41 in Mul, [44] and [65], by (Fun) 106] U51(X, Y, Z) >= U51(X, Y, Z) because U51 in Mul, [44], [65] and [52], by (Fun) 107] U52(X, Y, Z) >= U52(X, Y, Z) because U52 in Mul, [44], [65] and [52], by (Fun) 108] s(X) >= s(X) because s in Mul and [109], by (Fun) 109] X >= X by (Meta) 110] plus(X, Y) >= plus(X, Y) because plus in Mul, [44] and [65], by (Fun) 111] _|_ >= _|_ by (Bot) 112] _|_ >= _|_ by (Bot) 113] U71(X, Y, Z) >= U71(X, Y, Z) because U71 in Mul, [44], [65] and [52], by (Fun) 114] U72(X, Y, Z) >= U72(X, Y, Z) because U72 in Mul, [44], [65] and [52], by (Fun) 115] x(X, Y) >= x(X, Y) because x in Mul, [44] and [65], by (Fun) 116] X >= X by (Meta) 117] X >= X by (Meta) 118] X >= X by (Meta) 119] X >= X by (Meta) 120] X >= X by (Meta) 121] X >= X by (Meta) 122] _|_ >= _|_ by (Bot) 123] _|_ >= _|_ by (Bot) 124] X >= X by (Meta) 125] X >= X by (Meta) 126] X >= X by (Meta) 127] X >= X by (Meta) 128] X >= X by (Meta) 129] X >= X by (Meta) 130] X >= X by (Meta) 131] X >= X by (Meta) 132] U41(X, Y) >= U41(X, Y) because U41 in Mul, [133] and [65], by (Fun) 133] X >= X by (Meta) 134] U41(X, Y) >= U41(X, Y) because U41 in Mul, [44] and [135], by (Fun) 135] Y >= Y by (Meta) 136] U41(X, Y) >= U41(X, Y) because U41 in Mul, [137] and [65], by (Fun) 137] X >= X by (Meta) 138] U41(X, Y) >= U41(X, Y) because U41 in Mul, [44] and [139], by (Fun) 139] Y >= Y by (Meta) 140] U51(X, Y, Z) >= U51(X, Y, Z) because U51 in Mul, [133], [65] and [52], by (Fun) 141] U51(X, Y, Z) >= U51(X, Y, Z) because U51 in Mul, [44], [135] and [52], by (Fun) 142] U51(X, Y, Z) >= U51(X, Y, Z) because U51 in Mul, [44], [65] and [143], by (Fun) 143] Z >= Z by (Meta) 144] U51(X, Y, Z) >= U51(X, Y, Z) because U51 in Mul, [137], [65] and [52], by (Fun) 145] U51(X, Y, Z) >= U51(X, Y, Z) because U51 in Mul, [44], [139] and [52], by (Fun) 146] U51(X, Y, Z) >= U51(X, Y, Z) because U51 in Mul, [44], [65] and [147], by (Fun) 147] Z >= Z by (Meta) 148] U52(X, Y, Z) >= U52(X, Y, Z) because U52 in Mul, [133], [65] and [52], by (Fun) 149] U52(X, Y, Z) >= U52(X, Y, Z) because U52 in Mul, [44], [135] and [52], by (Fun) 150] U52(X, Y, Z) >= U52(X, Y, Z) because U52 in Mul, [44], [65] and [143], by (Fun) 151] U52(X, Y, Z) >= U52(X, Y, Z) because U52 in Mul, [137], [65] and [52], by (Fun) 152] U52(X, Y, Z) >= U52(X, Y, Z) because U52 in Mul, [44], [139] and [52], by (Fun) 153] U52(X, Y, Z) >= U52(X, Y, Z) because U52 in Mul, [44], [65] and [147], by (Fun) 154] s(X) >= s(X) because s in Mul and [155], by (Fun) 155] X >= X by (Meta) 156] s(X) >= s(X) because s in Mul and [157], by (Fun) 157] X >= X by (Meta) 158] plus(X, Y) >= plus(X, Y) because plus in Mul, [133] and [65], by (Fun) 159] plus(X, Y) >= plus(X, Y) because plus in Mul, [44] and [135], by (Fun) 160] plus(X, Y) >= plus(X, Y) because plus in Mul, [137] and [65], by (Fun) 161] plus(X, Y) >= plus(X, Y) because plus in Mul, [44] and [139], by (Fun) 162] x(X, Y) >= x(X, Y) because x in Mul, [133] and [65], by (Fun) 163] x(X, Y) >= x(X, Y) because x in Mul, [44] and [135], by (Fun) 164] x(X, Y) >= x(X, Y) because x in Mul, [137] and [65], by (Fun) 165] x(X, Y) >= x(X, Y) because x in Mul, [44] and [139], by (Fun) By the observations in [Kop12, Sec. 6.6], this reduction pair suffices; we may thus replace the dependency pair problem (P_38, R_2, minimal, formative) by (P_39, R_2, minimal, formative), where P_39 consists of: active#(U11(tt, X)) =#> mark#(U12(isNat(X))) active#(U31(tt, X)) =#> mark#(U32(isNat(X))) active#(U41(tt, X)) =#> mark#(X) active#(U51(tt, X, Y)) =#> mark#(U52(isNat(Y), X, Y)) active#(isNat(plus(X, Y))) =#> mark#(U11(isNat(X), Y)) active#(isNat(s(X))) =#> mark#(U21(isNat(X))) active#(isNat(x(X, Y))) =#> mark#(U31(isNat(X), Y)) mark#(U11(X, Y)) =#> active#(U11(mark(X), Y)) mark#(U11(X, Y)) =#> mark#(X) mark#(U12(X)) =#> mark#(X) mark#(isNat(X)) =#> active#(isNat(X)) mark#(U21(X)) =#> mark#(X) mark#(U31(X, Y)) =#> active#(U31(mark(X), Y)) mark#(U31(X, Y)) =#> mark#(X) mark#(U32(X)) =#> mark#(X) mark#(U41(X, Y)) =#> active#(U41(mark(X), Y)) mark#(U41(X, Y)) =#> mark#(X) mark#(U51(X, Y, Z)) =#> active#(U51(mark(X), Y, Z)) mark#(U51(X, Y, Z)) =#> mark#(X) mark#(U52(X, Y, Z)) =#> mark#(X) mark#(s(X)) =#> mark#(X) mark#(plus(X, Y)) =#> active#(plus(mark(X), mark(Y))) mark#(plus(X, Y)) =#> mark#(X) Thus, the original system is terminating if (P_39, R_2, minimal, formative) is finite. We consider the dependency pair problem (P_39, R_2, minimal, formative). We place the elements of P in a dependency graph approximation G (see e.g. [Kop12, Thm. 7.27, 7.29], as follows: * 0 : 9 * 1 : 14 * 2 : 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22 * 3 : 19 * 4 : 7, 8 * 5 : 11 * 6 : 12, 13 * 7 : 0 * 8 : 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22 * 9 : 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22 * 10 : 4, 5, 6 * 11 : 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22 * 12 : 1 * 13 : 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22 * 14 : 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22 * 15 : 2 * 16 : 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22 * 17 : 3 * 18 : 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22 * 19 : 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22 * 20 : 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22 * 21 : * 22 : 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22 This graph has the following strongly connected components: P_40: active#(U11(tt, X)) =#> mark#(U12(isNat(X))) active#(U31(tt, X)) =#> mark#(U32(isNat(X))) active#(U41(tt, X)) =#> mark#(X) active#(U51(tt, X, Y)) =#> mark#(U52(isNat(Y), X, Y)) active#(isNat(plus(X, Y))) =#> mark#(U11(isNat(X), Y)) active#(isNat(s(X))) =#> mark#(U21(isNat(X))) active#(isNat(x(X, Y))) =#> mark#(U31(isNat(X), Y)) mark#(U11(X, Y)) =#> active#(U11(mark(X), Y)) mark#(U11(X, Y)) =#> mark#(X) mark#(U12(X)) =#> mark#(X) mark#(isNat(X)) =#> active#(isNat(X)) mark#(U21(X)) =#> mark#(X) mark#(U31(X, Y)) =#> active#(U31(mark(X), Y)) mark#(U31(X, Y)) =#> mark#(X) mark#(U32(X)) =#> mark#(X) mark#(U41(X, Y)) =#> active#(U41(mark(X), Y)) mark#(U41(X, Y)) =#> mark#(X) mark#(U51(X, Y, Z)) =#> active#(U51(mark(X), Y, Z)) mark#(U51(X, Y, Z)) =#> mark#(X) mark#(U52(X, Y, Z)) =#> mark#(X) mark#(s(X)) =#> mark#(X) mark#(plus(X, Y)) =#> mark#(X) By [Kop12, Thm. 7.31], we may replace any dependency pair problem (P_39, R_2, m, f) by (P_40, R_2, m, f). Thus, the original system is terminating if (P_40, R_2, minimal, formative) is finite. We consider the dependency pair problem (P_40, R_2, minimal, formative). We will use the reduction pair processor [Kop12, Thm. 7.16]. It suffices to find a standard reduction pair [Kop12, Def. 6.69]. Thus, we must orient: active#(U11(tt, X)) >? mark#(U12(isNat(X))) active#(U31(tt, X)) >? mark#(U32(isNat(X))) active#(U41(tt, X)) >? mark#(X) active#(U51(tt, X, Y)) >? mark#(U52(isNat(Y), X, Y)) active#(isNat(plus(X, Y))) >? mark#(U11(isNat(X), Y)) active#(isNat(s(X))) >? mark#(U21(isNat(X))) active#(isNat(x(X, Y))) >? mark#(U31(isNat(X), Y)) mark#(U11(X, Y)) >? active#(U11(mark(X), Y)) mark#(U11(X, Y)) >? mark#(X) mark#(U12(X)) >? mark#(X) mark#(isNat(X)) >? active#(isNat(X)) mark#(U21(X)) >? mark#(X) mark#(U31(X, Y)) >? active#(U31(mark(X), Y)) mark#(U31(X, Y)) >? mark#(X) mark#(U32(X)) >? mark#(X) mark#(U41(X, Y)) >? active#(U41(mark(X), Y)) mark#(U41(X, Y)) >? mark#(X) mark#(U51(X, Y, Z)) >? active#(U51(mark(X), Y, Z)) mark#(U51(X, Y, Z)) >? mark#(X) mark#(U52(X, Y, Z)) >? mark#(X) mark#(s(X)) >? mark#(X) mark#(plus(X, Y)) >? mark#(X) active(U11(tt, X)) >= mark(U12(isNat(X))) active(U12(tt)) >= mark(tt) active(U21(tt)) >= mark(tt) active(U31(tt, X)) >= mark(U32(isNat(X))) active(U32(tt)) >= mark(tt) active(U41(tt, X)) >= mark(X) active(U51(tt, X, Y)) >= mark(U52(isNat(Y), X, Y)) active(U52(tt, X, Y)) >= mark(s(plus(Y, X))) active(U61(tt)) >= mark(0) active(U71(tt, X, Y)) >= mark(U72(isNat(Y), X, Y)) active(U72(tt, X, Y)) >= mark(plus(x(Y, X), Y)) active(isNat(0)) >= mark(tt) active(isNat(plus(X, Y))) >= mark(U11(isNat(X), Y)) active(isNat(s(X))) >= mark(U21(isNat(X))) active(isNat(x(X, Y))) >= mark(U31(isNat(X), Y)) active(plus(X, 0)) >= mark(U41(isNat(X), X)) active(plus(X, s(Y))) >= mark(U51(isNat(Y), Y, X)) active(x(X, 0)) >= mark(U61(isNat(X))) active(x(X, s(Y))) >= mark(U71(isNat(Y), Y, X)) mark(U11(X, Y)) >= active(U11(mark(X), Y)) mark(tt) >= active(tt) mark(U12(X)) >= active(U12(mark(X))) mark(isNat(X)) >= active(isNat(X)) mark(U21(X)) >= active(U21(mark(X))) mark(U31(X, Y)) >= active(U31(mark(X), Y)) mark(U32(X)) >= active(U32(mark(X))) mark(U41(X, Y)) >= active(U41(mark(X), Y)) mark(U51(X, Y, Z)) >= active(U51(mark(X), Y, Z)) mark(U52(X, Y, Z)) >= active(U52(mark(X), Y, Z)) mark(s(X)) >= active(s(mark(X))) mark(plus(X, Y)) >= active(plus(mark(X), mark(Y))) mark(U61(X)) >= active(U61(mark(X))) mark(0) >= active(0) mark(U71(X, Y, Z)) >= active(U71(mark(X), Y, Z)) mark(U72(X, Y, Z)) >= active(U72(mark(X), Y, Z)) mark(x(X, Y)) >= active(x(mark(X), mark(Y))) U11(mark(X), Y) >= U11(X, Y) U11(X, mark(Y)) >= U11(X, Y) U11(active(X), Y) >= U11(X, Y) U11(X, active(Y)) >= U11(X, Y) U12(mark(X)) >= U12(X) U12(active(X)) >= U12(X) isNat(mark(X)) >= isNat(X) isNat(active(X)) >= isNat(X) U21(mark(X)) >= U21(X) U21(active(X)) >= U21(X) U31(mark(X), Y) >= U31(X, Y) U31(X, mark(Y)) >= U31(X, Y) U31(active(X), Y) >= U31(X, Y) U31(X, active(Y)) >= U31(X, Y) U32(mark(X)) >= U32(X) U32(active(X)) >= U32(X) U41(mark(X), Y) >= U41(X, Y) U41(X, mark(Y)) >= U41(X, Y) U41(active(X), Y) >= U41(X, Y) U41(X, active(Y)) >= U41(X, Y) U51(mark(X), Y, Z) >= U51(X, Y, Z) U51(X, mark(Y), Z) >= U51(X, Y, Z) U51(X, Y, mark(Z)) >= U51(X, Y, Z) U51(active(X), Y, Z) >= U51(X, Y, Z) U51(X, active(Y), Z) >= U51(X, Y, Z) U51(X, Y, active(Z)) >= U51(X, Y, Z) U52(mark(X), Y, Z) >= U52(X, Y, Z) U52(X, mark(Y), Z) >= U52(X, Y, Z) U52(X, Y, mark(Z)) >= U52(X, Y, Z) U52(active(X), Y, Z) >= U52(X, Y, Z) U52(X, active(Y), Z) >= U52(X, Y, Z) U52(X, Y, active(Z)) >= U52(X, Y, Z) s(mark(X)) >= s(X) s(active(X)) >= s(X) plus(mark(X), Y) >= plus(X, Y) plus(X, mark(Y)) >= plus(X, Y) plus(active(X), Y) >= plus(X, Y) plus(X, active(Y)) >= plus(X, Y) x(mark(X), Y) >= x(X, Y) x(X, mark(Y)) >= x(X, Y) x(active(X), Y) >= x(X, Y) x(X, active(Y)) >= x(X, Y) Since this representation is not advantageous for the higher-order recursive path ordering, we present the strict requirements in their unextended form, which is not problematic since for any F, s and substituion gamma: (F s)gamma beta-reduces to F(s)gamma.) We use a recursive path ordering as defined in [Kop12, Chapter 5]. Argument functions: [[0]] = _|_ [[U11(x_1, x_2)]] = x_1 [[U12(x_1)]] = x_1 [[U21(x_1)]] = x_1 [[U31(x_1, x_2)]] = x_1 [[U32(x_1)]] = x_1 [[active(x_1)]] = x_1 [[isNat(x_1)]] = _|_ [[mark(x_1)]] = x_1 [[tt]] = _|_ We choose Lex = {} and Mul = {U41, U51, U52, U61, U71, U72, active#, mark#, plus, s, x}, and the following precedence: U71 = U72 = x > U51 = U52 = plus > active# = mark# = s > U61 > U41 Taking the argument function into account, and fixing the greater / greater equal choices, the constraints can be denoted as follows: active#(_|_) >= mark#(_|_) active#(_|_) >= mark#(_|_) active#(U41(_|_, X)) > mark#(X) active#(U51(_|_, X, Y)) >= mark#(U52(_|_, X, Y)) active#(_|_) >= mark#(_|_) active#(_|_) >= mark#(_|_) active#(_|_) >= mark#(_|_) mark#(X) >= active#(X) mark#(X) >= mark#(X) mark#(X) >= mark#(X) mark#(_|_) >= active#(_|_) mark#(X) >= mark#(X) mark#(X) >= active#(X) mark#(X) >= mark#(X) mark#(X) >= mark#(X) mark#(U41(X, Y)) >= active#(U41(X, Y)) mark#(U41(X, Y)) >= mark#(X) mark#(U51(X, Y, Z)) >= active#(U51(X, Y, Z)) mark#(U51(X, Y, Z)) >= mark#(X) mark#(U52(X, Y, Z)) >= mark#(X) mark#(s(X)) >= mark#(X) mark#(plus(X, Y)) >= mark#(X) _|_ >= _|_ _|_ >= _|_ _|_ >= _|_ _|_ >= _|_ _|_ >= _|_ U41(_|_, X) >= X U51(_|_, X, Y) >= U52(_|_, X, Y) U52(_|_, X, Y) >= s(plus(Y, X)) U61(_|_) >= _|_ U71(_|_, X, Y) >= U72(_|_, X, Y) U72(_|_, X, Y) >= plus(x(Y, X), Y) _|_ >= _|_ _|_ >= _|_ _|_ >= _|_ _|_ >= _|_ plus(X, _|_) >= U41(_|_, X) plus(X, s(Y)) >= U51(_|_, Y, X) x(X, _|_) >= U61(_|_) x(X, s(Y)) >= U71(_|_, Y, X) X >= X _|_ >= _|_ X >= X _|_ >= _|_ X >= X X >= X X >= X U41(X, Y) >= U41(X, Y) U51(X, Y, Z) >= U51(X, Y, Z) U52(X, Y, Z) >= U52(X, Y, Z) s(X) >= s(X) plus(X, Y) >= plus(X, Y) U61(X) >= U61(X) _|_ >= _|_ U71(X, Y, Z) >= U71(X, Y, Z) U72(X, Y, Z) >= U72(X, Y, Z) x(X, Y) >= x(X, Y) X >= X X >= X X >= X X >= X X >= X X >= X _|_ >= _|_ _|_ >= _|_ X >= X X >= X X >= X X >= X X >= X X >= X X >= X X >= X U41(X, Y) >= U41(X, Y) U41(X, Y) >= U41(X, Y) U41(X, Y) >= U41(X, Y) U41(X, Y) >= U41(X, Y) U51(X, Y, Z) >= U51(X, Y, Z) U51(X, Y, Z) >= U51(X, Y, Z) U51(X, Y, Z) >= U51(X, Y, Z) U51(X, Y, Z) >= U51(X, Y, Z) U51(X, Y, Z) >= U51(X, Y, Z) U51(X, Y, Z) >= U51(X, Y, Z) U52(X, Y, Z) >= U52(X, Y, Z) U52(X, Y, Z) >= U52(X, Y, Z) U52(X, Y, Z) >= U52(X, Y, Z) U52(X, Y, Z) >= U52(X, Y, Z) U52(X, Y, Z) >= U52(X, Y, Z) U52(X, Y, Z) >= U52(X, Y, Z) s(X) >= s(X) s(X) >= s(X) plus(X, Y) >= plus(X, Y) plus(X, Y) >= plus(X, Y) plus(X, Y) >= plus(X, Y) plus(X, Y) >= plus(X, Y) x(X, Y) >= x(X, Y) x(X, Y) >= x(X, Y) x(X, Y) >= x(X, Y) x(X, Y) >= x(X, Y) With these choices, we have: 1] active#(_|_) >= mark#(_|_) because active# = mark#, active# in Mul and [2], by (Fun) 2] _|_ >= _|_ by (Bot) 3] active#(_|_) >= mark#(_|_) because active# = mark#, active# in Mul and [4], by (Fun) 4] _|_ >= _|_ by (Bot) 5] active#(U41(_|_, X)) > mark#(X) because [6], by definition 6] active#*(U41(_|_, X)) >= mark#(X) because active# = mark#, active# in Mul and [7], by (Stat) 7] U41(_|_, X) > X because [8], by definition 8] U41*(_|_, X) >= X because [9], by (Select) 9] X >= X by (Meta) 10] active#(U51(_|_, X, Y)) >= mark#(U52(_|_, X, Y)) because active# = mark#, active# in Mul and [11], by (Fun) 11] U51(_|_, X, Y) >= U52(_|_, X, Y) because U51 = U52, U51 in Mul, [12], [13] and [14], by (Fun) 12] _|_ >= _|_ by (Bot) 13] X >= X by (Meta) 14] Y >= Y by (Meta) 15] active#(_|_) >= mark#(_|_) because active# = mark#, active# in Mul and [16], by (Fun) 16] _|_ >= _|_ by (Bot) 17] active#(_|_) >= mark#(_|_) because active# = mark#, active# in Mul and [18], by (Fun) 18] _|_ >= _|_ by (Bot) 19] active#(_|_) >= mark#(_|_) because active# = mark#, active# in Mul and [20], by (Fun) 20] _|_ >= _|_ by (Bot) 21] mark#(X) >= active#(X) because mark# = active#, mark# in Mul and [22], by (Fun) 22] X >= X by (Meta) 23] mark#(X) >= mark#(X) because mark# in Mul and [22], by (Fun) 24] mark#(X) >= mark#(X) because mark# in Mul and [25], by (Fun) 25] X >= X by (Meta) 26] mark#(_|_) >= active#(_|_) because mark# = active#, mark# in Mul and [27], by (Fun) 27] _|_ >= _|_ by (Bot) 28] mark#(X) >= mark#(X) because mark# in Mul and [29], by (Fun) 29] X >= X by (Meta) 30] mark#(X) >= active#(X) because mark# = active#, mark# in Mul and [31], by (Fun) 31] X >= X by (Meta) 32] mark#(X) >= mark#(X) because mark# in Mul and [31], by (Fun) 33] mark#(X) >= mark#(X) because mark# in Mul and [34], by (Fun) 34] X >= X by (Meta) 35] mark#(U41(X, Y)) >= active#(U41(X, Y)) because mark# = active#, mark# in Mul and [36], by (Fun) 36] U41(X, Y) >= U41(X, Y) because U41 in Mul, [37] and [38], by (Fun) 37] X >= X by (Meta) 38] Y >= Y by (Meta) 39] mark#(U41(X, Y)) >= mark#(X) because [40], by (Star) 40] mark#*(U41(X, Y)) >= mark#(X) because mark# in Mul and [41], by (Stat) 41] U41(X, Y) > X because [42], by definition 42] U41*(X, Y) >= X because [37], by (Select) 43] mark#(U51(X, Y, Z)) >= active#(U51(X, Y, Z)) because mark# = active#, mark# in Mul and [44], by (Fun) 44] U51(X, Y, Z) >= U51(X, Y, Z) because U51 in Mul, [37], [38] and [45], by (Fun) 45] Z >= Z by (Meta) 46] mark#(U51(X, Y, Z)) >= mark#(X) because mark# in Mul and [47], by (Fun) 47] U51(X, Y, Z) >= X because [48], by (Star) 48] U51*(X, Y, Z) >= X because [37], by (Select) 49] mark#(U52(X, Y, Z)) >= mark#(X) because [50], by (Star) 50] mark#*(U52(X, Y, Z)) >= mark#(X) because mark# in Mul and [51], by (Stat) 51] U52(X, Y, Z) > X because [52], by definition 52] U52*(X, Y, Z) >= X because [37], by (Select) 53] mark#(s(X)) >= mark#(X) because [54], by (Star) 54] mark#*(s(X)) >= mark#(X) because [55], by (Select) 55] s(X) >= mark#(X) because s = mark#, s in Mul and [56], by (Fun) 56] X >= X by (Meta) 57] mark#(plus(X, Y)) >= mark#(X) because mark# in Mul and [58], by (Fun) 58] plus(X, Y) >= X because [59], by (Star) 59] plus*(X, Y) >= X because [37], by (Select) 60] _|_ >= _|_ by (Bot) 61] _|_ >= _|_ by (Bot) 62] _|_ >= _|_ by (Bot) 63] _|_ >= _|_ by (Bot) 64] _|_ >= _|_ by (Bot) 65] U41(_|_, X) >= X because [8], by (Star) 66] U51(_|_, X, Y) >= U52(_|_, X, Y) because U51 = U52, U51 in Mul, [12], [13] and [14], by (Fun) 67] U52(_|_, X, Y) >= s(plus(Y, X)) because [68], by (Star) 68] U52*(_|_, X, Y) >= s(plus(Y, X)) because U52 > s and [69], by (Copy) 69] U52*(_|_, X, Y) >= plus(Y, X) because U52 = plus, U52 in Mul, [13] and [14], by (Stat) 70] U61(_|_) >= _|_ by (Bot) 71] U71(_|_, X, Y) >= U72(_|_, X, Y) because U71 = U72, U71 in Mul, [12], [13] and [14], by (Fun) 72] U72(_|_, X, Y) >= plus(x(Y, X), Y) because [73], by (Star) 73] U72*(_|_, X, Y) >= plus(x(Y, X), Y) because U72 > plus, [74] and [75], by (Copy) 74] U72*(_|_, X, Y) >= x(Y, X) because U72 = x, U72 in Mul, [13] and [14], by (Stat) 75] U72*(_|_, X, Y) >= Y because [14], by (Select) 76] _|_ >= _|_ by (Bot) 77] _|_ >= _|_ by (Bot) 78] _|_ >= _|_ by (Bot) 79] _|_ >= _|_ by (Bot) 80] plus(X, _|_) >= U41(_|_, X) because [81], by (Star) 81] plus*(X, _|_) >= U41(_|_, X) because plus > U41, [82] and [83], by (Copy) 82] plus*(X, _|_) >= _|_ by (Bot) 83] plus*(X, _|_) >= X because [14], by (Select) 84] plus(X, s(Y)) >= U51(_|_, Y, X) because [85], by (Star) 85] plus*(X, s(Y)) >= U51(_|_, Y, X) because plus = U51, plus in Mul, [14], [86] and [88], by (Stat) 86] s(Y) > _|_ because [87], by definition 87] s*(Y) >= _|_ by (Bot) 88] s(Y) > Y because [89], by definition 89] s*(Y) >= Y because [13], by (Select) 90] x(X, _|_) >= U61(_|_) because [91], by (Star) 91] x*(X, _|_) >= U61(_|_) because x > U61 and [92], by (Copy) 92] x*(X, _|_) >= _|_ by (Bot) 93] x(X, s(Y)) >= U71(_|_, Y, X) because [94], by (Star) 94] x*(X, s(Y)) >= U71(_|_, Y, X) because x = U71, x in Mul, [14], [86] and [88], by (Stat) 95] X >= X by (Meta) 96] _|_ >= _|_ by (Bot) 97] X >= X by (Meta) 98] _|_ >= _|_ by (Bot) 99] X >= X by (Meta) 100] X >= X by (Meta) 101] X >= X by (Meta) 102] U41(X, Y) >= U41(X, Y) because U41 in Mul, [37] and [38], by (Fun) 103] U51(X, Y, Z) >= U51(X, Y, Z) because U51 in Mul, [37], [38] and [45], by (Fun) 104] U52(X, Y, Z) >= U52(X, Y, Z) because U52 in Mul, [37], [38] and [45], by (Fun) 105] s(X) >= s(X) because s in Mul and [106], by (Fun) 106] X >= X by (Meta) 107] plus(X, Y) >= plus(X, Y) because plus in Mul, [37] and [108], by (Fun) 108] Y >= Y by (Meta) 109] U61(X) >= U61(X) because U61 in Mul and [106], by (Fun) 110] _|_ >= _|_ by (Bot) 111] U71(X, Y, Z) >= U71(X, Y, Z) because U71 in Mul, [37], [108] and [45], by (Fun) 112] U72(X, Y, Z) >= U72(X, Y, Z) because U72 in Mul, [37], [108] and [45], by (Fun) 113] x(X, Y) >= x(X, Y) because x in Mul, [37] and [108], by (Fun) 114] X >= X by (Meta) 115] X >= X by (Meta) 116] X >= X by (Meta) 117] X >= X by (Meta) 118] X >= X by (Meta) 119] X >= X by (Meta) 120] _|_ >= _|_ by (Bot) 121] _|_ >= _|_ by (Bot) 122] X >= X by (Meta) 123] X >= X by (Meta) 124] X >= X by (Meta) 125] X >= X by (Meta) 126] X >= X by (Meta) 127] X >= X by (Meta) 128] X >= X by (Meta) 129] X >= X by (Meta) 130] U41(X, Y) >= U41(X, Y) because U41 in Mul, [131] and [108], by (Fun) 131] X >= X by (Meta) 132] U41(X, Y) >= U41(X, Y) because U41 in Mul, [37] and [133], by (Fun) 133] Y >= Y by (Meta) 134] U41(X, Y) >= U41(X, Y) because U41 in Mul, [135] and [108], by (Fun) 135] X >= X by (Meta) 136] U41(X, Y) >= U41(X, Y) because U41 in Mul, [37] and [137], by (Fun) 137] Y >= Y by (Meta) 138] U51(X, Y, Z) >= U51(X, Y, Z) because U51 in Mul, [131], [108] and [45], by (Fun) 139] U51(X, Y, Z) >= U51(X, Y, Z) because U51 in Mul, [37], [133] and [45], by (Fun) 140] U51(X, Y, Z) >= U51(X, Y, Z) because U51 in Mul, [37], [108] and [141], by (Fun) 141] Z >= Z by (Meta) 142] U51(X, Y, Z) >= U51(X, Y, Z) because U51 in Mul, [135], [108] and [45], by (Fun) 143] U51(X, Y, Z) >= U51(X, Y, Z) because U51 in Mul, [37], [137] and [45], by (Fun) 144] U51(X, Y, Z) >= U51(X, Y, Z) because U51 in Mul, [37], [108] and [145], by (Fun) 145] Z >= Z by (Meta) 146] U52(X, Y, Z) >= U52(X, Y, Z) because U52 in Mul, [131], [108] and [45], by (Fun) 147] U52(X, Y, Z) >= U52(X, Y, Z) because U52 in Mul, [37], [133] and [45], by (Fun) 148] U52(X, Y, Z) >= U52(X, Y, Z) because U52 in Mul, [37], [108] and [141], by (Fun) 149] U52(X, Y, Z) >= U52(X, Y, Z) because U52 in Mul, [135], [108] and [45], by (Fun) 150] U52(X, Y, Z) >= U52(X, Y, Z) because U52 in Mul, [37], [137] and [45], by (Fun) 151] U52(X, Y, Z) >= U52(X, Y, Z) because U52 in Mul, [37], [108] and [145], by (Fun) 152] s(X) >= s(X) because s in Mul and [153], by (Fun) 153] X >= X by (Meta) 154] s(X) >= s(X) because s in Mul and [155], by (Fun) 155] X >= X by (Meta) 156] plus(X, Y) >= plus(X, Y) because plus in Mul, [131] and [108], by (Fun) 157] plus(X, Y) >= plus(X, Y) because plus in Mul, [37] and [133], by (Fun) 158] plus(X, Y) >= plus(X, Y) because plus in Mul, [135] and [108], by (Fun) 159] plus(X, Y) >= plus(X, Y) because plus in Mul, [37] and [137], by (Fun) 160] x(X, Y) >= x(X, Y) because x in Mul, [131] and [108], by (Fun) 161] x(X, Y) >= x(X, Y) because x in Mul, [37] and [133], by (Fun) 162] x(X, Y) >= x(X, Y) because x in Mul, [135] and [108], by (Fun) 163] x(X, Y) >= x(X, Y) because x in Mul, [37] and [137], by (Fun) By the observations in [Kop12, Sec. 6.6], this reduction pair suffices; we may thus replace the dependency pair problem (P_40, R_2, minimal, formative) by (P_41, R_2, minimal, formative), where P_41 consists of: active#(U11(tt, X)) =#> mark#(U12(isNat(X))) active#(U31(tt, X)) =#> mark#(U32(isNat(X))) active#(U51(tt, X, Y)) =#> mark#(U52(isNat(Y), X, Y)) active#(isNat(plus(X, Y))) =#> mark#(U11(isNat(X), Y)) active#(isNat(s(X))) =#> mark#(U21(isNat(X))) active#(isNat(x(X, Y))) =#> mark#(U31(isNat(X), Y)) mark#(U11(X, Y)) =#> active#(U11(mark(X), Y)) mark#(U11(X, Y)) =#> mark#(X) mark#(U12(X)) =#> mark#(X) mark#(isNat(X)) =#> active#(isNat(X)) mark#(U21(X)) =#> mark#(X) mark#(U31(X, Y)) =#> active#(U31(mark(X), Y)) mark#(U31(X, Y)) =#> mark#(X) mark#(U32(X)) =#> mark#(X) mark#(U41(X, Y)) =#> active#(U41(mark(X), Y)) mark#(U41(X, Y)) =#> mark#(X) mark#(U51(X, Y, Z)) =#> active#(U51(mark(X), Y, Z)) mark#(U51(X, Y, Z)) =#> mark#(X) mark#(U52(X, Y, Z)) =#> mark#(X) mark#(s(X)) =#> mark#(X) mark#(plus(X, Y)) =#> mark#(X) Thus, the original system is terminating if (P_41, R_2, minimal, formative) is finite. We consider the dependency pair problem (P_41, R_2, minimal, formative). We place the elements of P in a dependency graph approximation G (see e.g. [Kop12, Thm. 7.27, 7.29], as follows: * 0 : 8 * 1 : 13 * 2 : 18 * 3 : 6, 7 * 4 : 10 * 5 : 11, 12 * 6 : 0 * 7 : 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 * 8 : 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 * 9 : 3, 4, 5 * 10 : 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 * 11 : 1 * 12 : 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 * 13 : 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 * 14 : * 15 : 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 * 16 : 2 * 17 : 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 * 18 : 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 * 19 : 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 * 20 : 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 This graph has the following strongly connected components: P_42: active#(U11(tt, X)) =#> mark#(U12(isNat(X))) active#(U31(tt, X)) =#> mark#(U32(isNat(X))) active#(U51(tt, X, Y)) =#> mark#(U52(isNat(Y), X, Y)) active#(isNat(plus(X, Y))) =#> mark#(U11(isNat(X), Y)) active#(isNat(s(X))) =#> mark#(U21(isNat(X))) active#(isNat(x(X, Y))) =#> mark#(U31(isNat(X), Y)) mark#(U11(X, Y)) =#> active#(U11(mark(X), Y)) mark#(U11(X, Y)) =#> mark#(X) mark#(U12(X)) =#> mark#(X) mark#(isNat(X)) =#> active#(isNat(X)) mark#(U21(X)) =#> mark#(X) mark#(U31(X, Y)) =#> active#(U31(mark(X), Y)) mark#(U31(X, Y)) =#> mark#(X) mark#(U32(X)) =#> mark#(X) mark#(U41(X, Y)) =#> mark#(X) mark#(U51(X, Y, Z)) =#> active#(U51(mark(X), Y, Z)) mark#(U51(X, Y, Z)) =#> mark#(X) mark#(U52(X, Y, Z)) =#> mark#(X) mark#(s(X)) =#> mark#(X) mark#(plus(X, Y)) =#> mark#(X) By [Kop12, Thm. 7.31], we may replace any dependency pair problem (P_41, R_2, m, f) by (P_42, R_2, m, f). Thus, the original system is terminating if (P_42, R_2, minimal, formative) is finite. We consider the dependency pair problem (P_42, R_2, minimal, formative). We will use the reduction pair processor [Kop12, Thm. 7.16]. It suffices to find a standard reduction pair [Kop12, Def. 6.69]. Thus, we must orient: active#(U11(tt, X)) >? mark#(U12(isNat(X))) active#(U31(tt, X)) >? mark#(U32(isNat(X))) active#(U51(tt, X, Y)) >? mark#(U52(isNat(Y), X, Y)) active#(isNat(plus(X, Y))) >? mark#(U11(isNat(X), Y)) active#(isNat(s(X))) >? mark#(U21(isNat(X))) active#(isNat(x(X, Y))) >? mark#(U31(isNat(X), Y)) mark#(U11(X, Y)) >? active#(U11(mark(X), Y)) mark#(U11(X, Y)) >? mark#(X) mark#(U12(X)) >? mark#(X) mark#(isNat(X)) >? active#(isNat(X)) mark#(U21(X)) >? mark#(X) mark#(U31(X, Y)) >? active#(U31(mark(X), Y)) mark#(U31(X, Y)) >? mark#(X) mark#(U32(X)) >? mark#(X) mark#(U41(X, Y)) >? mark#(X) mark#(U51(X, Y, Z)) >? active#(U51(mark(X), Y, Z)) mark#(U51(X, Y, Z)) >? mark#(X) mark#(U52(X, Y, Z)) >? mark#(X) mark#(s(X)) >? mark#(X) mark#(plus(X, Y)) >? mark#(X) active(U11(tt, X)) >= mark(U12(isNat(X))) active(U12(tt)) >= mark(tt) active(U21(tt)) >= mark(tt) active(U31(tt, X)) >= mark(U32(isNat(X))) active(U32(tt)) >= mark(tt) active(U41(tt, X)) >= mark(X) active(U51(tt, X, Y)) >= mark(U52(isNat(Y), X, Y)) active(U52(tt, X, Y)) >= mark(s(plus(Y, X))) active(U61(tt)) >= mark(0) active(U71(tt, X, Y)) >= mark(U72(isNat(Y), X, Y)) active(U72(tt, X, Y)) >= mark(plus(x(Y, X), Y)) active(isNat(0)) >= mark(tt) active(isNat(plus(X, Y))) >= mark(U11(isNat(X), Y)) active(isNat(s(X))) >= mark(U21(isNat(X))) active(isNat(x(X, Y))) >= mark(U31(isNat(X), Y)) active(plus(X, 0)) >= mark(U41(isNat(X), X)) active(plus(X, s(Y))) >= mark(U51(isNat(Y), Y, X)) active(x(X, 0)) >= mark(U61(isNat(X))) active(x(X, s(Y))) >= mark(U71(isNat(Y), Y, X)) mark(U11(X, Y)) >= active(U11(mark(X), Y)) mark(tt) >= active(tt) mark(U12(X)) >= active(U12(mark(X))) mark(isNat(X)) >= active(isNat(X)) mark(U21(X)) >= active(U21(mark(X))) mark(U31(X, Y)) >= active(U31(mark(X), Y)) mark(U32(X)) >= active(U32(mark(X))) mark(U41(X, Y)) >= active(U41(mark(X), Y)) mark(U51(X, Y, Z)) >= active(U51(mark(X), Y, Z)) mark(U52(X, Y, Z)) >= active(U52(mark(X), Y, Z)) mark(s(X)) >= active(s(mark(X))) mark(plus(X, Y)) >= active(plus(mark(X), mark(Y))) mark(U61(X)) >= active(U61(mark(X))) mark(0) >= active(0) mark(U71(X, Y, Z)) >= active(U71(mark(X), Y, Z)) mark(U72(X, Y, Z)) >= active(U72(mark(X), Y, Z)) mark(x(X, Y)) >= active(x(mark(X), mark(Y))) U11(mark(X), Y) >= U11(X, Y) U11(X, mark(Y)) >= U11(X, Y) U11(active(X), Y) >= U11(X, Y) U11(X, active(Y)) >= U11(X, Y) U12(mark(X)) >= U12(X) U12(active(X)) >= U12(X) isNat(mark(X)) >= isNat(X) isNat(active(X)) >= isNat(X) U21(mark(X)) >= U21(X) U21(active(X)) >= U21(X) U31(mark(X), Y) >= U31(X, Y) U31(X, mark(Y)) >= U31(X, Y) U31(active(X), Y) >= U31(X, Y) U31(X, active(Y)) >= U31(X, Y) U32(mark(X)) >= U32(X) U32(active(X)) >= U32(X) U41(mark(X), Y) >= U41(X, Y) U41(X, mark(Y)) >= U41(X, Y) U41(active(X), Y) >= U41(X, Y) U41(X, active(Y)) >= U41(X, Y) U51(mark(X), Y, Z) >= U51(X, Y, Z) U51(X, mark(Y), Z) >= U51(X, Y, Z) U51(X, Y, mark(Z)) >= U51(X, Y, Z) U51(active(X), Y, Z) >= U51(X, Y, Z) U51(X, active(Y), Z) >= U51(X, Y, Z) U51(X, Y, active(Z)) >= U51(X, Y, Z) U52(mark(X), Y, Z) >= U52(X, Y, Z) U52(X, mark(Y), Z) >= U52(X, Y, Z) U52(X, Y, mark(Z)) >= U52(X, Y, Z) U52(active(X), Y, Z) >= U52(X, Y, Z) U52(X, active(Y), Z) >= U52(X, Y, Z) U52(X, Y, active(Z)) >= U52(X, Y, Z) s(mark(X)) >= s(X) s(active(X)) >= s(X) plus(mark(X), Y) >= plus(X, Y) plus(X, mark(Y)) >= plus(X, Y) plus(active(X), Y) >= plus(X, Y) plus(X, active(Y)) >= plus(X, Y) x(mark(X), Y) >= x(X, Y) x(X, mark(Y)) >= x(X, Y) x(active(X), Y) >= x(X, Y) x(X, active(Y)) >= x(X, Y) We orient these requirements with a polynomial interpretation in the natural numbers. We consider usable_rules with respect to the following argument filtering: active#(x_1) = active#() This leaves the following ordering requirements: active#(U11(tt, X)) >= mark#(U12(isNat(X))) active#(U31(tt, X)) >= mark#(U32(isNat(X))) active#(U51(tt, X, Y)) >= mark#(U52(isNat(Y), X, Y)) active#(isNat(plus(X, Y))) >= mark#(U11(isNat(X), Y)) active#(isNat(s(X))) >= mark#(U21(isNat(X))) active#(isNat(x(X, Y))) >= mark#(U31(isNat(X), Y)) mark#(U11(X, Y)) >= active#(U11(mark(X), Y)) mark#(U11(X, Y)) >= mark#(X) mark#(U12(X)) >= mark#(X) mark#(isNat(X)) >= active#(isNat(X)) mark#(U21(X)) >= mark#(X) mark#(U31(X, Y)) >= active#(U31(mark(X), Y)) mark#(U31(X, Y)) >= mark#(X) mark#(U32(X)) >= mark#(X) mark#(U41(X, Y)) > mark#(X) mark#(U51(X, Y, Z)) >= active#(U51(mark(X), Y, Z)) mark#(U51(X, Y, Z)) >= mark#(X) mark#(U52(X, Y, Z)) >= mark#(X) mark#(s(X)) >= mark#(X) mark#(plus(X, Y)) >= mark#(X) U11(mark(X), Y) >= U11(X, Y) U11(X, mark(Y)) >= U11(X, Y) U11(active(X), Y) >= U11(X, Y) U11(X, active(Y)) >= U11(X, Y) U12(mark(X)) >= U12(X) U12(active(X)) >= U12(X) isNat(mark(X)) >= isNat(X) isNat(active(X)) >= isNat(X) U21(mark(X)) >= U21(X) U21(active(X)) >= U21(X) U31(mark(X), Y) >= U31(X, Y) U31(X, mark(Y)) >= U31(X, Y) U31(active(X), Y) >= U31(X, Y) U31(X, active(Y)) >= U31(X, Y) U32(mark(X)) >= U32(X) U32(active(X)) >= U32(X) U52(mark(X), Y, Z) >= U52(X, Y, Z) U52(X, mark(Y), Z) >= U52(X, Y, Z) U52(X, Y, mark(Z)) >= U52(X, Y, Z) U52(active(X), Y, Z) >= U52(X, Y, Z) U52(X, active(Y), Z) >= U52(X, Y, Z) U52(X, Y, active(Z)) >= U52(X, Y, Z) The following interpretation satisfies the requirements: 0 = 0 U11 = \y0y1.y0 U12 = \y0.y0 U21 = \y0.y0 U31 = \y0y1.y0 U32 = \y0.2y0 U41 = \y0y1.1 + 2y0 U51 = \y0y1y2.y0 U52 = \y0y1y2.2y0 U61 = \y0.0 U71 = \y0y1y2.0 U72 = \y0y1y2.0 active = \y0.2y0 active# = \y0.0 isNat = \y0.0 mark = \y0.y0 mark# = \y0.y0 plus = \y0y1.y0 s = \y0.2y0 tt = 0 x = \y0y1.0 Using this interpretation, the requirements translate to: [[active#(U11(tt, _x0))]] = 0 >= 0 = [[mark#(U12(isNat(_x0)))]] [[active#(U31(tt, _x0))]] = 0 >= 0 = [[mark#(U32(isNat(_x0)))]] [[active#(U51(tt, _x0, _x1))]] = 0 >= 0 = [[mark#(U52(isNat(_x1), _x0, _x1))]] [[active#(isNat(plus(_x0, _x1)))]] = 0 >= 0 = [[mark#(U11(isNat(_x0), _x1))]] [[active#(isNat(s(_x0)))]] = 0 >= 0 = [[mark#(U21(isNat(_x0)))]] [[active#(isNat(x(_x0, _x1)))]] = 0 >= 0 = [[mark#(U31(isNat(_x0), _x1))]] [[mark#(U11(_x0, _x1))]] = x0 >= 0 = [[active#(U11(mark(_x0), _x1))]] [[mark#(U11(_x0, _x1))]] = x0 >= x0 = [[mark#(_x0)]] [[mark#(U12(_x0))]] = x0 >= x0 = [[mark#(_x0)]] [[mark#(isNat(_x0))]] = 0 >= 0 = [[active#(isNat(_x0))]] [[mark#(U21(_x0))]] = x0 >= x0 = [[mark#(_x0)]] [[mark#(U31(_x0, _x1))]] = x0 >= 0 = [[active#(U31(mark(_x0), _x1))]] [[mark#(U31(_x0, _x1))]] = x0 >= x0 = [[mark#(_x0)]] [[mark#(U32(_x0))]] = 2x0 >= x0 = [[mark#(_x0)]] [[mark#(U41(_x0, _x1))]] = 1 + 2x0 > x0 = [[mark#(_x0)]] [[mark#(U51(_x0, _x1, _x2))]] = x0 >= 0 = [[active#(U51(mark(_x0), _x1, _x2))]] [[mark#(U51(_x0, _x1, _x2))]] = x0 >= x0 = [[mark#(_x0)]] [[mark#(U52(_x0, _x1, _x2))]] = 2x0 >= x0 = [[mark#(_x0)]] [[mark#(s(_x0))]] = 2x0 >= x0 = [[mark#(_x0)]] [[mark#(plus(_x0, _x1))]] = x0 >= x0 = [[mark#(_x0)]] [[U11(mark(_x0), _x1)]] = x0 >= x0 = [[U11(_x0, _x1)]] [[U11(_x0, mark(_x1))]] = x0 >= x0 = [[U11(_x0, _x1)]] [[U11(active(_x0), _x1)]] = 2x0 >= x0 = [[U11(_x0, _x1)]] [[U11(_x0, active(_x1))]] = x0 >= x0 = [[U11(_x0, _x1)]] [[U12(mark(_x0))]] = x0 >= x0 = [[U12(_x0)]] [[U12(active(_x0))]] = 2x0 >= x0 = [[U12(_x0)]] [[isNat(mark(_x0))]] = 0 >= 0 = [[isNat(_x0)]] [[isNat(active(_x0))]] = 0 >= 0 = [[isNat(_x0)]] [[U21(mark(_x0))]] = x0 >= x0 = [[U21(_x0)]] [[U21(active(_x0))]] = 2x0 >= x0 = [[U21(_x0)]] [[U31(mark(_x0), _x1)]] = x0 >= x0 = [[U31(_x0, _x1)]] [[U31(_x0, mark(_x1))]] = x0 >= x0 = [[U31(_x0, _x1)]] [[U31(active(_x0), _x1)]] = 2x0 >= x0 = [[U31(_x0, _x1)]] [[U31(_x0, active(_x1))]] = x0 >= x0 = [[U31(_x0, _x1)]] [[U32(mark(_x0))]] = 2x0 >= 2x0 = [[U32(_x0)]] [[U32(active(_x0))]] = 4x0 >= 2x0 = [[U32(_x0)]] [[U52(mark(_x0), _x1, _x2)]] = 2x0 >= 2x0 = [[U52(_x0, _x1, _x2)]] [[U52(_x0, mark(_x1), _x2)]] = 2x0 >= 2x0 = [[U52(_x0, _x1, _x2)]] [[U52(_x0, _x1, mark(_x2))]] = 2x0 >= 2x0 = [[U52(_x0, _x1, _x2)]] [[U52(active(_x0), _x1, _x2)]] = 4x0 >= 2x0 = [[U52(_x0, _x1, _x2)]] [[U52(_x0, active(_x1), _x2)]] = 2x0 >= 2x0 = [[U52(_x0, _x1, _x2)]] [[U52(_x0, _x1, active(_x2))]] = 2x0 >= 2x0 = [[U52(_x0, _x1, _x2)]] By the observations in [Kop12, Sec. 6.6], this reduction pair suffices; we may thus replace the dependency pair problem (P_42, R_2, minimal, formative) by (P_43, R_2, minimal, formative), where P_43 consists of: active#(U11(tt, X)) =#> mark#(U12(isNat(X))) active#(U31(tt, X)) =#> mark#(U32(isNat(X))) active#(U51(tt, X, Y)) =#> mark#(U52(isNat(Y), X, Y)) active#(isNat(plus(X, Y))) =#> mark#(U11(isNat(X), Y)) active#(isNat(s(X))) =#> mark#(U21(isNat(X))) active#(isNat(x(X, Y))) =#> mark#(U31(isNat(X), Y)) mark#(U11(X, Y)) =#> active#(U11(mark(X), Y)) mark#(U11(X, Y)) =#> mark#(X) mark#(U12(X)) =#> mark#(X) mark#(isNat(X)) =#> active#(isNat(X)) mark#(U21(X)) =#> mark#(X) mark#(U31(X, Y)) =#> active#(U31(mark(X), Y)) mark#(U31(X, Y)) =#> mark#(X) mark#(U32(X)) =#> mark#(X) mark#(U51(X, Y, Z)) =#> active#(U51(mark(X), Y, Z)) mark#(U51(X, Y, Z)) =#> mark#(X) mark#(U52(X, Y, Z)) =#> mark#(X) mark#(s(X)) =#> mark#(X) mark#(plus(X, Y)) =#> mark#(X) Thus, the original system is terminating if (P_43, R_2, minimal, formative) is finite. We consider the dependency pair problem (P_43, R_2, minimal, formative). The formative rules of (P_43, R_2) are R_3 ::= active(U11(tt, X)) => mark(U12(isNat(X))) active(U12(tt)) => mark(tt) active(U21(tt)) => mark(tt) active(U31(tt, X)) => mark(U32(isNat(X))) active(U32(tt)) => mark(tt) active(U41(tt, X)) => mark(X) active(U51(tt, X, Y)) => mark(U52(isNat(Y), X, Y)) active(U52(tt, X, Y)) => mark(s(plus(Y, X))) active(U61(tt)) => mark(0) active(U71(tt, X, Y)) => mark(U72(isNat(Y), X, Y)) active(U72(tt, X, Y)) => mark(plus(x(Y, X), Y)) active(isNat(0)) => mark(tt) active(isNat(plus(X, Y))) => mark(U11(isNat(X), Y)) active(isNat(s(X))) => mark(U21(isNat(X))) active(isNat(x(X, Y))) => mark(U31(isNat(X), Y)) active(plus(X, 0)) => mark(U41(isNat(X), X)) active(plus(X, s(Y))) => mark(U51(isNat(Y), Y, X)) active(x(X, 0)) => mark(U61(isNat(X))) active(x(X, s(Y))) => mark(U71(isNat(Y), Y, X)) mark(U11(X, Y)) => active(U11(mark(X), Y)) mark(tt) => active(tt) mark(U12(X)) => active(U12(mark(X))) mark(isNat(X)) => active(isNat(X)) mark(U21(X)) => active(U21(mark(X))) mark(U31(X, Y)) => active(U31(mark(X), Y)) mark(U32(X)) => active(U32(mark(X))) mark(U41(X, Y)) => active(U41(mark(X), Y)) mark(U51(X, Y, Z)) => active(U51(mark(X), Y, Z)) mark(U52(X, Y, Z)) => active(U52(mark(X), Y, Z)) mark(s(X)) => active(s(mark(X))) mark(plus(X, Y)) => active(plus(mark(X), mark(Y))) mark(U61(X)) => active(U61(mark(X))) mark(0) => active(0) mark(U71(X, Y, Z)) => active(U71(mark(X), Y, Z)) mark(U72(X, Y, Z)) => active(U72(mark(X), Y, Z)) mark(x(X, Y)) => active(x(mark(X), mark(Y))) U11(mark(X), Y) => U11(X, Y) U11(X, mark(Y)) => U11(X, Y) U11(active(X), Y) => U11(X, Y) U11(X, active(Y)) => U11(X, Y) U12(mark(X)) => U12(X) U12(active(X)) => U12(X) isNat(mark(X)) => isNat(X) isNat(active(X)) => isNat(X) U21(mark(X)) => U21(X) U21(active(X)) => U21(X) U31(mark(X), Y) => U31(X, Y) U31(X, mark(Y)) => U31(X, Y) U31(active(X), Y) => U31(X, Y) U31(X, active(Y)) => U31(X, Y) U32(mark(X)) => U32(X) U32(active(X)) => U32(X) U51(mark(X), Y, Z) => U51(X, Y, Z) U51(X, mark(Y), Z) => U51(X, Y, Z) U51(X, Y, mark(Z)) => U51(X, Y, Z) U51(active(X), Y, Z) => U51(X, Y, Z) U51(X, active(Y), Z) => U51(X, Y, Z) U51(X, Y, active(Z)) => U51(X, Y, Z) U52(mark(X), Y, Z) => U52(X, Y, Z) U52(X, mark(Y), Z) => U52(X, Y, Z) U52(X, Y, mark(Z)) => U52(X, Y, Z) U52(active(X), Y, Z) => U52(X, Y, Z) U52(X, active(Y), Z) => U52(X, Y, Z) U52(X, Y, active(Z)) => U52(X, Y, Z) s(mark(X)) => s(X) s(active(X)) => s(X) plus(mark(X), Y) => plus(X, Y) plus(X, mark(Y)) => plus(X, Y) plus(active(X), Y) => plus(X, Y) plus(X, active(Y)) => plus(X, Y) x(mark(X), Y) => x(X, Y) x(X, mark(Y)) => x(X, Y) x(active(X), Y) => x(X, Y) x(X, active(Y)) => x(X, Y) By [Kop12, Thm. 7.17], we may replace the dependency pair problem (P_43, R_2, minimal, formative) by (P_43, R_3, minimal, formative). Thus, the original system is terminating if (P_43, R_3, minimal, formative) is finite. We consider the dependency pair problem (P_43, R_3, minimal, formative). We will use the reduction pair processor [Kop12, Thm. 7.16]. It suffices to find a standard reduction pair [Kop12, Def. 6.69]. Thus, we must orient: active#(U11(tt, X)) >? mark#(U12(isNat(X))) active#(U31(tt, X)) >? mark#(U32(isNat(X))) active#(U51(tt, X, Y)) >? mark#(U52(isNat(Y), X, Y)) active#(isNat(plus(X, Y))) >? mark#(U11(isNat(X), Y)) active#(isNat(s(X))) >? mark#(U21(isNat(X))) active#(isNat(x(X, Y))) >? mark#(U31(isNat(X), Y)) mark#(U11(X, Y)) >? active#(U11(mark(X), Y)) mark#(U11(X, Y)) >? mark#(X) mark#(U12(X)) >? mark#(X) mark#(isNat(X)) >? active#(isNat(X)) mark#(U21(X)) >? mark#(X) mark#(U31(X, Y)) >? active#(U31(mark(X), Y)) mark#(U31(X, Y)) >? mark#(X) mark#(U32(X)) >? mark#(X) mark#(U51(X, Y, Z)) >? active#(U51(mark(X), Y, Z)) mark#(U51(X, Y, Z)) >? mark#(X) mark#(U52(X, Y, Z)) >? mark#(X) mark#(s(X)) >? mark#(X) mark#(plus(X, Y)) >? mark#(X) active(U11(tt, X)) >= mark(U12(isNat(X))) active(U12(tt)) >= mark(tt) active(U21(tt)) >= mark(tt) active(U31(tt, X)) >= mark(U32(isNat(X))) active(U32(tt)) >= mark(tt) active(U41(tt, X)) >= mark(X) active(U51(tt, X, Y)) >= mark(U52(isNat(Y), X, Y)) active(U52(tt, X, Y)) >= mark(s(plus(Y, X))) active(U61(tt)) >= mark(0) active(U71(tt, X, Y)) >= mark(U72(isNat(Y), X, Y)) active(U72(tt, X, Y)) >= mark(plus(x(Y, X), Y)) active(isNat(0)) >= mark(tt) active(isNat(plus(X, Y))) >= mark(U11(isNat(X), Y)) active(isNat(s(X))) >= mark(U21(isNat(X))) active(isNat(x(X, Y))) >= mark(U31(isNat(X), Y)) active(plus(X, 0)) >= mark(U41(isNat(X), X)) active(plus(X, s(Y))) >= mark(U51(isNat(Y), Y, X)) active(x(X, 0)) >= mark(U61(isNat(X))) active(x(X, s(Y))) >= mark(U71(isNat(Y), Y, X)) mark(U11(X, Y)) >= active(U11(mark(X), Y)) mark(tt) >= active(tt) mark(U12(X)) >= active(U12(mark(X))) mark(isNat(X)) >= active(isNat(X)) mark(U21(X)) >= active(U21(mark(X))) mark(U31(X, Y)) >= active(U31(mark(X), Y)) mark(U32(X)) >= active(U32(mark(X))) mark(U41(X, Y)) >= active(U41(mark(X), Y)) mark(U51(X, Y, Z)) >= active(U51(mark(X), Y, Z)) mark(U52(X, Y, Z)) >= active(U52(mark(X), Y, Z)) mark(s(X)) >= active(s(mark(X))) mark(plus(X, Y)) >= active(plus(mark(X), mark(Y))) mark(U61(X)) >= active(U61(mark(X))) mark(0) >= active(0) mark(U71(X, Y, Z)) >= active(U71(mark(X), Y, Z)) mark(U72(X, Y, Z)) >= active(U72(mark(X), Y, Z)) mark(x(X, Y)) >= active(x(mark(X), mark(Y))) U11(mark(X), Y) >= U11(X, Y) U11(X, mark(Y)) >= U11(X, Y) U11(active(X), Y) >= U11(X, Y) U11(X, active(Y)) >= U11(X, Y) U12(mark(X)) >= U12(X) U12(active(X)) >= U12(X) isNat(mark(X)) >= isNat(X) isNat(active(X)) >= isNat(X) U21(mark(X)) >= U21(X) U21(active(X)) >= U21(X) U31(mark(X), Y) >= U31(X, Y) U31(X, mark(Y)) >= U31(X, Y) U31(active(X), Y) >= U31(X, Y) U31(X, active(Y)) >= U31(X, Y) U32(mark(X)) >= U32(X) U32(active(X)) >= U32(X) U51(mark(X), Y, Z) >= U51(X, Y, Z) U51(X, mark(Y), Z) >= U51(X, Y, Z) U51(X, Y, mark(Z)) >= U51(X, Y, Z) U51(active(X), Y, Z) >= U51(X, Y, Z) U51(X, active(Y), Z) >= U51(X, Y, Z) U51(X, Y, active(Z)) >= U51(X, Y, Z) U52(mark(X), Y, Z) >= U52(X, Y, Z) U52(X, mark(Y), Z) >= U52(X, Y, Z) U52(X, Y, mark(Z)) >= U52(X, Y, Z) U52(active(X), Y, Z) >= U52(X, Y, Z) U52(X, active(Y), Z) >= U52(X, Y, Z) U52(X, Y, active(Z)) >= U52(X, Y, Z) s(mark(X)) >= s(X) s(active(X)) >= s(X) plus(mark(X), Y) >= plus(X, Y) plus(X, mark(Y)) >= plus(X, Y) plus(active(X), Y) >= plus(X, Y) plus(X, active(Y)) >= plus(X, Y) x(mark(X), Y) >= x(X, Y) x(X, mark(Y)) >= x(X, Y) x(active(X), Y) >= x(X, Y) x(X, active(Y)) >= x(X, Y) We orient these requirements with a polynomial interpretation in the natural numbers. We consider usable_rules with respect to the following argument filtering: active#(x_1) = active#() This leaves the following ordering requirements: active#(U11(tt, X)) >= mark#(U12(isNat(X))) active#(U31(tt, X)) >= mark#(U32(isNat(X))) active#(U51(tt, X, Y)) >= mark#(U52(isNat(Y), X, Y)) active#(isNat(plus(X, Y))) >= mark#(U11(isNat(X), Y)) active#(isNat(s(X))) >= mark#(U21(isNat(X))) active#(isNat(x(X, Y))) >= mark#(U31(isNat(X), Y)) mark#(U11(X, Y)) >= active#(U11(mark(X), Y)) mark#(U11(X, Y)) >= mark#(X) mark#(U12(X)) >= mark#(X) mark#(isNat(X)) >= active#(isNat(X)) mark#(U21(X)) >= mark#(X) mark#(U31(X, Y)) >= active#(U31(mark(X), Y)) mark#(U31(X, Y)) >= mark#(X) mark#(U32(X)) >= mark#(X) mark#(U51(X, Y, Z)) > active#(U51(mark(X), Y, Z)) mark#(U51(X, Y, Z)) >= mark#(X) mark#(U52(X, Y, Z)) >= mark#(X) mark#(s(X)) >= mark#(X) mark#(plus(X, Y)) >= mark#(X) U11(mark(X), Y) >= U11(X, Y) U11(X, mark(Y)) >= U11(X, Y) U11(active(X), Y) >= U11(X, Y) U11(X, active(Y)) >= U11(X, Y) U12(mark(X)) >= U12(X) U12(active(X)) >= U12(X) isNat(mark(X)) >= isNat(X) isNat(active(X)) >= isNat(X) U21(mark(X)) >= U21(X) U21(active(X)) >= U21(X) U31(mark(X), Y) >= U31(X, Y) U31(X, mark(Y)) >= U31(X, Y) U31(active(X), Y) >= U31(X, Y) U31(X, active(Y)) >= U31(X, Y) U32(mark(X)) >= U32(X) U32(active(X)) >= U32(X) U52(mark(X), Y, Z) >= U52(X, Y, Z) U52(X, mark(Y), Z) >= U52(X, Y, Z) U52(X, Y, mark(Z)) >= U52(X, Y, Z) U52(active(X), Y, Z) >= U52(X, Y, Z) U52(X, active(Y), Z) >= U52(X, Y, Z) U52(X, Y, active(Z)) >= U52(X, Y, Z) The following interpretation satisfies the requirements: 0 = 0 U11 = \y0y1.2y0 U12 = \y0.2y0 U21 = \y0.y0 U31 = \y0y1.2y0 U32 = \y0.y0 U41 = \y0y1.0 U51 = \y0y1y2.1 + y0 U52 = \y0y1y2.2y0 U61 = \y0.0 U71 = \y0y1y2.0 U72 = \y0y1y2.0 active = \y0.1 + y0 active# = \y0.0 isNat = \y0.0 mark = \y0.2y0 mark# = \y0.2y0 plus = \y0y1.2y0 s = \y0.y0 tt = 0 x = \y0y1.0 Using this interpretation, the requirements translate to: [[active#(U11(tt, _x0))]] = 0 >= 0 = [[mark#(U12(isNat(_x0)))]] [[active#(U31(tt, _x0))]] = 0 >= 0 = [[mark#(U32(isNat(_x0)))]] [[active#(U51(tt, _x0, _x1))]] = 0 >= 0 = [[mark#(U52(isNat(_x1), _x0, _x1))]] [[active#(isNat(plus(_x0, _x1)))]] = 0 >= 0 = [[mark#(U11(isNat(_x0), _x1))]] [[active#(isNat(s(_x0)))]] = 0 >= 0 = [[mark#(U21(isNat(_x0)))]] [[active#(isNat(x(_x0, _x1)))]] = 0 >= 0 = [[mark#(U31(isNat(_x0), _x1))]] [[mark#(U11(_x0, _x1))]] = 4x0 >= 0 = [[active#(U11(mark(_x0), _x1))]] [[mark#(U11(_x0, _x1))]] = 4x0 >= 2x0 = [[mark#(_x0)]] [[mark#(U12(_x0))]] = 4x0 >= 2x0 = [[mark#(_x0)]] [[mark#(isNat(_x0))]] = 0 >= 0 = [[active#(isNat(_x0))]] [[mark#(U21(_x0))]] = 2x0 >= 2x0 = [[mark#(_x0)]] [[mark#(U31(_x0, _x1))]] = 4x0 >= 0 = [[active#(U31(mark(_x0), _x1))]] [[mark#(U31(_x0, _x1))]] = 4x0 >= 2x0 = [[mark#(_x0)]] [[mark#(U32(_x0))]] = 2x0 >= 2x0 = [[mark#(_x0)]] [[mark#(U51(_x0, _x1, _x2))]] = 2 + 2x0 > 0 = [[active#(U51(mark(_x0), _x1, _x2))]] [[mark#(U51(_x0, _x1, _x2))]] = 2 + 2x0 > 2x0 = [[mark#(_x0)]] [[mark#(U52(_x0, _x1, _x2))]] = 4x0 >= 2x0 = [[mark#(_x0)]] [[mark#(s(_x0))]] = 2x0 >= 2x0 = [[mark#(_x0)]] [[mark#(plus(_x0, _x1))]] = 4x0 >= 2x0 = [[mark#(_x0)]] [[U11(mark(_x0), _x1)]] = 4x0 >= 2x0 = [[U11(_x0, _x1)]] [[U11(_x0, mark(_x1))]] = 2x0 >= 2x0 = [[U11(_x0, _x1)]] [[U11(active(_x0), _x1)]] = 2 + 2x0 >= 2x0 = [[U11(_x0, _x1)]] [[U11(_x0, active(_x1))]] = 2x0 >= 2x0 = [[U11(_x0, _x1)]] [[U12(mark(_x0))]] = 4x0 >= 2x0 = [[U12(_x0)]] [[U12(active(_x0))]] = 2 + 2x0 >= 2x0 = [[U12(_x0)]] [[isNat(mark(_x0))]] = 0 >= 0 = [[isNat(_x0)]] [[isNat(active(_x0))]] = 0 >= 0 = [[isNat(_x0)]] [[U21(mark(_x0))]] = 2x0 >= x0 = [[U21(_x0)]] [[U21(active(_x0))]] = 1 + x0 >= x0 = [[U21(_x0)]] [[U31(mark(_x0), _x1)]] = 4x0 >= 2x0 = [[U31(_x0, _x1)]] [[U31(_x0, mark(_x1))]] = 2x0 >= 2x0 = [[U31(_x0, _x1)]] [[U31(active(_x0), _x1)]] = 2 + 2x0 >= 2x0 = [[U31(_x0, _x1)]] [[U31(_x0, active(_x1))]] = 2x0 >= 2x0 = [[U31(_x0, _x1)]] [[U32(mark(_x0))]] = 2x0 >= x0 = [[U32(_x0)]] [[U32(active(_x0))]] = 1 + x0 >= x0 = [[U32(_x0)]] [[U52(mark(_x0), _x1, _x2)]] = 4x0 >= 2x0 = [[U52(_x0, _x1, _x2)]] [[U52(_x0, mark(_x1), _x2)]] = 2x0 >= 2x0 = [[U52(_x0, _x1, _x2)]] [[U52(_x0, _x1, mark(_x2))]] = 2x0 >= 2x0 = [[U52(_x0, _x1, _x2)]] [[U52(active(_x0), _x1, _x2)]] = 2 + 2x0 >= 2x0 = [[U52(_x0, _x1, _x2)]] [[U52(_x0, active(_x1), _x2)]] = 2x0 >= 2x0 = [[U52(_x0, _x1, _x2)]] [[U52(_x0, _x1, active(_x2))]] = 2x0 >= 2x0 = [[U52(_x0, _x1, _x2)]] By the observations in [Kop12, Sec. 6.6], this reduction pair suffices; we may thus replace the dependency pair problem (P_43, R_3, minimal, formative) by (P_44, R_3, minimal, formative), where P_44 consists of: active#(U11(tt, X)) =#> mark#(U12(isNat(X))) active#(U31(tt, X)) =#> mark#(U32(isNat(X))) active#(U51(tt, X, Y)) =#> mark#(U52(isNat(Y), X, Y)) active#(isNat(plus(X, Y))) =#> mark#(U11(isNat(X), Y)) active#(isNat(s(X))) =#> mark#(U21(isNat(X))) active#(isNat(x(X, Y))) =#> mark#(U31(isNat(X), Y)) mark#(U11(X, Y)) =#> active#(U11(mark(X), Y)) mark#(U11(X, Y)) =#> mark#(X) mark#(U12(X)) =#> mark#(X) mark#(isNat(X)) =#> active#(isNat(X)) mark#(U21(X)) =#> mark#(X) mark#(U31(X, Y)) =#> active#(U31(mark(X), Y)) mark#(U31(X, Y)) =#> mark#(X) mark#(U32(X)) =#> mark#(X) mark#(U52(X, Y, Z)) =#> mark#(X) mark#(s(X)) =#> mark#(X) mark#(plus(X, Y)) =#> mark#(X) Thus, the original system is terminating if (P_44, R_3, minimal, formative) is finite. We consider the dependency pair problem (P_44, R_3, minimal, formative). We place the elements of P in a dependency graph approximation G (see e.g. [Kop12, Thm. 7.27, 7.29], as follows: * 0 : 8 * 1 : 13 * 2 : 14 * 3 : 6, 7 * 4 : 10 * 5 : 11, 12 * 6 : 0 * 7 : 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 * 8 : 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 * 9 : 3, 4, 5 * 10 : 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 * 11 : 1 * 12 : 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 * 13 : 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 * 14 : 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 * 15 : 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 * 16 : 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 This graph has the following strongly connected components: P_45: active#(U11(tt, X)) =#> mark#(U12(isNat(X))) active#(U31(tt, X)) =#> mark#(U32(isNat(X))) active#(isNat(plus(X, Y))) =#> mark#(U11(isNat(X), Y)) active#(isNat(s(X))) =#> mark#(U21(isNat(X))) active#(isNat(x(X, Y))) =#> mark#(U31(isNat(X), Y)) mark#(U11(X, Y)) =#> active#(U11(mark(X), Y)) mark#(U11(X, Y)) =#> mark#(X) mark#(U12(X)) =#> mark#(X) mark#(isNat(X)) =#> active#(isNat(X)) mark#(U21(X)) =#> mark#(X) mark#(U31(X, Y)) =#> active#(U31(mark(X), Y)) mark#(U31(X, Y)) =#> mark#(X) mark#(U32(X)) =#> mark#(X) mark#(U52(X, Y, Z)) =#> mark#(X) mark#(s(X)) =#> mark#(X) mark#(plus(X, Y)) =#> mark#(X) By [Kop12, Thm. 7.31], we may replace any dependency pair problem (P_44, R_3, m, f) by (P_45, R_3, m, f). Thus, the original system is terminating if (P_45, R_3, minimal, formative) is finite. We consider the dependency pair problem (P_45, R_3, minimal, formative). The formative rules of (P_45, R_3) are R_4 ::= active(U11(tt, X)) => mark(U12(isNat(X))) active(U12(tt)) => mark(tt) active(U21(tt)) => mark(tt) active(U31(tt, X)) => mark(U32(isNat(X))) active(U32(tt)) => mark(tt) active(U41(tt, X)) => mark(X) active(U51(tt, X, Y)) => mark(U52(isNat(Y), X, Y)) active(U52(tt, X, Y)) => mark(s(plus(Y, X))) active(U61(tt)) => mark(0) active(U71(tt, X, Y)) => mark(U72(isNat(Y), X, Y)) active(U72(tt, X, Y)) => mark(plus(x(Y, X), Y)) active(isNat(0)) => mark(tt) active(isNat(plus(X, Y))) => mark(U11(isNat(X), Y)) active(isNat(s(X))) => mark(U21(isNat(X))) active(isNat(x(X, Y))) => mark(U31(isNat(X), Y)) active(plus(X, 0)) => mark(U41(isNat(X), X)) active(plus(X, s(Y))) => mark(U51(isNat(Y), Y, X)) active(x(X, 0)) => mark(U61(isNat(X))) active(x(X, s(Y))) => mark(U71(isNat(Y), Y, X)) mark(U11(X, Y)) => active(U11(mark(X), Y)) mark(tt) => active(tt) mark(U12(X)) => active(U12(mark(X))) mark(isNat(X)) => active(isNat(X)) mark(U21(X)) => active(U21(mark(X))) mark(U31(X, Y)) => active(U31(mark(X), Y)) mark(U32(X)) => active(U32(mark(X))) mark(U41(X, Y)) => active(U41(mark(X), Y)) mark(U51(X, Y, Z)) => active(U51(mark(X), Y, Z)) mark(U52(X, Y, Z)) => active(U52(mark(X), Y, Z)) mark(s(X)) => active(s(mark(X))) mark(plus(X, Y)) => active(plus(mark(X), mark(Y))) mark(U61(X)) => active(U61(mark(X))) mark(0) => active(0) mark(U71(X, Y, Z)) => active(U71(mark(X), Y, Z)) mark(U72(X, Y, Z)) => active(U72(mark(X), Y, Z)) mark(x(X, Y)) => active(x(mark(X), mark(Y))) U11(mark(X), Y) => U11(X, Y) U11(X, mark(Y)) => U11(X, Y) U11(active(X), Y) => U11(X, Y) U11(X, active(Y)) => U11(X, Y) U12(mark(X)) => U12(X) U12(active(X)) => U12(X) isNat(mark(X)) => isNat(X) isNat(active(X)) => isNat(X) U21(mark(X)) => U21(X) U21(active(X)) => U21(X) U31(mark(X), Y) => U31(X, Y) U31(X, mark(Y)) => U31(X, Y) U31(active(X), Y) => U31(X, Y) U31(X, active(Y)) => U31(X, Y) U32(mark(X)) => U32(X) U32(active(X)) => U32(X) U52(mark(X), Y, Z) => U52(X, Y, Z) U52(X, mark(Y), Z) => U52(X, Y, Z) U52(X, Y, mark(Z)) => U52(X, Y, Z) U52(active(X), Y, Z) => U52(X, Y, Z) U52(X, active(Y), Z) => U52(X, Y, Z) U52(X, Y, active(Z)) => U52(X, Y, Z) s(mark(X)) => s(X) s(active(X)) => s(X) plus(mark(X), Y) => plus(X, Y) plus(X, mark(Y)) => plus(X, Y) plus(active(X), Y) => plus(X, Y) plus(X, active(Y)) => plus(X, Y) x(mark(X), Y) => x(X, Y) x(X, mark(Y)) => x(X, Y) x(active(X), Y) => x(X, Y) x(X, active(Y)) => x(X, Y) By [Kop12, Thm. 7.17], we may replace the dependency pair problem (P_45, R_3, minimal, formative) by (P_45, R_4, minimal, formative). Thus, the original system is terminating if (P_45, R_4, minimal, formative) is finite. We consider the dependency pair problem (P_45, R_4, minimal, formative). We will use the reduction pair processor [Kop12, Thm. 7.16]. It suffices to find a standard reduction pair [Kop12, Def. 6.69]. Thus, we must orient: active#(U11(tt, X)) >? mark#(U12(isNat(X))) active#(U31(tt, X)) >? mark#(U32(isNat(X))) active#(isNat(plus(X, Y))) >? mark#(U11(isNat(X), Y)) active#(isNat(s(X))) >? mark#(U21(isNat(X))) active#(isNat(x(X, Y))) >? mark#(U31(isNat(X), Y)) mark#(U11(X, Y)) >? active#(U11(mark(X), Y)) mark#(U11(X, Y)) >? mark#(X) mark#(U12(X)) >? mark#(X) mark#(isNat(X)) >? active#(isNat(X)) mark#(U21(X)) >? mark#(X) mark#(U31(X, Y)) >? active#(U31(mark(X), Y)) mark#(U31(X, Y)) >? mark#(X) mark#(U32(X)) >? mark#(X) mark#(U52(X, Y, Z)) >? mark#(X) mark#(s(X)) >? mark#(X) mark#(plus(X, Y)) >? mark#(X) active(U11(tt, X)) >= mark(U12(isNat(X))) active(U12(tt)) >= mark(tt) active(U21(tt)) >= mark(tt) active(U31(tt, X)) >= mark(U32(isNat(X))) active(U32(tt)) >= mark(tt) active(U41(tt, X)) >= mark(X) active(U51(tt, X, Y)) >= mark(U52(isNat(Y), X, Y)) active(U52(tt, X, Y)) >= mark(s(plus(Y, X))) active(U61(tt)) >= mark(0) active(U71(tt, X, Y)) >= mark(U72(isNat(Y), X, Y)) active(U72(tt, X, Y)) >= mark(plus(x(Y, X), Y)) active(isNat(0)) >= mark(tt) active(isNat(plus(X, Y))) >= mark(U11(isNat(X), Y)) active(isNat(s(X))) >= mark(U21(isNat(X))) active(isNat(x(X, Y))) >= mark(U31(isNat(X), Y)) active(plus(X, 0)) >= mark(U41(isNat(X), X)) active(plus(X, s(Y))) >= mark(U51(isNat(Y), Y, X)) active(x(X, 0)) >= mark(U61(isNat(X))) active(x(X, s(Y))) >= mark(U71(isNat(Y), Y, X)) mark(U11(X, Y)) >= active(U11(mark(X), Y)) mark(tt) >= active(tt) mark(U12(X)) >= active(U12(mark(X))) mark(isNat(X)) >= active(isNat(X)) mark(U21(X)) >= active(U21(mark(X))) mark(U31(X, Y)) >= active(U31(mark(X), Y)) mark(U32(X)) >= active(U32(mark(X))) mark(U41(X, Y)) >= active(U41(mark(X), Y)) mark(U51(X, Y, Z)) >= active(U51(mark(X), Y, Z)) mark(U52(X, Y, Z)) >= active(U52(mark(X), Y, Z)) mark(s(X)) >= active(s(mark(X))) mark(plus(X, Y)) >= active(plus(mark(X), mark(Y))) mark(U61(X)) >= active(U61(mark(X))) mark(0) >= active(0) mark(U71(X, Y, Z)) >= active(U71(mark(X), Y, Z)) mark(U72(X, Y, Z)) >= active(U72(mark(X), Y, Z)) mark(x(X, Y)) >= active(x(mark(X), mark(Y))) U11(mark(X), Y) >= U11(X, Y) U11(X, mark(Y)) >= U11(X, Y) U11(active(X), Y) >= U11(X, Y) U11(X, active(Y)) >= U11(X, Y) U12(mark(X)) >= U12(X) U12(active(X)) >= U12(X) isNat(mark(X)) >= isNat(X) isNat(active(X)) >= isNat(X) U21(mark(X)) >= U21(X) U21(active(X)) >= U21(X) U31(mark(X), Y) >= U31(X, Y) U31(X, mark(Y)) >= U31(X, Y) U31(active(X), Y) >= U31(X, Y) U31(X, active(Y)) >= U31(X, Y) U32(mark(X)) >= U32(X) U32(active(X)) >= U32(X) U52(mark(X), Y, Z) >= U52(X, Y, Z) U52(X, mark(Y), Z) >= U52(X, Y, Z) U52(X, Y, mark(Z)) >= U52(X, Y, Z) U52(active(X), Y, Z) >= U52(X, Y, Z) U52(X, active(Y), Z) >= U52(X, Y, Z) U52(X, Y, active(Z)) >= U52(X, Y, Z) s(mark(X)) >= s(X) s(active(X)) >= s(X) plus(mark(X), Y) >= plus(X, Y) plus(X, mark(Y)) >= plus(X, Y) plus(active(X), Y) >= plus(X, Y) plus(X, active(Y)) >= plus(X, Y) x(mark(X), Y) >= x(X, Y) x(X, mark(Y)) >= x(X, Y) x(active(X), Y) >= x(X, Y) x(X, active(Y)) >= x(X, Y) We orient these requirements with a polynomial interpretation in the natural numbers. We consider usable_rules with respect to the following argument filtering: active#(x_1) = active#() This leaves the following ordering requirements: active#(U11(tt, X)) >= mark#(U12(isNat(X))) active#(U31(tt, X)) >= mark#(U32(isNat(X))) active#(isNat(plus(X, Y))) >= mark#(U11(isNat(X), Y)) active#(isNat(s(X))) >= mark#(U21(isNat(X))) active#(isNat(x(X, Y))) >= mark#(U31(isNat(X), Y)) mark#(U11(X, Y)) >= active#(U11(mark(X), Y)) mark#(U11(X, Y)) >= mark#(X) mark#(U12(X)) >= mark#(X) mark#(isNat(X)) >= active#(isNat(X)) mark#(U21(X)) >= mark#(X) mark#(U31(X, Y)) >= active#(U31(mark(X), Y)) mark#(U31(X, Y)) >= mark#(X) mark#(U32(X)) >= mark#(X) mark#(U52(X, Y, Z)) >= mark#(X) mark#(s(X)) > mark#(X) mark#(plus(X, Y)) >= mark#(X) U11(mark(X), Y) >= U11(X, Y) U11(X, mark(Y)) >= U11(X, Y) U11(active(X), Y) >= U11(X, Y) U11(X, active(Y)) >= U11(X, Y) U12(mark(X)) >= U12(X) U12(active(X)) >= U12(X) isNat(mark(X)) >= isNat(X) isNat(active(X)) >= isNat(X) U21(mark(X)) >= U21(X) U21(active(X)) >= U21(X) U31(mark(X), Y) >= U31(X, Y) U31(X, mark(Y)) >= U31(X, Y) U31(active(X), Y) >= U31(X, Y) U31(X, active(Y)) >= U31(X, Y) U32(mark(X)) >= U32(X) U32(active(X)) >= U32(X) The following interpretation satisfies the requirements: 0 = 0 U11 = \y0y1.2y0 U12 = \y0.y0 U21 = \y0.y0 U31 = \y0y1.y0 U32 = \y0.y0 U41 = \y0y1.0 U51 = \y0y1y2.0 U52 = \y0y1y2.2y0 U61 = \y0.0 U71 = \y0y1y2.0 U72 = \y0y1y2.0 active = \y0.y0 active# = \y0.1 isNat = \y0.0 mark = \y0.2y0 mark# = \y0.1 + 2y0 plus = \y0y1.y0 s = \y0.1 + 2y0 tt = 0 x = \y0y1.0 Using this interpretation, the requirements translate to: [[active#(U11(tt, _x0))]] = 1 >= 1 = [[mark#(U12(isNat(_x0)))]] [[active#(U31(tt, _x0))]] = 1 >= 1 = [[mark#(U32(isNat(_x0)))]] [[active#(isNat(plus(_x0, _x1)))]] = 1 >= 1 = [[mark#(U11(isNat(_x0), _x1))]] [[active#(isNat(s(_x0)))]] = 1 >= 1 = [[mark#(U21(isNat(_x0)))]] [[active#(isNat(x(_x0, _x1)))]] = 1 >= 1 = [[mark#(U31(isNat(_x0), _x1))]] [[mark#(U11(_x0, _x1))]] = 1 + 4x0 >= 1 = [[active#(U11(mark(_x0), _x1))]] [[mark#(U11(_x0, _x1))]] = 1 + 4x0 >= 1 + 2x0 = [[mark#(_x0)]] [[mark#(U12(_x0))]] = 1 + 2x0 >= 1 + 2x0 = [[mark#(_x0)]] [[mark#(isNat(_x0))]] = 1 >= 1 = [[active#(isNat(_x0))]] [[mark#(U21(_x0))]] = 1 + 2x0 >= 1 + 2x0 = [[mark#(_x0)]] [[mark#(U31(_x0, _x1))]] = 1 + 2x0 >= 1 = [[active#(U31(mark(_x0), _x1))]] [[mark#(U31(_x0, _x1))]] = 1 + 2x0 >= 1 + 2x0 = [[mark#(_x0)]] [[mark#(U32(_x0))]] = 1 + 2x0 >= 1 + 2x0 = [[mark#(_x0)]] [[mark#(U52(_x0, _x1, _x2))]] = 1 + 4x0 >= 1 + 2x0 = [[mark#(_x0)]] [[mark#(s(_x0))]] = 3 + 4x0 > 1 + 2x0 = [[mark#(_x0)]] [[mark#(plus(_x0, _x1))]] = 1 + 2x0 >= 1 + 2x0 = [[mark#(_x0)]] [[U11(mark(_x0), _x1)]] = 4x0 >= 2x0 = [[U11(_x0, _x1)]] [[U11(_x0, mark(_x1))]] = 2x0 >= 2x0 = [[U11(_x0, _x1)]] [[U11(active(_x0), _x1)]] = 2x0 >= 2x0 = [[U11(_x0, _x1)]] [[U11(_x0, active(_x1))]] = 2x0 >= 2x0 = [[U11(_x0, _x1)]] [[U12(mark(_x0))]] = 2x0 >= x0 = [[U12(_x0)]] [[U12(active(_x0))]] = x0 >= x0 = [[U12(_x0)]] [[isNat(mark(_x0))]] = 0 >= 0 = [[isNat(_x0)]] [[isNat(active(_x0))]] = 0 >= 0 = [[isNat(_x0)]] [[U21(mark(_x0))]] = 2x0 >= x0 = [[U21(_x0)]] [[U21(active(_x0))]] = x0 >= x0 = [[U21(_x0)]] [[U31(mark(_x0), _x1)]] = 2x0 >= x0 = [[U31(_x0, _x1)]] [[U31(_x0, mark(_x1))]] = x0 >= x0 = [[U31(_x0, _x1)]] [[U31(active(_x0), _x1)]] = x0 >= x0 = [[U31(_x0, _x1)]] [[U31(_x0, active(_x1))]] = x0 >= x0 = [[U31(_x0, _x1)]] [[U32(mark(_x0))]] = 2x0 >= x0 = [[U32(_x0)]] [[U32(active(_x0))]] = x0 >= x0 = [[U32(_x0)]] By the observations in [Kop12, Sec. 6.6], this reduction pair suffices; we may thus replace the dependency pair problem (P_45, R_4, minimal, formative) by (P_46, R_4, minimal, formative), where P_46 consists of: active#(U11(tt, X)) =#> mark#(U12(isNat(X))) active#(U31(tt, X)) =#> mark#(U32(isNat(X))) active#(isNat(plus(X, Y))) =#> mark#(U11(isNat(X), Y)) active#(isNat(s(X))) =#> mark#(U21(isNat(X))) active#(isNat(x(X, Y))) =#> mark#(U31(isNat(X), Y)) mark#(U11(X, Y)) =#> active#(U11(mark(X), Y)) mark#(U11(X, Y)) =#> mark#(X) mark#(U12(X)) =#> mark#(X) mark#(isNat(X)) =#> active#(isNat(X)) mark#(U21(X)) =#> mark#(X) mark#(U31(X, Y)) =#> active#(U31(mark(X), Y)) mark#(U31(X, Y)) =#> mark#(X) mark#(U32(X)) =#> mark#(X) mark#(U52(X, Y, Z)) =#> mark#(X) mark#(plus(X, Y)) =#> mark#(X) Thus, the original system is terminating if (P_46, R_4, minimal, formative) is finite. We consider the dependency pair problem (P_46, R_4, minimal, formative). We will use the reduction pair processor [Kop12, Thm. 7.16]. It suffices to find a standard reduction pair [Kop12, Def. 6.69]. Thus, we must orient: active#(U11(tt, X)) >? mark#(U12(isNat(X))) active#(U31(tt, X)) >? mark#(U32(isNat(X))) active#(isNat(plus(X, Y))) >? mark#(U11(isNat(X), Y)) active#(isNat(s(X))) >? mark#(U21(isNat(X))) active#(isNat(x(X, Y))) >? mark#(U31(isNat(X), Y)) mark#(U11(X, Y)) >? active#(U11(mark(X), Y)) mark#(U11(X, Y)) >? mark#(X) mark#(U12(X)) >? mark#(X) mark#(isNat(X)) >? active#(isNat(X)) mark#(U21(X)) >? mark#(X) mark#(U31(X, Y)) >? active#(U31(mark(X), Y)) mark#(U31(X, Y)) >? mark#(X) mark#(U32(X)) >? mark#(X) mark#(U52(X, Y, Z)) >? mark#(X) mark#(plus(X, Y)) >? mark#(X) active(U11(tt, X)) >= mark(U12(isNat(X))) active(U12(tt)) >= mark(tt) active(U21(tt)) >= mark(tt) active(U31(tt, X)) >= mark(U32(isNat(X))) active(U32(tt)) >= mark(tt) active(U41(tt, X)) >= mark(X) active(U51(tt, X, Y)) >= mark(U52(isNat(Y), X, Y)) active(U52(tt, X, Y)) >= mark(s(plus(Y, X))) active(U61(tt)) >= mark(0) active(U71(tt, X, Y)) >= mark(U72(isNat(Y), X, Y)) active(U72(tt, X, Y)) >= mark(plus(x(Y, X), Y)) active(isNat(0)) >= mark(tt) active(isNat(plus(X, Y))) >= mark(U11(isNat(X), Y)) active(isNat(s(X))) >= mark(U21(isNat(X))) active(isNat(x(X, Y))) >= mark(U31(isNat(X), Y)) active(plus(X, 0)) >= mark(U41(isNat(X), X)) active(plus(X, s(Y))) >= mark(U51(isNat(Y), Y, X)) active(x(X, 0)) >= mark(U61(isNat(X))) active(x(X, s(Y))) >= mark(U71(isNat(Y), Y, X)) mark(U11(X, Y)) >= active(U11(mark(X), Y)) mark(tt) >= active(tt) mark(U12(X)) >= active(U12(mark(X))) mark(isNat(X)) >= active(isNat(X)) mark(U21(X)) >= active(U21(mark(X))) mark(U31(X, Y)) >= active(U31(mark(X), Y)) mark(U32(X)) >= active(U32(mark(X))) mark(U41(X, Y)) >= active(U41(mark(X), Y)) mark(U51(X, Y, Z)) >= active(U51(mark(X), Y, Z)) mark(U52(X, Y, Z)) >= active(U52(mark(X), Y, Z)) mark(s(X)) >= active(s(mark(X))) mark(plus(X, Y)) >= active(plus(mark(X), mark(Y))) mark(U61(X)) >= active(U61(mark(X))) mark(0) >= active(0) mark(U71(X, Y, Z)) >= active(U71(mark(X), Y, Z)) mark(U72(X, Y, Z)) >= active(U72(mark(X), Y, Z)) mark(x(X, Y)) >= active(x(mark(X), mark(Y))) U11(mark(X), Y) >= U11(X, Y) U11(X, mark(Y)) >= U11(X, Y) U11(active(X), Y) >= U11(X, Y) U11(X, active(Y)) >= U11(X, Y) U12(mark(X)) >= U12(X) U12(active(X)) >= U12(X) isNat(mark(X)) >= isNat(X) isNat(active(X)) >= isNat(X) U21(mark(X)) >= U21(X) U21(active(X)) >= U21(X) U31(mark(X), Y) >= U31(X, Y) U31(X, mark(Y)) >= U31(X, Y) U31(active(X), Y) >= U31(X, Y) U31(X, active(Y)) >= U31(X, Y) U32(mark(X)) >= U32(X) U32(active(X)) >= U32(X) U52(mark(X), Y, Z) >= U52(X, Y, Z) U52(X, mark(Y), Z) >= U52(X, Y, Z) U52(X, Y, mark(Z)) >= U52(X, Y, Z) U52(active(X), Y, Z) >= U52(X, Y, Z) U52(X, active(Y), Z) >= U52(X, Y, Z) U52(X, Y, active(Z)) >= U52(X, Y, Z) s(mark(X)) >= s(X) s(active(X)) >= s(X) plus(mark(X), Y) >= plus(X, Y) plus(X, mark(Y)) >= plus(X, Y) plus(active(X), Y) >= plus(X, Y) plus(X, active(Y)) >= plus(X, Y) x(mark(X), Y) >= x(X, Y) x(X, mark(Y)) >= x(X, Y) x(active(X), Y) >= x(X, Y) x(X, active(Y)) >= x(X, Y) We orient these requirements with a polynomial interpretation in the natural numbers. We consider usable_rules with respect to the following argument filtering: active#(x_1) = active#() This leaves the following ordering requirements: active#(U11(tt, X)) >= mark#(U12(isNat(X))) active#(U31(tt, X)) >= mark#(U32(isNat(X))) active#(isNat(plus(X, Y))) >= mark#(U11(isNat(X), Y)) active#(isNat(s(X))) >= mark#(U21(isNat(X))) active#(isNat(x(X, Y))) >= mark#(U31(isNat(X), Y)) mark#(U11(X, Y)) >= active#(U11(mark(X), Y)) mark#(U11(X, Y)) >= mark#(X) mark#(U12(X)) >= mark#(X) mark#(isNat(X)) >= active#(isNat(X)) mark#(U21(X)) >= mark#(X) mark#(U31(X, Y)) >= active#(U31(mark(X), Y)) mark#(U31(X, Y)) >= mark#(X) mark#(U32(X)) >= mark#(X) mark#(U52(X, Y, Z)) > mark#(X) mark#(plus(X, Y)) >= mark#(X) U11(mark(X), Y) >= U11(X, Y) U11(X, mark(Y)) >= U11(X, Y) U11(active(X), Y) >= U11(X, Y) U11(X, active(Y)) >= U11(X, Y) U12(mark(X)) >= U12(X) U12(active(X)) >= U12(X) isNat(mark(X)) >= isNat(X) isNat(active(X)) >= isNat(X) U21(mark(X)) >= U21(X) U21(active(X)) >= U21(X) U31(mark(X), Y) >= U31(X, Y) U31(X, mark(Y)) >= U31(X, Y) U31(active(X), Y) >= U31(X, Y) U31(X, active(Y)) >= U31(X, Y) U32(mark(X)) >= U32(X) U32(active(X)) >= U32(X) The following interpretation satisfies the requirements: 0 = 0 U11 = \y0y1.y0 U12 = \y0.2y0 U21 = \y0.2y0 U31 = \y0y1.y0 U32 = \y0.y0 U41 = \y0y1.0 U51 = \y0y1y2.0 U52 = \y0y1y2.2 + y0 U61 = \y0.0 U71 = \y0y1y2.0 U72 = \y0y1y2.0 active = \y0.y0 active# = \y0.1 isNat = \y0.0 mark = \y0.y0 mark# = \y0.1 + 2y0 plus = \y0y1.y0 s = \y0.0 tt = 0 x = \y0y1.0 Using this interpretation, the requirements translate to: [[active#(U11(tt, _x0))]] = 1 >= 1 = [[mark#(U12(isNat(_x0)))]] [[active#(U31(tt, _x0))]] = 1 >= 1 = [[mark#(U32(isNat(_x0)))]] [[active#(isNat(plus(_x0, _x1)))]] = 1 >= 1 = [[mark#(U11(isNat(_x0), _x1))]] [[active#(isNat(s(_x0)))]] = 1 >= 1 = [[mark#(U21(isNat(_x0)))]] [[active#(isNat(x(_x0, _x1)))]] = 1 >= 1 = [[mark#(U31(isNat(_x0), _x1))]] [[mark#(U11(_x0, _x1))]] = 1 + 2x0 >= 1 = [[active#(U11(mark(_x0), _x1))]] [[mark#(U11(_x0, _x1))]] = 1 + 2x0 >= 1 + 2x0 = [[mark#(_x0)]] [[mark#(U12(_x0))]] = 1 + 4x0 >= 1 + 2x0 = [[mark#(_x0)]] [[mark#(isNat(_x0))]] = 1 >= 1 = [[active#(isNat(_x0))]] [[mark#(U21(_x0))]] = 1 + 4x0 >= 1 + 2x0 = [[mark#(_x0)]] [[mark#(U31(_x0, _x1))]] = 1 + 2x0 >= 1 = [[active#(U31(mark(_x0), _x1))]] [[mark#(U31(_x0, _x1))]] = 1 + 2x0 >= 1 + 2x0 = [[mark#(_x0)]] [[mark#(U32(_x0))]] = 1 + 2x0 >= 1 + 2x0 = [[mark#(_x0)]] [[mark#(U52(_x0, _x1, _x2))]] = 5 + 2x0 > 1 + 2x0 = [[mark#(_x0)]] [[mark#(plus(_x0, _x1))]] = 1 + 2x0 >= 1 + 2x0 = [[mark#(_x0)]] [[U11(mark(_x0), _x1)]] = x0 >= x0 = [[U11(_x0, _x1)]] [[U11(_x0, mark(_x1))]] = x0 >= x0 = [[U11(_x0, _x1)]] [[U11(active(_x0), _x1)]] = x0 >= x0 = [[U11(_x0, _x1)]] [[U11(_x0, active(_x1))]] = x0 >= x0 = [[U11(_x0, _x1)]] [[U12(mark(_x0))]] = 2x0 >= 2x0 = [[U12(_x0)]] [[U12(active(_x0))]] = 2x0 >= 2x0 = [[U12(_x0)]] [[isNat(mark(_x0))]] = 0 >= 0 = [[isNat(_x0)]] [[isNat(active(_x0))]] = 0 >= 0 = [[isNat(_x0)]] [[U21(mark(_x0))]] = 2x0 >= 2x0 = [[U21(_x0)]] [[U21(active(_x0))]] = 2x0 >= 2x0 = [[U21(_x0)]] [[U31(mark(_x0), _x1)]] = x0 >= x0 = [[U31(_x0, _x1)]] [[U31(_x0, mark(_x1))]] = x0 >= x0 = [[U31(_x0, _x1)]] [[U31(active(_x0), _x1)]] = x0 >= x0 = [[U31(_x0, _x1)]] [[U31(_x0, active(_x1))]] = x0 >= x0 = [[U31(_x0, _x1)]] [[U32(mark(_x0))]] = x0 >= x0 = [[U32(_x0)]] [[U32(active(_x0))]] = x0 >= x0 = [[U32(_x0)]] By the observations in [Kop12, Sec. 6.6], this reduction pair suffices; we may thus replace the dependency pair problem (P_46, R_4, minimal, formative) by (P_47, R_4, minimal, formative), where P_47 consists of: active#(U11(tt, X)) =#> mark#(U12(isNat(X))) active#(U31(tt, X)) =#> mark#(U32(isNat(X))) active#(isNat(plus(X, Y))) =#> mark#(U11(isNat(X), Y)) active#(isNat(s(X))) =#> mark#(U21(isNat(X))) active#(isNat(x(X, Y))) =#> mark#(U31(isNat(X), Y)) mark#(U11(X, Y)) =#> active#(U11(mark(X), Y)) mark#(U11(X, Y)) =#> mark#(X) mark#(U12(X)) =#> mark#(X) mark#(isNat(X)) =#> active#(isNat(X)) mark#(U21(X)) =#> mark#(X) mark#(U31(X, Y)) =#> active#(U31(mark(X), Y)) mark#(U31(X, Y)) =#> mark#(X) mark#(U32(X)) =#> mark#(X) mark#(plus(X, Y)) =#> mark#(X) Thus, the original system is terminating if (P_47, R_4, minimal, formative) is finite. We consider the dependency pair problem (P_47, R_4, minimal, formative). The formative rules of (P_47, R_4) are R_5 ::= active(U11(tt, X)) => mark(U12(isNat(X))) active(U12(tt)) => mark(tt) active(U21(tt)) => mark(tt) active(U31(tt, X)) => mark(U32(isNat(X))) active(U32(tt)) => mark(tt) active(U41(tt, X)) => mark(X) active(U51(tt, X, Y)) => mark(U52(isNat(Y), X, Y)) active(U52(tt, X, Y)) => mark(s(plus(Y, X))) active(U61(tt)) => mark(0) active(U71(tt, X, Y)) => mark(U72(isNat(Y), X, Y)) active(U72(tt, X, Y)) => mark(plus(x(Y, X), Y)) active(isNat(0)) => mark(tt) active(isNat(plus(X, Y))) => mark(U11(isNat(X), Y)) active(isNat(s(X))) => mark(U21(isNat(X))) active(isNat(x(X, Y))) => mark(U31(isNat(X), Y)) active(plus(X, 0)) => mark(U41(isNat(X), X)) active(plus(X, s(Y))) => mark(U51(isNat(Y), Y, X)) active(x(X, 0)) => mark(U61(isNat(X))) active(x(X, s(Y))) => mark(U71(isNat(Y), Y, X)) mark(U11(X, Y)) => active(U11(mark(X), Y)) mark(tt) => active(tt) mark(U12(X)) => active(U12(mark(X))) mark(isNat(X)) => active(isNat(X)) mark(U21(X)) => active(U21(mark(X))) mark(U31(X, Y)) => active(U31(mark(X), Y)) mark(U32(X)) => active(U32(mark(X))) mark(U41(X, Y)) => active(U41(mark(X), Y)) mark(U51(X, Y, Z)) => active(U51(mark(X), Y, Z)) mark(U52(X, Y, Z)) => active(U52(mark(X), Y, Z)) mark(s(X)) => active(s(mark(X))) mark(plus(X, Y)) => active(plus(mark(X), mark(Y))) mark(U61(X)) => active(U61(mark(X))) mark(0) => active(0) mark(U71(X, Y, Z)) => active(U71(mark(X), Y, Z)) mark(U72(X, Y, Z)) => active(U72(mark(X), Y, Z)) mark(x(X, Y)) => active(x(mark(X), mark(Y))) U11(mark(X), Y) => U11(X, Y) U11(X, mark(Y)) => U11(X, Y) U11(active(X), Y) => U11(X, Y) U11(X, active(Y)) => U11(X, Y) U12(mark(X)) => U12(X) U12(active(X)) => U12(X) isNat(mark(X)) => isNat(X) isNat(active(X)) => isNat(X) U21(mark(X)) => U21(X) U21(active(X)) => U21(X) U31(mark(X), Y) => U31(X, Y) U31(X, mark(Y)) => U31(X, Y) U31(active(X), Y) => U31(X, Y) U31(X, active(Y)) => U31(X, Y) U32(mark(X)) => U32(X) U32(active(X)) => U32(X) s(mark(X)) => s(X) s(active(X)) => s(X) plus(mark(X), Y) => plus(X, Y) plus(X, mark(Y)) => plus(X, Y) plus(active(X), Y) => plus(X, Y) plus(X, active(Y)) => plus(X, Y) x(mark(X), Y) => x(X, Y) x(X, mark(Y)) => x(X, Y) x(active(X), Y) => x(X, Y) x(X, active(Y)) => x(X, Y) By [Kop12, Thm. 7.17], we may replace the dependency pair problem (P_47, R_4, minimal, formative) by (P_47, R_5, minimal, formative). Thus, the original system is terminating if (P_47, R_5, minimal, formative) is finite. We consider the dependency pair problem (P_47, R_5, minimal, formative). We will use the reduction pair processor [Kop12, Thm. 7.16]. It suffices to find a standard reduction pair [Kop12, Def. 6.69]. Thus, we must orient: active#(U11(tt, X)) >? mark#(U12(isNat(X))) active#(U31(tt, X)) >? mark#(U32(isNat(X))) active#(isNat(plus(X, Y))) >? mark#(U11(isNat(X), Y)) active#(isNat(s(X))) >? mark#(U21(isNat(X))) active#(isNat(x(X, Y))) >? mark#(U31(isNat(X), Y)) mark#(U11(X, Y)) >? active#(U11(mark(X), Y)) mark#(U11(X, Y)) >? mark#(X) mark#(U12(X)) >? mark#(X) mark#(isNat(X)) >? active#(isNat(X)) mark#(U21(X)) >? mark#(X) mark#(U31(X, Y)) >? active#(U31(mark(X), Y)) mark#(U31(X, Y)) >? mark#(X) mark#(U32(X)) >? mark#(X) mark#(plus(X, Y)) >? mark#(X) active(U11(tt, X)) >= mark(U12(isNat(X))) active(U12(tt)) >= mark(tt) active(U21(tt)) >= mark(tt) active(U31(tt, X)) >= mark(U32(isNat(X))) active(U32(tt)) >= mark(tt) active(U41(tt, X)) >= mark(X) active(U51(tt, X, Y)) >= mark(U52(isNat(Y), X, Y)) active(U52(tt, X, Y)) >= mark(s(plus(Y, X))) active(U61(tt)) >= mark(0) active(U71(tt, X, Y)) >= mark(U72(isNat(Y), X, Y)) active(U72(tt, X, Y)) >= mark(plus(x(Y, X), Y)) active(isNat(0)) >= mark(tt) active(isNat(plus(X, Y))) >= mark(U11(isNat(X), Y)) active(isNat(s(X))) >= mark(U21(isNat(X))) active(isNat(x(X, Y))) >= mark(U31(isNat(X), Y)) active(plus(X, 0)) >= mark(U41(isNat(X), X)) active(plus(X, s(Y))) >= mark(U51(isNat(Y), Y, X)) active(x(X, 0)) >= mark(U61(isNat(X))) active(x(X, s(Y))) >= mark(U71(isNat(Y), Y, X)) mark(U11(X, Y)) >= active(U11(mark(X), Y)) mark(tt) >= active(tt) mark(U12(X)) >= active(U12(mark(X))) mark(isNat(X)) >= active(isNat(X)) mark(U21(X)) >= active(U21(mark(X))) mark(U31(X, Y)) >= active(U31(mark(X), Y)) mark(U32(X)) >= active(U32(mark(X))) mark(U41(X, Y)) >= active(U41(mark(X), Y)) mark(U51(X, Y, Z)) >= active(U51(mark(X), Y, Z)) mark(U52(X, Y, Z)) >= active(U52(mark(X), Y, Z)) mark(s(X)) >= active(s(mark(X))) mark(plus(X, Y)) >= active(plus(mark(X), mark(Y))) mark(U61(X)) >= active(U61(mark(X))) mark(0) >= active(0) mark(U71(X, Y, Z)) >= active(U71(mark(X), Y, Z)) mark(U72(X, Y, Z)) >= active(U72(mark(X), Y, Z)) mark(x(X, Y)) >= active(x(mark(X), mark(Y))) U11(mark(X), Y) >= U11(X, Y) U11(X, mark(Y)) >= U11(X, Y) U11(active(X), Y) >= U11(X, Y) U11(X, active(Y)) >= U11(X, Y) U12(mark(X)) >= U12(X) U12(active(X)) >= U12(X) isNat(mark(X)) >= isNat(X) isNat(active(X)) >= isNat(X) U21(mark(X)) >= U21(X) U21(active(X)) >= U21(X) U31(mark(X), Y) >= U31(X, Y) U31(X, mark(Y)) >= U31(X, Y) U31(active(X), Y) >= U31(X, Y) U31(X, active(Y)) >= U31(X, Y) U32(mark(X)) >= U32(X) U32(active(X)) >= U32(X) s(mark(X)) >= s(X) s(active(X)) >= s(X) plus(mark(X), Y) >= plus(X, Y) plus(X, mark(Y)) >= plus(X, Y) plus(active(X), Y) >= plus(X, Y) plus(X, active(Y)) >= plus(X, Y) x(mark(X), Y) >= x(X, Y) x(X, mark(Y)) >= x(X, Y) x(active(X), Y) >= x(X, Y) x(X, active(Y)) >= x(X, Y) We orient these requirements with a polynomial interpretation in the natural numbers. We consider usable_rules with respect to the following argument filtering: active#(x_1) = active#() This leaves the following ordering requirements: active#(U11(tt, X)) >= mark#(U12(isNat(X))) active#(U31(tt, X)) >= mark#(U32(isNat(X))) active#(isNat(plus(X, Y))) >= mark#(U11(isNat(X), Y)) active#(isNat(s(X))) >= mark#(U21(isNat(X))) active#(isNat(x(X, Y))) >= mark#(U31(isNat(X), Y)) mark#(U11(X, Y)) >= active#(U11(mark(X), Y)) mark#(U11(X, Y)) >= mark#(X) mark#(U12(X)) >= mark#(X) mark#(isNat(X)) >= active#(isNat(X)) mark#(U21(X)) >= mark#(X) mark#(U31(X, Y)) >= active#(U31(mark(X), Y)) mark#(U31(X, Y)) >= mark#(X) mark#(U32(X)) >= mark#(X) mark#(plus(X, Y)) > mark#(X) U11(mark(X), Y) >= U11(X, Y) U11(X, mark(Y)) >= U11(X, Y) U11(active(X), Y) >= U11(X, Y) U11(X, active(Y)) >= U11(X, Y) U12(mark(X)) >= U12(X) U12(active(X)) >= U12(X) isNat(mark(X)) >= isNat(X) isNat(active(X)) >= isNat(X) U21(mark(X)) >= U21(X) U21(active(X)) >= U21(X) U31(mark(X), Y) >= U31(X, Y) U31(X, mark(Y)) >= U31(X, Y) U31(active(X), Y) >= U31(X, Y) U31(X, active(Y)) >= U31(X, Y) U32(mark(X)) >= U32(X) U32(active(X)) >= U32(X) The following interpretation satisfies the requirements: 0 = 0 U11 = \y0y1.2y0 U12 = \y0.2y0 U21 = \y0.2y0 U31 = \y0y1.y0 U32 = \y0.y0 U41 = \y0y1.0 U51 = \y0y1y2.0 U52 = \y0y1y2.0 U61 = \y0.0 U71 = \y0y1y2.0 U72 = \y0y1y2.0 active = \y0.y0 active# = \y0.0 isNat = \y0.0 mark = \y0.2y0 mark# = \y0.y0 plus = \y0y1.2 + y0 s = \y0.0 tt = 0 x = \y0y1.0 Using this interpretation, the requirements translate to: [[active#(U11(tt, _x0))]] = 0 >= 0 = [[mark#(U12(isNat(_x0)))]] [[active#(U31(tt, _x0))]] = 0 >= 0 = [[mark#(U32(isNat(_x0)))]] [[active#(isNat(plus(_x0, _x1)))]] = 0 >= 0 = [[mark#(U11(isNat(_x0), _x1))]] [[active#(isNat(s(_x0)))]] = 0 >= 0 = [[mark#(U21(isNat(_x0)))]] [[active#(isNat(x(_x0, _x1)))]] = 0 >= 0 = [[mark#(U31(isNat(_x0), _x1))]] [[mark#(U11(_x0, _x1))]] = 2x0 >= 0 = [[active#(U11(mark(_x0), _x1))]] [[mark#(U11(_x0, _x1))]] = 2x0 >= x0 = [[mark#(_x0)]] [[mark#(U12(_x0))]] = 2x0 >= x0 = [[mark#(_x0)]] [[mark#(isNat(_x0))]] = 0 >= 0 = [[active#(isNat(_x0))]] [[mark#(U21(_x0))]] = 2x0 >= x0 = [[mark#(_x0)]] [[mark#(U31(_x0, _x1))]] = x0 >= 0 = [[active#(U31(mark(_x0), _x1))]] [[mark#(U31(_x0, _x1))]] = x0 >= x0 = [[mark#(_x0)]] [[mark#(U32(_x0))]] = x0 >= x0 = [[mark#(_x0)]] [[mark#(plus(_x0, _x1))]] = 2 + x0 > x0 = [[mark#(_x0)]] [[U11(mark(_x0), _x1)]] = 4x0 >= 2x0 = [[U11(_x0, _x1)]] [[U11(_x0, mark(_x1))]] = 2x0 >= 2x0 = [[U11(_x0, _x1)]] [[U11(active(_x0), _x1)]] = 2x0 >= 2x0 = [[U11(_x0, _x1)]] [[U11(_x0, active(_x1))]] = 2x0 >= 2x0 = [[U11(_x0, _x1)]] [[U12(mark(_x0))]] = 4x0 >= 2x0 = [[U12(_x0)]] [[U12(active(_x0))]] = 2x0 >= 2x0 = [[U12(_x0)]] [[isNat(mark(_x0))]] = 0 >= 0 = [[isNat(_x0)]] [[isNat(active(_x0))]] = 0 >= 0 = [[isNat(_x0)]] [[U21(mark(_x0))]] = 4x0 >= 2x0 = [[U21(_x0)]] [[U21(active(_x0))]] = 2x0 >= 2x0 = [[U21(_x0)]] [[U31(mark(_x0), _x1)]] = 2x0 >= x0 = [[U31(_x0, _x1)]] [[U31(_x0, mark(_x1))]] = x0 >= x0 = [[U31(_x0, _x1)]] [[U31(active(_x0), _x1)]] = x0 >= x0 = [[U31(_x0, _x1)]] [[U31(_x0, active(_x1))]] = x0 >= x0 = [[U31(_x0, _x1)]] [[U32(mark(_x0))]] = 2x0 >= x0 = [[U32(_x0)]] [[U32(active(_x0))]] = x0 >= x0 = [[U32(_x0)]] By the observations in [Kop12, Sec. 6.6], this reduction pair suffices; we may thus replace the dependency pair problem (P_47, R_5, minimal, formative) by (P_48, R_5, minimal, formative), where P_48 consists of: active#(U11(tt, X)) =#> mark#(U12(isNat(X))) active#(U31(tt, X)) =#> mark#(U32(isNat(X))) active#(isNat(plus(X, Y))) =#> mark#(U11(isNat(X), Y)) active#(isNat(s(X))) =#> mark#(U21(isNat(X))) active#(isNat(x(X, Y))) =#> mark#(U31(isNat(X), Y)) mark#(U11(X, Y)) =#> active#(U11(mark(X), Y)) mark#(U11(X, Y)) =#> mark#(X) mark#(U12(X)) =#> mark#(X) mark#(isNat(X)) =#> active#(isNat(X)) mark#(U21(X)) =#> mark#(X) mark#(U31(X, Y)) =#> active#(U31(mark(X), Y)) mark#(U31(X, Y)) =#> mark#(X) mark#(U32(X)) =#> mark#(X) Thus, the original system is terminating if (P_48, R_5, minimal, formative) is finite. We consider the dependency pair problem (P_48, R_5, minimal, formative). We will use the reduction pair processor [Kop12, Thm. 7.16]. It suffices to find a standard reduction pair [Kop12, Def. 6.69]. Thus, we must orient: active#(U11(tt, X)) >? mark#(U12(isNat(X))) active#(U31(tt, X)) >? mark#(U32(isNat(X))) active#(isNat(plus(X, Y))) >? mark#(U11(isNat(X), Y)) active#(isNat(s(X))) >? mark#(U21(isNat(X))) active#(isNat(x(X, Y))) >? mark#(U31(isNat(X), Y)) mark#(U11(X, Y)) >? active#(U11(mark(X), Y)) mark#(U11(X, Y)) >? mark#(X) mark#(U12(X)) >? mark#(X) mark#(isNat(X)) >? active#(isNat(X)) mark#(U21(X)) >? mark#(X) mark#(U31(X, Y)) >? active#(U31(mark(X), Y)) mark#(U31(X, Y)) >? mark#(X) mark#(U32(X)) >? mark#(X) active(U11(tt, X)) >= mark(U12(isNat(X))) active(U12(tt)) >= mark(tt) active(U21(tt)) >= mark(tt) active(U31(tt, X)) >= mark(U32(isNat(X))) active(U32(tt)) >= mark(tt) active(U41(tt, X)) >= mark(X) active(U51(tt, X, Y)) >= mark(U52(isNat(Y), X, Y)) active(U52(tt, X, Y)) >= mark(s(plus(Y, X))) active(U61(tt)) >= mark(0) active(U71(tt, X, Y)) >= mark(U72(isNat(Y), X, Y)) active(U72(tt, X, Y)) >= mark(plus(x(Y, X), Y)) active(isNat(0)) >= mark(tt) active(isNat(plus(X, Y))) >= mark(U11(isNat(X), Y)) active(isNat(s(X))) >= mark(U21(isNat(X))) active(isNat(x(X, Y))) >= mark(U31(isNat(X), Y)) active(plus(X, 0)) >= mark(U41(isNat(X), X)) active(plus(X, s(Y))) >= mark(U51(isNat(Y), Y, X)) active(x(X, 0)) >= mark(U61(isNat(X))) active(x(X, s(Y))) >= mark(U71(isNat(Y), Y, X)) mark(U11(X, Y)) >= active(U11(mark(X), Y)) mark(tt) >= active(tt) mark(U12(X)) >= active(U12(mark(X))) mark(isNat(X)) >= active(isNat(X)) mark(U21(X)) >= active(U21(mark(X))) mark(U31(X, Y)) >= active(U31(mark(X), Y)) mark(U32(X)) >= active(U32(mark(X))) mark(U41(X, Y)) >= active(U41(mark(X), Y)) mark(U51(X, Y, Z)) >= active(U51(mark(X), Y, Z)) mark(U52(X, Y, Z)) >= active(U52(mark(X), Y, Z)) mark(s(X)) >= active(s(mark(X))) mark(plus(X, Y)) >= active(plus(mark(X), mark(Y))) mark(U61(X)) >= active(U61(mark(X))) mark(0) >= active(0) mark(U71(X, Y, Z)) >= active(U71(mark(X), Y, Z)) mark(U72(X, Y, Z)) >= active(U72(mark(X), Y, Z)) mark(x(X, Y)) >= active(x(mark(X), mark(Y))) U11(mark(X), Y) >= U11(X, Y) U11(X, mark(Y)) >= U11(X, Y) U11(active(X), Y) >= U11(X, Y) U11(X, active(Y)) >= U11(X, Y) U12(mark(X)) >= U12(X) U12(active(X)) >= U12(X) isNat(mark(X)) >= isNat(X) isNat(active(X)) >= isNat(X) U21(mark(X)) >= U21(X) U21(active(X)) >= U21(X) U31(mark(X), Y) >= U31(X, Y) U31(X, mark(Y)) >= U31(X, Y) U31(active(X), Y) >= U31(X, Y) U31(X, active(Y)) >= U31(X, Y) U32(mark(X)) >= U32(X) U32(active(X)) >= U32(X) s(mark(X)) >= s(X) s(active(X)) >= s(X) plus(mark(X), Y) >= plus(X, Y) plus(X, mark(Y)) >= plus(X, Y) plus(active(X), Y) >= plus(X, Y) plus(X, active(Y)) >= plus(X, Y) x(mark(X), Y) >= x(X, Y) x(X, mark(Y)) >= x(X, Y) x(active(X), Y) >= x(X, Y) x(X, active(Y)) >= x(X, Y) We orient these requirements with a polynomial interpretation in the natural numbers. The following interpretation satisfies the requirements: 0 = 0 U11 = \y0y1.y0 + y1 U12 = \y0.y0 U21 = \y0.1 + y0 U31 = \y0y1.y1 + 2y0 U32 = \y0.y0 U41 = \y0y1.y1 U51 = \y0y1y2.1 + y1 + y2 U52 = \y0y1y2.1 + y1 + y2 U61 = \y0.0 U71 = \y0y1y2.y1 + 3y2 + y1y2 U72 = \y0y1y2.y1 + 3y2 + y1y2 active = \y0.y0 active# = \y0.y0 isNat = \y0.y0 mark = \y0.y0 mark# = \y0.y0 plus = \y0y1.y0 + y1 s = \y0.1 + y0 tt = 0 x = \y0y1.y1 + 2y0 + y0y1 Using this interpretation, the requirements translate to: [[active#(U11(tt, _x0))]] = x0 >= x0 = [[mark#(U12(isNat(_x0)))]] [[active#(U31(tt, _x0))]] = x0 >= x0 = [[mark#(U32(isNat(_x0)))]] [[active#(isNat(plus(_x0, _x1)))]] = x0 + x1 >= x0 + x1 = [[mark#(U11(isNat(_x0), _x1))]] [[active#(isNat(s(_x0)))]] = 1 + x0 >= 1 + x0 = [[mark#(U21(isNat(_x0)))]] [[active#(isNat(x(_x0, _x1)))]] = x1 + 2x0 + x0x1 >= x1 + 2x0 = [[mark#(U31(isNat(_x0), _x1))]] [[mark#(U11(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active#(U11(mark(_x0), _x1))]] [[mark#(U11(_x0, _x1))]] = x0 + x1 >= x0 = [[mark#(_x0)]] [[mark#(U12(_x0))]] = x0 >= x0 = [[mark#(_x0)]] [[mark#(isNat(_x0))]] = x0 >= x0 = [[active#(isNat(_x0))]] [[mark#(U21(_x0))]] = 1 + x0 > x0 = [[mark#(_x0)]] [[mark#(U31(_x0, _x1))]] = x1 + 2x0 >= x1 + 2x0 = [[active#(U31(mark(_x0), _x1))]] [[mark#(U31(_x0, _x1))]] = x1 + 2x0 >= x0 = [[mark#(_x0)]] [[mark#(U32(_x0))]] = x0 >= x0 = [[mark#(_x0)]] [[active(U11(tt, _x0))]] = x0 >= x0 = [[mark(U12(isNat(_x0)))]] [[active(U12(tt))]] = 0 >= 0 = [[mark(tt)]] [[active(U21(tt))]] = 1 >= 0 = [[mark(tt)]] [[active(U31(tt, _x0))]] = x0 >= x0 = [[mark(U32(isNat(_x0)))]] [[active(U32(tt))]] = 0 >= 0 = [[mark(tt)]] [[active(U41(tt, _x0))]] = x0 >= x0 = [[mark(_x0)]] [[active(U51(tt, _x0, _x1))]] = 1 + x0 + x1 >= 1 + x0 + x1 = [[mark(U52(isNat(_x1), _x0, _x1))]] [[active(U52(tt, _x0, _x1))]] = 1 + x0 + x1 >= 1 + x0 + x1 = [[mark(s(plus(_x1, _x0)))]] [[active(U61(tt))]] = 0 >= 0 = [[mark(0)]] [[active(U71(tt, _x0, _x1))]] = x0 + 3x1 + x0x1 >= x0 + 3x1 + x0x1 = [[mark(U72(isNat(_x1), _x0, _x1))]] [[active(U72(tt, _x0, _x1))]] = x0 + 3x1 + x0x1 >= x0 + 3x1 + x0x1 = [[mark(plus(x(_x1, _x0), _x1))]] [[active(isNat(0))]] = 0 >= 0 = [[mark(tt)]] [[active(isNat(plus(_x0, _x1)))]] = x0 + x1 >= x0 + x1 = [[mark(U11(isNat(_x0), _x1))]] [[active(isNat(s(_x0)))]] = 1 + x0 >= 1 + x0 = [[mark(U21(isNat(_x0)))]] [[active(isNat(x(_x0, _x1)))]] = x1 + 2x0 + x0x1 >= x1 + 2x0 = [[mark(U31(isNat(_x0), _x1))]] [[active(plus(_x0, 0))]] = x0 >= x0 = [[mark(U41(isNat(_x0), _x0))]] [[active(plus(_x0, s(_x1)))]] = 1 + x0 + x1 >= 1 + x0 + x1 = [[mark(U51(isNat(_x1), _x1, _x0))]] [[active(x(_x0, 0))]] = 2x0 >= 0 = [[mark(U61(isNat(_x0)))]] [[active(x(_x0, s(_x1)))]] = 1 + x1 + 3x0 + x0x1 >= x1 + 3x0 + x0x1 = [[mark(U71(isNat(_x1), _x1, _x0))]] [[mark(U11(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active(U11(mark(_x0), _x1))]] [[mark(tt)]] = 0 >= 0 = [[active(tt)]] [[mark(U12(_x0))]] = x0 >= x0 = [[active(U12(mark(_x0)))]] [[mark(isNat(_x0))]] = x0 >= x0 = [[active(isNat(_x0))]] [[mark(U21(_x0))]] = 1 + x0 >= 1 + x0 = [[active(U21(mark(_x0)))]] [[mark(U31(_x0, _x1))]] = x1 + 2x0 >= x1 + 2x0 = [[active(U31(mark(_x0), _x1))]] [[mark(U32(_x0))]] = x0 >= x0 = [[active(U32(mark(_x0)))]] [[mark(U41(_x0, _x1))]] = x1 >= x1 = [[active(U41(mark(_x0), _x1))]] [[mark(U51(_x0, _x1, _x2))]] = 1 + x1 + x2 >= 1 + x1 + x2 = [[active(U51(mark(_x0), _x1, _x2))]] [[mark(U52(_x0, _x1, _x2))]] = 1 + x1 + x2 >= 1 + x1 + x2 = [[active(U52(mark(_x0), _x1, _x2))]] [[mark(s(_x0))]] = 1 + x0 >= 1 + x0 = [[active(s(mark(_x0)))]] [[mark(plus(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active(plus(mark(_x0), mark(_x1)))]] [[mark(U61(_x0))]] = 0 >= 0 = [[active(U61(mark(_x0)))]] [[mark(0)]] = 0 >= 0 = [[active(0)]] [[mark(U71(_x0, _x1, _x2))]] = x1 + 3x2 + x1x2 >= x1 + 3x2 + x1x2 = [[active(U71(mark(_x0), _x1, _x2))]] [[mark(U72(_x0, _x1, _x2))]] = x1 + 3x2 + x1x2 >= x1 + 3x2 + x1x2 = [[active(U72(mark(_x0), _x1, _x2))]] [[mark(x(_x0, _x1))]] = x1 + 2x0 + x0x1 >= x1 + 2x0 + x0x1 = [[active(x(mark(_x0), mark(_x1)))]] [[U11(mark(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U11(_x0, _x1)]] [[U11(_x0, mark(_x1))]] = x0 + x1 >= x0 + x1 = [[U11(_x0, _x1)]] [[U11(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U11(_x0, _x1)]] [[U11(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U11(_x0, _x1)]] [[U12(mark(_x0))]] = x0 >= x0 = [[U12(_x0)]] [[U12(active(_x0))]] = x0 >= x0 = [[U12(_x0)]] [[isNat(mark(_x0))]] = x0 >= x0 = [[isNat(_x0)]] [[isNat(active(_x0))]] = x0 >= x0 = [[isNat(_x0)]] [[U21(mark(_x0))]] = 1 + x0 >= 1 + x0 = [[U21(_x0)]] [[U21(active(_x0))]] = 1 + x0 >= 1 + x0 = [[U21(_x0)]] [[U31(mark(_x0), _x1)]] = x1 + 2x0 >= x1 + 2x0 = [[U31(_x0, _x1)]] [[U31(_x0, mark(_x1))]] = x1 + 2x0 >= x1 + 2x0 = [[U31(_x0, _x1)]] [[U31(active(_x0), _x1)]] = x1 + 2x0 >= x1 + 2x0 = [[U31(_x0, _x1)]] [[U31(_x0, active(_x1))]] = x1 + 2x0 >= x1 + 2x0 = [[U31(_x0, _x1)]] [[U32(mark(_x0))]] = x0 >= x0 = [[U32(_x0)]] [[U32(active(_x0))]] = x0 >= x0 = [[U32(_x0)]] [[s(mark(_x0))]] = 1 + x0 >= 1 + x0 = [[s(_x0)]] [[s(active(_x0))]] = 1 + x0 >= 1 + x0 = [[s(_x0)]] [[plus(mark(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[plus(_x0, _x1)]] [[plus(_x0, mark(_x1))]] = x0 + x1 >= x0 + x1 = [[plus(_x0, _x1)]] [[plus(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[plus(_x0, _x1)]] [[plus(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[plus(_x0, _x1)]] [[x(mark(_x0), _x1)]] = x1 + 2x0 + x0x1 >= x1 + 2x0 + x0x1 = [[x(_x0, _x1)]] [[x(_x0, mark(_x1))]] = x1 + 2x0 + x0x1 >= x1 + 2x0 + x0x1 = [[x(_x0, _x1)]] [[x(active(_x0), _x1)]] = x1 + 2x0 + x0x1 >= x1 + 2x0 + x0x1 = [[x(_x0, _x1)]] [[x(_x0, active(_x1))]] = x1 + 2x0 + x0x1 >= x1 + 2x0 + x0x1 = [[x(_x0, _x1)]] By the observations in [Kop12, Sec. 6.6], this reduction pair suffices; we may thus replace the dependency pair problem (P_48, R_5, minimal, formative) by (P_49, R_5, minimal, formative), where P_49 consists of: active#(U11(tt, X)) =#> mark#(U12(isNat(X))) active#(U31(tt, X)) =#> mark#(U32(isNat(X))) active#(isNat(plus(X, Y))) =#> mark#(U11(isNat(X), Y)) active#(isNat(s(X))) =#> mark#(U21(isNat(X))) active#(isNat(x(X, Y))) =#> mark#(U31(isNat(X), Y)) mark#(U11(X, Y)) =#> active#(U11(mark(X), Y)) mark#(U11(X, Y)) =#> mark#(X) mark#(U12(X)) =#> mark#(X) mark#(isNat(X)) =#> active#(isNat(X)) mark#(U31(X, Y)) =#> active#(U31(mark(X), Y)) mark#(U31(X, Y)) =#> mark#(X) mark#(U32(X)) =#> mark#(X) Thus, the original system is terminating if (P_49, R_5, minimal, formative) is finite. We consider the dependency pair problem (P_49, R_5, minimal, formative). We place the elements of P in a dependency graph approximation G (see e.g. [Kop12, Thm. 7.27, 7.29], as follows: * 0 : 7 * 1 : 11 * 2 : 5, 6 * 3 : * 4 : 9, 10 * 5 : 0 * 6 : 5, 6, 7, 8, 9, 10, 11 * 7 : 5, 6, 7, 8, 9, 10, 11 * 8 : 2, 3, 4 * 9 : 1 * 10 : 5, 6, 7, 8, 9, 10, 11 * 11 : 5, 6, 7, 8, 9, 10, 11 This graph has the following strongly connected components: P_50: active#(U11(tt, X)) =#> mark#(U12(isNat(X))) active#(U31(tt, X)) =#> mark#(U32(isNat(X))) active#(isNat(plus(X, Y))) =#> mark#(U11(isNat(X), Y)) active#(isNat(x(X, Y))) =#> mark#(U31(isNat(X), Y)) mark#(U11(X, Y)) =#> active#(U11(mark(X), Y)) mark#(U11(X, Y)) =#> mark#(X) mark#(U12(X)) =#> mark#(X) mark#(isNat(X)) =#> active#(isNat(X)) mark#(U31(X, Y)) =#> active#(U31(mark(X), Y)) mark#(U31(X, Y)) =#> mark#(X) mark#(U32(X)) =#> mark#(X) By [Kop12, Thm. 7.31], we may replace any dependency pair problem (P_49, R_5, m, f) by (P_50, R_5, m, f). Thus, the original system is terminating if (P_50, R_5, minimal, formative) is finite. We consider the dependency pair problem (P_50, R_5, minimal, formative). The formative rules of (P_50, R_5) are R_6 ::= active(U11(tt, X)) => mark(U12(isNat(X))) active(U12(tt)) => mark(tt) active(U21(tt)) => mark(tt) active(U31(tt, X)) => mark(U32(isNat(X))) active(U32(tt)) => mark(tt) active(U41(tt, X)) => mark(X) active(U51(tt, X, Y)) => mark(U52(isNat(Y), X, Y)) active(U52(tt, X, Y)) => mark(s(plus(Y, X))) active(U61(tt)) => mark(0) active(U71(tt, X, Y)) => mark(U72(isNat(Y), X, Y)) active(U72(tt, X, Y)) => mark(plus(x(Y, X), Y)) active(isNat(0)) => mark(tt) active(isNat(plus(X, Y))) => mark(U11(isNat(X), Y)) active(isNat(s(X))) => mark(U21(isNat(X))) active(isNat(x(X, Y))) => mark(U31(isNat(X), Y)) active(plus(X, 0)) => mark(U41(isNat(X), X)) active(plus(X, s(Y))) => mark(U51(isNat(Y), Y, X)) active(x(X, 0)) => mark(U61(isNat(X))) active(x(X, s(Y))) => mark(U71(isNat(Y), Y, X)) mark(U11(X, Y)) => active(U11(mark(X), Y)) mark(tt) => active(tt) mark(U12(X)) => active(U12(mark(X))) mark(isNat(X)) => active(isNat(X)) mark(U21(X)) => active(U21(mark(X))) mark(U31(X, Y)) => active(U31(mark(X), Y)) mark(U32(X)) => active(U32(mark(X))) mark(U41(X, Y)) => active(U41(mark(X), Y)) mark(U51(X, Y, Z)) => active(U51(mark(X), Y, Z)) mark(U52(X, Y, Z)) => active(U52(mark(X), Y, Z)) mark(s(X)) => active(s(mark(X))) mark(plus(X, Y)) => active(plus(mark(X), mark(Y))) mark(U61(X)) => active(U61(mark(X))) mark(0) => active(0) mark(U71(X, Y, Z)) => active(U71(mark(X), Y, Z)) mark(U72(X, Y, Z)) => active(U72(mark(X), Y, Z)) mark(x(X, Y)) => active(x(mark(X), mark(Y))) U11(mark(X), Y) => U11(X, Y) U11(X, mark(Y)) => U11(X, Y) U11(active(X), Y) => U11(X, Y) U11(X, active(Y)) => U11(X, Y) U12(mark(X)) => U12(X) U12(active(X)) => U12(X) isNat(mark(X)) => isNat(X) isNat(active(X)) => isNat(X) U31(mark(X), Y) => U31(X, Y) U31(X, mark(Y)) => U31(X, Y) U31(active(X), Y) => U31(X, Y) U31(X, active(Y)) => U31(X, Y) U32(mark(X)) => U32(X) U32(active(X)) => U32(X) plus(mark(X), Y) => plus(X, Y) plus(X, mark(Y)) => plus(X, Y) plus(active(X), Y) => plus(X, Y) plus(X, active(Y)) => plus(X, Y) x(mark(X), Y) => x(X, Y) x(X, mark(Y)) => x(X, Y) x(active(X), Y) => x(X, Y) x(X, active(Y)) => x(X, Y) By [Kop12, Thm. 7.17], we may replace the dependency pair problem (P_50, R_5, minimal, formative) by (P_50, R_6, minimal, formative). Thus, the original system is terminating if (P_50, R_6, minimal, formative) is finite. We consider the dependency pair problem (P_50, R_6, minimal, formative). We will use the reduction pair processor [Kop12, Thm. 7.16]. It suffices to find a standard reduction pair [Kop12, Def. 6.69]. Thus, we must orient: active#(U11(tt, X)) >? mark#(U12(isNat(X))) active#(U31(tt, X)) >? mark#(U32(isNat(X))) active#(isNat(plus(X, Y))) >? mark#(U11(isNat(X), Y)) active#(isNat(x(X, Y))) >? mark#(U31(isNat(X), Y)) mark#(U11(X, Y)) >? active#(U11(mark(X), Y)) mark#(U11(X, Y)) >? mark#(X) mark#(U12(X)) >? mark#(X) mark#(isNat(X)) >? active#(isNat(X)) mark#(U31(X, Y)) >? active#(U31(mark(X), Y)) mark#(U31(X, Y)) >? mark#(X) mark#(U32(X)) >? mark#(X) active(U11(tt, X)) >= mark(U12(isNat(X))) active(U12(tt)) >= mark(tt) active(U21(tt)) >= mark(tt) active(U31(tt, X)) >= mark(U32(isNat(X))) active(U32(tt)) >= mark(tt) active(U41(tt, X)) >= mark(X) active(U51(tt, X, Y)) >= mark(U52(isNat(Y), X, Y)) active(U52(tt, X, Y)) >= mark(s(plus(Y, X))) active(U61(tt)) >= mark(0) active(U71(tt, X, Y)) >= mark(U72(isNat(Y), X, Y)) active(U72(tt, X, Y)) >= mark(plus(x(Y, X), Y)) active(isNat(0)) >= mark(tt) active(isNat(plus(X, Y))) >= mark(U11(isNat(X), Y)) active(isNat(s(X))) >= mark(U21(isNat(X))) active(isNat(x(X, Y))) >= mark(U31(isNat(X), Y)) active(plus(X, 0)) >= mark(U41(isNat(X), X)) active(plus(X, s(Y))) >= mark(U51(isNat(Y), Y, X)) active(x(X, 0)) >= mark(U61(isNat(X))) active(x(X, s(Y))) >= mark(U71(isNat(Y), Y, X)) mark(U11(X, Y)) >= active(U11(mark(X), Y)) mark(tt) >= active(tt) mark(U12(X)) >= active(U12(mark(X))) mark(isNat(X)) >= active(isNat(X)) mark(U21(X)) >= active(U21(mark(X))) mark(U31(X, Y)) >= active(U31(mark(X), Y)) mark(U32(X)) >= active(U32(mark(X))) mark(U41(X, Y)) >= active(U41(mark(X), Y)) mark(U51(X, Y, Z)) >= active(U51(mark(X), Y, Z)) mark(U52(X, Y, Z)) >= active(U52(mark(X), Y, Z)) mark(s(X)) >= active(s(mark(X))) mark(plus(X, Y)) >= active(plus(mark(X), mark(Y))) mark(U61(X)) >= active(U61(mark(X))) mark(0) >= active(0) mark(U71(X, Y, Z)) >= active(U71(mark(X), Y, Z)) mark(U72(X, Y, Z)) >= active(U72(mark(X), Y, Z)) mark(x(X, Y)) >= active(x(mark(X), mark(Y))) U11(mark(X), Y) >= U11(X, Y) U11(X, mark(Y)) >= U11(X, Y) U11(active(X), Y) >= U11(X, Y) U11(X, active(Y)) >= U11(X, Y) U12(mark(X)) >= U12(X) U12(active(X)) >= U12(X) isNat(mark(X)) >= isNat(X) isNat(active(X)) >= isNat(X) U31(mark(X), Y) >= U31(X, Y) U31(X, mark(Y)) >= U31(X, Y) U31(active(X), Y) >= U31(X, Y) U31(X, active(Y)) >= U31(X, Y) U32(mark(X)) >= U32(X) U32(active(X)) >= U32(X) plus(mark(X), Y) >= plus(X, Y) plus(X, mark(Y)) >= plus(X, Y) plus(active(X), Y) >= plus(X, Y) plus(X, active(Y)) >= plus(X, Y) x(mark(X), Y) >= x(X, Y) x(X, mark(Y)) >= x(X, Y) x(active(X), Y) >= x(X, Y) x(X, active(Y)) >= x(X, Y) We orient these requirements with a polynomial interpretation in the natural numbers. The following interpretation satisfies the requirements: 0 = 0 U11 = \y0y1.y0 + y1 U12 = \y0.y0 U21 = \y0.0 U31 = \y0y1.y1 + 2y0 U32 = \y0.y0 U41 = \y0y1.y1 U51 = \y0y1y2.1 + y1 + y2 U52 = \y0y1y2.1 + y1 + y2 U61 = \y0.0 U71 = \y0y1y2.2 + y1 + 3y2 + y1y2 U72 = \y0y1y2.2 + y1 + 3y2 + y1y2 active = \y0.y0 active# = \y0.y0 isNat = \y0.y0 mark = \y0.y0 mark# = \y0.y0 plus = \y0y1.y0 + y1 s = \y0.1 + y0 tt = 0 x = \y0y1.2 + y1 + 2y0 + y0y1 Using this interpretation, the requirements translate to: [[active#(U11(tt, _x0))]] = x0 >= x0 = [[mark#(U12(isNat(_x0)))]] [[active#(U31(tt, _x0))]] = x0 >= x0 = [[mark#(U32(isNat(_x0)))]] [[active#(isNat(plus(_x0, _x1)))]] = x0 + x1 >= x0 + x1 = [[mark#(U11(isNat(_x0), _x1))]] [[active#(isNat(x(_x0, _x1)))]] = 2 + x1 + 2x0 + x0x1 > x1 + 2x0 = [[mark#(U31(isNat(_x0), _x1))]] [[mark#(U11(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active#(U11(mark(_x0), _x1))]] [[mark#(U11(_x0, _x1))]] = x0 + x1 >= x0 = [[mark#(_x0)]] [[mark#(U12(_x0))]] = x0 >= x0 = [[mark#(_x0)]] [[mark#(isNat(_x0))]] = x0 >= x0 = [[active#(isNat(_x0))]] [[mark#(U31(_x0, _x1))]] = x1 + 2x0 >= x1 + 2x0 = [[active#(U31(mark(_x0), _x1))]] [[mark#(U31(_x0, _x1))]] = x1 + 2x0 >= x0 = [[mark#(_x0)]] [[mark#(U32(_x0))]] = x0 >= x0 = [[mark#(_x0)]] [[active(U11(tt, _x0))]] = x0 >= x0 = [[mark(U12(isNat(_x0)))]] [[active(U12(tt))]] = 0 >= 0 = [[mark(tt)]] [[active(U21(tt))]] = 0 >= 0 = [[mark(tt)]] [[active(U31(tt, _x0))]] = x0 >= x0 = [[mark(U32(isNat(_x0)))]] [[active(U32(tt))]] = 0 >= 0 = [[mark(tt)]] [[active(U41(tt, _x0))]] = x0 >= x0 = [[mark(_x0)]] [[active(U51(tt, _x0, _x1))]] = 1 + x0 + x1 >= 1 + x0 + x1 = [[mark(U52(isNat(_x1), _x0, _x1))]] [[active(U52(tt, _x0, _x1))]] = 1 + x0 + x1 >= 1 + x0 + x1 = [[mark(s(plus(_x1, _x0)))]] [[active(U61(tt))]] = 0 >= 0 = [[mark(0)]] [[active(U71(tt, _x0, _x1))]] = 2 + x0 + 3x1 + x0x1 >= 2 + x0 + 3x1 + x0x1 = [[mark(U72(isNat(_x1), _x0, _x1))]] [[active(U72(tt, _x0, _x1))]] = 2 + x0 + 3x1 + x0x1 >= 2 + x0 + 3x1 + x0x1 = [[mark(plus(x(_x1, _x0), _x1))]] [[active(isNat(0))]] = 0 >= 0 = [[mark(tt)]] [[active(isNat(plus(_x0, _x1)))]] = x0 + x1 >= x0 + x1 = [[mark(U11(isNat(_x0), _x1))]] [[active(isNat(s(_x0)))]] = 1 + x0 >= 0 = [[mark(U21(isNat(_x0)))]] [[active(isNat(x(_x0, _x1)))]] = 2 + x1 + 2x0 + x0x1 >= x1 + 2x0 = [[mark(U31(isNat(_x0), _x1))]] [[active(plus(_x0, 0))]] = x0 >= x0 = [[mark(U41(isNat(_x0), _x0))]] [[active(plus(_x0, s(_x1)))]] = 1 + x0 + x1 >= 1 + x0 + x1 = [[mark(U51(isNat(_x1), _x1, _x0))]] [[active(x(_x0, 0))]] = 2 + 2x0 >= 0 = [[mark(U61(isNat(_x0)))]] [[active(x(_x0, s(_x1)))]] = 3 + x1 + 3x0 + x0x1 >= 2 + x1 + 3x0 + x0x1 = [[mark(U71(isNat(_x1), _x1, _x0))]] [[mark(U11(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active(U11(mark(_x0), _x1))]] [[mark(tt)]] = 0 >= 0 = [[active(tt)]] [[mark(U12(_x0))]] = x0 >= x0 = [[active(U12(mark(_x0)))]] [[mark(isNat(_x0))]] = x0 >= x0 = [[active(isNat(_x0))]] [[mark(U21(_x0))]] = 0 >= 0 = [[active(U21(mark(_x0)))]] [[mark(U31(_x0, _x1))]] = x1 + 2x0 >= x1 + 2x0 = [[active(U31(mark(_x0), _x1))]] [[mark(U32(_x0))]] = x0 >= x0 = [[active(U32(mark(_x0)))]] [[mark(U41(_x0, _x1))]] = x1 >= x1 = [[active(U41(mark(_x0), _x1))]] [[mark(U51(_x0, _x1, _x2))]] = 1 + x1 + x2 >= 1 + x1 + x2 = [[active(U51(mark(_x0), _x1, _x2))]] [[mark(U52(_x0, _x1, _x2))]] = 1 + x1 + x2 >= 1 + x1 + x2 = [[active(U52(mark(_x0), _x1, _x2))]] [[mark(s(_x0))]] = 1 + x0 >= 1 + x0 = [[active(s(mark(_x0)))]] [[mark(plus(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active(plus(mark(_x0), mark(_x1)))]] [[mark(U61(_x0))]] = 0 >= 0 = [[active(U61(mark(_x0)))]] [[mark(0)]] = 0 >= 0 = [[active(0)]] [[mark(U71(_x0, _x1, _x2))]] = 2 + x1 + 3x2 + x1x2 >= 2 + x1 + 3x2 + x1x2 = [[active(U71(mark(_x0), _x1, _x2))]] [[mark(U72(_x0, _x1, _x2))]] = 2 + x1 + 3x2 + x1x2 >= 2 + x1 + 3x2 + x1x2 = [[active(U72(mark(_x0), _x1, _x2))]] [[mark(x(_x0, _x1))]] = 2 + x1 + 2x0 + x0x1 >= 2 + x1 + 2x0 + x0x1 = [[active(x(mark(_x0), mark(_x1)))]] [[U11(mark(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U11(_x0, _x1)]] [[U11(_x0, mark(_x1))]] = x0 + x1 >= x0 + x1 = [[U11(_x0, _x1)]] [[U11(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U11(_x0, _x1)]] [[U11(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U11(_x0, _x1)]] [[U12(mark(_x0))]] = x0 >= x0 = [[U12(_x0)]] [[U12(active(_x0))]] = x0 >= x0 = [[U12(_x0)]] [[isNat(mark(_x0))]] = x0 >= x0 = [[isNat(_x0)]] [[isNat(active(_x0))]] = x0 >= x0 = [[isNat(_x0)]] [[U31(mark(_x0), _x1)]] = x1 + 2x0 >= x1 + 2x0 = [[U31(_x0, _x1)]] [[U31(_x0, mark(_x1))]] = x1 + 2x0 >= x1 + 2x0 = [[U31(_x0, _x1)]] [[U31(active(_x0), _x1)]] = x1 + 2x0 >= x1 + 2x0 = [[U31(_x0, _x1)]] [[U31(_x0, active(_x1))]] = x1 + 2x0 >= x1 + 2x0 = [[U31(_x0, _x1)]] [[U32(mark(_x0))]] = x0 >= x0 = [[U32(_x0)]] [[U32(active(_x0))]] = x0 >= x0 = [[U32(_x0)]] [[plus(mark(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[plus(_x0, _x1)]] [[plus(_x0, mark(_x1))]] = x0 + x1 >= x0 + x1 = [[plus(_x0, _x1)]] [[plus(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[plus(_x0, _x1)]] [[plus(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[plus(_x0, _x1)]] [[x(mark(_x0), _x1)]] = 2 + x1 + 2x0 + x0x1 >= 2 + x1 + 2x0 + x0x1 = [[x(_x0, _x1)]] [[x(_x0, mark(_x1))]] = 2 + x1 + 2x0 + x0x1 >= 2 + x1 + 2x0 + x0x1 = [[x(_x0, _x1)]] [[x(active(_x0), _x1)]] = 2 + x1 + 2x0 + x0x1 >= 2 + x1 + 2x0 + x0x1 = [[x(_x0, _x1)]] [[x(_x0, active(_x1))]] = 2 + x1 + 2x0 + x0x1 >= 2 + x1 + 2x0 + x0x1 = [[x(_x0, _x1)]] By the observations in [Kop12, Sec. 6.6], this reduction pair suffices; we may thus replace the dependency pair problem (P_50, R_6, minimal, formative) by (P_51, R_6, minimal, formative), where P_51 consists of: active#(U11(tt, X)) =#> mark#(U12(isNat(X))) active#(U31(tt, X)) =#> mark#(U32(isNat(X))) active#(isNat(plus(X, Y))) =#> mark#(U11(isNat(X), Y)) mark#(U11(X, Y)) =#> active#(U11(mark(X), Y)) mark#(U11(X, Y)) =#> mark#(X) mark#(U12(X)) =#> mark#(X) mark#(isNat(X)) =#> active#(isNat(X)) mark#(U31(X, Y)) =#> active#(U31(mark(X), Y)) mark#(U31(X, Y)) =#> mark#(X) mark#(U32(X)) =#> mark#(X) Thus, the original system is terminating if (P_51, R_6, minimal, formative) is finite. We consider the dependency pair problem (P_51, R_6, minimal, formative). The formative rules of (P_51, R_6) are R_7 ::= active(U11(tt, X)) => mark(U12(isNat(X))) active(U12(tt)) => mark(tt) active(U21(tt)) => mark(tt) active(U31(tt, X)) => mark(U32(isNat(X))) active(U32(tt)) => mark(tt) active(U41(tt, X)) => mark(X) active(U51(tt, X, Y)) => mark(U52(isNat(Y), X, Y)) active(U52(tt, X, Y)) => mark(s(plus(Y, X))) active(U61(tt)) => mark(0) active(U71(tt, X, Y)) => mark(U72(isNat(Y), X, Y)) active(U72(tt, X, Y)) => mark(plus(x(Y, X), Y)) active(isNat(0)) => mark(tt) active(isNat(plus(X, Y))) => mark(U11(isNat(X), Y)) active(isNat(s(X))) => mark(U21(isNat(X))) active(isNat(x(X, Y))) => mark(U31(isNat(X), Y)) active(plus(X, 0)) => mark(U41(isNat(X), X)) active(plus(X, s(Y))) => mark(U51(isNat(Y), Y, X)) active(x(X, 0)) => mark(U61(isNat(X))) active(x(X, s(Y))) => mark(U71(isNat(Y), Y, X)) mark(U11(X, Y)) => active(U11(mark(X), Y)) mark(tt) => active(tt) mark(U12(X)) => active(U12(mark(X))) mark(isNat(X)) => active(isNat(X)) mark(U21(X)) => active(U21(mark(X))) mark(U31(X, Y)) => active(U31(mark(X), Y)) mark(U32(X)) => active(U32(mark(X))) mark(U41(X, Y)) => active(U41(mark(X), Y)) mark(U51(X, Y, Z)) => active(U51(mark(X), Y, Z)) mark(U52(X, Y, Z)) => active(U52(mark(X), Y, Z)) mark(s(X)) => active(s(mark(X))) mark(plus(X, Y)) => active(plus(mark(X), mark(Y))) mark(U61(X)) => active(U61(mark(X))) mark(0) => active(0) mark(U71(X, Y, Z)) => active(U71(mark(X), Y, Z)) mark(U72(X, Y, Z)) => active(U72(mark(X), Y, Z)) mark(x(X, Y)) => active(x(mark(X), mark(Y))) U11(mark(X), Y) => U11(X, Y) U11(X, mark(Y)) => U11(X, Y) U11(active(X), Y) => U11(X, Y) U11(X, active(Y)) => U11(X, Y) U12(mark(X)) => U12(X) U12(active(X)) => U12(X) isNat(mark(X)) => isNat(X) isNat(active(X)) => isNat(X) U31(mark(X), Y) => U31(X, Y) U31(X, mark(Y)) => U31(X, Y) U31(active(X), Y) => U31(X, Y) U31(X, active(Y)) => U31(X, Y) U32(mark(X)) => U32(X) U32(active(X)) => U32(X) plus(mark(X), Y) => plus(X, Y) plus(X, mark(Y)) => plus(X, Y) plus(active(X), Y) => plus(X, Y) plus(X, active(Y)) => plus(X, Y) By [Kop12, Thm. 7.17], we may replace the dependency pair problem (P_51, R_6, minimal, formative) by (P_51, R_7, minimal, formative). Thus, the original system is terminating if (P_51, R_7, minimal, formative) is finite. We consider the dependency pair problem (P_51, R_7, minimal, formative). We will use the reduction pair processor [Kop12, Thm. 7.16]. It suffices to find a standard reduction pair [Kop12, Def. 6.69]. Thus, we must orient: active#(U11(tt, X)) >? mark#(U12(isNat(X))) active#(U31(tt, X)) >? mark#(U32(isNat(X))) active#(isNat(plus(X, Y))) >? mark#(U11(isNat(X), Y)) mark#(U11(X, Y)) >? active#(U11(mark(X), Y)) mark#(U11(X, Y)) >? mark#(X) mark#(U12(X)) >? mark#(X) mark#(isNat(X)) >? active#(isNat(X)) mark#(U31(X, Y)) >? active#(U31(mark(X), Y)) mark#(U31(X, Y)) >? mark#(X) mark#(U32(X)) >? mark#(X) active(U11(tt, X)) >= mark(U12(isNat(X))) active(U12(tt)) >= mark(tt) active(U21(tt)) >= mark(tt) active(U31(tt, X)) >= mark(U32(isNat(X))) active(U32(tt)) >= mark(tt) active(U41(tt, X)) >= mark(X) active(U51(tt, X, Y)) >= mark(U52(isNat(Y), X, Y)) active(U52(tt, X, Y)) >= mark(s(plus(Y, X))) active(U61(tt)) >= mark(0) active(U71(tt, X, Y)) >= mark(U72(isNat(Y), X, Y)) active(U72(tt, X, Y)) >= mark(plus(x(Y, X), Y)) active(isNat(0)) >= mark(tt) active(isNat(plus(X, Y))) >= mark(U11(isNat(X), Y)) active(isNat(s(X))) >= mark(U21(isNat(X))) active(isNat(x(X, Y))) >= mark(U31(isNat(X), Y)) active(plus(X, 0)) >= mark(U41(isNat(X), X)) active(plus(X, s(Y))) >= mark(U51(isNat(Y), Y, X)) active(x(X, 0)) >= mark(U61(isNat(X))) active(x(X, s(Y))) >= mark(U71(isNat(Y), Y, X)) mark(U11(X, Y)) >= active(U11(mark(X), Y)) mark(tt) >= active(tt) mark(U12(X)) >= active(U12(mark(X))) mark(isNat(X)) >= active(isNat(X)) mark(U21(X)) >= active(U21(mark(X))) mark(U31(X, Y)) >= active(U31(mark(X), Y)) mark(U32(X)) >= active(U32(mark(X))) mark(U41(X, Y)) >= active(U41(mark(X), Y)) mark(U51(X, Y, Z)) >= active(U51(mark(X), Y, Z)) mark(U52(X, Y, Z)) >= active(U52(mark(X), Y, Z)) mark(s(X)) >= active(s(mark(X))) mark(plus(X, Y)) >= active(plus(mark(X), mark(Y))) mark(U61(X)) >= active(U61(mark(X))) mark(0) >= active(0) mark(U71(X, Y, Z)) >= active(U71(mark(X), Y, Z)) mark(U72(X, Y, Z)) >= active(U72(mark(X), Y, Z)) mark(x(X, Y)) >= active(x(mark(X), mark(Y))) U11(mark(X), Y) >= U11(X, Y) U11(X, mark(Y)) >= U11(X, Y) U11(active(X), Y) >= U11(X, Y) U11(X, active(Y)) >= U11(X, Y) U12(mark(X)) >= U12(X) U12(active(X)) >= U12(X) isNat(mark(X)) >= isNat(X) isNat(active(X)) >= isNat(X) U31(mark(X), Y) >= U31(X, Y) U31(X, mark(Y)) >= U31(X, Y) U31(active(X), Y) >= U31(X, Y) U31(X, active(Y)) >= U31(X, Y) U32(mark(X)) >= U32(X) U32(active(X)) >= U32(X) plus(mark(X), Y) >= plus(X, Y) plus(X, mark(Y)) >= plus(X, Y) plus(active(X), Y) >= plus(X, Y) plus(X, active(Y)) >= plus(X, Y) We orient these requirements with a polynomial interpretation in the natural numbers. We consider usable_rules with respect to the following argument filtering: active#(x_1) = active#() This leaves the following ordering requirements: active#(U11(tt, X)) >= mark#(U12(isNat(X))) active#(U31(tt, X)) >= mark#(U32(isNat(X))) active#(isNat(plus(X, Y))) >= mark#(U11(isNat(X), Y)) mark#(U11(X, Y)) >= active#(U11(mark(X), Y)) mark#(U11(X, Y)) >= mark#(X) mark#(U12(X)) >= mark#(X) mark#(isNat(X)) >= active#(isNat(X)) mark#(U31(X, Y)) > active#(U31(mark(X), Y)) mark#(U31(X, Y)) >= mark#(X) mark#(U32(X)) >= mark#(X) U11(mark(X), Y) >= U11(X, Y) U11(X, mark(Y)) >= U11(X, Y) U11(active(X), Y) >= U11(X, Y) U11(X, active(Y)) >= U11(X, Y) U12(mark(X)) >= U12(X) U12(active(X)) >= U12(X) isNat(mark(X)) >= isNat(X) isNat(active(X)) >= isNat(X) U32(mark(X)) >= U32(X) U32(active(X)) >= U32(X) The following interpretation satisfies the requirements: 0 = 0 U11 = \y0y1.y0 U12 = \y0.2y0 U21 = \y0.0 U31 = \y0y1.1 + y0 U32 = \y0.y0 U41 = \y0y1.0 U51 = \y0y1y2.0 U52 = \y0y1y2.0 U61 = \y0.0 U71 = \y0y1y2.1 U72 = \y0y1y2.0 active = \y0.y0 active# = \y0.0 isNat = \y0.0 mark = \y0.3 + y0 mark# = \y0.y0 plus = \y0y1.0 s = \y0.0 tt = 0 x = \y0y1.0 Using this interpretation, the requirements translate to: [[active#(U11(tt, _x0))]] = 0 >= 0 = [[mark#(U12(isNat(_x0)))]] [[active#(U31(tt, _x0))]] = 0 >= 0 = [[mark#(U32(isNat(_x0)))]] [[active#(isNat(plus(_x0, _x1)))]] = 0 >= 0 = [[mark#(U11(isNat(_x0), _x1))]] [[mark#(U11(_x0, _x1))]] = x0 >= 0 = [[active#(U11(mark(_x0), _x1))]] [[mark#(U11(_x0, _x1))]] = x0 >= x0 = [[mark#(_x0)]] [[mark#(U12(_x0))]] = 2x0 >= x0 = [[mark#(_x0)]] [[mark#(isNat(_x0))]] = 0 >= 0 = [[active#(isNat(_x0))]] [[mark#(U31(_x0, _x1))]] = 1 + x0 > 0 = [[active#(U31(mark(_x0), _x1))]] [[mark#(U31(_x0, _x1))]] = 1 + x0 > x0 = [[mark#(_x0)]] [[mark#(U32(_x0))]] = x0 >= x0 = [[mark#(_x0)]] [[U11(mark(_x0), _x1)]] = 3 + x0 >= x0 = [[U11(_x0, _x1)]] [[U11(_x0, mark(_x1))]] = x0 >= x0 = [[U11(_x0, _x1)]] [[U11(active(_x0), _x1)]] = x0 >= x0 = [[U11(_x0, _x1)]] [[U11(_x0, active(_x1))]] = x0 >= x0 = [[U11(_x0, _x1)]] [[U12(mark(_x0))]] = 6 + 2x0 >= 2x0 = [[U12(_x0)]] [[U12(active(_x0))]] = 2x0 >= 2x0 = [[U12(_x0)]] [[isNat(mark(_x0))]] = 0 >= 0 = [[isNat(_x0)]] [[isNat(active(_x0))]] = 0 >= 0 = [[isNat(_x0)]] [[U32(mark(_x0))]] = 3 + x0 >= x0 = [[U32(_x0)]] [[U32(active(_x0))]] = x0 >= x0 = [[U32(_x0)]] By the observations in [Kop12, Sec. 6.6], this reduction pair suffices; we may thus replace the dependency pair problem (P_51, R_7, minimal, formative) by (P_52, R_7, minimal, formative), where P_52 consists of: active#(U11(tt, X)) =#> mark#(U12(isNat(X))) active#(U31(tt, X)) =#> mark#(U32(isNat(X))) active#(isNat(plus(X, Y))) =#> mark#(U11(isNat(X), Y)) mark#(U11(X, Y)) =#> active#(U11(mark(X), Y)) mark#(U11(X, Y)) =#> mark#(X) mark#(U12(X)) =#> mark#(X) mark#(isNat(X)) =#> active#(isNat(X)) mark#(U32(X)) =#> mark#(X) Thus, the original system is terminating if (P_52, R_7, minimal, formative) is finite. We consider the dependency pair problem (P_52, R_7, minimal, formative). We place the elements of P in a dependency graph approximation G (see e.g. [Kop12, Thm. 7.27, 7.29], as follows: * 0 : 5 * 1 : 7 * 2 : 3, 4 * 3 : 0 * 4 : 3, 4, 5, 6, 7 * 5 : 3, 4, 5, 6, 7 * 6 : 2 * 7 : 3, 4, 5, 6, 7 This graph has the following strongly connected components: P_53: active#(U11(tt, X)) =#> mark#(U12(isNat(X))) active#(isNat(plus(X, Y))) =#> mark#(U11(isNat(X), Y)) mark#(U11(X, Y)) =#> active#(U11(mark(X), Y)) mark#(U11(X, Y)) =#> mark#(X) mark#(U12(X)) =#> mark#(X) mark#(isNat(X)) =#> active#(isNat(X)) mark#(U32(X)) =#> mark#(X) By [Kop12, Thm. 7.31], we may replace any dependency pair problem (P_52, R_7, m, f) by (P_53, R_7, m, f). Thus, the original system is terminating if (P_53, R_7, minimal, formative) is finite. We consider the dependency pair problem (P_53, R_7, minimal, formative). The formative rules of (P_53, R_7) are R_8 ::= active(U11(tt, X)) => mark(U12(isNat(X))) active(U12(tt)) => mark(tt) active(U21(tt)) => mark(tt) active(U31(tt, X)) => mark(U32(isNat(X))) active(U32(tt)) => mark(tt) active(U41(tt, X)) => mark(X) active(U51(tt, X, Y)) => mark(U52(isNat(Y), X, Y)) active(U52(tt, X, Y)) => mark(s(plus(Y, X))) active(U61(tt)) => mark(0) active(U71(tt, X, Y)) => mark(U72(isNat(Y), X, Y)) active(U72(tt, X, Y)) => mark(plus(x(Y, X), Y)) active(isNat(0)) => mark(tt) active(isNat(plus(X, Y))) => mark(U11(isNat(X), Y)) active(isNat(s(X))) => mark(U21(isNat(X))) active(isNat(x(X, Y))) => mark(U31(isNat(X), Y)) active(plus(X, 0)) => mark(U41(isNat(X), X)) active(plus(X, s(Y))) => mark(U51(isNat(Y), Y, X)) active(x(X, 0)) => mark(U61(isNat(X))) active(x(X, s(Y))) => mark(U71(isNat(Y), Y, X)) mark(U11(X, Y)) => active(U11(mark(X), Y)) mark(tt) => active(tt) mark(U12(X)) => active(U12(mark(X))) mark(isNat(X)) => active(isNat(X)) mark(U21(X)) => active(U21(mark(X))) mark(U31(X, Y)) => active(U31(mark(X), Y)) mark(U32(X)) => active(U32(mark(X))) mark(U41(X, Y)) => active(U41(mark(X), Y)) mark(U51(X, Y, Z)) => active(U51(mark(X), Y, Z)) mark(U52(X, Y, Z)) => active(U52(mark(X), Y, Z)) mark(s(X)) => active(s(mark(X))) mark(plus(X, Y)) => active(plus(mark(X), mark(Y))) mark(U61(X)) => active(U61(mark(X))) mark(0) => active(0) mark(U71(X, Y, Z)) => active(U71(mark(X), Y, Z)) mark(U72(X, Y, Z)) => active(U72(mark(X), Y, Z)) mark(x(X, Y)) => active(x(mark(X), mark(Y))) U11(mark(X), Y) => U11(X, Y) U11(X, mark(Y)) => U11(X, Y) U11(active(X), Y) => U11(X, Y) U11(X, active(Y)) => U11(X, Y) U12(mark(X)) => U12(X) U12(active(X)) => U12(X) isNat(mark(X)) => isNat(X) isNat(active(X)) => isNat(X) U32(mark(X)) => U32(X) U32(active(X)) => U32(X) plus(mark(X), Y) => plus(X, Y) plus(X, mark(Y)) => plus(X, Y) plus(active(X), Y) => plus(X, Y) plus(X, active(Y)) => plus(X, Y) By [Kop12, Thm. 7.17], we may replace the dependency pair problem (P_53, R_7, minimal, formative) by (P_53, R_8, minimal, formative). Thus, the original system is terminating if (P_53, R_8, minimal, formative) is finite. We consider the dependency pair problem (P_53, R_8, minimal, formative). We will use the reduction pair processor [Kop12, Thm. 7.16]. It suffices to find a standard reduction pair [Kop12, Def. 6.69]. Thus, we must orient: active#(U11(tt, X)) >? mark#(U12(isNat(X))) active#(isNat(plus(X, Y))) >? mark#(U11(isNat(X), Y)) mark#(U11(X, Y)) >? active#(U11(mark(X), Y)) mark#(U11(X, Y)) >? mark#(X) mark#(U12(X)) >? mark#(X) mark#(isNat(X)) >? active#(isNat(X)) mark#(U32(X)) >? mark#(X) active(U11(tt, X)) >= mark(U12(isNat(X))) active(U12(tt)) >= mark(tt) active(U21(tt)) >= mark(tt) active(U31(tt, X)) >= mark(U32(isNat(X))) active(U32(tt)) >= mark(tt) active(U41(tt, X)) >= mark(X) active(U51(tt, X, Y)) >= mark(U52(isNat(Y), X, Y)) active(U52(tt, X, Y)) >= mark(s(plus(Y, X))) active(U61(tt)) >= mark(0) active(U71(tt, X, Y)) >= mark(U72(isNat(Y), X, Y)) active(U72(tt, X, Y)) >= mark(plus(x(Y, X), Y)) active(isNat(0)) >= mark(tt) active(isNat(plus(X, Y))) >= mark(U11(isNat(X), Y)) active(isNat(s(X))) >= mark(U21(isNat(X))) active(isNat(x(X, Y))) >= mark(U31(isNat(X), Y)) active(plus(X, 0)) >= mark(U41(isNat(X), X)) active(plus(X, s(Y))) >= mark(U51(isNat(Y), Y, X)) active(x(X, 0)) >= mark(U61(isNat(X))) active(x(X, s(Y))) >= mark(U71(isNat(Y), Y, X)) mark(U11(X, Y)) >= active(U11(mark(X), Y)) mark(tt) >= active(tt) mark(U12(X)) >= active(U12(mark(X))) mark(isNat(X)) >= active(isNat(X)) mark(U21(X)) >= active(U21(mark(X))) mark(U31(X, Y)) >= active(U31(mark(X), Y)) mark(U32(X)) >= active(U32(mark(X))) mark(U41(X, Y)) >= active(U41(mark(X), Y)) mark(U51(X, Y, Z)) >= active(U51(mark(X), Y, Z)) mark(U52(X, Y, Z)) >= active(U52(mark(X), Y, Z)) mark(s(X)) >= active(s(mark(X))) mark(plus(X, Y)) >= active(plus(mark(X), mark(Y))) mark(U61(X)) >= active(U61(mark(X))) mark(0) >= active(0) mark(U71(X, Y, Z)) >= active(U71(mark(X), Y, Z)) mark(U72(X, Y, Z)) >= active(U72(mark(X), Y, Z)) mark(x(X, Y)) >= active(x(mark(X), mark(Y))) U11(mark(X), Y) >= U11(X, Y) U11(X, mark(Y)) >= U11(X, Y) U11(active(X), Y) >= U11(X, Y) U11(X, active(Y)) >= U11(X, Y) U12(mark(X)) >= U12(X) U12(active(X)) >= U12(X) isNat(mark(X)) >= isNat(X) isNat(active(X)) >= isNat(X) U32(mark(X)) >= U32(X) U32(active(X)) >= U32(X) plus(mark(X), Y) >= plus(X, Y) plus(X, mark(Y)) >= plus(X, Y) plus(active(X), Y) >= plus(X, Y) plus(X, active(Y)) >= plus(X, Y) We orient these requirements with a polynomial interpretation in the natural numbers. We consider usable_rules with respect to the following argument filtering: active#(x_1) = active#() This leaves the following ordering requirements: active#(U11(tt, X)) >= mark#(U12(isNat(X))) active#(isNat(plus(X, Y))) >= mark#(U11(isNat(X), Y)) mark#(U11(X, Y)) >= active#(U11(mark(X), Y)) mark#(U11(X, Y)) >= mark#(X) mark#(U12(X)) >= mark#(X) mark#(isNat(X)) >= active#(isNat(X)) mark#(U32(X)) > mark#(X) U11(mark(X), Y) >= U11(X, Y) U11(X, mark(Y)) >= U11(X, Y) U11(active(X), Y) >= U11(X, Y) U11(X, active(Y)) >= U11(X, Y) U12(mark(X)) >= U12(X) U12(active(X)) >= U12(X) isNat(mark(X)) >= isNat(X) isNat(active(X)) >= isNat(X) The following interpretation satisfies the requirements: 0 = 0 U11 = \y0y1.y0 U12 = \y0.2y0 U21 = \y0.0 U31 = \y0y1.0 U32 = \y0.2 + 2y0 U41 = \y0y1.0 U51 = \y0y1y2.0 U52 = \y0y1y2.0 U61 = \y0.0 U71 = \y0y1y2.0 U72 = \y0y1y2.0 active = \y0.2y0 active# = \y0.0 isNat = \y0.0 mark = \y0.y0 mark# = \y0.y0 plus = \y0y1.0 s = \y0.0 tt = 0 x = \y0y1.0 Using this interpretation, the requirements translate to: [[active#(U11(tt, _x0))]] = 0 >= 0 = [[mark#(U12(isNat(_x0)))]] [[active#(isNat(plus(_x0, _x1)))]] = 0 >= 0 = [[mark#(U11(isNat(_x0), _x1))]] [[mark#(U11(_x0, _x1))]] = x0 >= 0 = [[active#(U11(mark(_x0), _x1))]] [[mark#(U11(_x0, _x1))]] = x0 >= x0 = [[mark#(_x0)]] [[mark#(U12(_x0))]] = 2x0 >= x0 = [[mark#(_x0)]] [[mark#(isNat(_x0))]] = 0 >= 0 = [[active#(isNat(_x0))]] [[mark#(U32(_x0))]] = 2 + 2x0 > x0 = [[mark#(_x0)]] [[U11(mark(_x0), _x1)]] = x0 >= x0 = [[U11(_x0, _x1)]] [[U11(_x0, mark(_x1))]] = x0 >= x0 = [[U11(_x0, _x1)]] [[U11(active(_x0), _x1)]] = 2x0 >= x0 = [[U11(_x0, _x1)]] [[U11(_x0, active(_x1))]] = x0 >= x0 = [[U11(_x0, _x1)]] [[U12(mark(_x0))]] = 2x0 >= 2x0 = [[U12(_x0)]] [[U12(active(_x0))]] = 4x0 >= 2x0 = [[U12(_x0)]] [[isNat(mark(_x0))]] = 0 >= 0 = [[isNat(_x0)]] [[isNat(active(_x0))]] = 0 >= 0 = [[isNat(_x0)]] By the observations in [Kop12, Sec. 6.6], this reduction pair suffices; we may thus replace the dependency pair problem (P_53, R_8, minimal, formative) by (P_54, R_8, minimal, formative), where P_54 consists of: active#(U11(tt, X)) =#> mark#(U12(isNat(X))) active#(isNat(plus(X, Y))) =#> mark#(U11(isNat(X), Y)) mark#(U11(X, Y)) =#> active#(U11(mark(X), Y)) mark#(U11(X, Y)) =#> mark#(X) mark#(U12(X)) =#> mark#(X) mark#(isNat(X)) =#> active#(isNat(X)) Thus, the original system is terminating if (P_54, R_8, minimal, formative) is finite. We consider the dependency pair problem (P_54, R_8, minimal, formative). The formative rules of (P_54, R_8) are R_9 ::= active(U11(tt, X)) => mark(U12(isNat(X))) active(U12(tt)) => mark(tt) active(U21(tt)) => mark(tt) active(U31(tt, X)) => mark(U32(isNat(X))) active(U32(tt)) => mark(tt) active(U41(tt, X)) => mark(X) active(U51(tt, X, Y)) => mark(U52(isNat(Y), X, Y)) active(U52(tt, X, Y)) => mark(s(plus(Y, X))) active(U61(tt)) => mark(0) active(U71(tt, X, Y)) => mark(U72(isNat(Y), X, Y)) active(U72(tt, X, Y)) => mark(plus(x(Y, X), Y)) active(isNat(0)) => mark(tt) active(isNat(plus(X, Y))) => mark(U11(isNat(X), Y)) active(isNat(s(X))) => mark(U21(isNat(X))) active(isNat(x(X, Y))) => mark(U31(isNat(X), Y)) active(plus(X, 0)) => mark(U41(isNat(X), X)) active(plus(X, s(Y))) => mark(U51(isNat(Y), Y, X)) active(x(X, 0)) => mark(U61(isNat(X))) active(x(X, s(Y))) => mark(U71(isNat(Y), Y, X)) mark(U11(X, Y)) => active(U11(mark(X), Y)) mark(tt) => active(tt) mark(U12(X)) => active(U12(mark(X))) mark(isNat(X)) => active(isNat(X)) mark(U21(X)) => active(U21(mark(X))) mark(U31(X, Y)) => active(U31(mark(X), Y)) mark(U32(X)) => active(U32(mark(X))) mark(U41(X, Y)) => active(U41(mark(X), Y)) mark(U51(X, Y, Z)) => active(U51(mark(X), Y, Z)) mark(U52(X, Y, Z)) => active(U52(mark(X), Y, Z)) mark(s(X)) => active(s(mark(X))) mark(plus(X, Y)) => active(plus(mark(X), mark(Y))) mark(U61(X)) => active(U61(mark(X))) mark(0) => active(0) mark(U71(X, Y, Z)) => active(U71(mark(X), Y, Z)) mark(U72(X, Y, Z)) => active(U72(mark(X), Y, Z)) mark(x(X, Y)) => active(x(mark(X), mark(Y))) U11(mark(X), Y) => U11(X, Y) U11(X, mark(Y)) => U11(X, Y) U11(active(X), Y) => U11(X, Y) U11(X, active(Y)) => U11(X, Y) U12(mark(X)) => U12(X) U12(active(X)) => U12(X) isNat(mark(X)) => isNat(X) isNat(active(X)) => isNat(X) plus(mark(X), Y) => plus(X, Y) plus(X, mark(Y)) => plus(X, Y) plus(active(X), Y) => plus(X, Y) plus(X, active(Y)) => plus(X, Y) By [Kop12, Thm. 7.17], we may replace the dependency pair problem (P_54, R_8, minimal, formative) by (P_54, R_9, minimal, formative). Thus, the original system is terminating if (P_54, R_9, minimal, formative) is finite. We consider the dependency pair problem (P_54, R_9, minimal, formative). We will use the reduction pair processor [Kop12, Thm. 7.16]. It suffices to find a standard reduction pair [Kop12, Def. 6.69]. Thus, we must orient: active#(U11(tt, X)) >? mark#(U12(isNat(X))) active#(isNat(plus(X, Y))) >? mark#(U11(isNat(X), Y)) mark#(U11(X, Y)) >? active#(U11(mark(X), Y)) mark#(U11(X, Y)) >? mark#(X) mark#(U12(X)) >? mark#(X) mark#(isNat(X)) >? active#(isNat(X)) active(U11(tt, X)) >= mark(U12(isNat(X))) active(U12(tt)) >= mark(tt) active(U21(tt)) >= mark(tt) active(U31(tt, X)) >= mark(U32(isNat(X))) active(U32(tt)) >= mark(tt) active(U41(tt, X)) >= mark(X) active(U51(tt, X, Y)) >= mark(U52(isNat(Y), X, Y)) active(U52(tt, X, Y)) >= mark(s(plus(Y, X))) active(U61(tt)) >= mark(0) active(U71(tt, X, Y)) >= mark(U72(isNat(Y), X, Y)) active(U72(tt, X, Y)) >= mark(plus(x(Y, X), Y)) active(isNat(0)) >= mark(tt) active(isNat(plus(X, Y))) >= mark(U11(isNat(X), Y)) active(isNat(s(X))) >= mark(U21(isNat(X))) active(isNat(x(X, Y))) >= mark(U31(isNat(X), Y)) active(plus(X, 0)) >= mark(U41(isNat(X), X)) active(plus(X, s(Y))) >= mark(U51(isNat(Y), Y, X)) active(x(X, 0)) >= mark(U61(isNat(X))) active(x(X, s(Y))) >= mark(U71(isNat(Y), Y, X)) mark(U11(X, Y)) >= active(U11(mark(X), Y)) mark(tt) >= active(tt) mark(U12(X)) >= active(U12(mark(X))) mark(isNat(X)) >= active(isNat(X)) mark(U21(X)) >= active(U21(mark(X))) mark(U31(X, Y)) >= active(U31(mark(X), Y)) mark(U32(X)) >= active(U32(mark(X))) mark(U41(X, Y)) >= active(U41(mark(X), Y)) mark(U51(X, Y, Z)) >= active(U51(mark(X), Y, Z)) mark(U52(X, Y, Z)) >= active(U52(mark(X), Y, Z)) mark(s(X)) >= active(s(mark(X))) mark(plus(X, Y)) >= active(plus(mark(X), mark(Y))) mark(U61(X)) >= active(U61(mark(X))) mark(0) >= active(0) mark(U71(X, Y, Z)) >= active(U71(mark(X), Y, Z)) mark(U72(X, Y, Z)) >= active(U72(mark(X), Y, Z)) mark(x(X, Y)) >= active(x(mark(X), mark(Y))) U11(mark(X), Y) >= U11(X, Y) U11(X, mark(Y)) >= U11(X, Y) U11(active(X), Y) >= U11(X, Y) U11(X, active(Y)) >= U11(X, Y) U12(mark(X)) >= U12(X) U12(active(X)) >= U12(X) isNat(mark(X)) >= isNat(X) isNat(active(X)) >= isNat(X) plus(mark(X), Y) >= plus(X, Y) plus(X, mark(Y)) >= plus(X, Y) plus(active(X), Y) >= plus(X, Y) plus(X, active(Y)) >= plus(X, Y) We orient these requirements with a polynomial interpretation in the natural numbers. The following interpretation satisfies the requirements: 0 = 0 U11 = \y0y1.y0 + y1 U12 = \y0.y0 U21 = \y0.0 U31 = \y0y1.0 U32 = \y0.0 U41 = \y0y1.y1 U51 = \y0y1y2.3 + y1 + y2 U52 = \y0y1y2.3 + y1 + y2 U61 = \y0.0 U71 = \y0y1y2.1 + 2y1 + 2y2 + y1y2 U72 = \y0y1y2.1 + y2 + 2y1 + y1y2 active = \y0.y0 active# = \y0.y0 isNat = \y0.y0 mark = \y0.y0 mark# = \y0.y0 plus = \y0y1.1 + y0 + y1 s = \y0.2 + y0 tt = 0 x = \y0y1.2y1 + y0y1 Using this interpretation, the requirements translate to: [[active#(U11(tt, _x0))]] = x0 >= x0 = [[mark#(U12(isNat(_x0)))]] [[active#(isNat(plus(_x0, _x1)))]] = 1 + x0 + x1 > x0 + x1 = [[mark#(U11(isNat(_x0), _x1))]] [[mark#(U11(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active#(U11(mark(_x0), _x1))]] [[mark#(U11(_x0, _x1))]] = x0 + x1 >= x0 = [[mark#(_x0)]] [[mark#(U12(_x0))]] = x0 >= x0 = [[mark#(_x0)]] [[mark#(isNat(_x0))]] = x0 >= x0 = [[active#(isNat(_x0))]] [[active(U11(tt, _x0))]] = x0 >= x0 = [[mark(U12(isNat(_x0)))]] [[active(U12(tt))]] = 0 >= 0 = [[mark(tt)]] [[active(U21(tt))]] = 0 >= 0 = [[mark(tt)]] [[active(U31(tt, _x0))]] = 0 >= 0 = [[mark(U32(isNat(_x0)))]] [[active(U32(tt))]] = 0 >= 0 = [[mark(tt)]] [[active(U41(tt, _x0))]] = x0 >= x0 = [[mark(_x0)]] [[active(U51(tt, _x0, _x1))]] = 3 + x0 + x1 >= 3 + x0 + x1 = [[mark(U52(isNat(_x1), _x0, _x1))]] [[active(U52(tt, _x0, _x1))]] = 3 + x0 + x1 >= 3 + x0 + x1 = [[mark(s(plus(_x1, _x0)))]] [[active(U61(tt))]] = 0 >= 0 = [[mark(0)]] [[active(U71(tt, _x0, _x1))]] = 1 + 2x0 + 2x1 + x0x1 >= 1 + x1 + 2x0 + x0x1 = [[mark(U72(isNat(_x1), _x0, _x1))]] [[active(U72(tt, _x0, _x1))]] = 1 + x1 + 2x0 + x0x1 >= 1 + x1 + 2x0 + x0x1 = [[mark(plus(x(_x1, _x0), _x1))]] [[active(isNat(0))]] = 0 >= 0 = [[mark(tt)]] [[active(isNat(plus(_x0, _x1)))]] = 1 + x0 + x1 >= x0 + x1 = [[mark(U11(isNat(_x0), _x1))]] [[active(isNat(s(_x0)))]] = 2 + x0 >= 0 = [[mark(U21(isNat(_x0)))]] [[active(isNat(x(_x0, _x1)))]] = 2x1 + x0x1 >= 0 = [[mark(U31(isNat(_x0), _x1))]] [[active(plus(_x0, 0))]] = 1 + x0 >= x0 = [[mark(U41(isNat(_x0), _x0))]] [[active(plus(_x0, s(_x1)))]] = 3 + x0 + x1 >= 3 + x0 + x1 = [[mark(U51(isNat(_x1), _x1, _x0))]] [[active(x(_x0, 0))]] = 0 >= 0 = [[mark(U61(isNat(_x0)))]] [[active(x(_x0, s(_x1)))]] = 4 + 2x0 + 2x1 + x0x1 >= 1 + 2x0 + 2x1 + x0x1 = [[mark(U71(isNat(_x1), _x1, _x0))]] [[mark(U11(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[active(U11(mark(_x0), _x1))]] [[mark(tt)]] = 0 >= 0 = [[active(tt)]] [[mark(U12(_x0))]] = x0 >= x0 = [[active(U12(mark(_x0)))]] [[mark(isNat(_x0))]] = x0 >= x0 = [[active(isNat(_x0))]] [[mark(U21(_x0))]] = 0 >= 0 = [[active(U21(mark(_x0)))]] [[mark(U31(_x0, _x1))]] = 0 >= 0 = [[active(U31(mark(_x0), _x1))]] [[mark(U32(_x0))]] = 0 >= 0 = [[active(U32(mark(_x0)))]] [[mark(U41(_x0, _x1))]] = x1 >= x1 = [[active(U41(mark(_x0), _x1))]] [[mark(U51(_x0, _x1, _x2))]] = 3 + x1 + x2 >= 3 + x1 + x2 = [[active(U51(mark(_x0), _x1, _x2))]] [[mark(U52(_x0, _x1, _x2))]] = 3 + x1 + x2 >= 3 + x1 + x2 = [[active(U52(mark(_x0), _x1, _x2))]] [[mark(s(_x0))]] = 2 + x0 >= 2 + x0 = [[active(s(mark(_x0)))]] [[mark(plus(_x0, _x1))]] = 1 + x0 + x1 >= 1 + x0 + x1 = [[active(plus(mark(_x0), mark(_x1)))]] [[mark(U61(_x0))]] = 0 >= 0 = [[active(U61(mark(_x0)))]] [[mark(0)]] = 0 >= 0 = [[active(0)]] [[mark(U71(_x0, _x1, _x2))]] = 1 + 2x1 + 2x2 + x1x2 >= 1 + 2x1 + 2x2 + x1x2 = [[active(U71(mark(_x0), _x1, _x2))]] [[mark(U72(_x0, _x1, _x2))]] = 1 + x2 + 2x1 + x1x2 >= 1 + x2 + 2x1 + x1x2 = [[active(U72(mark(_x0), _x1, _x2))]] [[mark(x(_x0, _x1))]] = 2x1 + x0x1 >= 2x1 + x0x1 = [[active(x(mark(_x0), mark(_x1)))]] [[U11(mark(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U11(_x0, _x1)]] [[U11(_x0, mark(_x1))]] = x0 + x1 >= x0 + x1 = [[U11(_x0, _x1)]] [[U11(active(_x0), _x1)]] = x0 + x1 >= x0 + x1 = [[U11(_x0, _x1)]] [[U11(_x0, active(_x1))]] = x0 + x1 >= x0 + x1 = [[U11(_x0, _x1)]] [[U12(mark(_x0))]] = x0 >= x0 = [[U12(_x0)]] [[U12(active(_x0))]] = x0 >= x0 = [[U12(_x0)]] [[isNat(mark(_x0))]] = x0 >= x0 = [[isNat(_x0)]] [[isNat(active(_x0))]] = x0 >= x0 = [[isNat(_x0)]] [[plus(mark(_x0), _x1)]] = 1 + x0 + x1 >= 1 + x0 + x1 = [[plus(_x0, _x1)]] [[plus(_x0, mark(_x1))]] = 1 + x0 + x1 >= 1 + x0 + x1 = [[plus(_x0, _x1)]] [[plus(active(_x0), _x1)]] = 1 + x0 + x1 >= 1 + x0 + x1 = [[plus(_x0, _x1)]] [[plus(_x0, active(_x1))]] = 1 + x0 + x1 >= 1 + x0 + x1 = [[plus(_x0, _x1)]] By the observations in [Kop12, Sec. 6.6], this reduction pair suffices; we may thus replace the dependency pair problem (P_54, R_9, minimal, formative) by (P_55, R_9, minimal, formative), where P_55 consists of: active#(U11(tt, X)) =#> mark#(U12(isNat(X))) mark#(U11(X, Y)) =#> active#(U11(mark(X), Y)) mark#(U11(X, Y)) =#> mark#(X) mark#(U12(X)) =#> mark#(X) mark#(isNat(X)) =#> active#(isNat(X)) Thus, the original system is terminating if (P_55, R_9, minimal, formative) is finite. We consider the dependency pair problem (P_55, R_9, minimal, formative). We place the elements of P in a dependency graph approximation G (see e.g. [Kop12, Thm. 7.27, 7.29], as follows: * 0 : 3 * 1 : 0 * 2 : 1, 2, 3, 4 * 3 : 1, 2, 3, 4 * 4 : This graph has the following strongly connected components: P_56: active#(U11(tt, X)) =#> mark#(U12(isNat(X))) mark#(U11(X, Y)) =#> active#(U11(mark(X), Y)) mark#(U11(X, Y)) =#> mark#(X) mark#(U12(X)) =#> mark#(X) By [Kop12, Thm. 7.31], we may replace any dependency pair problem (P_55, R_9, m, f) by (P_56, R_9, m, f). Thus, the original system is terminating if (P_56, R_9, minimal, formative) is finite. We consider the dependency pair problem (P_56, R_9, minimal, formative). The formative rules of (P_56, R_9) are R_10 ::= active(U11(tt, X)) => mark(U12(isNat(X))) active(U12(tt)) => mark(tt) active(U21(tt)) => mark(tt) active(U31(tt, X)) => mark(U32(isNat(X))) active(U32(tt)) => mark(tt) active(U41(tt, X)) => mark(X) active(U51(tt, X, Y)) => mark(U52(isNat(Y), X, Y)) active(U52(tt, X, Y)) => mark(s(plus(Y, X))) active(U61(tt)) => mark(0) active(U71(tt, X, Y)) => mark(U72(isNat(Y), X, Y)) active(U72(tt, X, Y)) => mark(plus(x(Y, X), Y)) active(isNat(0)) => mark(tt) active(isNat(plus(X, Y))) => mark(U11(isNat(X), Y)) active(isNat(s(X))) => mark(U21(isNat(X))) active(isNat(x(X, Y))) => mark(U31(isNat(X), Y)) active(plus(X, 0)) => mark(U41(isNat(X), X)) active(plus(X, s(Y))) => mark(U51(isNat(Y), Y, X)) active(x(X, 0)) => mark(U61(isNat(X))) active(x(X, s(Y))) => mark(U71(isNat(Y), Y, X)) mark(U11(X, Y)) => active(U11(mark(X), Y)) mark(tt) => active(tt) mark(U12(X)) => active(U12(mark(X))) mark(isNat(X)) => active(isNat(X)) mark(U21(X)) => active(U21(mark(X))) mark(U31(X, Y)) => active(U31(mark(X), Y)) mark(U32(X)) => active(U32(mark(X))) mark(U41(X, Y)) => active(U41(mark(X), Y)) mark(U51(X, Y, Z)) => active(U51(mark(X), Y, Z)) mark(U52(X, Y, Z)) => active(U52(mark(X), Y, Z)) mark(s(X)) => active(s(mark(X))) mark(plus(X, Y)) => active(plus(mark(X), mark(Y))) mark(U61(X)) => active(U61(mark(X))) mark(0) => active(0) mark(U71(X, Y, Z)) => active(U71(mark(X), Y, Z)) mark(U72(X, Y, Z)) => active(U72(mark(X), Y, Z)) mark(x(X, Y)) => active(x(mark(X), mark(Y))) U11(mark(X), Y) => U11(X, Y) U11(X, mark(Y)) => U11(X, Y) U11(active(X), Y) => U11(X, Y) U11(X, active(Y)) => U11(X, Y) U12(mark(X)) => U12(X) U12(active(X)) => U12(X) By [Kop12, Thm. 7.17], we may replace the dependency pair problem (P_56, R_9, minimal, formative) by (P_56, R_10, minimal, formative). Thus, the original system is terminating if (P_56, R_10, minimal, formative) is finite. We consider the dependency pair problem (P_56, R_10, minimal, formative). We will use the reduction pair processor [Kop12, Thm. 7.16]. It suffices to find a standard reduction pair [Kop12, Def. 6.69]. Thus, we must orient: active#(U11(tt, X)) >? mark#(U12(isNat(X))) mark#(U11(X, Y)) >? active#(U11(mark(X), Y)) mark#(U11(X, Y)) >? mark#(X) mark#(U12(X)) >? mark#(X) active(U11(tt, X)) >= mark(U12(isNat(X))) active(U12(tt)) >= mark(tt) active(U21(tt)) >= mark(tt) active(U31(tt, X)) >= mark(U32(isNat(X))) active(U32(tt)) >= mark(tt) active(U41(tt, X)) >= mark(X) active(U51(tt, X, Y)) >= mark(U52(isNat(Y), X, Y)) active(U52(tt, X, Y)) >= mark(s(plus(Y, X))) active(U61(tt)) >= mark(0) active(U71(tt, X, Y)) >= mark(U72(isNat(Y), X, Y)) active(U72(tt, X, Y)) >= mark(plus(x(Y, X), Y)) active(isNat(0)) >= mark(tt) active(isNat(plus(X, Y))) >= mark(U11(isNat(X), Y)) active(isNat(s(X))) >= mark(U21(isNat(X))) active(isNat(x(X, Y))) >= mark(U31(isNat(X), Y)) active(plus(X, 0)) >= mark(U41(isNat(X), X)) active(plus(X, s(Y))) >= mark(U51(isNat(Y), Y, X)) active(x(X, 0)) >= mark(U61(isNat(X))) active(x(X, s(Y))) >= mark(U71(isNat(Y), Y, X)) mark(U11(X, Y)) >= active(U11(mark(X), Y)) mark(tt) >= active(tt) mark(U12(X)) >= active(U12(mark(X))) mark(isNat(X)) >= active(isNat(X)) mark(U21(X)) >= active(U21(mark(X))) mark(U31(X, Y)) >= active(U31(mark(X), Y)) mark(U32(X)) >= active(U32(mark(X))) mark(U41(X, Y)) >= active(U41(mark(X), Y)) mark(U51(X, Y, Z)) >= active(U51(mark(X), Y, Z)) mark(U52(X, Y, Z)) >= active(U52(mark(X), Y, Z)) mark(s(X)) >= active(s(mark(X))) mark(plus(X, Y)) >= active(plus(mark(X), mark(Y))) mark(U61(X)) >= active(U61(mark(X))) mark(0) >= active(0) mark(U71(X, Y, Z)) >= active(U71(mark(X), Y, Z)) mark(U72(X, Y, Z)) >= active(U72(mark(X), Y, Z)) mark(x(X, Y)) >= active(x(mark(X), mark(Y))) U11(mark(X), Y) >= U11(X, Y) U11(X, mark(Y)) >= U11(X, Y) U11(active(X), Y) >= U11(X, Y) U11(X, active(Y)) >= U11(X, Y) U12(mark(X)) >= U12(X) U12(active(X)) >= U12(X) We orient these requirements with a polynomial interpretation in the natural numbers. We consider usable_rules with respect to the following argument filtering: active#(x_1) = active#() This leaves the following ordering requirements: active#(U11(tt, X)) > mark#(U12(isNat(X))) mark#(U11(X, Y)) >= active#(U11(mark(X), Y)) mark#(U11(X, Y)) >= mark#(X) mark#(U12(X)) >= mark#(X) The following interpretation satisfies the requirements: 0 = 0 U11 = \y0y1.3 + 3y0 + 3y1 U12 = \y0.y0 U21 = \y0.0 U31 = \y0y1.0 U32 = \y0.0 U41 = \y0y1.0 U51 = \y0y1y2.0 U52 = \y0y1y2.0 U61 = \y0.0 U71 = \y0y1y2.0 U72 = \y0y1y2.0 active = \y0.0 active# = \y0.1 isNat = \y0.0 mark = \y0.0 mark# = \y0.3y0 plus = \y0y1.0 s = \y0.0 tt = 0 x = \y0y1.0 Using this interpretation, the requirements translate to: [[active#(U11(tt, _x0))]] = 1 > 0 = [[mark#(U12(isNat(_x0)))]] [[mark#(U11(_x0, _x1))]] = 9 + 9x0 + 9x1 > 1 = [[active#(U11(mark(_x0), _x1))]] [[mark#(U11(_x0, _x1))]] = 9 + 9x0 + 9x1 > 3x0 = [[mark#(_x0)]] [[mark#(U12(_x0))]] = 3x0 >= 3x0 = [[mark#(_x0)]] By the observations in [Kop12, Sec. 6.6], this reduction pair suffices; we may thus replace the dependency pair problem (P_56, R_10, minimal, formative) by (P_57, R_10, minimal, formative), where P_57 consists of: mark#(U12(X)) =#> mark#(X) Thus, the original system is terminating if (P_57, R_10, minimal, formative) is finite. We consider the dependency pair problem (P_57, R_10, minimal, formative). We apply the subterm criterion with the following projection function: nu(mark#) = 1 Thus, we can orient the dependency pairs as follows: nu(mark#(U12(X))) = U12(X) |> X = nu(mark#(X)) By [Kop12, Thm. 7.35], we may replace a dependency pair problem (P_57, R_10, minimal, f) by ({}, R_10, minimal, f). By the empty set processor [Kop12, Thm. 7.15] this problem may be immediately removed. As all dependency pair problems were succesfully simplified with sound (and complete) processors until nothing remained, we conclude termination. +++ Citations +++ [Kop12] C. Kop. Higher Order Termination. PhD Thesis, 2012. [KusIsoSakBla09] K. Kusakari, Y. Isogai, M. Sakai, and F. Blanqui. Static Dependency Pair Method Based On Strong Computability for Higher-Order Rewrite Systems. In volume 92(10) of IEICE Transactions on Information and Systems. 2007--2015, 2009.