We consider the system 03minus. Alphabet: minus : [N * N] --> N s : [N] --> N z : [] --> N Rules: minus(z, x) => z minus(x, z) => x minus(s(x), s(y)) => minus(x, y) minus(x, x) => z This AFS is converted to an AFSM simply by replacing all free variables by meta-variables (with arity 0). We use rule removal, following [Kop12, Theorem 2.23]. This gives the following requirements (possibly using Theorems 2.25 and 2.26 in [Kop12]): minus(z, X) >? z minus(X, z) >? X minus(s(X), s(Y)) >? minus(X, Y) minus(X, X) >? z We use a recursive path ordering as defined in [Kop12, Chapter 5]. Argument functions: [[z]] = _|_ We choose Lex = {} and Mul = {minus, s}, and the following precedence: s > minus Taking the argument function into account, and fixing the greater / greater equal choices, the constraints can be denoted as follows: minus(_|_, X) >= _|_ minus(X, _|_) > X minus(s(X), s(Y)) > minus(X, Y) minus(X, X) >= _|_ With these choices, we have: 1] minus(_|_, X) >= _|_ by (Bot) 2] minus(X, _|_) > X because [3], by definition 3] minus*(X, _|_) >= X because [4], by (Select) 4] X >= X by (Meta) 5] minus(s(X), s(Y)) > minus(X, Y) because [6], by definition 6] minus*(s(X), s(Y)) >= minus(X, Y) because minus in Mul, [7] and [10], by (Stat) 7] s(X) > X because [8], by definition 8] s*(X) >= X because [9], by (Select) 9] X >= X by (Meta) 10] s(Y) >= Y because [11], by (Star) 11] s*(Y) >= Y because [12], by (Select) 12] Y >= Y by (Meta) 13] minus(X, X) >= _|_ by (Bot) We can thus remove the following rules: minus(X, z) => X minus(s(X), s(Y)) => minus(X, Y) We use rule removal, following [Kop12, Theorem 2.23]. This gives the following requirements (possibly using Theorems 2.25 and 2.26 in [Kop12]): minus(z, X) >? z minus(X, X) >? z We use a recursive path ordering as defined in [Kop12, Chapter 5]. Argument functions: [[z]] = _|_ We choose Lex = {} and Mul = {minus}, and the following precedence: minus Taking the argument function into account, and fixing the greater / greater equal choices, the constraints can be denoted as follows: minus(_|_, X) > _|_ minus(X, X) >= _|_ With these choices, we have: 1] minus(_|_, X) > _|_ because [2], by definition 2] minus*(_|_, X) >= _|_ by (Bot) 3] minus(X, X) >= _|_ by (Bot) We can thus remove the following rules: minus(z, X) => z We use rule removal, following [Kop12, Theorem 2.23]. This gives the following requirements (possibly using Theorems 2.25 and 2.26 in [Kop12]): minus(X, X) >? z We use a recursive path ordering as defined in [Kop12, Chapter 5]. Argument functions: [[z]] = _|_ We choose Lex = {} and Mul = {minus}, and the following precedence: minus Taking the argument function into account, and fixing the greater / greater equal choices, the constraints can be denoted as follows: minus(X, X) > _|_ With these choices, we have: 1] minus(X, X) > _|_ because [2], by definition 2] minus*(X, X) >= _|_ by (Bot) We can thus remove the following rules: minus(X, X) => z All rules were succesfully removed. Thus, termination of the original system has been reduced to termination of the beta-rule, which is well-known to hold. +++ Citations +++ [Kop12] C. Kop. Higher Order Termination. PhD Thesis, 2012.