We consider the system 479. Alphabet: a : [] --> o apply : [o -> o * o] --> o b : [] --> o Rules: apply(/\x.X(x), Y) => X(Y) a => b We use rule removal, following [Kop12, Theorem 2.23]. This gives the following requirements (possibly using Theorems 2.25 and 2.26 in [Kop12]): apply(/\x.X(x), Y) >? X(Y) a >? b We use a recursive path ordering as defined in [Kop12, Chapter 5]. Argument functions: [[b]] = _|_ We choose Lex = {} and Mul = {a, apply}, and the following precedence: apply > a Taking the argument function into account, and fixing the greater / greater equal choices, the constraints can be denoted as follows: apply(/\x.X(x), Y) >= X(Y) a > _|_ With these choices, we have: 1] apply(/\x.X(x), Y) >= X(Y) because [2], by (Star) 2] apply*(/\x.X(x), Y) >= X(Y) because [3], by (Select) 3] X(apply*(/\x.X(x), Y)) >= X(Y) because [4], by (Meta) 4] apply*(/\x.X(x), Y) >= Y because [5], by (Select) 5] Y >= Y by (Meta) 6] a > _|_ because [7], by definition 7] a* >= _|_ by (Bot) We can thus remove the following rules: a => b We use rule removal, following [Kop12, Theorem 2.23]. This gives the following requirements (possibly using Theorems 2.25 and 2.26 in [Kop12]): apply(/\x.X(x), Y) >? X(Y) We use a recursive path ordering as defined in [Kop12, Chapter 5]. We choose Lex = {} and Mul = {apply}, and the following precedence: apply With these choices, we have: 1] apply(/\x.X(x), Y) > X(Y) because [2], by definition 2] apply*(/\x.X(x), Y) >= X(Y) because [3], by (Select) 3] X(apply*(/\x.X(x), Y)) >= X(Y) because [4], by (Meta) 4] apply*(/\x.X(x), Y) >= Y because [5], by (Select) 5] Y >= Y by (Meta) We can thus remove the following rules: apply(/\x.X(x), Y) => X(Y) 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.