/export/starexec/sandbox/solver/bin/starexec_run_FirstOrder /export/starexec/sandbox/benchmark/theBenchmark.xml /export/starexec/sandbox/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] --> o U12 : [o * o * o] --> o U13 : [o * o * o] --> o U14 : [o * o * o] --> o U15 : [o * o] --> o U16 : [o] --> o U21 : [o * o] --> o U22 : [o * o] --> o U23 : [o] --> o U31 : [o * o] --> o U32 : [o] --> o U41 : [o] --> o U51 : [o * o] --> o U52 : [o * o] --> o U61 : [o * o * o] --> o U62 : [o * o * o] --> o U63 : [o * o * o] --> o U64 : [o * o * o] --> o a!6220!6220U11 : [o * o * o] --> o a!6220!6220U12 : [o * o * o] --> o a!6220!6220U13 : [o * o * o] --> o a!6220!6220U14 : [o * o * o] --> o a!6220!6220U15 : [o * o] --> o a!6220!6220U16 : [o] --> o a!6220!6220U21 : [o * o] --> o a!6220!6220U22 : [o * o] --> o a!6220!6220U23 : [o] --> o a!6220!6220U31 : [o * o] --> o a!6220!6220U32 : [o] --> o a!6220!6220U41 : [o] --> o a!6220!6220U51 : [o * o] --> o a!6220!6220U52 : [o * o] --> o a!6220!6220U61 : [o * o * o] --> o a!6220!6220U62 : [o * o * o] --> o a!6220!6220U63 : [o * o * o] --> o a!6220!6220U64 : [o * o * o] --> o a!6220!6220isNat : [o] --> o a!6220!6220isNatKind : [o] --> o a!6220!6220plus : [o * o] --> o isNat : [o] --> o isNatKind : [o] --> o mark : [o] --> o plus : [o * o] --> o s : [o] --> o tt : [] --> o a!6220!6220U11(tt, X, Y) => a!6220!6220U12(a!6220!6220isNatKind(X), X, Y) a!6220!6220U12(tt, X, Y) => a!6220!6220U13(a!6220!6220isNatKind(Y), X, Y) a!6220!6220U13(tt, X, Y) => a!6220!6220U14(a!6220!6220isNatKind(Y), X, Y) a!6220!6220U14(tt, X, Y) => a!6220!6220U15(a!6220!6220isNat(X), Y) a!6220!6220U15(tt, X) => a!6220!6220U16(a!6220!6220isNat(X)) a!6220!6220U16(tt) => tt a!6220!6220U21(tt, X) => a!6220!6220U22(a!6220!6220isNatKind(X), X) a!6220!6220U22(tt, X) => a!6220!6220U23(a!6220!6220isNat(X)) a!6220!6220U23(tt) => tt a!6220!6220U31(tt, X) => a!6220!6220U32(a!6220!6220isNatKind(X)) a!6220!6220U32(tt) => tt a!6220!6220U41(tt) => tt a!6220!6220U51(tt, X) => a!6220!6220U52(a!6220!6220isNatKind(X), X) a!6220!6220U52(tt, X) => mark(X) a!6220!6220U61(tt, X, Y) => a!6220!6220U62(a!6220!6220isNatKind(X), X, Y) a!6220!6220U62(tt, X, Y) => a!6220!6220U63(a!6220!6220isNat(Y), X, Y) a!6220!6220U63(tt, X, Y) => a!6220!6220U64(a!6220!6220isNatKind(Y), X, Y) a!6220!6220U64(tt, X, Y) => s(a!6220!6220plus(mark(Y), mark(X))) a!6220!6220isNat(0) => tt a!6220!6220isNat(plus(X, Y)) => a!6220!6220U11(a!6220!6220isNatKind(X), X, Y) a!6220!6220isNat(s(X)) => a!6220!6220U21(a!6220!6220isNatKind(X), X) a!6220!6220isNatKind(0) => tt a!6220!6220isNatKind(plus(X, Y)) => a!6220!6220U31(a!6220!6220isNatKind(X), Y) a!6220!6220isNatKind(s(X)) => a!6220!6220U41(a!6220!6220isNatKind(X)) a!6220!6220plus(X, 0) => a!6220!6220U51(a!6220!6220isNat(X), X) a!6220!6220plus(X, s(Y)) => a!6220!6220U61(a!6220!6220isNat(Y), Y, X) mark(U11(X, Y, Z)) => a!6220!6220U11(mark(X), Y, Z) mark(U12(X, Y, Z)) => a!6220!6220U12(mark(X), Y, Z) mark(isNatKind(X)) => a!6220!6220isNatKind(X) mark(U13(X, Y, Z)) => a!6220!6220U13(mark(X), Y, Z) mark(U14(X, Y, Z)) => a!6220!6220U14(mark(X), Y, Z) mark(U15(X, Y)) => a!6220!6220U15(mark(X), Y) mark(isNat(X)) => a!6220!6220isNat(X) mark(U16(X)) => a!6220!6220U16(mark(X)) mark(U21(X, Y)) => a!6220!6220U21(mark(X), Y) mark(U22(X, Y)) => a!6220!6220U22(mark(X), Y) mark(U23(X)) => a!6220!6220U23(mark(X)) mark(U31(X, Y)) => a!6220!6220U31(mark(X), Y) mark(U32(X)) => a!6220!6220U32(mark(X)) mark(U41(X)) => a!6220!6220U41(mark(X)) mark(U51(X, Y)) => a!6220!6220U51(mark(X), Y) mark(U52(X, Y)) => a!6220!6220U52(mark(X), Y) mark(U61(X, Y, Z)) => a!6220!6220U61(mark(X), Y, Z) mark(U62(X, Y, Z)) => a!6220!6220U62(mark(X), Y, Z) mark(U63(X, Y, Z)) => a!6220!6220U63(mark(X), Y, Z) mark(U64(X, Y, Z)) => a!6220!6220U64(mark(X), Y, Z) mark(plus(X, Y)) => a!6220!6220plus(mark(X), mark(Y)) mark(tt) => tt mark(s(X)) => s(mark(X)) mark(0) => 0 a!6220!6220U11(X, Y, Z) => U11(X, Y, Z) a!6220!6220U12(X, Y, Z) => U12(X, Y, Z) a!6220!6220isNatKind(X) => isNatKind(X) a!6220!6220U13(X, Y, Z) => U13(X, Y, Z) a!6220!6220U14(X, Y, Z) => U14(X, Y, Z) a!6220!6220U15(X, Y) => U15(X, Y) a!6220!6220isNat(X) => isNat(X) a!6220!6220U16(X) => U16(X) a!6220!6220U21(X, Y) => U21(X, Y) a!6220!6220U22(X, Y) => U22(X, Y) a!6220!6220U23(X) => U23(X) a!6220!6220U31(X, Y) => U31(X, Y) a!6220!6220U32(X) => U32(X) a!6220!6220U41(X) => U41(X) a!6220!6220U51(X, Y) => U51(X, Y) a!6220!6220U52(X, Y) => U52(X, Y) a!6220!6220U61(X, Y, Z) => U61(X, Y, Z) a!6220!6220U62(X, Y, Z) => U62(X, Y, Z) a!6220!6220U63(X, Y, Z) => U63(X, Y, Z) a!6220!6220U64(X, Y, Z) => U64(X, Y, Z) a!6220!6220plus(X, Y) => plus(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] a!6220!6220U11#(tt, X, Y) =#> a!6220!6220U12#(a!6220!6220isNatKind(X), X, Y) 1] a!6220!6220U11#(tt, X, Y) =#> a!6220!6220isNatKind#(X) 2] a!6220!6220U12#(tt, X, Y) =#> a!6220!6220U13#(a!6220!6220isNatKind(Y), X, Y) 3] a!6220!6220U12#(tt, X, Y) =#> a!6220!6220isNatKind#(Y) 4] a!6220!6220U13#(tt, X, Y) =#> a!6220!6220U14#(a!6220!6220isNatKind(Y), X, Y) 5] a!6220!6220U13#(tt, X, Y) =#> a!6220!6220isNatKind#(Y) 6] a!6220!6220U14#(tt, X, Y) =#> a!6220!6220U15#(a!6220!6220isNat(X), Y) 7] a!6220!6220U14#(tt, X, Y) =#> a!6220!6220isNat#(X) 8] a!6220!6220U15#(tt, X) =#> a!6220!6220U16#(a!6220!6220isNat(X)) 9] a!6220!6220U15#(tt, X) =#> a!6220!6220isNat#(X) 10] a!6220!6220U21#(tt, X) =#> a!6220!6220U22#(a!6220!6220isNatKind(X), X) 11] a!6220!6220U21#(tt, X) =#> a!6220!6220isNatKind#(X) 12] a!6220!6220U22#(tt, X) =#> a!6220!6220U23#(a!6220!6220isNat(X)) 13] a!6220!6220U22#(tt, X) =#> a!6220!6220isNat#(X) 14] a!6220!6220U31#(tt, X) =#> a!6220!6220U32#(a!6220!6220isNatKind(X)) 15] a!6220!6220U31#(tt, X) =#> a!6220!6220isNatKind#(X) 16] a!6220!6220U51#(tt, X) =#> a!6220!6220U52#(a!6220!6220isNatKind(X), X) 17] a!6220!6220U51#(tt, X) =#> a!6220!6220isNatKind#(X) 18] a!6220!6220U52#(tt, X) =#> mark#(X) 19] a!6220!6220U61#(tt, X, Y) =#> a!6220!6220U62#(a!6220!6220isNatKind(X), X, Y) 20] a!6220!6220U61#(tt, X, Y) =#> a!6220!6220isNatKind#(X) 21] a!6220!6220U62#(tt, X, Y) =#> a!6220!6220U63#(a!6220!6220isNat(Y), X, Y) 22] a!6220!6220U62#(tt, X, Y) =#> a!6220!6220isNat#(Y) 23] a!6220!6220U63#(tt, X, Y) =#> a!6220!6220U64#(a!6220!6220isNatKind(Y), X, Y) 24] a!6220!6220U63#(tt, X, Y) =#> a!6220!6220isNatKind#(Y) 25] a!6220!6220U64#(tt, X, Y) =#> a!6220!6220plus#(mark(Y), mark(X)) 26] a!6220!6220U64#(tt, X, Y) =#> mark#(Y) 27] a!6220!6220U64#(tt, X, Y) =#> mark#(X) 28] a!6220!6220isNat#(plus(X, Y)) =#> a!6220!6220U11#(a!6220!6220isNatKind(X), X, Y) 29] a!6220!6220isNat#(plus(X, Y)) =#> a!6220!6220isNatKind#(X) 30] a!6220!6220isNat#(s(X)) =#> a!6220!6220U21#(a!6220!6220isNatKind(X), X) 31] a!6220!6220isNat#(s(X)) =#> a!6220!6220isNatKind#(X) 32] a!6220!6220isNatKind#(plus(X, Y)) =#> a!6220!6220U31#(a!6220!6220isNatKind(X), Y) 33] a!6220!6220isNatKind#(plus(X, Y)) =#> a!6220!6220isNatKind#(X) 34] a!6220!6220isNatKind#(s(X)) =#> a!6220!6220U41#(a!6220!6220isNatKind(X)) 35] a!6220!6220isNatKind#(s(X)) =#> a!6220!6220isNatKind#(X) 36] a!6220!6220plus#(X, 0) =#> a!6220!6220U51#(a!6220!6220isNat(X), X) 37] a!6220!6220plus#(X, 0) =#> a!6220!6220isNat#(X) 38] a!6220!6220plus#(X, s(Y)) =#> a!6220!6220U61#(a!6220!6220isNat(Y), Y, X) 39] a!6220!6220plus#(X, s(Y)) =#> a!6220!6220isNat#(Y) 40] mark#(U11(X, Y, Z)) =#> a!6220!6220U11#(mark(X), Y, Z) 41] mark#(U11(X, Y, Z)) =#> mark#(X) 42] mark#(U12(X, Y, Z)) =#> a!6220!6220U12#(mark(X), Y, Z) 43] mark#(U12(X, Y, Z)) =#> mark#(X) 44] mark#(isNatKind(X)) =#> a!6220!6220isNatKind#(X) 45] mark#(U13(X, Y, Z)) =#> a!6220!6220U13#(mark(X), Y, Z) 46] mark#(U13(X, Y, Z)) =#> mark#(X) 47] mark#(U14(X, Y, Z)) =#> a!6220!6220U14#(mark(X), Y, Z) 48] mark#(U14(X, Y, Z)) =#> mark#(X) 49] mark#(U15(X, Y)) =#> a!6220!6220U15#(mark(X), Y) 50] mark#(U15(X, Y)) =#> mark#(X) 51] mark#(isNat(X)) =#> a!6220!6220isNat#(X) 52] mark#(U16(X)) =#> a!6220!6220U16#(mark(X)) 53] mark#(U16(X)) =#> mark#(X) 54] mark#(U21(X, Y)) =#> a!6220!6220U21#(mark(X), Y) 55] mark#(U21(X, Y)) =#> mark#(X) 56] mark#(U22(X, Y)) =#> a!6220!6220U22#(mark(X), Y) 57] mark#(U22(X, Y)) =#> mark#(X) 58] mark#(U23(X)) =#> a!6220!6220U23#(mark(X)) 59] mark#(U23(X)) =#> mark#(X) 60] mark#(U31(X, Y)) =#> a!6220!6220U31#(mark(X), Y) 61] mark#(U31(X, Y)) =#> mark#(X) 62] mark#(U32(X)) =#> a!6220!6220U32#(mark(X)) 63] mark#(U32(X)) =#> mark#(X) 64] mark#(U41(X)) =#> a!6220!6220U41#(mark(X)) 65] mark#(U41(X)) =#> mark#(X) 66] mark#(U51(X, Y)) =#> a!6220!6220U51#(mark(X), Y) 67] mark#(U51(X, Y)) =#> mark#(X) 68] mark#(U52(X, Y)) =#> a!6220!6220U52#(mark(X), Y) 69] mark#(U52(X, Y)) =#> mark#(X) 70] mark#(U61(X, Y, Z)) =#> a!6220!6220U61#(mark(X), Y, Z) 71] mark#(U61(X, Y, Z)) =#> mark#(X) 72] mark#(U62(X, Y, Z)) =#> a!6220!6220U62#(mark(X), Y, Z) 73] mark#(U62(X, Y, Z)) =#> mark#(X) 74] mark#(U63(X, Y, Z)) =#> a!6220!6220U63#(mark(X), Y, Z) 75] mark#(U63(X, Y, Z)) =#> mark#(X) 76] mark#(U64(X, Y, Z)) =#> a!6220!6220U64#(mark(X), Y, Z) 77] mark#(U64(X, Y, Z)) =#> mark#(X) 78] mark#(plus(X, Y)) =#> a!6220!6220plus#(mark(X), mark(Y)) 79] mark#(plus(X, Y)) =#> mark#(X) 80] mark#(plus(X, Y)) =#> mark#(Y) 81] mark#(s(X)) =#> mark#(X) Rules R_0: a!6220!6220U11(tt, X, Y) => a!6220!6220U12(a!6220!6220isNatKind(X), X, Y) a!6220!6220U12(tt, X, Y) => a!6220!6220U13(a!6220!6220isNatKind(Y), X, Y) a!6220!6220U13(tt, X, Y) => a!6220!6220U14(a!6220!6220isNatKind(Y), X, Y) a!6220!6220U14(tt, X, Y) => a!6220!6220U15(a!6220!6220isNat(X), Y) a!6220!6220U15(tt, X) => a!6220!6220U16(a!6220!6220isNat(X)) a!6220!6220U16(tt) => tt a!6220!6220U21(tt, X) => a!6220!6220U22(a!6220!6220isNatKind(X), X) a!6220!6220U22(tt, X) => a!6220!6220U23(a!6220!6220isNat(X)) a!6220!6220U23(tt) => tt a!6220!6220U31(tt, X) => a!6220!6220U32(a!6220!6220isNatKind(X)) a!6220!6220U32(tt) => tt a!6220!6220U41(tt) => tt a!6220!6220U51(tt, X) => a!6220!6220U52(a!6220!6220isNatKind(X), X) a!6220!6220U52(tt, X) => mark(X) a!6220!6220U61(tt, X, Y) => a!6220!6220U62(a!6220!6220isNatKind(X), X, Y) a!6220!6220U62(tt, X, Y) => a!6220!6220U63(a!6220!6220isNat(Y), X, Y) a!6220!6220U63(tt, X, Y) => a!6220!6220U64(a!6220!6220isNatKind(Y), X, Y) a!6220!6220U64(tt, X, Y) => s(a!6220!6220plus(mark(Y), mark(X))) a!6220!6220isNat(0) => tt a!6220!6220isNat(plus(X, Y)) => a!6220!6220U11(a!6220!6220isNatKind(X), X, Y) a!6220!6220isNat(s(X)) => a!6220!6220U21(a!6220!6220isNatKind(X), X) a!6220!6220isNatKind(0) => tt a!6220!6220isNatKind(plus(X, Y)) => a!6220!6220U31(a!6220!6220isNatKind(X), Y) a!6220!6220isNatKind(s(X)) => a!6220!6220U41(a!6220!6220isNatKind(X)) a!6220!6220plus(X, 0) => a!6220!6220U51(a!6220!6220isNat(X), X) a!6220!6220plus(X, s(Y)) => a!6220!6220U61(a!6220!6220isNat(Y), Y, X) mark(U11(X, Y, Z)) => a!6220!6220U11(mark(X), Y, Z) mark(U12(X, Y, Z)) => a!6220!6220U12(mark(X), Y, Z) mark(isNatKind(X)) => a!6220!6220isNatKind(X) mark(U13(X, Y, Z)) => a!6220!6220U13(mark(X), Y, Z) mark(U14(X, Y, Z)) => a!6220!6220U14(mark(X), Y, Z) mark(U15(X, Y)) => a!6220!6220U15(mark(X), Y) mark(isNat(X)) => a!6220!6220isNat(X) mark(U16(X)) => a!6220!6220U16(mark(X)) mark(U21(X, Y)) => a!6220!6220U21(mark(X), Y) mark(U22(X, Y)) => a!6220!6220U22(mark(X), Y) mark(U23(X)) => a!6220!6220U23(mark(X)) mark(U31(X, Y)) => a!6220!6220U31(mark(X), Y) mark(U32(X)) => a!6220!6220U32(mark(X)) mark(U41(X)) => a!6220!6220U41(mark(X)) mark(U51(X, Y)) => a!6220!6220U51(mark(X), Y) mark(U52(X, Y)) => a!6220!6220U52(mark(X), Y) mark(U61(X, Y, Z)) => a!6220!6220U61(mark(X), Y, Z) mark(U62(X, Y, Z)) => a!6220!6220U62(mark(X), Y, Z) mark(U63(X, Y, Z)) => a!6220!6220U63(mark(X), Y, Z) mark(U64(X, Y, Z)) => a!6220!6220U64(mark(X), Y, Z) mark(plus(X, Y)) => a!6220!6220plus(mark(X), mark(Y)) mark(tt) => tt mark(s(X)) => s(mark(X)) mark(0) => 0 a!6220!6220U11(X, Y, Z) => U11(X, Y, Z) a!6220!6220U12(X, Y, Z) => U12(X, Y, Z) a!6220!6220isNatKind(X) => isNatKind(X) a!6220!6220U13(X, Y, Z) => U13(X, Y, Z) a!6220!6220U14(X, Y, Z) => U14(X, Y, Z) a!6220!6220U15(X, Y) => U15(X, Y) a!6220!6220isNat(X) => isNat(X) a!6220!6220U16(X) => U16(X) a!6220!6220U21(X, Y) => U21(X, Y) a!6220!6220U22(X, Y) => U22(X, Y) a!6220!6220U23(X) => U23(X) a!6220!6220U31(X, Y) => U31(X, Y) a!6220!6220U32(X) => U32(X) a!6220!6220U41(X) => U41(X) a!6220!6220U51(X, Y) => U51(X, Y) a!6220!6220U52(X, Y) => U52(X, Y) a!6220!6220U61(X, Y, Z) => U61(X, Y, Z) a!6220!6220U62(X, Y, Z) => U62(X, Y, Z) a!6220!6220U63(X, Y, Z) => U63(X, Y, Z) a!6220!6220U64(X, Y, Z) => U64(X, Y, Z) a!6220!6220plus(X, Y) => plus(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 : 2, 3 * 1 : 32, 33, 34, 35 * 2 : 4, 5 * 3 : 32, 33, 34, 35 * 4 : 6, 7 * 5 : 32, 33, 34, 35 * 6 : 8, 9 * 7 : 28, 29, 30, 31 * 8 : * 9 : 28, 29, 30, 31 * 10 : 12, 13 * 11 : 32, 33, 34, 35 * 12 : * 13 : 28, 29, 30, 31 * 14 : * 15 : 32, 33, 34, 35 * 16 : 18 * 17 : 32, 33, 34, 35 * 18 : 40, 41, 42, 43, 44, 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 * 19 : 21, 22 * 20 : 32, 33, 34, 35 * 21 : 23, 24 * 22 : 28, 29, 30, 31 * 23 : 25, 26, 27 * 24 : 32, 33, 34, 35 * 25 : 36, 37, 38, 39 * 26 : 40, 41, 42, 43, 44, 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 * 27 : 40, 41, 42, 43, 44, 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 * 28 : 0, 1 * 29 : 32, 33, 34, 35 * 30 : 10, 11 * 31 : 32, 33, 34, 35 * 32 : 14, 15 * 33 : 32, 33, 34, 35 * 34 : * 35 : 32, 33, 34, 35 * 36 : 16, 17 * 37 : 28, 29, 30, 31 * 38 : 19, 20 * 39 : 28, 29, 30, 31 * 40 : 0, 1 * 41 : 40, 41, 42, 43, 44, 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 * 42 : 2, 3 * 43 : 40, 41, 42, 43, 44, 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 * 44 : 32, 33, 34, 35 * 45 : 4, 5 * 46 : 40, 41, 42, 43, 44, 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 * 47 : 6, 7 * 48 : 40, 41, 42, 43, 44, 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 * 49 : 8, 9 * 50 : 40, 41, 42, 43, 44, 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 * 51 : 28, 29, 30, 31 * 52 : * 53 : 40, 41, 42, 43, 44, 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 * 54 : 10, 11 * 55 : 40, 41, 42, 43, 44, 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 * 56 : 12, 13 * 57 : 40, 41, 42, 43, 44, 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 * 58 : * 59 : 40, 41, 42, 43, 44, 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 * 60 : 14, 15 * 61 : 40, 41, 42, 43, 44, 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 * 62 : * 63 : 40, 41, 42, 43, 44, 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 * 64 : * 65 : 40, 41, 42, 43, 44, 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 * 66 : 16, 17 * 67 : 40, 41, 42, 43, 44, 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 * 68 : 18 * 69 : 40, 41, 42, 43, 44, 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 * 70 : 19, 20 * 71 : 40, 41, 42, 43, 44, 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 * 72 : 21, 22 * 73 : 40, 41, 42, 43, 44, 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 * 74 : 23, 24 * 75 : 40, 41, 42, 43, 44, 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 * 76 : 25, 26, 27 * 77 : 40, 41, 42, 43, 44, 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 * 78 : 36, 37, 38, 39 * 79 : 40, 41, 42, 43, 44, 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 * 80 : 40, 41, 42, 43, 44, 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 * 81 : 40, 41, 42, 43, 44, 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 This graph has the following strongly connected components: P_1: a!6220!6220U11#(tt, X, Y) =#> a!6220!6220U12#(a!6220!6220isNatKind(X), X, Y) a!6220!6220U12#(tt, X, Y) =#> a!6220!6220U13#(a!6220!6220isNatKind(Y), X, Y) a!6220!6220U13#(tt, X, Y) =#> a!6220!6220U14#(a!6220!6220isNatKind(Y), X, Y) a!6220!6220U14#(tt, X, Y) =#> a!6220!6220U15#(a!6220!6220isNat(X), Y) a!6220!6220U14#(tt, X, Y) =#> a!6220!6220isNat#(X) a!6220!6220U15#(tt, X) =#> a!6220!6220isNat#(X) a!6220!6220U21#(tt, X) =#> a!6220!6220U22#(a!6220!6220isNatKind(X), X) a!6220!6220U22#(tt, X) =#> a!6220!6220isNat#(X) a!6220!6220isNat#(plus(X, Y)) =#> a!6220!6220U11#(a!6220!6220isNatKind(X), X, Y) a!6220!6220isNat#(s(X)) =#> a!6220!6220U21#(a!6220!6220isNatKind(X), X) P_2: a!6220!6220U31#(tt, X) =#> a!6220!6220isNatKind#(X) a!6220!6220isNatKind#(plus(X, Y)) =#> a!6220!6220U31#(a!6220!6220isNatKind(X), Y) a!6220!6220isNatKind#(plus(X, Y)) =#> a!6220!6220isNatKind#(X) a!6220!6220isNatKind#(s(X)) =#> a!6220!6220isNatKind#(X) P_3: a!6220!6220U51#(tt, X) =#> a!6220!6220U52#(a!6220!6220isNatKind(X), X) a!6220!6220U52#(tt, X) =#> mark#(X) a!6220!6220U61#(tt, X, Y) =#> a!6220!6220U62#(a!6220!6220isNatKind(X), X, Y) a!6220!6220U62#(tt, X, Y) =#> a!6220!6220U63#(a!6220!6220isNat(Y), X, Y) a!6220!6220U63#(tt, X, Y) =#> a!6220!6220U64#(a!6220!6220isNatKind(Y), X, Y) a!6220!6220U64#(tt, X, Y) =#> a!6220!6220plus#(mark(Y), mark(X)) a!6220!6220U64#(tt, X, Y) =#> mark#(Y) a!6220!6220U64#(tt, X, Y) =#> mark#(X) a!6220!6220plus#(X, 0) =#> a!6220!6220U51#(a!6220!6220isNat(X), X) a!6220!6220plus#(X, s(Y)) =#> a!6220!6220U61#(a!6220!6220isNat(Y), Y, X) mark#(U11(X, Y, Z)) =#> mark#(X) mark#(U12(X, Y, Z)) =#> mark#(X) mark#(U13(X, Y, Z)) =#> mark#(X) mark#(U14(X, Y, Z)) =#> mark#(X) mark#(U15(X, Y)) =#> mark#(X) mark#(U16(X)) =#> mark#(X) mark#(U21(X, Y)) =#> mark#(X) mark#(U22(X, Y)) =#> mark#(X) mark#(U23(X)) =#> mark#(X) mark#(U31(X, Y)) =#> mark#(X) mark#(U32(X)) =#> mark#(X) mark#(U41(X)) =#> mark#(X) mark#(U51(X, Y)) =#> a!6220!6220U51#(mark(X), Y) mark#(U51(X, Y)) =#> mark#(X) mark#(U52(X, Y)) =#> a!6220!6220U52#(mark(X), Y) mark#(U52(X, Y)) =#> mark#(X) mark#(U61(X, Y, Z)) =#> a!6220!6220U61#(mark(X), Y, Z) mark#(U61(X, Y, Z)) =#> mark#(X) mark#(U62(X, Y, Z)) =#> a!6220!6220U62#(mark(X), Y, Z) mark#(U62(X, Y, Z)) =#> mark#(X) mark#(U63(X, Y, Z)) =#> a!6220!6220U63#(mark(X), Y, Z) mark#(U63(X, Y, Z)) =#> mark#(X) mark#(U64(X, Y, Z)) =#> a!6220!6220U64#(mark(X), Y, Z) mark#(U64(X, Y, Z)) =#> mark#(X) mark#(plus(X, Y)) =#> a!6220!6220plus#(mark(X), mark(Y)) mark#(plus(X, Y)) =#> mark#(X) mark#(plus(X, Y)) =#> mark#(Y) mark#(s(X)) =#> mark#(X) 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) and (P_3, 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) and (P_3, R_0, minimal, formative) is finite. We consider the dependency pair problem (P_3, 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: a!6220!6220U51#(tt, X) >? a!6220!6220U52#(a!6220!6220isNatKind(X), X) a!6220!6220U52#(tt, X) >? mark#(X) a!6220!6220U61#(tt, X, Y) >? a!6220!6220U62#(a!6220!6220isNatKind(X), X, Y) a!6220!6220U62#(tt, X, Y) >? a!6220!6220U63#(a!6220!6220isNat(Y), X, Y) a!6220!6220U63#(tt, X, Y) >? a!6220!6220U64#(a!6220!6220isNatKind(Y), X, Y) a!6220!6220U64#(tt, X, Y) >? a!6220!6220plus#(mark(Y), mark(X)) a!6220!6220U64#(tt, X, Y) >? mark#(Y) a!6220!6220U64#(tt, X, Y) >? mark#(X) a!6220!6220plus#(X, 0) >? a!6220!6220U51#(a!6220!6220isNat(X), X) a!6220!6220plus#(X, s(Y)) >? a!6220!6220U61#(a!6220!6220isNat(Y), Y, X) mark#(U11(X, Y, Z)) >? mark#(X) mark#(U12(X, Y, Z)) >? mark#(X) mark#(U13(X, Y, Z)) >? mark#(X) mark#(U14(X, Y, Z)) >? mark#(X) mark#(U15(X, Y)) >? mark#(X) mark#(U16(X)) >? mark#(X) mark#(U21(X, Y)) >? mark#(X) mark#(U22(X, Y)) >? mark#(X) mark#(U23(X)) >? mark#(X) mark#(U31(X, Y)) >? mark#(X) mark#(U32(X)) >? mark#(X) mark#(U41(X)) >? mark#(X) mark#(U51(X, Y)) >? a!6220!6220U51#(mark(X), Y) mark#(U51(X, Y)) >? mark#(X) mark#(U52(X, Y)) >? a!6220!6220U52#(mark(X), Y) mark#(U52(X, Y)) >? mark#(X) mark#(U61(X, Y, Z)) >? a!6220!6220U61#(mark(X), Y, Z) mark#(U61(X, Y, Z)) >? mark#(X) mark#(U62(X, Y, Z)) >? a!6220!6220U62#(mark(X), Y, Z) mark#(U62(X, Y, Z)) >? mark#(X) mark#(U63(X, Y, Z)) >? a!6220!6220U63#(mark(X), Y, Z) mark#(U63(X, Y, Z)) >? mark#(X) mark#(U64(X, Y, Z)) >? a!6220!6220U64#(mark(X), Y, Z) mark#(U64(X, Y, Z)) >? mark#(X) mark#(plus(X, Y)) >? a!6220!6220plus#(mark(X), mark(Y)) mark#(plus(X, Y)) >? mark#(X) mark#(plus(X, Y)) >? mark#(Y) mark#(s(X)) >? mark#(X) a!6220!6220U11(tt, X, Y) >= a!6220!6220U12(a!6220!6220isNatKind(X), X, Y) a!6220!6220U12(tt, X, Y) >= a!6220!6220U13(a!6220!6220isNatKind(Y), X, Y) a!6220!6220U13(tt, X, Y) >= a!6220!6220U14(a!6220!6220isNatKind(Y), X, Y) a!6220!6220U14(tt, X, Y) >= a!6220!6220U15(a!6220!6220isNat(X), Y) a!6220!6220U15(tt, X) >= a!6220!6220U16(a!6220!6220isNat(X)) a!6220!6220U16(tt) >= tt a!6220!6220U21(tt, X) >= a!6220!6220U22(a!6220!6220isNatKind(X), X) a!6220!6220U22(tt, X) >= a!6220!6220U23(a!6220!6220isNat(X)) a!6220!6220U23(tt) >= tt a!6220!6220U31(tt, X) >= a!6220!6220U32(a!6220!6220isNatKind(X)) a!6220!6220U32(tt) >= tt a!6220!6220U41(tt) >= tt a!6220!6220U51(tt, X) >= a!6220!6220U52(a!6220!6220isNatKind(X), X) a!6220!6220U52(tt, X) >= mark(X) a!6220!6220U61(tt, X, Y) >= a!6220!6220U62(a!6220!6220isNatKind(X), X, Y) a!6220!6220U62(tt, X, Y) >= a!6220!6220U63(a!6220!6220isNat(Y), X, Y) a!6220!6220U63(tt, X, Y) >= a!6220!6220U64(a!6220!6220isNatKind(Y), X, Y) a!6220!6220U64(tt, X, Y) >= s(a!6220!6220plus(mark(Y), mark(X))) a!6220!6220isNat(0) >= tt a!6220!6220isNat(plus(X, Y)) >= a!6220!6220U11(a!6220!6220isNatKind(X), X, Y) a!6220!6220isNat(s(X)) >= a!6220!6220U21(a!6220!6220isNatKind(X), X) a!6220!6220isNatKind(0) >= tt a!6220!6220isNatKind(plus(X, Y)) >= a!6220!6220U31(a!6220!6220isNatKind(X), Y) a!6220!6220isNatKind(s(X)) >= a!6220!6220U41(a!6220!6220isNatKind(X)) a!6220!6220plus(X, 0) >= a!6220!6220U51(a!6220!6220isNat(X), X) a!6220!6220plus(X, s(Y)) >= a!6220!6220U61(a!6220!6220isNat(Y), Y, X) mark(U11(X, Y, Z)) >= a!6220!6220U11(mark(X), Y, Z) mark(U12(X, Y, Z)) >= a!6220!6220U12(mark(X), Y, Z) mark(isNatKind(X)) >= a!6220!6220isNatKind(X) mark(U13(X, Y, Z)) >= a!6220!6220U13(mark(X), Y, Z) mark(U14(X, Y, Z)) >= a!6220!6220U14(mark(X), Y, Z) mark(U15(X, Y)) >= a!6220!6220U15(mark(X), Y) mark(isNat(X)) >= a!6220!6220isNat(X) mark(U16(X)) >= a!6220!6220U16(mark(X)) mark(U21(X, Y)) >= a!6220!6220U21(mark(X), Y) mark(U22(X, Y)) >= a!6220!6220U22(mark(X), Y) mark(U23(X)) >= a!6220!6220U23(mark(X)) mark(U31(X, Y)) >= a!6220!6220U31(mark(X), Y) mark(U32(X)) >= a!6220!6220U32(mark(X)) mark(U41(X)) >= a!6220!6220U41(mark(X)) mark(U51(X, Y)) >= a!6220!6220U51(mark(X), Y) mark(U52(X, Y)) >= a!6220!6220U52(mark(X), Y) mark(U61(X, Y, Z)) >= a!6220!6220U61(mark(X), Y, Z) mark(U62(X, Y, Z)) >= a!6220!6220U62(mark(X), Y, Z) mark(U63(X, Y, Z)) >= a!6220!6220U63(mark(X), Y, Z) mark(U64(X, Y, Z)) >= a!6220!6220U64(mark(X), Y, Z) mark(plus(X, Y)) >= a!6220!6220plus(mark(X), mark(Y)) mark(tt) >= tt mark(s(X)) >= s(mark(X)) mark(0) >= 0 a!6220!6220U11(X, Y, Z) >= U11(X, Y, Z) a!6220!6220U12(X, Y, Z) >= U12(X, Y, Z) a!6220!6220isNatKind(X) >= isNatKind(X) a!6220!6220U13(X, Y, Z) >= U13(X, Y, Z) a!6220!6220U14(X, Y, Z) >= U14(X, Y, Z) a!6220!6220U15(X, Y) >= U15(X, Y) a!6220!6220isNat(X) >= isNat(X) a!6220!6220U16(X) >= U16(X) a!6220!6220U21(X, Y) >= U21(X, Y) a!6220!6220U22(X, Y) >= U22(X, Y) a!6220!6220U23(X) >= U23(X) a!6220!6220U31(X, Y) >= U31(X, Y) a!6220!6220U32(X) >= U32(X) a!6220!6220U41(X) >= U41(X) a!6220!6220U51(X, Y) >= U51(X, Y) a!6220!6220U52(X, Y) >= U52(X, Y) a!6220!6220U61(X, Y, Z) >= U61(X, Y, Z) a!6220!6220U62(X, Y, Z) >= U62(X, Y, Z) a!6220!6220U63(X, Y, Z) >= U63(X, Y, Z) a!6220!6220U64(X, Y, Z) >= U64(X, Y, Z) a!6220!6220plus(X, Y) >= plus(X, Y) We orient these requirements with a polynomial interpretation in the natural numbers. The following interpretation satisfies the requirements: 0 = 1 U11 = \y0y1y2.y0 U12 = \y0y1y2.y0 U13 = \y0y1y2.y0 U14 = \y0y1y2.y0 U15 = \y0y1.y0 U16 = \y0.y0 U21 = \y0y1.y0 U22 = \y0y1.y0 U23 = \y0.y0 U31 = \y0y1.y0 U32 = \y0.y0 U41 = \y0.2y0 U51 = \y0y1.1 + y1 + 2y0 U52 = \y0y1.y1 + 2y0 U61 = \y0y1y2.y2 + 2y0 + 2y1 U62 = \y0y1y2.y2 + 2y0 + 2y1 U63 = \y0y1y2.y2 + 2y0 + 2y1 U64 = \y0y1y2.y0 + y2 + 2y1 a!6220!6220U11 = \y0y1y2.y0 a!6220!6220U12 = \y0y1y2.y0 a!6220!6220U13 = \y0y1y2.y0 a!6220!6220U14 = \y0y1y2.y0 a!6220!6220U15 = \y0y1.y0 a!6220!6220U16 = \y0.y0 a!6220!6220U21 = \y0y1.y0 a!6220!6220U22 = \y0y1.y0 a!6220!6220U23 = \y0.y0 a!6220!6220U31 = \y0y1.y0 a!6220!6220U32 = \y0.y0 a!6220!6220U41 = \y0.2y0 a!6220!6220U51 = \y0y1.1 + y1 + 2y0 a!6220!6220U51# = \y0y1.1 + 2y1 a!6220!6220U52 = \y0y1.y1 + 2y0 a!6220!6220U52# = \y0y1.2y1 a!6220!6220U61 = \y0y1y2.y2 + 2y0 + 2y1 a!6220!6220U61# = \y0y1y2.2y1 + 2y2 a!6220!6220U62 = \y0y1y2.y2 + 2y0 + 2y1 a!6220!6220U62# = \y0y1y2.2y1 + 2y2 a!6220!6220U63 = \y0y1y2.y2 + 2y0 + 2y1 a!6220!6220U63# = \y0y1y2.2y1 + 2y2 a!6220!6220U64 = \y0y1y2.y0 + y2 + 2y1 a!6220!6220U64# = \y0y1y2.2y1 + 2y2 a!6220!6220isNat = \y0.0 a!6220!6220isNatKind = \y0.0 a!6220!6220plus = \y0y1.y0 + 2y1 a!6220!6220plus# = \y0y1.2y0 + 2y1 isNat = \y0.0 isNatKind = \y0.0 mark = \y0.y0 mark# = \y0.2y0 plus = \y0y1.y0 + 2y1 s = \y0.y0 tt = 0 Using this interpretation, the requirements translate to: [[a!6220!6220U51#(tt, _x0)]] = 1 + 2x0 > 2x0 = [[a!6220!6220U52#(a!6220!6220isNatKind(_x0), _x0)]] [[a!6220!6220U52#(tt, _x0)]] = 2x0 >= 2x0 = [[mark#(_x0)]] [[a!6220!6220U61#(tt, _x0, _x1)]] = 2x0 + 2x1 >= 2x0 + 2x1 = [[a!6220!6220U62#(a!6220!6220isNatKind(_x0), _x0, _x1)]] [[a!6220!6220U62#(tt, _x0, _x1)]] = 2x0 + 2x1 >= 2x0 + 2x1 = [[a!6220!6220U63#(a!6220!6220isNat(_x1), _x0, _x1)]] [[a!6220!6220U63#(tt, _x0, _x1)]] = 2x0 + 2x1 >= 2x0 + 2x1 = [[a!6220!6220U64#(a!6220!6220isNatKind(_x1), _x0, _x1)]] [[a!6220!6220U64#(tt, _x0, _x1)]] = 2x0 + 2x1 >= 2x0 + 2x1 = [[a!6220!6220plus#(mark(_x1), mark(_x0))]] [[a!6220!6220U64#(tt, _x0, _x1)]] = 2x0 + 2x1 >= 2x1 = [[mark#(_x1)]] [[a!6220!6220U64#(tt, _x0, _x1)]] = 2x0 + 2x1 >= 2x0 = [[mark#(_x0)]] [[a!6220!6220plus#(_x0, 0)]] = 2 + 2x0 > 1 + 2x0 = [[a!6220!6220U51#(a!6220!6220isNat(_x0), _x0)]] [[a!6220!6220plus#(_x0, s(_x1))]] = 2x0 + 2x1 >= 2x0 + 2x1 = [[a!6220!6220U61#(a!6220!6220isNat(_x1), _x1, _x0)]] [[mark#(U11(_x0, _x1, _x2))]] = 2x0 >= 2x0 = [[mark#(_x0)]] [[mark#(U12(_x0, _x1, _x2))]] = 2x0 >= 2x0 = [[mark#(_x0)]] [[mark#(U13(_x0, _x1, _x2))]] = 2x0 >= 2x0 = [[mark#(_x0)]] [[mark#(U14(_x0, _x1, _x2))]] = 2x0 >= 2x0 = [[mark#(_x0)]] [[mark#(U15(_x0, _x1))]] = 2x0 >= 2x0 = [[mark#(_x0)]] [[mark#(U16(_x0))]] = 2x0 >= 2x0 = [[mark#(_x0)]] [[mark#(U21(_x0, _x1))]] = 2x0 >= 2x0 = [[mark#(_x0)]] [[mark#(U22(_x0, _x1))]] = 2x0 >= 2x0 = [[mark#(_x0)]] [[mark#(U23(_x0))]] = 2x0 >= 2x0 = [[mark#(_x0)]] [[mark#(U31(_x0, _x1))]] = 2x0 >= 2x0 = [[mark#(_x0)]] [[mark#(U32(_x0))]] = 2x0 >= 2x0 = [[mark#(_x0)]] [[mark#(U41(_x0))]] = 4x0 >= 2x0 = [[mark#(_x0)]] [[mark#(U51(_x0, _x1))]] = 2 + 2x1 + 4x0 > 1 + 2x1 = [[a!6220!6220U51#(mark(_x0), _x1)]] [[mark#(U51(_x0, _x1))]] = 2 + 2x1 + 4x0 > 2x0 = [[mark#(_x0)]] [[mark#(U52(_x0, _x1))]] = 2x1 + 4x0 >= 2x1 = [[a!6220!6220U52#(mark(_x0), _x1)]] [[mark#(U52(_x0, _x1))]] = 2x1 + 4x0 >= 2x0 = [[mark#(_x0)]] [[mark#(U61(_x0, _x1, _x2))]] = 2x2 + 4x0 + 4x1 >= 2x1 + 2x2 = [[a!6220!6220U61#(mark(_x0), _x1, _x2)]] [[mark#(U61(_x0, _x1, _x2))]] = 2x2 + 4x0 + 4x1 >= 2x0 = [[mark#(_x0)]] [[mark#(U62(_x0, _x1, _x2))]] = 2x2 + 4x0 + 4x1 >= 2x1 + 2x2 = [[a!6220!6220U62#(mark(_x0), _x1, _x2)]] [[mark#(U62(_x0, _x1, _x2))]] = 2x2 + 4x0 + 4x1 >= 2x0 = [[mark#(_x0)]] [[mark#(U63(_x0, _x1, _x2))]] = 2x2 + 4x0 + 4x1 >= 2x1 + 2x2 = [[a!6220!6220U63#(mark(_x0), _x1, _x2)]] [[mark#(U63(_x0, _x1, _x2))]] = 2x2 + 4x0 + 4x1 >= 2x0 = [[mark#(_x0)]] [[mark#(U64(_x0, _x1, _x2))]] = 2x0 + 2x2 + 4x1 >= 2x1 + 2x2 = [[a!6220!6220U64#(mark(_x0), _x1, _x2)]] [[mark#(U64(_x0, _x1, _x2))]] = 2x0 + 2x2 + 4x1 >= 2x0 = [[mark#(_x0)]] [[mark#(plus(_x0, _x1))]] = 2x0 + 4x1 >= 2x0 + 2x1 = [[a!6220!6220plus#(mark(_x0), mark(_x1))]] [[mark#(plus(_x0, _x1))]] = 2x0 + 4x1 >= 2x0 = [[mark#(_x0)]] [[mark#(plus(_x0, _x1))]] = 2x0 + 4x1 >= 2x1 = [[mark#(_x1)]] [[mark#(s(_x0))]] = 2x0 >= 2x0 = [[mark#(_x0)]] [[a!6220!6220U11(tt, _x0, _x1)]] = 0 >= 0 = [[a!6220!6220U12(a!6220!6220isNatKind(_x0), _x0, _x1)]] [[a!6220!6220U12(tt, _x0, _x1)]] = 0 >= 0 = [[a!6220!6220U13(a!6220!6220isNatKind(_x1), _x0, _x1)]] [[a!6220!6220U13(tt, _x0, _x1)]] = 0 >= 0 = [[a!6220!6220U14(a!6220!6220isNatKind(_x1), _x0, _x1)]] [[a!6220!6220U14(tt, _x0, _x1)]] = 0 >= 0 = [[a!6220!6220U15(a!6220!6220isNat(_x0), _x1)]] [[a!6220!6220U15(tt, _x0)]] = 0 >= 0 = [[a!6220!6220U16(a!6220!6220isNat(_x0))]] [[a!6220!6220U16(tt)]] = 0 >= 0 = [[tt]] [[a!6220!6220U21(tt, _x0)]] = 0 >= 0 = [[a!6220!6220U22(a!6220!6220isNatKind(_x0), _x0)]] [[a!6220!6220U22(tt, _x0)]] = 0 >= 0 = [[a!6220!6220U23(a!6220!6220isNat(_x0))]] [[a!6220!6220U23(tt)]] = 0 >= 0 = [[tt]] [[a!6220!6220U31(tt, _x0)]] = 0 >= 0 = [[a!6220!6220U32(a!6220!6220isNatKind(_x0))]] [[a!6220!6220U32(tt)]] = 0 >= 0 = [[tt]] [[a!6220!6220U41(tt)]] = 0 >= 0 = [[tt]] [[a!6220!6220U51(tt, _x0)]] = 1 + x0 >= x0 = [[a!6220!6220U52(a!6220!6220isNatKind(_x0), _x0)]] [[a!6220!6220U52(tt, _x0)]] = x0 >= x0 = [[mark(_x0)]] [[a!6220!6220U61(tt, _x0, _x1)]] = x1 + 2x0 >= x1 + 2x0 = [[a!6220!6220U62(a!6220!6220isNatKind(_x0), _x0, _x1)]] [[a!6220!6220U62(tt, _x0, _x1)]] = x1 + 2x0 >= x1 + 2x0 = [[a!6220!6220U63(a!6220!6220isNat(_x1), _x0, _x1)]] [[a!6220!6220U63(tt, _x0, _x1)]] = x1 + 2x0 >= x1 + 2x0 = [[a!6220!6220U64(a!6220!6220isNatKind(_x1), _x0, _x1)]] [[a!6220!6220U64(tt, _x0, _x1)]] = x1 + 2x0 >= x1 + 2x0 = [[s(a!6220!6220plus(mark(_x1), mark(_x0)))]] [[a!6220!6220isNat(0)]] = 0 >= 0 = [[tt]] [[a!6220!6220isNat(plus(_x0, _x1))]] = 0 >= 0 = [[a!6220!6220U11(a!6220!6220isNatKind(_x0), _x0, _x1)]] [[a!6220!6220isNat(s(_x0))]] = 0 >= 0 = [[a!6220!6220U21(a!6220!6220isNatKind(_x0), _x0)]] [[a!6220!6220isNatKind(0)]] = 0 >= 0 = [[tt]] [[a!6220!6220isNatKind(plus(_x0, _x1))]] = 0 >= 0 = [[a!6220!6220U31(a!6220!6220isNatKind(_x0), _x1)]] [[a!6220!6220isNatKind(s(_x0))]] = 0 >= 0 = [[a!6220!6220U41(a!6220!6220isNatKind(_x0))]] [[a!6220!6220plus(_x0, 0)]] = 2 + x0 >= 1 + x0 = [[a!6220!6220U51(a!6220!6220isNat(_x0), _x0)]] [[a!6220!6220plus(_x0, s(_x1))]] = x0 + 2x1 >= x0 + 2x1 = [[a!6220!6220U61(a!6220!6220isNat(_x1), _x1, _x0)]] [[mark(U11(_x0, _x1, _x2))]] = x0 >= x0 = [[a!6220!6220U11(mark(_x0), _x1, _x2)]] [[mark(U12(_x0, _x1, _x2))]] = x0 >= x0 = [[a!6220!6220U12(mark(_x0), _x1, _x2)]] [[mark(isNatKind(_x0))]] = 0 >= 0 = [[a!6220!6220isNatKind(_x0)]] [[mark(U13(_x0, _x1, _x2))]] = x0 >= x0 = [[a!6220!6220U13(mark(_x0), _x1, _x2)]] [[mark(U14(_x0, _x1, _x2))]] = x0 >= x0 = [[a!6220!6220U14(mark(_x0), _x1, _x2)]] [[mark(U15(_x0, _x1))]] = x0 >= x0 = [[a!6220!6220U15(mark(_x0), _x1)]] [[mark(isNat(_x0))]] = 0 >= 0 = [[a!6220!6220isNat(_x0)]] [[mark(U16(_x0))]] = x0 >= x0 = [[a!6220!6220U16(mark(_x0))]] [[mark(U21(_x0, _x1))]] = x0 >= x0 = [[a!6220!6220U21(mark(_x0), _x1)]] [[mark(U22(_x0, _x1))]] = x0 >= x0 = [[a!6220!6220U22(mark(_x0), _x1)]] [[mark(U23(_x0))]] = x0 >= x0 = [[a!6220!6220U23(mark(_x0))]] [[mark(U31(_x0, _x1))]] = x0 >= x0 = [[a!6220!6220U31(mark(_x0), _x1)]] [[mark(U32(_x0))]] = x0 >= x0 = [[a!6220!6220U32(mark(_x0))]] [[mark(U41(_x0))]] = 2x0 >= 2x0 = [[a!6220!6220U41(mark(_x0))]] [[mark(U51(_x0, _x1))]] = 1 + x1 + 2x0 >= 1 + x1 + 2x0 = [[a!6220!6220U51(mark(_x0), _x1)]] [[mark(U52(_x0, _x1))]] = x1 + 2x0 >= x1 + 2x0 = [[a!6220!6220U52(mark(_x0), _x1)]] [[mark(U61(_x0, _x1, _x2))]] = x2 + 2x0 + 2x1 >= x2 + 2x0 + 2x1 = [[a!6220!6220U61(mark(_x0), _x1, _x2)]] [[mark(U62(_x0, _x1, _x2))]] = x2 + 2x0 + 2x1 >= x2 + 2x0 + 2x1 = [[a!6220!6220U62(mark(_x0), _x1, _x2)]] [[mark(U63(_x0, _x1, _x2))]] = x2 + 2x0 + 2x1 >= x2 + 2x0 + 2x1 = [[a!6220!6220U63(mark(_x0), _x1, _x2)]] [[mark(U64(_x0, _x1, _x2))]] = x0 + x2 + 2x1 >= x0 + x2 + 2x1 = [[a!6220!6220U64(mark(_x0), _x1, _x2)]] [[mark(plus(_x0, _x1))]] = x0 + 2x1 >= x0 + 2x1 = [[a!6220!6220plus(mark(_x0), mark(_x1))]] [[mark(tt)]] = 0 >= 0 = [[tt]] [[mark(s(_x0))]] = x0 >= x0 = [[s(mark(_x0))]] [[mark(0)]] = 1 >= 1 = [[0]] [[a!6220!6220U11(_x0, _x1, _x2)]] = x0 >= x0 = [[U11(_x0, _x1, _x2)]] [[a!6220!6220U12(_x0, _x1, _x2)]] = x0 >= x0 = [[U12(_x0, _x1, _x2)]] [[a!6220!6220isNatKind(_x0)]] = 0 >= 0 = [[isNatKind(_x0)]] [[a!6220!6220U13(_x0, _x1, _x2)]] = x0 >= x0 = [[U13(_x0, _x1, _x2)]] [[a!6220!6220U14(_x0, _x1, _x2)]] = x0 >= x0 = [[U14(_x0, _x1, _x2)]] [[a!6220!6220U15(_x0, _x1)]] = x0 >= x0 = [[U15(_x0, _x1)]] [[a!6220!6220isNat(_x0)]] = 0 >= 0 = [[isNat(_x0)]] [[a!6220!6220U16(_x0)]] = x0 >= x0 = [[U16(_x0)]] [[a!6220!6220U21(_x0, _x1)]] = x0 >= x0 = [[U21(_x0, _x1)]] [[a!6220!6220U22(_x0, _x1)]] = x0 >= x0 = [[U22(_x0, _x1)]] [[a!6220!6220U23(_x0)]] = x0 >= x0 = [[U23(_x0)]] [[a!6220!6220U31(_x0, _x1)]] = x0 >= x0 = [[U31(_x0, _x1)]] [[a!6220!6220U32(_x0)]] = x0 >= x0 = [[U32(_x0)]] [[a!6220!6220U41(_x0)]] = 2x0 >= 2x0 = [[U41(_x0)]] [[a!6220!6220U51(_x0, _x1)]] = 1 + x1 + 2x0 >= 1 + x1 + 2x0 = [[U51(_x0, _x1)]] [[a!6220!6220U52(_x0, _x1)]] = x1 + 2x0 >= x1 + 2x0 = [[U52(_x0, _x1)]] [[a!6220!6220U61(_x0, _x1, _x2)]] = x2 + 2x0 + 2x1 >= x2 + 2x0 + 2x1 = [[U61(_x0, _x1, _x2)]] [[a!6220!6220U62(_x0, _x1, _x2)]] = x2 + 2x0 + 2x1 >= x2 + 2x0 + 2x1 = [[U62(_x0, _x1, _x2)]] [[a!6220!6220U63(_x0, _x1, _x2)]] = x2 + 2x0 + 2x1 >= x2 + 2x0 + 2x1 = [[U63(_x0, _x1, _x2)]] [[a!6220!6220U64(_x0, _x1, _x2)]] = x0 + x2 + 2x1 >= x0 + x2 + 2x1 = [[U64(_x0, _x1, _x2)]] [[a!6220!6220plus(_x0, _x1)]] = x0 + 2x1 >= x0 + 2x1 = [[plus(_x0, _x1)]] By the observations in [Kop12, Sec. 6.6], this reduction pair suffices; we may thus replace the dependency pair problem (P_3, R_0, minimal, formative) by (P_4, R_0, minimal, formative), where P_4 consists of: a!6220!6220U52#(tt, X) =#> mark#(X) a!6220!6220U61#(tt, X, Y) =#> a!6220!6220U62#(a!6220!6220isNatKind(X), X, Y) a!6220!6220U62#(tt, X, Y) =#> a!6220!6220U63#(a!6220!6220isNat(Y), X, Y) a!6220!6220U63#(tt, X, Y) =#> a!6220!6220U64#(a!6220!6220isNatKind(Y), X, Y) a!6220!6220U64#(tt, X, Y) =#> a!6220!6220plus#(mark(Y), mark(X)) a!6220!6220U64#(tt, X, Y) =#> mark#(Y) a!6220!6220U64#(tt, X, Y) =#> mark#(X) a!6220!6220plus#(X, s(Y)) =#> a!6220!6220U61#(a!6220!6220isNat(Y), Y, X) mark#(U11(X, Y, Z)) =#> mark#(X) mark#(U12(X, Y, Z)) =#> mark#(X) mark#(U13(X, Y, Z)) =#> mark#(X) mark#(U14(X, Y, Z)) =#> mark#(X) mark#(U15(X, Y)) =#> mark#(X) mark#(U16(X)) =#> mark#(X) mark#(U21(X, Y)) =#> mark#(X) mark#(U22(X, Y)) =#> mark#(X) mark#(U23(X)) =#> mark#(X) mark#(U31(X, Y)) =#> mark#(X) mark#(U32(X)) =#> mark#(X) mark#(U41(X)) =#> mark#(X) mark#(U52(X, Y)) =#> a!6220!6220U52#(mark(X), Y) mark#(U52(X, Y)) =#> mark#(X) mark#(U61(X, Y, Z)) =#> a!6220!6220U61#(mark(X), Y, Z) mark#(U61(X, Y, Z)) =#> mark#(X) mark#(U62(X, Y, Z)) =#> a!6220!6220U62#(mark(X), Y, Z) mark#(U62(X, Y, Z)) =#> mark#(X) mark#(U63(X, Y, Z)) =#> a!6220!6220U63#(mark(X), Y, Z) mark#(U63(X, Y, Z)) =#> mark#(X) mark#(U64(X, Y, Z)) =#> a!6220!6220U64#(mark(X), Y, Z) mark#(U64(X, Y, Z)) =#> mark#(X) mark#(plus(X, Y)) =#> a!6220!6220plus#(mark(X), mark(Y)) mark#(plus(X, Y)) =#> mark#(X) mark#(plus(X, Y)) =#> mark#(Y) mark#(s(X)) =#> mark#(X) Thus, the original system is terminating if each of (P_1, R_0, minimal, formative), (P_2, 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 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: a!6220!6220U52#(tt, X) >? mark#(X) a!6220!6220U61#(tt, X, Y) >? a!6220!6220U62#(a!6220!6220isNatKind(X), X, Y) a!6220!6220U62#(tt, X, Y) >? a!6220!6220U63#(a!6220!6220isNat(Y), X, Y) a!6220!6220U63#(tt, X, Y) >? a!6220!6220U64#(a!6220!6220isNatKind(Y), X, Y) a!6220!6220U64#(tt, X, Y) >? a!6220!6220plus#(mark(Y), mark(X)) a!6220!6220U64#(tt, X, Y) >? mark#(Y) a!6220!6220U64#(tt, X, Y) >? mark#(X) a!6220!6220plus#(X, s(Y)) >? a!6220!6220U61#(a!6220!6220isNat(Y), Y, X) mark#(U11(X, Y, Z)) >? mark#(X) mark#(U12(X, Y, Z)) >? mark#(X) mark#(U13(X, Y, Z)) >? mark#(X) mark#(U14(X, Y, Z)) >? mark#(X) mark#(U15(X, Y)) >? mark#(X) mark#(U16(X)) >? mark#(X) mark#(U21(X, Y)) >? mark#(X) mark#(U22(X, Y)) >? mark#(X) mark#(U23(X)) >? mark#(X) mark#(U31(X, Y)) >? mark#(X) mark#(U32(X)) >? mark#(X) mark#(U41(X)) >? mark#(X) mark#(U52(X, Y)) >? a!6220!6220U52#(mark(X), Y) mark#(U52(X, Y)) >? mark#(X) mark#(U61(X, Y, Z)) >? a!6220!6220U61#(mark(X), Y, Z) mark#(U61(X, Y, Z)) >? mark#(X) mark#(U62(X, Y, Z)) >? a!6220!6220U62#(mark(X), Y, Z) mark#(U62(X, Y, Z)) >? mark#(X) mark#(U63(X, Y, Z)) >? a!6220!6220U63#(mark(X), Y, Z) mark#(U63(X, Y, Z)) >? mark#(X) mark#(U64(X, Y, Z)) >? a!6220!6220U64#(mark(X), Y, Z) mark#(U64(X, Y, Z)) >? mark#(X) mark#(plus(X, Y)) >? a!6220!6220plus#(mark(X), mark(Y)) mark#(plus(X, Y)) >? mark#(X) mark#(plus(X, Y)) >? mark#(Y) mark#(s(X)) >? mark#(X) a!6220!6220U11(tt, X, Y) >= a!6220!6220U12(a!6220!6220isNatKind(X), X, Y) a!6220!6220U12(tt, X, Y) >= a!6220!6220U13(a!6220!6220isNatKind(Y), X, Y) a!6220!6220U13(tt, X, Y) >= a!6220!6220U14(a!6220!6220isNatKind(Y), X, Y) a!6220!6220U14(tt, X, Y) >= a!6220!6220U15(a!6220!6220isNat(X), Y) a!6220!6220U15(tt, X) >= a!6220!6220U16(a!6220!6220isNat(X)) a!6220!6220U16(tt) >= tt a!6220!6220U21(tt, X) >= a!6220!6220U22(a!6220!6220isNatKind(X), X) a!6220!6220U22(tt, X) >= a!6220!6220U23(a!6220!6220isNat(X)) a!6220!6220U23(tt) >= tt a!6220!6220U31(tt, X) >= a!6220!6220U32(a!6220!6220isNatKind(X)) a!6220!6220U32(tt) >= tt a!6220!6220U41(tt) >= tt a!6220!6220U51(tt, X) >= a!6220!6220U52(a!6220!6220isNatKind(X), X) a!6220!6220U52(tt, X) >= mark(X) a!6220!6220U61(tt, X, Y) >= a!6220!6220U62(a!6220!6220isNatKind(X), X, Y) a!6220!6220U62(tt, X, Y) >= a!6220!6220U63(a!6220!6220isNat(Y), X, Y) a!6220!6220U63(tt, X, Y) >= a!6220!6220U64(a!6220!6220isNatKind(Y), X, Y) a!6220!6220U64(tt, X, Y) >= s(a!6220!6220plus(mark(Y), mark(X))) a!6220!6220isNat(0) >= tt a!6220!6220isNat(plus(X, Y)) >= a!6220!6220U11(a!6220!6220isNatKind(X), X, Y) a!6220!6220isNat(s(X)) >= a!6220!6220U21(a!6220!6220isNatKind(X), X) a!6220!6220isNatKind(0) >= tt a!6220!6220isNatKind(plus(X, Y)) >= a!6220!6220U31(a!6220!6220isNatKind(X), Y) a!6220!6220isNatKind(s(X)) >= a!6220!6220U41(a!6220!6220isNatKind(X)) a!6220!6220plus(X, 0) >= a!6220!6220U51(a!6220!6220isNat(X), X) a!6220!6220plus(X, s(Y)) >= a!6220!6220U61(a!6220!6220isNat(Y), Y, X) mark(U11(X, Y, Z)) >= a!6220!6220U11(mark(X), Y, Z) mark(U12(X, Y, Z)) >= a!6220!6220U12(mark(X), Y, Z) mark(isNatKind(X)) >= a!6220!6220isNatKind(X) mark(U13(X, Y, Z)) >= a!6220!6220U13(mark(X), Y, Z) mark(U14(X, Y, Z)) >= a!6220!6220U14(mark(X), Y, Z) mark(U15(X, Y)) >= a!6220!6220U15(mark(X), Y) mark(isNat(X)) >= a!6220!6220isNat(X) mark(U16(X)) >= a!6220!6220U16(mark(X)) mark(U21(X, Y)) >= a!6220!6220U21(mark(X), Y) mark(U22(X, Y)) >= a!6220!6220U22(mark(X), Y) mark(U23(X)) >= a!6220!6220U23(mark(X)) mark(U31(X, Y)) >= a!6220!6220U31(mark(X), Y) mark(U32(X)) >= a!6220!6220U32(mark(X)) mark(U41(X)) >= a!6220!6220U41(mark(X)) mark(U51(X, Y)) >= a!6220!6220U51(mark(X), Y) mark(U52(X, Y)) >= a!6220!6220U52(mark(X), Y) mark(U61(X, Y, Z)) >= a!6220!6220U61(mark(X), Y, Z) mark(U62(X, Y, Z)) >= a!6220!6220U62(mark(X), Y, Z) mark(U63(X, Y, Z)) >= a!6220!6220U63(mark(X), Y, Z) mark(U64(X, Y, Z)) >= a!6220!6220U64(mark(X), Y, Z) mark(plus(X, Y)) >= a!6220!6220plus(mark(X), mark(Y)) mark(tt) >= tt mark(s(X)) >= s(mark(X)) mark(0) >= 0 a!6220!6220U11(X, Y, Z) >= U11(X, Y, Z) a!6220!6220U12(X, Y, Z) >= U12(X, Y, Z) a!6220!6220isNatKind(X) >= isNatKind(X) a!6220!6220U13(X, Y, Z) >= U13(X, Y, Z) a!6220!6220U14(X, Y, Z) >= U14(X, Y, Z) a!6220!6220U15(X, Y) >= U15(X, Y) a!6220!6220isNat(X) >= isNat(X) a!6220!6220U16(X) >= U16(X) a!6220!6220U21(X, Y) >= U21(X, Y) a!6220!6220U22(X, Y) >= U22(X, Y) a!6220!6220U23(X) >= U23(X) a!6220!6220U31(X, Y) >= U31(X, Y) a!6220!6220U32(X) >= U32(X) a!6220!6220U41(X) >= U41(X) a!6220!6220U51(X, Y) >= U51(X, Y) a!6220!6220U52(X, Y) >= U52(X, Y) a!6220!6220U61(X, Y, Z) >= U61(X, Y, Z) a!6220!6220U62(X, Y, Z) >= U62(X, Y, Z) a!6220!6220U63(X, Y, Z) >= U63(X, Y, Z) a!6220!6220U64(X, Y, Z) >= U64(X, Y, Z) a!6220!6220plus(X, Y) >= plus(X, Y) We orient these requirements with a polynomial interpretation in the natural numbers. The following interpretation satisfies the requirements: 0 = 2 U11 = \y0y1y2.y0 U12 = \y0y1y2.y0 U13 = \y0y1y2.y0 U14 = \y0y1y2.2y0 U15 = \y0y1.y0 U16 = \y0.y0 U21 = \y0y1.y0 U22 = \y0y1.2y0 U23 = \y0.y0 U31 = \y0y1.2y0 U32 = \y0.y0 U41 = \y0.y0 U51 = \y0y1.2 + y1 U52 = \y0y1.2 + y1 + 2y0 U61 = \y0y1y2.y1 + y2 + 2y0 U62 = \y0y1y2.y0 + y1 + y2 U63 = \y0y1y2.y1 + y2 + 2y0 U64 = \y0y1y2.y1 + y2 + 2y0 a!6220!6220U11 = \y0y1y2.y0 a!6220!6220U12 = \y0y1y2.y0 a!6220!6220U13 = \y0y1y2.y0 a!6220!6220U14 = \y0y1y2.2y0 a!6220!6220U15 = \y0y1.y0 a!6220!6220U16 = \y0.y0 a!6220!6220U21 = \y0y1.y0 a!6220!6220U22 = \y0y1.2y0 a!6220!6220U23 = \y0.y0 a!6220!6220U31 = \y0y1.2y0 a!6220!6220U32 = \y0.y0 a!6220!6220U41 = \y0.y0 a!6220!6220U51 = \y0y1.2 + y1 a!6220!6220U52 = \y0y1.2 + y1 + 2y0 a!6220!6220U52# = \y0y1.1 + 2y1 a!6220!6220U61 = \y0y1y2.y1 + y2 + 2y0 a!6220!6220U61# = \y0y1y2.2y1 + 2y2 a!6220!6220U62 = \y0y1y2.y0 + y1 + y2 a!6220!6220U62# = \y0y1y2.2y1 + 2y2 a!6220!6220U63 = \y0y1y2.y1 + y2 + 2y0 a!6220!6220U63# = \y0y1y2.2y1 + 2y2 a!6220!6220U64 = \y0y1y2.y1 + y2 + 2y0 a!6220!6220U64# = \y0y1y2.2y1 + 2y2 a!6220!6220isNat = \y0.0 a!6220!6220isNatKind = \y0.0 a!6220!6220plus = \y0y1.y0 + y1 a!6220!6220plus# = \y0y1.2y0 + 2y1 isNat = \y0.0 isNatKind = \y0.0 mark = \y0.y0 mark# = \y0.2y0 plus = \y0y1.y0 + y1 s = \y0.y0 tt = 0 Using this interpretation, the requirements translate to: [[a!6220!6220U52#(tt, _x0)]] = 1 + 2x0 > 2x0 = [[mark#(_x0)]] [[a!6220!6220U61#(tt, _x0, _x1)]] = 2x0 + 2x1 >= 2x0 + 2x1 = [[a!6220!6220U62#(a!6220!6220isNatKind(_x0), _x0, _x1)]] [[a!6220!6220U62#(tt, _x0, _x1)]] = 2x0 + 2x1 >= 2x0 + 2x1 = [[a!6220!6220U63#(a!6220!6220isNat(_x1), _x0, _x1)]] [[a!6220!6220U63#(tt, _x0, _x1)]] = 2x0 + 2x1 >= 2x0 + 2x1 = [[a!6220!6220U64#(a!6220!6220isNatKind(_x1), _x0, _x1)]] [[a!6220!6220U64#(tt, _x0, _x1)]] = 2x0 + 2x1 >= 2x0 + 2x1 = [[a!6220!6220plus#(mark(_x1), mark(_x0))]] [[a!6220!6220U64#(tt, _x0, _x1)]] = 2x0 + 2x1 >= 2x1 = [[mark#(_x1)]] [[a!6220!6220U64#(tt, _x0, _x1)]] = 2x0 + 2x1 >= 2x0 = [[mark#(_x0)]] [[a!6220!6220plus#(_x0, s(_x1))]] = 2x0 + 2x1 >= 2x0 + 2x1 = [[a!6220!6220U61#(a!6220!6220isNat(_x1), _x1, _x0)]] [[mark#(U11(_x0, _x1, _x2))]] = 2x0 >= 2x0 = [[mark#(_x0)]] [[mark#(U12(_x0, _x1, _x2))]] = 2x0 >= 2x0 = [[mark#(_x0)]] [[mark#(U13(_x0, _x1, _x2))]] = 2x0 >= 2x0 = [[mark#(_x0)]] [[mark#(U14(_x0, _x1, _x2))]] = 4x0 >= 2x0 = [[mark#(_x0)]] [[mark#(U15(_x0, _x1))]] = 2x0 >= 2x0 = [[mark#(_x0)]] [[mark#(U16(_x0))]] = 2x0 >= 2x0 = [[mark#(_x0)]] [[mark#(U21(_x0, _x1))]] = 2x0 >= 2x0 = [[mark#(_x0)]] [[mark#(U22(_x0, _x1))]] = 4x0 >= 2x0 = [[mark#(_x0)]] [[mark#(U23(_x0))]] = 2x0 >= 2x0 = [[mark#(_x0)]] [[mark#(U31(_x0, _x1))]] = 4x0 >= 2x0 = [[mark#(_x0)]] [[mark#(U32(_x0))]] = 2x0 >= 2x0 = [[mark#(_x0)]] [[mark#(U41(_x0))]] = 2x0 >= 2x0 = [[mark#(_x0)]] [[mark#(U52(_x0, _x1))]] = 4 + 2x1 + 4x0 > 1 + 2x1 = [[a!6220!6220U52#(mark(_x0), _x1)]] [[mark#(U52(_x0, _x1))]] = 4 + 2x1 + 4x0 > 2x0 = [[mark#(_x0)]] [[mark#(U61(_x0, _x1, _x2))]] = 2x1 + 2x2 + 4x0 >= 2x1 + 2x2 = [[a!6220!6220U61#(mark(_x0), _x1, _x2)]] [[mark#(U61(_x0, _x1, _x2))]] = 2x1 + 2x2 + 4x0 >= 2x0 = [[mark#(_x0)]] [[mark#(U62(_x0, _x1, _x2))]] = 2x0 + 2x1 + 2x2 >= 2x1 + 2x2 = [[a!6220!6220U62#(mark(_x0), _x1, _x2)]] [[mark#(U62(_x0, _x1, _x2))]] = 2x0 + 2x1 + 2x2 >= 2x0 = [[mark#(_x0)]] [[mark#(U63(_x0, _x1, _x2))]] = 2x1 + 2x2 + 4x0 >= 2x1 + 2x2 = [[a!6220!6220U63#(mark(_x0), _x1, _x2)]] [[mark#(U63(_x0, _x1, _x2))]] = 2x1 + 2x2 + 4x0 >= 2x0 = [[mark#(_x0)]] [[mark#(U64(_x0, _x1, _x2))]] = 2x1 + 2x2 + 4x0 >= 2x1 + 2x2 = [[a!6220!6220U64#(mark(_x0), _x1, _x2)]] [[mark#(U64(_x0, _x1, _x2))]] = 2x1 + 2x2 + 4x0 >= 2x0 = [[mark#(_x0)]] [[mark#(plus(_x0, _x1))]] = 2x0 + 2x1 >= 2x0 + 2x1 = [[a!6220!6220plus#(mark(_x0), mark(_x1))]] [[mark#(plus(_x0, _x1))]] = 2x0 + 2x1 >= 2x0 = [[mark#(_x0)]] [[mark#(plus(_x0, _x1))]] = 2x0 + 2x1 >= 2x1 = [[mark#(_x1)]] [[mark#(s(_x0))]] = 2x0 >= 2x0 = [[mark#(_x0)]] [[a!6220!6220U11(tt, _x0, _x1)]] = 0 >= 0 = [[a!6220!6220U12(a!6220!6220isNatKind(_x0), _x0, _x1)]] [[a!6220!6220U12(tt, _x0, _x1)]] = 0 >= 0 = [[a!6220!6220U13(a!6220!6220isNatKind(_x1), _x0, _x1)]] [[a!6220!6220U13(tt, _x0, _x1)]] = 0 >= 0 = [[a!6220!6220U14(a!6220!6220isNatKind(_x1), _x0, _x1)]] [[a!6220!6220U14(tt, _x0, _x1)]] = 0 >= 0 = [[a!6220!6220U15(a!6220!6220isNat(_x0), _x1)]] [[a!6220!6220U15(tt, _x0)]] = 0 >= 0 = [[a!6220!6220U16(a!6220!6220isNat(_x0))]] [[a!6220!6220U16(tt)]] = 0 >= 0 = [[tt]] [[a!6220!6220U21(tt, _x0)]] = 0 >= 0 = [[a!6220!6220U22(a!6220!6220isNatKind(_x0), _x0)]] [[a!6220!6220U22(tt, _x0)]] = 0 >= 0 = [[a!6220!6220U23(a!6220!6220isNat(_x0))]] [[a!6220!6220U23(tt)]] = 0 >= 0 = [[tt]] [[a!6220!6220U31(tt, _x0)]] = 0 >= 0 = [[a!6220!6220U32(a!6220!6220isNatKind(_x0))]] [[a!6220!6220U32(tt)]] = 0 >= 0 = [[tt]] [[a!6220!6220U41(tt)]] = 0 >= 0 = [[tt]] [[a!6220!6220U51(tt, _x0)]] = 2 + x0 >= 2 + x0 = [[a!6220!6220U52(a!6220!6220isNatKind(_x0), _x0)]] [[a!6220!6220U52(tt, _x0)]] = 2 + x0 >= x0 = [[mark(_x0)]] [[a!6220!6220U61(tt, _x0, _x1)]] = x0 + x1 >= x0 + x1 = [[a!6220!6220U62(a!6220!6220isNatKind(_x0), _x0, _x1)]] [[a!6220!6220U62(tt, _x0, _x1)]] = x0 + x1 >= x0 + x1 = [[a!6220!6220U63(a!6220!6220isNat(_x1), _x0, _x1)]] [[a!6220!6220U63(tt, _x0, _x1)]] = x0 + x1 >= x0 + x1 = [[a!6220!6220U64(a!6220!6220isNatKind(_x1), _x0, _x1)]] [[a!6220!6220U64(tt, _x0, _x1)]] = x0 + x1 >= x0 + x1 = [[s(a!6220!6220plus(mark(_x1), mark(_x0)))]] [[a!6220!6220isNat(0)]] = 0 >= 0 = [[tt]] [[a!6220!6220isNat(plus(_x0, _x1))]] = 0 >= 0 = [[a!6220!6220U11(a!6220!6220isNatKind(_x0), _x0, _x1)]] [[a!6220!6220isNat(s(_x0))]] = 0 >= 0 = [[a!6220!6220U21(a!6220!6220isNatKind(_x0), _x0)]] [[a!6220!6220isNatKind(0)]] = 0 >= 0 = [[tt]] [[a!6220!6220isNatKind(plus(_x0, _x1))]] = 0 >= 0 = [[a!6220!6220U31(a!6220!6220isNatKind(_x0), _x1)]] [[a!6220!6220isNatKind(s(_x0))]] = 0 >= 0 = [[a!6220!6220U41(a!6220!6220isNatKind(_x0))]] [[a!6220!6220plus(_x0, 0)]] = 2 + x0 >= 2 + x0 = [[a!6220!6220U51(a!6220!6220isNat(_x0), _x0)]] [[a!6220!6220plus(_x0, s(_x1))]] = x0 + x1 >= x0 + x1 = [[a!6220!6220U61(a!6220!6220isNat(_x1), _x1, _x0)]] [[mark(U11(_x0, _x1, _x2))]] = x0 >= x0 = [[a!6220!6220U11(mark(_x0), _x1, _x2)]] [[mark(U12(_x0, _x1, _x2))]] = x0 >= x0 = [[a!6220!6220U12(mark(_x0), _x1, _x2)]] [[mark(isNatKind(_x0))]] = 0 >= 0 = [[a!6220!6220isNatKind(_x0)]] [[mark(U13(_x0, _x1, _x2))]] = x0 >= x0 = [[a!6220!6220U13(mark(_x0), _x1, _x2)]] [[mark(U14(_x0, _x1, _x2))]] = 2x0 >= 2x0 = [[a!6220!6220U14(mark(_x0), _x1, _x2)]] [[mark(U15(_x0, _x1))]] = x0 >= x0 = [[a!6220!6220U15(mark(_x0), _x1)]] [[mark(isNat(_x0))]] = 0 >= 0 = [[a!6220!6220isNat(_x0)]] [[mark(U16(_x0))]] = x0 >= x0 = [[a!6220!6220U16(mark(_x0))]] [[mark(U21(_x0, _x1))]] = x0 >= x0 = [[a!6220!6220U21(mark(_x0), _x1)]] [[mark(U22(_x0, _x1))]] = 2x0 >= 2x0 = [[a!6220!6220U22(mark(_x0), _x1)]] [[mark(U23(_x0))]] = x0 >= x0 = [[a!6220!6220U23(mark(_x0))]] [[mark(U31(_x0, _x1))]] = 2x0 >= 2x0 = [[a!6220!6220U31(mark(_x0), _x1)]] [[mark(U32(_x0))]] = x0 >= x0 = [[a!6220!6220U32(mark(_x0))]] [[mark(U41(_x0))]] = x0 >= x0 = [[a!6220!6220U41(mark(_x0))]] [[mark(U51(_x0, _x1))]] = 2 + x1 >= 2 + x1 = [[a!6220!6220U51(mark(_x0), _x1)]] [[mark(U52(_x0, _x1))]] = 2 + x1 + 2x0 >= 2 + x1 + 2x0 = [[a!6220!6220U52(mark(_x0), _x1)]] [[mark(U61(_x0, _x1, _x2))]] = x1 + x2 + 2x0 >= x1 + x2 + 2x0 = [[a!6220!6220U61(mark(_x0), _x1, _x2)]] [[mark(U62(_x0, _x1, _x2))]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[a!6220!6220U62(mark(_x0), _x1, _x2)]] [[mark(U63(_x0, _x1, _x2))]] = x1 + x2 + 2x0 >= x1 + x2 + 2x0 = [[a!6220!6220U63(mark(_x0), _x1, _x2)]] [[mark(U64(_x0, _x1, _x2))]] = x1 + x2 + 2x0 >= x1 + x2 + 2x0 = [[a!6220!6220U64(mark(_x0), _x1, _x2)]] [[mark(plus(_x0, _x1))]] = x0 + x1 >= x0 + x1 = [[a!6220!6220plus(mark(_x0), mark(_x1))]] [[mark(tt)]] = 0 >= 0 = [[tt]] [[mark(s(_x0))]] = x0 >= x0 = [[s(mark(_x0))]] [[mark(0)]] = 2 >= 2 = [[0]] [[a!6220!6220U11(_x0, _x1, _x2)]] = x0 >= x0 = [[U11(_x0, _x1, _x2)]] [[a!6220!6220U12(_x0, _x1, _x2)]] = x0 >= x0 = [[U12(_x0, _x1, _x2)]] [[a!6220!6220isNatKind(_x0)]] = 0 >= 0 = [[isNatKind(_x0)]] [[a!6220!6220U13(_x0, _x1, _x2)]] = x0 >= x0 = [[U13(_x0, _x1, _x2)]] [[a!6220!6220U14(_x0, _x1, _x2)]] = 2x0 >= 2x0 = [[U14(_x0, _x1, _x2)]] [[a!6220!6220U15(_x0, _x1)]] = x0 >= x0 = [[U15(_x0, _x1)]] [[a!6220!6220isNat(_x0)]] = 0 >= 0 = [[isNat(_x0)]] [[a!6220!6220U16(_x0)]] = x0 >= x0 = [[U16(_x0)]] [[a!6220!6220U21(_x0, _x1)]] = x0 >= x0 = [[U21(_x0, _x1)]] [[a!6220!6220U22(_x0, _x1)]] = 2x0 >= 2x0 = [[U22(_x0, _x1)]] [[a!6220!6220U23(_x0)]] = x0 >= x0 = [[U23(_x0)]] [[a!6220!6220U31(_x0, _x1)]] = 2x0 >= 2x0 = [[U31(_x0, _x1)]] [[a!6220!6220U32(_x0)]] = x0 >= x0 = [[U32(_x0)]] [[a!6220!6220U41(_x0)]] = x0 >= x0 = [[U41(_x0)]] [[a!6220!6220U51(_x0, _x1)]] = 2 + x1 >= 2 + x1 = [[U51(_x0, _x1)]] [[a!6220!6220U52(_x0, _x1)]] = 2 + x1 + 2x0 >= 2 + x1 + 2x0 = [[U52(_x0, _x1)]] [[a!6220!6220U61(_x0, _x1, _x2)]] = x1 + x2 + 2x0 >= x1 + x2 + 2x0 = [[U61(_x0, _x1, _x2)]] [[a!6220!6220U62(_x0, _x1, _x2)]] = x0 + x1 + x2 >= x0 + x1 + x2 = [[U62(_x0, _x1, _x2)]] [[a!6220!6220U63(_x0, _x1, _x2)]] = x1 + x2 + 2x0 >= x1 + x2 + 2x0 = [[U63(_x0, _x1, _x2)]] [[a!6220!6220U64(_x0, _x1, _x2)]] = x1 + x2 + 2x0 >= x1 + x2 + 2x0 = [[U64(_x0, _x1, _x2)]] [[a!6220!6220plus(_x0, _x1)]] = x0 + x1 >= 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_4, R_0, minimal, formative) by (P_5, R_0, minimal, formative), where P_5 consists of: a!6220!6220U61#(tt, X, Y) =#> a!6220!6220U62#(a!6220!6220isNatKind(X), X, Y) a!6220!6220U62#(tt, X, Y) =#> a!6220!6220U63#(a!6220!6220isNat(Y), X, Y) a!6220!6220U63#(tt, X, Y) =#> a!6220!6220U64#(a!6220!6220isNatKind(Y), X, Y) a!6220!6220U64#(tt, X, Y) =#> a!6220!6220plus#(mark(Y), mark(X)) a!6220!6220U64#(tt, X, Y) =#> mark#(Y) a!6220!6220U64#(tt, X, Y) =#> mark#(X) a!6220!6220plus#(X, s(Y)) =#> a!6220!6220U61#(a!6220!6220isNat(Y), Y, X) mark#(U11(X, Y, Z)) =#> mark#(X) mark#(U12(X, Y, Z)) =#> mark#(X) mark#(U13(X, Y, Z)) =#> mark#(X) mark#(U14(X, Y, Z)) =#> mark#(X) mark#(U15(X, Y)) =#> mark#(X) mark#(U16(X)) =#> mark#(X) mark#(U21(X, Y)) =#> mark#(X) mark#(U22(X, Y)) =#> mark#(X) mark#(U23(X)) =#> mark#(X) mark#(U31(X, Y)) =#> mark#(X) mark#(U32(X)) =#> mark#(X) mark#(U41(X)) =#> mark#(X) mark#(U61(X, Y, Z)) =#> a!6220!6220U61#(mark(X), Y, Z) mark#(U61(X, Y, Z)) =#> mark#(X) mark#(U62(X, Y, Z)) =#> a!6220!6220U62#(mark(X), Y, Z) mark#(U62(X, Y, Z)) =#> mark#(X) mark#(U63(X, Y, Z)) =#> a!6220!6220U63#(mark(X), Y, Z) mark#(U63(X, Y, Z)) =#> mark#(X) mark#(U64(X, Y, Z)) =#> a!6220!6220U64#(mark(X), Y, Z) mark#(U64(X, Y, Z)) =#> mark#(X) mark#(plus(X, Y)) =#> a!6220!6220plus#(mark(X), mark(Y)) mark#(plus(X, Y)) =#> mark#(X) mark#(plus(X, Y)) =#> mark#(Y) mark#(s(X)) =#> mark#(X) Thus, the original system is terminating if each of (P_1, R_0, minimal, formative), (P_2, 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 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: a!6220!6220U61#(tt, X, Y) >? a!6220!6220U62#(a!6220!6220isNatKind(X), X, Y) a!6220!6220U62#(tt, X, Y) >? a!6220!6220U63#(a!6220!6220isNat(Y), X, Y) a!6220!6220U63#(tt, X, Y) >? a!6220!6220U64#(a!6220!6220isNatKind(Y), X, Y) a!6220!6220U64#(tt, X, Y) >? a!6220!6220plus#(mark(Y), mark(X)) a!6220!6220U64#(tt, X, Y) >? mark#(Y) a!6220!6220U64#(tt, X, Y) >? mark#(X) a!6220!6220plus#(X, s(Y)) >? a!6220!6220U61#(a!6220!6220isNat(Y), Y, X) mark#(U11(X, Y, Z)) >? mark#(X) mark#(U12(X, Y, Z)) >? mark#(X) mark#(U13(X, Y, Z)) >? mark#(X) mark#(U14(X, Y, Z)) >? mark#(X) mark#(U15(X, Y)) >? mark#(X) mark#(U16(X)) >? mark#(X) mark#(U21(X, Y)) >? mark#(X) mark#(U22(X, Y)) >? mark#(X) mark#(U23(X)) >? mark#(X) mark#(U31(X, Y)) >? mark#(X) mark#(U32(X)) >? mark#(X) mark#(U41(X)) >? mark#(X) mark#(U61(X, Y, Z)) >? a!6220!6220U61#(mark(X), Y, Z) mark#(U61(X, Y, Z)) >? mark#(X) mark#(U62(X, Y, Z)) >? a!6220!6220U62#(mark(X), Y, Z) mark#(U62(X, Y, Z)) >? mark#(X) mark#(U63(X, Y, Z)) >? a!6220!6220U63#(mark(X), Y, Z) mark#(U63(X, Y, Z)) >? mark#(X) mark#(U64(X, Y, Z)) >? a!6220!6220U64#(mark(X), Y, Z) mark#(U64(X, Y, Z)) >? mark#(X) mark#(plus(X, Y)) >? a!6220!6220plus#(mark(X), mark(Y)) mark#(plus(X, Y)) >? mark#(X) mark#(plus(X, Y)) >? mark#(Y) mark#(s(X)) >? mark#(X) a!6220!6220U11(tt, X, Y) >= a!6220!6220U12(a!6220!6220isNatKind(X), X, Y) a!6220!6220U12(tt, X, Y) >= a!6220!6220U13(a!6220!6220isNatKind(Y), X, Y) a!6220!6220U13(tt, X, Y) >= a!6220!6220U14(a!6220!6220isNatKind(Y), X, Y) a!6220!6220U14(tt, X, Y) >= a!6220!6220U15(a!6220!6220isNat(X), Y) a!6220!6220U15(tt, X) >= a!6220!6220U16(a!6220!6220isNat(X)) a!6220!6220U16(tt) >= tt a!6220!6220U21(tt, X) >= a!6220!6220U22(a!6220!6220isNatKind(X), X) a!6220!6220U22(tt, X) >= a!6220!6220U23(a!6220!6220isNat(X)) a!6220!6220U23(tt) >= tt a!6220!6220U31(tt, X) >= a!6220!6220U32(a!6220!6220isNatKind(X)) a!6220!6220U32(tt) >= tt a!6220!6220U41(tt) >= tt a!6220!6220U51(tt, X) >= a!6220!6220U52(a!6220!6220isNatKind(X), X) a!6220!6220U52(tt, X) >= mark(X) a!6220!6220U61(tt, X, Y) >= a!6220!6220U62(a!6220!6220isNatKind(X), X, Y) a!6220!6220U62(tt, X, Y) >= a!6220!6220U63(a!6220!6220isNat(Y), X, Y) a!6220!6220U63(tt, X, Y) >= a!6220!6220U64(a!6220!6220isNatKind(Y), X, Y) a!6220!6220U64(tt, X, Y) >= s(a!6220!6220plus(mark(Y), mark(X))) a!6220!6220isNat(0) >= tt a!6220!6220isNat(plus(X, Y)) >= a!6220!6220U11(a!6220!6220isNatKind(X), X, Y) a!6220!6220isNat(s(X)) >= a!6220!6220U21(a!6220!6220isNatKind(X), X) a!6220!6220isNatKind(0) >= tt a!6220!6220isNatKind(plus(X, Y)) >= a!6220!6220U31(a!6220!6220isNatKind(X), Y) a!6220!6220isNatKind(s(X)) >= a!6220!6220U41(a!6220!6220isNatKind(X)) a!6220!6220plus(X, 0) >= a!6220!6220U51(a!6220!6220isNat(X), X) a!6220!6220plus(X, s(Y)) >= a!6220!6220U61(a!6220!6220isNat(Y), Y, X) mark(U11(X, Y, Z)) >= a!6220!6220U11(mark(X), Y, Z) mark(U12(X, Y, Z)) >= a!6220!6220U12(mark(X), Y, Z) mark(isNatKind(X)) >= a!6220!6220isNatKind(X) mark(U13(X, Y, Z)) >= a!6220!6220U13(mark(X), Y, Z) mark(U14(X, Y, Z)) >= a!6220!6220U14(mark(X), Y, Z) mark(U15(X, Y)) >= a!6220!6220U15(mark(X), Y) mark(isNat(X)) >= a!6220!6220isNat(X) mark(U16(X)) >= a!6220!6220U16(mark(X)) mark(U21(X, Y)) >= a!6220!6220U21(mark(X), Y) mark(U22(X, Y)) >= a!6220!6220U22(mark(X), Y) mark(U23(X)) >= a!6220!6220U23(mark(X)) mark(U31(X, Y)) >= a!6220!6220U31(mark(X), Y) mark(U32(X)) >= a!6220!6220U32(mark(X)) mark(U41(X)) >= a!6220!6220U41(mark(X)) mark(U51(X, Y)) >= a!6220!6220U51(mark(X), Y) mark(U52(X, Y)) >= a!6220!6220U52(mark(X), Y) mark(U61(X, Y, Z)) >= a!6220!6220U61(mark(X), Y, Z) mark(U62(X, Y, Z)) >= a!6220!6220U62(mark(X), Y, Z) mark(U63(X, Y, Z)) >= a!6220!6220U63(mark(X), Y, Z) mark(U64(X, Y, Z)) >= a!6220!6220U64(mark(X), Y, Z) mark(plus(X, Y)) >= a!6220!6220plus(mark(X), mark(Y)) mark(tt) >= tt mark(s(X)) >= s(mark(X)) mark(0) >= 0 a!6220!6220U11(X, Y, Z) >= U11(X, Y, Z) a!6220!6220U12(X, Y, Z) >= U12(X, Y, Z) a!6220!6220isNatKind(X) >= isNatKind(X) a!6220!6220U13(X, Y, Z) >= U13(X, Y, Z) a!6220!6220U14(X, Y, Z) >= U14(X, Y, Z) a!6220!6220U15(X, Y) >= U15(X, Y) a!6220!6220isNat(X) >= isNat(X) a!6220!6220U16(X) >= U16(X) a!6220!6220U21(X, Y) >= U21(X, Y) a!6220!6220U22(X, Y) >= U22(X, Y) a!6220!6220U23(X) >= U23(X) a!6220!6220U31(X, Y) >= U31(X, Y) a!6220!6220U32(X) >= U32(X) a!6220!6220U41(X) >= U41(X) a!6220!6220U51(X, Y) >= U51(X, Y) a!6220!6220U52(X, Y) >= U52(X, Y) a!6220!6220U61(X, Y, Z) >= U61(X, Y, Z) a!6220!6220U62(X, Y, Z) >= U62(X, Y, Z) a!6220!6220U63(X, Y, Z) >= U63(X, Y, Z) a!6220!6220U64(X, Y, Z) >= U64(X, Y, Z) a!6220!6220plus(X, 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 = \y0y1y2.y0 U12 = \y0y1y2.y0 U13 = \y0y1y2.y0 U14 = \y0y1y2.y0 U15 = \y0y1.y0 U16 = \y0.y0 U21 = \y0y1.y0 U22 = \y0y1.2y0 U23 = \y0.2y0 U31 = \y0y1.y0 U32 = \y0.y0 U41 = \y0.2y0 U51 = \y0y1.y1 U52 = \y0y1.y1 U61 = \y0y1y2.1 + y2 + 2y0 + 2y1 U62 = \y0y1y2.1 + y0 + y2 + 2y1 U63 = \y0y1y2.1 + y0 + y2 + 2y1 U64 = \y0y1y2.1 + y0 + y2 + 2y1 a!6220!6220U11 = \y0y1y2.y0 a!6220!6220U12 = \y0y1y2.y0 a!6220!6220U13 = \y0y1y2.y0 a!6220!6220U14 = \y0y1y2.y0 a!6220!6220U15 = \y0y1.y0 a!6220!6220U16 = \y0.y0 a!6220!6220U21 = \y0y1.y0 a!6220!6220U22 = \y0y1.2y0 a!6220!6220U23 = \y0.2y0 a!6220!6220U31 = \y0y1.y0 a!6220!6220U32 = \y0.y0 a!6220!6220U41 = \y0.2y0 a!6220!6220U51 = \y0y1.y1 a!6220!6220U52 = \y0y1.y1 a!6220!6220U61 = \y0y1y2.1 + y2 + 2y0 + 2y1 a!6220!6220U61# = \y0y1y2.y2 + 2y1 a!6220!6220U62 = \y0y1y2.1 + y0 + y2 + 2y1 a!6220!6220U62# = \y0y1y2.y2 + 2y1 a!6220!6220U63 = \y0y1y2.1 + y0 + y2 + 2y1 a!6220!6220U63# = \y0y1y2.y2 + 2y1 a!6220!6220U64 = \y0y1y2.1 + y0 + y2 + 2y1 a!6220!6220U64# = \y0y1y2.y2 + 2y1 a!6220!6220isNat = \y0.0 a!6220!6220isNatKind = \y0.0 a!6220!6220plus = \y0y1.y0 + 2y1 a!6220!6220plus# = \y0y1.y0 + 2y1 isNat = \y0.0 isNatKind = \y0.0 mark = \y0.y0 mark# = \y0.y0 plus = \y0y1.y0 + 2y1 s = \y0.1 + y0 tt = 0 Using this interpretation, the requirements translate to: [[a!6220!6220U61#(tt, _x0, _x1)]] = x1 + 2x0 >= x1 + 2x0 = [[a!6220!6220U62#(a!6220!6220isNatKind(_x0), _x0, _x1)]] [[a!6220!6220U62#(tt, _x0, _x1)]] = x1 + 2x0 >= x1 + 2x0 = [[a!6220!6220U63#(a!6220!6220isNat(_x1), _x0, _x1)]] [[a!6220!6220U63#(tt, _x0, _x1)]] = x1 + 2x0 >= x1 + 2x0 = [[a!6220!6220U64#(a!6220!6220isNatKind(_x1), _x0, _x1)]] [[a!6220!6220U64#(tt, _x0, _x1)]] = x1 + 2x0 >= x1 + 2x0 = [[a!6220!6220plus#(mark(_x1), mark(_x0))]] [[a!6220!6220U64#(tt, _x0, _x1)]] = x1 + 2x0 >= x1 = [[mark#(_x1)]] [[a!6220!6220U64#(tt, _x0, _x1)]] = x1 + 2x0 >= x0 = [[mark#(_x0)]] [[a!6220!6220plus#(_x0, s(_x1))]] = 2 + x0 + 2x1 > x0 + 2x1 = [[a!6220!6220U61#(a!6220!6220isNat(_x1), _x1, _x0)]] [[mark#(U11(_x0, _x1, _x2))]] = x0 >= x0 = [[mark#(_x0)]] [[mark#(U12(_x0, _x1, _x2))]] = x0 >= x0 = [[mark#(_x0)]] [[mark#(U13(_x0, _x1, _x2))]] = x0 >= x0 = [[mark#(_x0)]] [[mark#(U14(_x0, _x1, _x2))]] = x0 >= x0 = [[mark#(_x0)]] [[mark#(U15(_x0, _x1))]] = x0 >= x0 = [[mark#(_x0)]] [[mark#(U16(_x0))]] = x0 >= x0 = [[mark#(_x0)]] [[mark#(U21(_x0, _x1))]] = x0 >= x0 = [[mark#(_x0)]] [[mark#(U22(_x0, _x1))]] = 2x0 >= x0 = [[mark#(_x0)]] [[mark#(U23(_x0))]] = 2x0 >= x0 = [[mark#(_x0)]] [[mark#(U31(_x0, _x1))]] = x0 >= x0 = [[mark#(_x0)]] [[mark#(U32(_x0))]] = x0 >= x0 = [[mark#(_x0)]] [[mark#(U41(_x0))]] = 2x0 >= x0 = [[mark#(_x0)]] [[mark#(U61(_x0, _x1, _x2))]] = 1 + x2 + 2x0 + 2x1 > x2 + 2x1 = [[a!6220!6220U61#(mark(_x0), _x1, _x2)]] [[mark#(U61(_x0, _x1, _x2))]] = 1 + x2 + 2x0 + 2x1 > x0 = [[mark#(_x0)]] [[mark#(U62(_x0, _x1, _x2))]] = 1 + x0 + x2 + 2x1 > x2 + 2x1 = [[a!6220!6220U62#(mark(_x0), _x1, _x2)]] [[mark#(U62(_x0, _x1, _x2))]] = 1 + x0 + x2 + 2x1 > x0 = [[mark#(_x0)]] [[mark#(U63(_x0, _x1, _x2))]] = 1 + x0 + x2 + 2x1 > x2 + 2x1 = [[a!6220!6220U63#(mark(_x0), _x1, _x2)]] [[mark#(U63(_x0, _x1, _x2))]] = 1 + x0 + x2 + 2x1 > x0 = [[mark#(_x0)]] [[mark#(U64(_x0, _x1, _x2))]] = 1 + x0 + x2 + 2x1 > x2 + 2x1 = [[a!6220!6220U64#(mark(_x0), _x1, _x2)]] [[mark#(U64(_x0, _x1, _x2))]] = 1 + x0 + x2 + 2x1 > x0 = [[mark#(_x0)]] [[mark#(plus(_x0, _x1))]] = x0 + 2x1 >= x0 + 2x1 = [[a!6220!6220plus#(mark(_x0), mark(_x1))]] [[mark#(plus(_x0, _x1))]] = x0 + 2x1 >= x0 = [[mark#(_x0)]] [[mark#(plus(_x0, _x1))]] = x0 + 2x1 >= x1 = [[mark#(_x1)]] [[mark#(s(_x0))]] = 1 + x0 > x0 = [[mark#(_x0)]] [[a!6220!6220U11(tt, _x0, _x1)]] = 0 >= 0 = [[a!6220!6220U12(a!6220!6220isNatKind(_x0), _x0, _x1)]] [[a!6220!6220U12(tt, _x0, _x1)]] = 0 >= 0 = [[a!6220!6220U13(a!6220!6220isNatKind(_x1), _x0, _x1)]] [[a!6220!6220U13(tt, _x0, _x1)]] = 0 >= 0 = [[a!6220!6220U14(a!6220!6220isNatKind(_x1), _x0, _x1)]] [[a!6220!6220U14(tt, _x0, _x1)]] = 0 >= 0 = [[a!6220!6220U15(a!6220!6220isNat(_x0), _x1)]] [[a!6220!6220U15(tt, _x0)]] = 0 >= 0 = [[a!6220!6220U16(a!6220!6220isNat(_x0))]] [[a!6220!6220U16(tt)]] = 0 >= 0 = [[tt]] [[a!6220!6220U21(tt, _x0)]] = 0 >= 0 = [[a!6220!6220U22(a!6220!6220isNatKind(_x0), _x0)]] [[a!6220!6220U22(tt, _x0)]] = 0 >= 0 = [[a!6220!6220U23(a!6220!6220isNat(_x0))]] [[a!6220!6220U23(tt)]] = 0 >= 0 = [[tt]] [[a!6220!6220U31(tt, _x0)]] = 0 >= 0 = [[a!6220!6220U32(a!6220!6220isNatKind(_x0))]] [[a!6220!6220U32(tt)]] = 0 >= 0 = [[tt]] [[a!6220!6220U41(tt)]] = 0 >= 0 = [[tt]] [[a!6220!6220U51(tt, _x0)]] = x0 >= x0 = [[a!6220!6220U52(a!6220!6220isNatKind(_x0), _x0)]] [[a!6220!6220U52(tt, _x0)]] = x0 >= x0 = [[mark(_x0)]] [[a!6220!6220U61(tt, _x0, _x1)]] = 1 + x1 + 2x0 >= 1 + x1 + 2x0 = [[a!6220!6220U62(a!6220!6220isNatKind(_x0), _x0, _x1)]] [[a!6220!6220U62(tt, _x0, _x1)]] = 1 + x1 + 2x0 >= 1 + x1 + 2x0 = [[a!6220!6220U63(a!6220!6220isNat(_x1), _x0, _x1)]] [[a!6220!6220U63(tt, _x0, _x1)]] = 1 + x1 + 2x0 >= 1 + x1 + 2x0 = [[a!6220!6220U64(a!6220!6220isNatKind(_x1), _x0, _x1)]] [[a!6220!6220U64(tt, _x0, _x1)]] = 1 + x1 + 2x0 >= 1 + x1 + 2x0 = [[s(a!6220!6220plus(mark(_x1), mark(_x0)))]] [[a!6220!6220isNat(0)]] = 0 >= 0 = [[tt]] [[a!6220!6220isNat(plus(_x0, _x1))]] = 0 >= 0 = [[a!6220!6220U11(a!6220!6220isNatKind(_x0), _x0, _x1)]] [[a!6220!6220isNat(s(_x0))]] = 0 >= 0 = [[a!6220!6220U21(a!6220!6220isNatKind(_x0), _x0)]] [[a!6220!6220isNatKind(0)]] = 0 >= 0 = [[tt]] [[a!6220!6220isNatKind(plus(_x0, _x1))]] = 0 >= 0 = [[a!6220!6220U31(a!6220!6220isNatKind(_x0), _x1)]] [[a!6220!6220isNatKind(s(_x0))]] = 0 >= 0 = [[a!6220!6220U41(a!6220!6220isNatKind(_x0))]] [[a!6220!6220plus(_x0, 0)]] = x0 >= x0 = [[a!6220!6220U51(a!6220!6220isNat(_x0), _x0)]] [[a!6220!6220plus(_x0, s(_x1))]] = 2 + x0 + 2x1 >= 1 + x0 + 2x1 = [[a!6220!6220U61(a!6220!6220isNat(_x1), _x1, _x0)]] [[mark(U11(_x0, _x1, _x2))]] = x0 >= x0 = [[a!6220!6220U11(mark(_x0), _x1, _x2)]] [[mark(U12(_x0, _x1, _x2))]] = x0 >= x0 = [[a!6220!6220U12(mark(_x0), _x1, _x2)]] [[mark(isNatKind(_x0))]] = 0 >= 0 = [[a!6220!6220isNatKind(_x0)]] [[mark(U13(_x0, _x1, _x2))]] = x0 >= x0 = [[a!6220!6220U13(mark(_x0), _x1, _x2)]] [[mark(U14(_x0, _x1, _x2))]] = x0 >= x0 = [[a!6220!6220U14(mark(_x0), _x1, _x2)]] [[mark(U15(_x0, _x1))]] = x0 >= x0 = [[a!6220!6220U15(mark(_x0), _x1)]] [[mark(isNat(_x0))]] = 0 >= 0 = [[a!6220!6220isNat(_x0)]] [[mark(U16(_x0))]] = x0 >= x0 = [[a!6220!6220U16(mark(_x0))]] [[mark(U21(_x0, _x1))]] = x0 >= x0 = [[a!6220!6220U21(mark(_x0), _x1)]] [[mark(U22(_x0, _x1))]] = 2x0 >= 2x0 = [[a!6220!6220U22(mark(_x0), _x1)]] [[mark(U23(_x0))]] = 2x0 >= 2x0 = [[a!6220!6220U23(mark(_x0))]] [[mark(U31(_x0, _x1))]] = x0 >= x0 = [[a!6220!6220U31(mark(_x0), _x1)]] [[mark(U32(_x0))]] = x0 >= x0 = [[a!6220!6220U32(mark(_x0))]] [[mark(U41(_x0))]] = 2x0 >= 2x0 = [[a!6220!6220U41(mark(_x0))]] [[mark(U51(_x0, _x1))]] = x1 >= x1 = [[a!6220!6220U51(mark(_x0), _x1)]] [[mark(U52(_x0, _x1))]] = x1 >= x1 = [[a!6220!6220U52(mark(_x0), _x1)]] [[mark(U61(_x0, _x1, _x2))]] = 1 + x2 + 2x0 + 2x1 >= 1 + x2 + 2x0 + 2x1 = [[a!6220!6220U61(mark(_x0), _x1, _x2)]] [[mark(U62(_x0, _x1, _x2))]] = 1 + x0 + x2 + 2x1 >= 1 + x0 + x2 + 2x1 = [[a!6220!6220U62(mark(_x0), _x1, _x2)]] [[mark(U63(_x0, _x1, _x2))]] = 1 + x0 + x2 + 2x1 >= 1 + x0 + x2 + 2x1 = [[a!6220!6220U63(mark(_x0), _x1, _x2)]] [[mark(U64(_x0, _x1, _x2))]] = 1 + x0 + x2 + 2x1 >= 1 + x0 + x2 + 2x1 = [[a!6220!6220U64(mark(_x0), _x1, _x2)]] [[mark(plus(_x0, _x1))]] = x0 + 2x1 >= x0 + 2x1 = [[a!6220!6220plus(mark(_x0), mark(_x1))]] [[mark(tt)]] = 0 >= 0 = [[tt]] [[mark(s(_x0))]] = 1 + x0 >= 1 + x0 = [[s(mark(_x0))]] [[mark(0)]] = 0 >= 0 = [[0]] [[a!6220!6220U11(_x0, _x1, _x2)]] = x0 >= x0 = [[U11(_x0, _x1, _x2)]] [[a!6220!6220U12(_x0, _x1, _x2)]] = x0 >= x0 = [[U12(_x0, _x1, _x2)]] [[a!6220!6220isNatKind(_x0)]] = 0 >= 0 = [[isNatKind(_x0)]] [[a!6220!6220U13(_x0, _x1, _x2)]] = x0 >= x0 = [[U13(_x0, _x1, _x2)]] [[a!6220!6220U14(_x0, _x1, _x2)]] = x0 >= x0 = [[U14(_x0, _x1, _x2)]] [[a!6220!6220U15(_x0, _x1)]] = x0 >= x0 = [[U15(_x0, _x1)]] [[a!6220!6220isNat(_x0)]] = 0 >= 0 = [[isNat(_x0)]] [[a!6220!6220U16(_x0)]] = x0 >= x0 = [[U16(_x0)]] [[a!6220!6220U21(_x0, _x1)]] = x0 >= x0 = [[U21(_x0, _x1)]] [[a!6220!6220U22(_x0, _x1)]] = 2x0 >= 2x0 = [[U22(_x0, _x1)]] [[a!6220!6220U23(_x0)]] = 2x0 >= 2x0 = [[U23(_x0)]] [[a!6220!6220U31(_x0, _x1)]] = x0 >= x0 = [[U31(_x0, _x1)]] [[a!6220!6220U32(_x0)]] = x0 >= x0 = [[U32(_x0)]] [[a!6220!6220U41(_x0)]] = 2x0 >= 2x0 = [[U41(_x0)]] [[a!6220!6220U51(_x0, _x1)]] = x1 >= x1 = [[U51(_x0, _x1)]] [[a!6220!6220U52(_x0, _x1)]] = x1 >= x1 = [[U52(_x0, _x1)]] [[a!6220!6220U61(_x0, _x1, _x2)]] = 1 + x2 + 2x0 + 2x1 >= 1 + x2 + 2x0 + 2x1 = [[U61(_x0, _x1, _x2)]] [[a!6220!6220U62(_x0, _x1, _x2)]] = 1 + x0 + x2 + 2x1 >= 1 + x0 + x2 + 2x1 = [[U62(_x0, _x1, _x2)]] [[a!6220!6220U63(_x0, _x1, _x2)]] = 1 + x0 + x2 + 2x1 >= 1 + x0 + x2 + 2x1 = [[U63(_x0, _x1, _x2)]] [[a!6220!6220U64(_x0, _x1, _x2)]] = 1 + x0 + x2 + 2x1 >= 1 + x0 + x2 + 2x1 = [[U64(_x0, _x1, _x2)]] [[a!6220!6220plus(_x0, _x1)]] = x0 + 2x1 >= x0 + 2x1 = [[plus(_x0, _x1)]] By the observations in [Kop12, Sec. 6.6], this reduction pair suffices; we may thus replace the dependency pair problem (P_5, R_0, minimal, formative) by (P_6, R_0, minimal, formative), where P_6 consists of: a!6220!6220U61#(tt, X, Y) =#> a!6220!6220U62#(a!6220!6220isNatKind(X), X, Y) a!6220!6220U62#(tt, X, Y) =#> a!6220!6220U63#(a!6220!6220isNat(Y), X, Y) a!6220!6220U63#(tt, X, Y) =#> a!6220!6220U64#(a!6220!6220isNatKind(Y), X, Y) a!6220!6220U64#(tt, X, Y) =#> a!6220!6220plus#(mark(Y), mark(X)) a!6220!6220U64#(tt, X, Y) =#> mark#(Y) a!6220!6220U64#(tt, X, Y) =#> mark#(X) mark#(U11(X, Y, Z)) =#> mark#(X) mark#(U12(X, Y, Z)) =#> mark#(X) mark#(U13(X, Y, Z)) =#> mark#(X) mark#(U14(X, Y, Z)) =#> mark#(X) mark#(U15(X, Y)) =#> mark#(X) mark#(U16(X)) =#> mark#(X) mark#(U21(X, Y)) =#> mark#(X) mark#(U22(X, Y)) =#> mark#(X) mark#(U23(X)) =#> mark#(X) mark#(U31(X, Y)) =#> mark#(X) mark#(U32(X)) =#> mark#(X) mark#(U41(X)) =#> mark#(X) mark#(plus(X, Y)) =#> a!6220!6220plus#(mark(X), mark(Y)) mark#(plus(X, Y)) =#> mark#(X) mark#(plus(X, Y)) =#> mark#(Y) Thus, the original system is terminating if each of (P_1, R_0, minimal, formative), (P_2, 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 place the elements of P in a dependency graph approximation G (see e.g. [Kop12, Thm. 7.27, 7.29], as follows: * 0 : 1 * 1 : 2 * 2 : 3, 4, 5 * 3 : * 4 : 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 * 5 : 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 * 6 : 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 * 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 : 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 * 10 : 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 * 11 : 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 * 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 : 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 * 15 : 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 * 16 : 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 * 17 : 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 * 18 : * 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_7: mark#(U11(X, Y, Z)) =#> mark#(X) mark#(U12(X, Y, Z)) =#> mark#(X) mark#(U13(X, Y, Z)) =#> mark#(X) mark#(U14(X, Y, Z)) =#> mark#(X) mark#(U15(X, Y)) =#> mark#(X) mark#(U16(X)) =#> mark#(X) mark#(U21(X, Y)) =#> mark#(X) mark#(U22(X, Y)) =#> mark#(X) mark#(U23(X)) =#> mark#(X) mark#(U31(X, Y)) =#> mark#(X) mark#(U32(X)) =#> mark#(X) mark#(U41(X)) =#> mark#(X) mark#(plus(X, Y)) =#> mark#(X) mark#(plus(X, Y)) =#> mark#(Y) By [Kop12, Thm. 7.31], we may replace any dependency pair problem (P_6, R_0, m, f) by (P_7, 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) 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(mark#) = 1 Thus, we can orient the dependency pairs as follows: nu(mark#(U11(X, Y, Z))) = U11(X, Y, Z) |> X = nu(mark#(X)) nu(mark#(U12(X, Y, Z))) = U12(X, Y, Z) |> X = nu(mark#(X)) nu(mark#(U13(X, Y, Z))) = U13(X, Y, Z) |> X = nu(mark#(X)) nu(mark#(U14(X, Y, Z))) = U14(X, Y, Z) |> X = nu(mark#(X)) nu(mark#(U15(X, Y))) = U15(X, Y) |> X = nu(mark#(X)) nu(mark#(U16(X))) = U16(X) |> X = nu(mark#(X)) nu(mark#(U21(X, Y))) = U21(X, Y) |> X = nu(mark#(X)) nu(mark#(U22(X, Y))) = U22(X, Y) |> X = nu(mark#(X)) nu(mark#(U23(X))) = U23(X) |> X = nu(mark#(X)) nu(mark#(U31(X, Y))) = U31(X, Y) |> X = nu(mark#(X)) nu(mark#(U32(X))) = U32(X) |> X = nu(mark#(X)) nu(mark#(U41(X))) = U41(X) |> X = nu(mark#(X)) nu(mark#(plus(X, Y))) = plus(X, Y) |> X = nu(mark#(X)) nu(mark#(plus(X, Y))) = plus(X, Y) |> Y = nu(mark#(Y)) 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) 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(a!6220!6220U31#) = 2 nu(a!6220!6220isNatKind#) = 1 Thus, we can orient the dependency pairs as follows: nu(a!6220!6220U31#(tt, X)) = X = X = nu(a!6220!6220isNatKind#(X)) nu(a!6220!6220isNatKind#(plus(X, Y))) = plus(X, Y) |> Y = nu(a!6220!6220U31#(a!6220!6220isNatKind(X), Y)) nu(a!6220!6220isNatKind#(plus(X, Y))) = plus(X, Y) |> X = nu(a!6220!6220isNatKind#(X)) nu(a!6220!6220isNatKind#(s(X))) = s(X) |> X = nu(a!6220!6220isNatKind#(X)) By [Kop12, Thm. 7.35], we may replace a dependency pair problem (P_2, R_0, minimal, f) by (P_8, R_0, minimal, f), where P_8 contains: a!6220!6220U31#(tt, X) =#> a!6220!6220isNatKind#(X) Thus, the original system is terminating if each of (P_1, 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 place the elements of P in a dependency graph approximation G (see e.g. [Kop12, Thm. 7.27, 7.29], as follows: * 0 : This graph has no strongly connected components. By [Kop12, Thm. 7.31], this implies finiteness of the dependency pair problem. 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 with usable rules [Kop12, Thm. 7.44]. The usable rules of (P_1, R_0) are: a!6220!6220U11(tt, X, Y) => a!6220!6220U12(a!6220!6220isNatKind(X), X, Y) a!6220!6220U12(tt, X, Y) => a!6220!6220U13(a!6220!6220isNatKind(Y), X, Y) a!6220!6220U13(tt, X, Y) => a!6220!6220U14(a!6220!6220isNatKind(Y), X, Y) a!6220!6220U14(tt, X, Y) => a!6220!6220U15(a!6220!6220isNat(X), Y) a!6220!6220U15(tt, X) => a!6220!6220U16(a!6220!6220isNat(X)) a!6220!6220U16(tt) => tt a!6220!6220U21(tt, X) => a!6220!6220U22(a!6220!6220isNatKind(X), X) a!6220!6220U22(tt, X) => a!6220!6220U23(a!6220!6220isNat(X)) a!6220!6220U23(tt) => tt a!6220!6220U31(tt, X) => a!6220!6220U32(a!6220!6220isNatKind(X)) a!6220!6220U32(tt) => tt a!6220!6220U41(tt) => tt a!6220!6220isNat(0) => tt a!6220!6220isNat(plus(X, Y)) => a!6220!6220U11(a!6220!6220isNatKind(X), X, Y) a!6220!6220isNat(s(X)) => a!6220!6220U21(a!6220!6220isNatKind(X), X) a!6220!6220isNatKind(0) => tt a!6220!6220isNatKind(plus(X, Y)) => a!6220!6220U31(a!6220!6220isNatKind(X), Y) a!6220!6220isNatKind(s(X)) => a!6220!6220U41(a!6220!6220isNatKind(X)) a!6220!6220U11(X, Y, Z) => U11(X, Y, Z) a!6220!6220U12(X, Y, Z) => U12(X, Y, Z) a!6220!6220isNatKind(X) => isNatKind(X) a!6220!6220U13(X, Y, Z) => U13(X, Y, Z) a!6220!6220U14(X, Y, Z) => U14(X, Y, Z) a!6220!6220U15(X, Y) => U15(X, Y) a!6220!6220isNat(X) => isNat(X) a!6220!6220U16(X) => U16(X) a!6220!6220U21(X, Y) => U21(X, Y) a!6220!6220U22(X, Y) => U22(X, Y) a!6220!6220U23(X) => U23(X) a!6220!6220U31(X, Y) => U31(X, Y) a!6220!6220U32(X) => U32(X) a!6220!6220U41(X) => U41(X) It suffices to find a standard reduction pair [Kop12, Def. 6.69]. Thus, we must orient: a!6220!6220U11#(tt, X, Y) >? a!6220!6220U12#(a!6220!6220isNatKind(X), X, Y) a!6220!6220U12#(tt, X, Y) >? a!6220!6220U13#(a!6220!6220isNatKind(Y), X, Y) a!6220!6220U13#(tt, X, Y) >? a!6220!6220U14#(a!6220!6220isNatKind(Y), X, Y) a!6220!6220U14#(tt, X, Y) >? a!6220!6220U15#(a!6220!6220isNat(X), Y) a!6220!6220U14#(tt, X, Y) >? a!6220!6220isNat#(X) a!6220!6220U15#(tt, X) >? a!6220!6220isNat#(X) a!6220!6220U21#(tt, X) >? a!6220!6220U22#(a!6220!6220isNatKind(X), X) a!6220!6220U22#(tt, X) >? a!6220!6220isNat#(X) a!6220!6220isNat#(plus(X, Y)) >? a!6220!6220U11#(a!6220!6220isNatKind(X), X, Y) a!6220!6220isNat#(s(X)) >? a!6220!6220U21#(a!6220!6220isNatKind(X), X) a!6220!6220U11(tt, X, Y) >= a!6220!6220U12(a!6220!6220isNatKind(X), X, Y) a!6220!6220U12(tt, X, Y) >= a!6220!6220U13(a!6220!6220isNatKind(Y), X, Y) a!6220!6220U13(tt, X, Y) >= a!6220!6220U14(a!6220!6220isNatKind(Y), X, Y) a!6220!6220U14(tt, X, Y) >= a!6220!6220U15(a!6220!6220isNat(X), Y) a!6220!6220U15(tt, X) >= a!6220!6220U16(a!6220!6220isNat(X)) a!6220!6220U16(tt) >= tt a!6220!6220U21(tt, X) >= a!6220!6220U22(a!6220!6220isNatKind(X), X) a!6220!6220U22(tt, X) >= a!6220!6220U23(a!6220!6220isNat(X)) a!6220!6220U23(tt) >= tt a!6220!6220U31(tt, X) >= a!6220!6220U32(a!6220!6220isNatKind(X)) a!6220!6220U32(tt) >= tt a!6220!6220U41(tt) >= tt a!6220!6220isNat(0) >= tt a!6220!6220isNat(plus(X, Y)) >= a!6220!6220U11(a!6220!6220isNatKind(X), X, Y) a!6220!6220isNat(s(X)) >= a!6220!6220U21(a!6220!6220isNatKind(X), X) a!6220!6220isNatKind(0) >= tt a!6220!6220isNatKind(plus(X, Y)) >= a!6220!6220U31(a!6220!6220isNatKind(X), Y) a!6220!6220isNatKind(s(X)) >= a!6220!6220U41(a!6220!6220isNatKind(X)) a!6220!6220U11(X, Y, Z) >= U11(X, Y, Z) a!6220!6220U12(X, Y, Z) >= U12(X, Y, Z) a!6220!6220isNatKind(X) >= isNatKind(X) a!6220!6220U13(X, Y, Z) >= U13(X, Y, Z) a!6220!6220U14(X, Y, Z) >= U14(X, Y, Z) a!6220!6220U15(X, Y) >= U15(X, Y) a!6220!6220isNat(X) >= isNat(X) a!6220!6220U16(X) >= U16(X) a!6220!6220U21(X, Y) >= U21(X, Y) a!6220!6220U22(X, Y) >= U22(X, Y) a!6220!6220U23(X) >= U23(X) a!6220!6220U31(X, Y) >= U31(X, Y) a!6220!6220U32(X) >= U32(X) a!6220!6220U41(X) >= U41(X) We orient these requirements with a polynomial interpretation in the natural numbers. We consider usable_rules with respect to the following argument filtering: a!6220!6220U11#(x_1,x_2,x_3) = a!6220!6220U11#(x_2x_3) a!6220!6220U12#(x_1,x_2,x_3) = a!6220!6220U12#(x_2x_3) a!6220!6220U13#(x_1,x_2,x_3) = a!6220!6220U13#(x_2x_3) a!6220!6220U14#(x_1,x_2,x_3) = a!6220!6220U14#(x_2x_3) a!6220!6220U15#(x_1,x_2) = a!6220!6220U15#(x_2) a!6220!6220U21#(x_1,x_2) = a!6220!6220U21#(x_2) a!6220!6220U22#(x_1,x_2) = a!6220!6220U22#(x_2) This leaves the following ordering requirements: a!6220!6220U11#(tt, X, Y) >= a!6220!6220U12#(a!6220!6220isNatKind(X), X, Y) a!6220!6220U12#(tt, X, Y) >= a!6220!6220U13#(a!6220!6220isNatKind(Y), X, Y) a!6220!6220U13#(tt, X, Y) >= a!6220!6220U14#(a!6220!6220isNatKind(Y), X, Y) a!6220!6220U14#(tt, X, Y) >= a!6220!6220U15#(a!6220!6220isNat(X), Y) a!6220!6220U14#(tt, X, Y) >= a!6220!6220isNat#(X) a!6220!6220U15#(tt, X) >= a!6220!6220isNat#(X) a!6220!6220U21#(tt, X) >= a!6220!6220U22#(a!6220!6220isNatKind(X), X) a!6220!6220U22#(tt, X) >= a!6220!6220isNat#(X) a!6220!6220isNat#(plus(X, Y)) >= a!6220!6220U11#(a!6220!6220isNatKind(X), X, Y) a!6220!6220isNat#(s(X)) > a!6220!6220U21#(a!6220!6220isNatKind(X), X) The following interpretation satisfies the requirements: 0 = 3 U11 = \y0y1y2.0 U12 = \y0y1y2.0 U13 = \y0y1y2.0 U14 = \y0y1y2.0 U15 = \y0y1.0 U16 = \y0.0 U21 = \y0y1.0 U22 = \y0y1.0 U23 = \y0.0 U31 = \y0y1.0 U32 = \y0.0 U41 = \y0.0 a!6220!6220U11 = \y0y1y2.0 a!6220!6220U11# = \y0y1y2.3y1 + 3y2 a!6220!6220U12 = \y0y1y2.0 a!6220!6220U12# = \y0y1y2.3y1 + 3y2 a!6220!6220U13 = \y0y1y2.0 a!6220!6220U13# = \y0y1y2.3y1 + 3y2 a!6220!6220U14 = \y0y1y2.0 a!6220!6220U14# = \y0y1y2.3y1 + 3y2 a!6220!6220U15 = \y0y1.0 a!6220!6220U15# = \y0y1.3y1 a!6220!6220U16 = \y0.0 a!6220!6220U21 = \y0y1.0 a!6220!6220U21# = \y0y1.3y1 a!6220!6220U22 = \y0y1.0 a!6220!6220U22# = \y0y1.3y1 a!6220!6220U23 = \y0.0 a!6220!6220U31 = \y0y1.0 a!6220!6220U32 = \y0.0 a!6220!6220U41 = \y0.0 a!6220!6220isNat = \y0.0 a!6220!6220isNatKind = \y0.0 a!6220!6220isNat# = \y0.3y0 isNat = \y0.0 isNatKind = \y0.0 plus = \y0y1.3 + y1 + 2y0 s = \y0.3 + y0 tt = 0 Using this interpretation, the requirements translate to: [[a!6220!6220U11#(tt, _x0, _x1)]] = 3x0 + 3x1 >= 3x0 + 3x1 = [[a!6220!6220U12#(a!6220!6220isNatKind(_x0), _x0, _x1)]] [[a!6220!6220U12#(tt, _x0, _x1)]] = 3x0 + 3x1 >= 3x0 + 3x1 = [[a!6220!6220U13#(a!6220!6220isNatKind(_x1), _x0, _x1)]] [[a!6220!6220U13#(tt, _x0, _x1)]] = 3x0 + 3x1 >= 3x0 + 3x1 = [[a!6220!6220U14#(a!6220!6220isNatKind(_x1), _x0, _x1)]] [[a!6220!6220U14#(tt, _x0, _x1)]] = 3x0 + 3x1 >= 3x1 = [[a!6220!6220U15#(a!6220!6220isNat(_x0), _x1)]] [[a!6220!6220U14#(tt, _x0, _x1)]] = 3x0 + 3x1 >= 3x0 = [[a!6220!6220isNat#(_x0)]] [[a!6220!6220U15#(tt, _x0)]] = 3x0 >= 3x0 = [[a!6220!6220isNat#(_x0)]] [[a!6220!6220U21#(tt, _x0)]] = 3x0 >= 3x0 = [[a!6220!6220U22#(a!6220!6220isNatKind(_x0), _x0)]] [[a!6220!6220U22#(tt, _x0)]] = 3x0 >= 3x0 = [[a!6220!6220isNat#(_x0)]] [[a!6220!6220isNat#(plus(_x0, _x1))]] = 9 + 3x1 + 6x0 > 3x0 + 3x1 = [[a!6220!6220U11#(a!6220!6220isNatKind(_x0), _x0, _x1)]] [[a!6220!6220isNat#(s(_x0))]] = 9 + 3x0 > 3x0 = [[a!6220!6220U21#(a!6220!6220isNatKind(_x0), _x0)]] 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_9, R_0, minimal, formative), where P_9 consists of: a!6220!6220U11#(tt, X, Y) =#> a!6220!6220U12#(a!6220!6220isNatKind(X), X, Y) a!6220!6220U12#(tt, X, Y) =#> a!6220!6220U13#(a!6220!6220isNatKind(Y), X, Y) a!6220!6220U13#(tt, X, Y) =#> a!6220!6220U14#(a!6220!6220isNatKind(Y), X, Y) a!6220!6220U14#(tt, X, Y) =#> a!6220!6220U15#(a!6220!6220isNat(X), Y) a!6220!6220U14#(tt, X, Y) =#> a!6220!6220isNat#(X) a!6220!6220U15#(tt, X) =#> a!6220!6220isNat#(X) a!6220!6220U21#(tt, X) =#> a!6220!6220U22#(a!6220!6220isNatKind(X), X) a!6220!6220U22#(tt, X) =#> a!6220!6220isNat#(X) Thus, the original system is terminating if (P_9, R_0, minimal, formative) is finite. We consider the dependency pair problem (P_9, 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 : 1 * 1 : 2 * 2 : 3, 4 * 3 : 5 * 4 : * 5 : * 6 : 7 * 7 : This graph has no strongly connected components. By [Kop12, Thm. 7.31], this implies finiteness of the dependency pair problem. 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.