4.59/2.16 YES 4.59/2.19 We consider the system theBenchmark. 4.59/2.19 4.59/2.19 Alphabet: 4.59/2.19 4.59/2.19 0 : [] --> b 4.59/2.19 add : [b * c] --> c 4.59/2.19 app : [c * c] --> c 4.59/2.19 eq : [b * b] --> a 4.59/2.19 false : [] --> a 4.59/2.19 filter : [b -> a * c] --> c 4.59/2.19 filter2 : [a * b -> a * b * c] --> c 4.59/2.19 if!fac6220min : [a * c] --> b 4.59/2.19 if!fac6220minsort : [a * c * c] --> c 4.59/2.19 if!fac6220rm : [a * b * c] --> c 4.59/2.19 le : [b * b] --> a 4.59/2.19 map : [b -> b * c] --> c 4.59/2.19 min : [c] --> b 4.59/2.19 minsort : [c * c] --> c 4.59/2.19 nil : [] --> c 4.59/2.19 rm : [b * c] --> c 4.59/2.19 s : [b] --> b 4.59/2.19 true : [] --> a 4.59/2.19 4.59/2.19 Rules: 4.59/2.19 4.59/2.19 eq(0, 0) => true 4.59/2.19 eq(0, s(x)) => false 4.59/2.19 eq(s(x), 0) => false 4.59/2.19 eq(s(x), s(y)) => eq(x, y) 4.59/2.19 le(0, x) => true 4.59/2.19 le(s(x), 0) => false 4.59/2.19 le(s(x), s(y)) => le(x, y) 4.59/2.19 app(nil, x) => x 4.59/2.19 app(add(x, y), z) => add(x, app(y, z)) 4.59/2.19 min(add(x, nil)) => x 4.59/2.19 min(add(x, add(y, z))) => if!fac6220min(le(x, y), add(x, add(y, z))) 4.59/2.19 if!fac6220min(true, add(x, add(y, z))) => min(add(x, z)) 4.59/2.19 if!fac6220min(false, add(x, add(y, z))) => min(add(y, z)) 4.59/2.19 rm(x, nil) => nil 4.59/2.19 rm(x, add(y, z)) => if!fac6220rm(eq(x, y), x, add(y, z)) 4.59/2.19 if!fac6220rm(true, x, add(y, z)) => rm(x, z) 4.59/2.19 if!fac6220rm(false, x, add(y, z)) => add(y, rm(x, z)) 4.59/2.19 minsort(nil, nil) => nil 4.59/2.19 minsort(add(x, y), z) => if!fac6220minsort(eq(x, min(add(x, y))), add(x, y), z) 4.59/2.19 if!fac6220minsort(true, add(x, y), z) => add(x, minsort(app(rm(x, y), z), nil)) 4.59/2.19 if!fac6220minsort(false, add(x, y), z) => minsort(y, add(x, z)) 4.59/2.19 map(f, nil) => nil 4.59/2.19 map(f, add(x, y)) => add(f x, map(f, y)) 4.59/2.19 filter(f, nil) => nil 4.59/2.19 filter(f, add(x, y)) => filter2(f x, f, x, y) 4.59/2.19 filter2(true, f, x, y) => add(x, filter(f, y)) 4.59/2.19 filter2(false, f, x, y) => filter(f, y) 4.59/2.19 4.59/2.19 This AFS is converted to an AFSM simply by replacing all free variables by meta-variables (with arity 0). 4.59/2.19 4.59/2.19 We observe that the rules contain a first-order subset: 4.59/2.19 4.59/2.19 eq(0, 0) => true 4.59/2.19 eq(0, s(X)) => false 4.59/2.19 eq(s(X), 0) => false 4.59/2.19 eq(s(X), s(Y)) => eq(X, Y) 4.59/2.19 le(0, X) => true 4.59/2.19 le(s(X), 0) => false 4.59/2.19 le(s(X), s(Y)) => le(X, Y) 4.59/2.19 app(nil, X) => X 4.59/2.19 app(add(X, Y), Z) => add(X, app(Y, Z)) 4.59/2.19 min(add(X, nil)) => X 4.59/2.19 min(add(X, add(Y, Z))) => if!fac6220min(le(X, Y), add(X, add(Y, Z))) 4.59/2.19 if!fac6220min(true, add(X, add(Y, Z))) => min(add(X, Z)) 4.59/2.19 if!fac6220min(false, add(X, add(Y, Z))) => min(add(Y, Z)) 4.59/2.19 rm(X, nil) => nil 4.59/2.19 rm(X, add(Y, Z)) => if!fac6220rm(eq(X, Y), X, add(Y, Z)) 4.59/2.19 if!fac6220rm(true, X, add(Y, Z)) => rm(X, Z) 4.59/2.19 if!fac6220rm(false, X, add(Y, Z)) => add(Y, rm(X, Z)) 4.59/2.19 minsort(nil, nil) => nil 4.59/2.19 minsort(add(X, Y), Z) => if!fac6220minsort(eq(X, min(add(X, Y))), add(X, Y), Z) 4.59/2.19 if!fac6220minsort(true, add(X, Y), Z) => add(X, minsort(app(rm(X, Y), Z), nil)) 4.59/2.19 if!fac6220minsort(false, add(X, Y), Z) => minsort(Y, add(X, Z)) 4.59/2.19 4.59/2.19 Moreover, the system is orthogonal. 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 terminating when seen as a many-sorted first-order TRS. 4.59/2.19 4.59/2.19 According to the external first-order termination prover, this system is indeed terminating: 4.59/2.19 4.59/2.19 || proof of resources/system.trs 4.59/2.19 || # AProVE Commit ID: d84c10301d352dfd14de2104819581f4682260f5 fuhs 20130616 4.59/2.19 || 4.59/2.19 || 4.59/2.19 || Termination w.r.t. Q of the given QTRS could be proven: 4.59/2.19 || 4.59/2.19 || (0) QTRS 4.59/2.19 || (1) Overlay + Local Confluence [EQUIVALENT] 4.59/2.19 || (2) QTRS 4.59/2.19 || (3) DependencyPairsProof [EQUIVALENT] 4.59/2.19 || (4) QDP 4.59/2.19 || (5) DependencyGraphProof [EQUIVALENT] 4.59/2.19 || (6) AND 4.59/2.19 || (7) QDP 4.59/2.19 || (8) UsableRulesProof [EQUIVALENT] 4.59/2.19 || (9) QDP 4.59/2.19 || (10) QReductionProof [EQUIVALENT] 4.59/2.19 || (11) QDP 4.59/2.19 || (12) QDPSizeChangeProof [EQUIVALENT] 4.59/2.19 || (13) YES 4.59/2.19 || (14) QDP 4.59/2.19 || (15) UsableRulesProof [EQUIVALENT] 4.59/2.19 || (16) QDP 4.59/2.19 || (17) QReductionProof [EQUIVALENT] 4.59/2.19 || (18) QDP 4.59/2.19 || (19) QDPSizeChangeProof [EQUIVALENT] 4.59/2.19 || (20) YES 4.59/2.19 || (21) QDP 4.59/2.19 || (22) UsableRulesProof [EQUIVALENT] 4.59/2.19 || (23) QDP 4.59/2.19 || (24) QReductionProof [EQUIVALENT] 4.59/2.19 || (25) QDP 4.59/2.19 || (26) QDPOrderProof [EQUIVALENT] 4.59/2.19 || (27) QDP 4.59/2.19 || (28) DependencyGraphProof [EQUIVALENT] 4.59/2.19 || (29) TRUE 4.59/2.19 || (30) QDP 4.59/2.19 || (31) UsableRulesProof [EQUIVALENT] 4.59/2.19 || (32) QDP 4.59/2.19 || (33) QReductionProof [EQUIVALENT] 4.59/2.19 || (34) QDP 4.59/2.19 || (35) QDPSizeChangeProof [EQUIVALENT] 4.59/2.19 || (36) YES 4.59/2.19 || (37) QDP 4.59/2.19 || (38) UsableRulesProof [EQUIVALENT] 4.59/2.19 || (39) QDP 4.59/2.19 || (40) QReductionProof [EQUIVALENT] 4.59/2.19 || (41) QDP 4.59/2.19 || (42) QDPSizeChangeProof [EQUIVALENT] 4.59/2.19 || (43) YES 4.59/2.19 || (44) QDP 4.59/2.19 || (45) UsableRulesProof [EQUIVALENT] 4.59/2.19 || (46) QDP 4.59/2.19 || (47) QReductionProof [EQUIVALENT] 4.59/2.19 || (48) QDP 4.59/2.19 || (49) QDPOrderProof [EQUIVALENT] 4.59/2.19 || (50) QDP 4.59/2.19 || (51) UsableRulesProof [EQUIVALENT] 4.59/2.19 || (52) QDP 4.59/2.19 || (53) QReductionProof [EQUIVALENT] 4.59/2.19 || (54) QDP 4.59/2.19 || (55) QDPSizeChangeProof [EQUIVALENT] 4.59/2.19 || (56) YES 4.59/2.19 || 4.59/2.19 || 4.59/2.19 || ---------------------------------------- 4.59/2.19 || 4.59/2.19 || (0) 4.59/2.19 || Obligation: 4.59/2.19 || Q restricted rewrite system: 4.59/2.19 || The TRS R consists of the following rules: 4.59/2.19 || 4.59/2.19 || eq(0, 0) -> true 4.59/2.19 || eq(0, s(%X)) -> false 4.59/2.19 || eq(s(%X), 0) -> false 4.59/2.19 || eq(s(%X), s(%Y)) -> eq(%X, %Y) 4.59/2.19 || le(0, %X) -> true 4.59/2.19 || le(s(%X), 0) -> false 4.59/2.19 || le(s(%X), s(%Y)) -> le(%X, %Y) 4.59/2.19 || app(nil, %X) -> %X 4.59/2.19 || app(add(%X, %Y), %Z) -> add(%X, app(%Y, %Z)) 4.59/2.19 || min(add(%X, nil)) -> %X 4.59/2.19 || min(add(%X, add(%Y, %Z))) -> if!fac6220min(le(%X, %Y), add(%X, add(%Y, %Z))) 4.59/2.19 || if!fac6220min(true, add(%X, add(%Y, %Z))) -> min(add(%X, %Z)) 4.59/2.19 || if!fac6220min(false, add(%X, add(%Y, %Z))) -> min(add(%Y, %Z)) 4.59/2.19 || rm(%X, nil) -> nil 4.59/2.19 || rm(%X, add(%Y, %Z)) -> if!fac6220rm(eq(%X, %Y), %X, add(%Y, %Z)) 4.59/2.19 || if!fac6220rm(true, %X, add(%Y, %Z)) -> rm(%X, %Z) 4.59/2.19 || if!fac6220rm(false, %X, add(%Y, %Z)) -> add(%Y, rm(%X, %Z)) 4.59/2.19 || minsort(nil, nil) -> nil 4.59/2.19 || minsort(add(%X, %Y), %Z) -> if!fac6220minsort(eq(%X, min(add(%X, %Y))), add(%X, %Y), %Z) 4.59/2.19 || if!fac6220minsort(true, add(%X, %Y), %Z) -> add(%X, minsort(app(rm(%X, %Y), %Z), nil)) 4.59/2.19 || if!fac6220minsort(false, add(%X, %Y), %Z) -> minsort(%Y, add(%X, %Z)) 4.59/2.19 || 4.59/2.19 || Q is empty. 4.59/2.19 || 4.59/2.19 || ---------------------------------------- 4.59/2.19 || 4.59/2.19 || (1) Overlay + Local Confluence (EQUIVALENT) 4.59/2.19 || The TRS is overlay and locally confluent. By [NOC] we can switch to innermost. 4.59/2.19 || ---------------------------------------- 4.59/2.19 || 4.59/2.19 || (2) 4.59/2.19 || Obligation: 4.59/2.19 || Q restricted rewrite system: 4.59/2.19 || The TRS R consists of the following rules: 4.59/2.19 || 4.59/2.19 || eq(0, 0) -> true 4.59/2.19 || eq(0, s(%X)) -> false 4.59/2.19 || eq(s(%X), 0) -> false 4.59/2.19 || eq(s(%X), s(%Y)) -> eq(%X, %Y) 4.59/2.19 || le(0, %X) -> true 4.59/2.19 || le(s(%X), 0) -> false 4.59/2.19 || le(s(%X), s(%Y)) -> le(%X, %Y) 4.59/2.19 || app(nil, %X) -> %X 4.59/2.19 || app(add(%X, %Y), %Z) -> add(%X, app(%Y, %Z)) 4.59/2.19 || min(add(%X, nil)) -> %X 4.59/2.19 || min(add(%X, add(%Y, %Z))) -> if!fac6220min(le(%X, %Y), add(%X, add(%Y, %Z))) 4.59/2.19 || if!fac6220min(true, add(%X, add(%Y, %Z))) -> min(add(%X, %Z)) 4.59/2.19 || if!fac6220min(false, add(%X, add(%Y, %Z))) -> min(add(%Y, %Z)) 4.59/2.19 || rm(%X, nil) -> nil 4.59/2.19 || rm(%X, add(%Y, %Z)) -> if!fac6220rm(eq(%X, %Y), %X, add(%Y, %Z)) 4.59/2.19 || if!fac6220rm(true, %X, add(%Y, %Z)) -> rm(%X, %Z) 4.59/2.19 || if!fac6220rm(false, %X, add(%Y, %Z)) -> add(%Y, rm(%X, %Z)) 4.59/2.19 || minsort(nil, nil) -> nil 4.59/2.19 || minsort(add(%X, %Y), %Z) -> if!fac6220minsort(eq(%X, min(add(%X, %Y))), add(%X, %Y), %Z) 4.59/2.19 || if!fac6220minsort(true, add(%X, %Y), %Z) -> add(%X, minsort(app(rm(%X, %Y), %Z), nil)) 4.59/2.19 || if!fac6220minsort(false, add(%X, %Y), %Z) -> minsort(%Y, add(%X, %Z)) 4.59/2.19 || 4.59/2.19 || The set Q consists of the following terms: 4.59/2.19 || 4.59/2.19 || eq(0, 0) 4.59/2.19 || eq(0, s(x0)) 4.59/2.19 || eq(s(x0), 0) 4.59/2.19 || eq(s(x0), s(x1)) 4.59/2.19 || le(0, x0) 4.59/2.19 || le(s(x0), 0) 4.59/2.19 || le(s(x0), s(x1)) 4.59/2.19 || app(nil, x0) 4.59/2.19 || app(add(x0, x1), x2) 4.59/2.19 || min(add(x0, nil)) 4.59/2.19 || min(add(x0, add(x1, x2))) 4.59/2.19 || if!fac6220min(true, add(x0, add(x1, x2))) 4.59/2.19 || if!fac6220min(false, add(x0, add(x1, x2))) 4.59/2.19 || rm(x0, nil) 4.59/2.19 || rm(x0, add(x1, x2)) 4.59/2.19 || if!fac6220rm(true, x0, add(x1, x2)) 4.59/2.19 || if!fac6220rm(false, x0, add(x1, x2)) 4.59/2.19 || minsort(nil, nil) 4.59/2.19 || minsort(add(x0, x1), x2) 4.59/2.19 || if!fac6220minsort(true, add(x0, x1), x2) 4.59/2.19 || if!fac6220minsort(false, add(x0, x1), x2) 4.59/2.19 || 4.59/2.19 || 4.59/2.19 || ---------------------------------------- 4.59/2.19 || 4.59/2.19 || (3) DependencyPairsProof (EQUIVALENT) 4.59/2.19 || Using Dependency Pairs [AG00,LPAR04] we result in the following initial DP problem. 4.59/2.19 || ---------------------------------------- 4.59/2.19 || 4.59/2.19 || (4) 4.59/2.19 || Obligation: 4.59/2.19 || Q DP problem: 4.59/2.19 || The TRS P consists of the following rules: 4.59/2.19 || 4.59/2.19 || EQ(s(%X), s(%Y)) -> EQ(%X, %Y) 4.59/2.19 || LE(s(%X), s(%Y)) -> LE(%X, %Y) 4.59/2.19 || APP(add(%X, %Y), %Z) -> APP(%Y, %Z) 4.59/2.19 || MIN(add(%X, add(%Y, %Z))) -> IF!FAC6220MIN(le(%X, %Y), add(%X, add(%Y, %Z))) 4.59/2.19 || MIN(add(%X, add(%Y, %Z))) -> LE(%X, %Y) 4.59/2.19 || IF!FAC6220MIN(true, add(%X, add(%Y, %Z))) -> MIN(add(%X, %Z)) 4.59/2.19 || IF!FAC6220MIN(false, add(%X, add(%Y, %Z))) -> MIN(add(%Y, %Z)) 4.59/2.19 || RM(%X, add(%Y, %Z)) -> IF!FAC6220RM(eq(%X, %Y), %X, add(%Y, %Z)) 4.59/2.19 || RM(%X, add(%Y, %Z)) -> EQ(%X, %Y) 4.59/2.19 || IF!FAC6220RM(true, %X, add(%Y, %Z)) -> RM(%X, %Z) 4.59/2.19 || IF!FAC6220RM(false, %X, add(%Y, %Z)) -> RM(%X, %Z) 4.59/2.19 || MINSORT(add(%X, %Y), %Z) -> IF!FAC6220MINSORT(eq(%X, min(add(%X, %Y))), add(%X, %Y), %Z) 4.59/2.19 || MINSORT(add(%X, %Y), %Z) -> EQ(%X, min(add(%X, %Y))) 4.59/2.19 || MINSORT(add(%X, %Y), %Z) -> MIN(add(%X, %Y)) 4.59/2.19 || IF!FAC6220MINSORT(true, add(%X, %Y), %Z) -> MINSORT(app(rm(%X, %Y), %Z), nil) 4.59/2.19 || IF!FAC6220MINSORT(true, add(%X, %Y), %Z) -> APP(rm(%X, %Y), %Z) 4.59/2.19 || IF!FAC6220MINSORT(true, add(%X, %Y), %Z) -> RM(%X, %Y) 4.59/2.19 || IF!FAC6220MINSORT(false, add(%X, %Y), %Z) -> MINSORT(%Y, add(%X, %Z)) 4.59/2.19 || 4.59/2.19 || The TRS R consists of the following rules: 4.59/2.19 || 4.59/2.19 || eq(0, 0) -> true 4.59/2.19 || eq(0, s(%X)) -> false 4.59/2.19 || eq(s(%X), 0) -> false 4.59/2.19 || eq(s(%X), s(%Y)) -> eq(%X, %Y) 4.59/2.19 || le(0, %X) -> true 4.59/2.19 || le(s(%X), 0) -> false 4.59/2.19 || le(s(%X), s(%Y)) -> le(%X, %Y) 4.59/2.19 || app(nil, %X) -> %X 4.59/2.19 || app(add(%X, %Y), %Z) -> add(%X, app(%Y, %Z)) 4.59/2.19 || min(add(%X, nil)) -> %X 4.59/2.19 || min(add(%X, add(%Y, %Z))) -> if!fac6220min(le(%X, %Y), add(%X, add(%Y, %Z))) 4.59/2.19 || if!fac6220min(true, add(%X, add(%Y, %Z))) -> min(add(%X, %Z)) 4.59/2.19 || if!fac6220min(false, add(%X, add(%Y, %Z))) -> min(add(%Y, %Z)) 4.59/2.19 || rm(%X, nil) -> nil 4.59/2.19 || rm(%X, add(%Y, %Z)) -> if!fac6220rm(eq(%X, %Y), %X, add(%Y, %Z)) 4.59/2.19 || if!fac6220rm(true, %X, add(%Y, %Z)) -> rm(%X, %Z) 4.59/2.19 || if!fac6220rm(false, %X, add(%Y, %Z)) -> add(%Y, rm(%X, %Z)) 4.59/2.19 || minsort(nil, nil) -> nil 4.59/2.19 || minsort(add(%X, %Y), %Z) -> if!fac6220minsort(eq(%X, min(add(%X, %Y))), add(%X, %Y), %Z) 4.59/2.19 || if!fac6220minsort(true, add(%X, %Y), %Z) -> add(%X, minsort(app(rm(%X, %Y), %Z), nil)) 4.59/2.19 || if!fac6220minsort(false, add(%X, %Y), %Z) -> minsort(%Y, add(%X, %Z)) 4.59/2.19 || 4.59/2.19 || The set Q consists of the following terms: 4.59/2.19 || 4.59/2.19 || eq(0, 0) 4.59/2.19 || eq(0, s(x0)) 4.59/2.19 || eq(s(x0), 0) 4.59/2.19 || eq(s(x0), s(x1)) 4.59/2.19 || le(0, x0) 4.59/2.19 || le(s(x0), 0) 4.59/2.19 || le(s(x0), s(x1)) 4.59/2.19 || app(nil, x0) 4.59/2.19 || app(add(x0, x1), x2) 4.59/2.19 || min(add(x0, nil)) 4.59/2.19 || min(add(x0, add(x1, x2))) 4.59/2.19 || if!fac6220min(true, add(x0, add(x1, x2))) 4.59/2.19 || if!fac6220min(false, add(x0, add(x1, x2))) 4.59/2.19 || rm(x0, nil) 4.59/2.19 || rm(x0, add(x1, x2)) 4.59/2.19 || if!fac6220rm(true, x0, add(x1, x2)) 4.59/2.19 || if!fac6220rm(false, x0, add(x1, x2)) 4.59/2.19 || minsort(nil, nil) 4.59/2.19 || minsort(add(x0, x1), x2) 4.59/2.19 || if!fac6220minsort(true, add(x0, x1), x2) 4.59/2.19 || if!fac6220minsort(false, add(x0, x1), x2) 4.59/2.19 || 4.59/2.19 || We have to consider all minimal (P,Q,R)-chains. 4.59/2.19 || ---------------------------------------- 4.59/2.19 || 4.59/2.19 || (5) DependencyGraphProof (EQUIVALENT) 4.59/2.19 || The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 6 SCCs with 6 less nodes. 4.59/2.19 || ---------------------------------------- 4.59/2.19 || 4.59/2.19 || (6) 4.59/2.19 || Complex Obligation (AND) 4.59/2.19 || 4.59/2.19 || ---------------------------------------- 4.59/2.19 || 4.59/2.19 || (7) 4.59/2.19 || Obligation: 4.59/2.19 || Q DP problem: 4.59/2.19 || The TRS P consists of the following rules: 4.59/2.19 || 4.59/2.19 || APP(add(%X, %Y), %Z) -> APP(%Y, %Z) 4.59/2.19 || 4.59/2.19 || The TRS R consists of the following rules: 4.59/2.19 || 4.59/2.19 || eq(0, 0) -> true 4.59/2.19 || eq(0, s(%X)) -> false 4.59/2.19 || eq(s(%X), 0) -> false 4.59/2.19 || eq(s(%X), s(%Y)) -> eq(%X, %Y) 4.59/2.19 || le(0, %X) -> true 4.59/2.19 || le(s(%X), 0) -> false 4.59/2.19 || le(s(%X), s(%Y)) -> le(%X, %Y) 4.59/2.19 || app(nil, %X) -> %X 4.59/2.19 || app(add(%X, %Y), %Z) -> add(%X, app(%Y, %Z)) 4.59/2.19 || min(add(%X, nil)) -> %X 4.59/2.19 || min(add(%X, add(%Y, %Z))) -> if!fac6220min(le(%X, %Y), add(%X, add(%Y, %Z))) 4.59/2.19 || if!fac6220min(true, add(%X, add(%Y, %Z))) -> min(add(%X, %Z)) 4.59/2.19 || if!fac6220min(false, add(%X, add(%Y, %Z))) -> min(add(%Y, %Z)) 4.59/2.19 || rm(%X, nil) -> nil 4.59/2.19 || rm(%X, add(%Y, %Z)) -> if!fac6220rm(eq(%X, %Y), %X, add(%Y, %Z)) 4.59/2.19 || if!fac6220rm(true, %X, add(%Y, %Z)) -> rm(%X, %Z) 4.59/2.19 || if!fac6220rm(false, %X, add(%Y, %Z)) -> add(%Y, rm(%X, %Z)) 4.59/2.19 || minsort(nil, nil) -> nil 4.59/2.19 || minsort(add(%X, %Y), %Z) -> if!fac6220minsort(eq(%X, min(add(%X, %Y))), add(%X, %Y), %Z) 4.59/2.19 || if!fac6220minsort(true, add(%X, %Y), %Z) -> add(%X, minsort(app(rm(%X, %Y), %Z), nil)) 4.59/2.19 || if!fac6220minsort(false, add(%X, %Y), %Z) -> minsort(%Y, add(%X, %Z)) 4.59/2.19 || 4.59/2.19 || The set Q consists of the following terms: 4.59/2.19 || 4.59/2.19 || eq(0, 0) 4.59/2.19 || eq(0, s(x0)) 4.59/2.19 || eq(s(x0), 0) 4.59/2.19 || eq(s(x0), s(x1)) 4.59/2.19 || le(0, x0) 4.59/2.19 || le(s(x0), 0) 4.59/2.19 || le(s(x0), s(x1)) 4.59/2.19 || app(nil, x0) 4.59/2.19 || app(add(x0, x1), x2) 4.59/2.19 || min(add(x0, nil)) 4.59/2.19 || min(add(x0, add(x1, x2))) 4.59/2.19 || if!fac6220min(true, add(x0, add(x1, x2))) 4.59/2.19 || if!fac6220min(false, add(x0, add(x1, x2))) 4.59/2.19 || rm(x0, nil) 4.59/2.19 || rm(x0, add(x1, x2)) 4.59/2.19 || if!fac6220rm(true, x0, add(x1, x2)) 4.59/2.19 || if!fac6220rm(false, x0, add(x1, x2)) 4.59/2.19 || minsort(nil, nil) 4.59/2.19 || minsort(add(x0, x1), x2) 4.59/2.19 || if!fac6220minsort(true, add(x0, x1), x2) 4.59/2.19 || if!fac6220minsort(false, add(x0, x1), x2) 4.59/2.19 || 4.59/2.19 || We have to consider all minimal (P,Q,R)-chains. 4.59/2.19 || ---------------------------------------- 4.59/2.19 || 4.59/2.19 || (8) UsableRulesProof (EQUIVALENT) 4.59/2.19 || As all Q-normal forms are R-normal forms we are in the innermost case. Hence, by the usable rules processor [LPAR04] we can delete all non-usable rules [FROCOS05] from R. 4.59/2.19 || ---------------------------------------- 4.59/2.19 || 4.59/2.19 || (9) 4.59/2.19 || Obligation: 4.59/2.19 || Q DP problem: 4.59/2.19 || The TRS P consists of the following rules: 4.59/2.19 || 4.59/2.19 || APP(add(%X, %Y), %Z) -> APP(%Y, %Z) 4.59/2.19 || 4.59/2.19 || R is empty. 4.59/2.19 || The set Q consists of the following terms: 4.59/2.19 || 4.59/2.19 || eq(0, 0) 4.59/2.19 || eq(0, s(x0)) 4.59/2.19 || eq(s(x0), 0) 4.59/2.19 || eq(s(x0), s(x1)) 4.59/2.19 || le(0, x0) 4.59/2.19 || le(s(x0), 0) 4.59/2.19 || le(s(x0), s(x1)) 4.59/2.19 || app(nil, x0) 4.59/2.19 || app(add(x0, x1), x2) 4.59/2.19 || min(add(x0, nil)) 4.59/2.19 || min(add(x0, add(x1, x2))) 4.59/2.19 || if!fac6220min(true, add(x0, add(x1, x2))) 4.59/2.19 || if!fac6220min(false, add(x0, add(x1, x2))) 4.59/2.19 || rm(x0, nil) 4.59/2.19 || rm(x0, add(x1, x2)) 4.59/2.19 || if!fac6220rm(true, x0, add(x1, x2)) 4.59/2.19 || if!fac6220rm(false, x0, add(x1, x2)) 4.59/2.19 || minsort(nil, nil) 4.59/2.19 || minsort(add(x0, x1), x2) 4.59/2.19 || if!fac6220minsort(true, add(x0, x1), x2) 4.59/2.19 || if!fac6220minsort(false, add(x0, x1), x2) 4.59/2.19 || 4.59/2.19 || We have to consider all minimal (P,Q,R)-chains. 4.59/2.19 || ---------------------------------------- 4.59/2.19 || 4.59/2.19 || (10) QReductionProof (EQUIVALENT) 4.59/2.19 || We deleted the following terms from Q as each root-symbol of these terms does neither occur in P nor in R.[THIEMANN]. 4.59/2.19 || 4.59/2.19 || eq(0, 0) 4.59/2.19 || eq(0, s(x0)) 4.59/2.19 || eq(s(x0), 0) 4.59/2.19 || eq(s(x0), s(x1)) 4.59/2.19 || le(0, x0) 4.59/2.19 || le(s(x0), 0) 4.59/2.19 || le(s(x0), s(x1)) 4.59/2.19 || app(nil, x0) 4.59/2.19 || app(add(x0, x1), x2) 4.59/2.19 || min(add(x0, nil)) 4.59/2.19 || min(add(x0, add(x1, x2))) 4.59/2.19 || if!fac6220min(true, add(x0, add(x1, x2))) 4.59/2.19 || if!fac6220min(false, add(x0, add(x1, x2))) 4.59/2.19 || rm(x0, nil) 4.59/2.19 || rm(x0, add(x1, x2)) 4.59/2.19 || if!fac6220rm(true, x0, add(x1, x2)) 4.59/2.19 || if!fac6220rm(false, x0, add(x1, x2)) 4.59/2.19 || minsort(nil, nil) 4.59/2.19 || minsort(add(x0, x1), x2) 4.59/2.19 || if!fac6220minsort(true, add(x0, x1), x2) 4.59/2.19 || if!fac6220minsort(false, add(x0, x1), x2) 4.59/2.19 || 4.59/2.19 || 4.59/2.19 || ---------------------------------------- 4.59/2.19 || 4.59/2.19 || (11) 4.59/2.19 || Obligation: 4.59/2.19 || Q DP problem: 4.59/2.19 || The TRS P consists of the following rules: 4.59/2.19 || 4.59/2.19 || APP(add(%X, %Y), %Z) -> APP(%Y, %Z) 4.59/2.19 || 4.59/2.19 || R is empty. 4.59/2.19 || Q is empty. 4.59/2.19 || We have to consider all minimal (P,Q,R)-chains. 4.59/2.19 || ---------------------------------------- 4.59/2.19 || 4.59/2.19 || (12) QDPSizeChangeProof (EQUIVALENT) 4.59/2.19 || By using the subterm criterion [SUBTERM_CRITERION] together with the size-change analysis [AAECC05] we have proven that there are no infinite chains for this DP problem. 4.59/2.19 || 4.59/2.19 || From the DPs we obtained the following set of size-change graphs: 4.59/2.19 || *APP(add(%X, %Y), %Z) -> APP(%Y, %Z) 4.59/2.19 || The graph contains the following edges 1 > 1, 2 >= 2 4.59/2.19 || 4.59/2.19 || 4.59/2.19 || ---------------------------------------- 4.59/2.19 || 4.59/2.19 || (13) 4.59/2.19 || YES 4.59/2.19 || 4.59/2.19 || ---------------------------------------- 4.59/2.19 || 4.59/2.19 || (14) 4.59/2.19 || Obligation: 4.59/2.19 || Q DP problem: 4.59/2.19 || The TRS P consists of the following rules: 4.59/2.19 || 4.59/2.19 || LE(s(%X), s(%Y)) -> LE(%X, %Y) 4.59/2.19 || 4.59/2.19 || The TRS R consists of the following rules: 4.59/2.19 || 4.59/2.19 || eq(0, 0) -> true 4.59/2.19 || eq(0, s(%X)) -> false 4.59/2.19 || eq(s(%X), 0) -> false 4.59/2.19 || eq(s(%X), s(%Y)) -> eq(%X, %Y) 4.59/2.19 || le(0, %X) -> true 4.59/2.19 || le(s(%X), 0) -> false 4.59/2.19 || le(s(%X), s(%Y)) -> le(%X, %Y) 4.59/2.19 || app(nil, %X) -> %X 4.59/2.19 || app(add(%X, %Y), %Z) -> add(%X, app(%Y, %Z)) 4.59/2.19 || min(add(%X, nil)) -> %X 4.59/2.19 || min(add(%X, add(%Y, %Z))) -> if!fac6220min(le(%X, %Y), add(%X, add(%Y, %Z))) 4.59/2.19 || if!fac6220min(true, add(%X, add(%Y, %Z))) -> min(add(%X, %Z)) 4.59/2.19 || if!fac6220min(false, add(%X, add(%Y, %Z))) -> min(add(%Y, %Z)) 4.59/2.19 || rm(%X, nil) -> nil 4.59/2.19 || rm(%X, add(%Y, %Z)) -> if!fac6220rm(eq(%X, %Y), %X, add(%Y, %Z)) 4.59/2.19 || if!fac6220rm(true, %X, add(%Y, %Z)) -> rm(%X, %Z) 4.59/2.19 || if!fac6220rm(false, %X, add(%Y, %Z)) -> add(%Y, rm(%X, %Z)) 4.59/2.19 || minsort(nil, nil) -> nil 4.59/2.19 || minsort(add(%X, %Y), %Z) -> if!fac6220minsort(eq(%X, min(add(%X, %Y))), add(%X, %Y), %Z) 4.59/2.19 || if!fac6220minsort(true, add(%X, %Y), %Z) -> add(%X, minsort(app(rm(%X, %Y), %Z), nil)) 4.59/2.19 || if!fac6220minsort(false, add(%X, %Y), %Z) -> minsort(%Y, add(%X, %Z)) 4.59/2.19 || 4.59/2.19 || The set Q consists of the following terms: 4.59/2.19 || 4.59/2.19 || eq(0, 0) 4.59/2.19 || eq(0, s(x0)) 4.59/2.19 || eq(s(x0), 0) 4.59/2.19 || eq(s(x0), s(x1)) 4.59/2.19 || le(0, x0) 4.59/2.19 || le(s(x0), 0) 4.59/2.19 || le(s(x0), s(x1)) 4.59/2.19 || app(nil, x0) 4.59/2.19 || app(add(x0, x1), x2) 4.59/2.19 || min(add(x0, nil)) 4.59/2.19 || min(add(x0, add(x1, x2))) 4.59/2.19 || if!fac6220min(true, add(x0, add(x1, x2))) 4.59/2.19 || if!fac6220min(false, add(x0, add(x1, x2))) 4.59/2.19 || rm(x0, nil) 4.59/2.19 || rm(x0, add(x1, x2)) 4.59/2.19 || if!fac6220rm(true, x0, add(x1, x2)) 4.59/2.19 || if!fac6220rm(false, x0, add(x1, x2)) 4.59/2.19 || minsort(nil, nil) 4.59/2.19 || minsort(add(x0, x1), x2) 4.59/2.19 || if!fac6220minsort(true, add(x0, x1), x2) 4.59/2.19 || if!fac6220minsort(false, add(x0, x1), x2) 4.59/2.19 || 4.59/2.19 || We have to consider all minimal (P,Q,R)-chains. 4.59/2.19 || ---------------------------------------- 4.59/2.19 || 4.59/2.19 || (15) UsableRulesProof (EQUIVALENT) 4.59/2.19 || As all Q-normal forms are R-normal forms we are in the innermost case. Hence, by the usable rules processor [LPAR04] we can delete all non-usable rules [FROCOS05] from R. 4.59/2.19 || ---------------------------------------- 4.59/2.19 || 4.59/2.19 || (16) 4.59/2.19 || Obligation: 4.59/2.19 || Q DP problem: 4.59/2.19 || The TRS P consists of the following rules: 4.59/2.19 || 4.59/2.19 || LE(s(%X), s(%Y)) -> LE(%X, %Y) 4.59/2.19 || 4.59/2.19 || R is empty. 4.59/2.19 || The set Q consists of the following terms: 4.59/2.19 || 4.59/2.19 || eq(0, 0) 4.59/2.19 || eq(0, s(x0)) 4.59/2.19 || eq(s(x0), 0) 4.59/2.19 || eq(s(x0), s(x1)) 4.59/2.19 || le(0, x0) 4.59/2.19 || le(s(x0), 0) 4.59/2.19 || le(s(x0), s(x1)) 4.59/2.19 || app(nil, x0) 4.59/2.19 || app(add(x0, x1), x2) 4.59/2.19 || min(add(x0, nil)) 4.59/2.19 || min(add(x0, add(x1, x2))) 4.59/2.19 || if!fac6220min(true, add(x0, add(x1, x2))) 4.59/2.19 || if!fac6220min(false, add(x0, add(x1, x2))) 4.59/2.19 || rm(x0, nil) 4.59/2.19 || rm(x0, add(x1, x2)) 4.59/2.19 || if!fac6220rm(true, x0, add(x1, x2)) 4.59/2.19 || if!fac6220rm(false, x0, add(x1, x2)) 4.59/2.19 || minsort(nil, nil) 4.59/2.19 || minsort(add(x0, x1), x2) 4.59/2.19 || if!fac6220minsort(true, add(x0, x1), x2) 4.59/2.19 || if!fac6220minsort(false, add(x0, x1), x2) 4.59/2.19 || 4.59/2.19 || We have to consider all minimal (P,Q,R)-chains. 4.59/2.19 || ---------------------------------------- 4.59/2.19 || 4.59/2.19 || (17) QReductionProof (EQUIVALENT) 4.59/2.19 || We deleted the following terms from Q as each root-symbol of these terms does neither occur in P nor in R.[THIEMANN]. 4.59/2.19 || 4.59/2.19 || eq(0, 0) 4.59/2.19 || eq(0, s(x0)) 4.59/2.19 || eq(s(x0), 0) 4.59/2.19 || eq(s(x0), s(x1)) 4.59/2.19 || le(0, x0) 4.59/2.19 || le(s(x0), 0) 4.59/2.19 || le(s(x0), s(x1)) 4.59/2.19 || app(nil, x0) 4.59/2.19 || app(add(x0, x1), x2) 4.59/2.19 || min(add(x0, nil)) 4.59/2.19 || min(add(x0, add(x1, x2))) 4.59/2.19 || if!fac6220min(true, add(x0, add(x1, x2))) 4.59/2.19 || if!fac6220min(false, add(x0, add(x1, x2))) 4.59/2.19 || rm(x0, nil) 4.59/2.19 || rm(x0, add(x1, x2)) 4.59/2.19 || if!fac6220rm(true, x0, add(x1, x2)) 4.59/2.19 || if!fac6220rm(false, x0, add(x1, x2)) 4.59/2.19 || minsort(nil, nil) 4.59/2.19 || minsort(add(x0, x1), x2) 4.59/2.19 || if!fac6220minsort(true, add(x0, x1), x2) 4.59/2.19 || if!fac6220minsort(false, add(x0, x1), x2) 4.59/2.19 || 4.59/2.19 || 4.59/2.19 || ---------------------------------------- 4.59/2.19 || 4.59/2.19 || (18) 4.59/2.19 || Obligation: 4.59/2.19 || Q DP problem: 4.59/2.19 || The TRS P consists of the following rules: 4.59/2.19 || 4.59/2.19 || LE(s(%X), s(%Y)) -> LE(%X, %Y) 4.59/2.19 || 4.59/2.19 || R is empty. 4.59/2.19 || Q is empty. 4.59/2.19 || We have to consider all minimal (P,Q,R)-chains. 4.59/2.19 || ---------------------------------------- 4.59/2.19 || 4.59/2.19 || (19) QDPSizeChangeProof (EQUIVALENT) 4.59/2.19 || By using the subterm criterion [SUBTERM_CRITERION] together with the size-change analysis [AAECC05] we have proven that there are no infinite chains for this DP problem. 4.59/2.19 || 4.59/2.19 || From the DPs we obtained the following set of size-change graphs: 4.59/2.19 || *LE(s(%X), s(%Y)) -> LE(%X, %Y) 4.59/2.19 || The graph contains the following edges 1 > 1, 2 > 2 4.59/2.19 || 4.59/2.19 || 4.59/2.19 || ---------------------------------------- 4.59/2.19 || 4.59/2.19 || (20) 4.59/2.19 || YES 4.59/2.19 || 4.59/2.19 || ---------------------------------------- 4.59/2.19 || 4.59/2.19 || (21) 4.59/2.19 || Obligation: 4.59/2.19 || Q DP problem: 4.59/2.19 || The TRS P consists of the following rules: 4.59/2.19 || 4.59/2.19 || MIN(add(%X, add(%Y, %Z))) -> IF!FAC6220MIN(le(%X, %Y), add(%X, add(%Y, %Z))) 4.59/2.19 || IF!FAC6220MIN(true, add(%X, add(%Y, %Z))) -> MIN(add(%X, %Z)) 4.59/2.19 || IF!FAC6220MIN(false, add(%X, add(%Y, %Z))) -> MIN(add(%Y, %Z)) 4.59/2.19 || 4.59/2.19 || The TRS R consists of the following rules: 4.59/2.19 || 4.59/2.19 || eq(0, 0) -> true 4.59/2.19 || eq(0, s(%X)) -> false 4.59/2.19 || eq(s(%X), 0) -> false 4.59/2.19 || eq(s(%X), s(%Y)) -> eq(%X, %Y) 4.59/2.19 || le(0, %X) -> true 4.59/2.19 || le(s(%X), 0) -> false 4.59/2.19 || le(s(%X), s(%Y)) -> le(%X, %Y) 4.59/2.19 || app(nil, %X) -> %X 4.59/2.19 || app(add(%X, %Y), %Z) -> add(%X, app(%Y, %Z)) 4.59/2.19 || min(add(%X, nil)) -> %X 4.59/2.19 || min(add(%X, add(%Y, %Z))) -> if!fac6220min(le(%X, %Y), add(%X, add(%Y, %Z))) 4.59/2.19 || if!fac6220min(true, add(%X, add(%Y, %Z))) -> min(add(%X, %Z)) 4.59/2.19 || if!fac6220min(false, add(%X, add(%Y, %Z))) -> min(add(%Y, %Z)) 4.59/2.19 || rm(%X, nil) -> nil 4.59/2.19 || rm(%X, add(%Y, %Z)) -> if!fac6220rm(eq(%X, %Y), %X, add(%Y, %Z)) 4.59/2.19 || if!fac6220rm(true, %X, add(%Y, %Z)) -> rm(%X, %Z) 4.59/2.19 || if!fac6220rm(false, %X, add(%Y, %Z)) -> add(%Y, rm(%X, %Z)) 4.59/2.19 || minsort(nil, nil) -> nil 4.59/2.19 || minsort(add(%X, %Y), %Z) -> if!fac6220minsort(eq(%X, min(add(%X, %Y))), add(%X, %Y), %Z) 4.59/2.19 || if!fac6220minsort(true, add(%X, %Y), %Z) -> add(%X, minsort(app(rm(%X, %Y), %Z), nil)) 4.59/2.19 || if!fac6220minsort(false, add(%X, %Y), %Z) -> minsort(%Y, add(%X, %Z)) 4.59/2.19 || 4.59/2.19 || The set Q consists of the following terms: 4.59/2.19 || 4.59/2.19 || eq(0, 0) 4.59/2.19 || eq(0, s(x0)) 4.59/2.19 || eq(s(x0), 0) 4.59/2.19 || eq(s(x0), s(x1)) 4.59/2.19 || le(0, x0) 4.59/2.19 || le(s(x0), 0) 4.59/2.19 || le(s(x0), s(x1)) 4.59/2.19 || app(nil, x0) 4.59/2.19 || app(add(x0, x1), x2) 4.59/2.19 || min(add(x0, nil)) 4.59/2.19 || min(add(x0, add(x1, x2))) 4.59/2.19 || if!fac6220min(true, add(x0, add(x1, x2))) 4.59/2.19 || if!fac6220min(false, add(x0, add(x1, x2))) 4.59/2.19 || rm(x0, nil) 4.59/2.19 || rm(x0, add(x1, x2)) 4.59/2.19 || if!fac6220rm(true, x0, add(x1, x2)) 4.59/2.19 || if!fac6220rm(false, x0, add(x1, x2)) 4.59/2.19 || minsort(nil, nil) 4.59/2.19 || minsort(add(x0, x1), x2) 4.59/2.19 || if!fac6220minsort(true, add(x0, x1), x2) 4.59/2.19 || if!fac6220minsort(false, add(x0, x1), x2) 4.59/2.19 || 4.59/2.19 || We have to consider all minimal (P,Q,R)-chains. 4.59/2.19 || ---------------------------------------- 4.59/2.19 || 4.59/2.19 || (22) UsableRulesProof (EQUIVALENT) 4.59/2.19 || As all Q-normal forms are R-normal forms we are in the innermost case. Hence, by the usable rules processor [LPAR04] we can delete all non-usable rules [FROCOS05] from R. 4.59/2.19 || ---------------------------------------- 4.59/2.19 || 4.59/2.19 || (23) 4.59/2.19 || Obligation: 4.59/2.19 || Q DP problem: 4.59/2.19 || The TRS P consists of the following rules: 4.59/2.19 || 4.59/2.19 || MIN(add(%X, add(%Y, %Z))) -> IF!FAC6220MIN(le(%X, %Y), add(%X, add(%Y, %Z))) 4.59/2.19 || IF!FAC6220MIN(true, add(%X, add(%Y, %Z))) -> MIN(add(%X, %Z)) 4.59/2.19 || IF!FAC6220MIN(false, add(%X, add(%Y, %Z))) -> MIN(add(%Y, %Z)) 4.59/2.19 || 4.59/2.19 || The TRS R consists of the following rules: 4.59/2.19 || 4.59/2.19 || le(0, %X) -> true 4.59/2.19 || le(s(%X), 0) -> false 4.59/2.19 || le(s(%X), s(%Y)) -> le(%X, %Y) 4.59/2.19 || 4.59/2.19 || The set Q consists of the following terms: 4.59/2.19 || 4.59/2.19 || eq(0, 0) 4.59/2.19 || eq(0, s(x0)) 4.59/2.19 || eq(s(x0), 0) 4.59/2.19 || eq(s(x0), s(x1)) 4.59/2.19 || le(0, x0) 4.59/2.19 || le(s(x0), 0) 4.59/2.19 || le(s(x0), s(x1)) 4.59/2.19 || app(nil, x0) 4.59/2.19 || app(add(x0, x1), x2) 4.59/2.19 || min(add(x0, nil)) 4.59/2.19 || min(add(x0, add(x1, x2))) 4.59/2.19 || if!fac6220min(true, add(x0, add(x1, x2))) 4.59/2.19 || if!fac6220min(false, add(x0, add(x1, x2))) 4.59/2.19 || rm(x0, nil) 4.59/2.19 || rm(x0, add(x1, x2)) 4.59/2.19 || if!fac6220rm(true, x0, add(x1, x2)) 4.59/2.19 || if!fac6220rm(false, x0, add(x1, x2)) 4.59/2.19 || minsort(nil, nil) 4.59/2.19 || minsort(add(x0, x1), x2) 4.59/2.19 || if!fac6220minsort(true, add(x0, x1), x2) 4.59/2.19 || if!fac6220minsort(false, add(x0, x1), x2) 4.59/2.19 || 4.59/2.19 || We have to consider all minimal (P,Q,R)-chains. 4.59/2.19 || ---------------------------------------- 4.59/2.19 || 4.59/2.19 || (24) QReductionProof (EQUIVALENT) 4.59/2.19 || We deleted the following terms from Q as each root-symbol of these terms does neither occur in P nor in R.[THIEMANN]. 4.59/2.19 || 4.59/2.19 || eq(0, 0) 4.59/2.19 || eq(0, s(x0)) 4.59/2.19 || eq(s(x0), 0) 4.59/2.19 || eq(s(x0), s(x1)) 4.59/2.19 || app(nil, x0) 4.59/2.19 || app(add(x0, x1), x2) 4.59/2.19 || min(add(x0, nil)) 4.59/2.19 || min(add(x0, add(x1, x2))) 4.59/2.19 || if!fac6220min(true, add(x0, add(x1, x2))) 4.59/2.19 || if!fac6220min(false, add(x0, add(x1, x2))) 4.59/2.19 || rm(x0, nil) 4.59/2.19 || rm(x0, add(x1, x2)) 4.59/2.19 || if!fac6220rm(true, x0, add(x1, x2)) 4.59/2.19 || if!fac6220rm(false, x0, add(x1, x2)) 4.59/2.19 || minsort(nil, nil) 4.59/2.19 || minsort(add(x0, x1), x2) 4.59/2.19 || if!fac6220minsort(true, add(x0, x1), x2) 4.59/2.19 || if!fac6220minsort(false, add(x0, x1), x2) 4.59/2.19 || 4.59/2.19 || 4.59/2.19 || ---------------------------------------- 4.59/2.19 || 4.59/2.19 || (25) 4.59/2.19 || Obligation: 4.59/2.19 || Q DP problem: 4.59/2.19 || The TRS P consists of the following rules: 4.59/2.19 || 4.59/2.19 || MIN(add(%X, add(%Y, %Z))) -> IF!FAC6220MIN(le(%X, %Y), add(%X, add(%Y, %Z))) 4.59/2.19 || IF!FAC6220MIN(true, add(%X, add(%Y, %Z))) -> MIN(add(%X, %Z)) 4.59/2.19 || IF!FAC6220MIN(false, add(%X, add(%Y, %Z))) -> MIN(add(%Y, %Z)) 4.59/2.19 || 4.59/2.19 || The TRS R consists of the following rules: 4.59/2.19 || 4.59/2.19 || le(0, %X) -> true 4.59/2.19 || le(s(%X), 0) -> false 4.59/2.19 || le(s(%X), s(%Y)) -> le(%X, %Y) 4.59/2.19 || 4.59/2.19 || The set Q consists of the following terms: 4.59/2.19 || 4.59/2.19 || le(0, x0) 4.59/2.19 || le(s(x0), 0) 4.59/2.19 || le(s(x0), s(x1)) 4.59/2.19 || 4.59/2.19 || We have to consider all minimal (P,Q,R)-chains. 4.59/2.19 || ---------------------------------------- 4.59/2.19 || 4.59/2.19 || (26) QDPOrderProof (EQUIVALENT) 4.59/2.19 || We use the reduction pair processor [LPAR04,JAR06]. 4.59/2.19 || 4.59/2.19 || 4.59/2.19 || The following pairs can be oriented strictly and are deleted. 4.59/2.19 || 4.59/2.19 || IF!FAC6220MIN(true, add(%X, add(%Y, %Z))) -> MIN(add(%X, %Z)) 4.59/2.19 || IF!FAC6220MIN(false, add(%X, add(%Y, %Z))) -> MIN(add(%Y, %Z)) 4.59/2.19 || The remaining pairs can at least be oriented weakly. 4.59/2.19 || Used ordering: Polynomial Order [NEGPOLO,POLO] with Interpretation: 4.59/2.19 || 4.59/2.19 || POL( IF!FAC6220MIN_2(x_1, x_2) ) = max{0, 2x_1 + 2x_2 - 2} 4.59/2.19 || POL( le_2(x_1, x_2) ) = 2 4.59/2.19 || POL( 0 ) = 2 4.59/2.19 || POL( true ) = 0 4.59/2.19 || POL( s_1(x_1) ) = 2 4.59/2.19 || POL( false ) = 0 4.59/2.19 || POL( MIN_1(x_1) ) = 2x_1 + 2 4.59/2.19 || POL( add_2(x_1, x_2) ) = x_1 + 2x_2 + 2 4.59/2.19 || 4.59/2.19 || The following usable rules [FROCOS05] with respect to the argument filtering of the ordering [JAR06] were oriented: 4.59/2.19 || 4.59/2.19 || le(0, %X) -> true 4.59/2.19 || le(s(%X), 0) -> false 4.59/2.19 || le(s(%X), s(%Y)) -> le(%X, %Y) 4.59/2.19 || 4.59/2.19 || 4.59/2.19 || ---------------------------------------- 4.59/2.19 || 4.59/2.19 || (27) 4.59/2.19 || Obligation: 4.59/2.19 || Q DP problem: 4.59/2.19 || The TRS P consists of the following rules: 4.59/2.19 || 4.59/2.19 || MIN(add(%X, add(%Y, %Z))) -> IF!FAC6220MIN(le(%X, %Y), add(%X, add(%Y, %Z))) 4.59/2.19 || 4.59/2.19 || The TRS R consists of the following rules: 4.59/2.19 || 4.59/2.19 || le(0, %X) -> true 4.59/2.19 || le(s(%X), 0) -> false 4.59/2.19 || le(s(%X), s(%Y)) -> le(%X, %Y) 4.59/2.19 || 4.59/2.19 || The set Q consists of the following terms: 4.59/2.19 || 4.59/2.19 || le(0, x0) 4.59/2.19 || le(s(x0), 0) 4.59/2.19 || le(s(x0), s(x1)) 4.59/2.19 || 4.59/2.19 || We have to consider all minimal (P,Q,R)-chains. 4.59/2.19 || ---------------------------------------- 4.59/2.19 || 4.59/2.19 || (28) DependencyGraphProof (EQUIVALENT) 4.59/2.19 || The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 0 SCCs with 1 less node. 4.59/2.19 || ---------------------------------------- 4.59/2.19 || 4.59/2.19 || (29) 4.59/2.19 || TRUE 4.59/2.19 || 4.59/2.19 || ---------------------------------------- 4.59/2.19 || 4.59/2.19 || (30) 4.59/2.19 || Obligation: 4.59/2.19 || Q DP problem: 4.59/2.19 || The TRS P consists of the following rules: 4.59/2.19 || 4.59/2.19 || EQ(s(%X), s(%Y)) -> EQ(%X, %Y) 4.59/2.19 || 4.59/2.19 || The TRS R consists of the following rules: 4.59/2.19 || 4.59/2.19 || eq(0, 0) -> true 4.59/2.19 || eq(0, s(%X)) -> false 4.59/2.19 || eq(s(%X), 0) -> false 4.59/2.19 || eq(s(%X), s(%Y)) -> eq(%X, %Y) 4.59/2.19 || le(0, %X) -> true 4.59/2.19 || le(s(%X), 0) -> false 4.59/2.19 || le(s(%X), s(%Y)) -> le(%X, %Y) 4.59/2.19 || app(nil, %X) -> %X 4.59/2.19 || app(add(%X, %Y), %Z) -> add(%X, app(%Y, %Z)) 4.59/2.19 || min(add(%X, nil)) -> %X 4.59/2.19 || min(add(%X, add(%Y, %Z))) -> if!fac6220min(le(%X, %Y), add(%X, add(%Y, %Z))) 4.59/2.19 || if!fac6220min(true, add(%X, add(%Y, %Z))) -> min(add(%X, %Z)) 4.59/2.19 || if!fac6220min(false, add(%X, add(%Y, %Z))) -> min(add(%Y, %Z)) 4.59/2.19 || rm(%X, nil) -> nil 4.59/2.19 || rm(%X, add(%Y, %Z)) -> if!fac6220rm(eq(%X, %Y), %X, add(%Y, %Z)) 4.59/2.19 || if!fac6220rm(true, %X, add(%Y, %Z)) -> rm(%X, %Z) 4.59/2.19 || if!fac6220rm(false, %X, add(%Y, %Z)) -> add(%Y, rm(%X, %Z)) 4.59/2.19 || minsort(nil, nil) -> nil 4.59/2.19 || minsort(add(%X, %Y), %Z) -> if!fac6220minsort(eq(%X, min(add(%X, %Y))), add(%X, %Y), %Z) 4.59/2.19 || if!fac6220minsort(true, add(%X, %Y), %Z) -> add(%X, minsort(app(rm(%X, %Y), %Z), nil)) 4.59/2.19 || if!fac6220minsort(false, add(%X, %Y), %Z) -> minsort(%Y, add(%X, %Z)) 4.59/2.19 || 4.59/2.19 || The set Q consists of the following terms: 4.59/2.19 || 4.59/2.19 || eq(0, 0) 4.59/2.19 || eq(0, s(x0)) 4.59/2.19 || eq(s(x0), 0) 4.59/2.19 || eq(s(x0), s(x1)) 4.59/2.19 || le(0, x0) 4.59/2.19 || le(s(x0), 0) 4.59/2.19 || le(s(x0), s(x1)) 4.59/2.19 || app(nil, x0) 4.59/2.19 || app(add(x0, x1), x2) 4.59/2.19 || min(add(x0, nil)) 4.59/2.19 || min(add(x0, add(x1, x2))) 4.59/2.19 || if!fac6220min(true, add(x0, add(x1, x2))) 4.59/2.19 || if!fac6220min(false, add(x0, add(x1, x2))) 4.59/2.19 || rm(x0, nil) 4.59/2.19 || rm(x0, add(x1, x2)) 4.59/2.19 || if!fac6220rm(true, x0, add(x1, x2)) 4.59/2.19 || if!fac6220rm(false, x0, add(x1, x2)) 4.59/2.19 || minsort(nil, nil) 4.59/2.19 || minsort(add(x0, x1), x2) 4.59/2.19 || if!fac6220minsort(true, add(x0, x1), x2) 4.59/2.19 || if!fac6220minsort(false, add(x0, x1), x2) 4.59/2.19 || 4.59/2.19 || We have to consider all minimal (P,Q,R)-chains. 4.59/2.19 || ---------------------------------------- 4.59/2.19 || 4.59/2.19 || (31) UsableRulesProof (EQUIVALENT) 4.59/2.19 || As all Q-normal forms are R-normal forms we are in the innermost case. Hence, by the usable rules processor [LPAR04] we can delete all non-usable rules [FROCOS05] from R. 4.59/2.19 || ---------------------------------------- 4.59/2.19 || 4.59/2.19 || (32) 4.59/2.19 || Obligation: 4.59/2.19 || Q DP problem: 4.59/2.19 || The TRS P consists of the following rules: 4.59/2.19 || 4.59/2.19 || EQ(s(%X), s(%Y)) -> EQ(%X, %Y) 4.59/2.19 || 4.59/2.19 || R is empty. 4.59/2.19 || The set Q consists of the following terms: 4.59/2.19 || 4.59/2.19 || eq(0, 0) 4.59/2.19 || eq(0, s(x0)) 4.59/2.19 || eq(s(x0), 0) 4.59/2.19 || eq(s(x0), s(x1)) 4.59/2.19 || le(0, x0) 4.59/2.19 || le(s(x0), 0) 4.59/2.19 || le(s(x0), s(x1)) 4.59/2.19 || app(nil, x0) 4.59/2.19 || app(add(x0, x1), x2) 4.59/2.19 || min(add(x0, nil)) 4.59/2.19 || min(add(x0, add(x1, x2))) 4.59/2.19 || if!fac6220min(true, add(x0, add(x1, x2))) 4.59/2.19 || if!fac6220min(false, add(x0, add(x1, x2))) 4.59/2.19 || rm(x0, nil) 4.59/2.19 || rm(x0, add(x1, x2)) 4.59/2.19 || if!fac6220rm(true, x0, add(x1, x2)) 4.59/2.19 || if!fac6220rm(false, x0, add(x1, x2)) 4.59/2.19 || minsort(nil, nil) 4.59/2.19 || minsort(add(x0, x1), x2) 4.59/2.19 || if!fac6220minsort(true, add(x0, x1), x2) 4.59/2.19 || if!fac6220minsort(false, add(x0, x1), x2) 4.59/2.19 || 4.59/2.19 || We have to consider all minimal (P,Q,R)-chains. 4.59/2.19 || ---------------------------------------- 4.59/2.19 || 4.59/2.19 || (33) QReductionProof (EQUIVALENT) 4.59/2.19 || We deleted the following terms from Q as each root-symbol of these terms does neither occur in P nor in R.[THIEMANN]. 4.59/2.19 || 4.59/2.19 || eq(0, 0) 4.59/2.19 || eq(0, s(x0)) 4.59/2.19 || eq(s(x0), 0) 4.59/2.19 || eq(s(x0), s(x1)) 4.59/2.19 || le(0, x0) 4.59/2.19 || le(s(x0), 0) 4.59/2.19 || le(s(x0), s(x1)) 4.59/2.19 || app(nil, x0) 4.59/2.19 || app(add(x0, x1), x2) 4.59/2.19 || min(add(x0, nil)) 4.59/2.19 || min(add(x0, add(x1, x2))) 4.59/2.19 || if!fac6220min(true, add(x0, add(x1, x2))) 4.59/2.19 || if!fac6220min(false, add(x0, add(x1, x2))) 4.59/2.20 || rm(x0, nil) 4.59/2.20 || rm(x0, add(x1, x2)) 4.59/2.20 || if!fac6220rm(true, x0, add(x1, x2)) 4.59/2.20 || if!fac6220rm(false, x0, add(x1, x2)) 4.59/2.20 || minsort(nil, nil) 4.59/2.20 || minsort(add(x0, x1), x2) 4.59/2.20 || if!fac6220minsort(true, add(x0, x1), x2) 4.59/2.20 || if!fac6220minsort(false, add(x0, x1), x2) 4.59/2.20 || 4.59/2.20 || 4.59/2.20 || ---------------------------------------- 4.59/2.20 || 4.59/2.20 || (34) 4.59/2.20 || Obligation: 4.59/2.20 || Q DP problem: 4.59/2.20 || The TRS P consists of the following rules: 4.59/2.20 || 4.59/2.20 || EQ(s(%X), s(%Y)) -> EQ(%X, %Y) 4.59/2.20 || 4.59/2.20 || R is empty. 4.59/2.20 || Q is empty. 4.59/2.20 || We have to consider all minimal (P,Q,R)-chains. 4.59/2.20 || ---------------------------------------- 4.59/2.20 || 4.59/2.20 || (35) QDPSizeChangeProof (EQUIVALENT) 4.59/2.20 || By using the subterm criterion [SUBTERM_CRITERION] together with the size-change analysis [AAECC05] we have proven that there are no infinite chains for this DP problem. 4.59/2.20 || 4.59/2.20 || From the DPs we obtained the following set of size-change graphs: 4.59/2.20 || *EQ(s(%X), s(%Y)) -> EQ(%X, %Y) 4.59/2.20 || The graph contains the following edges 1 > 1, 2 > 2 4.59/2.20 || 4.59/2.20 || 4.59/2.20 || ---------------------------------------- 4.59/2.20 || 4.59/2.20 || (36) 4.59/2.20 || YES 4.59/2.20 || 4.59/2.20 || ---------------------------------------- 4.59/2.20 || 4.59/2.20 || (37) 4.59/2.20 || Obligation: 4.59/2.20 || Q DP problem: 4.59/2.20 || The TRS P consists of the following rules: 4.59/2.20 || 4.59/2.20 || RM(%X, add(%Y, %Z)) -> IF!FAC6220RM(eq(%X, %Y), %X, add(%Y, %Z)) 4.59/2.20 || IF!FAC6220RM(true, %X, add(%Y, %Z)) -> RM(%X, %Z) 4.59/2.20 || IF!FAC6220RM(false, %X, add(%Y, %Z)) -> RM(%X, %Z) 4.59/2.20 || 4.59/2.20 || The TRS R consists of the following rules: 4.59/2.20 || 4.59/2.20 || eq(0, 0) -> true 4.59/2.20 || eq(0, s(%X)) -> false 4.59/2.20 || eq(s(%X), 0) -> false 4.59/2.20 || eq(s(%X), s(%Y)) -> eq(%X, %Y) 4.59/2.20 || le(0, %X) -> true 4.59/2.20 || le(s(%X), 0) -> false 4.59/2.20 || le(s(%X), s(%Y)) -> le(%X, %Y) 4.59/2.20 || app(nil, %X) -> %X 4.59/2.20 || app(add(%X, %Y), %Z) -> add(%X, app(%Y, %Z)) 4.59/2.20 || min(add(%X, nil)) -> %X 4.59/2.20 || min(add(%X, add(%Y, %Z))) -> if!fac6220min(le(%X, %Y), add(%X, add(%Y, %Z))) 4.59/2.20 || if!fac6220min(true, add(%X, add(%Y, %Z))) -> min(add(%X, %Z)) 4.59/2.20 || if!fac6220min(false, add(%X, add(%Y, %Z))) -> min(add(%Y, %Z)) 4.59/2.20 || rm(%X, nil) -> nil 4.59/2.20 || rm(%X, add(%Y, %Z)) -> if!fac6220rm(eq(%X, %Y), %X, add(%Y, %Z)) 4.59/2.20 || if!fac6220rm(true, %X, add(%Y, %Z)) -> rm(%X, %Z) 4.59/2.20 || if!fac6220rm(false, %X, add(%Y, %Z)) -> add(%Y, rm(%X, %Z)) 4.59/2.20 || minsort(nil, nil) -> nil 4.59/2.20 || minsort(add(%X, %Y), %Z) -> if!fac6220minsort(eq(%X, min(add(%X, %Y))), add(%X, %Y), %Z) 4.59/2.20 || if!fac6220minsort(true, add(%X, %Y), %Z) -> add(%X, minsort(app(rm(%X, %Y), %Z), nil)) 4.59/2.20 || if!fac6220minsort(false, add(%X, %Y), %Z) -> minsort(%Y, add(%X, %Z)) 4.59/2.20 || 4.59/2.20 || The set Q consists of the following terms: 4.59/2.20 || 4.59/2.20 || eq(0, 0) 4.59/2.20 || eq(0, s(x0)) 4.59/2.20 || eq(s(x0), 0) 4.59/2.20 || eq(s(x0), s(x1)) 4.59/2.20 || le(0, x0) 4.59/2.20 || le(s(x0), 0) 4.59/2.20 || le(s(x0), s(x1)) 4.59/2.20 || app(nil, x0) 4.59/2.20 || app(add(x0, x1), x2) 4.59/2.20 || min(add(x0, nil)) 4.59/2.20 || min(add(x0, add(x1, x2))) 4.59/2.20 || if!fac6220min(true, add(x0, add(x1, x2))) 4.59/2.20 || if!fac6220min(false, add(x0, add(x1, x2))) 4.59/2.20 || rm(x0, nil) 4.59/2.20 || rm(x0, add(x1, x2)) 4.59/2.20 || if!fac6220rm(true, x0, add(x1, x2)) 4.59/2.20 || if!fac6220rm(false, x0, add(x1, x2)) 4.59/2.20 || minsort(nil, nil) 4.59/2.20 || minsort(add(x0, x1), x2) 4.59/2.20 || if!fac6220minsort(true, add(x0, x1), x2) 4.59/2.20 || if!fac6220minsort(false, add(x0, x1), x2) 4.59/2.20 || 4.59/2.20 || We have to consider all minimal (P,Q,R)-chains. 4.59/2.20 || ---------------------------------------- 4.59/2.20 || 4.59/2.20 || (38) UsableRulesProof (EQUIVALENT) 4.59/2.20 || As all Q-normal forms are R-normal forms we are in the innermost case. Hence, by the usable rules processor [LPAR04] we can delete all non-usable rules [FROCOS05] from R. 4.59/2.20 || ---------------------------------------- 4.59/2.20 || 4.59/2.20 || (39) 4.59/2.20 || Obligation: 4.59/2.20 || Q DP problem: 4.59/2.20 || The TRS P consists of the following rules: 4.59/2.20 || 4.59/2.20 || RM(%X, add(%Y, %Z)) -> IF!FAC6220RM(eq(%X, %Y), %X, add(%Y, %Z)) 4.59/2.20 || IF!FAC6220RM(true, %X, add(%Y, %Z)) -> RM(%X, %Z) 4.59/2.20 || IF!FAC6220RM(false, %X, add(%Y, %Z)) -> RM(%X, %Z) 4.59/2.20 || 4.59/2.20 || The TRS R consists of the following rules: 4.59/2.20 || 4.59/2.20 || eq(0, 0) -> true 4.59/2.20 || eq(0, s(%X)) -> false 4.59/2.20 || eq(s(%X), 0) -> false 4.59/2.20 || eq(s(%X), s(%Y)) -> eq(%X, %Y) 4.59/2.20 || 4.59/2.20 || The set Q consists of the following terms: 4.59/2.20 || 4.59/2.20 || eq(0, 0) 4.59/2.20 || eq(0, s(x0)) 4.59/2.20 || eq(s(x0), 0) 4.59/2.20 || eq(s(x0), s(x1)) 4.59/2.20 || le(0, x0) 4.59/2.20 || le(s(x0), 0) 4.59/2.20 || le(s(x0), s(x1)) 4.59/2.20 || app(nil, x0) 4.59/2.20 || app(add(x0, x1), x2) 4.59/2.20 || min(add(x0, nil)) 4.59/2.20 || min(add(x0, add(x1, x2))) 4.59/2.20 || if!fac6220min(true, add(x0, add(x1, x2))) 4.59/2.20 || if!fac6220min(false, add(x0, add(x1, x2))) 4.59/2.20 || rm(x0, nil) 4.59/2.20 || rm(x0, add(x1, x2)) 4.59/2.20 || if!fac6220rm(true, x0, add(x1, x2)) 4.59/2.20 || if!fac6220rm(false, x0, add(x1, x2)) 4.59/2.20 || minsort(nil, nil) 4.59/2.20 || minsort(add(x0, x1), x2) 4.59/2.20 || if!fac6220minsort(true, add(x0, x1), x2) 4.59/2.20 || if!fac6220minsort(false, add(x0, x1), x2) 4.59/2.20 || 4.59/2.20 || We have to consider all minimal (P,Q,R)-chains. 4.59/2.20 || ---------------------------------------- 4.59/2.20 || 4.59/2.20 || (40) QReductionProof (EQUIVALENT) 4.59/2.20 || We deleted the following terms from Q as each root-symbol of these terms does neither occur in P nor in R.[THIEMANN]. 4.59/2.20 || 4.59/2.20 || le(0, x0) 4.59/2.20 || le(s(x0), 0) 4.59/2.20 || le(s(x0), s(x1)) 4.59/2.20 || app(nil, x0) 4.59/2.20 || app(add(x0, x1), x2) 4.59/2.20 || min(add(x0, nil)) 4.59/2.20 || min(add(x0, add(x1, x2))) 4.59/2.20 || if!fac6220min(true, add(x0, add(x1, x2))) 4.59/2.20 || if!fac6220min(false, add(x0, add(x1, x2))) 4.59/2.20 || rm(x0, nil) 4.59/2.20 || rm(x0, add(x1, x2)) 4.59/2.20 || if!fac6220rm(true, x0, add(x1, x2)) 4.59/2.20 || if!fac6220rm(false, x0, add(x1, x2)) 4.59/2.20 || minsort(nil, nil) 4.59/2.20 || minsort(add(x0, x1), x2) 4.59/2.20 || if!fac6220minsort(true, add(x0, x1), x2) 4.59/2.20 || if!fac6220minsort(false, add(x0, x1), x2) 4.59/2.20 || 4.59/2.20 || 4.59/2.20 || ---------------------------------------- 4.59/2.20 || 4.59/2.20 || (41) 4.59/2.20 || Obligation: 4.59/2.20 || Q DP problem: 4.59/2.20 || The TRS P consists of the following rules: 4.59/2.20 || 4.59/2.20 || RM(%X, add(%Y, %Z)) -> IF!FAC6220RM(eq(%X, %Y), %X, add(%Y, %Z)) 4.59/2.20 || IF!FAC6220RM(true, %X, add(%Y, %Z)) -> RM(%X, %Z) 4.59/2.20 || IF!FAC6220RM(false, %X, add(%Y, %Z)) -> RM(%X, %Z) 4.59/2.20 || 4.59/2.20 || The TRS R consists of the following rules: 4.59/2.20 || 4.59/2.20 || eq(0, 0) -> true 4.59/2.20 || eq(0, s(%X)) -> false 4.59/2.20 || eq(s(%X), 0) -> false 4.59/2.20 || eq(s(%X), s(%Y)) -> eq(%X, %Y) 4.59/2.20 || 4.59/2.20 || The set Q consists of the following terms: 4.59/2.20 || 4.59/2.20 || eq(0, 0) 4.59/2.20 || eq(0, s(x0)) 4.59/2.20 || eq(s(x0), 0) 4.59/2.20 || eq(s(x0), s(x1)) 4.59/2.20 || 4.59/2.20 || We have to consider all minimal (P,Q,R)-chains. 4.59/2.20 || ---------------------------------------- 4.59/2.20 || 4.59/2.20 || (42) QDPSizeChangeProof (EQUIVALENT) 4.59/2.20 || By using the subterm criterion [SUBTERM_CRITERION] together with the size-change analysis [AAECC05] we have proven that there are no infinite chains for this DP problem. 4.59/2.20 || 4.59/2.20 || From the DPs we obtained the following set of size-change graphs: 4.59/2.20 || *RM(%X, add(%Y, %Z)) -> IF!FAC6220RM(eq(%X, %Y), %X, add(%Y, %Z)) 4.59/2.20 || The graph contains the following edges 1 >= 2, 2 >= 3 4.59/2.20 || 4.59/2.20 || 4.59/2.20 || *IF!FAC6220RM(true, %X, add(%Y, %Z)) -> RM(%X, %Z) 4.59/2.20 || The graph contains the following edges 2 >= 1, 3 > 2 4.59/2.20 || 4.59/2.20 || 4.59/2.20 || *IF!FAC6220RM(false, %X, add(%Y, %Z)) -> RM(%X, %Z) 4.59/2.20 || The graph contains the following edges 2 >= 1, 3 > 2 4.59/2.20 || 4.59/2.20 || 4.59/2.20 || ---------------------------------------- 4.59/2.20 || 4.59/2.20 || (43) 4.59/2.20 || YES 4.59/2.20 || 4.59/2.20 || ---------------------------------------- 4.59/2.20 || 4.59/2.20 || (44) 4.59/2.20 || Obligation: 4.59/2.20 || Q DP problem: 4.59/2.20 || The TRS P consists of the following rules: 4.59/2.20 || 4.59/2.20 || IF!FAC6220MINSORT(true, add(%X, %Y), %Z) -> MINSORT(app(rm(%X, %Y), %Z), nil) 4.59/2.20 || MINSORT(add(%X, %Y), %Z) -> IF!FAC6220MINSORT(eq(%X, min(add(%X, %Y))), add(%X, %Y), %Z) 4.59/2.20 || IF!FAC6220MINSORT(false, add(%X, %Y), %Z) -> MINSORT(%Y, add(%X, %Z)) 4.59/2.20 || 4.59/2.20 || The TRS R consists of the following rules: 4.59/2.20 || 4.59/2.20 || eq(0, 0) -> true 4.59/2.20 || eq(0, s(%X)) -> false 4.59/2.20 || eq(s(%X), 0) -> false 4.59/2.20 || eq(s(%X), s(%Y)) -> eq(%X, %Y) 4.59/2.20 || le(0, %X) -> true 4.59/2.20 || le(s(%X), 0) -> false 4.59/2.20 || le(s(%X), s(%Y)) -> le(%X, %Y) 4.59/2.20 || app(nil, %X) -> %X 4.59/2.20 || app(add(%X, %Y), %Z) -> add(%X, app(%Y, %Z)) 4.59/2.20 || min(add(%X, nil)) -> %X 4.59/2.20 || min(add(%X, add(%Y, %Z))) -> if!fac6220min(le(%X, %Y), add(%X, add(%Y, %Z))) 4.59/2.20 || if!fac6220min(true, add(%X, add(%Y, %Z))) -> min(add(%X, %Z)) 4.59/2.20 || if!fac6220min(false, add(%X, add(%Y, %Z))) -> min(add(%Y, %Z)) 4.59/2.20 || rm(%X, nil) -> nil 4.59/2.20 || rm(%X, add(%Y, %Z)) -> if!fac6220rm(eq(%X, %Y), %X, add(%Y, %Z)) 4.59/2.20 || if!fac6220rm(true, %X, add(%Y, %Z)) -> rm(%X, %Z) 4.59/2.20 || if!fac6220rm(false, %X, add(%Y, %Z)) -> add(%Y, rm(%X, %Z)) 4.59/2.20 || minsort(nil, nil) -> nil 4.59/2.20 || minsort(add(%X, %Y), %Z) -> if!fac6220minsort(eq(%X, min(add(%X, %Y))), add(%X, %Y), %Z) 4.59/2.20 || if!fac6220minsort(true, add(%X, %Y), %Z) -> add(%X, minsort(app(rm(%X, %Y), %Z), nil)) 4.59/2.20 || if!fac6220minsort(false, add(%X, %Y), %Z) -> minsort(%Y, add(%X, %Z)) 4.59/2.20 || 4.59/2.20 || The set Q consists of the following terms: 4.59/2.20 || 4.59/2.20 || eq(0, 0) 4.59/2.20 || eq(0, s(x0)) 4.59/2.20 || eq(s(x0), 0) 4.59/2.20 || eq(s(x0), s(x1)) 4.59/2.20 || le(0, x0) 4.59/2.20 || le(s(x0), 0) 4.59/2.20 || le(s(x0), s(x1)) 4.59/2.20 || app(nil, x0) 4.59/2.20 || app(add(x0, x1), x2) 4.59/2.20 || min(add(x0, nil)) 4.59/2.20 || min(add(x0, add(x1, x2))) 4.59/2.20 || if!fac6220min(true, add(x0, add(x1, x2))) 4.59/2.20 || if!fac6220min(false, add(x0, add(x1, x2))) 4.59/2.20 || rm(x0, nil) 4.59/2.20 || rm(x0, add(x1, x2)) 4.59/2.20 || if!fac6220rm(true, x0, add(x1, x2)) 4.59/2.20 || if!fac6220rm(false, x0, add(x1, x2)) 4.59/2.20 || minsort(nil, nil) 4.59/2.20 || minsort(add(x0, x1), x2) 4.59/2.20 || if!fac6220minsort(true, add(x0, x1), x2) 4.59/2.20 || if!fac6220minsort(false, add(x0, x1), x2) 4.59/2.20 || 4.59/2.20 || We have to consider all minimal (P,Q,R)-chains. 4.59/2.20 || ---------------------------------------- 4.59/2.20 || 4.59/2.20 || (45) UsableRulesProof (EQUIVALENT) 4.59/2.20 || As all Q-normal forms are R-normal forms we are in the innermost case. Hence, by the usable rules processor [LPAR04] we can delete all non-usable rules [FROCOS05] from R. 4.59/2.20 || ---------------------------------------- 4.59/2.20 || 4.59/2.20 || (46) 4.59/2.20 || Obligation: 4.59/2.20 || Q DP problem: 4.59/2.20 || The TRS P consists of the following rules: 4.59/2.20 || 4.59/2.20 || IF!FAC6220MINSORT(true, add(%X, %Y), %Z) -> MINSORT(app(rm(%X, %Y), %Z), nil) 4.59/2.20 || MINSORT(add(%X, %Y), %Z) -> IF!FAC6220MINSORT(eq(%X, min(add(%X, %Y))), add(%X, %Y), %Z) 4.59/2.20 || IF!FAC6220MINSORT(false, add(%X, %Y), %Z) -> MINSORT(%Y, add(%X, %Z)) 4.59/2.20 || 4.59/2.20 || The TRS R consists of the following rules: 4.59/2.20 || 4.59/2.20 || min(add(%X, nil)) -> %X 4.59/2.20 || min(add(%X, add(%Y, %Z))) -> if!fac6220min(le(%X, %Y), add(%X, add(%Y, %Z))) 4.59/2.20 || if!fac6220min(true, add(%X, add(%Y, %Z))) -> min(add(%X, %Z)) 4.59/2.20 || if!fac6220min(false, add(%X, add(%Y, %Z))) -> min(add(%Y, %Z)) 4.59/2.20 || eq(0, 0) -> true 4.59/2.20 || eq(0, s(%X)) -> false 4.59/2.20 || eq(s(%X), 0) -> false 4.59/2.20 || eq(s(%X), s(%Y)) -> eq(%X, %Y) 4.59/2.20 || le(0, %X) -> true 4.59/2.20 || le(s(%X), 0) -> false 4.59/2.20 || le(s(%X), s(%Y)) -> le(%X, %Y) 4.59/2.20 || rm(%X, nil) -> nil 4.59/2.20 || rm(%X, add(%Y, %Z)) -> if!fac6220rm(eq(%X, %Y), %X, add(%Y, %Z)) 4.59/2.20 || if!fac6220rm(true, %X, add(%Y, %Z)) -> rm(%X, %Z) 4.59/2.20 || app(nil, %X) -> %X 4.59/2.20 || app(add(%X, %Y), %Z) -> add(%X, app(%Y, %Z)) 4.59/2.20 || if!fac6220rm(false, %X, add(%Y, %Z)) -> add(%Y, rm(%X, %Z)) 4.59/2.20 || 4.59/2.20 || The set Q consists of the following terms: 4.59/2.20 || 4.59/2.20 || eq(0, 0) 4.59/2.20 || eq(0, s(x0)) 4.59/2.20 || eq(s(x0), 0) 4.59/2.20 || eq(s(x0), s(x1)) 4.59/2.20 || le(0, x0) 4.59/2.20 || le(s(x0), 0) 4.59/2.20 || le(s(x0), s(x1)) 4.59/2.20 || app(nil, x0) 4.59/2.20 || app(add(x0, x1), x2) 4.59/2.20 || min(add(x0, nil)) 4.59/2.20 || min(add(x0, add(x1, x2))) 4.59/2.20 || if!fac6220min(true, add(x0, add(x1, x2))) 4.59/2.20 || if!fac6220min(false, add(x0, add(x1, x2))) 4.59/2.20 || rm(x0, nil) 4.59/2.20 || rm(x0, add(x1, x2)) 4.59/2.20 || if!fac6220rm(true, x0, add(x1, x2)) 4.59/2.20 || if!fac6220rm(false, x0, add(x1, x2)) 4.59/2.20 || minsort(nil, nil) 4.59/2.20 || minsort(add(x0, x1), x2) 4.59/2.20 || if!fac6220minsort(true, add(x0, x1), x2) 4.59/2.20 || if!fac6220minsort(false, add(x0, x1), x2) 4.59/2.20 || 4.59/2.20 || We have to consider all minimal (P,Q,R)-chains. 4.59/2.20 || ---------------------------------------- 4.59/2.20 || 4.59/2.20 || (47) QReductionProof (EQUIVALENT) 4.59/2.20 || We deleted the following terms from Q as each root-symbol of these terms does neither occur in P nor in R.[THIEMANN]. 4.59/2.20 || 4.59/2.20 || minsort(nil, nil) 4.59/2.20 || minsort(add(x0, x1), x2) 4.59/2.20 || if!fac6220minsort(true, add(x0, x1), x2) 4.59/2.20 || if!fac6220minsort(false, add(x0, x1), x2) 4.59/2.20 || 4.59/2.20 || 4.59/2.20 || ---------------------------------------- 4.59/2.20 || 4.59/2.20 || (48) 4.59/2.20 || Obligation: 4.59/2.20 || Q DP problem: 4.59/2.20 || The TRS P consists of the following rules: 4.59/2.20 || 4.59/2.20 || IF!FAC6220MINSORT(true, add(%X, %Y), %Z) -> MINSORT(app(rm(%X, %Y), %Z), nil) 4.59/2.20 || MINSORT(add(%X, %Y), %Z) -> IF!FAC6220MINSORT(eq(%X, min(add(%X, %Y))), add(%X, %Y), %Z) 4.59/2.20 || IF!FAC6220MINSORT(false, add(%X, %Y), %Z) -> MINSORT(%Y, add(%X, %Z)) 4.59/2.20 || 4.59/2.20 || The TRS R consists of the following rules: 4.59/2.20 || 4.59/2.20 || min(add(%X, nil)) -> %X 4.59/2.20 || min(add(%X, add(%Y, %Z))) -> if!fac6220min(le(%X, %Y), add(%X, add(%Y, %Z))) 4.59/2.20 || if!fac6220min(true, add(%X, add(%Y, %Z))) -> min(add(%X, %Z)) 4.59/2.20 || if!fac6220min(false, add(%X, add(%Y, %Z))) -> min(add(%Y, %Z)) 4.59/2.20 || eq(0, 0) -> true 4.59/2.20 || eq(0, s(%X)) -> false 4.59/2.20 || eq(s(%X), 0) -> false 4.59/2.20 || eq(s(%X), s(%Y)) -> eq(%X, %Y) 4.59/2.20 || le(0, %X) -> true 4.59/2.20 || le(s(%X), 0) -> false 4.59/2.20 || le(s(%X), s(%Y)) -> le(%X, %Y) 4.59/2.20 || rm(%X, nil) -> nil 4.59/2.20 || rm(%X, add(%Y, %Z)) -> if!fac6220rm(eq(%X, %Y), %X, add(%Y, %Z)) 4.59/2.20 || if!fac6220rm(true, %X, add(%Y, %Z)) -> rm(%X, %Z) 4.59/2.20 || app(nil, %X) -> %X 4.59/2.20 || app(add(%X, %Y), %Z) -> add(%X, app(%Y, %Z)) 4.59/2.20 || if!fac6220rm(false, %X, add(%Y, %Z)) -> add(%Y, rm(%X, %Z)) 4.59/2.20 || 4.59/2.20 || The set Q consists of the following terms: 4.59/2.20 || 4.59/2.20 || eq(0, 0) 4.59/2.20 || eq(0, s(x0)) 4.59/2.20 || eq(s(x0), 0) 4.59/2.20 || eq(s(x0), s(x1)) 4.59/2.20 || le(0, x0) 4.59/2.20 || le(s(x0), 0) 4.59/2.20 || le(s(x0), s(x1)) 4.59/2.20 || app(nil, x0) 4.59/2.20 || app(add(x0, x1), x2) 4.59/2.20 || min(add(x0, nil)) 4.59/2.20 || min(add(x0, add(x1, x2))) 4.59/2.20 || if!fac6220min(true, add(x0, add(x1, x2))) 4.59/2.20 || if!fac6220min(false, add(x0, add(x1, x2))) 4.59/2.20 || rm(x0, nil) 4.59/2.20 || rm(x0, add(x1, x2)) 4.59/2.20 || if!fac6220rm(true, x0, add(x1, x2)) 4.59/2.20 || if!fac6220rm(false, x0, add(x1, x2)) 4.59/2.20 || 4.59/2.20 || We have to consider all minimal (P,Q,R)-chains. 4.59/2.20 || ---------------------------------------- 4.59/2.20 || 4.59/2.20 || (49) QDPOrderProof (EQUIVALENT) 4.59/2.20 || We use the reduction pair processor [LPAR04,JAR06]. 4.59/2.20 || 4.59/2.20 || 4.59/2.20 || The following pairs can be oriented strictly and are deleted. 4.59/2.20 || 4.59/2.20 || IF!FAC6220MINSORT(true, add(%X, %Y), %Z) -> MINSORT(app(rm(%X, %Y), %Z), nil) 4.59/2.20 || The remaining pairs can at least be oriented weakly. 4.59/2.20 || Used ordering: Polynomial Order [NEGPOLO,POLO] with Interpretation: 4.59/2.20 || 4.59/2.20 || POL( MINSORT_2(x_1, x_2) ) = max{0, 2x_1 + 2x_2 - 1} 4.59/2.20 || POL( app_2(x_1, x_2) ) = x_1 + x_2 4.59/2.20 || POL( rm_2(x_1, x_2) ) = x_2 4.59/2.20 || POL( nil ) = 0 4.59/2.20 || POL( add_2(x_1, x_2) ) = x_1 + x_2 + 1 4.59/2.20 || POL( if!fac6220rm_3(x_1, ..., x_3) ) = x_3 4.59/2.20 || POL( eq_2(x_1, x_2) ) = max{0, x_2 - 2} 4.59/2.20 || POL( true ) = 0 4.59/2.20 || POL( IF!FAC6220MINSORT_3(x_1, ..., x_3) ) = max{0, 2x_2 + 2x_3 - 1} 4.59/2.20 || POL( min_1(x_1) ) = max{0, -1} 4.59/2.20 || POL( if!fac6220min_2(x_1, x_2) ) = 2x_1 + 2 4.59/2.20 || POL( le_2(x_1, x_2) ) = 1 4.59/2.20 || POL( false ) = 0 4.59/2.20 || POL( 0 ) = 0 4.59/2.20 || POL( s_1(x_1) ) = x_1 4.59/2.20 || 4.59/2.20 || The following usable rules [FROCOS05] with respect to the argument filtering of the ordering [JAR06] were oriented: 4.59/2.20 || 4.59/2.20 || rm(%X, nil) -> nil 4.59/2.20 || rm(%X, add(%Y, %Z)) -> if!fac6220rm(eq(%X, %Y), %X, add(%Y, %Z)) 4.59/2.20 || if!fac6220rm(true, %X, add(%Y, %Z)) -> rm(%X, %Z) 4.59/2.20 || app(nil, %X) -> %X 4.59/2.20 || app(add(%X, %Y), %Z) -> add(%X, app(%Y, %Z)) 4.59/2.20 || if!fac6220rm(false, %X, add(%Y, %Z)) -> add(%Y, rm(%X, %Z)) 4.59/2.20 || 4.59/2.20 || 4.59/2.20 || ---------------------------------------- 4.59/2.20 || 4.59/2.20 || (50) 4.59/2.20 || Obligation: 4.59/2.20 || Q DP problem: 4.59/2.20 || The TRS P consists of the following rules: 4.59/2.20 || 4.59/2.20 || MINSORT(add(%X, %Y), %Z) -> IF!FAC6220MINSORT(eq(%X, min(add(%X, %Y))), add(%X, %Y), %Z) 4.59/2.20 || IF!FAC6220MINSORT(false, add(%X, %Y), %Z) -> MINSORT(%Y, add(%X, %Z)) 4.59/2.20 || 4.59/2.20 || The TRS R consists of the following rules: 4.59/2.20 || 4.59/2.20 || min(add(%X, nil)) -> %X 4.59/2.20 || min(add(%X, add(%Y, %Z))) -> if!fac6220min(le(%X, %Y), add(%X, add(%Y, %Z))) 4.59/2.20 || if!fac6220min(true, add(%X, add(%Y, %Z))) -> min(add(%X, %Z)) 4.59/2.20 || if!fac6220min(false, add(%X, add(%Y, %Z))) -> min(add(%Y, %Z)) 4.59/2.20 || eq(0, 0) -> true 4.59/2.20 || eq(0, s(%X)) -> false 4.59/2.20 || eq(s(%X), 0) -> false 4.59/2.20 || eq(s(%X), s(%Y)) -> eq(%X, %Y) 4.59/2.20 || le(0, %X) -> true 4.59/2.20 || le(s(%X), 0) -> false 4.59/2.20 || le(s(%X), s(%Y)) -> le(%X, %Y) 4.59/2.20 || rm(%X, nil) -> nil 4.59/2.20 || rm(%X, add(%Y, %Z)) -> if!fac6220rm(eq(%X, %Y), %X, add(%Y, %Z)) 4.59/2.20 || if!fac6220rm(true, %X, add(%Y, %Z)) -> rm(%X, %Z) 4.59/2.20 || app(nil, %X) -> %X 4.59/2.20 || app(add(%X, %Y), %Z) -> add(%X, app(%Y, %Z)) 4.59/2.20 || if!fac6220rm(false, %X, add(%Y, %Z)) -> add(%Y, rm(%X, %Z)) 4.59/2.20 || 4.59/2.20 || The set Q consists of the following terms: 4.59/2.20 || 4.59/2.20 || eq(0, 0) 4.59/2.20 || eq(0, s(x0)) 4.59/2.20 || eq(s(x0), 0) 4.59/2.20 || eq(s(x0), s(x1)) 4.59/2.20 || le(0, x0) 4.59/2.20 || le(s(x0), 0) 4.59/2.20 || le(s(x0), s(x1)) 4.59/2.20 || app(nil, x0) 4.59/2.20 || app(add(x0, x1), x2) 4.59/2.20 || min(add(x0, nil)) 4.59/2.20 || min(add(x0, add(x1, x2))) 4.59/2.20 || if!fac6220min(true, add(x0, add(x1, x2))) 4.59/2.20 || if!fac6220min(false, add(x0, add(x1, x2))) 4.59/2.20 || rm(x0, nil) 4.59/2.20 || rm(x0, add(x1, x2)) 4.59/2.20 || if!fac6220rm(true, x0, add(x1, x2)) 4.59/2.20 || if!fac6220rm(false, x0, add(x1, x2)) 4.59/2.20 || 4.59/2.20 || We have to consider all minimal (P,Q,R)-chains. 4.59/2.20 || ---------------------------------------- 4.59/2.20 || 4.59/2.20 || (51) UsableRulesProof (EQUIVALENT) 4.59/2.20 || As all Q-normal forms are R-normal forms we are in the innermost case. Hence, by the usable rules processor [LPAR04] we can delete all non-usable rules [FROCOS05] from R. 4.59/2.20 || ---------------------------------------- 4.59/2.20 || 4.59/2.20 || (52) 4.59/2.20 || Obligation: 4.59/2.20 || Q DP problem: 4.59/2.20 || The TRS P consists of the following rules: 4.59/2.20 || 4.59/2.20 || MINSORT(add(%X, %Y), %Z) -> IF!FAC6220MINSORT(eq(%X, min(add(%X, %Y))), add(%X, %Y), %Z) 4.59/2.20 || IF!FAC6220MINSORT(false, add(%X, %Y), %Z) -> MINSORT(%Y, add(%X, %Z)) 4.59/2.20 || 4.59/2.20 || The TRS R consists of the following rules: 4.59/2.20 || 4.59/2.20 || min(add(%X, nil)) -> %X 4.59/2.20 || min(add(%X, add(%Y, %Z))) -> if!fac6220min(le(%X, %Y), add(%X, add(%Y, %Z))) 4.59/2.20 || if!fac6220min(true, add(%X, add(%Y, %Z))) -> min(add(%X, %Z)) 4.59/2.20 || if!fac6220min(false, add(%X, add(%Y, %Z))) -> min(add(%Y, %Z)) 4.59/2.20 || eq(0, 0) -> true 4.59/2.20 || eq(0, s(%X)) -> false 4.59/2.20 || eq(s(%X), 0) -> false 4.59/2.20 || eq(s(%X), s(%Y)) -> eq(%X, %Y) 4.59/2.20 || le(0, %X) -> true 4.59/2.20 || le(s(%X), 0) -> false 4.59/2.20 || le(s(%X), s(%Y)) -> le(%X, %Y) 4.59/2.20 || 4.59/2.20 || The set Q consists of the following terms: 4.59/2.20 || 4.59/2.20 || eq(0, 0) 4.59/2.20 || eq(0, s(x0)) 4.59/2.20 || eq(s(x0), 0) 4.59/2.20 || eq(s(x0), s(x1)) 4.59/2.20 || le(0, x0) 4.59/2.20 || le(s(x0), 0) 4.59/2.20 || le(s(x0), s(x1)) 4.59/2.20 || app(nil, x0) 4.59/2.20 || app(add(x0, x1), x2) 4.59/2.20 || min(add(x0, nil)) 4.59/2.20 || min(add(x0, add(x1, x2))) 4.59/2.20 || if!fac6220min(true, add(x0, add(x1, x2))) 4.59/2.20 || if!fac6220min(false, add(x0, add(x1, x2))) 4.59/2.20 || rm(x0, nil) 4.59/2.20 || rm(x0, add(x1, x2)) 4.59/2.20 || if!fac6220rm(true, x0, add(x1, x2)) 4.59/2.20 || if!fac6220rm(false, x0, add(x1, x2)) 4.59/2.20 || 4.59/2.20 || We have to consider all minimal (P,Q,R)-chains. 4.59/2.20 || ---------------------------------------- 4.59/2.20 || 4.59/2.20 || (53) QReductionProof (EQUIVALENT) 4.59/2.20 || We deleted the following terms from Q as each root-symbol of these terms does neither occur in P nor in R.[THIEMANN]. 4.59/2.20 || 4.59/2.20 || app(nil, x0) 4.59/2.20 || app(add(x0, x1), x2) 4.59/2.20 || rm(x0, nil) 4.59/2.20 || rm(x0, add(x1, x2)) 4.59/2.20 || if!fac6220rm(true, x0, add(x1, x2)) 4.59/2.20 || if!fac6220rm(false, x0, add(x1, x2)) 4.59/2.20 || 4.59/2.20 || 4.59/2.20 || ---------------------------------------- 4.59/2.20 || 4.59/2.20 || (54) 4.59/2.20 || Obligation: 4.59/2.20 || Q DP problem: 4.59/2.20 || The TRS P consists of the following rules: 4.59/2.20 || 4.59/2.20 || MINSORT(add(%X, %Y), %Z) -> IF!FAC6220MINSORT(eq(%X, min(add(%X, %Y))), add(%X, %Y), %Z) 4.59/2.20 || IF!FAC6220MINSORT(false, add(%X, %Y), %Z) -> MINSORT(%Y, add(%X, %Z)) 4.59/2.20 || 4.59/2.20 || The TRS R consists of the following rules: 4.59/2.20 || 4.59/2.20 || min(add(%X, nil)) -> %X 4.59/2.20 || min(add(%X, add(%Y, %Z))) -> if!fac6220min(le(%X, %Y), add(%X, add(%Y, %Z))) 4.59/2.20 || if!fac6220min(true, add(%X, add(%Y, %Z))) -> min(add(%X, %Z)) 4.59/2.20 || if!fac6220min(false, add(%X, add(%Y, %Z))) -> min(add(%Y, %Z)) 4.59/2.20 || eq(0, 0) -> true 4.59/2.20 || eq(0, s(%X)) -> false 4.59/2.20 || eq(s(%X), 0) -> false 4.59/2.20 || eq(s(%X), s(%Y)) -> eq(%X, %Y) 4.59/2.20 || le(0, %X) -> true 4.59/2.20 || le(s(%X), 0) -> false 4.59/2.20 || le(s(%X), s(%Y)) -> le(%X, %Y) 4.59/2.20 || 4.59/2.20 || The set Q consists of the following terms: 4.59/2.20 || 4.59/2.20 || eq(0, 0) 4.59/2.20 || eq(0, s(x0)) 4.59/2.20 || eq(s(x0), 0) 4.59/2.20 || eq(s(x0), s(x1)) 4.59/2.20 || le(0, x0) 4.59/2.20 || le(s(x0), 0) 4.59/2.20 || le(s(x0), s(x1)) 4.59/2.20 || min(add(x0, nil)) 4.59/2.20 || min(add(x0, add(x1, x2))) 4.59/2.20 || if!fac6220min(true, add(x0, add(x1, x2))) 4.59/2.20 || if!fac6220min(false, add(x0, add(x1, x2))) 4.59/2.20 || 4.59/2.20 || We have to consider all minimal (P,Q,R)-chains. 4.59/2.20 || ---------------------------------------- 4.59/2.20 || 4.59/2.20 || (55) QDPSizeChangeProof (EQUIVALENT) 4.59/2.20 || By using the subterm criterion [SUBTERM_CRITERION] together with the size-change analysis [AAECC05] we have proven that there are no infinite chains for this DP problem. 4.59/2.20 || 4.59/2.20 || From the DPs we obtained the following set of size-change graphs: 4.59/2.20 || *IF!FAC6220MINSORT(false, add(%X, %Y), %Z) -> MINSORT(%Y, add(%X, %Z)) 4.59/2.20 || The graph contains the following edges 2 > 1 4.59/2.20 || 4.59/2.20 || 4.59/2.20 || *MINSORT(add(%X, %Y), %Z) -> IF!FAC6220MINSORT(eq(%X, min(add(%X, %Y))), add(%X, %Y), %Z) 4.59/2.20 || The graph contains the following edges 1 >= 2, 2 >= 3 4.59/2.20 || 4.59/2.20 || 4.59/2.20 || ---------------------------------------- 4.59/2.20 || 4.59/2.20 || (56) 4.59/2.20 || YES 4.59/2.20 || 4.59/2.20 We use the dependency pair framework as described in [Kop12, Ch. 6/7], with static dependency pairs (see [KusIsoSakBla09] and the adaptation for AFSMs and accessible arguments in [Kop13]). 4.59/2.20 4.59/2.20 We thus obtain the following dependency pair problem (P_0, R_0, static, formative): 4.59/2.20 4.59/2.20 Dependency Pairs P_0: 4.59/2.20 4.59/2.20 0] map#(F, add(X, Y)) =#> map#(F, Y) 4.59/2.20 1] filter#(F, add(X, Y)) =#> filter2#(F X, F, X, Y) 4.59/2.20 2] filter2#(true, F, X, Y) =#> filter#(F, Y) 4.59/2.20 3] filter2#(false, F, X, Y) =#> filter#(F, Y) 4.59/2.20 4.59/2.20 Rules R_0: 4.59/2.20 4.59/2.20 eq(0, 0) => true 4.59/2.20 eq(0, s(X)) => false 4.59/2.20 eq(s(X), 0) => false 4.59/2.20 eq(s(X), s(Y)) => eq(X, Y) 4.59/2.20 le(0, X) => true 4.59/2.20 le(s(X), 0) => false 4.59/2.20 le(s(X), s(Y)) => le(X, Y) 4.59/2.20 app(nil, X) => X 4.59/2.20 app(add(X, Y), Z) => add(X, app(Y, Z)) 4.59/2.20 min(add(X, nil)) => X 4.59/2.20 min(add(X, add(Y, Z))) => if!fac6220min(le(X, Y), add(X, add(Y, Z))) 4.59/2.20 if!fac6220min(true, add(X, add(Y, Z))) => min(add(X, Z)) 4.59/2.20 if!fac6220min(false, add(X, add(Y, Z))) => min(add(Y, Z)) 4.59/2.20 rm(X, nil) => nil 4.59/2.20 rm(X, add(Y, Z)) => if!fac6220rm(eq(X, Y), X, add(Y, Z)) 4.59/2.20 if!fac6220rm(true, X, add(Y, Z)) => rm(X, Z) 4.59/2.20 if!fac6220rm(false, X, add(Y, Z)) => add(Y, rm(X, Z)) 4.59/2.20 minsort(nil, nil) => nil 4.59/2.20 minsort(add(X, Y), Z) => if!fac6220minsort(eq(X, min(add(X, Y))), add(X, Y), Z) 4.59/2.20 if!fac6220minsort(true, add(X, Y), Z) => add(X, minsort(app(rm(X, Y), Z), nil)) 4.59/2.20 if!fac6220minsort(false, add(X, Y), Z) => minsort(Y, add(X, Z)) 4.59/2.20 map(F, nil) => nil 4.59/2.20 map(F, add(X, Y)) => add(F X, map(F, Y)) 4.59/2.20 filter(F, nil) => nil 4.59/2.20 filter(F, add(X, Y)) => filter2(F X, F, X, Y) 4.59/2.20 filter2(true, F, X, Y) => add(X, filter(F, Y)) 4.59/2.20 filter2(false, F, X, Y) => filter(F, Y) 4.59/2.20 4.59/2.20 Thus, the original system is terminating if (P_0, R_0, static, formative) is finite. 4.59/2.20 4.59/2.20 We consider the dependency pair problem (P_0, R_0, static, formative). 4.59/2.20 4.59/2.20 We place the elements of P in a dependency graph approximation G (see e.g. [Kop12, Thm. 7.27, 7.29], as follows: 4.59/2.20 4.59/2.20 * 0 : 0 4.59/2.20 * 1 : 2, 3 4.59/2.20 * 2 : 1 4.59/2.20 * 3 : 1 4.59/2.20 4.59/2.20 This graph has the following strongly connected components: 4.59/2.20 4.59/2.20 P_1: 4.59/2.20 4.59/2.20 map#(F, add(X, Y)) =#> map#(F, Y) 4.59/2.20 4.59/2.20 P_2: 4.59/2.20 4.59/2.20 filter#(F, add(X, Y)) =#> filter2#(F X, F, X, Y) 4.59/2.20 filter2#(true, F, X, Y) =#> filter#(F, Y) 4.59/2.20 filter2#(false, F, X, Y) =#> filter#(F, Y) 4.59/2.20 4.59/2.20 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) and (P_2, R_0, m, f). 4.59/2.20 4.59/2.20 Thus, the original system is terminating if each of (P_1, R_0, static, formative) and (P_2, R_0, static, formative) is finite. 4.59/2.20 4.59/2.20 We consider the dependency pair problem (P_2, R_0, static, formative). 4.59/2.20 4.59/2.20 We apply the subterm criterion with the following projection function: 4.59/2.20 4.59/2.20 nu(filter2#) = 4 4.59/2.20 nu(filter#) = 2 4.59/2.20 4.59/2.20 Thus, we can orient the dependency pairs as follows: 4.59/2.20 4.59/2.20 nu(filter#(F, add(X, Y))) = add(X, Y) |> Y = nu(filter2#(F X, F, X, Y)) 4.59/2.20 nu(filter2#(true, F, X, Y)) = Y = Y = nu(filter#(F, Y)) 4.59/2.20 nu(filter2#(false, F, X, Y)) = Y = Y = nu(filter#(F, Y)) 4.59/2.20 4.59/2.20 By [Kop12, Thm. 7.35] and [Kop13, Thm. 5], we may replace a dependency pair problem (P_2, R_0, static, f) by (P_3, R_0, static, f), where P_3 contains: 4.59/2.20 4.59/2.20 filter2#(true, F, X, Y) =#> filter#(F, Y) 4.59/2.20 filter2#(false, F, X, Y) =#> filter#(F, Y) 4.59/2.20 4.59/2.20 Thus, the original system is terminating if each of (P_1, R_0, static, formative) and (P_3, R_0, static, formative) is finite. 4.59/2.20 4.59/2.20 We consider the dependency pair problem (P_3, R_0, static, formative). 4.59/2.20 4.59/2.20 We place the elements of P in a dependency graph approximation G (see e.g. [Kop12, Thm. 7.27, 7.29], as follows: 4.59/2.20 4.59/2.20 * 0 : 4.59/2.20 * 1 : 4.59/2.20 4.59/2.20 This graph has no strongly connected components. By [Kop12, Thm. 7.31], this implies finiteness of the dependency pair problem. 4.59/2.20 4.59/2.20 Thus, the original system is terminating if (P_1, R_0, static, formative) is finite. 4.59/2.20 4.59/2.20 We consider the dependency pair problem (P_1, R_0, static, formative). 4.59/2.20 4.59/2.20 We apply the subterm criterion with the following projection function: 4.59/2.20 4.59/2.20 nu(map#) = 2 4.59/2.20 4.59/2.20 Thus, we can orient the dependency pairs as follows: 4.59/2.20 4.59/2.20 nu(map#(F, add(X, Y))) = add(X, Y) |> Y = nu(map#(F, Y)) 4.59/2.20 4.59/2.20 By [Kop12, Thm. 7.35] and [Kop13, Thm. 5], we may replace a dependency pair problem (P_1, R_0, static, f) by ({}, R_0, static, f). By the empty set processor [Kop12, Thm. 7.15] this problem may be immediately removed. 4.59/2.20 4.59/2.20 As all dependency pair problems were succesfully simplified with sound (and complete) processors until nothing remained, we conclude termination. 4.59/2.20 4.59/2.20 4.59/2.20 +++ Citations +++ 4.59/2.20 4.59/2.20 [Kop12] C. Kop. Higher Order Termination. PhD Thesis, 2012. 4.59/2.20 [Kop13] C. Kop. Static Dependency Pairs with Accessibility. Unpublished manuscript, http://cl-informatik.uibk.ac.at/users/kop/static.pdf, 2013. 4.59/2.20 [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. 4.59/2.20 EOF