We consider the system AotoYamada_05__026. Alphabet: comp : [c -> c * c -> c] --> c -> c cons : [a * b] --> b map : [a -> a * b] --> b nil : [] --> b twice : [c -> c] --> c -> c Rules: map(f, nil) => nil map(f, cons(x, y)) => cons(f x, map(f, y)) comp(f, g) x => f (g x) twice(f) => comp(f, f) 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]): map(F, nil) >? nil map(F, cons(X, Y)) >? cons(F X, map(F, Y)) comp(F, G) X >? F (G X) twice(F) >? comp(F, F) We use a recursive path ordering as defined in [Kop12, Chapter 5]. We choose Lex = {} and Mul = {@_{o -> o}, comp, cons, map, nil, twice}, and the following precedence: twice > map > nil > comp > @_{o -> o} > cons With these choices, we have: 1] map(F, nil) > nil because [2], by definition 2] map*(F, nil) >= nil because map > nil, by (Copy) 3] map(F, cons(X, Y)) > cons(@_{o -> o}(F, X), map(F, Y)) because [4], by definition 4] map*(F, cons(X, Y)) >= cons(@_{o -> o}(F, X), map(F, Y)) because map > cons, [5] and [12], by (Copy) 5] map*(F, cons(X, Y)) >= @_{o -> o}(F, X) because map > @_{o -> o}, [6] and [8], by (Copy) 6] map*(F, cons(X, Y)) >= F because [7], by (Select) 7] F >= F by (Meta) 8] map*(F, cons(X, Y)) >= X because [9], by (Select) 9] cons(X, Y) >= X because [10], by (Star) 10] cons*(X, Y) >= X because [11], by (Select) 11] X >= X by (Meta) 12] map*(F, cons(X, Y)) >= map(F, Y) because map in Mul, [13] and [14], by (Stat) 13] F >= F by (Meta) 14] cons(X, Y) > Y because [15], by definition 15] cons*(X, Y) >= Y because [16], by (Select) 16] Y >= Y by (Meta) 17] @_{o -> o}(comp(F, G), X) > @_{o -> o}(F, @_{o -> o}(G, X)) because [18], by definition 18] @_{o -> o}*(comp(F, G), X) >= @_{o -> o}(F, @_{o -> o}(G, X)) because [19], by (Select) 19] comp(F, G) @_{o -> o}*(comp(F, G), X) >= @_{o -> o}(F, @_{o -> o}(G, X)) because [20] 20] comp*(F, G, @_{o -> o}*(comp(F, G), X)) >= @_{o -> o}(F, @_{o -> o}(G, X)) because comp > @_{o -> o}, [21] and [23], by (Copy) 21] comp*(F, G, @_{o -> o}*(comp(F, G), X)) >= F because [22], by (Select) 22] F >= F by (Meta) 23] comp*(F, G, @_{o -> o}*(comp(F, G), X)) >= @_{o -> o}(G, X) because comp > @_{o -> o}, [24] and [26], by (Copy) 24] comp*(F, G, @_{o -> o}*(comp(F, G), X)) >= G because [25], by (Select) 25] G >= G by (Meta) 26] comp*(F, G, @_{o -> o}*(comp(F, G), X)) >= X because [27], by (Select) 27] @_{o -> o}*(comp(F, G), X) >= X because [28], by (Select) 28] X >= X by (Meta) 29] twice(F) > comp(F, F) because [30], by definition 30] twice*(F) >= comp(F, F) because twice > comp, [31] and [31], by (Copy) 31] twice*(F) >= F because [32], by (Select) 32] F >= F by (Meta) We can thus remove the following rules: map(F, nil) => nil map(F, cons(X, Y)) => cons(F X, map(F, Y)) comp(F, G) X => F (G X) twice(F) => comp(F, F) 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.