We consider the system 454. Alphabet: a : [] --> o f : [o] --> o g : [o -> o] --> o h : [o] --> o hprime : [o] --> o Rules: f(g(/\x.X(x))) => f(X(X(a))) g(/\x.hprime(x)) => h(h(a)) h(X) => hprime(X) We observe that the rules contain a first-order subset: h(X) => hprime(X) Moreover, the system is finitely branching. Thus, by [Kop12, Thm. 7.55], we may omit all first-order dependency pairs from the dependency pair problem (DP(R), R) if this first-order part is Ce-terminating when seen as a many-sorted first-order TRS. According to the external first-order termination prover, this system is indeed Ce-terminating: || proof of resources/system.trs || # AProVE Commit ID: d84c10301d352dfd14de2104819581f4682260f5 fuhs 20130616 || || || Termination w.r.t. Q of the given QTRS could be proven: || || (0) QTRS || (1) QTRSRRRProof [EQUIVALENT] || (2) QTRS || (3) RisEmptyProof [EQUIVALENT] || (4) YES || || || ---------------------------------------- || || (0) || Obligation: || Q restricted rewrite system: || The TRS R consists of the following rules: || || h(%X) -> hprime(%X) || ~PAIR(%X, %Y) -> %X || ~PAIR(%X, %Y) -> %Y || || Q is empty. || || ---------------------------------------- || || (1) QTRSRRRProof (EQUIVALENT) || Used ordering: || Polynomial interpretation [POLO]: || || POL(h(x_1)) = 2 + 2*x_1 || POL(hprime(x_1)) = 1 + x_1 || POL(~PAIR(x_1, x_2)) = 2 + x_1 + x_2 || With this ordering the following rules can be removed by the rule removal processor [LPAR04] because they are oriented strictly: || || h(%X) -> hprime(%X) || ~PAIR(%X, %Y) -> %X || ~PAIR(%X, %Y) -> %Y || || || || || ---------------------------------------- || || (2) || Obligation: || Q restricted rewrite system: || R is empty. || Q is empty. || || ---------------------------------------- || || (3) RisEmptyProof (EQUIVALENT) || The TRS R is empty. Hence, termination is trivially proven. || ---------------------------------------- || || (4) || YES || We use the dependency pair framework as described in [Kop12, Ch. 6/7], with dynamic dependency pairs. We thus obtain the following dependency pair problem (P_0, R_0, minimal, formative): Dependency Pairs P_0: 0] f#(g(/\x.X(x))) =#> f#(X(X(a))) 1] f#(g(/\x.X(x))) =#> X(X(a)) 2] f#(g(/\x.X(x))) =#> X(a) {X : 1} 3] g#(/\x.hprime(x)) =#> h#(h(a)) 4] g#(/\x.hprime(x)) =#> h#(a) Rules R_0: f(g(/\x.X(x))) => f(X(X(a))) g(/\x.hprime(x)) => h(h(a)) h(X) => hprime(X) 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 : 0, 1, 2 * 1 : 0, 1, 2, 3, 4 * 2 : 0, 1, 2, 3, 4 * 3 : * 4 : This graph has the following strongly connected components: P_1: f#(g(/\x.X(x))) =#> f#(X(X(a))) f#(g(/\x.X(x))) =#> X(X(a)) f#(g(/\x.X(x))) =#> X(a) {X : 1} 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). 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). This combination (P_1, R_0) has no formative rules! We will name the empty set of rules:R_1. By [Kop12, Thm. 7.17], we may replace the dependency pair problem (P_1, R_0, minimal, formative) by (P_1, R_1, minimal, formative). Thus, the original system is terminating if (P_1, R_1, minimal, formative) is finite. We consider the dependency pair problem (P_1, R_1, minimal, formative). We will use the reduction pair processor [Kop12, Thm. 7.16]. As the system is abstraction-simple and the formative flag is set, it suffices to find a tagged reduction pair [Kop12, Def. 6.70]. Thus, we must orient: f#(g(/\x.X(x))) >? f#(X(X(a))) f#(g(/\x.X(x))) >? X(X(a)) f#(g(/\x.X(x))) >? X(a) 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: [[a]] = _|_ We choose Lex = {} and Mul = {f#, g}, and the following precedence: f# > g Taking the argument function into account, and fixing the greater / greater equal choices, the constraints can be denoted as follows: f#(g(/\x.X(x))) >= f#(X(X(_|_))) f#(g(/\x.X(x))) >= X(X(_|_)) f#(g(/\x.X(x))) > X(_|_) With these choices, we have: 1] f#(g(/\x.X(x))) >= f#(X(X(_|_))) because f# in Mul and [2], by (Fun) 2] g(/\x.X(x)) >= X(X(_|_)) because [3], by (Star) 3] g*(/\x.X(x)) >= X(X(_|_)) because [4], by (Select) 4] X(g*(/\x.X(x))) >= X(X(_|_)) because [5], by (Meta) 5] g*(/\x.X(x)) >= X(_|_) because [6], by (Select) 6] X(g*(/\x.X(x))) >= X(_|_) because [7], by (Meta) 7] g*(/\x.X(x)) >= _|_ by (Bot) 8] f#(g(/\x.X(x))) >= X(X(_|_)) because [9], by (Star) 9] f#*(g(/\x.X(x))) >= X(X(_|_)) because [2], by (Select) 10] f#(g(/\x.X(x))) > X(_|_) because [11], by definition 11] f#*(g(/\x.X(x))) >= X(_|_) because [12], by (Select) 12] g(/\x.X(x)) >= X(_|_) because [5], by (Star) By the observations in [Kop12, Sec. 6.6], this reduction pair suffices; we may thus replace the dependency pair problem (P_1, R_1, minimal, formative) by (P_2, R_1, minimal, formative), where P_2 consists of: f#(g(/\x.X(x))) =#> f#(X(X(a))) f#(g(/\x.X(x))) =#> X(X(a)) Thus, the original system is terminating if (P_2, R_1, minimal, formative) is finite. We consider the dependency pair problem (P_2, R_1, minimal, formative). We will use the reduction pair processor [Kop12, Thm. 7.16]. As the system is abstraction-simple and the formative flag is set, it suffices to find a tagged reduction pair [Kop12, Def. 6.70]. Thus, we must orient: f#(g(/\x.X(x))) >? f#(X(X(a))) f#(g(/\x.X(x))) >? X(X(a)) 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: [[a]] = _|_ We choose Lex = {} and Mul = {f#, g}, and the following precedence: f# > g Taking the argument function into account, and fixing the greater / greater equal choices, the constraints can be denoted as follows: f#(g(/\x.X(x))) >= f#(X(X(_|_))) f#(g(/\x.X(x))) > X(X(_|_)) With these choices, we have: 1] f#(g(/\x.X(x))) >= f#(X(X(_|_))) because f# in Mul and [2], by (Fun) 2] g(/\x.X(x)) >= X(X(_|_)) because [3], by (Star) 3] g*(/\x.X(x)) >= X(X(_|_)) because [4], by (Select) 4] X(g*(/\x.X(x))) >= X(X(_|_)) because [5], by (Meta) 5] g*(/\x.X(x)) >= X(_|_) because [6], by (Select) 6] X(g*(/\x.X(x))) >= X(_|_) because [7], by (Meta) 7] g*(/\x.X(x)) >= _|_ by (Bot) 8] f#(g(/\x.X(x))) > X(X(_|_)) because [9], by definition 9] f#*(g(/\x.X(x))) >= X(X(_|_)) because [2], by (Select) By the observations in [Kop12, Sec. 6.6], this reduction pair suffices; we may thus replace the dependency pair problem (P_2, R_1, minimal, formative) by (P_3, R_1, minimal, formative), where P_3 consists of: f#(g(/\x.X(x))) =#> f#(X(X(a))) Thus, the original system is terminating if (P_3, R_1, minimal, formative) is finite. We consider the dependency pair problem (P_3, 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: f#(g(/\x.X(x))) >? f#(X(X(a))) 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: [[a]] = _|_ We choose Lex = {} and Mul = {f#, g}, and the following precedence: g > f# Taking the argument function into account, and fixing the greater / greater equal choices, the constraints can be denoted as follows: f#(g(/\x.X(x))) > f#(X(X(_|_))) With these choices, we have: 1] f#(g(/\x.X(x))) > f#(X(X(_|_))) because [2], by definition 2] f#*(g(/\x.X(x))) >= f#(X(X(_|_))) because [3], by (Select) 3] g(/\x.X(x)) >= f#(X(X(_|_))) because [4], by (Star) 4] g*(/\x.X(x)) >= f#(X(X(_|_))) because g > f# and [5], by (Copy) 5] g*(/\x.X(x)) >= X(X(_|_)) because [6], by (Select) 6] X(g*(/\x.X(x))) >= X(X(_|_)) because [7], by (Meta) 7] g*(/\x.X(x)) >= X(_|_) because [8], by (Select) 8] X(g*(/\x.X(x))) >= X(_|_) because [9], by (Meta) 9] g*(/\x.X(x)) >= _|_ by (Bot) By the observations in [Kop12, Sec. 6.6], this reduction pair suffices; we may thus replace a dependency pair problem (P_3, R_1) by ({}, R_1). 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.