86.13/27.17 YES 86.13/27.19 proof of /export/starexec/sandbox2/benchmark/theBenchmark.xml 86.13/27.19 # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty 86.13/27.19 86.13/27.19 86.13/27.19 Termination w.r.t. Q of the given QTRS could be proven: 86.13/27.19 86.13/27.19 (0) QTRS 86.13/27.19 (1) DependencyPairsProof [EQUIVALENT, 106 ms] 86.13/27.19 (2) QDP 86.13/27.19 (3) DependencyGraphProof [EQUIVALENT, 0 ms] 86.13/27.19 (4) AND 86.13/27.19 (5) QDP 86.13/27.19 (6) UsableRulesProof [EQUIVALENT, 0 ms] 86.13/27.19 (7) QDP 86.13/27.19 (8) QReductionProof [EQUIVALENT, 0 ms] 86.13/27.19 (9) QDP 86.13/27.19 (10) QDPSizeChangeProof [EQUIVALENT, 0 ms] 86.13/27.19 (11) YES 86.13/27.19 (12) QDP 86.13/27.19 (13) UsableRulesProof [EQUIVALENT, 0 ms] 86.13/27.19 (14) QDP 86.13/27.19 (15) QReductionProof [EQUIVALENT, 0 ms] 86.13/27.19 (16) QDP 86.13/27.19 (17) QDPSizeChangeProof [EQUIVALENT, 0 ms] 86.13/27.19 (18) YES 86.13/27.19 (19) QDP 86.13/27.19 (20) UsableRulesProof [EQUIVALENT, 0 ms] 86.13/27.19 (21) QDP 86.13/27.19 (22) QReductionProof [EQUIVALENT, 0 ms] 86.13/27.19 (23) QDP 86.13/27.19 (24) QDPSizeChangeProof [EQUIVALENT, 0 ms] 86.13/27.19 (25) YES 86.13/27.19 (26) QDP 86.13/27.19 (27) UsableRulesProof [EQUIVALENT, 0 ms] 86.13/27.19 (28) QDP 86.13/27.19 (29) QReductionProof [EQUIVALENT, 0 ms] 86.13/27.19 (30) QDP 86.13/27.19 (31) QDPSizeChangeProof [EQUIVALENT, 0 ms] 86.13/27.19 (32) YES 86.13/27.19 (33) QDP 86.13/27.19 (34) UsableRulesProof [EQUIVALENT, 0 ms] 86.13/27.19 (35) QDP 86.13/27.19 (36) QReductionProof [EQUIVALENT, 0 ms] 86.13/27.19 (37) QDP 86.13/27.19 (38) QDPSizeChangeProof [EQUIVALENT, 0 ms] 86.13/27.19 (39) YES 86.13/27.19 (40) QDP 86.13/27.19 (41) UsableRulesProof [EQUIVALENT, 0 ms] 86.13/27.19 (42) QDP 86.13/27.19 (43) QReductionProof [EQUIVALENT, 0 ms] 86.13/27.19 (44) QDP 86.13/27.19 (45) QDPSizeChangeProof [EQUIVALENT, 0 ms] 86.13/27.19 (46) YES 86.13/27.19 (47) QDP 86.13/27.19 (48) UsableRulesProof [EQUIVALENT, 0 ms] 86.13/27.19 (49) QDP 86.13/27.19 (50) QReductionProof [EQUIVALENT, 0 ms] 86.13/27.19 (51) QDP 86.13/27.19 (52) QDPSizeChangeProof [EQUIVALENT, 0 ms] 86.13/27.19 (53) YES 86.13/27.19 (54) QDP 86.13/27.19 (55) UsableRulesProof [EQUIVALENT, 0 ms] 86.13/27.19 (56) QDP 86.13/27.19 (57) QReductionProof [EQUIVALENT, 0 ms] 86.13/27.19 (58) QDP 86.13/27.19 (59) QDPSizeChangeProof [EQUIVALENT, 0 ms] 86.13/27.19 (60) YES 86.13/27.19 (61) QDP 86.13/27.19 (62) UsableRulesProof [EQUIVALENT, 0 ms] 86.13/27.19 (63) QDP 86.13/27.19 (64) QReductionProof [EQUIVALENT, 0 ms] 86.13/27.19 (65) QDP 86.13/27.19 (66) QDPSizeChangeProof [EQUIVALENT, 0 ms] 86.13/27.19 (67) YES 86.13/27.19 (68) QDP 86.13/27.19 (69) UsableRulesProof [EQUIVALENT, 0 ms] 86.13/27.19 (70) QDP 86.13/27.19 (71) QReductionProof [EQUIVALENT, 0 ms] 86.13/27.19 (72) QDP 86.13/27.19 (73) QDPSizeChangeProof [EQUIVALENT, 0 ms] 86.13/27.19 (74) YES 86.13/27.19 (75) QDP 86.13/27.19 (76) UsableRulesProof [EQUIVALENT, 0 ms] 86.13/27.19 (77) QDP 86.13/27.19 (78) QReductionProof [EQUIVALENT, 0 ms] 86.13/27.19 (79) QDP 86.13/27.19 (80) QDPSizeChangeProof [EQUIVALENT, 0 ms] 86.13/27.19 (81) YES 86.13/27.19 (82) QDP 86.13/27.19 (83) UsableRulesProof [EQUIVALENT, 0 ms] 86.13/27.19 (84) QDP 86.13/27.19 (85) QDPQMonotonicMRRProof [EQUIVALENT, 318 ms] 86.13/27.19 (86) QDP 86.13/27.19 (87) QDPOrderProof [EQUIVALENT, 48 ms] 86.13/27.19 (88) QDP 86.13/27.19 (89) QDPQMonotonicMRRProof [EQUIVALENT, 276 ms] 86.13/27.19 (90) QDP 86.13/27.19 (91) DependencyGraphProof [EQUIVALENT, 0 ms] 86.13/27.19 (92) QDP 86.13/27.19 (93) QDPQMonotonicMRRProof [EQUIVALENT, 213 ms] 86.13/27.19 (94) QDP 86.13/27.19 (95) QDPQMonotonicMRRProof [EQUIVALENT, 188 ms] 86.13/27.19 (96) QDP 86.13/27.19 (97) QDPQMonotonicMRRProof [EQUIVALENT, 185 ms] 86.13/27.19 (98) QDP 86.13/27.19 (99) DependencyGraphProof [EQUIVALENT, 0 ms] 86.13/27.19 (100) QDP 86.13/27.19 (101) QDPQMonotonicMRRProof [EQUIVALENT, 155 ms] 86.13/27.19 (102) QDP 86.13/27.19 (103) QDPQMonotonicMRRProof [EQUIVALENT, 117 ms] 86.13/27.19 (104) QDP 86.13/27.19 (105) QDPQMonotonicMRRProof [EQUIVALENT, 116 ms] 86.13/27.19 (106) QDP 86.13/27.19 (107) QDPQMonotonicMRRProof [EQUIVALENT, 161 ms] 86.13/27.19 (108) QDP 86.13/27.19 (109) QDPQMonotonicMRRProof [EQUIVALENT, 122 ms] 86.13/27.19 (110) QDP 86.13/27.19 (111) QDPQMonotonicMRRProof [EQUIVALENT, 81 ms] 86.13/27.19 (112) QDP 86.13/27.19 (113) DependencyGraphProof [EQUIVALENT, 0 ms] 86.13/27.19 (114) AND 86.13/27.19 (115) QDP 86.13/27.19 (116) UsableRulesProof [EQUIVALENT, 0 ms] 86.13/27.19 (117) QDP 86.13/27.19 (118) QReductionProof [EQUIVALENT, 0 ms] 86.13/27.19 (119) QDP 86.13/27.19 (120) UsableRulesReductionPairsProof [EQUIVALENT, 0 ms] 86.13/27.19 (121) QDP 86.13/27.19 (122) DependencyGraphProof [EQUIVALENT, 0 ms] 86.13/27.19 (123) TRUE 86.13/27.19 (124) QDP 86.13/27.19 (125) QDPOrderProof [EQUIVALENT, 575 ms] 86.13/27.19 (126) QDP 86.13/27.19 (127) QDPOrderProof [EQUIVALENT, 457 ms] 86.13/27.19 (128) QDP 86.13/27.19 (129) DependencyGraphProof [EQUIVALENT, 0 ms] 86.13/27.19 (130) QDP 86.13/27.19 (131) QDPQMonotonicMRRProof [EQUIVALENT, 83 ms] 86.13/27.19 (132) QDP 86.13/27.19 (133) DependencyGraphProof [EQUIVALENT, 0 ms] 86.13/27.19 (134) QDP 86.13/27.19 (135) QDPQMonotonicMRRProof [EQUIVALENT, 85 ms] 86.13/27.19 (136) QDP 86.13/27.19 (137) QDPOrderProof [EQUIVALENT, 561 ms] 86.13/27.19 (138) QDP 86.13/27.19 (139) DependencyGraphProof [EQUIVALENT, 0 ms] 86.13/27.19 (140) QDP 86.13/27.19 (141) QDPOrderProof [EQUIVALENT, 347 ms] 86.13/27.19 (142) QDP 86.13/27.19 (143) DependencyGraphProof [EQUIVALENT, 0 ms] 86.13/27.19 (144) QDP 86.13/27.19 (145) QDPOrderProof [EQUIVALENT, 384 ms] 86.13/27.19 (146) QDP 86.13/27.19 (147) QDPOrderProof [EQUIVALENT, 331 ms] 86.13/27.19 (148) QDP 86.13/27.19 (149) DependencyGraphProof [EQUIVALENT, 0 ms] 86.13/27.19 (150) TRUE 86.13/27.19 86.13/27.19 86.13/27.19 ---------------------------------------- 86.13/27.19 86.13/27.19 (0) 86.13/27.19 Obligation: 86.13/27.19 Q restricted rewrite system: 86.13/27.19 The TRS R consists of the following rules: 86.13/27.19 86.13/27.19 active(and(tt, T)) -> mark(T) 86.13/27.19 active(isNatIList(IL)) -> mark(isNatList(IL)) 86.13/27.19 active(isNat(0)) -> mark(tt) 86.13/27.19 active(isNat(s(N))) -> mark(isNat(N)) 86.13/27.19 active(isNat(length(L))) -> mark(isNatList(L)) 86.13/27.19 active(isNatIList(zeros)) -> mark(tt) 86.13/27.19 active(isNatIList(cons(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.13/27.19 active(isNatList(nil)) -> mark(tt) 86.13/27.19 active(isNatList(cons(N, L))) -> mark(and(isNat(N), isNatList(L))) 86.13/27.19 active(isNatList(take(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.13/27.19 active(zeros) -> mark(cons(0, zeros)) 86.13/27.19 active(take(0, IL)) -> mark(uTake1(isNatIList(IL))) 86.13/27.19 active(uTake1(tt)) -> mark(nil) 86.13/27.19 active(take(s(M), cons(N, IL))) -> mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL)) 86.13/27.19 active(uTake2(tt, M, N, IL)) -> mark(cons(N, take(M, IL))) 86.13/27.19 active(length(cons(N, L))) -> mark(uLength(and(isNat(N), isNatList(L)), L)) 86.13/27.19 active(uLength(tt, L)) -> mark(s(length(L))) 86.13/27.19 mark(and(X1, X2)) -> active(and(mark(X1), mark(X2))) 86.13/27.19 mark(tt) -> active(tt) 86.13/27.19 mark(isNatIList(X)) -> active(isNatIList(X)) 86.13/27.19 mark(isNatList(X)) -> active(isNatList(X)) 86.13/27.19 mark(isNat(X)) -> active(isNat(X)) 86.13/27.19 mark(0) -> active(0) 86.13/27.19 mark(s(X)) -> active(s(mark(X))) 86.13/27.19 mark(length(X)) -> active(length(mark(X))) 86.13/27.19 mark(zeros) -> active(zeros) 86.13/27.19 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 86.13/27.19 mark(nil) -> active(nil) 86.13/27.19 mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) 86.13/27.19 mark(uTake1(X)) -> active(uTake1(mark(X))) 86.13/27.19 mark(uTake2(X1, X2, X3, X4)) -> active(uTake2(mark(X1), X2, X3, X4)) 86.13/27.19 mark(uLength(X1, X2)) -> active(uLength(mark(X1), X2)) 86.13/27.19 and(mark(X1), X2) -> and(X1, X2) 86.13/27.19 and(X1, mark(X2)) -> and(X1, X2) 86.13/27.19 and(active(X1), X2) -> and(X1, X2) 86.13/27.19 and(X1, active(X2)) -> and(X1, X2) 86.13/27.19 isNatIList(mark(X)) -> isNatIList(X) 86.13/27.19 isNatIList(active(X)) -> isNatIList(X) 86.13/27.19 isNatList(mark(X)) -> isNatList(X) 86.13/27.19 isNatList(active(X)) -> isNatList(X) 86.13/27.19 isNat(mark(X)) -> isNat(X) 86.13/27.19 isNat(active(X)) -> isNat(X) 86.13/27.19 s(mark(X)) -> s(X) 86.13/27.19 s(active(X)) -> s(X) 86.13/27.19 length(mark(X)) -> length(X) 86.13/27.19 length(active(X)) -> length(X) 86.13/27.19 cons(mark(X1), X2) -> cons(X1, X2) 86.13/27.19 cons(X1, mark(X2)) -> cons(X1, X2) 86.13/27.19 cons(active(X1), X2) -> cons(X1, X2) 86.13/27.19 cons(X1, active(X2)) -> cons(X1, X2) 86.13/27.19 take(mark(X1), X2) -> take(X1, X2) 86.13/27.19 take(X1, mark(X2)) -> take(X1, X2) 86.13/27.19 take(active(X1), X2) -> take(X1, X2) 86.13/27.19 take(X1, active(X2)) -> take(X1, X2) 86.13/27.19 uTake1(mark(X)) -> uTake1(X) 86.13/27.19 uTake1(active(X)) -> uTake1(X) 86.13/27.19 uTake2(mark(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.13/27.19 uTake2(X1, mark(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.13/27.19 uTake2(X1, X2, mark(X3), X4) -> uTake2(X1, X2, X3, X4) 86.13/27.19 uTake2(X1, X2, X3, mark(X4)) -> uTake2(X1, X2, X3, X4) 86.13/27.19 uTake2(active(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.13/27.19 uTake2(X1, active(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.13/27.19 uTake2(X1, X2, active(X3), X4) -> uTake2(X1, X2, X3, X4) 86.13/27.19 uTake2(X1, X2, X3, active(X4)) -> uTake2(X1, X2, X3, X4) 86.13/27.19 uLength(mark(X1), X2) -> uLength(X1, X2) 86.13/27.19 uLength(X1, mark(X2)) -> uLength(X1, X2) 86.13/27.19 uLength(active(X1), X2) -> uLength(X1, X2) 86.13/27.19 uLength(X1, active(X2)) -> uLength(X1, X2) 86.13/27.19 86.13/27.19 The set Q consists of the following terms: 86.13/27.19 86.13/27.19 active(and(tt, x0)) 86.13/27.19 active(isNatIList(x0)) 86.13/27.19 active(isNat(0)) 86.13/27.19 active(isNat(s(x0))) 86.13/27.19 active(isNat(length(x0))) 86.13/27.19 active(isNatList(nil)) 86.13/27.19 active(isNatList(cons(x0, x1))) 86.13/27.19 active(isNatList(take(x0, x1))) 86.13/27.19 active(zeros) 86.13/27.19 active(take(0, x0)) 86.13/27.19 active(uTake1(tt)) 86.13/27.19 active(take(s(x0), cons(x1, x2))) 86.13/27.19 active(uTake2(tt, x0, x1, x2)) 86.13/27.19 active(length(cons(x0, x1))) 86.13/27.19 active(uLength(tt, x0)) 86.13/27.19 mark(and(x0, x1)) 86.13/27.19 mark(tt) 86.13/27.19 mark(isNatIList(x0)) 86.13/27.19 mark(isNatList(x0)) 86.13/27.19 mark(isNat(x0)) 86.13/27.19 mark(0) 86.13/27.19 mark(s(x0)) 86.13/27.19 mark(length(x0)) 86.13/27.19 mark(zeros) 86.13/27.19 mark(cons(x0, x1)) 86.13/27.19 mark(nil) 86.13/27.19 mark(take(x0, x1)) 86.13/27.19 mark(uTake1(x0)) 86.13/27.19 mark(uTake2(x0, x1, x2, x3)) 86.13/27.19 mark(uLength(x0, x1)) 86.13/27.19 and(mark(x0), x1) 86.13/27.19 and(x0, mark(x1)) 86.13/27.19 and(active(x0), x1) 86.13/27.19 and(x0, active(x1)) 86.13/27.19 isNatIList(mark(x0)) 86.13/27.19 isNatIList(active(x0)) 86.13/27.19 isNatList(mark(x0)) 86.13/27.19 isNatList(active(x0)) 86.13/27.19 isNat(mark(x0)) 86.13/27.19 isNat(active(x0)) 86.13/27.19 s(mark(x0)) 86.13/27.19 s(active(x0)) 86.13/27.19 length(mark(x0)) 86.13/27.19 length(active(x0)) 86.13/27.19 cons(mark(x0), x1) 86.13/27.19 cons(x0, mark(x1)) 86.13/27.19 cons(active(x0), x1) 86.13/27.19 cons(x0, active(x1)) 86.13/27.19 take(mark(x0), x1) 86.13/27.19 take(x0, mark(x1)) 86.13/27.19 take(active(x0), x1) 86.13/27.19 take(x0, active(x1)) 86.13/27.19 uTake1(mark(x0)) 86.13/27.19 uTake1(active(x0)) 86.13/27.19 uTake2(mark(x0), x1, x2, x3) 86.13/27.19 uTake2(x0, mark(x1), x2, x3) 86.13/27.19 uTake2(x0, x1, mark(x2), x3) 86.13/27.19 uTake2(x0, x1, x2, mark(x3)) 86.13/27.19 uTake2(active(x0), x1, x2, x3) 86.13/27.19 uTake2(x0, active(x1), x2, x3) 86.13/27.19 uTake2(x0, x1, active(x2), x3) 86.13/27.19 uTake2(x0, x1, x2, active(x3)) 86.13/27.19 uLength(mark(x0), x1) 86.13/27.19 uLength(x0, mark(x1)) 86.13/27.19 uLength(active(x0), x1) 86.13/27.19 uLength(x0, active(x1)) 86.13/27.19 86.13/27.19 86.13/27.19 ---------------------------------------- 86.13/27.19 86.13/27.19 (1) DependencyPairsProof (EQUIVALENT) 86.13/27.19 Using Dependency Pairs [AG00,LPAR04] we result in the following initial DP problem. 86.13/27.19 ---------------------------------------- 86.13/27.19 86.13/27.19 (2) 86.13/27.19 Obligation: 86.13/27.19 Q DP problem: 86.13/27.19 The TRS P consists of the following rules: 86.13/27.19 86.13/27.19 ACTIVE(and(tt, T)) -> MARK(T) 86.13/27.19 ACTIVE(isNatIList(IL)) -> MARK(isNatList(IL)) 86.13/27.19 ACTIVE(isNatIList(IL)) -> ISNATLIST(IL) 86.13/27.19 ACTIVE(isNat(0)) -> MARK(tt) 86.13/27.19 ACTIVE(isNat(s(N))) -> MARK(isNat(N)) 86.13/27.19 ACTIVE(isNat(s(N))) -> ISNAT(N) 86.13/27.19 ACTIVE(isNat(length(L))) -> MARK(isNatList(L)) 86.13/27.19 ACTIVE(isNat(length(L))) -> ISNATLIST(L) 86.13/27.19 ACTIVE(isNatIList(zeros)) -> MARK(tt) 86.13/27.19 ACTIVE(isNatIList(cons(N, IL))) -> MARK(and(isNat(N), isNatIList(IL))) 86.13/27.19 ACTIVE(isNatIList(cons(N, IL))) -> AND(isNat(N), isNatIList(IL)) 86.13/27.19 ACTIVE(isNatIList(cons(N, IL))) -> ISNAT(N) 86.13/27.19 ACTIVE(isNatIList(cons(N, IL))) -> ISNATILIST(IL) 86.13/27.19 ACTIVE(isNatList(nil)) -> MARK(tt) 86.13/27.19 ACTIVE(isNatList(cons(N, L))) -> MARK(and(isNat(N), isNatList(L))) 86.13/27.19 ACTIVE(isNatList(cons(N, L))) -> AND(isNat(N), isNatList(L)) 86.13/27.19 ACTIVE(isNatList(cons(N, L))) -> ISNAT(N) 86.13/27.19 ACTIVE(isNatList(cons(N, L))) -> ISNATLIST(L) 86.13/27.19 ACTIVE(isNatList(take(N, IL))) -> MARK(and(isNat(N), isNatIList(IL))) 86.13/27.19 ACTIVE(isNatList(take(N, IL))) -> AND(isNat(N), isNatIList(IL)) 86.13/27.19 ACTIVE(isNatList(take(N, IL))) -> ISNAT(N) 86.13/27.19 ACTIVE(isNatList(take(N, IL))) -> ISNATILIST(IL) 86.13/27.19 ACTIVE(zeros) -> MARK(cons(0, zeros)) 86.13/27.19 ACTIVE(zeros) -> CONS(0, zeros) 86.13/27.19 ACTIVE(take(0, IL)) -> MARK(uTake1(isNatIList(IL))) 86.13/27.19 ACTIVE(take(0, IL)) -> UTAKE1(isNatIList(IL)) 86.13/27.19 ACTIVE(take(0, IL)) -> ISNATILIST(IL) 86.13/27.19 ACTIVE(uTake1(tt)) -> MARK(nil) 86.13/27.19 ACTIVE(take(s(M), cons(N, IL))) -> MARK(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL)) 86.13/27.19 ACTIVE(take(s(M), cons(N, IL))) -> UTAKE2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL) 86.13/27.19 ACTIVE(take(s(M), cons(N, IL))) -> AND(isNat(M), and(isNat(N), isNatIList(IL))) 86.13/27.19 ACTIVE(take(s(M), cons(N, IL))) -> ISNAT(M) 86.13/27.19 ACTIVE(take(s(M), cons(N, IL))) -> AND(isNat(N), isNatIList(IL)) 86.13/27.19 ACTIVE(take(s(M), cons(N, IL))) -> ISNAT(N) 86.13/27.19 ACTIVE(take(s(M), cons(N, IL))) -> ISNATILIST(IL) 86.13/27.19 ACTIVE(uTake2(tt, M, N, IL)) -> MARK(cons(N, take(M, IL))) 86.13/27.19 ACTIVE(uTake2(tt, M, N, IL)) -> CONS(N, take(M, IL)) 86.13/27.19 ACTIVE(uTake2(tt, M, N, IL)) -> TAKE(M, IL) 86.13/27.19 ACTIVE(length(cons(N, L))) -> MARK(uLength(and(isNat(N), isNatList(L)), L)) 86.13/27.19 ACTIVE(length(cons(N, L))) -> ULENGTH(and(isNat(N), isNatList(L)), L) 86.13/27.19 ACTIVE(length(cons(N, L))) -> AND(isNat(N), isNatList(L)) 86.13/27.19 ACTIVE(length(cons(N, L))) -> ISNAT(N) 86.13/27.19 ACTIVE(length(cons(N, L))) -> ISNATLIST(L) 86.13/27.19 ACTIVE(uLength(tt, L)) -> MARK(s(length(L))) 86.13/27.19 ACTIVE(uLength(tt, L)) -> S(length(L)) 86.13/27.19 ACTIVE(uLength(tt, L)) -> LENGTH(L) 86.13/27.19 MARK(and(X1, X2)) -> ACTIVE(and(mark(X1), mark(X2))) 86.13/27.19 MARK(and(X1, X2)) -> AND(mark(X1), mark(X2)) 86.13/27.19 MARK(and(X1, X2)) -> MARK(X1) 86.13/27.19 MARK(and(X1, X2)) -> MARK(X2) 86.13/27.19 MARK(tt) -> ACTIVE(tt) 86.13/27.19 MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) 86.13/27.19 MARK(isNatList(X)) -> ACTIVE(isNatList(X)) 86.13/27.19 MARK(isNat(X)) -> ACTIVE(isNat(X)) 86.13/27.19 MARK(0) -> ACTIVE(0) 86.13/27.19 MARK(s(X)) -> ACTIVE(s(mark(X))) 86.13/27.19 MARK(s(X)) -> S(mark(X)) 86.13/27.19 MARK(s(X)) -> MARK(X) 86.13/27.19 MARK(length(X)) -> ACTIVE(length(mark(X))) 86.13/27.19 MARK(length(X)) -> LENGTH(mark(X)) 86.13/27.19 MARK(length(X)) -> MARK(X) 86.13/27.19 MARK(zeros) -> ACTIVE(zeros) 86.13/27.19 MARK(cons(X1, X2)) -> ACTIVE(cons(mark(X1), X2)) 86.13/27.19 MARK(cons(X1, X2)) -> CONS(mark(X1), X2) 86.13/27.19 MARK(cons(X1, X2)) -> MARK(X1) 86.13/27.19 MARK(nil) -> ACTIVE(nil) 86.13/27.19 MARK(take(X1, X2)) -> ACTIVE(take(mark(X1), mark(X2))) 86.13/27.19 MARK(take(X1, X2)) -> TAKE(mark(X1), mark(X2)) 86.13/27.19 MARK(take(X1, X2)) -> MARK(X1) 86.13/27.19 MARK(take(X1, X2)) -> MARK(X2) 86.13/27.19 MARK(uTake1(X)) -> ACTIVE(uTake1(mark(X))) 86.13/27.19 MARK(uTake1(X)) -> UTAKE1(mark(X)) 86.13/27.19 MARK(uTake1(X)) -> MARK(X) 86.13/27.19 MARK(uTake2(X1, X2, X3, X4)) -> ACTIVE(uTake2(mark(X1), X2, X3, X4)) 86.13/27.19 MARK(uTake2(X1, X2, X3, X4)) -> UTAKE2(mark(X1), X2, X3, X4) 86.13/27.19 MARK(uTake2(X1, X2, X3, X4)) -> MARK(X1) 86.13/27.19 MARK(uLength(X1, X2)) -> ACTIVE(uLength(mark(X1), X2)) 86.13/27.19 MARK(uLength(X1, X2)) -> ULENGTH(mark(X1), X2) 86.13/27.19 MARK(uLength(X1, X2)) -> MARK(X1) 86.13/27.19 AND(mark(X1), X2) -> AND(X1, X2) 86.13/27.19 AND(X1, mark(X2)) -> AND(X1, X2) 86.13/27.19 AND(active(X1), X2) -> AND(X1, X2) 86.13/27.19 AND(X1, active(X2)) -> AND(X1, X2) 86.13/27.19 ISNATILIST(mark(X)) -> ISNATILIST(X) 86.13/27.19 ISNATILIST(active(X)) -> ISNATILIST(X) 86.13/27.19 ISNATLIST(mark(X)) -> ISNATLIST(X) 86.13/27.19 ISNATLIST(active(X)) -> ISNATLIST(X) 86.13/27.19 ISNAT(mark(X)) -> ISNAT(X) 86.13/27.19 ISNAT(active(X)) -> ISNAT(X) 86.13/27.19 S(mark(X)) -> S(X) 86.13/27.19 S(active(X)) -> S(X) 86.13/27.19 LENGTH(mark(X)) -> LENGTH(X) 86.13/27.19 LENGTH(active(X)) -> LENGTH(X) 86.13/27.19 CONS(mark(X1), X2) -> CONS(X1, X2) 86.13/27.19 CONS(X1, mark(X2)) -> CONS(X1, X2) 86.13/27.19 CONS(active(X1), X2) -> CONS(X1, X2) 86.13/27.19 CONS(X1, active(X2)) -> CONS(X1, X2) 86.13/27.19 TAKE(mark(X1), X2) -> TAKE(X1, X2) 86.13/27.19 TAKE(X1, mark(X2)) -> TAKE(X1, X2) 86.13/27.19 TAKE(active(X1), X2) -> TAKE(X1, X2) 86.13/27.19 TAKE(X1, active(X2)) -> TAKE(X1, X2) 86.13/27.19 UTAKE1(mark(X)) -> UTAKE1(X) 86.13/27.19 UTAKE1(active(X)) -> UTAKE1(X) 86.13/27.19 UTAKE2(mark(X1), X2, X3, X4) -> UTAKE2(X1, X2, X3, X4) 86.13/27.19 UTAKE2(X1, mark(X2), X3, X4) -> UTAKE2(X1, X2, X3, X4) 86.13/27.19 UTAKE2(X1, X2, mark(X3), X4) -> UTAKE2(X1, X2, X3, X4) 86.13/27.19 UTAKE2(X1, X2, X3, mark(X4)) -> UTAKE2(X1, X2, X3, X4) 86.13/27.19 UTAKE2(active(X1), X2, X3, X4) -> UTAKE2(X1, X2, X3, X4) 86.13/27.19 UTAKE2(X1, active(X2), X3, X4) -> UTAKE2(X1, X2, X3, X4) 86.13/27.19 UTAKE2(X1, X2, active(X3), X4) -> UTAKE2(X1, X2, X3, X4) 86.13/27.19 UTAKE2(X1, X2, X3, active(X4)) -> UTAKE2(X1, X2, X3, X4) 86.13/27.19 ULENGTH(mark(X1), X2) -> ULENGTH(X1, X2) 86.13/27.19 ULENGTH(X1, mark(X2)) -> ULENGTH(X1, X2) 86.13/27.19 ULENGTH(active(X1), X2) -> ULENGTH(X1, X2) 86.13/27.19 ULENGTH(X1, active(X2)) -> ULENGTH(X1, X2) 86.13/27.19 86.13/27.19 The TRS R consists of the following rules: 86.13/27.19 86.13/27.19 active(and(tt, T)) -> mark(T) 86.13/27.19 active(isNatIList(IL)) -> mark(isNatList(IL)) 86.13/27.19 active(isNat(0)) -> mark(tt) 86.13/27.19 active(isNat(s(N))) -> mark(isNat(N)) 86.13/27.19 active(isNat(length(L))) -> mark(isNatList(L)) 86.13/27.19 active(isNatIList(zeros)) -> mark(tt) 86.13/27.19 active(isNatIList(cons(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.13/27.19 active(isNatList(nil)) -> mark(tt) 86.13/27.19 active(isNatList(cons(N, L))) -> mark(and(isNat(N), isNatList(L))) 86.13/27.19 active(isNatList(take(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.20 active(zeros) -> mark(cons(0, zeros)) 86.65/27.20 active(take(0, IL)) -> mark(uTake1(isNatIList(IL))) 86.65/27.20 active(uTake1(tt)) -> mark(nil) 86.65/27.20 active(take(s(M), cons(N, IL))) -> mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL)) 86.65/27.20 active(uTake2(tt, M, N, IL)) -> mark(cons(N, take(M, IL))) 86.65/27.20 active(length(cons(N, L))) -> mark(uLength(and(isNat(N), isNatList(L)), L)) 86.65/27.20 active(uLength(tt, L)) -> mark(s(length(L))) 86.65/27.20 mark(and(X1, X2)) -> active(and(mark(X1), mark(X2))) 86.65/27.20 mark(tt) -> active(tt) 86.65/27.20 mark(isNatIList(X)) -> active(isNatIList(X)) 86.65/27.20 mark(isNatList(X)) -> active(isNatList(X)) 86.65/27.20 mark(isNat(X)) -> active(isNat(X)) 86.65/27.20 mark(0) -> active(0) 86.65/27.20 mark(s(X)) -> active(s(mark(X))) 86.65/27.20 mark(length(X)) -> active(length(mark(X))) 86.65/27.20 mark(zeros) -> active(zeros) 86.65/27.20 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 86.65/27.20 mark(nil) -> active(nil) 86.65/27.20 mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) 86.65/27.20 mark(uTake1(X)) -> active(uTake1(mark(X))) 86.65/27.20 mark(uTake2(X1, X2, X3, X4)) -> active(uTake2(mark(X1), X2, X3, X4)) 86.65/27.20 mark(uLength(X1, X2)) -> active(uLength(mark(X1), X2)) 86.65/27.20 and(mark(X1), X2) -> and(X1, X2) 86.65/27.20 and(X1, mark(X2)) -> and(X1, X2) 86.65/27.20 and(active(X1), X2) -> and(X1, X2) 86.65/27.20 and(X1, active(X2)) -> and(X1, X2) 86.65/27.20 isNatIList(mark(X)) -> isNatIList(X) 86.65/27.20 isNatIList(active(X)) -> isNatIList(X) 86.65/27.20 isNatList(mark(X)) -> isNatList(X) 86.65/27.20 isNatList(active(X)) -> isNatList(X) 86.65/27.20 isNat(mark(X)) -> isNat(X) 86.65/27.20 isNat(active(X)) -> isNat(X) 86.65/27.20 s(mark(X)) -> s(X) 86.65/27.20 s(active(X)) -> s(X) 86.65/27.20 length(mark(X)) -> length(X) 86.65/27.20 length(active(X)) -> length(X) 86.65/27.20 cons(mark(X1), X2) -> cons(X1, X2) 86.65/27.20 cons(X1, mark(X2)) -> cons(X1, X2) 86.65/27.20 cons(active(X1), X2) -> cons(X1, X2) 86.65/27.20 cons(X1, active(X2)) -> cons(X1, X2) 86.65/27.20 take(mark(X1), X2) -> take(X1, X2) 86.65/27.20 take(X1, mark(X2)) -> take(X1, X2) 86.65/27.20 take(active(X1), X2) -> take(X1, X2) 86.65/27.20 take(X1, active(X2)) -> take(X1, X2) 86.65/27.20 uTake1(mark(X)) -> uTake1(X) 86.65/27.20 uTake1(active(X)) -> uTake1(X) 86.65/27.20 uTake2(mark(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.20 uTake2(X1, mark(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.20 uTake2(X1, X2, mark(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.20 uTake2(X1, X2, X3, mark(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.20 uTake2(active(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.20 uTake2(X1, active(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.20 uTake2(X1, X2, active(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.20 uTake2(X1, X2, X3, active(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.20 uLength(mark(X1), X2) -> uLength(X1, X2) 86.65/27.20 uLength(X1, mark(X2)) -> uLength(X1, X2) 86.65/27.20 uLength(active(X1), X2) -> uLength(X1, X2) 86.65/27.20 uLength(X1, active(X2)) -> uLength(X1, X2) 86.65/27.20 86.65/27.20 The set Q consists of the following terms: 86.65/27.20 86.65/27.20 active(and(tt, x0)) 86.65/27.20 active(isNatIList(x0)) 86.65/27.20 active(isNat(0)) 86.65/27.20 active(isNat(s(x0))) 86.65/27.20 active(isNat(length(x0))) 86.65/27.20 active(isNatList(nil)) 86.65/27.20 active(isNatList(cons(x0, x1))) 86.65/27.20 active(isNatList(take(x0, x1))) 86.65/27.20 active(zeros) 86.65/27.20 active(take(0, x0)) 86.65/27.20 active(uTake1(tt)) 86.65/27.20 active(take(s(x0), cons(x1, x2))) 86.65/27.20 active(uTake2(tt, x0, x1, x2)) 86.65/27.20 active(length(cons(x0, x1))) 86.65/27.20 active(uLength(tt, x0)) 86.65/27.20 mark(and(x0, x1)) 86.65/27.20 mark(tt) 86.65/27.20 mark(isNatIList(x0)) 86.65/27.20 mark(isNatList(x0)) 86.65/27.20 mark(isNat(x0)) 86.65/27.20 mark(0) 86.65/27.20 mark(s(x0)) 86.65/27.20 mark(length(x0)) 86.65/27.20 mark(zeros) 86.65/27.20 mark(cons(x0, x1)) 86.65/27.20 mark(nil) 86.65/27.20 mark(take(x0, x1)) 86.65/27.20 mark(uTake1(x0)) 86.65/27.20 mark(uTake2(x0, x1, x2, x3)) 86.65/27.20 mark(uLength(x0, x1)) 86.65/27.20 and(mark(x0), x1) 86.65/27.20 and(x0, mark(x1)) 86.65/27.20 and(active(x0), x1) 86.65/27.20 and(x0, active(x1)) 86.65/27.20 isNatIList(mark(x0)) 86.65/27.20 isNatIList(active(x0)) 86.65/27.20 isNatList(mark(x0)) 86.65/27.20 isNatList(active(x0)) 86.65/27.20 isNat(mark(x0)) 86.65/27.20 isNat(active(x0)) 86.65/27.20 s(mark(x0)) 86.65/27.20 s(active(x0)) 86.65/27.20 length(mark(x0)) 86.65/27.20 length(active(x0)) 86.65/27.20 cons(mark(x0), x1) 86.65/27.20 cons(x0, mark(x1)) 86.65/27.20 cons(active(x0), x1) 86.65/27.20 cons(x0, active(x1)) 86.65/27.20 take(mark(x0), x1) 86.65/27.20 take(x0, mark(x1)) 86.65/27.20 take(active(x0), x1) 86.65/27.20 take(x0, active(x1)) 86.65/27.20 uTake1(mark(x0)) 86.65/27.20 uTake1(active(x0)) 86.65/27.20 uTake2(mark(x0), x1, x2, x3) 86.65/27.20 uTake2(x0, mark(x1), x2, x3) 86.65/27.20 uTake2(x0, x1, mark(x2), x3) 86.65/27.20 uTake2(x0, x1, x2, mark(x3)) 86.65/27.20 uTake2(active(x0), x1, x2, x3) 86.65/27.20 uTake2(x0, active(x1), x2, x3) 86.65/27.20 uTake2(x0, x1, active(x2), x3) 86.65/27.20 uTake2(x0, x1, x2, active(x3)) 86.65/27.20 uLength(mark(x0), x1) 86.65/27.20 uLength(x0, mark(x1)) 86.65/27.20 uLength(active(x0), x1) 86.65/27.20 uLength(x0, active(x1)) 86.65/27.20 86.65/27.20 We have to consider all minimal (P,Q,R)-chains. 86.65/27.20 ---------------------------------------- 86.65/27.20 86.65/27.20 (3) DependencyGraphProof (EQUIVALENT) 86.65/27.20 The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 12 SCCs with 44 less nodes. 86.65/27.20 ---------------------------------------- 86.65/27.20 86.65/27.20 (4) 86.65/27.20 Complex Obligation (AND) 86.65/27.20 86.65/27.20 ---------------------------------------- 86.65/27.20 86.65/27.20 (5) 86.65/27.20 Obligation: 86.65/27.20 Q DP problem: 86.65/27.20 The TRS P consists of the following rules: 86.65/27.20 86.65/27.20 ULENGTH(X1, mark(X2)) -> ULENGTH(X1, X2) 86.65/27.20 ULENGTH(mark(X1), X2) -> ULENGTH(X1, X2) 86.65/27.20 ULENGTH(active(X1), X2) -> ULENGTH(X1, X2) 86.65/27.20 ULENGTH(X1, active(X2)) -> ULENGTH(X1, X2) 86.65/27.20 86.65/27.20 The TRS R consists of the following rules: 86.65/27.20 86.65/27.20 active(and(tt, T)) -> mark(T) 86.65/27.20 active(isNatIList(IL)) -> mark(isNatList(IL)) 86.65/27.20 active(isNat(0)) -> mark(tt) 86.65/27.20 active(isNat(s(N))) -> mark(isNat(N)) 86.65/27.20 active(isNat(length(L))) -> mark(isNatList(L)) 86.65/27.20 active(isNatIList(zeros)) -> mark(tt) 86.65/27.20 active(isNatIList(cons(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.20 active(isNatList(nil)) -> mark(tt) 86.65/27.20 active(isNatList(cons(N, L))) -> mark(and(isNat(N), isNatList(L))) 86.65/27.20 active(isNatList(take(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.20 active(zeros) -> mark(cons(0, zeros)) 86.65/27.20 active(take(0, IL)) -> mark(uTake1(isNatIList(IL))) 86.65/27.20 active(uTake1(tt)) -> mark(nil) 86.65/27.20 active(take(s(M), cons(N, IL))) -> mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL)) 86.65/27.20 active(uTake2(tt, M, N, IL)) -> mark(cons(N, take(M, IL))) 86.65/27.20 active(length(cons(N, L))) -> mark(uLength(and(isNat(N), isNatList(L)), L)) 86.65/27.20 active(uLength(tt, L)) -> mark(s(length(L))) 86.65/27.20 mark(and(X1, X2)) -> active(and(mark(X1), mark(X2))) 86.65/27.20 mark(tt) -> active(tt) 86.65/27.20 mark(isNatIList(X)) -> active(isNatIList(X)) 86.65/27.20 mark(isNatList(X)) -> active(isNatList(X)) 86.65/27.20 mark(isNat(X)) -> active(isNat(X)) 86.65/27.20 mark(0) -> active(0) 86.65/27.20 mark(s(X)) -> active(s(mark(X))) 86.65/27.20 mark(length(X)) -> active(length(mark(X))) 86.65/27.20 mark(zeros) -> active(zeros) 86.65/27.20 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 86.65/27.20 mark(nil) -> active(nil) 86.65/27.20 mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) 86.65/27.20 mark(uTake1(X)) -> active(uTake1(mark(X))) 86.65/27.20 mark(uTake2(X1, X2, X3, X4)) -> active(uTake2(mark(X1), X2, X3, X4)) 86.65/27.20 mark(uLength(X1, X2)) -> active(uLength(mark(X1), X2)) 86.65/27.20 and(mark(X1), X2) -> and(X1, X2) 86.65/27.20 and(X1, mark(X2)) -> and(X1, X2) 86.65/27.20 and(active(X1), X2) -> and(X1, X2) 86.65/27.20 and(X1, active(X2)) -> and(X1, X2) 86.65/27.20 isNatIList(mark(X)) -> isNatIList(X) 86.65/27.20 isNatIList(active(X)) -> isNatIList(X) 86.65/27.20 isNatList(mark(X)) -> isNatList(X) 86.65/27.20 isNatList(active(X)) -> isNatList(X) 86.65/27.20 isNat(mark(X)) -> isNat(X) 86.65/27.20 isNat(active(X)) -> isNat(X) 86.65/27.20 s(mark(X)) -> s(X) 86.65/27.20 s(active(X)) -> s(X) 86.65/27.20 length(mark(X)) -> length(X) 86.65/27.20 length(active(X)) -> length(X) 86.65/27.20 cons(mark(X1), X2) -> cons(X1, X2) 86.65/27.20 cons(X1, mark(X2)) -> cons(X1, X2) 86.65/27.20 cons(active(X1), X2) -> cons(X1, X2) 86.65/27.20 cons(X1, active(X2)) -> cons(X1, X2) 86.65/27.20 take(mark(X1), X2) -> take(X1, X2) 86.65/27.20 take(X1, mark(X2)) -> take(X1, X2) 86.65/27.20 take(active(X1), X2) -> take(X1, X2) 86.65/27.20 take(X1, active(X2)) -> take(X1, X2) 86.65/27.20 uTake1(mark(X)) -> uTake1(X) 86.65/27.20 uTake1(active(X)) -> uTake1(X) 86.65/27.20 uTake2(mark(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.20 uTake2(X1, mark(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.20 uTake2(X1, X2, mark(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.20 uTake2(X1, X2, X3, mark(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.20 uTake2(active(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.20 uTake2(X1, active(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.20 uTake2(X1, X2, active(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.20 uTake2(X1, X2, X3, active(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.20 uLength(mark(X1), X2) -> uLength(X1, X2) 86.65/27.20 uLength(X1, mark(X2)) -> uLength(X1, X2) 86.65/27.20 uLength(active(X1), X2) -> uLength(X1, X2) 86.65/27.20 uLength(X1, active(X2)) -> uLength(X1, X2) 86.65/27.20 86.65/27.20 The set Q consists of the following terms: 86.65/27.20 86.65/27.20 active(and(tt, x0)) 86.65/27.20 active(isNatIList(x0)) 86.65/27.20 active(isNat(0)) 86.65/27.20 active(isNat(s(x0))) 86.65/27.20 active(isNat(length(x0))) 86.65/27.20 active(isNatList(nil)) 86.65/27.20 active(isNatList(cons(x0, x1))) 86.65/27.20 active(isNatList(take(x0, x1))) 86.65/27.20 active(zeros) 86.65/27.20 active(take(0, x0)) 86.65/27.20 active(uTake1(tt)) 86.65/27.20 active(take(s(x0), cons(x1, x2))) 86.65/27.20 active(uTake2(tt, x0, x1, x2)) 86.65/27.20 active(length(cons(x0, x1))) 86.65/27.20 active(uLength(tt, x0)) 86.65/27.20 mark(and(x0, x1)) 86.65/27.20 mark(tt) 86.65/27.20 mark(isNatIList(x0)) 86.65/27.20 mark(isNatList(x0)) 86.65/27.20 mark(isNat(x0)) 86.65/27.20 mark(0) 86.65/27.20 mark(s(x0)) 86.65/27.20 mark(length(x0)) 86.65/27.20 mark(zeros) 86.65/27.20 mark(cons(x0, x1)) 86.65/27.20 mark(nil) 86.65/27.20 mark(take(x0, x1)) 86.65/27.20 mark(uTake1(x0)) 86.65/27.20 mark(uTake2(x0, x1, x2, x3)) 86.65/27.20 mark(uLength(x0, x1)) 86.65/27.20 and(mark(x0), x1) 86.65/27.20 and(x0, mark(x1)) 86.65/27.20 and(active(x0), x1) 86.65/27.20 and(x0, active(x1)) 86.65/27.20 isNatIList(mark(x0)) 86.65/27.20 isNatIList(active(x0)) 86.65/27.20 isNatList(mark(x0)) 86.65/27.20 isNatList(active(x0)) 86.65/27.20 isNat(mark(x0)) 86.65/27.20 isNat(active(x0)) 86.65/27.20 s(mark(x0)) 86.65/27.20 s(active(x0)) 86.65/27.20 length(mark(x0)) 86.65/27.20 length(active(x0)) 86.65/27.20 cons(mark(x0), x1) 86.65/27.20 cons(x0, mark(x1)) 86.65/27.20 cons(active(x0), x1) 86.65/27.20 cons(x0, active(x1)) 86.65/27.20 take(mark(x0), x1) 86.65/27.20 take(x0, mark(x1)) 86.65/27.20 take(active(x0), x1) 86.65/27.20 take(x0, active(x1)) 86.65/27.20 uTake1(mark(x0)) 86.65/27.20 uTake1(active(x0)) 86.65/27.20 uTake2(mark(x0), x1, x2, x3) 86.65/27.20 uTake2(x0, mark(x1), x2, x3) 86.65/27.20 uTake2(x0, x1, mark(x2), x3) 86.65/27.20 uTake2(x0, x1, x2, mark(x3)) 86.65/27.20 uTake2(active(x0), x1, x2, x3) 86.65/27.20 uTake2(x0, active(x1), x2, x3) 86.65/27.20 uTake2(x0, x1, active(x2), x3) 86.65/27.20 uTake2(x0, x1, x2, active(x3)) 86.65/27.20 uLength(mark(x0), x1) 86.65/27.20 uLength(x0, mark(x1)) 86.65/27.20 uLength(active(x0), x1) 86.65/27.20 uLength(x0, active(x1)) 86.65/27.20 86.65/27.20 We have to consider all minimal (P,Q,R)-chains. 86.65/27.20 ---------------------------------------- 86.65/27.20 86.65/27.20 (6) UsableRulesProof (EQUIVALENT) 86.65/27.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. 86.65/27.20 ---------------------------------------- 86.65/27.20 86.65/27.20 (7) 86.65/27.20 Obligation: 86.65/27.20 Q DP problem: 86.65/27.20 The TRS P consists of the following rules: 86.65/27.20 86.65/27.20 ULENGTH(X1, mark(X2)) -> ULENGTH(X1, X2) 86.65/27.20 ULENGTH(mark(X1), X2) -> ULENGTH(X1, X2) 86.65/27.20 ULENGTH(active(X1), X2) -> ULENGTH(X1, X2) 86.65/27.20 ULENGTH(X1, active(X2)) -> ULENGTH(X1, X2) 86.65/27.20 86.65/27.20 R is empty. 86.65/27.20 The set Q consists of the following terms: 86.65/27.20 86.65/27.20 active(and(tt, x0)) 86.65/27.20 active(isNatIList(x0)) 86.65/27.20 active(isNat(0)) 86.65/27.20 active(isNat(s(x0))) 86.65/27.20 active(isNat(length(x0))) 86.65/27.20 active(isNatList(nil)) 86.65/27.20 active(isNatList(cons(x0, x1))) 86.65/27.20 active(isNatList(take(x0, x1))) 86.65/27.20 active(zeros) 86.65/27.20 active(take(0, x0)) 86.65/27.20 active(uTake1(tt)) 86.65/27.20 active(take(s(x0), cons(x1, x2))) 86.65/27.20 active(uTake2(tt, x0, x1, x2)) 86.65/27.20 active(length(cons(x0, x1))) 86.65/27.20 active(uLength(tt, x0)) 86.65/27.20 mark(and(x0, x1)) 86.65/27.20 mark(tt) 86.65/27.20 mark(isNatIList(x0)) 86.65/27.20 mark(isNatList(x0)) 86.65/27.20 mark(isNat(x0)) 86.65/27.20 mark(0) 86.65/27.20 mark(s(x0)) 86.65/27.20 mark(length(x0)) 86.65/27.20 mark(zeros) 86.65/27.20 mark(cons(x0, x1)) 86.65/27.20 mark(nil) 86.65/27.20 mark(take(x0, x1)) 86.65/27.20 mark(uTake1(x0)) 86.65/27.20 mark(uTake2(x0, x1, x2, x3)) 86.65/27.20 mark(uLength(x0, x1)) 86.65/27.20 and(mark(x0), x1) 86.65/27.20 and(x0, mark(x1)) 86.65/27.20 and(active(x0), x1) 86.65/27.20 and(x0, active(x1)) 86.65/27.20 isNatIList(mark(x0)) 86.65/27.20 isNatIList(active(x0)) 86.65/27.20 isNatList(mark(x0)) 86.65/27.20 isNatList(active(x0)) 86.65/27.20 isNat(mark(x0)) 86.65/27.20 isNat(active(x0)) 86.65/27.20 s(mark(x0)) 86.65/27.20 s(active(x0)) 86.65/27.20 length(mark(x0)) 86.65/27.20 length(active(x0)) 86.65/27.20 cons(mark(x0), x1) 86.65/27.20 cons(x0, mark(x1)) 86.65/27.20 cons(active(x0), x1) 86.65/27.20 cons(x0, active(x1)) 86.65/27.20 take(mark(x0), x1) 86.65/27.20 take(x0, mark(x1)) 86.65/27.20 take(active(x0), x1) 86.65/27.20 take(x0, active(x1)) 86.65/27.20 uTake1(mark(x0)) 86.65/27.20 uTake1(active(x0)) 86.65/27.20 uTake2(mark(x0), x1, x2, x3) 86.65/27.20 uTake2(x0, mark(x1), x2, x3) 86.65/27.20 uTake2(x0, x1, mark(x2), x3) 86.65/27.20 uTake2(x0, x1, x2, mark(x3)) 86.65/27.20 uTake2(active(x0), x1, x2, x3) 86.65/27.20 uTake2(x0, active(x1), x2, x3) 86.65/27.20 uTake2(x0, x1, active(x2), x3) 86.65/27.20 uTake2(x0, x1, x2, active(x3)) 86.65/27.20 uLength(mark(x0), x1) 86.65/27.20 uLength(x0, mark(x1)) 86.65/27.20 uLength(active(x0), x1) 86.65/27.20 uLength(x0, active(x1)) 86.65/27.20 86.65/27.20 We have to consider all minimal (P,Q,R)-chains. 86.65/27.20 ---------------------------------------- 86.65/27.20 86.65/27.20 (8) QReductionProof (EQUIVALENT) 86.65/27.20 We deleted the following terms from Q as each root-symbol of these terms does neither occur in P nor in R.[THIEMANN]. 86.65/27.20 86.65/27.20 and(mark(x0), x1) 86.65/27.20 and(x0, mark(x1)) 86.65/27.20 and(active(x0), x1) 86.65/27.20 and(x0, active(x1)) 86.65/27.20 isNatIList(mark(x0)) 86.65/27.20 isNatIList(active(x0)) 86.65/27.20 isNatList(mark(x0)) 86.65/27.20 isNatList(active(x0)) 86.65/27.20 isNat(mark(x0)) 86.65/27.20 isNat(active(x0)) 86.65/27.20 s(mark(x0)) 86.65/27.20 s(active(x0)) 86.65/27.20 length(mark(x0)) 86.65/27.20 length(active(x0)) 86.65/27.20 cons(mark(x0), x1) 86.65/27.20 cons(x0, mark(x1)) 86.65/27.20 cons(active(x0), x1) 86.65/27.20 cons(x0, active(x1)) 86.65/27.20 take(mark(x0), x1) 86.65/27.20 take(x0, mark(x1)) 86.65/27.20 take(active(x0), x1) 86.65/27.20 take(x0, active(x1)) 86.65/27.20 uTake1(mark(x0)) 86.65/27.20 uTake1(active(x0)) 86.65/27.20 uTake2(mark(x0), x1, x2, x3) 86.65/27.20 uTake2(x0, mark(x1), x2, x3) 86.65/27.20 uTake2(x0, x1, mark(x2), x3) 86.65/27.20 uTake2(x0, x1, x2, mark(x3)) 86.65/27.20 uTake2(active(x0), x1, x2, x3) 86.65/27.20 uTake2(x0, active(x1), x2, x3) 86.65/27.20 uTake2(x0, x1, active(x2), x3) 86.65/27.20 uTake2(x0, x1, x2, active(x3)) 86.65/27.20 uLength(mark(x0), x1) 86.65/27.20 uLength(x0, mark(x1)) 86.65/27.20 uLength(active(x0), x1) 86.65/27.20 uLength(x0, active(x1)) 86.65/27.20 86.65/27.20 86.65/27.20 ---------------------------------------- 86.65/27.20 86.65/27.20 (9) 86.65/27.20 Obligation: 86.65/27.20 Q DP problem: 86.65/27.20 The TRS P consists of the following rules: 86.65/27.20 86.65/27.20 ULENGTH(X1, mark(X2)) -> ULENGTH(X1, X2) 86.65/27.20 ULENGTH(mark(X1), X2) -> ULENGTH(X1, X2) 86.65/27.20 ULENGTH(active(X1), X2) -> ULENGTH(X1, X2) 86.65/27.20 ULENGTH(X1, active(X2)) -> ULENGTH(X1, X2) 86.65/27.20 86.65/27.20 R is empty. 86.65/27.20 The set Q consists of the following terms: 86.65/27.20 86.65/27.20 active(and(tt, x0)) 86.65/27.20 active(isNatIList(x0)) 86.65/27.20 active(isNat(0)) 86.65/27.20 active(isNat(s(x0))) 86.65/27.20 active(isNat(length(x0))) 86.65/27.20 active(isNatList(nil)) 86.65/27.20 active(isNatList(cons(x0, x1))) 86.65/27.20 active(isNatList(take(x0, x1))) 86.65/27.20 active(zeros) 86.65/27.20 active(take(0, x0)) 86.65/27.20 active(uTake1(tt)) 86.65/27.20 active(take(s(x0), cons(x1, x2))) 86.65/27.20 active(uTake2(tt, x0, x1, x2)) 86.65/27.20 active(length(cons(x0, x1))) 86.65/27.20 active(uLength(tt, x0)) 86.65/27.20 mark(and(x0, x1)) 86.65/27.20 mark(tt) 86.65/27.20 mark(isNatIList(x0)) 86.65/27.20 mark(isNatList(x0)) 86.65/27.20 mark(isNat(x0)) 86.65/27.20 mark(0) 86.65/27.20 mark(s(x0)) 86.65/27.20 mark(length(x0)) 86.65/27.20 mark(zeros) 86.65/27.20 mark(cons(x0, x1)) 86.65/27.20 mark(nil) 86.65/27.20 mark(take(x0, x1)) 86.65/27.20 mark(uTake1(x0)) 86.65/27.20 mark(uTake2(x0, x1, x2, x3)) 86.65/27.20 mark(uLength(x0, x1)) 86.65/27.20 86.65/27.20 We have to consider all minimal (P,Q,R)-chains. 86.65/27.20 ---------------------------------------- 86.65/27.20 86.65/27.20 (10) QDPSizeChangeProof (EQUIVALENT) 86.65/27.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. 86.65/27.20 86.65/27.20 From the DPs we obtained the following set of size-change graphs: 86.65/27.20 *ULENGTH(X1, mark(X2)) -> ULENGTH(X1, X2) 86.65/27.20 The graph contains the following edges 1 >= 1, 2 > 2 86.65/27.20 86.65/27.20 86.65/27.20 *ULENGTH(mark(X1), X2) -> ULENGTH(X1, X2) 86.65/27.20 The graph contains the following edges 1 > 1, 2 >= 2 86.65/27.20 86.65/27.20 86.65/27.20 *ULENGTH(active(X1), X2) -> ULENGTH(X1, X2) 86.65/27.20 The graph contains the following edges 1 > 1, 2 >= 2 86.65/27.20 86.65/27.20 86.65/27.20 *ULENGTH(X1, active(X2)) -> ULENGTH(X1, X2) 86.65/27.20 The graph contains the following edges 1 >= 1, 2 > 2 86.65/27.20 86.65/27.20 86.65/27.20 ---------------------------------------- 86.65/27.20 86.65/27.20 (11) 86.65/27.20 YES 86.65/27.20 86.65/27.20 ---------------------------------------- 86.65/27.20 86.65/27.20 (12) 86.65/27.20 Obligation: 86.65/27.20 Q DP problem: 86.65/27.20 The TRS P consists of the following rules: 86.65/27.20 86.65/27.20 UTAKE2(X1, mark(X2), X3, X4) -> UTAKE2(X1, X2, X3, X4) 86.65/27.20 UTAKE2(mark(X1), X2, X3, X4) -> UTAKE2(X1, X2, X3, X4) 86.65/27.20 UTAKE2(X1, X2, mark(X3), X4) -> UTAKE2(X1, X2, X3, X4) 86.65/27.20 UTAKE2(X1, X2, X3, mark(X4)) -> UTAKE2(X1, X2, X3, X4) 86.65/27.20 UTAKE2(active(X1), X2, X3, X4) -> UTAKE2(X1, X2, X3, X4) 86.65/27.20 UTAKE2(X1, active(X2), X3, X4) -> UTAKE2(X1, X2, X3, X4) 86.65/27.20 UTAKE2(X1, X2, active(X3), X4) -> UTAKE2(X1, X2, X3, X4) 86.65/27.20 UTAKE2(X1, X2, X3, active(X4)) -> UTAKE2(X1, X2, X3, X4) 86.65/27.20 86.65/27.20 The TRS R consists of the following rules: 86.65/27.20 86.65/27.20 active(and(tt, T)) -> mark(T) 86.65/27.20 active(isNatIList(IL)) -> mark(isNatList(IL)) 86.65/27.20 active(isNat(0)) -> mark(tt) 86.65/27.20 active(isNat(s(N))) -> mark(isNat(N)) 86.65/27.20 active(isNat(length(L))) -> mark(isNatList(L)) 86.65/27.20 active(isNatIList(zeros)) -> mark(tt) 86.65/27.20 active(isNatIList(cons(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.20 active(isNatList(nil)) -> mark(tt) 86.65/27.20 active(isNatList(cons(N, L))) -> mark(and(isNat(N), isNatList(L))) 86.65/27.20 active(isNatList(take(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.20 active(zeros) -> mark(cons(0, zeros)) 86.65/27.20 active(take(0, IL)) -> mark(uTake1(isNatIList(IL))) 86.65/27.20 active(uTake1(tt)) -> mark(nil) 86.65/27.20 active(take(s(M), cons(N, IL))) -> mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL)) 86.65/27.20 active(uTake2(tt, M, N, IL)) -> mark(cons(N, take(M, IL))) 86.65/27.20 active(length(cons(N, L))) -> mark(uLength(and(isNat(N), isNatList(L)), L)) 86.65/27.20 active(uLength(tt, L)) -> mark(s(length(L))) 86.65/27.20 mark(and(X1, X2)) -> active(and(mark(X1), mark(X2))) 86.65/27.20 mark(tt) -> active(tt) 86.65/27.20 mark(isNatIList(X)) -> active(isNatIList(X)) 86.65/27.20 mark(isNatList(X)) -> active(isNatList(X)) 86.65/27.20 mark(isNat(X)) -> active(isNat(X)) 86.65/27.20 mark(0) -> active(0) 86.65/27.20 mark(s(X)) -> active(s(mark(X))) 86.65/27.20 mark(length(X)) -> active(length(mark(X))) 86.65/27.20 mark(zeros) -> active(zeros) 86.65/27.20 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 86.65/27.20 mark(nil) -> active(nil) 86.65/27.20 mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) 86.65/27.20 mark(uTake1(X)) -> active(uTake1(mark(X))) 86.65/27.20 mark(uTake2(X1, X2, X3, X4)) -> active(uTake2(mark(X1), X2, X3, X4)) 86.65/27.20 mark(uLength(X1, X2)) -> active(uLength(mark(X1), X2)) 86.65/27.20 and(mark(X1), X2) -> and(X1, X2) 86.65/27.20 and(X1, mark(X2)) -> and(X1, X2) 86.65/27.20 and(active(X1), X2) -> and(X1, X2) 86.65/27.20 and(X1, active(X2)) -> and(X1, X2) 86.65/27.20 isNatIList(mark(X)) -> isNatIList(X) 86.65/27.20 isNatIList(active(X)) -> isNatIList(X) 86.65/27.20 isNatList(mark(X)) -> isNatList(X) 86.65/27.20 isNatList(active(X)) -> isNatList(X) 86.65/27.20 isNat(mark(X)) -> isNat(X) 86.65/27.20 isNat(active(X)) -> isNat(X) 86.65/27.20 s(mark(X)) -> s(X) 86.65/27.20 s(active(X)) -> s(X) 86.65/27.20 length(mark(X)) -> length(X) 86.65/27.20 length(active(X)) -> length(X) 86.65/27.20 cons(mark(X1), X2) -> cons(X1, X2) 86.65/27.20 cons(X1, mark(X2)) -> cons(X1, X2) 86.65/27.20 cons(active(X1), X2) -> cons(X1, X2) 86.65/27.20 cons(X1, active(X2)) -> cons(X1, X2) 86.65/27.20 take(mark(X1), X2) -> take(X1, X2) 86.65/27.20 take(X1, mark(X2)) -> take(X1, X2) 86.65/27.20 take(active(X1), X2) -> take(X1, X2) 86.65/27.20 take(X1, active(X2)) -> take(X1, X2) 86.65/27.20 uTake1(mark(X)) -> uTake1(X) 86.65/27.20 uTake1(active(X)) -> uTake1(X) 86.65/27.20 uTake2(mark(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.20 uTake2(X1, mark(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.20 uTake2(X1, X2, mark(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.20 uTake2(X1, X2, X3, mark(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.20 uTake2(active(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.20 uTake2(X1, active(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.20 uTake2(X1, X2, active(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.20 uTake2(X1, X2, X3, active(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.20 uLength(mark(X1), X2) -> uLength(X1, X2) 86.65/27.20 uLength(X1, mark(X2)) -> uLength(X1, X2) 86.65/27.20 uLength(active(X1), X2) -> uLength(X1, X2) 86.65/27.20 uLength(X1, active(X2)) -> uLength(X1, X2) 86.65/27.20 86.65/27.20 The set Q consists of the following terms: 86.65/27.20 86.65/27.20 active(and(tt, x0)) 86.65/27.20 active(isNatIList(x0)) 86.65/27.20 active(isNat(0)) 86.65/27.20 active(isNat(s(x0))) 86.65/27.20 active(isNat(length(x0))) 86.65/27.20 active(isNatList(nil)) 86.65/27.20 active(isNatList(cons(x0, x1))) 86.65/27.20 active(isNatList(take(x0, x1))) 86.65/27.20 active(zeros) 86.65/27.20 active(take(0, x0)) 86.65/27.20 active(uTake1(tt)) 86.65/27.20 active(take(s(x0), cons(x1, x2))) 86.65/27.20 active(uTake2(tt, x0, x1, x2)) 86.65/27.20 active(length(cons(x0, x1))) 86.65/27.20 active(uLength(tt, x0)) 86.65/27.20 mark(and(x0, x1)) 86.65/27.20 mark(tt) 86.65/27.20 mark(isNatIList(x0)) 86.65/27.20 mark(isNatList(x0)) 86.65/27.20 mark(isNat(x0)) 86.65/27.20 mark(0) 86.65/27.20 mark(s(x0)) 86.65/27.20 mark(length(x0)) 86.65/27.20 mark(zeros) 86.65/27.20 mark(cons(x0, x1)) 86.65/27.20 mark(nil) 86.65/27.20 mark(take(x0, x1)) 86.65/27.20 mark(uTake1(x0)) 86.65/27.20 mark(uTake2(x0, x1, x2, x3)) 86.65/27.20 mark(uLength(x0, x1)) 86.65/27.20 and(mark(x0), x1) 86.65/27.20 and(x0, mark(x1)) 86.65/27.20 and(active(x0), x1) 86.65/27.20 and(x0, active(x1)) 86.65/27.20 isNatIList(mark(x0)) 86.65/27.20 isNatIList(active(x0)) 86.65/27.20 isNatList(mark(x0)) 86.65/27.20 isNatList(active(x0)) 86.65/27.20 isNat(mark(x0)) 86.65/27.20 isNat(active(x0)) 86.65/27.20 s(mark(x0)) 86.65/27.20 s(active(x0)) 86.65/27.20 length(mark(x0)) 86.65/27.20 length(active(x0)) 86.65/27.20 cons(mark(x0), x1) 86.65/27.20 cons(x0, mark(x1)) 86.65/27.20 cons(active(x0), x1) 86.65/27.20 cons(x0, active(x1)) 86.65/27.20 take(mark(x0), x1) 86.65/27.20 take(x0, mark(x1)) 86.65/27.20 take(active(x0), x1) 86.65/27.20 take(x0, active(x1)) 86.65/27.20 uTake1(mark(x0)) 86.65/27.20 uTake1(active(x0)) 86.65/27.20 uTake2(mark(x0), x1, x2, x3) 86.65/27.20 uTake2(x0, mark(x1), x2, x3) 86.65/27.20 uTake2(x0, x1, mark(x2), x3) 86.65/27.20 uTake2(x0, x1, x2, mark(x3)) 86.65/27.20 uTake2(active(x0), x1, x2, x3) 86.65/27.20 uTake2(x0, active(x1), x2, x3) 86.65/27.20 uTake2(x0, x1, active(x2), x3) 86.65/27.20 uTake2(x0, x1, x2, active(x3)) 86.65/27.20 uLength(mark(x0), x1) 86.65/27.20 uLength(x0, mark(x1)) 86.65/27.20 uLength(active(x0), x1) 86.65/27.20 uLength(x0, active(x1)) 86.65/27.20 86.65/27.20 We have to consider all minimal (P,Q,R)-chains. 86.65/27.20 ---------------------------------------- 86.65/27.20 86.65/27.20 (13) UsableRulesProof (EQUIVALENT) 86.65/27.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. 86.65/27.20 ---------------------------------------- 86.65/27.20 86.65/27.20 (14) 86.65/27.20 Obligation: 86.65/27.20 Q DP problem: 86.65/27.20 The TRS P consists of the following rules: 86.65/27.20 86.65/27.20 UTAKE2(X1, mark(X2), X3, X4) -> UTAKE2(X1, X2, X3, X4) 86.65/27.20 UTAKE2(mark(X1), X2, X3, X4) -> UTAKE2(X1, X2, X3, X4) 86.65/27.20 UTAKE2(X1, X2, mark(X3), X4) -> UTAKE2(X1, X2, X3, X4) 86.65/27.20 UTAKE2(X1, X2, X3, mark(X4)) -> UTAKE2(X1, X2, X3, X4) 86.65/27.20 UTAKE2(active(X1), X2, X3, X4) -> UTAKE2(X1, X2, X3, X4) 86.65/27.20 UTAKE2(X1, active(X2), X3, X4) -> UTAKE2(X1, X2, X3, X4) 86.65/27.20 UTAKE2(X1, X2, active(X3), X4) -> UTAKE2(X1, X2, X3, X4) 86.65/27.20 UTAKE2(X1, X2, X3, active(X4)) -> UTAKE2(X1, X2, X3, X4) 86.65/27.20 86.65/27.20 R is empty. 86.65/27.20 The set Q consists of the following terms: 86.65/27.20 86.65/27.20 active(and(tt, x0)) 86.65/27.20 active(isNatIList(x0)) 86.65/27.20 active(isNat(0)) 86.65/27.20 active(isNat(s(x0))) 86.65/27.20 active(isNat(length(x0))) 86.65/27.20 active(isNatList(nil)) 86.65/27.20 active(isNatList(cons(x0, x1))) 86.65/27.20 active(isNatList(take(x0, x1))) 86.65/27.20 active(zeros) 86.65/27.20 active(take(0, x0)) 86.65/27.20 active(uTake1(tt)) 86.65/27.20 active(take(s(x0), cons(x1, x2))) 86.65/27.20 active(uTake2(tt, x0, x1, x2)) 86.65/27.20 active(length(cons(x0, x1))) 86.65/27.20 active(uLength(tt, x0)) 86.65/27.20 mark(and(x0, x1)) 86.65/27.20 mark(tt) 86.65/27.20 mark(isNatIList(x0)) 86.65/27.20 mark(isNatList(x0)) 86.65/27.20 mark(isNat(x0)) 86.65/27.20 mark(0) 86.65/27.20 mark(s(x0)) 86.65/27.20 mark(length(x0)) 86.65/27.20 mark(zeros) 86.65/27.20 mark(cons(x0, x1)) 86.65/27.20 mark(nil) 86.65/27.20 mark(take(x0, x1)) 86.65/27.20 mark(uTake1(x0)) 86.65/27.20 mark(uTake2(x0, x1, x2, x3)) 86.65/27.20 mark(uLength(x0, x1)) 86.65/27.20 and(mark(x0), x1) 86.65/27.20 and(x0, mark(x1)) 86.65/27.20 and(active(x0), x1) 86.65/27.20 and(x0, active(x1)) 86.65/27.20 isNatIList(mark(x0)) 86.65/27.20 isNatIList(active(x0)) 86.65/27.20 isNatList(mark(x0)) 86.65/27.20 isNatList(active(x0)) 86.65/27.20 isNat(mark(x0)) 86.65/27.20 isNat(active(x0)) 86.65/27.20 s(mark(x0)) 86.65/27.20 s(active(x0)) 86.65/27.20 length(mark(x0)) 86.65/27.20 length(active(x0)) 86.65/27.20 cons(mark(x0), x1) 86.65/27.20 cons(x0, mark(x1)) 86.65/27.20 cons(active(x0), x1) 86.65/27.20 cons(x0, active(x1)) 86.65/27.20 take(mark(x0), x1) 86.65/27.20 take(x0, mark(x1)) 86.65/27.20 take(active(x0), x1) 86.65/27.20 take(x0, active(x1)) 86.65/27.20 uTake1(mark(x0)) 86.65/27.20 uTake1(active(x0)) 86.65/27.20 uTake2(mark(x0), x1, x2, x3) 86.65/27.20 uTake2(x0, mark(x1), x2, x3) 86.65/27.20 uTake2(x0, x1, mark(x2), x3) 86.65/27.20 uTake2(x0, x1, x2, mark(x3)) 86.65/27.20 uTake2(active(x0), x1, x2, x3) 86.65/27.20 uTake2(x0, active(x1), x2, x3) 86.65/27.20 uTake2(x0, x1, active(x2), x3) 86.65/27.20 uTake2(x0, x1, x2, active(x3)) 86.65/27.20 uLength(mark(x0), x1) 86.65/27.20 uLength(x0, mark(x1)) 86.65/27.20 uLength(active(x0), x1) 86.65/27.20 uLength(x0, active(x1)) 86.65/27.20 86.65/27.20 We have to consider all minimal (P,Q,R)-chains. 86.65/27.20 ---------------------------------------- 86.65/27.20 86.65/27.20 (15) QReductionProof (EQUIVALENT) 86.65/27.20 We deleted the following terms from Q as each root-symbol of these terms does neither occur in P nor in R.[THIEMANN]. 86.65/27.20 86.65/27.20 and(mark(x0), x1) 86.65/27.20 and(x0, mark(x1)) 86.65/27.20 and(active(x0), x1) 86.65/27.20 and(x0, active(x1)) 86.65/27.20 isNatIList(mark(x0)) 86.65/27.20 isNatIList(active(x0)) 86.65/27.20 isNatList(mark(x0)) 86.65/27.20 isNatList(active(x0)) 86.65/27.20 isNat(mark(x0)) 86.65/27.20 isNat(active(x0)) 86.65/27.20 s(mark(x0)) 86.65/27.20 s(active(x0)) 86.65/27.20 length(mark(x0)) 86.65/27.20 length(active(x0)) 86.65/27.20 cons(mark(x0), x1) 86.65/27.20 cons(x0, mark(x1)) 86.65/27.20 cons(active(x0), x1) 86.65/27.20 cons(x0, active(x1)) 86.65/27.20 take(mark(x0), x1) 86.65/27.20 take(x0, mark(x1)) 86.65/27.20 take(active(x0), x1) 86.65/27.20 take(x0, active(x1)) 86.65/27.20 uTake1(mark(x0)) 86.65/27.20 uTake1(active(x0)) 86.65/27.20 uTake2(mark(x0), x1, x2, x3) 86.65/27.20 uTake2(x0, mark(x1), x2, x3) 86.65/27.20 uTake2(x0, x1, mark(x2), x3) 86.65/27.20 uTake2(x0, x1, x2, mark(x3)) 86.65/27.20 uTake2(active(x0), x1, x2, x3) 86.65/27.20 uTake2(x0, active(x1), x2, x3) 86.65/27.20 uTake2(x0, x1, active(x2), x3) 86.65/27.20 uTake2(x0, x1, x2, active(x3)) 86.65/27.20 uLength(mark(x0), x1) 86.65/27.20 uLength(x0, mark(x1)) 86.65/27.20 uLength(active(x0), x1) 86.65/27.20 uLength(x0, active(x1)) 86.65/27.20 86.65/27.20 86.65/27.20 ---------------------------------------- 86.65/27.20 86.65/27.20 (16) 86.65/27.20 Obligation: 86.65/27.20 Q DP problem: 86.65/27.20 The TRS P consists of the following rules: 86.65/27.20 86.65/27.20 UTAKE2(X1, mark(X2), X3, X4) -> UTAKE2(X1, X2, X3, X4) 86.65/27.20 UTAKE2(mark(X1), X2, X3, X4) -> UTAKE2(X1, X2, X3, X4) 86.65/27.20 UTAKE2(X1, X2, mark(X3), X4) -> UTAKE2(X1, X2, X3, X4) 86.65/27.20 UTAKE2(X1, X2, X3, mark(X4)) -> UTAKE2(X1, X2, X3, X4) 86.65/27.20 UTAKE2(active(X1), X2, X3, X4) -> UTAKE2(X1, X2, X3, X4) 86.65/27.20 UTAKE2(X1, active(X2), X3, X4) -> UTAKE2(X1, X2, X3, X4) 86.65/27.20 UTAKE2(X1, X2, active(X3), X4) -> UTAKE2(X1, X2, X3, X4) 86.65/27.20 UTAKE2(X1, X2, X3, active(X4)) -> UTAKE2(X1, X2, X3, X4) 86.65/27.20 86.65/27.20 R is empty. 86.65/27.20 The set Q consists of the following terms: 86.65/27.20 86.65/27.20 active(and(tt, x0)) 86.65/27.20 active(isNatIList(x0)) 86.65/27.20 active(isNat(0)) 86.65/27.20 active(isNat(s(x0))) 86.65/27.20 active(isNat(length(x0))) 86.65/27.20 active(isNatList(nil)) 86.65/27.20 active(isNatList(cons(x0, x1))) 86.65/27.20 active(isNatList(take(x0, x1))) 86.65/27.20 active(zeros) 86.65/27.20 active(take(0, x0)) 86.65/27.20 active(uTake1(tt)) 86.65/27.20 active(take(s(x0), cons(x1, x2))) 86.65/27.20 active(uTake2(tt, x0, x1, x2)) 86.65/27.20 active(length(cons(x0, x1))) 86.65/27.20 active(uLength(tt, x0)) 86.65/27.20 mark(and(x0, x1)) 86.65/27.20 mark(tt) 86.65/27.20 mark(isNatIList(x0)) 86.65/27.20 mark(isNatList(x0)) 86.65/27.20 mark(isNat(x0)) 86.65/27.20 mark(0) 86.65/27.20 mark(s(x0)) 86.65/27.20 mark(length(x0)) 86.65/27.20 mark(zeros) 86.65/27.20 mark(cons(x0, x1)) 86.65/27.20 mark(nil) 86.65/27.20 mark(take(x0, x1)) 86.65/27.20 mark(uTake1(x0)) 86.65/27.20 mark(uTake2(x0, x1, x2, x3)) 86.65/27.20 mark(uLength(x0, x1)) 86.65/27.20 86.65/27.20 We have to consider all minimal (P,Q,R)-chains. 86.65/27.20 ---------------------------------------- 86.65/27.20 86.65/27.20 (17) QDPSizeChangeProof (EQUIVALENT) 86.65/27.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. 86.65/27.20 86.65/27.20 From the DPs we obtained the following set of size-change graphs: 86.65/27.20 *UTAKE2(X1, mark(X2), X3, X4) -> UTAKE2(X1, X2, X3, X4) 86.65/27.20 The graph contains the following edges 1 >= 1, 2 > 2, 3 >= 3, 4 >= 4 86.65/27.20 86.65/27.20 86.65/27.20 *UTAKE2(mark(X1), X2, X3, X4) -> UTAKE2(X1, X2, X3, X4) 86.65/27.20 The graph contains the following edges 1 > 1, 2 >= 2, 3 >= 3, 4 >= 4 86.65/27.20 86.65/27.20 86.65/27.20 *UTAKE2(X1, X2, mark(X3), X4) -> UTAKE2(X1, X2, X3, X4) 86.65/27.20 The graph contains the following edges 1 >= 1, 2 >= 2, 3 > 3, 4 >= 4 86.65/27.20 86.65/27.20 86.65/27.20 *UTAKE2(X1, X2, X3, mark(X4)) -> UTAKE2(X1, X2, X3, X4) 86.65/27.20 The graph contains the following edges 1 >= 1, 2 >= 2, 3 >= 3, 4 > 4 86.65/27.20 86.65/27.20 86.65/27.20 *UTAKE2(active(X1), X2, X3, X4) -> UTAKE2(X1, X2, X3, X4) 86.65/27.20 The graph contains the following edges 1 > 1, 2 >= 2, 3 >= 3, 4 >= 4 86.65/27.20 86.65/27.20 86.65/27.20 *UTAKE2(X1, active(X2), X3, X4) -> UTAKE2(X1, X2, X3, X4) 86.65/27.20 The graph contains the following edges 1 >= 1, 2 > 2, 3 >= 3, 4 >= 4 86.65/27.20 86.65/27.20 86.65/27.20 *UTAKE2(X1, X2, active(X3), X4) -> UTAKE2(X1, X2, X3, X4) 86.65/27.20 The graph contains the following edges 1 >= 1, 2 >= 2, 3 > 3, 4 >= 4 86.65/27.20 86.65/27.20 86.65/27.20 *UTAKE2(X1, X2, X3, active(X4)) -> UTAKE2(X1, X2, X3, X4) 86.65/27.20 The graph contains the following edges 1 >= 1, 2 >= 2, 3 >= 3, 4 > 4 86.65/27.20 86.65/27.20 86.65/27.20 ---------------------------------------- 86.65/27.20 86.65/27.20 (18) 86.65/27.20 YES 86.65/27.20 86.65/27.20 ---------------------------------------- 86.65/27.20 86.65/27.20 (19) 86.65/27.20 Obligation: 86.65/27.20 Q DP problem: 86.65/27.20 The TRS P consists of the following rules: 86.65/27.20 86.65/27.20 UTAKE1(active(X)) -> UTAKE1(X) 86.65/27.20 UTAKE1(mark(X)) -> UTAKE1(X) 86.65/27.20 86.65/27.20 The TRS R consists of the following rules: 86.65/27.20 86.65/27.20 active(and(tt, T)) -> mark(T) 86.65/27.20 active(isNatIList(IL)) -> mark(isNatList(IL)) 86.65/27.20 active(isNat(0)) -> mark(tt) 86.65/27.20 active(isNat(s(N))) -> mark(isNat(N)) 86.65/27.20 active(isNat(length(L))) -> mark(isNatList(L)) 86.65/27.20 active(isNatIList(zeros)) -> mark(tt) 86.65/27.20 active(isNatIList(cons(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.20 active(isNatList(nil)) -> mark(tt) 86.65/27.20 active(isNatList(cons(N, L))) -> mark(and(isNat(N), isNatList(L))) 86.65/27.20 active(isNatList(take(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.20 active(zeros) -> mark(cons(0, zeros)) 86.65/27.20 active(take(0, IL)) -> mark(uTake1(isNatIList(IL))) 86.65/27.20 active(uTake1(tt)) -> mark(nil) 86.65/27.20 active(take(s(M), cons(N, IL))) -> mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL)) 86.65/27.20 active(uTake2(tt, M, N, IL)) -> mark(cons(N, take(M, IL))) 86.65/27.20 active(length(cons(N, L))) -> mark(uLength(and(isNat(N), isNatList(L)), L)) 86.65/27.20 active(uLength(tt, L)) -> mark(s(length(L))) 86.65/27.20 mark(and(X1, X2)) -> active(and(mark(X1), mark(X2))) 86.65/27.20 mark(tt) -> active(tt) 86.65/27.20 mark(isNatIList(X)) -> active(isNatIList(X)) 86.65/27.20 mark(isNatList(X)) -> active(isNatList(X)) 86.65/27.20 mark(isNat(X)) -> active(isNat(X)) 86.65/27.20 mark(0) -> active(0) 86.65/27.20 mark(s(X)) -> active(s(mark(X))) 86.65/27.20 mark(length(X)) -> active(length(mark(X))) 86.65/27.20 mark(zeros) -> active(zeros) 86.65/27.20 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 86.65/27.20 mark(nil) -> active(nil) 86.65/27.20 mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) 86.65/27.20 mark(uTake1(X)) -> active(uTake1(mark(X))) 86.65/27.20 mark(uTake2(X1, X2, X3, X4)) -> active(uTake2(mark(X1), X2, X3, X4)) 86.65/27.20 mark(uLength(X1, X2)) -> active(uLength(mark(X1), X2)) 86.65/27.20 and(mark(X1), X2) -> and(X1, X2) 86.65/27.20 and(X1, mark(X2)) -> and(X1, X2) 86.65/27.20 and(active(X1), X2) -> and(X1, X2) 86.65/27.20 and(X1, active(X2)) -> and(X1, X2) 86.65/27.20 isNatIList(mark(X)) -> isNatIList(X) 86.65/27.20 isNatIList(active(X)) -> isNatIList(X) 86.65/27.20 isNatList(mark(X)) -> isNatList(X) 86.65/27.20 isNatList(active(X)) -> isNatList(X) 86.65/27.20 isNat(mark(X)) -> isNat(X) 86.65/27.20 isNat(active(X)) -> isNat(X) 86.65/27.20 s(mark(X)) -> s(X) 86.65/27.20 s(active(X)) -> s(X) 86.65/27.20 length(mark(X)) -> length(X) 86.65/27.20 length(active(X)) -> length(X) 86.65/27.20 cons(mark(X1), X2) -> cons(X1, X2) 86.65/27.20 cons(X1, mark(X2)) -> cons(X1, X2) 86.65/27.20 cons(active(X1), X2) -> cons(X1, X2) 86.65/27.20 cons(X1, active(X2)) -> cons(X1, X2) 86.65/27.20 take(mark(X1), X2) -> take(X1, X2) 86.65/27.20 take(X1, mark(X2)) -> take(X1, X2) 86.65/27.20 take(active(X1), X2) -> take(X1, X2) 86.65/27.20 take(X1, active(X2)) -> take(X1, X2) 86.65/27.20 uTake1(mark(X)) -> uTake1(X) 86.65/27.20 uTake1(active(X)) -> uTake1(X) 86.65/27.20 uTake2(mark(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.20 uTake2(X1, mark(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.20 uTake2(X1, X2, mark(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.20 uTake2(X1, X2, X3, mark(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.20 uTake2(active(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.20 uTake2(X1, active(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.20 uTake2(X1, X2, active(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.20 uTake2(X1, X2, X3, active(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.20 uLength(mark(X1), X2) -> uLength(X1, X2) 86.65/27.20 uLength(X1, mark(X2)) -> uLength(X1, X2) 86.65/27.20 uLength(active(X1), X2) -> uLength(X1, X2) 86.65/27.20 uLength(X1, active(X2)) -> uLength(X1, X2) 86.65/27.20 86.65/27.20 The set Q consists of the following terms: 86.65/27.20 86.65/27.20 active(and(tt, x0)) 86.65/27.20 active(isNatIList(x0)) 86.65/27.20 active(isNat(0)) 86.65/27.20 active(isNat(s(x0))) 86.65/27.20 active(isNat(length(x0))) 86.65/27.20 active(isNatList(nil)) 86.65/27.20 active(isNatList(cons(x0, x1))) 86.65/27.20 active(isNatList(take(x0, x1))) 86.65/27.20 active(zeros) 86.65/27.20 active(take(0, x0)) 86.65/27.20 active(uTake1(tt)) 86.65/27.20 active(take(s(x0), cons(x1, x2))) 86.65/27.20 active(uTake2(tt, x0, x1, x2)) 86.65/27.20 active(length(cons(x0, x1))) 86.65/27.20 active(uLength(tt, x0)) 86.65/27.20 mark(and(x0, x1)) 86.65/27.20 mark(tt) 86.65/27.20 mark(isNatIList(x0)) 86.65/27.20 mark(isNatList(x0)) 86.65/27.20 mark(isNat(x0)) 86.65/27.20 mark(0) 86.65/27.20 mark(s(x0)) 86.65/27.20 mark(length(x0)) 86.65/27.20 mark(zeros) 86.65/27.20 mark(cons(x0, x1)) 86.65/27.20 mark(nil) 86.65/27.20 mark(take(x0, x1)) 86.65/27.20 mark(uTake1(x0)) 86.65/27.20 mark(uTake2(x0, x1, x2, x3)) 86.65/27.20 mark(uLength(x0, x1)) 86.65/27.20 and(mark(x0), x1) 86.65/27.20 and(x0, mark(x1)) 86.65/27.20 and(active(x0), x1) 86.65/27.20 and(x0, active(x1)) 86.65/27.20 isNatIList(mark(x0)) 86.65/27.20 isNatIList(active(x0)) 86.65/27.20 isNatList(mark(x0)) 86.65/27.20 isNatList(active(x0)) 86.65/27.20 isNat(mark(x0)) 86.65/27.20 isNat(active(x0)) 86.65/27.20 s(mark(x0)) 86.65/27.20 s(active(x0)) 86.65/27.20 length(mark(x0)) 86.65/27.20 length(active(x0)) 86.65/27.20 cons(mark(x0), x1) 86.65/27.20 cons(x0, mark(x1)) 86.65/27.20 cons(active(x0), x1) 86.65/27.20 cons(x0, active(x1)) 86.65/27.20 take(mark(x0), x1) 86.65/27.20 take(x0, mark(x1)) 86.65/27.20 take(active(x0), x1) 86.65/27.20 take(x0, active(x1)) 86.65/27.20 uTake1(mark(x0)) 86.65/27.20 uTake1(active(x0)) 86.65/27.20 uTake2(mark(x0), x1, x2, x3) 86.65/27.20 uTake2(x0, mark(x1), x2, x3) 86.65/27.20 uTake2(x0, x1, mark(x2), x3) 86.65/27.20 uTake2(x0, x1, x2, mark(x3)) 86.65/27.20 uTake2(active(x0), x1, x2, x3) 86.65/27.20 uTake2(x0, active(x1), x2, x3) 86.65/27.20 uTake2(x0, x1, active(x2), x3) 86.65/27.20 uTake2(x0, x1, x2, active(x3)) 86.65/27.20 uLength(mark(x0), x1) 86.65/27.20 uLength(x0, mark(x1)) 86.65/27.20 uLength(active(x0), x1) 86.65/27.20 uLength(x0, active(x1)) 86.65/27.20 86.65/27.20 We have to consider all minimal (P,Q,R)-chains. 86.65/27.20 ---------------------------------------- 86.65/27.20 86.65/27.20 (20) UsableRulesProof (EQUIVALENT) 86.65/27.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. 86.65/27.20 ---------------------------------------- 86.65/27.20 86.65/27.20 (21) 86.65/27.20 Obligation: 86.65/27.20 Q DP problem: 86.65/27.20 The TRS P consists of the following rules: 86.65/27.20 86.65/27.20 UTAKE1(active(X)) -> UTAKE1(X) 86.65/27.20 UTAKE1(mark(X)) -> UTAKE1(X) 86.65/27.20 86.65/27.20 R is empty. 86.65/27.20 The set Q consists of the following terms: 86.65/27.20 86.65/27.20 active(and(tt, x0)) 86.65/27.20 active(isNatIList(x0)) 86.65/27.20 active(isNat(0)) 86.65/27.20 active(isNat(s(x0))) 86.65/27.20 active(isNat(length(x0))) 86.65/27.20 active(isNatList(nil)) 86.65/27.20 active(isNatList(cons(x0, x1))) 86.65/27.20 active(isNatList(take(x0, x1))) 86.65/27.20 active(zeros) 86.65/27.20 active(take(0, x0)) 86.65/27.20 active(uTake1(tt)) 86.65/27.20 active(take(s(x0), cons(x1, x2))) 86.65/27.20 active(uTake2(tt, x0, x1, x2)) 86.65/27.20 active(length(cons(x0, x1))) 86.65/27.20 active(uLength(tt, x0)) 86.65/27.20 mark(and(x0, x1)) 86.65/27.20 mark(tt) 86.65/27.20 mark(isNatIList(x0)) 86.65/27.20 mark(isNatList(x0)) 86.65/27.20 mark(isNat(x0)) 86.65/27.20 mark(0) 86.65/27.20 mark(s(x0)) 86.65/27.20 mark(length(x0)) 86.65/27.20 mark(zeros) 86.65/27.20 mark(cons(x0, x1)) 86.65/27.20 mark(nil) 86.65/27.20 mark(take(x0, x1)) 86.65/27.20 mark(uTake1(x0)) 86.65/27.20 mark(uTake2(x0, x1, x2, x3)) 86.65/27.20 mark(uLength(x0, x1)) 86.65/27.20 and(mark(x0), x1) 86.65/27.20 and(x0, mark(x1)) 86.65/27.20 and(active(x0), x1) 86.65/27.20 and(x0, active(x1)) 86.65/27.20 isNatIList(mark(x0)) 86.65/27.20 isNatIList(active(x0)) 86.65/27.20 isNatList(mark(x0)) 86.65/27.20 isNatList(active(x0)) 86.65/27.20 isNat(mark(x0)) 86.65/27.20 isNat(active(x0)) 86.65/27.20 s(mark(x0)) 86.65/27.20 s(active(x0)) 86.65/27.20 length(mark(x0)) 86.65/27.20 length(active(x0)) 86.65/27.20 cons(mark(x0), x1) 86.65/27.20 cons(x0, mark(x1)) 86.65/27.20 cons(active(x0), x1) 86.65/27.20 cons(x0, active(x1)) 86.65/27.20 take(mark(x0), x1) 86.65/27.20 take(x0, mark(x1)) 86.65/27.20 take(active(x0), x1) 86.65/27.20 take(x0, active(x1)) 86.65/27.20 uTake1(mark(x0)) 86.65/27.20 uTake1(active(x0)) 86.65/27.20 uTake2(mark(x0), x1, x2, x3) 86.65/27.20 uTake2(x0, mark(x1), x2, x3) 86.65/27.20 uTake2(x0, x1, mark(x2), x3) 86.65/27.20 uTake2(x0, x1, x2, mark(x3)) 86.65/27.20 uTake2(active(x0), x1, x2, x3) 86.65/27.20 uTake2(x0, active(x1), x2, x3) 86.65/27.20 uTake2(x0, x1, active(x2), x3) 86.65/27.20 uTake2(x0, x1, x2, active(x3)) 86.65/27.20 uLength(mark(x0), x1) 86.65/27.20 uLength(x0, mark(x1)) 86.65/27.20 uLength(active(x0), x1) 86.65/27.20 uLength(x0, active(x1)) 86.65/27.20 86.65/27.20 We have to consider all minimal (P,Q,R)-chains. 86.65/27.20 ---------------------------------------- 86.65/27.20 86.65/27.20 (22) QReductionProof (EQUIVALENT) 86.65/27.20 We deleted the following terms from Q as each root-symbol of these terms does neither occur in P nor in R.[THIEMANN]. 86.65/27.20 86.65/27.20 and(mark(x0), x1) 86.65/27.20 and(x0, mark(x1)) 86.65/27.20 and(active(x0), x1) 86.65/27.20 and(x0, active(x1)) 86.65/27.20 isNatIList(mark(x0)) 86.65/27.20 isNatIList(active(x0)) 86.65/27.20 isNatList(mark(x0)) 86.65/27.20 isNatList(active(x0)) 86.65/27.20 isNat(mark(x0)) 86.65/27.20 isNat(active(x0)) 86.65/27.20 s(mark(x0)) 86.65/27.20 s(active(x0)) 86.65/27.20 length(mark(x0)) 86.65/27.20 length(active(x0)) 86.65/27.20 cons(mark(x0), x1) 86.65/27.20 cons(x0, mark(x1)) 86.65/27.20 cons(active(x0), x1) 86.65/27.20 cons(x0, active(x1)) 86.65/27.20 take(mark(x0), x1) 86.65/27.20 take(x0, mark(x1)) 86.65/27.20 take(active(x0), x1) 86.65/27.20 take(x0, active(x1)) 86.65/27.20 uTake1(mark(x0)) 86.65/27.20 uTake1(active(x0)) 86.65/27.20 uTake2(mark(x0), x1, x2, x3) 86.65/27.20 uTake2(x0, mark(x1), x2, x3) 86.65/27.20 uTake2(x0, x1, mark(x2), x3) 86.65/27.20 uTake2(x0, x1, x2, mark(x3)) 86.65/27.20 uTake2(active(x0), x1, x2, x3) 86.65/27.20 uTake2(x0, active(x1), x2, x3) 86.65/27.20 uTake2(x0, x1, active(x2), x3) 86.65/27.20 uTake2(x0, x1, x2, active(x3)) 86.65/27.20 uLength(mark(x0), x1) 86.65/27.20 uLength(x0, mark(x1)) 86.65/27.20 uLength(active(x0), x1) 86.65/27.20 uLength(x0, active(x1)) 86.65/27.20 86.65/27.20 86.65/27.20 ---------------------------------------- 86.65/27.20 86.65/27.20 (23) 86.65/27.20 Obligation: 86.65/27.20 Q DP problem: 86.65/27.20 The TRS P consists of the following rules: 86.65/27.20 86.65/27.20 UTAKE1(active(X)) -> UTAKE1(X) 86.65/27.20 UTAKE1(mark(X)) -> UTAKE1(X) 86.65/27.20 86.65/27.20 R is empty. 86.65/27.20 The set Q consists of the following terms: 86.65/27.20 86.65/27.20 active(and(tt, x0)) 86.65/27.20 active(isNatIList(x0)) 86.65/27.20 active(isNat(0)) 86.65/27.20 active(isNat(s(x0))) 86.65/27.20 active(isNat(length(x0))) 86.65/27.20 active(isNatList(nil)) 86.65/27.20 active(isNatList(cons(x0, x1))) 86.65/27.20 active(isNatList(take(x0, x1))) 86.65/27.20 active(zeros) 86.65/27.20 active(take(0, x0)) 86.65/27.20 active(uTake1(tt)) 86.65/27.20 active(take(s(x0), cons(x1, x2))) 86.65/27.20 active(uTake2(tt, x0, x1, x2)) 86.65/27.20 active(length(cons(x0, x1))) 86.65/27.20 active(uLength(tt, x0)) 86.65/27.20 mark(and(x0, x1)) 86.65/27.20 mark(tt) 86.65/27.20 mark(isNatIList(x0)) 86.65/27.20 mark(isNatList(x0)) 86.65/27.20 mark(isNat(x0)) 86.65/27.20 mark(0) 86.65/27.20 mark(s(x0)) 86.65/27.20 mark(length(x0)) 86.65/27.20 mark(zeros) 86.65/27.20 mark(cons(x0, x1)) 86.65/27.20 mark(nil) 86.65/27.20 mark(take(x0, x1)) 86.65/27.20 mark(uTake1(x0)) 86.65/27.20 mark(uTake2(x0, x1, x2, x3)) 86.65/27.20 mark(uLength(x0, x1)) 86.65/27.20 86.65/27.20 We have to consider all minimal (P,Q,R)-chains. 86.65/27.20 ---------------------------------------- 86.65/27.20 86.65/27.20 (24) QDPSizeChangeProof (EQUIVALENT) 86.65/27.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. 86.65/27.20 86.65/27.20 From the DPs we obtained the following set of size-change graphs: 86.65/27.20 *UTAKE1(active(X)) -> UTAKE1(X) 86.65/27.20 The graph contains the following edges 1 > 1 86.65/27.20 86.65/27.20 86.65/27.20 *UTAKE1(mark(X)) -> UTAKE1(X) 86.65/27.20 The graph contains the following edges 1 > 1 86.65/27.20 86.65/27.20 86.65/27.20 ---------------------------------------- 86.65/27.20 86.65/27.20 (25) 86.65/27.20 YES 86.65/27.20 86.65/27.20 ---------------------------------------- 86.65/27.20 86.65/27.20 (26) 86.65/27.20 Obligation: 86.65/27.20 Q DP problem: 86.65/27.20 The TRS P consists of the following rules: 86.65/27.20 86.65/27.20 TAKE(X1, mark(X2)) -> TAKE(X1, X2) 86.65/27.20 TAKE(mark(X1), X2) -> TAKE(X1, X2) 86.65/27.20 TAKE(active(X1), X2) -> TAKE(X1, X2) 86.65/27.20 TAKE(X1, active(X2)) -> TAKE(X1, X2) 86.65/27.20 86.65/27.20 The TRS R consists of the following rules: 86.65/27.20 86.65/27.20 active(and(tt, T)) -> mark(T) 86.65/27.20 active(isNatIList(IL)) -> mark(isNatList(IL)) 86.65/27.20 active(isNat(0)) -> mark(tt) 86.65/27.20 active(isNat(s(N))) -> mark(isNat(N)) 86.65/27.20 active(isNat(length(L))) -> mark(isNatList(L)) 86.65/27.20 active(isNatIList(zeros)) -> mark(tt) 86.65/27.20 active(isNatIList(cons(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.20 active(isNatList(nil)) -> mark(tt) 86.65/27.20 active(isNatList(cons(N, L))) -> mark(and(isNat(N), isNatList(L))) 86.65/27.20 active(isNatList(take(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.20 active(zeros) -> mark(cons(0, zeros)) 86.65/27.20 active(take(0, IL)) -> mark(uTake1(isNatIList(IL))) 86.65/27.20 active(uTake1(tt)) -> mark(nil) 86.65/27.20 active(take(s(M), cons(N, IL))) -> mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL)) 86.65/27.20 active(uTake2(tt, M, N, IL)) -> mark(cons(N, take(M, IL))) 86.65/27.20 active(length(cons(N, L))) -> mark(uLength(and(isNat(N), isNatList(L)), L)) 86.65/27.20 active(uLength(tt, L)) -> mark(s(length(L))) 86.65/27.20 mark(and(X1, X2)) -> active(and(mark(X1), mark(X2))) 86.65/27.20 mark(tt) -> active(tt) 86.65/27.20 mark(isNatIList(X)) -> active(isNatIList(X)) 86.65/27.20 mark(isNatList(X)) -> active(isNatList(X)) 86.65/27.20 mark(isNat(X)) -> active(isNat(X)) 86.65/27.20 mark(0) -> active(0) 86.65/27.20 mark(s(X)) -> active(s(mark(X))) 86.65/27.20 mark(length(X)) -> active(length(mark(X))) 86.65/27.20 mark(zeros) -> active(zeros) 86.65/27.20 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 86.65/27.20 mark(nil) -> active(nil) 86.65/27.20 mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) 86.65/27.20 mark(uTake1(X)) -> active(uTake1(mark(X))) 86.65/27.20 mark(uTake2(X1, X2, X3, X4)) -> active(uTake2(mark(X1), X2, X3, X4)) 86.65/27.20 mark(uLength(X1, X2)) -> active(uLength(mark(X1), X2)) 86.65/27.20 and(mark(X1), X2) -> and(X1, X2) 86.65/27.20 and(X1, mark(X2)) -> and(X1, X2) 86.65/27.20 and(active(X1), X2) -> and(X1, X2) 86.65/27.20 and(X1, active(X2)) -> and(X1, X2) 86.65/27.20 isNatIList(mark(X)) -> isNatIList(X) 86.65/27.20 isNatIList(active(X)) -> isNatIList(X) 86.65/27.20 isNatList(mark(X)) -> isNatList(X) 86.65/27.20 isNatList(active(X)) -> isNatList(X) 86.65/27.20 isNat(mark(X)) -> isNat(X) 86.65/27.20 isNat(active(X)) -> isNat(X) 86.65/27.20 s(mark(X)) -> s(X) 86.65/27.20 s(active(X)) -> s(X) 86.65/27.20 length(mark(X)) -> length(X) 86.65/27.20 length(active(X)) -> length(X) 86.65/27.20 cons(mark(X1), X2) -> cons(X1, X2) 86.65/27.20 cons(X1, mark(X2)) -> cons(X1, X2) 86.65/27.20 cons(active(X1), X2) -> cons(X1, X2) 86.65/27.20 cons(X1, active(X2)) -> cons(X1, X2) 86.65/27.20 take(mark(X1), X2) -> take(X1, X2) 86.65/27.20 take(X1, mark(X2)) -> take(X1, X2) 86.65/27.20 take(active(X1), X2) -> take(X1, X2) 86.65/27.20 take(X1, active(X2)) -> take(X1, X2) 86.65/27.20 uTake1(mark(X)) -> uTake1(X) 86.65/27.20 uTake1(active(X)) -> uTake1(X) 86.65/27.20 uTake2(mark(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.20 uTake2(X1, mark(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.20 uTake2(X1, X2, mark(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.20 uTake2(X1, X2, X3, mark(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.20 uTake2(active(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.20 uTake2(X1, active(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.20 uTake2(X1, X2, active(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.20 uTake2(X1, X2, X3, active(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.20 uLength(mark(X1), X2) -> uLength(X1, X2) 86.65/27.20 uLength(X1, mark(X2)) -> uLength(X1, X2) 86.65/27.20 uLength(active(X1), X2) -> uLength(X1, X2) 86.65/27.20 uLength(X1, active(X2)) -> uLength(X1, X2) 86.65/27.20 86.65/27.20 The set Q consists of the following terms: 86.65/27.20 86.65/27.20 active(and(tt, x0)) 86.65/27.20 active(isNatIList(x0)) 86.65/27.20 active(isNat(0)) 86.65/27.20 active(isNat(s(x0))) 86.65/27.20 active(isNat(length(x0))) 86.65/27.20 active(isNatList(nil)) 86.65/27.20 active(isNatList(cons(x0, x1))) 86.65/27.20 active(isNatList(take(x0, x1))) 86.65/27.20 active(zeros) 86.65/27.20 active(take(0, x0)) 86.65/27.20 active(uTake1(tt)) 86.65/27.20 active(take(s(x0), cons(x1, x2))) 86.65/27.20 active(uTake2(tt, x0, x1, x2)) 86.65/27.20 active(length(cons(x0, x1))) 86.65/27.20 active(uLength(tt, x0)) 86.65/27.20 mark(and(x0, x1)) 86.65/27.20 mark(tt) 86.65/27.20 mark(isNatIList(x0)) 86.65/27.20 mark(isNatList(x0)) 86.65/27.20 mark(isNat(x0)) 86.65/27.20 mark(0) 86.65/27.20 mark(s(x0)) 86.65/27.20 mark(length(x0)) 86.65/27.20 mark(zeros) 86.65/27.20 mark(cons(x0, x1)) 86.65/27.20 mark(nil) 86.65/27.20 mark(take(x0, x1)) 86.65/27.20 mark(uTake1(x0)) 86.65/27.20 mark(uTake2(x0, x1, x2, x3)) 86.65/27.20 mark(uLength(x0, x1)) 86.65/27.20 and(mark(x0), x1) 86.65/27.20 and(x0, mark(x1)) 86.65/27.20 and(active(x0), x1) 86.65/27.20 and(x0, active(x1)) 86.65/27.20 isNatIList(mark(x0)) 86.65/27.20 isNatIList(active(x0)) 86.65/27.20 isNatList(mark(x0)) 86.65/27.20 isNatList(active(x0)) 86.65/27.20 isNat(mark(x0)) 86.65/27.20 isNat(active(x0)) 86.65/27.20 s(mark(x0)) 86.65/27.20 s(active(x0)) 86.65/27.20 length(mark(x0)) 86.65/27.20 length(active(x0)) 86.65/27.20 cons(mark(x0), x1) 86.65/27.20 cons(x0, mark(x1)) 86.65/27.20 cons(active(x0), x1) 86.65/27.20 cons(x0, active(x1)) 86.65/27.20 take(mark(x0), x1) 86.65/27.20 take(x0, mark(x1)) 86.65/27.20 take(active(x0), x1) 86.65/27.20 take(x0, active(x1)) 86.65/27.20 uTake1(mark(x0)) 86.65/27.20 uTake1(active(x0)) 86.65/27.20 uTake2(mark(x0), x1, x2, x3) 86.65/27.20 uTake2(x0, mark(x1), x2, x3) 86.65/27.20 uTake2(x0, x1, mark(x2), x3) 86.65/27.20 uTake2(x0, x1, x2, mark(x3)) 86.65/27.20 uTake2(active(x0), x1, x2, x3) 86.65/27.20 uTake2(x0, active(x1), x2, x3) 86.65/27.20 uTake2(x0, x1, active(x2), x3) 86.65/27.20 uTake2(x0, x1, x2, active(x3)) 86.65/27.20 uLength(mark(x0), x1) 86.65/27.20 uLength(x0, mark(x1)) 86.65/27.20 uLength(active(x0), x1) 86.65/27.20 uLength(x0, active(x1)) 86.65/27.20 86.65/27.20 We have to consider all minimal (P,Q,R)-chains. 86.65/27.20 ---------------------------------------- 86.65/27.20 86.65/27.20 (27) UsableRulesProof (EQUIVALENT) 86.65/27.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. 86.65/27.20 ---------------------------------------- 86.65/27.20 86.65/27.20 (28) 86.65/27.20 Obligation: 86.65/27.20 Q DP problem: 86.65/27.20 The TRS P consists of the following rules: 86.65/27.20 86.65/27.20 TAKE(X1, mark(X2)) -> TAKE(X1, X2) 86.65/27.20 TAKE(mark(X1), X2) -> TAKE(X1, X2) 86.65/27.20 TAKE(active(X1), X2) -> TAKE(X1, X2) 86.65/27.20 TAKE(X1, active(X2)) -> TAKE(X1, X2) 86.65/27.20 86.65/27.20 R is empty. 86.65/27.20 The set Q consists of the following terms: 86.65/27.20 86.65/27.20 active(and(tt, x0)) 86.65/27.20 active(isNatIList(x0)) 86.65/27.20 active(isNat(0)) 86.65/27.20 active(isNat(s(x0))) 86.65/27.20 active(isNat(length(x0))) 86.65/27.20 active(isNatList(nil)) 86.65/27.20 active(isNatList(cons(x0, x1))) 86.65/27.20 active(isNatList(take(x0, x1))) 86.65/27.20 active(zeros) 86.65/27.20 active(take(0, x0)) 86.65/27.20 active(uTake1(tt)) 86.65/27.20 active(take(s(x0), cons(x1, x2))) 86.65/27.20 active(uTake2(tt, x0, x1, x2)) 86.65/27.20 active(length(cons(x0, x1))) 86.65/27.20 active(uLength(tt, x0)) 86.65/27.20 mark(and(x0, x1)) 86.65/27.20 mark(tt) 86.65/27.20 mark(isNatIList(x0)) 86.65/27.20 mark(isNatList(x0)) 86.65/27.20 mark(isNat(x0)) 86.65/27.20 mark(0) 86.65/27.20 mark(s(x0)) 86.65/27.20 mark(length(x0)) 86.65/27.20 mark(zeros) 86.65/27.20 mark(cons(x0, x1)) 86.65/27.20 mark(nil) 86.65/27.20 mark(take(x0, x1)) 86.65/27.20 mark(uTake1(x0)) 86.65/27.20 mark(uTake2(x0, x1, x2, x3)) 86.65/27.20 mark(uLength(x0, x1)) 86.65/27.20 and(mark(x0), x1) 86.65/27.20 and(x0, mark(x1)) 86.65/27.20 and(active(x0), x1) 86.65/27.20 and(x0, active(x1)) 86.65/27.20 isNatIList(mark(x0)) 86.65/27.20 isNatIList(active(x0)) 86.65/27.20 isNatList(mark(x0)) 86.65/27.20 isNatList(active(x0)) 86.65/27.20 isNat(mark(x0)) 86.65/27.20 isNat(active(x0)) 86.65/27.20 s(mark(x0)) 86.65/27.20 s(active(x0)) 86.65/27.20 length(mark(x0)) 86.65/27.20 length(active(x0)) 86.65/27.20 cons(mark(x0), x1) 86.65/27.20 cons(x0, mark(x1)) 86.65/27.20 cons(active(x0), x1) 86.65/27.20 cons(x0, active(x1)) 86.65/27.20 take(mark(x0), x1) 86.65/27.20 take(x0, mark(x1)) 86.65/27.20 take(active(x0), x1) 86.65/27.20 take(x0, active(x1)) 86.65/27.20 uTake1(mark(x0)) 86.65/27.20 uTake1(active(x0)) 86.65/27.20 uTake2(mark(x0), x1, x2, x3) 86.65/27.20 uTake2(x0, mark(x1), x2, x3) 86.65/27.20 uTake2(x0, x1, mark(x2), x3) 86.65/27.20 uTake2(x0, x1, x2, mark(x3)) 86.65/27.20 uTake2(active(x0), x1, x2, x3) 86.65/27.20 uTake2(x0, active(x1), x2, x3) 86.65/27.20 uTake2(x0, x1, active(x2), x3) 86.65/27.20 uTake2(x0, x1, x2, active(x3)) 86.65/27.20 uLength(mark(x0), x1) 86.65/27.20 uLength(x0, mark(x1)) 86.65/27.20 uLength(active(x0), x1) 86.65/27.20 uLength(x0, active(x1)) 86.65/27.20 86.65/27.20 We have to consider all minimal (P,Q,R)-chains. 86.65/27.20 ---------------------------------------- 86.65/27.20 86.65/27.20 (29) QReductionProof (EQUIVALENT) 86.65/27.20 We deleted the following terms from Q as each root-symbol of these terms does neither occur in P nor in R.[THIEMANN]. 86.65/27.20 86.65/27.20 and(mark(x0), x1) 86.65/27.20 and(x0, mark(x1)) 86.65/27.20 and(active(x0), x1) 86.65/27.20 and(x0, active(x1)) 86.65/27.20 isNatIList(mark(x0)) 86.65/27.20 isNatIList(active(x0)) 86.65/27.20 isNatList(mark(x0)) 86.65/27.20 isNatList(active(x0)) 86.65/27.20 isNat(mark(x0)) 86.65/27.20 isNat(active(x0)) 86.65/27.20 s(mark(x0)) 86.65/27.20 s(active(x0)) 86.65/27.20 length(mark(x0)) 86.65/27.20 length(active(x0)) 86.65/27.20 cons(mark(x0), x1) 86.65/27.20 cons(x0, mark(x1)) 86.65/27.20 cons(active(x0), x1) 86.65/27.20 cons(x0, active(x1)) 86.65/27.20 take(mark(x0), x1) 86.65/27.20 take(x0, mark(x1)) 86.65/27.20 take(active(x0), x1) 86.65/27.20 take(x0, active(x1)) 86.65/27.20 uTake1(mark(x0)) 86.65/27.20 uTake1(active(x0)) 86.65/27.20 uTake2(mark(x0), x1, x2, x3) 86.65/27.20 uTake2(x0, mark(x1), x2, x3) 86.65/27.20 uTake2(x0, x1, mark(x2), x3) 86.65/27.20 uTake2(x0, x1, x2, mark(x3)) 86.65/27.20 uTake2(active(x0), x1, x2, x3) 86.65/27.20 uTake2(x0, active(x1), x2, x3) 86.65/27.20 uTake2(x0, x1, active(x2), x3) 86.65/27.20 uTake2(x0, x1, x2, active(x3)) 86.65/27.20 uLength(mark(x0), x1) 86.65/27.20 uLength(x0, mark(x1)) 86.65/27.20 uLength(active(x0), x1) 86.65/27.20 uLength(x0, active(x1)) 86.65/27.20 86.65/27.20 86.65/27.20 ---------------------------------------- 86.65/27.20 86.65/27.20 (30) 86.65/27.20 Obligation: 86.65/27.20 Q DP problem: 86.65/27.20 The TRS P consists of the following rules: 86.65/27.20 86.65/27.20 TAKE(X1, mark(X2)) -> TAKE(X1, X2) 86.65/27.20 TAKE(mark(X1), X2) -> TAKE(X1, X2) 86.65/27.20 TAKE(active(X1), X2) -> TAKE(X1, X2) 86.65/27.20 TAKE(X1, active(X2)) -> TAKE(X1, X2) 86.65/27.20 86.65/27.20 R is empty. 86.65/27.20 The set Q consists of the following terms: 86.65/27.20 86.65/27.20 active(and(tt, x0)) 86.65/27.20 active(isNatIList(x0)) 86.65/27.20 active(isNat(0)) 86.65/27.20 active(isNat(s(x0))) 86.65/27.20 active(isNat(length(x0))) 86.65/27.20 active(isNatList(nil)) 86.65/27.20 active(isNatList(cons(x0, x1))) 86.65/27.20 active(isNatList(take(x0, x1))) 86.65/27.20 active(zeros) 86.65/27.20 active(take(0, x0)) 86.65/27.20 active(uTake1(tt)) 86.65/27.20 active(take(s(x0), cons(x1, x2))) 86.65/27.20 active(uTake2(tt, x0, x1, x2)) 86.65/27.20 active(length(cons(x0, x1))) 86.65/27.20 active(uLength(tt, x0)) 86.65/27.20 mark(and(x0, x1)) 86.65/27.20 mark(tt) 86.65/27.20 mark(isNatIList(x0)) 86.65/27.20 mark(isNatList(x0)) 86.65/27.20 mark(isNat(x0)) 86.65/27.20 mark(0) 86.65/27.20 mark(s(x0)) 86.65/27.20 mark(length(x0)) 86.65/27.20 mark(zeros) 86.65/27.20 mark(cons(x0, x1)) 86.65/27.20 mark(nil) 86.65/27.20 mark(take(x0, x1)) 86.65/27.20 mark(uTake1(x0)) 86.65/27.20 mark(uTake2(x0, x1, x2, x3)) 86.65/27.20 mark(uLength(x0, x1)) 86.65/27.20 86.65/27.20 We have to consider all minimal (P,Q,R)-chains. 86.65/27.20 ---------------------------------------- 86.65/27.20 86.65/27.20 (31) QDPSizeChangeProof (EQUIVALENT) 86.65/27.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. 86.65/27.20 86.65/27.20 From the DPs we obtained the following set of size-change graphs: 86.65/27.20 *TAKE(X1, mark(X2)) -> TAKE(X1, X2) 86.65/27.20 The graph contains the following edges 1 >= 1, 2 > 2 86.65/27.20 86.65/27.20 86.65/27.20 *TAKE(mark(X1), X2) -> TAKE(X1, X2) 86.65/27.20 The graph contains the following edges 1 > 1, 2 >= 2 86.65/27.20 86.65/27.20 86.65/27.20 *TAKE(active(X1), X2) -> TAKE(X1, X2) 86.65/27.20 The graph contains the following edges 1 > 1, 2 >= 2 86.65/27.20 86.65/27.20 86.65/27.20 *TAKE(X1, active(X2)) -> TAKE(X1, X2) 86.65/27.20 The graph contains the following edges 1 >= 1, 2 > 2 86.65/27.20 86.65/27.20 86.65/27.20 ---------------------------------------- 86.65/27.20 86.65/27.20 (32) 86.65/27.20 YES 86.65/27.20 86.65/27.20 ---------------------------------------- 86.65/27.20 86.65/27.20 (33) 86.65/27.20 Obligation: 86.65/27.20 Q DP problem: 86.65/27.20 The TRS P consists of the following rules: 86.65/27.20 86.65/27.20 CONS(X1, mark(X2)) -> CONS(X1, X2) 86.65/27.20 CONS(mark(X1), X2) -> CONS(X1, X2) 86.65/27.20 CONS(active(X1), X2) -> CONS(X1, X2) 86.65/27.20 CONS(X1, active(X2)) -> CONS(X1, X2) 86.65/27.20 86.65/27.20 The TRS R consists of the following rules: 86.65/27.20 86.65/27.20 active(and(tt, T)) -> mark(T) 86.65/27.20 active(isNatIList(IL)) -> mark(isNatList(IL)) 86.65/27.20 active(isNat(0)) -> mark(tt) 86.65/27.20 active(isNat(s(N))) -> mark(isNat(N)) 86.65/27.20 active(isNat(length(L))) -> mark(isNatList(L)) 86.65/27.20 active(isNatIList(zeros)) -> mark(tt) 86.65/27.20 active(isNatIList(cons(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.20 active(isNatList(nil)) -> mark(tt) 86.65/27.20 active(isNatList(cons(N, L))) -> mark(and(isNat(N), isNatList(L))) 86.65/27.20 active(isNatList(take(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.20 active(zeros) -> mark(cons(0, zeros)) 86.65/27.20 active(take(0, IL)) -> mark(uTake1(isNatIList(IL))) 86.65/27.20 active(uTake1(tt)) -> mark(nil) 86.65/27.20 active(take(s(M), cons(N, IL))) -> mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL)) 86.65/27.20 active(uTake2(tt, M, N, IL)) -> mark(cons(N, take(M, IL))) 86.65/27.20 active(length(cons(N, L))) -> mark(uLength(and(isNat(N), isNatList(L)), L)) 86.65/27.20 active(uLength(tt, L)) -> mark(s(length(L))) 86.65/27.20 mark(and(X1, X2)) -> active(and(mark(X1), mark(X2))) 86.65/27.20 mark(tt) -> active(tt) 86.65/27.20 mark(isNatIList(X)) -> active(isNatIList(X)) 86.65/27.20 mark(isNatList(X)) -> active(isNatList(X)) 86.65/27.20 mark(isNat(X)) -> active(isNat(X)) 86.65/27.20 mark(0) -> active(0) 86.65/27.20 mark(s(X)) -> active(s(mark(X))) 86.65/27.20 mark(length(X)) -> active(length(mark(X))) 86.65/27.20 mark(zeros) -> active(zeros) 86.65/27.20 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 86.65/27.20 mark(nil) -> active(nil) 86.65/27.20 mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) 86.65/27.20 mark(uTake1(X)) -> active(uTake1(mark(X))) 86.65/27.20 mark(uTake2(X1, X2, X3, X4)) -> active(uTake2(mark(X1), X2, X3, X4)) 86.65/27.20 mark(uLength(X1, X2)) -> active(uLength(mark(X1), X2)) 86.65/27.20 and(mark(X1), X2) -> and(X1, X2) 86.65/27.20 and(X1, mark(X2)) -> and(X1, X2) 86.65/27.20 and(active(X1), X2) -> and(X1, X2) 86.65/27.20 and(X1, active(X2)) -> and(X1, X2) 86.65/27.20 isNatIList(mark(X)) -> isNatIList(X) 86.65/27.20 isNatIList(active(X)) -> isNatIList(X) 86.65/27.20 isNatList(mark(X)) -> isNatList(X) 86.65/27.20 isNatList(active(X)) -> isNatList(X) 86.65/27.20 isNat(mark(X)) -> isNat(X) 86.65/27.20 isNat(active(X)) -> isNat(X) 86.65/27.20 s(mark(X)) -> s(X) 86.65/27.20 s(active(X)) -> s(X) 86.65/27.20 length(mark(X)) -> length(X) 86.65/27.20 length(active(X)) -> length(X) 86.65/27.20 cons(mark(X1), X2) -> cons(X1, X2) 86.65/27.20 cons(X1, mark(X2)) -> cons(X1, X2) 86.65/27.20 cons(active(X1), X2) -> cons(X1, X2) 86.65/27.20 cons(X1, active(X2)) -> cons(X1, X2) 86.65/27.20 take(mark(X1), X2) -> take(X1, X2) 86.65/27.20 take(X1, mark(X2)) -> take(X1, X2) 86.65/27.20 take(active(X1), X2) -> take(X1, X2) 86.65/27.20 take(X1, active(X2)) -> take(X1, X2) 86.65/27.20 uTake1(mark(X)) -> uTake1(X) 86.65/27.20 uTake1(active(X)) -> uTake1(X) 86.65/27.20 uTake2(mark(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.20 uTake2(X1, mark(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.20 uTake2(X1, X2, mark(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.20 uTake2(X1, X2, X3, mark(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.20 uTake2(active(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.20 uTake2(X1, active(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.20 uTake2(X1, X2, active(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.20 uTake2(X1, X2, X3, active(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.20 uLength(mark(X1), X2) -> uLength(X1, X2) 86.65/27.20 uLength(X1, mark(X2)) -> uLength(X1, X2) 86.65/27.20 uLength(active(X1), X2) -> uLength(X1, X2) 86.65/27.20 uLength(X1, active(X2)) -> uLength(X1, X2) 86.65/27.20 86.65/27.20 The set Q consists of the following terms: 86.65/27.20 86.65/27.20 active(and(tt, x0)) 86.65/27.20 active(isNatIList(x0)) 86.65/27.20 active(isNat(0)) 86.65/27.20 active(isNat(s(x0))) 86.65/27.20 active(isNat(length(x0))) 86.65/27.20 active(isNatList(nil)) 86.65/27.20 active(isNatList(cons(x0, x1))) 86.65/27.20 active(isNatList(take(x0, x1))) 86.65/27.20 active(zeros) 86.65/27.20 active(take(0, x0)) 86.65/27.20 active(uTake1(tt)) 86.65/27.20 active(take(s(x0), cons(x1, x2))) 86.65/27.20 active(uTake2(tt, x0, x1, x2)) 86.65/27.20 active(length(cons(x0, x1))) 86.65/27.20 active(uLength(tt, x0)) 86.65/27.20 mark(and(x0, x1)) 86.65/27.20 mark(tt) 86.65/27.20 mark(isNatIList(x0)) 86.65/27.20 mark(isNatList(x0)) 86.65/27.20 mark(isNat(x0)) 86.65/27.20 mark(0) 86.65/27.20 mark(s(x0)) 86.65/27.20 mark(length(x0)) 86.65/27.20 mark(zeros) 86.65/27.20 mark(cons(x0, x1)) 86.65/27.20 mark(nil) 86.65/27.20 mark(take(x0, x1)) 86.65/27.20 mark(uTake1(x0)) 86.65/27.20 mark(uTake2(x0, x1, x2, x3)) 86.65/27.20 mark(uLength(x0, x1)) 86.65/27.20 and(mark(x0), x1) 86.65/27.20 and(x0, mark(x1)) 86.65/27.20 and(active(x0), x1) 86.65/27.20 and(x0, active(x1)) 86.65/27.20 isNatIList(mark(x0)) 86.65/27.20 isNatIList(active(x0)) 86.65/27.20 isNatList(mark(x0)) 86.65/27.20 isNatList(active(x0)) 86.65/27.20 isNat(mark(x0)) 86.65/27.20 isNat(active(x0)) 86.65/27.20 s(mark(x0)) 86.65/27.21 s(active(x0)) 86.65/27.21 length(mark(x0)) 86.65/27.21 length(active(x0)) 86.65/27.21 cons(mark(x0), x1) 86.65/27.21 cons(x0, mark(x1)) 86.65/27.21 cons(active(x0), x1) 86.65/27.21 cons(x0, active(x1)) 86.65/27.21 take(mark(x0), x1) 86.65/27.21 take(x0, mark(x1)) 86.65/27.21 take(active(x0), x1) 86.65/27.21 take(x0, active(x1)) 86.65/27.21 uTake1(mark(x0)) 86.65/27.21 uTake1(active(x0)) 86.65/27.21 uTake2(mark(x0), x1, x2, x3) 86.65/27.21 uTake2(x0, mark(x1), x2, x3) 86.65/27.21 uTake2(x0, x1, mark(x2), x3) 86.65/27.21 uTake2(x0, x1, x2, mark(x3)) 86.65/27.21 uTake2(active(x0), x1, x2, x3) 86.65/27.21 uTake2(x0, active(x1), x2, x3) 86.65/27.21 uTake2(x0, x1, active(x2), x3) 86.65/27.21 uTake2(x0, x1, x2, active(x3)) 86.65/27.21 uLength(mark(x0), x1) 86.65/27.21 uLength(x0, mark(x1)) 86.65/27.21 uLength(active(x0), x1) 86.65/27.21 uLength(x0, active(x1)) 86.65/27.21 86.65/27.21 We have to consider all minimal (P,Q,R)-chains. 86.65/27.21 ---------------------------------------- 86.65/27.21 86.65/27.21 (34) UsableRulesProof (EQUIVALENT) 86.65/27.21 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. 86.65/27.21 ---------------------------------------- 86.65/27.21 86.65/27.21 (35) 86.65/27.21 Obligation: 86.65/27.21 Q DP problem: 86.65/27.21 The TRS P consists of the following rules: 86.65/27.21 86.65/27.21 CONS(X1, mark(X2)) -> CONS(X1, X2) 86.65/27.21 CONS(mark(X1), X2) -> CONS(X1, X2) 86.65/27.21 CONS(active(X1), X2) -> CONS(X1, X2) 86.65/27.21 CONS(X1, active(X2)) -> CONS(X1, X2) 86.65/27.21 86.65/27.21 R is empty. 86.65/27.21 The set Q consists of the following terms: 86.65/27.21 86.65/27.21 active(and(tt, x0)) 86.65/27.21 active(isNatIList(x0)) 86.65/27.21 active(isNat(0)) 86.65/27.21 active(isNat(s(x0))) 86.65/27.21 active(isNat(length(x0))) 86.65/27.21 active(isNatList(nil)) 86.65/27.21 active(isNatList(cons(x0, x1))) 86.65/27.21 active(isNatList(take(x0, x1))) 86.65/27.21 active(zeros) 86.65/27.21 active(take(0, x0)) 86.65/27.21 active(uTake1(tt)) 86.65/27.21 active(take(s(x0), cons(x1, x2))) 86.65/27.21 active(uTake2(tt, x0, x1, x2)) 86.65/27.21 active(length(cons(x0, x1))) 86.65/27.21 active(uLength(tt, x0)) 86.65/27.21 mark(and(x0, x1)) 86.65/27.21 mark(tt) 86.65/27.21 mark(isNatIList(x0)) 86.65/27.21 mark(isNatList(x0)) 86.65/27.21 mark(isNat(x0)) 86.65/27.21 mark(0) 86.65/27.21 mark(s(x0)) 86.65/27.21 mark(length(x0)) 86.65/27.21 mark(zeros) 86.65/27.21 mark(cons(x0, x1)) 86.65/27.21 mark(nil) 86.65/27.21 mark(take(x0, x1)) 86.65/27.21 mark(uTake1(x0)) 86.65/27.21 mark(uTake2(x0, x1, x2, x3)) 86.65/27.21 mark(uLength(x0, x1)) 86.65/27.21 and(mark(x0), x1) 86.65/27.21 and(x0, mark(x1)) 86.65/27.21 and(active(x0), x1) 86.65/27.21 and(x0, active(x1)) 86.65/27.21 isNatIList(mark(x0)) 86.65/27.21 isNatIList(active(x0)) 86.65/27.21 isNatList(mark(x0)) 86.65/27.21 isNatList(active(x0)) 86.65/27.21 isNat(mark(x0)) 86.65/27.21 isNat(active(x0)) 86.65/27.21 s(mark(x0)) 86.65/27.21 s(active(x0)) 86.65/27.21 length(mark(x0)) 86.65/27.21 length(active(x0)) 86.65/27.21 cons(mark(x0), x1) 86.65/27.21 cons(x0, mark(x1)) 86.65/27.21 cons(active(x0), x1) 86.65/27.21 cons(x0, active(x1)) 86.65/27.21 take(mark(x0), x1) 86.65/27.21 take(x0, mark(x1)) 86.65/27.21 take(active(x0), x1) 86.65/27.21 take(x0, active(x1)) 86.65/27.21 uTake1(mark(x0)) 86.65/27.21 uTake1(active(x0)) 86.65/27.21 uTake2(mark(x0), x1, x2, x3) 86.65/27.21 uTake2(x0, mark(x1), x2, x3) 86.65/27.21 uTake2(x0, x1, mark(x2), x3) 86.65/27.21 uTake2(x0, x1, x2, mark(x3)) 86.65/27.21 uTake2(active(x0), x1, x2, x3) 86.65/27.21 uTake2(x0, active(x1), x2, x3) 86.65/27.21 uTake2(x0, x1, active(x2), x3) 86.65/27.21 uTake2(x0, x1, x2, active(x3)) 86.65/27.21 uLength(mark(x0), x1) 86.65/27.21 uLength(x0, mark(x1)) 86.65/27.21 uLength(active(x0), x1) 86.65/27.21 uLength(x0, active(x1)) 86.65/27.21 86.65/27.21 We have to consider all minimal (P,Q,R)-chains. 86.65/27.21 ---------------------------------------- 86.65/27.21 86.65/27.21 (36) QReductionProof (EQUIVALENT) 86.65/27.21 We deleted the following terms from Q as each root-symbol of these terms does neither occur in P nor in R.[THIEMANN]. 86.65/27.21 86.65/27.21 and(mark(x0), x1) 86.65/27.21 and(x0, mark(x1)) 86.65/27.21 and(active(x0), x1) 86.65/27.21 and(x0, active(x1)) 86.65/27.21 isNatIList(mark(x0)) 86.65/27.21 isNatIList(active(x0)) 86.65/27.21 isNatList(mark(x0)) 86.65/27.21 isNatList(active(x0)) 86.65/27.21 isNat(mark(x0)) 86.65/27.21 isNat(active(x0)) 86.65/27.21 s(mark(x0)) 86.65/27.21 s(active(x0)) 86.65/27.21 length(mark(x0)) 86.65/27.21 length(active(x0)) 86.65/27.21 cons(mark(x0), x1) 86.65/27.21 cons(x0, mark(x1)) 86.65/27.21 cons(active(x0), x1) 86.65/27.21 cons(x0, active(x1)) 86.65/27.21 take(mark(x0), x1) 86.65/27.21 take(x0, mark(x1)) 86.65/27.21 take(active(x0), x1) 86.65/27.21 take(x0, active(x1)) 86.65/27.21 uTake1(mark(x0)) 86.65/27.21 uTake1(active(x0)) 86.65/27.21 uTake2(mark(x0), x1, x2, x3) 86.65/27.21 uTake2(x0, mark(x1), x2, x3) 86.65/27.21 uTake2(x0, x1, mark(x2), x3) 86.65/27.21 uTake2(x0, x1, x2, mark(x3)) 86.65/27.21 uTake2(active(x0), x1, x2, x3) 86.65/27.21 uTake2(x0, active(x1), x2, x3) 86.65/27.21 uTake2(x0, x1, active(x2), x3) 86.65/27.21 uTake2(x0, x1, x2, active(x3)) 86.65/27.21 uLength(mark(x0), x1) 86.65/27.21 uLength(x0, mark(x1)) 86.65/27.21 uLength(active(x0), x1) 86.65/27.21 uLength(x0, active(x1)) 86.65/27.21 86.65/27.21 86.65/27.21 ---------------------------------------- 86.65/27.21 86.65/27.21 (37) 86.65/27.21 Obligation: 86.65/27.21 Q DP problem: 86.65/27.21 The TRS P consists of the following rules: 86.65/27.21 86.65/27.21 CONS(X1, mark(X2)) -> CONS(X1, X2) 86.65/27.21 CONS(mark(X1), X2) -> CONS(X1, X2) 86.65/27.21 CONS(active(X1), X2) -> CONS(X1, X2) 86.65/27.21 CONS(X1, active(X2)) -> CONS(X1, X2) 86.65/27.21 86.65/27.21 R is empty. 86.65/27.21 The set Q consists of the following terms: 86.65/27.21 86.65/27.21 active(and(tt, x0)) 86.65/27.21 active(isNatIList(x0)) 86.65/27.21 active(isNat(0)) 86.65/27.21 active(isNat(s(x0))) 86.65/27.21 active(isNat(length(x0))) 86.65/27.21 active(isNatList(nil)) 86.65/27.21 active(isNatList(cons(x0, x1))) 86.65/27.21 active(isNatList(take(x0, x1))) 86.65/27.21 active(zeros) 86.65/27.21 active(take(0, x0)) 86.65/27.21 active(uTake1(tt)) 86.65/27.21 active(take(s(x0), cons(x1, x2))) 86.65/27.21 active(uTake2(tt, x0, x1, x2)) 86.65/27.21 active(length(cons(x0, x1))) 86.65/27.21 active(uLength(tt, x0)) 86.65/27.21 mark(and(x0, x1)) 86.65/27.21 mark(tt) 86.65/27.21 mark(isNatIList(x0)) 86.65/27.21 mark(isNatList(x0)) 86.65/27.21 mark(isNat(x0)) 86.65/27.21 mark(0) 86.65/27.21 mark(s(x0)) 86.65/27.21 mark(length(x0)) 86.65/27.21 mark(zeros) 86.65/27.21 mark(cons(x0, x1)) 86.65/27.21 mark(nil) 86.65/27.21 mark(take(x0, x1)) 86.65/27.21 mark(uTake1(x0)) 86.65/27.21 mark(uTake2(x0, x1, x2, x3)) 86.65/27.21 mark(uLength(x0, x1)) 86.65/27.21 86.65/27.21 We have to consider all minimal (P,Q,R)-chains. 86.65/27.21 ---------------------------------------- 86.65/27.21 86.65/27.21 (38) QDPSizeChangeProof (EQUIVALENT) 86.65/27.21 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. 86.65/27.21 86.65/27.21 From the DPs we obtained the following set of size-change graphs: 86.65/27.21 *CONS(X1, mark(X2)) -> CONS(X1, X2) 86.65/27.21 The graph contains the following edges 1 >= 1, 2 > 2 86.65/27.21 86.65/27.21 86.65/27.21 *CONS(mark(X1), X2) -> CONS(X1, X2) 86.65/27.21 The graph contains the following edges 1 > 1, 2 >= 2 86.65/27.21 86.65/27.21 86.65/27.21 *CONS(active(X1), X2) -> CONS(X1, X2) 86.65/27.21 The graph contains the following edges 1 > 1, 2 >= 2 86.65/27.21 86.65/27.21 86.65/27.21 *CONS(X1, active(X2)) -> CONS(X1, X2) 86.65/27.21 The graph contains the following edges 1 >= 1, 2 > 2 86.65/27.21 86.65/27.21 86.65/27.21 ---------------------------------------- 86.65/27.21 86.65/27.21 (39) 86.65/27.21 YES 86.65/27.21 86.65/27.21 ---------------------------------------- 86.65/27.21 86.65/27.21 (40) 86.65/27.21 Obligation: 86.65/27.21 Q DP problem: 86.65/27.21 The TRS P consists of the following rules: 86.65/27.21 86.65/27.21 LENGTH(active(X)) -> LENGTH(X) 86.65/27.21 LENGTH(mark(X)) -> LENGTH(X) 86.65/27.21 86.65/27.21 The TRS R consists of the following rules: 86.65/27.21 86.65/27.21 active(and(tt, T)) -> mark(T) 86.65/27.21 active(isNatIList(IL)) -> mark(isNatList(IL)) 86.65/27.21 active(isNat(0)) -> mark(tt) 86.65/27.21 active(isNat(s(N))) -> mark(isNat(N)) 86.65/27.21 active(isNat(length(L))) -> mark(isNatList(L)) 86.65/27.21 active(isNatIList(zeros)) -> mark(tt) 86.65/27.21 active(isNatIList(cons(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.21 active(isNatList(nil)) -> mark(tt) 86.65/27.21 active(isNatList(cons(N, L))) -> mark(and(isNat(N), isNatList(L))) 86.65/27.21 active(isNatList(take(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.21 active(zeros) -> mark(cons(0, zeros)) 86.65/27.21 active(take(0, IL)) -> mark(uTake1(isNatIList(IL))) 86.65/27.21 active(uTake1(tt)) -> mark(nil) 86.65/27.21 active(take(s(M), cons(N, IL))) -> mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL)) 86.65/27.21 active(uTake2(tt, M, N, IL)) -> mark(cons(N, take(M, IL))) 86.65/27.21 active(length(cons(N, L))) -> mark(uLength(and(isNat(N), isNatList(L)), L)) 86.65/27.21 active(uLength(tt, L)) -> mark(s(length(L))) 86.65/27.21 mark(and(X1, X2)) -> active(and(mark(X1), mark(X2))) 86.65/27.21 mark(tt) -> active(tt) 86.65/27.21 mark(isNatIList(X)) -> active(isNatIList(X)) 86.65/27.21 mark(isNatList(X)) -> active(isNatList(X)) 86.65/27.21 mark(isNat(X)) -> active(isNat(X)) 86.65/27.21 mark(0) -> active(0) 86.65/27.21 mark(s(X)) -> active(s(mark(X))) 86.65/27.21 mark(length(X)) -> active(length(mark(X))) 86.65/27.21 mark(zeros) -> active(zeros) 86.65/27.21 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 86.65/27.21 mark(nil) -> active(nil) 86.65/27.21 mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) 86.65/27.21 mark(uTake1(X)) -> active(uTake1(mark(X))) 86.65/27.21 mark(uTake2(X1, X2, X3, X4)) -> active(uTake2(mark(X1), X2, X3, X4)) 86.65/27.21 mark(uLength(X1, X2)) -> active(uLength(mark(X1), X2)) 86.65/27.21 and(mark(X1), X2) -> and(X1, X2) 86.65/27.21 and(X1, mark(X2)) -> and(X1, X2) 86.65/27.21 and(active(X1), X2) -> and(X1, X2) 86.65/27.21 and(X1, active(X2)) -> and(X1, X2) 86.65/27.21 isNatIList(mark(X)) -> isNatIList(X) 86.65/27.21 isNatIList(active(X)) -> isNatIList(X) 86.65/27.21 isNatList(mark(X)) -> isNatList(X) 86.65/27.21 isNatList(active(X)) -> isNatList(X) 86.65/27.21 isNat(mark(X)) -> isNat(X) 86.65/27.21 isNat(active(X)) -> isNat(X) 86.65/27.21 s(mark(X)) -> s(X) 86.65/27.21 s(active(X)) -> s(X) 86.65/27.21 length(mark(X)) -> length(X) 86.65/27.21 length(active(X)) -> length(X) 86.65/27.21 cons(mark(X1), X2) -> cons(X1, X2) 86.65/27.21 cons(X1, mark(X2)) -> cons(X1, X2) 86.65/27.21 cons(active(X1), X2) -> cons(X1, X2) 86.65/27.21 cons(X1, active(X2)) -> cons(X1, X2) 86.65/27.21 take(mark(X1), X2) -> take(X1, X2) 86.65/27.21 take(X1, mark(X2)) -> take(X1, X2) 86.65/27.21 take(active(X1), X2) -> take(X1, X2) 86.65/27.21 take(X1, active(X2)) -> take(X1, X2) 86.65/27.21 uTake1(mark(X)) -> uTake1(X) 86.65/27.21 uTake1(active(X)) -> uTake1(X) 86.65/27.21 uTake2(mark(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.21 uTake2(X1, mark(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.21 uTake2(X1, X2, mark(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.21 uTake2(X1, X2, X3, mark(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.21 uTake2(active(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.21 uTake2(X1, active(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.21 uTake2(X1, X2, active(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.21 uTake2(X1, X2, X3, active(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.21 uLength(mark(X1), X2) -> uLength(X1, X2) 86.65/27.21 uLength(X1, mark(X2)) -> uLength(X1, X2) 86.65/27.21 uLength(active(X1), X2) -> uLength(X1, X2) 86.65/27.21 uLength(X1, active(X2)) -> uLength(X1, X2) 86.65/27.21 86.65/27.21 The set Q consists of the following terms: 86.65/27.21 86.65/27.21 active(and(tt, x0)) 86.65/27.21 active(isNatIList(x0)) 86.65/27.21 active(isNat(0)) 86.65/27.21 active(isNat(s(x0))) 86.65/27.21 active(isNat(length(x0))) 86.65/27.21 active(isNatList(nil)) 86.65/27.21 active(isNatList(cons(x0, x1))) 86.65/27.21 active(isNatList(take(x0, x1))) 86.65/27.21 active(zeros) 86.65/27.21 active(take(0, x0)) 86.65/27.21 active(uTake1(tt)) 86.65/27.21 active(take(s(x0), cons(x1, x2))) 86.65/27.21 active(uTake2(tt, x0, x1, x2)) 86.65/27.21 active(length(cons(x0, x1))) 86.65/27.21 active(uLength(tt, x0)) 86.65/27.21 mark(and(x0, x1)) 86.65/27.21 mark(tt) 86.65/27.21 mark(isNatIList(x0)) 86.65/27.21 mark(isNatList(x0)) 86.65/27.21 mark(isNat(x0)) 86.65/27.21 mark(0) 86.65/27.21 mark(s(x0)) 86.65/27.21 mark(length(x0)) 86.65/27.21 mark(zeros) 86.65/27.21 mark(cons(x0, x1)) 86.65/27.21 mark(nil) 86.65/27.21 mark(take(x0, x1)) 86.65/27.21 mark(uTake1(x0)) 86.65/27.21 mark(uTake2(x0, x1, x2, x3)) 86.65/27.21 mark(uLength(x0, x1)) 86.65/27.21 and(mark(x0), x1) 86.65/27.21 and(x0, mark(x1)) 86.65/27.21 and(active(x0), x1) 86.65/27.21 and(x0, active(x1)) 86.65/27.21 isNatIList(mark(x0)) 86.65/27.21 isNatIList(active(x0)) 86.65/27.21 isNatList(mark(x0)) 86.65/27.21 isNatList(active(x0)) 86.65/27.21 isNat(mark(x0)) 86.65/27.21 isNat(active(x0)) 86.65/27.21 s(mark(x0)) 86.65/27.21 s(active(x0)) 86.65/27.21 length(mark(x0)) 86.65/27.21 length(active(x0)) 86.65/27.21 cons(mark(x0), x1) 86.65/27.21 cons(x0, mark(x1)) 86.65/27.21 cons(active(x0), x1) 86.65/27.21 cons(x0, active(x1)) 86.65/27.21 take(mark(x0), x1) 86.65/27.21 take(x0, mark(x1)) 86.65/27.21 take(active(x0), x1) 86.65/27.21 take(x0, active(x1)) 86.65/27.21 uTake1(mark(x0)) 86.65/27.21 uTake1(active(x0)) 86.65/27.21 uTake2(mark(x0), x1, x2, x3) 86.65/27.21 uTake2(x0, mark(x1), x2, x3) 86.65/27.21 uTake2(x0, x1, mark(x2), x3) 86.65/27.21 uTake2(x0, x1, x2, mark(x3)) 86.65/27.21 uTake2(active(x0), x1, x2, x3) 86.65/27.21 uTake2(x0, active(x1), x2, x3) 86.65/27.21 uTake2(x0, x1, active(x2), x3) 86.65/27.21 uTake2(x0, x1, x2, active(x3)) 86.65/27.21 uLength(mark(x0), x1) 86.65/27.21 uLength(x0, mark(x1)) 86.65/27.21 uLength(active(x0), x1) 86.65/27.21 uLength(x0, active(x1)) 86.65/27.21 86.65/27.21 We have to consider all minimal (P,Q,R)-chains. 86.65/27.21 ---------------------------------------- 86.65/27.21 86.65/27.21 (41) UsableRulesProof (EQUIVALENT) 86.65/27.21 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. 86.65/27.21 ---------------------------------------- 86.65/27.21 86.65/27.21 (42) 86.65/27.21 Obligation: 86.65/27.21 Q DP problem: 86.65/27.21 The TRS P consists of the following rules: 86.65/27.21 86.65/27.21 LENGTH(active(X)) -> LENGTH(X) 86.65/27.21 LENGTH(mark(X)) -> LENGTH(X) 86.65/27.21 86.65/27.21 R is empty. 86.65/27.21 The set Q consists of the following terms: 86.65/27.21 86.65/27.21 active(and(tt, x0)) 86.65/27.21 active(isNatIList(x0)) 86.65/27.21 active(isNat(0)) 86.65/27.21 active(isNat(s(x0))) 86.65/27.21 active(isNat(length(x0))) 86.65/27.21 active(isNatList(nil)) 86.65/27.21 active(isNatList(cons(x0, x1))) 86.65/27.21 active(isNatList(take(x0, x1))) 86.65/27.21 active(zeros) 86.65/27.21 active(take(0, x0)) 86.65/27.21 active(uTake1(tt)) 86.65/27.21 active(take(s(x0), cons(x1, x2))) 86.65/27.21 active(uTake2(tt, x0, x1, x2)) 86.65/27.21 active(length(cons(x0, x1))) 86.65/27.21 active(uLength(tt, x0)) 86.65/27.21 mark(and(x0, x1)) 86.65/27.21 mark(tt) 86.65/27.21 mark(isNatIList(x0)) 86.65/27.21 mark(isNatList(x0)) 86.65/27.21 mark(isNat(x0)) 86.65/27.21 mark(0) 86.65/27.21 mark(s(x0)) 86.65/27.21 mark(length(x0)) 86.65/27.21 mark(zeros) 86.65/27.21 mark(cons(x0, x1)) 86.65/27.21 mark(nil) 86.65/27.21 mark(take(x0, x1)) 86.65/27.21 mark(uTake1(x0)) 86.65/27.21 mark(uTake2(x0, x1, x2, x3)) 86.65/27.21 mark(uLength(x0, x1)) 86.65/27.21 and(mark(x0), x1) 86.65/27.21 and(x0, mark(x1)) 86.65/27.21 and(active(x0), x1) 86.65/27.21 and(x0, active(x1)) 86.65/27.21 isNatIList(mark(x0)) 86.65/27.21 isNatIList(active(x0)) 86.65/27.21 isNatList(mark(x0)) 86.65/27.21 isNatList(active(x0)) 86.65/27.21 isNat(mark(x0)) 86.65/27.21 isNat(active(x0)) 86.65/27.21 s(mark(x0)) 86.65/27.21 s(active(x0)) 86.65/27.21 length(mark(x0)) 86.65/27.21 length(active(x0)) 86.65/27.21 cons(mark(x0), x1) 86.65/27.21 cons(x0, mark(x1)) 86.65/27.21 cons(active(x0), x1) 86.65/27.21 cons(x0, active(x1)) 86.65/27.21 take(mark(x0), x1) 86.65/27.21 take(x0, mark(x1)) 86.65/27.21 take(active(x0), x1) 86.65/27.21 take(x0, active(x1)) 86.65/27.21 uTake1(mark(x0)) 86.65/27.21 uTake1(active(x0)) 86.65/27.21 uTake2(mark(x0), x1, x2, x3) 86.65/27.21 uTake2(x0, mark(x1), x2, x3) 86.65/27.21 uTake2(x0, x1, mark(x2), x3) 86.65/27.21 uTake2(x0, x1, x2, mark(x3)) 86.65/27.21 uTake2(active(x0), x1, x2, x3) 86.65/27.21 uTake2(x0, active(x1), x2, x3) 86.65/27.21 uTake2(x0, x1, active(x2), x3) 86.65/27.21 uTake2(x0, x1, x2, active(x3)) 86.65/27.21 uLength(mark(x0), x1) 86.65/27.21 uLength(x0, mark(x1)) 86.65/27.21 uLength(active(x0), x1) 86.65/27.21 uLength(x0, active(x1)) 86.65/27.21 86.65/27.21 We have to consider all minimal (P,Q,R)-chains. 86.65/27.21 ---------------------------------------- 86.65/27.21 86.65/27.21 (43) QReductionProof (EQUIVALENT) 86.65/27.21 We deleted the following terms from Q as each root-symbol of these terms does neither occur in P nor in R.[THIEMANN]. 86.65/27.21 86.65/27.21 and(mark(x0), x1) 86.65/27.21 and(x0, mark(x1)) 86.65/27.21 and(active(x0), x1) 86.65/27.21 and(x0, active(x1)) 86.65/27.21 isNatIList(mark(x0)) 86.65/27.21 isNatIList(active(x0)) 86.65/27.21 isNatList(mark(x0)) 86.65/27.21 isNatList(active(x0)) 86.65/27.21 isNat(mark(x0)) 86.65/27.21 isNat(active(x0)) 86.65/27.21 s(mark(x0)) 86.65/27.21 s(active(x0)) 86.65/27.21 length(mark(x0)) 86.65/27.21 length(active(x0)) 86.65/27.21 cons(mark(x0), x1) 86.65/27.21 cons(x0, mark(x1)) 86.65/27.21 cons(active(x0), x1) 86.65/27.21 cons(x0, active(x1)) 86.65/27.21 take(mark(x0), x1) 86.65/27.21 take(x0, mark(x1)) 86.65/27.21 take(active(x0), x1) 86.65/27.21 take(x0, active(x1)) 86.65/27.21 uTake1(mark(x0)) 86.65/27.21 uTake1(active(x0)) 86.65/27.21 uTake2(mark(x0), x1, x2, x3) 86.65/27.21 uTake2(x0, mark(x1), x2, x3) 86.65/27.21 uTake2(x0, x1, mark(x2), x3) 86.65/27.21 uTake2(x0, x1, x2, mark(x3)) 86.65/27.21 uTake2(active(x0), x1, x2, x3) 86.65/27.21 uTake2(x0, active(x1), x2, x3) 86.65/27.21 uTake2(x0, x1, active(x2), x3) 86.65/27.21 uTake2(x0, x1, x2, active(x3)) 86.65/27.21 uLength(mark(x0), x1) 86.65/27.21 uLength(x0, mark(x1)) 86.65/27.21 uLength(active(x0), x1) 86.65/27.21 uLength(x0, active(x1)) 86.65/27.21 86.65/27.21 86.65/27.21 ---------------------------------------- 86.65/27.21 86.65/27.21 (44) 86.65/27.21 Obligation: 86.65/27.21 Q DP problem: 86.65/27.21 The TRS P consists of the following rules: 86.65/27.21 86.65/27.21 LENGTH(active(X)) -> LENGTH(X) 86.65/27.21 LENGTH(mark(X)) -> LENGTH(X) 86.65/27.21 86.65/27.21 R is empty. 86.65/27.21 The set Q consists of the following terms: 86.65/27.21 86.65/27.21 active(and(tt, x0)) 86.65/27.21 active(isNatIList(x0)) 86.65/27.21 active(isNat(0)) 86.65/27.21 active(isNat(s(x0))) 86.65/27.21 active(isNat(length(x0))) 86.65/27.21 active(isNatList(nil)) 86.65/27.21 active(isNatList(cons(x0, x1))) 86.65/27.21 active(isNatList(take(x0, x1))) 86.65/27.21 active(zeros) 86.65/27.21 active(take(0, x0)) 86.65/27.21 active(uTake1(tt)) 86.65/27.21 active(take(s(x0), cons(x1, x2))) 86.65/27.21 active(uTake2(tt, x0, x1, x2)) 86.65/27.21 active(length(cons(x0, x1))) 86.65/27.21 active(uLength(tt, x0)) 86.65/27.21 mark(and(x0, x1)) 86.65/27.21 mark(tt) 86.65/27.21 mark(isNatIList(x0)) 86.65/27.21 mark(isNatList(x0)) 86.65/27.21 mark(isNat(x0)) 86.65/27.21 mark(0) 86.65/27.21 mark(s(x0)) 86.65/27.21 mark(length(x0)) 86.65/27.21 mark(zeros) 86.65/27.21 mark(cons(x0, x1)) 86.65/27.21 mark(nil) 86.65/27.21 mark(take(x0, x1)) 86.65/27.21 mark(uTake1(x0)) 86.65/27.21 mark(uTake2(x0, x1, x2, x3)) 86.65/27.21 mark(uLength(x0, x1)) 86.65/27.21 86.65/27.21 We have to consider all minimal (P,Q,R)-chains. 86.65/27.21 ---------------------------------------- 86.65/27.21 86.65/27.21 (45) QDPSizeChangeProof (EQUIVALENT) 86.65/27.21 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. 86.65/27.21 86.65/27.21 From the DPs we obtained the following set of size-change graphs: 86.65/27.21 *LENGTH(active(X)) -> LENGTH(X) 86.65/27.21 The graph contains the following edges 1 > 1 86.65/27.21 86.65/27.21 86.65/27.21 *LENGTH(mark(X)) -> LENGTH(X) 86.65/27.21 The graph contains the following edges 1 > 1 86.65/27.21 86.65/27.21 86.65/27.21 ---------------------------------------- 86.65/27.21 86.65/27.21 (46) 86.65/27.21 YES 86.65/27.21 86.65/27.21 ---------------------------------------- 86.65/27.21 86.65/27.21 (47) 86.65/27.21 Obligation: 86.65/27.21 Q DP problem: 86.65/27.21 The TRS P consists of the following rules: 86.65/27.21 86.65/27.21 S(active(X)) -> S(X) 86.65/27.21 S(mark(X)) -> S(X) 86.65/27.21 86.65/27.21 The TRS R consists of the following rules: 86.65/27.21 86.65/27.21 active(and(tt, T)) -> mark(T) 86.65/27.21 active(isNatIList(IL)) -> mark(isNatList(IL)) 86.65/27.21 active(isNat(0)) -> mark(tt) 86.65/27.21 active(isNat(s(N))) -> mark(isNat(N)) 86.65/27.21 active(isNat(length(L))) -> mark(isNatList(L)) 86.65/27.21 active(isNatIList(zeros)) -> mark(tt) 86.65/27.21 active(isNatIList(cons(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.21 active(isNatList(nil)) -> mark(tt) 86.65/27.21 active(isNatList(cons(N, L))) -> mark(and(isNat(N), isNatList(L))) 86.65/27.21 active(isNatList(take(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.21 active(zeros) -> mark(cons(0, zeros)) 86.65/27.21 active(take(0, IL)) -> mark(uTake1(isNatIList(IL))) 86.65/27.21 active(uTake1(tt)) -> mark(nil) 86.65/27.21 active(take(s(M), cons(N, IL))) -> mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL)) 86.65/27.21 active(uTake2(tt, M, N, IL)) -> mark(cons(N, take(M, IL))) 86.65/27.21 active(length(cons(N, L))) -> mark(uLength(and(isNat(N), isNatList(L)), L)) 86.65/27.21 active(uLength(tt, L)) -> mark(s(length(L))) 86.65/27.21 mark(and(X1, X2)) -> active(and(mark(X1), mark(X2))) 86.65/27.21 mark(tt) -> active(tt) 86.65/27.21 mark(isNatIList(X)) -> active(isNatIList(X)) 86.65/27.21 mark(isNatList(X)) -> active(isNatList(X)) 86.65/27.21 mark(isNat(X)) -> active(isNat(X)) 86.65/27.21 mark(0) -> active(0) 86.65/27.21 mark(s(X)) -> active(s(mark(X))) 86.65/27.21 mark(length(X)) -> active(length(mark(X))) 86.65/27.21 mark(zeros) -> active(zeros) 86.65/27.21 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 86.65/27.21 mark(nil) -> active(nil) 86.65/27.21 mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) 86.65/27.21 mark(uTake1(X)) -> active(uTake1(mark(X))) 86.65/27.21 mark(uTake2(X1, X2, X3, X4)) -> active(uTake2(mark(X1), X2, X3, X4)) 86.65/27.21 mark(uLength(X1, X2)) -> active(uLength(mark(X1), X2)) 86.65/27.21 and(mark(X1), X2) -> and(X1, X2) 86.65/27.21 and(X1, mark(X2)) -> and(X1, X2) 86.65/27.21 and(active(X1), X2) -> and(X1, X2) 86.65/27.21 and(X1, active(X2)) -> and(X1, X2) 86.65/27.21 isNatIList(mark(X)) -> isNatIList(X) 86.65/27.21 isNatIList(active(X)) -> isNatIList(X) 86.65/27.21 isNatList(mark(X)) -> isNatList(X) 86.65/27.21 isNatList(active(X)) -> isNatList(X) 86.65/27.21 isNat(mark(X)) -> isNat(X) 86.65/27.21 isNat(active(X)) -> isNat(X) 86.65/27.21 s(mark(X)) -> s(X) 86.65/27.21 s(active(X)) -> s(X) 86.65/27.21 length(mark(X)) -> length(X) 86.65/27.21 length(active(X)) -> length(X) 86.65/27.21 cons(mark(X1), X2) -> cons(X1, X2) 86.65/27.21 cons(X1, mark(X2)) -> cons(X1, X2) 86.65/27.21 cons(active(X1), X2) -> cons(X1, X2) 86.65/27.21 cons(X1, active(X2)) -> cons(X1, X2) 86.65/27.21 take(mark(X1), X2) -> take(X1, X2) 86.65/27.21 take(X1, mark(X2)) -> take(X1, X2) 86.65/27.21 take(active(X1), X2) -> take(X1, X2) 86.65/27.21 take(X1, active(X2)) -> take(X1, X2) 86.65/27.21 uTake1(mark(X)) -> uTake1(X) 86.65/27.21 uTake1(active(X)) -> uTake1(X) 86.65/27.21 uTake2(mark(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.21 uTake2(X1, mark(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.21 uTake2(X1, X2, mark(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.22 uTake2(X1, X2, X3, mark(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.22 uTake2(active(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.22 uTake2(X1, active(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.22 uTake2(X1, X2, active(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.22 uTake2(X1, X2, X3, active(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.22 uLength(mark(X1), X2) -> uLength(X1, X2) 86.65/27.22 uLength(X1, mark(X2)) -> uLength(X1, X2) 86.65/27.22 uLength(active(X1), X2) -> uLength(X1, X2) 86.65/27.22 uLength(X1, active(X2)) -> uLength(X1, X2) 86.65/27.22 86.65/27.22 The set Q consists of the following terms: 86.65/27.22 86.65/27.22 active(and(tt, x0)) 86.65/27.22 active(isNatIList(x0)) 86.65/27.22 active(isNat(0)) 86.65/27.22 active(isNat(s(x0))) 86.65/27.22 active(isNat(length(x0))) 86.65/27.22 active(isNatList(nil)) 86.65/27.22 active(isNatList(cons(x0, x1))) 86.65/27.22 active(isNatList(take(x0, x1))) 86.65/27.22 active(zeros) 86.65/27.22 active(take(0, x0)) 86.65/27.22 active(uTake1(tt)) 86.65/27.22 active(take(s(x0), cons(x1, x2))) 86.65/27.22 active(uTake2(tt, x0, x1, x2)) 86.65/27.22 active(length(cons(x0, x1))) 86.65/27.22 active(uLength(tt, x0)) 86.65/27.22 mark(and(x0, x1)) 86.65/27.22 mark(tt) 86.65/27.22 mark(isNatIList(x0)) 86.65/27.22 mark(isNatList(x0)) 86.65/27.22 mark(isNat(x0)) 86.65/27.22 mark(0) 86.65/27.22 mark(s(x0)) 86.65/27.22 mark(length(x0)) 86.65/27.22 mark(zeros) 86.65/27.22 mark(cons(x0, x1)) 86.65/27.22 mark(nil) 86.65/27.22 mark(take(x0, x1)) 86.65/27.22 mark(uTake1(x0)) 86.65/27.22 mark(uTake2(x0, x1, x2, x3)) 86.65/27.22 mark(uLength(x0, x1)) 86.65/27.22 and(mark(x0), x1) 86.65/27.22 and(x0, mark(x1)) 86.65/27.22 and(active(x0), x1) 86.65/27.22 and(x0, active(x1)) 86.65/27.22 isNatIList(mark(x0)) 86.65/27.22 isNatIList(active(x0)) 86.65/27.22 isNatList(mark(x0)) 86.65/27.22 isNatList(active(x0)) 86.65/27.22 isNat(mark(x0)) 86.65/27.22 isNat(active(x0)) 86.65/27.22 s(mark(x0)) 86.65/27.22 s(active(x0)) 86.65/27.22 length(mark(x0)) 86.65/27.22 length(active(x0)) 86.65/27.22 cons(mark(x0), x1) 86.65/27.22 cons(x0, mark(x1)) 86.65/27.22 cons(active(x0), x1) 86.65/27.22 cons(x0, active(x1)) 86.65/27.22 take(mark(x0), x1) 86.65/27.22 take(x0, mark(x1)) 86.65/27.22 take(active(x0), x1) 86.65/27.22 take(x0, active(x1)) 86.65/27.22 uTake1(mark(x0)) 86.65/27.22 uTake1(active(x0)) 86.65/27.22 uTake2(mark(x0), x1, x2, x3) 86.65/27.22 uTake2(x0, mark(x1), x2, x3) 86.65/27.22 uTake2(x0, x1, mark(x2), x3) 86.65/27.22 uTake2(x0, x1, x2, mark(x3)) 86.65/27.22 uTake2(active(x0), x1, x2, x3) 86.65/27.22 uTake2(x0, active(x1), x2, x3) 86.65/27.22 uTake2(x0, x1, active(x2), x3) 86.65/27.22 uTake2(x0, x1, x2, active(x3)) 86.65/27.22 uLength(mark(x0), x1) 86.65/27.22 uLength(x0, mark(x1)) 86.65/27.22 uLength(active(x0), x1) 86.65/27.22 uLength(x0, active(x1)) 86.65/27.22 86.65/27.22 We have to consider all minimal (P,Q,R)-chains. 86.65/27.22 ---------------------------------------- 86.65/27.22 86.65/27.22 (48) UsableRulesProof (EQUIVALENT) 86.65/27.22 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. 86.65/27.22 ---------------------------------------- 86.65/27.22 86.65/27.22 (49) 86.65/27.22 Obligation: 86.65/27.22 Q DP problem: 86.65/27.22 The TRS P consists of the following rules: 86.65/27.22 86.65/27.22 S(active(X)) -> S(X) 86.65/27.22 S(mark(X)) -> S(X) 86.65/27.22 86.65/27.22 R is empty. 86.65/27.22 The set Q consists of the following terms: 86.65/27.22 86.65/27.22 active(and(tt, x0)) 86.65/27.22 active(isNatIList(x0)) 86.65/27.22 active(isNat(0)) 86.65/27.22 active(isNat(s(x0))) 86.65/27.22 active(isNat(length(x0))) 86.65/27.22 active(isNatList(nil)) 86.65/27.22 active(isNatList(cons(x0, x1))) 86.65/27.22 active(isNatList(take(x0, x1))) 86.65/27.22 active(zeros) 86.65/27.22 active(take(0, x0)) 86.65/27.22 active(uTake1(tt)) 86.65/27.22 active(take(s(x0), cons(x1, x2))) 86.65/27.22 active(uTake2(tt, x0, x1, x2)) 86.65/27.22 active(length(cons(x0, x1))) 86.65/27.22 active(uLength(tt, x0)) 86.65/27.22 mark(and(x0, x1)) 86.65/27.22 mark(tt) 86.65/27.22 mark(isNatIList(x0)) 86.65/27.22 mark(isNatList(x0)) 86.65/27.22 mark(isNat(x0)) 86.65/27.22 mark(0) 86.65/27.22 mark(s(x0)) 86.65/27.22 mark(length(x0)) 86.65/27.22 mark(zeros) 86.65/27.22 mark(cons(x0, x1)) 86.65/27.22 mark(nil) 86.65/27.22 mark(take(x0, x1)) 86.65/27.22 mark(uTake1(x0)) 86.65/27.22 mark(uTake2(x0, x1, x2, x3)) 86.65/27.22 mark(uLength(x0, x1)) 86.65/27.22 and(mark(x0), x1) 86.65/27.22 and(x0, mark(x1)) 86.65/27.22 and(active(x0), x1) 86.65/27.22 and(x0, active(x1)) 86.65/27.22 isNatIList(mark(x0)) 86.65/27.22 isNatIList(active(x0)) 86.65/27.22 isNatList(mark(x0)) 86.65/27.22 isNatList(active(x0)) 86.65/27.22 isNat(mark(x0)) 86.65/27.22 isNat(active(x0)) 86.65/27.22 s(mark(x0)) 86.65/27.22 s(active(x0)) 86.65/27.22 length(mark(x0)) 86.65/27.22 length(active(x0)) 86.65/27.22 cons(mark(x0), x1) 86.65/27.22 cons(x0, mark(x1)) 86.65/27.22 cons(active(x0), x1) 86.65/27.22 cons(x0, active(x1)) 86.65/27.22 take(mark(x0), x1) 86.65/27.22 take(x0, mark(x1)) 86.65/27.22 take(active(x0), x1) 86.65/27.22 take(x0, active(x1)) 86.65/27.22 uTake1(mark(x0)) 86.65/27.22 uTake1(active(x0)) 86.65/27.22 uTake2(mark(x0), x1, x2, x3) 86.65/27.22 uTake2(x0, mark(x1), x2, x3) 86.65/27.22 uTake2(x0, x1, mark(x2), x3) 86.65/27.22 uTake2(x0, x1, x2, mark(x3)) 86.65/27.22 uTake2(active(x0), x1, x2, x3) 86.65/27.22 uTake2(x0, active(x1), x2, x3) 86.65/27.22 uTake2(x0, x1, active(x2), x3) 86.65/27.22 uTake2(x0, x1, x2, active(x3)) 86.65/27.22 uLength(mark(x0), x1) 86.65/27.22 uLength(x0, mark(x1)) 86.65/27.22 uLength(active(x0), x1) 86.65/27.22 uLength(x0, active(x1)) 86.65/27.22 86.65/27.22 We have to consider all minimal (P,Q,R)-chains. 86.65/27.22 ---------------------------------------- 86.65/27.22 86.65/27.22 (50) QReductionProof (EQUIVALENT) 86.65/27.22 We deleted the following terms from Q as each root-symbol of these terms does neither occur in P nor in R.[THIEMANN]. 86.65/27.22 86.65/27.22 and(mark(x0), x1) 86.65/27.22 and(x0, mark(x1)) 86.65/27.22 and(active(x0), x1) 86.65/27.22 and(x0, active(x1)) 86.65/27.22 isNatIList(mark(x0)) 86.65/27.22 isNatIList(active(x0)) 86.65/27.22 isNatList(mark(x0)) 86.65/27.22 isNatList(active(x0)) 86.65/27.22 isNat(mark(x0)) 86.65/27.22 isNat(active(x0)) 86.65/27.22 s(mark(x0)) 86.65/27.22 s(active(x0)) 86.65/27.22 length(mark(x0)) 86.65/27.22 length(active(x0)) 86.65/27.22 cons(mark(x0), x1) 86.65/27.22 cons(x0, mark(x1)) 86.65/27.22 cons(active(x0), x1) 86.65/27.22 cons(x0, active(x1)) 86.65/27.22 take(mark(x0), x1) 86.65/27.22 take(x0, mark(x1)) 86.65/27.22 take(active(x0), x1) 86.65/27.22 take(x0, active(x1)) 86.65/27.22 uTake1(mark(x0)) 86.65/27.22 uTake1(active(x0)) 86.65/27.22 uTake2(mark(x0), x1, x2, x3) 86.65/27.22 uTake2(x0, mark(x1), x2, x3) 86.65/27.22 uTake2(x0, x1, mark(x2), x3) 86.65/27.22 uTake2(x0, x1, x2, mark(x3)) 86.65/27.22 uTake2(active(x0), x1, x2, x3) 86.65/27.22 uTake2(x0, active(x1), x2, x3) 86.65/27.22 uTake2(x0, x1, active(x2), x3) 86.65/27.22 uTake2(x0, x1, x2, active(x3)) 86.65/27.22 uLength(mark(x0), x1) 86.65/27.22 uLength(x0, mark(x1)) 86.65/27.22 uLength(active(x0), x1) 86.65/27.22 uLength(x0, active(x1)) 86.65/27.22 86.65/27.22 86.65/27.22 ---------------------------------------- 86.65/27.22 86.65/27.22 (51) 86.65/27.22 Obligation: 86.65/27.22 Q DP problem: 86.65/27.22 The TRS P consists of the following rules: 86.65/27.22 86.65/27.22 S(active(X)) -> S(X) 86.65/27.22 S(mark(X)) -> S(X) 86.65/27.22 86.65/27.22 R is empty. 86.65/27.22 The set Q consists of the following terms: 86.65/27.22 86.65/27.22 active(and(tt, x0)) 86.65/27.22 active(isNatIList(x0)) 86.65/27.22 active(isNat(0)) 86.65/27.22 active(isNat(s(x0))) 86.65/27.22 active(isNat(length(x0))) 86.65/27.22 active(isNatList(nil)) 86.65/27.22 active(isNatList(cons(x0, x1))) 86.65/27.22 active(isNatList(take(x0, x1))) 86.65/27.22 active(zeros) 86.65/27.22 active(take(0, x0)) 86.65/27.22 active(uTake1(tt)) 86.65/27.22 active(take(s(x0), cons(x1, x2))) 86.65/27.22 active(uTake2(tt, x0, x1, x2)) 86.65/27.22 active(length(cons(x0, x1))) 86.65/27.22 active(uLength(tt, x0)) 86.65/27.22 mark(and(x0, x1)) 86.65/27.22 mark(tt) 86.65/27.22 mark(isNatIList(x0)) 86.65/27.22 mark(isNatList(x0)) 86.65/27.22 mark(isNat(x0)) 86.65/27.22 mark(0) 86.65/27.22 mark(s(x0)) 86.65/27.22 mark(length(x0)) 86.65/27.22 mark(zeros) 86.65/27.22 mark(cons(x0, x1)) 86.65/27.22 mark(nil) 86.65/27.22 mark(take(x0, x1)) 86.65/27.22 mark(uTake1(x0)) 86.65/27.22 mark(uTake2(x0, x1, x2, x3)) 86.65/27.22 mark(uLength(x0, x1)) 86.65/27.22 86.65/27.22 We have to consider all minimal (P,Q,R)-chains. 86.65/27.22 ---------------------------------------- 86.65/27.22 86.65/27.22 (52) QDPSizeChangeProof (EQUIVALENT) 86.65/27.22 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. 86.65/27.22 86.65/27.22 From the DPs we obtained the following set of size-change graphs: 86.65/27.22 *S(active(X)) -> S(X) 86.65/27.22 The graph contains the following edges 1 > 1 86.65/27.22 86.65/27.22 86.65/27.22 *S(mark(X)) -> S(X) 86.65/27.22 The graph contains the following edges 1 > 1 86.65/27.22 86.65/27.22 86.65/27.22 ---------------------------------------- 86.65/27.22 86.65/27.22 (53) 86.65/27.22 YES 86.65/27.22 86.65/27.22 ---------------------------------------- 86.65/27.22 86.65/27.22 (54) 86.65/27.22 Obligation: 86.65/27.22 Q DP problem: 86.65/27.22 The TRS P consists of the following rules: 86.65/27.22 86.65/27.22 ISNAT(active(X)) -> ISNAT(X) 86.65/27.22 ISNAT(mark(X)) -> ISNAT(X) 86.65/27.22 86.65/27.22 The TRS R consists of the following rules: 86.65/27.22 86.65/27.22 active(and(tt, T)) -> mark(T) 86.65/27.22 active(isNatIList(IL)) -> mark(isNatList(IL)) 86.65/27.22 active(isNat(0)) -> mark(tt) 86.65/27.22 active(isNat(s(N))) -> mark(isNat(N)) 86.65/27.22 active(isNat(length(L))) -> mark(isNatList(L)) 86.65/27.22 active(isNatIList(zeros)) -> mark(tt) 86.65/27.22 active(isNatIList(cons(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.22 active(isNatList(nil)) -> mark(tt) 86.65/27.22 active(isNatList(cons(N, L))) -> mark(and(isNat(N), isNatList(L))) 86.65/27.22 active(isNatList(take(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.22 active(zeros) -> mark(cons(0, zeros)) 86.65/27.22 active(take(0, IL)) -> mark(uTake1(isNatIList(IL))) 86.65/27.22 active(uTake1(tt)) -> mark(nil) 86.65/27.22 active(take(s(M), cons(N, IL))) -> mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL)) 86.65/27.22 active(uTake2(tt, M, N, IL)) -> mark(cons(N, take(M, IL))) 86.65/27.22 active(length(cons(N, L))) -> mark(uLength(and(isNat(N), isNatList(L)), L)) 86.65/27.22 active(uLength(tt, L)) -> mark(s(length(L))) 86.65/27.22 mark(and(X1, X2)) -> active(and(mark(X1), mark(X2))) 86.65/27.22 mark(tt) -> active(tt) 86.65/27.22 mark(isNatIList(X)) -> active(isNatIList(X)) 86.65/27.22 mark(isNatList(X)) -> active(isNatList(X)) 86.65/27.22 mark(isNat(X)) -> active(isNat(X)) 86.65/27.22 mark(0) -> active(0) 86.65/27.22 mark(s(X)) -> active(s(mark(X))) 86.65/27.22 mark(length(X)) -> active(length(mark(X))) 86.65/27.22 mark(zeros) -> active(zeros) 86.65/27.22 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 86.65/27.22 mark(nil) -> active(nil) 86.65/27.22 mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) 86.65/27.22 mark(uTake1(X)) -> active(uTake1(mark(X))) 86.65/27.22 mark(uTake2(X1, X2, X3, X4)) -> active(uTake2(mark(X1), X2, X3, X4)) 86.65/27.22 mark(uLength(X1, X2)) -> active(uLength(mark(X1), X2)) 86.65/27.22 and(mark(X1), X2) -> and(X1, X2) 86.65/27.22 and(X1, mark(X2)) -> and(X1, X2) 86.65/27.22 and(active(X1), X2) -> and(X1, X2) 86.65/27.22 and(X1, active(X2)) -> and(X1, X2) 86.65/27.22 isNatIList(mark(X)) -> isNatIList(X) 86.65/27.22 isNatIList(active(X)) -> isNatIList(X) 86.65/27.22 isNatList(mark(X)) -> isNatList(X) 86.65/27.22 isNatList(active(X)) -> isNatList(X) 86.65/27.22 isNat(mark(X)) -> isNat(X) 86.65/27.22 isNat(active(X)) -> isNat(X) 86.65/27.22 s(mark(X)) -> s(X) 86.65/27.22 s(active(X)) -> s(X) 86.65/27.22 length(mark(X)) -> length(X) 86.65/27.22 length(active(X)) -> length(X) 86.65/27.22 cons(mark(X1), X2) -> cons(X1, X2) 86.65/27.22 cons(X1, mark(X2)) -> cons(X1, X2) 86.65/27.22 cons(active(X1), X2) -> cons(X1, X2) 86.65/27.22 cons(X1, active(X2)) -> cons(X1, X2) 86.65/27.22 take(mark(X1), X2) -> take(X1, X2) 86.65/27.22 take(X1, mark(X2)) -> take(X1, X2) 86.65/27.22 take(active(X1), X2) -> take(X1, X2) 86.65/27.22 take(X1, active(X2)) -> take(X1, X2) 86.65/27.22 uTake1(mark(X)) -> uTake1(X) 86.65/27.22 uTake1(active(X)) -> uTake1(X) 86.65/27.22 uTake2(mark(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.22 uTake2(X1, mark(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.22 uTake2(X1, X2, mark(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.22 uTake2(X1, X2, X3, mark(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.22 uTake2(active(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.22 uTake2(X1, active(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.22 uTake2(X1, X2, active(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.22 uTake2(X1, X2, X3, active(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.22 uLength(mark(X1), X2) -> uLength(X1, X2) 86.65/27.22 uLength(X1, mark(X2)) -> uLength(X1, X2) 86.65/27.22 uLength(active(X1), X2) -> uLength(X1, X2) 86.65/27.22 uLength(X1, active(X2)) -> uLength(X1, X2) 86.65/27.22 86.65/27.22 The set Q consists of the following terms: 86.65/27.22 86.65/27.22 active(and(tt, x0)) 86.65/27.22 active(isNatIList(x0)) 86.65/27.22 active(isNat(0)) 86.65/27.22 active(isNat(s(x0))) 86.65/27.22 active(isNat(length(x0))) 86.65/27.22 active(isNatList(nil)) 86.65/27.22 active(isNatList(cons(x0, x1))) 86.65/27.22 active(isNatList(take(x0, x1))) 86.65/27.22 active(zeros) 86.65/27.22 active(take(0, x0)) 86.65/27.22 active(uTake1(tt)) 86.65/27.22 active(take(s(x0), cons(x1, x2))) 86.65/27.22 active(uTake2(tt, x0, x1, x2)) 86.65/27.22 active(length(cons(x0, x1))) 86.65/27.22 active(uLength(tt, x0)) 86.65/27.22 mark(and(x0, x1)) 86.65/27.22 mark(tt) 86.65/27.22 mark(isNatIList(x0)) 86.65/27.22 mark(isNatList(x0)) 86.65/27.22 mark(isNat(x0)) 86.65/27.22 mark(0) 86.65/27.22 mark(s(x0)) 86.65/27.22 mark(length(x0)) 86.65/27.22 mark(zeros) 86.65/27.22 mark(cons(x0, x1)) 86.65/27.22 mark(nil) 86.65/27.22 mark(take(x0, x1)) 86.65/27.22 mark(uTake1(x0)) 86.65/27.22 mark(uTake2(x0, x1, x2, x3)) 86.65/27.22 mark(uLength(x0, x1)) 86.65/27.22 and(mark(x0), x1) 86.65/27.22 and(x0, mark(x1)) 86.65/27.22 and(active(x0), x1) 86.65/27.22 and(x0, active(x1)) 86.65/27.22 isNatIList(mark(x0)) 86.65/27.22 isNatIList(active(x0)) 86.65/27.22 isNatList(mark(x0)) 86.65/27.22 isNatList(active(x0)) 86.65/27.22 isNat(mark(x0)) 86.65/27.22 isNat(active(x0)) 86.65/27.22 s(mark(x0)) 86.65/27.22 s(active(x0)) 86.65/27.22 length(mark(x0)) 86.65/27.22 length(active(x0)) 86.65/27.22 cons(mark(x0), x1) 86.65/27.22 cons(x0, mark(x1)) 86.65/27.22 cons(active(x0), x1) 86.65/27.22 cons(x0, active(x1)) 86.65/27.22 take(mark(x0), x1) 86.65/27.22 take(x0, mark(x1)) 86.65/27.22 take(active(x0), x1) 86.65/27.22 take(x0, active(x1)) 86.65/27.22 uTake1(mark(x0)) 86.65/27.22 uTake1(active(x0)) 86.65/27.22 uTake2(mark(x0), x1, x2, x3) 86.65/27.22 uTake2(x0, mark(x1), x2, x3) 86.65/27.22 uTake2(x0, x1, mark(x2), x3) 86.65/27.22 uTake2(x0, x1, x2, mark(x3)) 86.65/27.22 uTake2(active(x0), x1, x2, x3) 86.65/27.22 uTake2(x0, active(x1), x2, x3) 86.65/27.22 uTake2(x0, x1, active(x2), x3) 86.65/27.22 uTake2(x0, x1, x2, active(x3)) 86.65/27.22 uLength(mark(x0), x1) 86.65/27.22 uLength(x0, mark(x1)) 86.65/27.22 uLength(active(x0), x1) 86.65/27.22 uLength(x0, active(x1)) 86.65/27.22 86.65/27.22 We have to consider all minimal (P,Q,R)-chains. 86.65/27.22 ---------------------------------------- 86.65/27.22 86.65/27.22 (55) UsableRulesProof (EQUIVALENT) 86.65/27.22 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. 86.65/27.22 ---------------------------------------- 86.65/27.22 86.65/27.22 (56) 86.65/27.22 Obligation: 86.65/27.22 Q DP problem: 86.65/27.22 The TRS P consists of the following rules: 86.65/27.22 86.65/27.22 ISNAT(active(X)) -> ISNAT(X) 86.65/27.22 ISNAT(mark(X)) -> ISNAT(X) 86.65/27.22 86.65/27.22 R is empty. 86.65/27.22 The set Q consists of the following terms: 86.65/27.22 86.65/27.22 active(and(tt, x0)) 86.65/27.22 active(isNatIList(x0)) 86.65/27.22 active(isNat(0)) 86.65/27.22 active(isNat(s(x0))) 86.65/27.22 active(isNat(length(x0))) 86.65/27.22 active(isNatList(nil)) 86.65/27.22 active(isNatList(cons(x0, x1))) 86.65/27.22 active(isNatList(take(x0, x1))) 86.65/27.22 active(zeros) 86.65/27.22 active(take(0, x0)) 86.65/27.22 active(uTake1(tt)) 86.65/27.22 active(take(s(x0), cons(x1, x2))) 86.65/27.22 active(uTake2(tt, x0, x1, x2)) 86.65/27.22 active(length(cons(x0, x1))) 86.65/27.22 active(uLength(tt, x0)) 86.65/27.22 mark(and(x0, x1)) 86.65/27.22 mark(tt) 86.65/27.22 mark(isNatIList(x0)) 86.65/27.22 mark(isNatList(x0)) 86.65/27.22 mark(isNat(x0)) 86.65/27.22 mark(0) 86.65/27.22 mark(s(x0)) 86.65/27.22 mark(length(x0)) 86.65/27.22 mark(zeros) 86.65/27.22 mark(cons(x0, x1)) 86.65/27.22 mark(nil) 86.65/27.22 mark(take(x0, x1)) 86.65/27.22 mark(uTake1(x0)) 86.65/27.22 mark(uTake2(x0, x1, x2, x3)) 86.65/27.22 mark(uLength(x0, x1)) 86.65/27.22 and(mark(x0), x1) 86.65/27.22 and(x0, mark(x1)) 86.65/27.22 and(active(x0), x1) 86.65/27.22 and(x0, active(x1)) 86.65/27.22 isNatIList(mark(x0)) 86.65/27.22 isNatIList(active(x0)) 86.65/27.22 isNatList(mark(x0)) 86.65/27.22 isNatList(active(x0)) 86.65/27.22 isNat(mark(x0)) 86.65/27.22 isNat(active(x0)) 86.65/27.22 s(mark(x0)) 86.65/27.22 s(active(x0)) 86.65/27.22 length(mark(x0)) 86.65/27.22 length(active(x0)) 86.65/27.22 cons(mark(x0), x1) 86.65/27.22 cons(x0, mark(x1)) 86.65/27.22 cons(active(x0), x1) 86.65/27.22 cons(x0, active(x1)) 86.65/27.22 take(mark(x0), x1) 86.65/27.22 take(x0, mark(x1)) 86.65/27.22 take(active(x0), x1) 86.65/27.22 take(x0, active(x1)) 86.65/27.22 uTake1(mark(x0)) 86.65/27.22 uTake1(active(x0)) 86.65/27.22 uTake2(mark(x0), x1, x2, x3) 86.65/27.22 uTake2(x0, mark(x1), x2, x3) 86.65/27.22 uTake2(x0, x1, mark(x2), x3) 86.65/27.22 uTake2(x0, x1, x2, mark(x3)) 86.65/27.22 uTake2(active(x0), x1, x2, x3) 86.65/27.22 uTake2(x0, active(x1), x2, x3) 86.65/27.22 uTake2(x0, x1, active(x2), x3) 86.65/27.22 uTake2(x0, x1, x2, active(x3)) 86.65/27.22 uLength(mark(x0), x1) 86.65/27.22 uLength(x0, mark(x1)) 86.65/27.22 uLength(active(x0), x1) 86.65/27.22 uLength(x0, active(x1)) 86.65/27.22 86.65/27.22 We have to consider all minimal (P,Q,R)-chains. 86.65/27.22 ---------------------------------------- 86.65/27.22 86.65/27.22 (57) QReductionProof (EQUIVALENT) 86.65/27.22 We deleted the following terms from Q as each root-symbol of these terms does neither occur in P nor in R.[THIEMANN]. 86.65/27.22 86.65/27.22 and(mark(x0), x1) 86.65/27.22 and(x0, mark(x1)) 86.65/27.22 and(active(x0), x1) 86.65/27.22 and(x0, active(x1)) 86.65/27.22 isNatIList(mark(x0)) 86.65/27.22 isNatIList(active(x0)) 86.65/27.22 isNatList(mark(x0)) 86.65/27.22 isNatList(active(x0)) 86.65/27.22 isNat(mark(x0)) 86.65/27.22 isNat(active(x0)) 86.65/27.22 s(mark(x0)) 86.65/27.22 s(active(x0)) 86.65/27.22 length(mark(x0)) 86.65/27.22 length(active(x0)) 86.65/27.22 cons(mark(x0), x1) 86.65/27.22 cons(x0, mark(x1)) 86.65/27.22 cons(active(x0), x1) 86.65/27.22 cons(x0, active(x1)) 86.65/27.22 take(mark(x0), x1) 86.65/27.22 take(x0, mark(x1)) 86.65/27.22 take(active(x0), x1) 86.65/27.22 take(x0, active(x1)) 86.65/27.22 uTake1(mark(x0)) 86.65/27.22 uTake1(active(x0)) 86.65/27.22 uTake2(mark(x0), x1, x2, x3) 86.65/27.22 uTake2(x0, mark(x1), x2, x3) 86.65/27.22 uTake2(x0, x1, mark(x2), x3) 86.65/27.22 uTake2(x0, x1, x2, mark(x3)) 86.65/27.22 uTake2(active(x0), x1, x2, x3) 86.65/27.22 uTake2(x0, active(x1), x2, x3) 86.65/27.22 uTake2(x0, x1, active(x2), x3) 86.65/27.22 uTake2(x0, x1, x2, active(x3)) 86.65/27.22 uLength(mark(x0), x1) 86.65/27.22 uLength(x0, mark(x1)) 86.65/27.22 uLength(active(x0), x1) 86.65/27.22 uLength(x0, active(x1)) 86.65/27.22 86.65/27.22 86.65/27.22 ---------------------------------------- 86.65/27.22 86.65/27.22 (58) 86.65/27.22 Obligation: 86.65/27.22 Q DP problem: 86.65/27.22 The TRS P consists of the following rules: 86.65/27.22 86.65/27.22 ISNAT(active(X)) -> ISNAT(X) 86.65/27.22 ISNAT(mark(X)) -> ISNAT(X) 86.65/27.22 86.65/27.22 R is empty. 86.65/27.22 The set Q consists of the following terms: 86.65/27.22 86.65/27.22 active(and(tt, x0)) 86.65/27.22 active(isNatIList(x0)) 86.65/27.22 active(isNat(0)) 86.65/27.22 active(isNat(s(x0))) 86.65/27.22 active(isNat(length(x0))) 86.65/27.22 active(isNatList(nil)) 86.65/27.22 active(isNatList(cons(x0, x1))) 86.65/27.22 active(isNatList(take(x0, x1))) 86.65/27.22 active(zeros) 86.65/27.22 active(take(0, x0)) 86.65/27.22 active(uTake1(tt)) 86.65/27.22 active(take(s(x0), cons(x1, x2))) 86.65/27.22 active(uTake2(tt, x0, x1, x2)) 86.65/27.22 active(length(cons(x0, x1))) 86.65/27.22 active(uLength(tt, x0)) 86.65/27.22 mark(and(x0, x1)) 86.65/27.22 mark(tt) 86.65/27.22 mark(isNatIList(x0)) 86.65/27.22 mark(isNatList(x0)) 86.65/27.22 mark(isNat(x0)) 86.65/27.22 mark(0) 86.65/27.22 mark(s(x0)) 86.65/27.22 mark(length(x0)) 86.65/27.22 mark(zeros) 86.65/27.22 mark(cons(x0, x1)) 86.65/27.22 mark(nil) 86.65/27.22 mark(take(x0, x1)) 86.65/27.22 mark(uTake1(x0)) 86.65/27.22 mark(uTake2(x0, x1, x2, x3)) 86.65/27.22 mark(uLength(x0, x1)) 86.65/27.22 86.65/27.22 We have to consider all minimal (P,Q,R)-chains. 86.65/27.22 ---------------------------------------- 86.65/27.22 86.65/27.22 (59) QDPSizeChangeProof (EQUIVALENT) 86.65/27.22 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. 86.65/27.22 86.65/27.22 From the DPs we obtained the following set of size-change graphs: 86.65/27.22 *ISNAT(active(X)) -> ISNAT(X) 86.65/27.22 The graph contains the following edges 1 > 1 86.65/27.22 86.65/27.22 86.65/27.22 *ISNAT(mark(X)) -> ISNAT(X) 86.65/27.22 The graph contains the following edges 1 > 1 86.65/27.22 86.65/27.22 86.65/27.22 ---------------------------------------- 86.65/27.22 86.65/27.22 (60) 86.65/27.22 YES 86.65/27.22 86.65/27.22 ---------------------------------------- 86.65/27.22 86.65/27.22 (61) 86.65/27.22 Obligation: 86.65/27.22 Q DP problem: 86.65/27.22 The TRS P consists of the following rules: 86.65/27.22 86.65/27.22 ISNATLIST(active(X)) -> ISNATLIST(X) 86.65/27.22 ISNATLIST(mark(X)) -> ISNATLIST(X) 86.65/27.22 86.65/27.22 The TRS R consists of the following rules: 86.65/27.22 86.65/27.22 active(and(tt, T)) -> mark(T) 86.65/27.22 active(isNatIList(IL)) -> mark(isNatList(IL)) 86.65/27.22 active(isNat(0)) -> mark(tt) 86.65/27.22 active(isNat(s(N))) -> mark(isNat(N)) 86.65/27.22 active(isNat(length(L))) -> mark(isNatList(L)) 86.65/27.22 active(isNatIList(zeros)) -> mark(tt) 86.65/27.22 active(isNatIList(cons(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.22 active(isNatList(nil)) -> mark(tt) 86.65/27.22 active(isNatList(cons(N, L))) -> mark(and(isNat(N), isNatList(L))) 86.65/27.22 active(isNatList(take(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.22 active(zeros) -> mark(cons(0, zeros)) 86.65/27.22 active(take(0, IL)) -> mark(uTake1(isNatIList(IL))) 86.65/27.22 active(uTake1(tt)) -> mark(nil) 86.65/27.22 active(take(s(M), cons(N, IL))) -> mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL)) 86.65/27.22 active(uTake2(tt, M, N, IL)) -> mark(cons(N, take(M, IL))) 86.65/27.22 active(length(cons(N, L))) -> mark(uLength(and(isNat(N), isNatList(L)), L)) 86.65/27.22 active(uLength(tt, L)) -> mark(s(length(L))) 86.65/27.22 mark(and(X1, X2)) -> active(and(mark(X1), mark(X2))) 86.65/27.22 mark(tt) -> active(tt) 86.65/27.22 mark(isNatIList(X)) -> active(isNatIList(X)) 86.65/27.22 mark(isNatList(X)) -> active(isNatList(X)) 86.65/27.22 mark(isNat(X)) -> active(isNat(X)) 86.65/27.22 mark(0) -> active(0) 86.65/27.22 mark(s(X)) -> active(s(mark(X))) 86.65/27.22 mark(length(X)) -> active(length(mark(X))) 86.65/27.22 mark(zeros) -> active(zeros) 86.65/27.22 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 86.65/27.22 mark(nil) -> active(nil) 86.65/27.22 mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) 86.65/27.22 mark(uTake1(X)) -> active(uTake1(mark(X))) 86.65/27.22 mark(uTake2(X1, X2, X3, X4)) -> active(uTake2(mark(X1), X2, X3, X4)) 86.65/27.22 mark(uLength(X1, X2)) -> active(uLength(mark(X1), X2)) 86.65/27.22 and(mark(X1), X2) -> and(X1, X2) 86.65/27.22 and(X1, mark(X2)) -> and(X1, X2) 86.65/27.22 and(active(X1), X2) -> and(X1, X2) 86.65/27.22 and(X1, active(X2)) -> and(X1, X2) 86.65/27.22 isNatIList(mark(X)) -> isNatIList(X) 86.65/27.22 isNatIList(active(X)) -> isNatIList(X) 86.65/27.22 isNatList(mark(X)) -> isNatList(X) 86.65/27.22 isNatList(active(X)) -> isNatList(X) 86.65/27.22 isNat(mark(X)) -> isNat(X) 86.65/27.22 isNat(active(X)) -> isNat(X) 86.65/27.22 s(mark(X)) -> s(X) 86.65/27.22 s(active(X)) -> s(X) 86.65/27.22 length(mark(X)) -> length(X) 86.65/27.22 length(active(X)) -> length(X) 86.65/27.22 cons(mark(X1), X2) -> cons(X1, X2) 86.65/27.22 cons(X1, mark(X2)) -> cons(X1, X2) 86.65/27.22 cons(active(X1), X2) -> cons(X1, X2) 86.65/27.22 cons(X1, active(X2)) -> cons(X1, X2) 86.65/27.22 take(mark(X1), X2) -> take(X1, X2) 86.65/27.22 take(X1, mark(X2)) -> take(X1, X2) 86.65/27.22 take(active(X1), X2) -> take(X1, X2) 86.65/27.22 take(X1, active(X2)) -> take(X1, X2) 86.65/27.22 uTake1(mark(X)) -> uTake1(X) 86.65/27.22 uTake1(active(X)) -> uTake1(X) 86.65/27.22 uTake2(mark(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.22 uTake2(X1, mark(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.22 uTake2(X1, X2, mark(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.22 uTake2(X1, X2, X3, mark(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.22 uTake2(active(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.22 uTake2(X1, active(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.22 uTake2(X1, X2, active(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.22 uTake2(X1, X2, X3, active(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.22 uLength(mark(X1), X2) -> uLength(X1, X2) 86.65/27.22 uLength(X1, mark(X2)) -> uLength(X1, X2) 86.65/27.22 uLength(active(X1), X2) -> uLength(X1, X2) 86.65/27.22 uLength(X1, active(X2)) -> uLength(X1, X2) 86.65/27.22 86.65/27.22 The set Q consists of the following terms: 86.65/27.22 86.65/27.22 active(and(tt, x0)) 86.65/27.22 active(isNatIList(x0)) 86.65/27.22 active(isNat(0)) 86.65/27.22 active(isNat(s(x0))) 86.65/27.22 active(isNat(length(x0))) 86.65/27.22 active(isNatList(nil)) 86.65/27.22 active(isNatList(cons(x0, x1))) 86.65/27.22 active(isNatList(take(x0, x1))) 86.65/27.22 active(zeros) 86.65/27.22 active(take(0, x0)) 86.65/27.22 active(uTake1(tt)) 86.65/27.22 active(take(s(x0), cons(x1, x2))) 86.65/27.22 active(uTake2(tt, x0, x1, x2)) 86.65/27.22 active(length(cons(x0, x1))) 86.65/27.22 active(uLength(tt, x0)) 86.65/27.22 mark(and(x0, x1)) 86.65/27.22 mark(tt) 86.65/27.22 mark(isNatIList(x0)) 86.65/27.22 mark(isNatList(x0)) 86.65/27.22 mark(isNat(x0)) 86.65/27.22 mark(0) 86.65/27.22 mark(s(x0)) 86.65/27.22 mark(length(x0)) 86.65/27.22 mark(zeros) 86.65/27.22 mark(cons(x0, x1)) 86.65/27.22 mark(nil) 86.65/27.22 mark(take(x0, x1)) 86.65/27.22 mark(uTake1(x0)) 86.65/27.22 mark(uTake2(x0, x1, x2, x3)) 86.65/27.22 mark(uLength(x0, x1)) 86.65/27.22 and(mark(x0), x1) 86.65/27.22 and(x0, mark(x1)) 86.65/27.22 and(active(x0), x1) 86.65/27.22 and(x0, active(x1)) 86.65/27.22 isNatIList(mark(x0)) 86.65/27.22 isNatIList(active(x0)) 86.65/27.22 isNatList(mark(x0)) 86.65/27.22 isNatList(active(x0)) 86.65/27.22 isNat(mark(x0)) 86.65/27.22 isNat(active(x0)) 86.65/27.22 s(mark(x0)) 86.65/27.22 s(active(x0)) 86.65/27.22 length(mark(x0)) 86.65/27.22 length(active(x0)) 86.65/27.22 cons(mark(x0), x1) 86.65/27.22 cons(x0, mark(x1)) 86.65/27.22 cons(active(x0), x1) 86.65/27.22 cons(x0, active(x1)) 86.65/27.22 take(mark(x0), x1) 86.65/27.22 take(x0, mark(x1)) 86.65/27.22 take(active(x0), x1) 86.65/27.22 take(x0, active(x1)) 86.65/27.22 uTake1(mark(x0)) 86.65/27.22 uTake1(active(x0)) 86.65/27.22 uTake2(mark(x0), x1, x2, x3) 86.65/27.22 uTake2(x0, mark(x1), x2, x3) 86.65/27.22 uTake2(x0, x1, mark(x2), x3) 86.65/27.22 uTake2(x0, x1, x2, mark(x3)) 86.65/27.22 uTake2(active(x0), x1, x2, x3) 86.65/27.22 uTake2(x0, active(x1), x2, x3) 86.65/27.22 uTake2(x0, x1, active(x2), x3) 86.65/27.22 uTake2(x0, x1, x2, active(x3)) 86.65/27.22 uLength(mark(x0), x1) 86.65/27.22 uLength(x0, mark(x1)) 86.65/27.22 uLength(active(x0), x1) 86.65/27.22 uLength(x0, active(x1)) 86.65/27.22 86.65/27.22 We have to consider all minimal (P,Q,R)-chains. 86.65/27.22 ---------------------------------------- 86.65/27.22 86.65/27.22 (62) UsableRulesProof (EQUIVALENT) 86.65/27.22 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. 86.65/27.22 ---------------------------------------- 86.65/27.22 86.65/27.22 (63) 86.65/27.22 Obligation: 86.65/27.22 Q DP problem: 86.65/27.22 The TRS P consists of the following rules: 86.65/27.22 86.65/27.22 ISNATLIST(active(X)) -> ISNATLIST(X) 86.65/27.22 ISNATLIST(mark(X)) -> ISNATLIST(X) 86.65/27.22 86.65/27.22 R is empty. 86.65/27.22 The set Q consists of the following terms: 86.65/27.22 86.65/27.22 active(and(tt, x0)) 86.65/27.22 active(isNatIList(x0)) 86.65/27.22 active(isNat(0)) 86.65/27.22 active(isNat(s(x0))) 86.65/27.22 active(isNat(length(x0))) 86.65/27.22 active(isNatList(nil)) 86.65/27.22 active(isNatList(cons(x0, x1))) 86.65/27.22 active(isNatList(take(x0, x1))) 86.65/27.22 active(zeros) 86.65/27.22 active(take(0, x0)) 86.65/27.22 active(uTake1(tt)) 86.65/27.22 active(take(s(x0), cons(x1, x2))) 86.65/27.22 active(uTake2(tt, x0, x1, x2)) 86.65/27.22 active(length(cons(x0, x1))) 86.65/27.22 active(uLength(tt, x0)) 86.65/27.22 mark(and(x0, x1)) 86.65/27.22 mark(tt) 86.65/27.22 mark(isNatIList(x0)) 86.65/27.22 mark(isNatList(x0)) 86.65/27.22 mark(isNat(x0)) 86.65/27.22 mark(0) 86.65/27.22 mark(s(x0)) 86.65/27.22 mark(length(x0)) 86.65/27.22 mark(zeros) 86.65/27.22 mark(cons(x0, x1)) 86.65/27.22 mark(nil) 86.65/27.22 mark(take(x0, x1)) 86.65/27.22 mark(uTake1(x0)) 86.65/27.22 mark(uTake2(x0, x1, x2, x3)) 86.65/27.22 mark(uLength(x0, x1)) 86.65/27.22 and(mark(x0), x1) 86.65/27.22 and(x0, mark(x1)) 86.65/27.22 and(active(x0), x1) 86.65/27.22 and(x0, active(x1)) 86.65/27.22 isNatIList(mark(x0)) 86.65/27.22 isNatIList(active(x0)) 86.65/27.22 isNatList(mark(x0)) 86.65/27.22 isNatList(active(x0)) 86.65/27.22 isNat(mark(x0)) 86.65/27.22 isNat(active(x0)) 86.65/27.22 s(mark(x0)) 86.65/27.22 s(active(x0)) 86.65/27.22 length(mark(x0)) 86.65/27.22 length(active(x0)) 86.65/27.22 cons(mark(x0), x1) 86.65/27.22 cons(x0, mark(x1)) 86.65/27.22 cons(active(x0), x1) 86.65/27.22 cons(x0, active(x1)) 86.65/27.22 take(mark(x0), x1) 86.65/27.22 take(x0, mark(x1)) 86.65/27.22 take(active(x0), x1) 86.65/27.22 take(x0, active(x1)) 86.65/27.22 uTake1(mark(x0)) 86.65/27.22 uTake1(active(x0)) 86.65/27.22 uTake2(mark(x0), x1, x2, x3) 86.65/27.22 uTake2(x0, mark(x1), x2, x3) 86.65/27.22 uTake2(x0, x1, mark(x2), x3) 86.65/27.22 uTake2(x0, x1, x2, mark(x3)) 86.65/27.22 uTake2(active(x0), x1, x2, x3) 86.65/27.22 uTake2(x0, active(x1), x2, x3) 86.65/27.22 uTake2(x0, x1, active(x2), x3) 86.65/27.22 uTake2(x0, x1, x2, active(x3)) 86.65/27.22 uLength(mark(x0), x1) 86.65/27.22 uLength(x0, mark(x1)) 86.65/27.22 uLength(active(x0), x1) 86.65/27.22 uLength(x0, active(x1)) 86.65/27.22 86.65/27.22 We have to consider all minimal (P,Q,R)-chains. 86.65/27.22 ---------------------------------------- 86.65/27.22 86.65/27.22 (64) QReductionProof (EQUIVALENT) 86.65/27.22 We deleted the following terms from Q as each root-symbol of these terms does neither occur in P nor in R.[THIEMANN]. 86.65/27.22 86.65/27.22 and(mark(x0), x1) 86.65/27.22 and(x0, mark(x1)) 86.65/27.22 and(active(x0), x1) 86.65/27.22 and(x0, active(x1)) 86.65/27.22 isNatIList(mark(x0)) 86.65/27.22 isNatIList(active(x0)) 86.65/27.22 isNatList(mark(x0)) 86.65/27.22 isNatList(active(x0)) 86.65/27.22 isNat(mark(x0)) 86.65/27.22 isNat(active(x0)) 86.65/27.22 s(mark(x0)) 86.65/27.22 s(active(x0)) 86.65/27.22 length(mark(x0)) 86.65/27.22 length(active(x0)) 86.65/27.22 cons(mark(x0), x1) 86.65/27.22 cons(x0, mark(x1)) 86.65/27.22 cons(active(x0), x1) 86.65/27.22 cons(x0, active(x1)) 86.65/27.22 take(mark(x0), x1) 86.65/27.22 take(x0, mark(x1)) 86.65/27.22 take(active(x0), x1) 86.65/27.22 take(x0, active(x1)) 86.65/27.22 uTake1(mark(x0)) 86.65/27.22 uTake1(active(x0)) 86.65/27.22 uTake2(mark(x0), x1, x2, x3) 86.65/27.22 uTake2(x0, mark(x1), x2, x3) 86.65/27.22 uTake2(x0, x1, mark(x2), x3) 86.65/27.22 uTake2(x0, x1, x2, mark(x3)) 86.65/27.22 uTake2(active(x0), x1, x2, x3) 86.65/27.22 uTake2(x0, active(x1), x2, x3) 86.65/27.22 uTake2(x0, x1, active(x2), x3) 86.65/27.22 uTake2(x0, x1, x2, active(x3)) 86.65/27.22 uLength(mark(x0), x1) 86.65/27.22 uLength(x0, mark(x1)) 86.65/27.22 uLength(active(x0), x1) 86.65/27.22 uLength(x0, active(x1)) 86.65/27.22 86.65/27.22 86.65/27.22 ---------------------------------------- 86.65/27.22 86.65/27.22 (65) 86.65/27.22 Obligation: 86.65/27.22 Q DP problem: 86.65/27.22 The TRS P consists of the following rules: 86.65/27.22 86.65/27.22 ISNATLIST(active(X)) -> ISNATLIST(X) 86.65/27.22 ISNATLIST(mark(X)) -> ISNATLIST(X) 86.65/27.22 86.65/27.22 R is empty. 86.65/27.22 The set Q consists of the following terms: 86.65/27.22 86.65/27.22 active(and(tt, x0)) 86.65/27.22 active(isNatIList(x0)) 86.65/27.22 active(isNat(0)) 86.65/27.22 active(isNat(s(x0))) 86.65/27.22 active(isNat(length(x0))) 86.65/27.22 active(isNatList(nil)) 86.65/27.22 active(isNatList(cons(x0, x1))) 86.65/27.22 active(isNatList(take(x0, x1))) 86.65/27.22 active(zeros) 86.65/27.22 active(take(0, x0)) 86.65/27.22 active(uTake1(tt)) 86.65/27.22 active(take(s(x0), cons(x1, x2))) 86.65/27.22 active(uTake2(tt, x0, x1, x2)) 86.65/27.22 active(length(cons(x0, x1))) 86.65/27.22 active(uLength(tt, x0)) 86.65/27.22 mark(and(x0, x1)) 86.65/27.22 mark(tt) 86.65/27.22 mark(isNatIList(x0)) 86.65/27.22 mark(isNatList(x0)) 86.65/27.22 mark(isNat(x0)) 86.65/27.22 mark(0) 86.65/27.22 mark(s(x0)) 86.65/27.22 mark(length(x0)) 86.65/27.22 mark(zeros) 86.65/27.22 mark(cons(x0, x1)) 86.65/27.22 mark(nil) 86.65/27.22 mark(take(x0, x1)) 86.65/27.22 mark(uTake1(x0)) 86.65/27.22 mark(uTake2(x0, x1, x2, x3)) 86.65/27.22 mark(uLength(x0, x1)) 86.65/27.22 86.65/27.22 We have to consider all minimal (P,Q,R)-chains. 86.65/27.22 ---------------------------------------- 86.65/27.22 86.65/27.22 (66) QDPSizeChangeProof (EQUIVALENT) 86.65/27.22 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. 86.65/27.22 86.65/27.22 From the DPs we obtained the following set of size-change graphs: 86.65/27.22 *ISNATLIST(active(X)) -> ISNATLIST(X) 86.65/27.22 The graph contains the following edges 1 > 1 86.65/27.22 86.65/27.22 86.65/27.22 *ISNATLIST(mark(X)) -> ISNATLIST(X) 86.65/27.22 The graph contains the following edges 1 > 1 86.65/27.22 86.65/27.22 86.65/27.22 ---------------------------------------- 86.65/27.22 86.65/27.22 (67) 86.65/27.22 YES 86.65/27.22 86.65/27.22 ---------------------------------------- 86.65/27.22 86.65/27.22 (68) 86.65/27.22 Obligation: 86.65/27.22 Q DP problem: 86.65/27.22 The TRS P consists of the following rules: 86.65/27.22 86.65/27.22 ISNATILIST(active(X)) -> ISNATILIST(X) 86.65/27.22 ISNATILIST(mark(X)) -> ISNATILIST(X) 86.65/27.22 86.65/27.22 The TRS R consists of the following rules: 86.65/27.22 86.65/27.22 active(and(tt, T)) -> mark(T) 86.65/27.22 active(isNatIList(IL)) -> mark(isNatList(IL)) 86.65/27.22 active(isNat(0)) -> mark(tt) 86.65/27.22 active(isNat(s(N))) -> mark(isNat(N)) 86.65/27.22 active(isNat(length(L))) -> mark(isNatList(L)) 86.65/27.22 active(isNatIList(zeros)) -> mark(tt) 86.65/27.22 active(isNatIList(cons(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.22 active(isNatList(nil)) -> mark(tt) 86.65/27.22 active(isNatList(cons(N, L))) -> mark(and(isNat(N), isNatList(L))) 86.65/27.22 active(isNatList(take(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.22 active(zeros) -> mark(cons(0, zeros)) 86.65/27.22 active(take(0, IL)) -> mark(uTake1(isNatIList(IL))) 86.65/27.22 active(uTake1(tt)) -> mark(nil) 86.65/27.22 active(take(s(M), cons(N, IL))) -> mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL)) 86.65/27.22 active(uTake2(tt, M, N, IL)) -> mark(cons(N, take(M, IL))) 86.65/27.22 active(length(cons(N, L))) -> mark(uLength(and(isNat(N), isNatList(L)), L)) 86.65/27.22 active(uLength(tt, L)) -> mark(s(length(L))) 86.65/27.22 mark(and(X1, X2)) -> active(and(mark(X1), mark(X2))) 86.65/27.22 mark(tt) -> active(tt) 86.65/27.22 mark(isNatIList(X)) -> active(isNatIList(X)) 86.65/27.22 mark(isNatList(X)) -> active(isNatList(X)) 86.65/27.22 mark(isNat(X)) -> active(isNat(X)) 86.65/27.22 mark(0) -> active(0) 86.65/27.22 mark(s(X)) -> active(s(mark(X))) 86.65/27.22 mark(length(X)) -> active(length(mark(X))) 86.65/27.22 mark(zeros) -> active(zeros) 86.65/27.22 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 86.65/27.22 mark(nil) -> active(nil) 86.65/27.22 mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) 86.65/27.22 mark(uTake1(X)) -> active(uTake1(mark(X))) 86.65/27.22 mark(uTake2(X1, X2, X3, X4)) -> active(uTake2(mark(X1), X2, X3, X4)) 86.65/27.22 mark(uLength(X1, X2)) -> active(uLength(mark(X1), X2)) 86.65/27.22 and(mark(X1), X2) -> and(X1, X2) 86.65/27.22 and(X1, mark(X2)) -> and(X1, X2) 86.65/27.22 and(active(X1), X2) -> and(X1, X2) 86.65/27.22 and(X1, active(X2)) -> and(X1, X2) 86.65/27.22 isNatIList(mark(X)) -> isNatIList(X) 86.65/27.22 isNatIList(active(X)) -> isNatIList(X) 86.65/27.22 isNatList(mark(X)) -> isNatList(X) 86.65/27.22 isNatList(active(X)) -> isNatList(X) 86.65/27.22 isNat(mark(X)) -> isNat(X) 86.65/27.22 isNat(active(X)) -> isNat(X) 86.65/27.22 s(mark(X)) -> s(X) 86.65/27.22 s(active(X)) -> s(X) 86.65/27.22 length(mark(X)) -> length(X) 86.65/27.22 length(active(X)) -> length(X) 86.65/27.22 cons(mark(X1), X2) -> cons(X1, X2) 86.65/27.22 cons(X1, mark(X2)) -> cons(X1, X2) 86.65/27.22 cons(active(X1), X2) -> cons(X1, X2) 86.65/27.22 cons(X1, active(X2)) -> cons(X1, X2) 86.65/27.22 take(mark(X1), X2) -> take(X1, X2) 86.65/27.22 take(X1, mark(X2)) -> take(X1, X2) 86.65/27.22 take(active(X1), X2) -> take(X1, X2) 86.65/27.22 take(X1, active(X2)) -> take(X1, X2) 86.65/27.22 uTake1(mark(X)) -> uTake1(X) 86.65/27.22 uTake1(active(X)) -> uTake1(X) 86.65/27.22 uTake2(mark(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.22 uTake2(X1, mark(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.22 uTake2(X1, X2, mark(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.22 uTake2(X1, X2, X3, mark(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.22 uTake2(active(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.22 uTake2(X1, active(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.22 uTake2(X1, X2, active(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.22 uTake2(X1, X2, X3, active(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.22 uLength(mark(X1), X2) -> uLength(X1, X2) 86.65/27.22 uLength(X1, mark(X2)) -> uLength(X1, X2) 86.65/27.22 uLength(active(X1), X2) -> uLength(X1, X2) 86.65/27.22 uLength(X1, active(X2)) -> uLength(X1, X2) 86.65/27.22 86.65/27.22 The set Q consists of the following terms: 86.65/27.22 86.65/27.22 active(and(tt, x0)) 86.65/27.22 active(isNatIList(x0)) 86.65/27.22 active(isNat(0)) 86.65/27.22 active(isNat(s(x0))) 86.65/27.22 active(isNat(length(x0))) 86.65/27.22 active(isNatList(nil)) 86.65/27.22 active(isNatList(cons(x0, x1))) 86.65/27.22 active(isNatList(take(x0, x1))) 86.65/27.22 active(zeros) 86.65/27.22 active(take(0, x0)) 86.65/27.22 active(uTake1(tt)) 86.65/27.22 active(take(s(x0), cons(x1, x2))) 86.65/27.22 active(uTake2(tt, x0, x1, x2)) 86.65/27.22 active(length(cons(x0, x1))) 86.65/27.22 active(uLength(tt, x0)) 86.65/27.22 mark(and(x0, x1)) 86.65/27.22 mark(tt) 86.65/27.22 mark(isNatIList(x0)) 86.65/27.22 mark(isNatList(x0)) 86.65/27.22 mark(isNat(x0)) 86.65/27.22 mark(0) 86.65/27.22 mark(s(x0)) 86.65/27.22 mark(length(x0)) 86.65/27.22 mark(zeros) 86.65/27.22 mark(cons(x0, x1)) 86.65/27.22 mark(nil) 86.65/27.22 mark(take(x0, x1)) 86.65/27.22 mark(uTake1(x0)) 86.65/27.22 mark(uTake2(x0, x1, x2, x3)) 86.65/27.22 mark(uLength(x0, x1)) 86.65/27.22 and(mark(x0), x1) 86.65/27.22 and(x0, mark(x1)) 86.65/27.22 and(active(x0), x1) 86.65/27.22 and(x0, active(x1)) 86.65/27.22 isNatIList(mark(x0)) 86.65/27.22 isNatIList(active(x0)) 86.65/27.22 isNatList(mark(x0)) 86.65/27.22 isNatList(active(x0)) 86.65/27.22 isNat(mark(x0)) 86.65/27.22 isNat(active(x0)) 86.65/27.22 s(mark(x0)) 86.65/27.22 s(active(x0)) 86.65/27.22 length(mark(x0)) 86.65/27.22 length(active(x0)) 86.65/27.22 cons(mark(x0), x1) 86.65/27.22 cons(x0, mark(x1)) 86.65/27.22 cons(active(x0), x1) 86.65/27.22 cons(x0, active(x1)) 86.65/27.22 take(mark(x0), x1) 86.65/27.22 take(x0, mark(x1)) 86.65/27.22 take(active(x0), x1) 86.65/27.22 take(x0, active(x1)) 86.65/27.22 uTake1(mark(x0)) 86.65/27.22 uTake1(active(x0)) 86.65/27.22 uTake2(mark(x0), x1, x2, x3) 86.65/27.22 uTake2(x0, mark(x1), x2, x3) 86.65/27.22 uTake2(x0, x1, mark(x2), x3) 86.65/27.22 uTake2(x0, x1, x2, mark(x3)) 86.65/27.22 uTake2(active(x0), x1, x2, x3) 86.65/27.22 uTake2(x0, active(x1), x2, x3) 86.65/27.22 uTake2(x0, x1, active(x2), x3) 86.65/27.22 uTake2(x0, x1, x2, active(x3)) 86.65/27.22 uLength(mark(x0), x1) 86.65/27.22 uLength(x0, mark(x1)) 86.65/27.22 uLength(active(x0), x1) 86.65/27.22 uLength(x0, active(x1)) 86.65/27.22 86.65/27.22 We have to consider all minimal (P,Q,R)-chains. 86.65/27.22 ---------------------------------------- 86.65/27.22 86.65/27.22 (69) UsableRulesProof (EQUIVALENT) 86.65/27.22 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. 86.65/27.22 ---------------------------------------- 86.65/27.22 86.65/27.22 (70) 86.65/27.22 Obligation: 86.65/27.22 Q DP problem: 86.65/27.22 The TRS P consists of the following rules: 86.65/27.22 86.65/27.22 ISNATILIST(active(X)) -> ISNATILIST(X) 86.65/27.22 ISNATILIST(mark(X)) -> ISNATILIST(X) 86.65/27.22 86.65/27.22 R is empty. 86.65/27.22 The set Q consists of the following terms: 86.65/27.22 86.65/27.22 active(and(tt, x0)) 86.65/27.22 active(isNatIList(x0)) 86.65/27.22 active(isNat(0)) 86.65/27.22 active(isNat(s(x0))) 86.65/27.22 active(isNat(length(x0))) 86.65/27.22 active(isNatList(nil)) 86.65/27.22 active(isNatList(cons(x0, x1))) 86.65/27.22 active(isNatList(take(x0, x1))) 86.65/27.22 active(zeros) 86.65/27.22 active(take(0, x0)) 86.65/27.22 active(uTake1(tt)) 86.65/27.22 active(take(s(x0), cons(x1, x2))) 86.65/27.22 active(uTake2(tt, x0, x1, x2)) 86.65/27.22 active(length(cons(x0, x1))) 86.65/27.22 active(uLength(tt, x0)) 86.65/27.22 mark(and(x0, x1)) 86.65/27.22 mark(tt) 86.65/27.22 mark(isNatIList(x0)) 86.65/27.22 mark(isNatList(x0)) 86.65/27.22 mark(isNat(x0)) 86.65/27.22 mark(0) 86.65/27.22 mark(s(x0)) 86.65/27.22 mark(length(x0)) 86.65/27.22 mark(zeros) 86.65/27.22 mark(cons(x0, x1)) 86.65/27.22 mark(nil) 86.65/27.22 mark(take(x0, x1)) 86.65/27.22 mark(uTake1(x0)) 86.65/27.22 mark(uTake2(x0, x1, x2, x3)) 86.65/27.22 mark(uLength(x0, x1)) 86.65/27.22 and(mark(x0), x1) 86.65/27.22 and(x0, mark(x1)) 86.65/27.22 and(active(x0), x1) 86.65/27.22 and(x0, active(x1)) 86.65/27.22 isNatIList(mark(x0)) 86.65/27.22 isNatIList(active(x0)) 86.65/27.22 isNatList(mark(x0)) 86.65/27.22 isNatList(active(x0)) 86.65/27.22 isNat(mark(x0)) 86.65/27.22 isNat(active(x0)) 86.65/27.22 s(mark(x0)) 86.65/27.22 s(active(x0)) 86.65/27.22 length(mark(x0)) 86.65/27.22 length(active(x0)) 86.65/27.22 cons(mark(x0), x1) 86.65/27.22 cons(x0, mark(x1)) 86.65/27.22 cons(active(x0), x1) 86.65/27.22 cons(x0, active(x1)) 86.65/27.22 take(mark(x0), x1) 86.65/27.22 take(x0, mark(x1)) 86.65/27.22 take(active(x0), x1) 86.65/27.22 take(x0, active(x1)) 86.65/27.22 uTake1(mark(x0)) 86.65/27.22 uTake1(active(x0)) 86.65/27.22 uTake2(mark(x0), x1, x2, x3) 86.65/27.22 uTake2(x0, mark(x1), x2, x3) 86.65/27.22 uTake2(x0, x1, mark(x2), x3) 86.65/27.22 uTake2(x0, x1, x2, mark(x3)) 86.65/27.22 uTake2(active(x0), x1, x2, x3) 86.65/27.22 uTake2(x0, active(x1), x2, x3) 86.65/27.22 uTake2(x0, x1, active(x2), x3) 86.65/27.22 uTake2(x0, x1, x2, active(x3)) 86.65/27.22 uLength(mark(x0), x1) 86.65/27.22 uLength(x0, mark(x1)) 86.65/27.22 uLength(active(x0), x1) 86.65/27.22 uLength(x0, active(x1)) 86.65/27.22 86.65/27.22 We have to consider all minimal (P,Q,R)-chains. 86.65/27.22 ---------------------------------------- 86.65/27.22 86.65/27.22 (71) QReductionProof (EQUIVALENT) 86.65/27.22 We deleted the following terms from Q as each root-symbol of these terms does neither occur in P nor in R.[THIEMANN]. 86.65/27.22 86.65/27.22 and(mark(x0), x1) 86.65/27.22 and(x0, mark(x1)) 86.65/27.22 and(active(x0), x1) 86.65/27.22 and(x0, active(x1)) 86.65/27.22 isNatIList(mark(x0)) 86.65/27.22 isNatIList(active(x0)) 86.65/27.22 isNatList(mark(x0)) 86.65/27.22 isNatList(active(x0)) 86.65/27.22 isNat(mark(x0)) 86.65/27.22 isNat(active(x0)) 86.65/27.22 s(mark(x0)) 86.65/27.22 s(active(x0)) 86.65/27.22 length(mark(x0)) 86.65/27.22 length(active(x0)) 86.65/27.22 cons(mark(x0), x1) 86.65/27.22 cons(x0, mark(x1)) 86.65/27.22 cons(active(x0), x1) 86.65/27.22 cons(x0, active(x1)) 86.65/27.22 take(mark(x0), x1) 86.65/27.22 take(x0, mark(x1)) 86.65/27.22 take(active(x0), x1) 86.65/27.22 take(x0, active(x1)) 86.65/27.22 uTake1(mark(x0)) 86.65/27.22 uTake1(active(x0)) 86.65/27.22 uTake2(mark(x0), x1, x2, x3) 86.65/27.22 uTake2(x0, mark(x1), x2, x3) 86.65/27.22 uTake2(x0, x1, mark(x2), x3) 86.65/27.22 uTake2(x0, x1, x2, mark(x3)) 86.65/27.22 uTake2(active(x0), x1, x2, x3) 86.65/27.22 uTake2(x0, active(x1), x2, x3) 86.65/27.22 uTake2(x0, x1, active(x2), x3) 86.65/27.22 uTake2(x0, x1, x2, active(x3)) 86.65/27.22 uLength(mark(x0), x1) 86.65/27.22 uLength(x0, mark(x1)) 86.65/27.22 uLength(active(x0), x1) 86.65/27.22 uLength(x0, active(x1)) 86.65/27.22 86.65/27.22 86.65/27.22 ---------------------------------------- 86.65/27.22 86.65/27.22 (72) 86.65/27.22 Obligation: 86.65/27.22 Q DP problem: 86.65/27.22 The TRS P consists of the following rules: 86.65/27.22 86.65/27.22 ISNATILIST(active(X)) -> ISNATILIST(X) 86.65/27.22 ISNATILIST(mark(X)) -> ISNATILIST(X) 86.65/27.22 86.65/27.22 R is empty. 86.65/27.22 The set Q consists of the following terms: 86.65/27.22 86.65/27.22 active(and(tt, x0)) 86.65/27.22 active(isNatIList(x0)) 86.65/27.22 active(isNat(0)) 86.65/27.22 active(isNat(s(x0))) 86.65/27.22 active(isNat(length(x0))) 86.65/27.22 active(isNatList(nil)) 86.65/27.22 active(isNatList(cons(x0, x1))) 86.65/27.22 active(isNatList(take(x0, x1))) 86.65/27.22 active(zeros) 86.65/27.22 active(take(0, x0)) 86.65/27.22 active(uTake1(tt)) 86.65/27.22 active(take(s(x0), cons(x1, x2))) 86.65/27.22 active(uTake2(tt, x0, x1, x2)) 86.65/27.22 active(length(cons(x0, x1))) 86.65/27.22 active(uLength(tt, x0)) 86.65/27.22 mark(and(x0, x1)) 86.65/27.22 mark(tt) 86.65/27.22 mark(isNatIList(x0)) 86.65/27.22 mark(isNatList(x0)) 86.65/27.22 mark(isNat(x0)) 86.65/27.22 mark(0) 86.65/27.22 mark(s(x0)) 86.65/27.22 mark(length(x0)) 86.65/27.22 mark(zeros) 86.65/27.22 mark(cons(x0, x1)) 86.65/27.22 mark(nil) 86.65/27.22 mark(take(x0, x1)) 86.65/27.22 mark(uTake1(x0)) 86.65/27.22 mark(uTake2(x0, x1, x2, x3)) 86.65/27.22 mark(uLength(x0, x1)) 86.65/27.22 86.65/27.22 We have to consider all minimal (P,Q,R)-chains. 86.65/27.22 ---------------------------------------- 86.65/27.22 86.65/27.22 (73) QDPSizeChangeProof (EQUIVALENT) 86.65/27.22 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. 86.65/27.22 86.65/27.22 From the DPs we obtained the following set of size-change graphs: 86.65/27.22 *ISNATILIST(active(X)) -> ISNATILIST(X) 86.65/27.22 The graph contains the following edges 1 > 1 86.65/27.22 86.65/27.22 86.65/27.22 *ISNATILIST(mark(X)) -> ISNATILIST(X) 86.65/27.22 The graph contains the following edges 1 > 1 86.65/27.22 86.65/27.22 86.65/27.22 ---------------------------------------- 86.65/27.22 86.65/27.22 (74) 86.65/27.22 YES 86.65/27.22 86.65/27.22 ---------------------------------------- 86.65/27.22 86.65/27.22 (75) 86.65/27.22 Obligation: 86.65/27.22 Q DP problem: 86.65/27.22 The TRS P consists of the following rules: 86.65/27.22 86.65/27.22 AND(X1, mark(X2)) -> AND(X1, X2) 86.65/27.22 AND(mark(X1), X2) -> AND(X1, X2) 86.65/27.22 AND(active(X1), X2) -> AND(X1, X2) 86.65/27.22 AND(X1, active(X2)) -> AND(X1, X2) 86.65/27.22 86.65/27.22 The TRS R consists of the following rules: 86.65/27.22 86.65/27.22 active(and(tt, T)) -> mark(T) 86.65/27.22 active(isNatIList(IL)) -> mark(isNatList(IL)) 86.65/27.22 active(isNat(0)) -> mark(tt) 86.65/27.22 active(isNat(s(N))) -> mark(isNat(N)) 86.65/27.22 active(isNat(length(L))) -> mark(isNatList(L)) 86.65/27.22 active(isNatIList(zeros)) -> mark(tt) 86.65/27.22 active(isNatIList(cons(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.22 active(isNatList(nil)) -> mark(tt) 86.65/27.22 active(isNatList(cons(N, L))) -> mark(and(isNat(N), isNatList(L))) 86.65/27.22 active(isNatList(take(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.22 active(zeros) -> mark(cons(0, zeros)) 86.65/27.22 active(take(0, IL)) -> mark(uTake1(isNatIList(IL))) 86.65/27.22 active(uTake1(tt)) -> mark(nil) 86.65/27.22 active(take(s(M), cons(N, IL))) -> mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL)) 86.65/27.22 active(uTake2(tt, M, N, IL)) -> mark(cons(N, take(M, IL))) 86.65/27.22 active(length(cons(N, L))) -> mark(uLength(and(isNat(N), isNatList(L)), L)) 86.65/27.22 active(uLength(tt, L)) -> mark(s(length(L))) 86.65/27.22 mark(and(X1, X2)) -> active(and(mark(X1), mark(X2))) 86.65/27.22 mark(tt) -> active(tt) 86.65/27.22 mark(isNatIList(X)) -> active(isNatIList(X)) 86.65/27.22 mark(isNatList(X)) -> active(isNatList(X)) 86.65/27.22 mark(isNat(X)) -> active(isNat(X)) 86.65/27.22 mark(0) -> active(0) 86.65/27.22 mark(s(X)) -> active(s(mark(X))) 86.65/27.22 mark(length(X)) -> active(length(mark(X))) 86.65/27.22 mark(zeros) -> active(zeros) 86.65/27.22 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 86.65/27.22 mark(nil) -> active(nil) 86.65/27.22 mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) 86.65/27.22 mark(uTake1(X)) -> active(uTake1(mark(X))) 86.65/27.22 mark(uTake2(X1, X2, X3, X4)) -> active(uTake2(mark(X1), X2, X3, X4)) 86.65/27.22 mark(uLength(X1, X2)) -> active(uLength(mark(X1), X2)) 86.65/27.22 and(mark(X1), X2) -> and(X1, X2) 86.65/27.22 and(X1, mark(X2)) -> and(X1, X2) 86.65/27.22 and(active(X1), X2) -> and(X1, X2) 86.65/27.22 and(X1, active(X2)) -> and(X1, X2) 86.65/27.22 isNatIList(mark(X)) -> isNatIList(X) 86.65/27.22 isNatIList(active(X)) -> isNatIList(X) 86.65/27.22 isNatList(mark(X)) -> isNatList(X) 86.65/27.22 isNatList(active(X)) -> isNatList(X) 86.65/27.22 isNat(mark(X)) -> isNat(X) 86.65/27.22 isNat(active(X)) -> isNat(X) 86.65/27.22 s(mark(X)) -> s(X) 86.65/27.22 s(active(X)) -> s(X) 86.65/27.22 length(mark(X)) -> length(X) 86.65/27.22 length(active(X)) -> length(X) 86.65/27.22 cons(mark(X1), X2) -> cons(X1, X2) 86.65/27.22 cons(X1, mark(X2)) -> cons(X1, X2) 86.65/27.22 cons(active(X1), X2) -> cons(X1, X2) 86.65/27.22 cons(X1, active(X2)) -> cons(X1, X2) 86.65/27.22 take(mark(X1), X2) -> take(X1, X2) 86.65/27.22 take(X1, mark(X2)) -> take(X1, X2) 86.65/27.22 take(active(X1), X2) -> take(X1, X2) 86.65/27.22 take(X1, active(X2)) -> take(X1, X2) 86.65/27.22 uTake1(mark(X)) -> uTake1(X) 86.65/27.22 uTake1(active(X)) -> uTake1(X) 86.65/27.22 uTake2(mark(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.22 uTake2(X1, mark(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.22 uTake2(X1, X2, mark(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.22 uTake2(X1, X2, X3, mark(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.22 uTake2(active(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.22 uTake2(X1, active(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.22 uTake2(X1, X2, active(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.22 uTake2(X1, X2, X3, active(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.22 uLength(mark(X1), X2) -> uLength(X1, X2) 86.65/27.22 uLength(X1, mark(X2)) -> uLength(X1, X2) 86.65/27.22 uLength(active(X1), X2) -> uLength(X1, X2) 86.65/27.22 uLength(X1, active(X2)) -> uLength(X1, X2) 86.65/27.22 86.65/27.22 The set Q consists of the following terms: 86.65/27.22 86.65/27.22 active(and(tt, x0)) 86.65/27.22 active(isNatIList(x0)) 86.65/27.22 active(isNat(0)) 86.65/27.22 active(isNat(s(x0))) 86.65/27.22 active(isNat(length(x0))) 86.65/27.22 active(isNatList(nil)) 86.65/27.22 active(isNatList(cons(x0, x1))) 86.65/27.22 active(isNatList(take(x0, x1))) 86.65/27.22 active(zeros) 86.65/27.22 active(take(0, x0)) 86.65/27.22 active(uTake1(tt)) 86.65/27.22 active(take(s(x0), cons(x1, x2))) 86.65/27.22 active(uTake2(tt, x0, x1, x2)) 86.65/27.22 active(length(cons(x0, x1))) 86.65/27.22 active(uLength(tt, x0)) 86.65/27.22 mark(and(x0, x1)) 86.65/27.22 mark(tt) 86.65/27.22 mark(isNatIList(x0)) 86.65/27.22 mark(isNatList(x0)) 86.65/27.22 mark(isNat(x0)) 86.65/27.22 mark(0) 86.65/27.22 mark(s(x0)) 86.65/27.22 mark(length(x0)) 86.65/27.22 mark(zeros) 86.65/27.22 mark(cons(x0, x1)) 86.65/27.22 mark(nil) 86.65/27.22 mark(take(x0, x1)) 86.65/27.22 mark(uTake1(x0)) 86.65/27.22 mark(uTake2(x0, x1, x2, x3)) 86.65/27.22 mark(uLength(x0, x1)) 86.65/27.22 and(mark(x0), x1) 86.65/27.22 and(x0, mark(x1)) 86.65/27.22 and(active(x0), x1) 86.65/27.22 and(x0, active(x1)) 86.65/27.22 isNatIList(mark(x0)) 86.65/27.22 isNatIList(active(x0)) 86.65/27.22 isNatList(mark(x0)) 86.65/27.22 isNatList(active(x0)) 86.65/27.22 isNat(mark(x0)) 86.65/27.22 isNat(active(x0)) 86.65/27.22 s(mark(x0)) 86.65/27.22 s(active(x0)) 86.65/27.22 length(mark(x0)) 86.65/27.22 length(active(x0)) 86.65/27.22 cons(mark(x0), x1) 86.65/27.22 cons(x0, mark(x1)) 86.65/27.22 cons(active(x0), x1) 86.65/27.22 cons(x0, active(x1)) 86.65/27.22 take(mark(x0), x1) 86.65/27.22 take(x0, mark(x1)) 86.65/27.22 take(active(x0), x1) 86.65/27.22 take(x0, active(x1)) 86.65/27.22 uTake1(mark(x0)) 86.65/27.22 uTake1(active(x0)) 86.65/27.22 uTake2(mark(x0), x1, x2, x3) 86.65/27.22 uTake2(x0, mark(x1), x2, x3) 86.65/27.22 uTake2(x0, x1, mark(x2), x3) 86.65/27.22 uTake2(x0, x1, x2, mark(x3)) 86.65/27.22 uTake2(active(x0), x1, x2, x3) 86.65/27.22 uTake2(x0, active(x1), x2, x3) 86.65/27.22 uTake2(x0, x1, active(x2), x3) 86.65/27.22 uTake2(x0, x1, x2, active(x3)) 86.65/27.22 uLength(mark(x0), x1) 86.65/27.22 uLength(x0, mark(x1)) 86.65/27.22 uLength(active(x0), x1) 86.65/27.22 uLength(x0, active(x1)) 86.65/27.22 86.65/27.22 We have to consider all minimal (P,Q,R)-chains. 86.65/27.22 ---------------------------------------- 86.65/27.22 86.65/27.22 (76) UsableRulesProof (EQUIVALENT) 86.65/27.22 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. 86.65/27.22 ---------------------------------------- 86.65/27.22 86.65/27.22 (77) 86.65/27.22 Obligation: 86.65/27.22 Q DP problem: 86.65/27.22 The TRS P consists of the following rules: 86.65/27.22 86.65/27.22 AND(X1, mark(X2)) -> AND(X1, X2) 86.65/27.22 AND(mark(X1), X2) -> AND(X1, X2) 86.65/27.22 AND(active(X1), X2) -> AND(X1, X2) 86.65/27.22 AND(X1, active(X2)) -> AND(X1, X2) 86.65/27.22 86.65/27.22 R is empty. 86.65/27.22 The set Q consists of the following terms: 86.65/27.22 86.65/27.22 active(and(tt, x0)) 86.65/27.22 active(isNatIList(x0)) 86.65/27.22 active(isNat(0)) 86.65/27.22 active(isNat(s(x0))) 86.65/27.22 active(isNat(length(x0))) 86.65/27.22 active(isNatList(nil)) 86.65/27.22 active(isNatList(cons(x0, x1))) 86.65/27.22 active(isNatList(take(x0, x1))) 86.65/27.22 active(zeros) 86.65/27.22 active(take(0, x0)) 86.65/27.22 active(uTake1(tt)) 86.65/27.22 active(take(s(x0), cons(x1, x2))) 86.65/27.22 active(uTake2(tt, x0, x1, x2)) 86.65/27.22 active(length(cons(x0, x1))) 86.65/27.22 active(uLength(tt, x0)) 86.65/27.22 mark(and(x0, x1)) 86.65/27.22 mark(tt) 86.65/27.22 mark(isNatIList(x0)) 86.65/27.22 mark(isNatList(x0)) 86.65/27.22 mark(isNat(x0)) 86.65/27.22 mark(0) 86.65/27.22 mark(s(x0)) 86.65/27.22 mark(length(x0)) 86.65/27.22 mark(zeros) 86.65/27.22 mark(cons(x0, x1)) 86.65/27.22 mark(nil) 86.65/27.22 mark(take(x0, x1)) 86.65/27.22 mark(uTake1(x0)) 86.65/27.22 mark(uTake2(x0, x1, x2, x3)) 86.65/27.22 mark(uLength(x0, x1)) 86.65/27.22 and(mark(x0), x1) 86.65/27.22 and(x0, mark(x1)) 86.65/27.22 and(active(x0), x1) 86.65/27.22 and(x0, active(x1)) 86.65/27.22 isNatIList(mark(x0)) 86.65/27.22 isNatIList(active(x0)) 86.65/27.22 isNatList(mark(x0)) 86.65/27.22 isNatList(active(x0)) 86.65/27.22 isNat(mark(x0)) 86.65/27.22 isNat(active(x0)) 86.65/27.22 s(mark(x0)) 86.65/27.22 s(active(x0)) 86.65/27.22 length(mark(x0)) 86.65/27.22 length(active(x0)) 86.65/27.22 cons(mark(x0), x1) 86.65/27.22 cons(x0, mark(x1)) 86.65/27.22 cons(active(x0), x1) 86.65/27.22 cons(x0, active(x1)) 86.65/27.22 take(mark(x0), x1) 86.65/27.22 take(x0, mark(x1)) 86.65/27.22 take(active(x0), x1) 86.65/27.22 take(x0, active(x1)) 86.65/27.22 uTake1(mark(x0)) 86.65/27.22 uTake1(active(x0)) 86.65/27.22 uTake2(mark(x0), x1, x2, x3) 86.65/27.22 uTake2(x0, mark(x1), x2, x3) 86.65/27.22 uTake2(x0, x1, mark(x2), x3) 86.65/27.22 uTake2(x0, x1, x2, mark(x3)) 86.65/27.22 uTake2(active(x0), x1, x2, x3) 86.65/27.22 uTake2(x0, active(x1), x2, x3) 86.65/27.22 uTake2(x0, x1, active(x2), x3) 86.65/27.22 uTake2(x0, x1, x2, active(x3)) 86.65/27.22 uLength(mark(x0), x1) 86.65/27.22 uLength(x0, mark(x1)) 86.65/27.22 uLength(active(x0), x1) 86.65/27.22 uLength(x0, active(x1)) 86.65/27.22 86.65/27.22 We have to consider all minimal (P,Q,R)-chains. 86.65/27.22 ---------------------------------------- 86.65/27.22 86.65/27.22 (78) QReductionProof (EQUIVALENT) 86.65/27.22 We deleted the following terms from Q as each root-symbol of these terms does neither occur in P nor in R.[THIEMANN]. 86.65/27.22 86.65/27.22 and(mark(x0), x1) 86.65/27.22 and(x0, mark(x1)) 86.65/27.22 and(active(x0), x1) 86.65/27.22 and(x0, active(x1)) 86.65/27.22 isNatIList(mark(x0)) 86.65/27.22 isNatIList(active(x0)) 86.65/27.22 isNatList(mark(x0)) 86.65/27.22 isNatList(active(x0)) 86.65/27.22 isNat(mark(x0)) 86.65/27.22 isNat(active(x0)) 86.65/27.22 s(mark(x0)) 86.65/27.22 s(active(x0)) 86.65/27.22 length(mark(x0)) 86.65/27.22 length(active(x0)) 86.65/27.22 cons(mark(x0), x1) 86.65/27.22 cons(x0, mark(x1)) 86.65/27.22 cons(active(x0), x1) 86.65/27.22 cons(x0, active(x1)) 86.65/27.22 take(mark(x0), x1) 86.65/27.22 take(x0, mark(x1)) 86.65/27.22 take(active(x0), x1) 86.65/27.22 take(x0, active(x1)) 86.65/27.22 uTake1(mark(x0)) 86.65/27.22 uTake1(active(x0)) 86.65/27.22 uTake2(mark(x0), x1, x2, x3) 86.65/27.22 uTake2(x0, mark(x1), x2, x3) 86.65/27.22 uTake2(x0, x1, mark(x2), x3) 86.65/27.22 uTake2(x0, x1, x2, mark(x3)) 86.65/27.22 uTake2(active(x0), x1, x2, x3) 86.65/27.22 uTake2(x0, active(x1), x2, x3) 86.65/27.22 uTake2(x0, x1, active(x2), x3) 86.65/27.22 uTake2(x0, x1, x2, active(x3)) 86.65/27.22 uLength(mark(x0), x1) 86.65/27.22 uLength(x0, mark(x1)) 86.65/27.22 uLength(active(x0), x1) 86.65/27.22 uLength(x0, active(x1)) 86.65/27.22 86.65/27.22 86.65/27.22 ---------------------------------------- 86.65/27.22 86.65/27.22 (79) 86.65/27.22 Obligation: 86.65/27.22 Q DP problem: 86.65/27.22 The TRS P consists of the following rules: 86.65/27.22 86.65/27.22 AND(X1, mark(X2)) -> AND(X1, X2) 86.65/27.22 AND(mark(X1), X2) -> AND(X1, X2) 86.65/27.22 AND(active(X1), X2) -> AND(X1, X2) 86.65/27.22 AND(X1, active(X2)) -> AND(X1, X2) 86.65/27.22 86.65/27.22 R is empty. 86.65/27.22 The set Q consists of the following terms: 86.65/27.22 86.65/27.22 active(and(tt, x0)) 86.65/27.22 active(isNatIList(x0)) 86.65/27.22 active(isNat(0)) 86.65/27.22 active(isNat(s(x0))) 86.65/27.22 active(isNat(length(x0))) 86.65/27.22 active(isNatList(nil)) 86.65/27.22 active(isNatList(cons(x0, x1))) 86.65/27.22 active(isNatList(take(x0, x1))) 86.65/27.22 active(zeros) 86.65/27.22 active(take(0, x0)) 86.65/27.22 active(uTake1(tt)) 86.65/27.22 active(take(s(x0), cons(x1, x2))) 86.65/27.22 active(uTake2(tt, x0, x1, x2)) 86.65/27.22 active(length(cons(x0, x1))) 86.65/27.22 active(uLength(tt, x0)) 86.65/27.22 mark(and(x0, x1)) 86.65/27.22 mark(tt) 86.65/27.22 mark(isNatIList(x0)) 86.65/27.22 mark(isNatList(x0)) 86.65/27.22 mark(isNat(x0)) 86.65/27.22 mark(0) 86.65/27.22 mark(s(x0)) 86.65/27.22 mark(length(x0)) 86.65/27.22 mark(zeros) 86.65/27.22 mark(cons(x0, x1)) 86.65/27.22 mark(nil) 86.65/27.22 mark(take(x0, x1)) 86.65/27.22 mark(uTake1(x0)) 86.65/27.22 mark(uTake2(x0, x1, x2, x3)) 86.65/27.22 mark(uLength(x0, x1)) 86.65/27.22 86.65/27.22 We have to consider all minimal (P,Q,R)-chains. 86.65/27.22 ---------------------------------------- 86.65/27.22 86.65/27.22 (80) QDPSizeChangeProof (EQUIVALENT) 86.65/27.22 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. 86.65/27.22 86.65/27.22 From the DPs we obtained the following set of size-change graphs: 86.65/27.22 *AND(X1, mark(X2)) -> AND(X1, X2) 86.65/27.22 The graph contains the following edges 1 >= 1, 2 > 2 86.65/27.22 86.65/27.22 86.65/27.22 *AND(mark(X1), X2) -> AND(X1, X2) 86.65/27.22 The graph contains the following edges 1 > 1, 2 >= 2 86.65/27.22 86.65/27.22 86.65/27.22 *AND(active(X1), X2) -> AND(X1, X2) 86.65/27.22 The graph contains the following edges 1 > 1, 2 >= 2 86.65/27.22 86.65/27.22 86.65/27.22 *AND(X1, active(X2)) -> AND(X1, X2) 86.65/27.22 The graph contains the following edges 1 >= 1, 2 > 2 86.65/27.22 86.65/27.22 86.65/27.22 ---------------------------------------- 86.65/27.22 86.65/27.22 (81) 86.65/27.22 YES 86.65/27.22 86.65/27.22 ---------------------------------------- 86.65/27.22 86.65/27.22 (82) 86.65/27.22 Obligation: 86.65/27.22 Q DP problem: 86.65/27.22 The TRS P consists of the following rules: 86.65/27.22 86.65/27.22 MARK(and(X1, X2)) -> ACTIVE(and(mark(X1), mark(X2))) 86.65/27.22 ACTIVE(and(tt, T)) -> MARK(T) 86.65/27.22 MARK(and(X1, X2)) -> MARK(X1) 86.65/27.22 MARK(and(X1, X2)) -> MARK(X2) 86.65/27.22 MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) 86.65/27.22 ACTIVE(isNatIList(IL)) -> MARK(isNatList(IL)) 86.65/27.22 MARK(isNatList(X)) -> ACTIVE(isNatList(X)) 86.65/27.22 ACTIVE(isNatList(cons(N, L))) -> MARK(and(isNat(N), isNatList(L))) 86.65/27.22 ACTIVE(isNatList(take(N, IL))) -> MARK(and(isNat(N), isNatIList(IL))) 86.65/27.22 ACTIVE(isNatIList(cons(N, IL))) -> MARK(and(isNat(N), isNatIList(IL))) 86.65/27.22 MARK(isNat(X)) -> ACTIVE(isNat(X)) 86.65/27.22 ACTIVE(isNat(s(N))) -> MARK(isNat(N)) 86.65/27.22 ACTIVE(isNat(length(L))) -> MARK(isNatList(L)) 86.65/27.22 MARK(s(X)) -> ACTIVE(s(mark(X))) 86.65/27.22 ACTIVE(take(0, IL)) -> MARK(uTake1(isNatIList(IL))) 86.65/27.22 MARK(uTake1(X)) -> ACTIVE(uTake1(mark(X))) 86.65/27.22 ACTIVE(take(s(M), cons(N, IL))) -> MARK(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL)) 86.65/27.22 MARK(uTake2(X1, X2, X3, X4)) -> ACTIVE(uTake2(mark(X1), X2, X3, X4)) 86.65/27.22 ACTIVE(uTake2(tt, M, N, IL)) -> MARK(cons(N, take(M, IL))) 86.65/27.22 MARK(cons(X1, X2)) -> ACTIVE(cons(mark(X1), X2)) 86.65/27.22 ACTIVE(length(cons(N, L))) -> MARK(uLength(and(isNat(N), isNatList(L)), L)) 86.65/27.22 MARK(uLength(X1, X2)) -> ACTIVE(uLength(mark(X1), X2)) 86.65/27.22 ACTIVE(uLength(tt, L)) -> MARK(s(length(L))) 86.65/27.22 MARK(s(X)) -> MARK(X) 86.65/27.22 MARK(length(X)) -> ACTIVE(length(mark(X))) 86.65/27.22 MARK(length(X)) -> MARK(X) 86.65/27.22 MARK(zeros) -> ACTIVE(zeros) 86.65/27.22 ACTIVE(zeros) -> MARK(cons(0, zeros)) 86.65/27.22 MARK(cons(X1, X2)) -> MARK(X1) 86.65/27.22 MARK(take(X1, X2)) -> ACTIVE(take(mark(X1), mark(X2))) 86.65/27.22 MARK(take(X1, X2)) -> MARK(X1) 86.65/27.22 MARK(take(X1, X2)) -> MARK(X2) 86.65/27.22 MARK(uTake1(X)) -> MARK(X) 86.65/27.22 MARK(uTake2(X1, X2, X3, X4)) -> MARK(X1) 86.65/27.22 MARK(uLength(X1, X2)) -> MARK(X1) 86.65/27.22 86.65/27.22 The TRS R consists of the following rules: 86.65/27.22 86.65/27.22 active(and(tt, T)) -> mark(T) 86.65/27.22 active(isNatIList(IL)) -> mark(isNatList(IL)) 86.65/27.22 active(isNat(0)) -> mark(tt) 86.65/27.22 active(isNat(s(N))) -> mark(isNat(N)) 86.65/27.22 active(isNat(length(L))) -> mark(isNatList(L)) 86.65/27.22 active(isNatIList(zeros)) -> mark(tt) 86.65/27.22 active(isNatIList(cons(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.22 active(isNatList(nil)) -> mark(tt) 86.65/27.22 active(isNatList(cons(N, L))) -> mark(and(isNat(N), isNatList(L))) 86.65/27.22 active(isNatList(take(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.22 active(zeros) -> mark(cons(0, zeros)) 86.65/27.22 active(take(0, IL)) -> mark(uTake1(isNatIList(IL))) 86.65/27.22 active(uTake1(tt)) -> mark(nil) 86.65/27.22 active(take(s(M), cons(N, IL))) -> mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL)) 86.65/27.22 active(uTake2(tt, M, N, IL)) -> mark(cons(N, take(M, IL))) 86.65/27.22 active(length(cons(N, L))) -> mark(uLength(and(isNat(N), isNatList(L)), L)) 86.65/27.22 active(uLength(tt, L)) -> mark(s(length(L))) 86.65/27.22 mark(and(X1, X2)) -> active(and(mark(X1), mark(X2))) 86.65/27.22 mark(tt) -> active(tt) 86.65/27.22 mark(isNatIList(X)) -> active(isNatIList(X)) 86.65/27.22 mark(isNatList(X)) -> active(isNatList(X)) 86.65/27.22 mark(isNat(X)) -> active(isNat(X)) 86.65/27.22 mark(0) -> active(0) 86.65/27.22 mark(s(X)) -> active(s(mark(X))) 86.65/27.22 mark(length(X)) -> active(length(mark(X))) 86.65/27.22 mark(zeros) -> active(zeros) 86.65/27.22 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 86.65/27.22 mark(nil) -> active(nil) 86.65/27.22 mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) 86.65/27.22 mark(uTake1(X)) -> active(uTake1(mark(X))) 86.65/27.22 mark(uTake2(X1, X2, X3, X4)) -> active(uTake2(mark(X1), X2, X3, X4)) 86.65/27.22 mark(uLength(X1, X2)) -> active(uLength(mark(X1), X2)) 86.65/27.22 and(mark(X1), X2) -> and(X1, X2) 86.65/27.22 and(X1, mark(X2)) -> and(X1, X2) 86.65/27.22 and(active(X1), X2) -> and(X1, X2) 86.65/27.22 and(X1, active(X2)) -> and(X1, X2) 86.65/27.22 isNatIList(mark(X)) -> isNatIList(X) 86.65/27.22 isNatIList(active(X)) -> isNatIList(X) 86.65/27.22 isNatList(mark(X)) -> isNatList(X) 86.65/27.22 isNatList(active(X)) -> isNatList(X) 86.65/27.22 isNat(mark(X)) -> isNat(X) 86.65/27.22 isNat(active(X)) -> isNat(X) 86.65/27.22 s(mark(X)) -> s(X) 86.65/27.22 s(active(X)) -> s(X) 86.65/27.22 length(mark(X)) -> length(X) 86.65/27.22 length(active(X)) -> length(X) 86.65/27.22 cons(mark(X1), X2) -> cons(X1, X2) 86.65/27.22 cons(X1, mark(X2)) -> cons(X1, X2) 86.65/27.22 cons(active(X1), X2) -> cons(X1, X2) 86.65/27.22 cons(X1, active(X2)) -> cons(X1, X2) 86.65/27.22 take(mark(X1), X2) -> take(X1, X2) 86.65/27.22 take(X1, mark(X2)) -> take(X1, X2) 86.65/27.22 take(active(X1), X2) -> take(X1, X2) 86.65/27.22 take(X1, active(X2)) -> take(X1, X2) 86.65/27.22 uTake1(mark(X)) -> uTake1(X) 86.65/27.22 uTake1(active(X)) -> uTake1(X) 86.65/27.22 uTake2(mark(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.22 uTake2(X1, mark(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.22 uTake2(X1, X2, mark(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.22 uTake2(X1, X2, X3, mark(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.22 uTake2(active(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.22 uTake2(X1, active(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.22 uTake2(X1, X2, active(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.22 uTake2(X1, X2, X3, active(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.22 uLength(mark(X1), X2) -> uLength(X1, X2) 86.65/27.22 uLength(X1, mark(X2)) -> uLength(X1, X2) 86.65/27.22 uLength(active(X1), X2) -> uLength(X1, X2) 86.65/27.22 uLength(X1, active(X2)) -> uLength(X1, X2) 86.65/27.22 86.65/27.22 The set Q consists of the following terms: 86.65/27.22 86.65/27.22 active(and(tt, x0)) 86.65/27.22 active(isNatIList(x0)) 86.65/27.22 active(isNat(0)) 86.65/27.22 active(isNat(s(x0))) 86.65/27.22 active(isNat(length(x0))) 86.65/27.22 active(isNatList(nil)) 86.65/27.22 active(isNatList(cons(x0, x1))) 86.65/27.22 active(isNatList(take(x0, x1))) 86.65/27.22 active(zeros) 86.65/27.22 active(take(0, x0)) 86.65/27.22 active(uTake1(tt)) 86.65/27.22 active(take(s(x0), cons(x1, x2))) 86.65/27.22 active(uTake2(tt, x0, x1, x2)) 86.65/27.22 active(length(cons(x0, x1))) 86.65/27.22 active(uLength(tt, x0)) 86.65/27.22 mark(and(x0, x1)) 86.65/27.22 mark(tt) 86.65/27.22 mark(isNatIList(x0)) 86.65/27.22 mark(isNatList(x0)) 86.65/27.22 mark(isNat(x0)) 86.65/27.22 mark(0) 86.65/27.22 mark(s(x0)) 86.65/27.22 mark(length(x0)) 86.65/27.22 mark(zeros) 86.65/27.22 mark(cons(x0, x1)) 86.65/27.22 mark(nil) 86.65/27.22 mark(take(x0, x1)) 86.65/27.22 mark(uTake1(x0)) 86.65/27.22 mark(uTake2(x0, x1, x2, x3)) 86.65/27.22 mark(uLength(x0, x1)) 86.65/27.22 and(mark(x0), x1) 86.65/27.22 and(x0, mark(x1)) 86.65/27.22 and(active(x0), x1) 86.65/27.22 and(x0, active(x1)) 86.65/27.22 isNatIList(mark(x0)) 86.65/27.22 isNatIList(active(x0)) 86.65/27.22 isNatList(mark(x0)) 86.65/27.22 isNatList(active(x0)) 86.65/27.22 isNat(mark(x0)) 86.65/27.22 isNat(active(x0)) 86.65/27.22 s(mark(x0)) 86.65/27.22 s(active(x0)) 86.65/27.22 length(mark(x0)) 86.65/27.22 length(active(x0)) 86.65/27.22 cons(mark(x0), x1) 86.65/27.22 cons(x0, mark(x1)) 86.65/27.22 cons(active(x0), x1) 86.65/27.22 cons(x0, active(x1)) 86.65/27.22 take(mark(x0), x1) 86.65/27.22 take(x0, mark(x1)) 86.65/27.22 take(active(x0), x1) 86.65/27.22 take(x0, active(x1)) 86.65/27.22 uTake1(mark(x0)) 86.65/27.22 uTake1(active(x0)) 86.65/27.22 uTake2(mark(x0), x1, x2, x3) 86.65/27.22 uTake2(x0, mark(x1), x2, x3) 86.65/27.22 uTake2(x0, x1, mark(x2), x3) 86.65/27.22 uTake2(x0, x1, x2, mark(x3)) 86.65/27.22 uTake2(active(x0), x1, x2, x3) 86.65/27.22 uTake2(x0, active(x1), x2, x3) 86.65/27.22 uTake2(x0, x1, active(x2), x3) 86.65/27.22 uTake2(x0, x1, x2, active(x3)) 86.65/27.22 uLength(mark(x0), x1) 86.65/27.22 uLength(x0, mark(x1)) 86.65/27.22 uLength(active(x0), x1) 86.65/27.22 uLength(x0, active(x1)) 86.65/27.22 86.65/27.22 We have to consider all minimal (P,Q,R)-chains. 86.65/27.22 ---------------------------------------- 86.65/27.22 86.65/27.22 (83) UsableRulesProof (EQUIVALENT) 86.65/27.22 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. 86.65/27.22 ---------------------------------------- 86.65/27.22 86.65/27.22 (84) 86.65/27.22 Obligation: 86.65/27.22 Q DP problem: 86.65/27.22 The TRS P consists of the following rules: 86.65/27.22 86.65/27.22 MARK(and(X1, X2)) -> ACTIVE(and(mark(X1), mark(X2))) 86.65/27.22 ACTIVE(and(tt, T)) -> MARK(T) 86.65/27.22 MARK(and(X1, X2)) -> MARK(X1) 86.65/27.22 MARK(and(X1, X2)) -> MARK(X2) 86.65/27.22 MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) 86.65/27.22 ACTIVE(isNatIList(IL)) -> MARK(isNatList(IL)) 86.65/27.22 MARK(isNatList(X)) -> ACTIVE(isNatList(X)) 86.65/27.22 ACTIVE(isNatList(cons(N, L))) -> MARK(and(isNat(N), isNatList(L))) 86.65/27.22 ACTIVE(isNatList(take(N, IL))) -> MARK(and(isNat(N), isNatIList(IL))) 86.65/27.22 ACTIVE(isNatIList(cons(N, IL))) -> MARK(and(isNat(N), isNatIList(IL))) 86.65/27.22 MARK(isNat(X)) -> ACTIVE(isNat(X)) 86.65/27.22 ACTIVE(isNat(s(N))) -> MARK(isNat(N)) 86.65/27.22 ACTIVE(isNat(length(L))) -> MARK(isNatList(L)) 86.65/27.22 MARK(s(X)) -> ACTIVE(s(mark(X))) 86.65/27.22 ACTIVE(take(0, IL)) -> MARK(uTake1(isNatIList(IL))) 86.65/27.22 MARK(uTake1(X)) -> ACTIVE(uTake1(mark(X))) 86.65/27.22 ACTIVE(take(s(M), cons(N, IL))) -> MARK(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL)) 86.65/27.22 MARK(uTake2(X1, X2, X3, X4)) -> ACTIVE(uTake2(mark(X1), X2, X3, X4)) 86.65/27.22 ACTIVE(uTake2(tt, M, N, IL)) -> MARK(cons(N, take(M, IL))) 86.65/27.22 MARK(cons(X1, X2)) -> ACTIVE(cons(mark(X1), X2)) 86.65/27.22 ACTIVE(length(cons(N, L))) -> MARK(uLength(and(isNat(N), isNatList(L)), L)) 86.65/27.22 MARK(uLength(X1, X2)) -> ACTIVE(uLength(mark(X1), X2)) 86.65/27.22 ACTIVE(uLength(tt, L)) -> MARK(s(length(L))) 86.65/27.22 MARK(s(X)) -> MARK(X) 86.65/27.22 MARK(length(X)) -> ACTIVE(length(mark(X))) 86.65/27.22 MARK(length(X)) -> MARK(X) 86.65/27.22 MARK(zeros) -> ACTIVE(zeros) 86.65/27.22 ACTIVE(zeros) -> MARK(cons(0, zeros)) 86.65/27.22 MARK(cons(X1, X2)) -> MARK(X1) 86.65/27.22 MARK(take(X1, X2)) -> ACTIVE(take(mark(X1), mark(X2))) 86.65/27.22 MARK(take(X1, X2)) -> MARK(X1) 86.65/27.22 MARK(take(X1, X2)) -> MARK(X2) 86.65/27.22 MARK(uTake1(X)) -> MARK(X) 86.65/27.22 MARK(uTake2(X1, X2, X3, X4)) -> MARK(X1) 86.65/27.22 MARK(uLength(X1, X2)) -> MARK(X1) 86.65/27.22 86.65/27.22 The TRS R consists of the following rules: 86.65/27.22 86.65/27.22 mark(and(X1, X2)) -> active(and(mark(X1), mark(X2))) 86.65/27.22 active(and(tt, T)) -> mark(T) 86.65/27.22 mark(isNatIList(X)) -> active(isNatIList(X)) 86.65/27.22 active(isNatIList(IL)) -> mark(isNatList(IL)) 86.65/27.22 mark(isNatList(X)) -> active(isNatList(X)) 86.65/27.22 active(isNatList(cons(N, L))) -> mark(and(isNat(N), isNatList(L))) 86.65/27.22 active(isNatList(take(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.22 active(isNatIList(cons(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.22 mark(isNat(X)) -> active(isNat(X)) 86.65/27.22 active(isNat(s(N))) -> mark(isNat(N)) 86.65/27.22 active(isNat(length(L))) -> mark(isNatList(L)) 86.65/27.22 mark(s(X)) -> active(s(mark(X))) 86.65/27.22 active(zeros) -> mark(cons(0, zeros)) 86.65/27.22 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 86.65/27.22 active(take(0, IL)) -> mark(uTake1(isNatIList(IL))) 86.65/27.22 mark(uTake1(X)) -> active(uTake1(mark(X))) 86.65/27.22 active(take(s(M), cons(N, IL))) -> mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL)) 86.65/27.22 mark(uTake2(X1, X2, X3, X4)) -> active(uTake2(mark(X1), X2, X3, X4)) 86.65/27.22 active(uTake2(tt, M, N, IL)) -> mark(cons(N, take(M, IL))) 86.65/27.22 active(length(cons(N, L))) -> mark(uLength(and(isNat(N), isNatList(L)), L)) 86.65/27.22 mark(uLength(X1, X2)) -> active(uLength(mark(X1), X2)) 86.65/27.22 active(uLength(tt, L)) -> mark(s(length(L))) 86.65/27.22 mark(length(X)) -> active(length(mark(X))) 86.65/27.22 mark(zeros) -> active(zeros) 86.65/27.22 mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) 86.65/27.22 mark(tt) -> active(tt) 86.65/27.22 mark(0) -> active(0) 86.65/27.22 mark(nil) -> active(nil) 86.65/27.22 take(X1, mark(X2)) -> take(X1, X2) 86.65/27.22 take(mark(X1), X2) -> take(X1, X2) 86.65/27.22 take(active(X1), X2) -> take(X1, X2) 86.65/27.22 take(X1, active(X2)) -> take(X1, X2) 86.65/27.22 and(X1, mark(X2)) -> and(X1, X2) 86.65/27.22 and(mark(X1), X2) -> and(X1, X2) 86.65/27.22 and(active(X1), X2) -> and(X1, X2) 86.65/27.22 and(X1, active(X2)) -> and(X1, X2) 86.65/27.22 active(isNat(0)) -> mark(tt) 86.65/27.22 active(isNatIList(zeros)) -> mark(tt) 86.65/27.22 active(isNatList(nil)) -> mark(tt) 86.65/27.22 active(uTake1(tt)) -> mark(nil) 86.65/27.22 s(active(X)) -> s(X) 86.65/27.22 s(mark(X)) -> s(X) 86.65/27.22 cons(X1, mark(X2)) -> cons(X1, X2) 86.65/27.22 cons(mark(X1), X2) -> cons(X1, X2) 86.65/27.22 cons(active(X1), X2) -> cons(X1, X2) 86.65/27.22 cons(X1, active(X2)) -> cons(X1, X2) 86.65/27.22 uTake1(active(X)) -> uTake1(X) 86.65/27.22 uTake1(mark(X)) -> uTake1(X) 86.65/27.22 uTake2(X1, mark(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.22 uTake2(mark(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.22 uTake2(X1, X2, mark(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.22 uTake2(X1, X2, X3, mark(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.22 uTake2(active(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.22 uTake2(X1, active(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.22 uTake2(X1, X2, active(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.22 uTake2(X1, X2, X3, active(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.22 uLength(X1, mark(X2)) -> uLength(X1, X2) 86.65/27.22 uLength(mark(X1), X2) -> uLength(X1, X2) 86.65/27.22 uLength(active(X1), X2) -> uLength(X1, X2) 86.65/27.22 uLength(X1, active(X2)) -> uLength(X1, X2) 86.65/27.22 length(active(X)) -> length(X) 86.65/27.22 length(mark(X)) -> length(X) 86.65/27.22 86.65/27.22 The set Q consists of the following terms: 86.65/27.22 86.65/27.22 active(and(tt, x0)) 86.65/27.22 active(isNatIList(x0)) 86.65/27.22 active(isNat(0)) 86.65/27.22 active(isNat(s(x0))) 86.65/27.22 active(isNat(length(x0))) 86.65/27.22 active(isNatList(nil)) 86.65/27.22 active(isNatList(cons(x0, x1))) 86.65/27.22 active(isNatList(take(x0, x1))) 86.65/27.22 active(zeros) 86.65/27.22 active(take(0, x0)) 86.65/27.22 active(uTake1(tt)) 86.65/27.22 active(take(s(x0), cons(x1, x2))) 86.65/27.22 active(uTake2(tt, x0, x1, x2)) 86.65/27.22 active(length(cons(x0, x1))) 86.65/27.22 active(uLength(tt, x0)) 86.65/27.22 mark(and(x0, x1)) 86.65/27.22 mark(tt) 86.65/27.22 mark(isNatIList(x0)) 86.65/27.22 mark(isNatList(x0)) 86.65/27.22 mark(isNat(x0)) 86.65/27.22 mark(0) 86.65/27.22 mark(s(x0)) 86.65/27.22 mark(length(x0)) 86.65/27.22 mark(zeros) 86.65/27.22 mark(cons(x0, x1)) 86.65/27.22 mark(nil) 86.65/27.22 mark(take(x0, x1)) 86.65/27.22 mark(uTake1(x0)) 86.65/27.22 mark(uTake2(x0, x1, x2, x3)) 86.65/27.22 mark(uLength(x0, x1)) 86.65/27.22 and(mark(x0), x1) 86.65/27.22 and(x0, mark(x1)) 86.65/27.22 and(active(x0), x1) 86.65/27.22 and(x0, active(x1)) 86.65/27.22 isNatIList(mark(x0)) 86.65/27.22 isNatIList(active(x0)) 86.65/27.22 isNatList(mark(x0)) 86.65/27.22 isNatList(active(x0)) 86.65/27.22 isNat(mark(x0)) 86.65/27.22 isNat(active(x0)) 86.65/27.22 s(mark(x0)) 86.65/27.22 s(active(x0)) 86.65/27.22 length(mark(x0)) 86.65/27.22 length(active(x0)) 86.65/27.22 cons(mark(x0), x1) 86.65/27.22 cons(x0, mark(x1)) 86.65/27.22 cons(active(x0), x1) 86.65/27.22 cons(x0, active(x1)) 86.65/27.22 take(mark(x0), x1) 86.65/27.22 take(x0, mark(x1)) 86.65/27.22 take(active(x0), x1) 86.65/27.22 take(x0, active(x1)) 86.65/27.22 uTake1(mark(x0)) 86.65/27.22 uTake1(active(x0)) 86.65/27.22 uTake2(mark(x0), x1, x2, x3) 86.65/27.22 uTake2(x0, mark(x1), x2, x3) 86.65/27.22 uTake2(x0, x1, mark(x2), x3) 86.65/27.22 uTake2(x0, x1, x2, mark(x3)) 86.65/27.22 uTake2(active(x0), x1, x2, x3) 86.65/27.22 uTake2(x0, active(x1), x2, x3) 86.65/27.22 uTake2(x0, x1, active(x2), x3) 86.65/27.22 uTake2(x0, x1, x2, active(x3)) 86.65/27.22 uLength(mark(x0), x1) 86.65/27.22 uLength(x0, mark(x1)) 86.65/27.22 uLength(active(x0), x1) 86.65/27.22 uLength(x0, active(x1)) 86.65/27.22 86.65/27.22 We have to consider all minimal (P,Q,R)-chains. 86.65/27.22 ---------------------------------------- 86.65/27.22 86.65/27.22 (85) QDPQMonotonicMRRProof (EQUIVALENT) 86.65/27.22 By using the Q-monotonic rule removal processor with the following ordering, at least one Dependency Pair or term rewrite system rule of this QDP problem can be strictly oriented such that it always occurs at a strongly monotonic position in a (P,Q,R)-chain. 86.65/27.22 86.65/27.22 Strictly oriented dependency pairs: 86.65/27.22 86.65/27.22 MARK(s(X)) -> ACTIVE(s(mark(X))) 86.65/27.22 MARK(uTake1(X)) -> ACTIVE(uTake1(mark(X))) 86.65/27.22 MARK(cons(X1, X2)) -> ACTIVE(cons(mark(X1), X2)) 86.65/27.22 86.65/27.22 86.65/27.22 Used ordering: Polynomial interpretation [POLO]: 86.65/27.22 86.65/27.22 POL(0) = 0 86.65/27.22 POL(ACTIVE(x_1)) = 2*x_1 86.65/27.22 POL(MARK(x_1)) = 2 86.65/27.22 POL(active(x_1)) = 0 86.65/27.22 POL(and(x_1, x_2)) = 1 86.65/27.22 POL(cons(x_1, x_2)) = 0 86.65/27.22 POL(isNat(x_1)) = 1 86.65/27.22 POL(isNatIList(x_1)) = 1 86.65/27.22 POL(isNatList(x_1)) = 1 86.65/27.22 POL(length(x_1)) = 1 86.65/27.22 POL(mark(x_1)) = 0 86.65/27.22 POL(nil) = 0 86.65/27.22 POL(s(x_1)) = 0 86.65/27.22 POL(take(x_1, x_2)) = 1 86.65/27.22 POL(tt) = 0 86.65/27.22 POL(uLength(x_1, x_2)) = 1 86.65/27.22 POL(uTake1(x_1)) = 0 86.65/27.22 POL(uTake2(x_1, x_2, x_3, x_4)) = 1 86.65/27.22 POL(zeros) = 1 86.65/27.22 86.65/27.22 86.65/27.22 ---------------------------------------- 86.65/27.22 86.65/27.22 (86) 86.65/27.22 Obligation: 86.65/27.22 Q DP problem: 86.65/27.22 The TRS P consists of the following rules: 86.65/27.22 86.65/27.22 MARK(and(X1, X2)) -> ACTIVE(and(mark(X1), mark(X2))) 86.65/27.22 ACTIVE(and(tt, T)) -> MARK(T) 86.65/27.22 MARK(and(X1, X2)) -> MARK(X1) 86.65/27.22 MARK(and(X1, X2)) -> MARK(X2) 86.65/27.22 MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) 86.65/27.22 ACTIVE(isNatIList(IL)) -> MARK(isNatList(IL)) 86.65/27.22 MARK(isNatList(X)) -> ACTIVE(isNatList(X)) 86.65/27.22 ACTIVE(isNatList(cons(N, L))) -> MARK(and(isNat(N), isNatList(L))) 86.65/27.22 ACTIVE(isNatList(take(N, IL))) -> MARK(and(isNat(N), isNatIList(IL))) 86.65/27.22 ACTIVE(isNatIList(cons(N, IL))) -> MARK(and(isNat(N), isNatIList(IL))) 86.65/27.22 MARK(isNat(X)) -> ACTIVE(isNat(X)) 86.65/27.22 ACTIVE(isNat(s(N))) -> MARK(isNat(N)) 86.65/27.22 ACTIVE(isNat(length(L))) -> MARK(isNatList(L)) 86.65/27.22 ACTIVE(take(0, IL)) -> MARK(uTake1(isNatIList(IL))) 86.65/27.22 ACTIVE(take(s(M), cons(N, IL))) -> MARK(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL)) 86.65/27.22 MARK(uTake2(X1, X2, X3, X4)) -> ACTIVE(uTake2(mark(X1), X2, X3, X4)) 86.65/27.22 ACTIVE(uTake2(tt, M, N, IL)) -> MARK(cons(N, take(M, IL))) 86.65/27.22 ACTIVE(length(cons(N, L))) -> MARK(uLength(and(isNat(N), isNatList(L)), L)) 86.65/27.22 MARK(uLength(X1, X2)) -> ACTIVE(uLength(mark(X1), X2)) 86.65/27.22 ACTIVE(uLength(tt, L)) -> MARK(s(length(L))) 86.65/27.22 MARK(s(X)) -> MARK(X) 86.65/27.22 MARK(length(X)) -> ACTIVE(length(mark(X))) 86.65/27.22 MARK(length(X)) -> MARK(X) 86.65/27.22 MARK(zeros) -> ACTIVE(zeros) 86.65/27.22 ACTIVE(zeros) -> MARK(cons(0, zeros)) 86.65/27.22 MARK(cons(X1, X2)) -> MARK(X1) 86.65/27.22 MARK(take(X1, X2)) -> ACTIVE(take(mark(X1), mark(X2))) 86.65/27.22 MARK(take(X1, X2)) -> MARK(X1) 86.65/27.22 MARK(take(X1, X2)) -> MARK(X2) 86.65/27.22 MARK(uTake1(X)) -> MARK(X) 86.65/27.22 MARK(uTake2(X1, X2, X3, X4)) -> MARK(X1) 86.65/27.22 MARK(uLength(X1, X2)) -> MARK(X1) 86.65/27.22 86.65/27.22 The TRS R consists of the following rules: 86.65/27.22 86.65/27.22 mark(and(X1, X2)) -> active(and(mark(X1), mark(X2))) 86.65/27.22 active(and(tt, T)) -> mark(T) 86.65/27.22 mark(isNatIList(X)) -> active(isNatIList(X)) 86.65/27.22 active(isNatIList(IL)) -> mark(isNatList(IL)) 86.65/27.22 mark(isNatList(X)) -> active(isNatList(X)) 86.65/27.22 active(isNatList(cons(N, L))) -> mark(and(isNat(N), isNatList(L))) 86.65/27.22 active(isNatList(take(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.22 active(isNatIList(cons(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.22 mark(isNat(X)) -> active(isNat(X)) 86.65/27.22 active(isNat(s(N))) -> mark(isNat(N)) 86.65/27.22 active(isNat(length(L))) -> mark(isNatList(L)) 86.65/27.22 mark(s(X)) -> active(s(mark(X))) 86.65/27.22 active(zeros) -> mark(cons(0, zeros)) 86.65/27.22 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 86.65/27.22 active(take(0, IL)) -> mark(uTake1(isNatIList(IL))) 86.65/27.22 mark(uTake1(X)) -> active(uTake1(mark(X))) 86.65/27.22 active(take(s(M), cons(N, IL))) -> mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL)) 86.65/27.22 mark(uTake2(X1, X2, X3, X4)) -> active(uTake2(mark(X1), X2, X3, X4)) 86.65/27.22 active(uTake2(tt, M, N, IL)) -> mark(cons(N, take(M, IL))) 86.65/27.22 active(length(cons(N, L))) -> mark(uLength(and(isNat(N), isNatList(L)), L)) 86.65/27.22 mark(uLength(X1, X2)) -> active(uLength(mark(X1), X2)) 86.65/27.22 active(uLength(tt, L)) -> mark(s(length(L))) 86.65/27.22 mark(length(X)) -> active(length(mark(X))) 86.65/27.22 mark(zeros) -> active(zeros) 86.65/27.22 mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) 86.65/27.22 mark(tt) -> active(tt) 86.65/27.22 mark(0) -> active(0) 86.65/27.22 mark(nil) -> active(nil) 86.65/27.22 take(X1, mark(X2)) -> take(X1, X2) 86.65/27.22 take(mark(X1), X2) -> take(X1, X2) 86.65/27.22 take(active(X1), X2) -> take(X1, X2) 86.65/27.22 take(X1, active(X2)) -> take(X1, X2) 86.65/27.22 and(X1, mark(X2)) -> and(X1, X2) 86.65/27.22 and(mark(X1), X2) -> and(X1, X2) 86.65/27.22 and(active(X1), X2) -> and(X1, X2) 86.65/27.22 and(X1, active(X2)) -> and(X1, X2) 86.65/27.22 active(isNat(0)) -> mark(tt) 86.65/27.22 active(isNatIList(zeros)) -> mark(tt) 86.65/27.22 active(isNatList(nil)) -> mark(tt) 86.65/27.22 active(uTake1(tt)) -> mark(nil) 86.65/27.22 s(active(X)) -> s(X) 86.65/27.23 s(mark(X)) -> s(X) 86.65/27.23 cons(X1, mark(X2)) -> cons(X1, X2) 86.65/27.23 cons(mark(X1), X2) -> cons(X1, X2) 86.65/27.23 cons(active(X1), X2) -> cons(X1, X2) 86.65/27.23 cons(X1, active(X2)) -> cons(X1, X2) 86.65/27.23 uTake1(active(X)) -> uTake1(X) 86.65/27.23 uTake1(mark(X)) -> uTake1(X) 86.65/27.23 uTake2(X1, mark(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(mark(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(X1, X2, mark(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(X1, X2, X3, mark(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(active(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(X1, active(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(X1, X2, active(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(X1, X2, X3, active(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uLength(X1, mark(X2)) -> uLength(X1, X2) 86.65/27.23 uLength(mark(X1), X2) -> uLength(X1, X2) 86.65/27.23 uLength(active(X1), X2) -> uLength(X1, X2) 86.65/27.23 uLength(X1, active(X2)) -> uLength(X1, X2) 86.65/27.23 length(active(X)) -> length(X) 86.65/27.23 length(mark(X)) -> length(X) 86.65/27.23 86.65/27.23 The set Q consists of the following terms: 86.65/27.23 86.65/27.23 active(and(tt, x0)) 86.65/27.23 active(isNatIList(x0)) 86.65/27.23 active(isNat(0)) 86.65/27.23 active(isNat(s(x0))) 86.65/27.23 active(isNat(length(x0))) 86.65/27.23 active(isNatList(nil)) 86.65/27.23 active(isNatList(cons(x0, x1))) 86.65/27.23 active(isNatList(take(x0, x1))) 86.65/27.23 active(zeros) 86.65/27.23 active(take(0, x0)) 86.65/27.23 active(uTake1(tt)) 86.65/27.23 active(take(s(x0), cons(x1, x2))) 86.65/27.23 active(uTake2(tt, x0, x1, x2)) 86.65/27.23 active(length(cons(x0, x1))) 86.65/27.23 active(uLength(tt, x0)) 86.65/27.23 mark(and(x0, x1)) 86.65/27.23 mark(tt) 86.65/27.23 mark(isNatIList(x0)) 86.65/27.23 mark(isNatList(x0)) 86.65/27.23 mark(isNat(x0)) 86.65/27.23 mark(0) 86.65/27.23 mark(s(x0)) 86.65/27.23 mark(length(x0)) 86.65/27.23 mark(zeros) 86.65/27.23 mark(cons(x0, x1)) 86.65/27.23 mark(nil) 86.65/27.23 mark(take(x0, x1)) 86.65/27.23 mark(uTake1(x0)) 86.65/27.23 mark(uTake2(x0, x1, x2, x3)) 86.65/27.23 mark(uLength(x0, x1)) 86.65/27.23 and(mark(x0), x1) 86.65/27.23 and(x0, mark(x1)) 86.65/27.23 and(active(x0), x1) 86.65/27.23 and(x0, active(x1)) 86.65/27.23 isNatIList(mark(x0)) 86.65/27.23 isNatIList(active(x0)) 86.65/27.23 isNatList(mark(x0)) 86.65/27.23 isNatList(active(x0)) 86.65/27.23 isNat(mark(x0)) 86.65/27.23 isNat(active(x0)) 86.65/27.23 s(mark(x0)) 86.65/27.23 s(active(x0)) 86.65/27.23 length(mark(x0)) 86.65/27.23 length(active(x0)) 86.65/27.23 cons(mark(x0), x1) 86.65/27.23 cons(x0, mark(x1)) 86.65/27.23 cons(active(x0), x1) 86.65/27.23 cons(x0, active(x1)) 86.65/27.23 take(mark(x0), x1) 86.65/27.23 take(x0, mark(x1)) 86.65/27.23 take(active(x0), x1) 86.65/27.23 take(x0, active(x1)) 86.65/27.23 uTake1(mark(x0)) 86.65/27.23 uTake1(active(x0)) 86.65/27.23 uTake2(mark(x0), x1, x2, x3) 86.65/27.23 uTake2(x0, mark(x1), x2, x3) 86.65/27.23 uTake2(x0, x1, mark(x2), x3) 86.65/27.23 uTake2(x0, x1, x2, mark(x3)) 86.65/27.23 uTake2(active(x0), x1, x2, x3) 86.65/27.23 uTake2(x0, active(x1), x2, x3) 86.65/27.23 uTake2(x0, x1, active(x2), x3) 86.65/27.23 uTake2(x0, x1, x2, active(x3)) 86.65/27.23 uLength(mark(x0), x1) 86.65/27.23 uLength(x0, mark(x1)) 86.65/27.23 uLength(active(x0), x1) 86.65/27.23 uLength(x0, active(x1)) 86.65/27.23 86.65/27.23 We have to consider all minimal (P,Q,R)-chains. 86.65/27.23 ---------------------------------------- 86.65/27.23 86.65/27.23 (87) QDPOrderProof (EQUIVALENT) 86.65/27.23 We use the reduction pair processor [LPAR04,JAR06]. 86.65/27.23 86.65/27.23 86.65/27.23 The following pairs can be oriented strictly and are deleted. 86.65/27.23 86.65/27.23 MARK(length(X)) -> MARK(X) 86.65/27.23 MARK(uLength(X1, X2)) -> MARK(X1) 86.65/27.23 The remaining pairs can at least be oriented weakly. 86.65/27.23 Used ordering: Polynomial interpretation [POLO]: 86.65/27.23 86.65/27.23 POL(0) = 0 86.65/27.23 POL(ACTIVE(x_1)) = x_1 86.65/27.23 POL(MARK(x_1)) = x_1 86.65/27.23 POL(active(x_1)) = x_1 86.65/27.23 POL(and(x_1, x_2)) = x_1 + x_2 86.65/27.23 POL(cons(x_1, x_2)) = x_1 + x_2 86.65/27.23 POL(isNat(x_1)) = 0 86.65/27.23 POL(isNatIList(x_1)) = 0 86.65/27.23 POL(isNatList(x_1)) = 0 86.65/27.23 POL(length(x_1)) = 1 + x_1 86.65/27.23 POL(mark(x_1)) = x_1 86.65/27.23 POL(nil) = 0 86.65/27.23 POL(s(x_1)) = x_1 86.65/27.23 POL(take(x_1, x_2)) = x_1 + x_2 86.65/27.23 POL(tt) = 0 86.65/27.23 POL(uLength(x_1, x_2)) = 1 + x_1 + x_2 86.65/27.23 POL(uTake1(x_1)) = x_1 86.65/27.23 POL(uTake2(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 86.65/27.23 POL(zeros) = 0 86.65/27.23 86.65/27.23 The following usable rules [FROCOS05] with respect to the argument filtering of the ordering [JAR06] were oriented: 86.65/27.23 86.65/27.23 mark(and(X1, X2)) -> active(and(mark(X1), mark(X2))) 86.65/27.23 active(and(tt, T)) -> mark(T) 86.65/27.23 mark(isNatIList(X)) -> active(isNatIList(X)) 86.65/27.23 active(isNatIList(IL)) -> mark(isNatList(IL)) 86.65/27.23 mark(isNatList(X)) -> active(isNatList(X)) 86.65/27.23 active(isNatList(cons(N, L))) -> mark(and(isNat(N), isNatList(L))) 86.65/27.23 active(isNatList(take(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.23 active(isNatIList(cons(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.23 mark(isNat(X)) -> active(isNat(X)) 86.65/27.23 active(isNat(s(N))) -> mark(isNat(N)) 86.65/27.23 active(isNat(length(L))) -> mark(isNatList(L)) 86.65/27.23 mark(s(X)) -> active(s(mark(X))) 86.65/27.23 active(zeros) -> mark(cons(0, zeros)) 86.65/27.23 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 86.65/27.23 active(take(0, IL)) -> mark(uTake1(isNatIList(IL))) 86.65/27.23 mark(uTake1(X)) -> active(uTake1(mark(X))) 86.65/27.23 active(take(s(M), cons(N, IL))) -> mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL)) 86.65/27.23 mark(uTake2(X1, X2, X3, X4)) -> active(uTake2(mark(X1), X2, X3, X4)) 86.65/27.23 active(uTake2(tt, M, N, IL)) -> mark(cons(N, take(M, IL))) 86.65/27.23 active(length(cons(N, L))) -> mark(uLength(and(isNat(N), isNatList(L)), L)) 86.65/27.23 mark(uLength(X1, X2)) -> active(uLength(mark(X1), X2)) 86.65/27.23 active(uLength(tt, L)) -> mark(s(length(L))) 86.65/27.23 mark(length(X)) -> active(length(mark(X))) 86.65/27.23 mark(zeros) -> active(zeros) 86.65/27.23 mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) 86.65/27.23 mark(tt) -> active(tt) 86.65/27.23 mark(0) -> active(0) 86.65/27.23 mark(nil) -> active(nil) 86.65/27.23 and(X1, mark(X2)) -> and(X1, X2) 86.65/27.23 and(mark(X1), X2) -> and(X1, X2) 86.65/27.23 and(active(X1), X2) -> and(X1, X2) 86.65/27.23 and(X1, active(X2)) -> and(X1, X2) 86.65/27.23 uTake2(X1, mark(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(mark(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(X1, X2, mark(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(X1, X2, X3, mark(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(active(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(X1, active(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(X1, X2, active(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(X1, X2, X3, active(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uLength(X1, mark(X2)) -> uLength(X1, X2) 86.65/27.23 uLength(mark(X1), X2) -> uLength(X1, X2) 86.65/27.23 uLength(active(X1), X2) -> uLength(X1, X2) 86.65/27.23 uLength(X1, active(X2)) -> uLength(X1, X2) 86.65/27.23 length(active(X)) -> length(X) 86.65/27.23 length(mark(X)) -> length(X) 86.65/27.23 take(X1, mark(X2)) -> take(X1, X2) 86.65/27.23 take(mark(X1), X2) -> take(X1, X2) 86.65/27.23 take(active(X1), X2) -> take(X1, X2) 86.65/27.23 take(X1, active(X2)) -> take(X1, X2) 86.65/27.23 active(isNat(0)) -> mark(tt) 86.65/27.23 active(isNatIList(zeros)) -> mark(tt) 86.65/27.23 active(isNatList(nil)) -> mark(tt) 86.65/27.23 active(uTake1(tt)) -> mark(nil) 86.65/27.23 s(active(X)) -> s(X) 86.65/27.23 s(mark(X)) -> s(X) 86.65/27.23 cons(X1, mark(X2)) -> cons(X1, X2) 86.65/27.23 cons(mark(X1), X2) -> cons(X1, X2) 86.65/27.23 cons(active(X1), X2) -> cons(X1, X2) 86.65/27.23 cons(X1, active(X2)) -> cons(X1, X2) 86.65/27.23 uTake1(active(X)) -> uTake1(X) 86.65/27.23 uTake1(mark(X)) -> uTake1(X) 86.65/27.23 86.65/27.23 86.65/27.23 ---------------------------------------- 86.65/27.23 86.65/27.23 (88) 86.65/27.23 Obligation: 86.65/27.23 Q DP problem: 86.65/27.23 The TRS P consists of the following rules: 86.65/27.23 86.65/27.23 MARK(and(X1, X2)) -> ACTIVE(and(mark(X1), mark(X2))) 86.65/27.23 ACTIVE(and(tt, T)) -> MARK(T) 86.65/27.23 MARK(and(X1, X2)) -> MARK(X1) 86.65/27.23 MARK(and(X1, X2)) -> MARK(X2) 86.65/27.23 MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) 86.65/27.23 ACTIVE(isNatIList(IL)) -> MARK(isNatList(IL)) 86.65/27.23 MARK(isNatList(X)) -> ACTIVE(isNatList(X)) 86.65/27.23 ACTIVE(isNatList(cons(N, L))) -> MARK(and(isNat(N), isNatList(L))) 86.65/27.23 ACTIVE(isNatList(take(N, IL))) -> MARK(and(isNat(N), isNatIList(IL))) 86.65/27.23 ACTIVE(isNatIList(cons(N, IL))) -> MARK(and(isNat(N), isNatIList(IL))) 86.65/27.23 MARK(isNat(X)) -> ACTIVE(isNat(X)) 86.65/27.23 ACTIVE(isNat(s(N))) -> MARK(isNat(N)) 86.65/27.23 ACTIVE(isNat(length(L))) -> MARK(isNatList(L)) 86.65/27.23 ACTIVE(take(0, IL)) -> MARK(uTake1(isNatIList(IL))) 86.65/27.23 ACTIVE(take(s(M), cons(N, IL))) -> MARK(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL)) 86.65/27.23 MARK(uTake2(X1, X2, X3, X4)) -> ACTIVE(uTake2(mark(X1), X2, X3, X4)) 86.65/27.23 ACTIVE(uTake2(tt, M, N, IL)) -> MARK(cons(N, take(M, IL))) 86.65/27.23 ACTIVE(length(cons(N, L))) -> MARK(uLength(and(isNat(N), isNatList(L)), L)) 86.65/27.23 MARK(uLength(X1, X2)) -> ACTIVE(uLength(mark(X1), X2)) 86.65/27.23 ACTIVE(uLength(tt, L)) -> MARK(s(length(L))) 86.65/27.23 MARK(s(X)) -> MARK(X) 86.65/27.23 MARK(length(X)) -> ACTIVE(length(mark(X))) 86.65/27.23 MARK(zeros) -> ACTIVE(zeros) 86.65/27.23 ACTIVE(zeros) -> MARK(cons(0, zeros)) 86.65/27.23 MARK(cons(X1, X2)) -> MARK(X1) 86.65/27.23 MARK(take(X1, X2)) -> ACTIVE(take(mark(X1), mark(X2))) 86.65/27.23 MARK(take(X1, X2)) -> MARK(X1) 86.65/27.23 MARK(take(X1, X2)) -> MARK(X2) 86.65/27.23 MARK(uTake1(X)) -> MARK(X) 86.65/27.23 MARK(uTake2(X1, X2, X3, X4)) -> MARK(X1) 86.65/27.23 86.65/27.23 The TRS R consists of the following rules: 86.65/27.23 86.65/27.23 mark(and(X1, X2)) -> active(and(mark(X1), mark(X2))) 86.65/27.23 active(and(tt, T)) -> mark(T) 86.65/27.23 mark(isNatIList(X)) -> active(isNatIList(X)) 86.65/27.23 active(isNatIList(IL)) -> mark(isNatList(IL)) 86.65/27.23 mark(isNatList(X)) -> active(isNatList(X)) 86.65/27.23 active(isNatList(cons(N, L))) -> mark(and(isNat(N), isNatList(L))) 86.65/27.23 active(isNatList(take(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.23 active(isNatIList(cons(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.23 mark(isNat(X)) -> active(isNat(X)) 86.65/27.23 active(isNat(s(N))) -> mark(isNat(N)) 86.65/27.23 active(isNat(length(L))) -> mark(isNatList(L)) 86.65/27.23 mark(s(X)) -> active(s(mark(X))) 86.65/27.23 active(zeros) -> mark(cons(0, zeros)) 86.65/27.23 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 86.65/27.23 active(take(0, IL)) -> mark(uTake1(isNatIList(IL))) 86.65/27.23 mark(uTake1(X)) -> active(uTake1(mark(X))) 86.65/27.23 active(take(s(M), cons(N, IL))) -> mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL)) 86.65/27.23 mark(uTake2(X1, X2, X3, X4)) -> active(uTake2(mark(X1), X2, X3, X4)) 86.65/27.23 active(uTake2(tt, M, N, IL)) -> mark(cons(N, take(M, IL))) 86.65/27.23 active(length(cons(N, L))) -> mark(uLength(and(isNat(N), isNatList(L)), L)) 86.65/27.23 mark(uLength(X1, X2)) -> active(uLength(mark(X1), X2)) 86.65/27.23 active(uLength(tt, L)) -> mark(s(length(L))) 86.65/27.23 mark(length(X)) -> active(length(mark(X))) 86.65/27.23 mark(zeros) -> active(zeros) 86.65/27.23 mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) 86.65/27.23 mark(tt) -> active(tt) 86.65/27.23 mark(0) -> active(0) 86.65/27.23 mark(nil) -> active(nil) 86.65/27.23 take(X1, mark(X2)) -> take(X1, X2) 86.65/27.23 take(mark(X1), X2) -> take(X1, X2) 86.65/27.23 take(active(X1), X2) -> take(X1, X2) 86.65/27.23 take(X1, active(X2)) -> take(X1, X2) 86.65/27.23 and(X1, mark(X2)) -> and(X1, X2) 86.65/27.23 and(mark(X1), X2) -> and(X1, X2) 86.65/27.23 and(active(X1), X2) -> and(X1, X2) 86.65/27.23 and(X1, active(X2)) -> and(X1, X2) 86.65/27.23 active(isNat(0)) -> mark(tt) 86.65/27.23 active(isNatIList(zeros)) -> mark(tt) 86.65/27.23 active(isNatList(nil)) -> mark(tt) 86.65/27.23 active(uTake1(tt)) -> mark(nil) 86.65/27.23 s(active(X)) -> s(X) 86.65/27.23 s(mark(X)) -> s(X) 86.65/27.23 cons(X1, mark(X2)) -> cons(X1, X2) 86.65/27.23 cons(mark(X1), X2) -> cons(X1, X2) 86.65/27.23 cons(active(X1), X2) -> cons(X1, X2) 86.65/27.23 cons(X1, active(X2)) -> cons(X1, X2) 86.65/27.23 uTake1(active(X)) -> uTake1(X) 86.65/27.23 uTake1(mark(X)) -> uTake1(X) 86.65/27.23 uTake2(X1, mark(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(mark(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(X1, X2, mark(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(X1, X2, X3, mark(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(active(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(X1, active(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(X1, X2, active(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(X1, X2, X3, active(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uLength(X1, mark(X2)) -> uLength(X1, X2) 86.65/27.23 uLength(mark(X1), X2) -> uLength(X1, X2) 86.65/27.23 uLength(active(X1), X2) -> uLength(X1, X2) 86.65/27.23 uLength(X1, active(X2)) -> uLength(X1, X2) 86.65/27.23 length(active(X)) -> length(X) 86.65/27.23 length(mark(X)) -> length(X) 86.65/27.23 86.65/27.23 The set Q consists of the following terms: 86.65/27.23 86.65/27.23 active(and(tt, x0)) 86.65/27.23 active(isNatIList(x0)) 86.65/27.23 active(isNat(0)) 86.65/27.23 active(isNat(s(x0))) 86.65/27.23 active(isNat(length(x0))) 86.65/27.23 active(isNatList(nil)) 86.65/27.23 active(isNatList(cons(x0, x1))) 86.65/27.23 active(isNatList(take(x0, x1))) 86.65/27.23 active(zeros) 86.65/27.23 active(take(0, x0)) 86.65/27.23 active(uTake1(tt)) 86.65/27.23 active(take(s(x0), cons(x1, x2))) 86.65/27.23 active(uTake2(tt, x0, x1, x2)) 86.65/27.23 active(length(cons(x0, x1))) 86.65/27.23 active(uLength(tt, x0)) 86.65/27.23 mark(and(x0, x1)) 86.65/27.23 mark(tt) 86.65/27.23 mark(isNatIList(x0)) 86.65/27.23 mark(isNatList(x0)) 86.65/27.23 mark(isNat(x0)) 86.65/27.23 mark(0) 86.65/27.23 mark(s(x0)) 86.65/27.23 mark(length(x0)) 86.65/27.23 mark(zeros) 86.65/27.23 mark(cons(x0, x1)) 86.65/27.23 mark(nil) 86.65/27.23 mark(take(x0, x1)) 86.65/27.23 mark(uTake1(x0)) 86.65/27.23 mark(uTake2(x0, x1, x2, x3)) 86.65/27.23 mark(uLength(x0, x1)) 86.65/27.23 and(mark(x0), x1) 86.65/27.23 and(x0, mark(x1)) 86.65/27.23 and(active(x0), x1) 86.65/27.23 and(x0, active(x1)) 86.65/27.23 isNatIList(mark(x0)) 86.65/27.23 isNatIList(active(x0)) 86.65/27.23 isNatList(mark(x0)) 86.65/27.23 isNatList(active(x0)) 86.65/27.23 isNat(mark(x0)) 86.65/27.23 isNat(active(x0)) 86.65/27.23 s(mark(x0)) 86.65/27.23 s(active(x0)) 86.65/27.23 length(mark(x0)) 86.65/27.23 length(active(x0)) 86.65/27.23 cons(mark(x0), x1) 86.65/27.23 cons(x0, mark(x1)) 86.65/27.23 cons(active(x0), x1) 86.65/27.23 cons(x0, active(x1)) 86.65/27.23 take(mark(x0), x1) 86.65/27.23 take(x0, mark(x1)) 86.65/27.23 take(active(x0), x1) 86.65/27.23 take(x0, active(x1)) 86.65/27.23 uTake1(mark(x0)) 86.65/27.23 uTake1(active(x0)) 86.65/27.23 uTake2(mark(x0), x1, x2, x3) 86.65/27.23 uTake2(x0, mark(x1), x2, x3) 86.65/27.23 uTake2(x0, x1, mark(x2), x3) 86.65/27.23 uTake2(x0, x1, x2, mark(x3)) 86.65/27.23 uTake2(active(x0), x1, x2, x3) 86.65/27.23 uTake2(x0, active(x1), x2, x3) 86.65/27.23 uTake2(x0, x1, active(x2), x3) 86.65/27.23 uTake2(x0, x1, x2, active(x3)) 86.65/27.23 uLength(mark(x0), x1) 86.65/27.23 uLength(x0, mark(x1)) 86.65/27.23 uLength(active(x0), x1) 86.65/27.23 uLength(x0, active(x1)) 86.65/27.23 86.65/27.23 We have to consider all minimal (P,Q,R)-chains. 86.65/27.23 ---------------------------------------- 86.65/27.23 86.65/27.23 (89) QDPQMonotonicMRRProof (EQUIVALENT) 86.65/27.23 By using the Q-monotonic rule removal processor with the following ordering, at least one Dependency Pair or term rewrite system rule of this QDP problem can be strictly oriented such that it always occurs at a strongly monotonic position in a (P,Q,R)-chain. 86.65/27.23 86.65/27.23 Strictly oriented dependency pairs: 86.65/27.23 86.65/27.23 ACTIVE(take(0, IL)) -> MARK(uTake1(isNatIList(IL))) 86.65/27.23 ACTIVE(zeros) -> MARK(cons(0, zeros)) 86.65/27.23 86.65/27.23 86.65/27.23 Used ordering: Polynomial interpretation [POLO]: 86.65/27.23 86.65/27.23 POL(0) = 1 86.65/27.23 POL(ACTIVE(x_1)) = 2*x_1 86.65/27.23 POL(MARK(x_1)) = 2*x_1 86.65/27.23 POL(active(x_1)) = x_1 86.65/27.23 POL(and(x_1, x_2)) = 2*x_1 + 2*x_2 86.65/27.23 POL(cons(x_1, x_2)) = x_1 86.65/27.23 POL(isNat(x_1)) = 0 86.65/27.23 POL(isNatIList(x_1)) = 0 86.65/27.23 POL(isNatList(x_1)) = 0 86.65/27.23 POL(length(x_1)) = 0 86.65/27.23 POL(mark(x_1)) = x_1 86.65/27.23 POL(nil) = 0 86.65/27.23 POL(s(x_1)) = x_1 86.65/27.23 POL(take(x_1, x_2)) = x_1 + x_2 86.65/27.23 POL(tt) = 0 86.65/27.23 POL(uLength(x_1, x_2)) = 0 86.65/27.23 POL(uTake1(x_1)) = 2*x_1 86.65/27.23 POL(uTake2(x_1, x_2, x_3, x_4)) = 2*x_1 + x_3 86.65/27.23 POL(zeros) = 2 86.65/27.23 86.65/27.23 86.65/27.23 ---------------------------------------- 86.65/27.23 86.65/27.23 (90) 86.65/27.23 Obligation: 86.65/27.23 Q DP problem: 86.65/27.23 The TRS P consists of the following rules: 86.65/27.23 86.65/27.23 MARK(and(X1, X2)) -> ACTIVE(and(mark(X1), mark(X2))) 86.65/27.23 ACTIVE(and(tt, T)) -> MARK(T) 86.65/27.23 MARK(and(X1, X2)) -> MARK(X1) 86.65/27.23 MARK(and(X1, X2)) -> MARK(X2) 86.65/27.23 MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) 86.65/27.23 ACTIVE(isNatIList(IL)) -> MARK(isNatList(IL)) 86.65/27.23 MARK(isNatList(X)) -> ACTIVE(isNatList(X)) 86.65/27.23 ACTIVE(isNatList(cons(N, L))) -> MARK(and(isNat(N), isNatList(L))) 86.65/27.23 ACTIVE(isNatList(take(N, IL))) -> MARK(and(isNat(N), isNatIList(IL))) 86.65/27.23 ACTIVE(isNatIList(cons(N, IL))) -> MARK(and(isNat(N), isNatIList(IL))) 86.65/27.23 MARK(isNat(X)) -> ACTIVE(isNat(X)) 86.65/27.23 ACTIVE(isNat(s(N))) -> MARK(isNat(N)) 86.65/27.23 ACTIVE(isNat(length(L))) -> MARK(isNatList(L)) 86.65/27.23 ACTIVE(take(s(M), cons(N, IL))) -> MARK(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL)) 86.65/27.23 MARK(uTake2(X1, X2, X3, X4)) -> ACTIVE(uTake2(mark(X1), X2, X3, X4)) 86.65/27.23 ACTIVE(uTake2(tt, M, N, IL)) -> MARK(cons(N, take(M, IL))) 86.65/27.23 ACTIVE(length(cons(N, L))) -> MARK(uLength(and(isNat(N), isNatList(L)), L)) 86.65/27.23 MARK(uLength(X1, X2)) -> ACTIVE(uLength(mark(X1), X2)) 86.65/27.23 ACTIVE(uLength(tt, L)) -> MARK(s(length(L))) 86.65/27.23 MARK(s(X)) -> MARK(X) 86.65/27.23 MARK(length(X)) -> ACTIVE(length(mark(X))) 86.65/27.23 MARK(zeros) -> ACTIVE(zeros) 86.65/27.23 MARK(cons(X1, X2)) -> MARK(X1) 86.65/27.23 MARK(take(X1, X2)) -> ACTIVE(take(mark(X1), mark(X2))) 86.65/27.23 MARK(take(X1, X2)) -> MARK(X1) 86.65/27.23 MARK(take(X1, X2)) -> MARK(X2) 86.65/27.23 MARK(uTake1(X)) -> MARK(X) 86.65/27.23 MARK(uTake2(X1, X2, X3, X4)) -> MARK(X1) 86.65/27.23 86.65/27.23 The TRS R consists of the following rules: 86.65/27.23 86.65/27.23 mark(and(X1, X2)) -> active(and(mark(X1), mark(X2))) 86.65/27.23 active(and(tt, T)) -> mark(T) 86.65/27.23 mark(isNatIList(X)) -> active(isNatIList(X)) 86.65/27.23 active(isNatIList(IL)) -> mark(isNatList(IL)) 86.65/27.23 mark(isNatList(X)) -> active(isNatList(X)) 86.65/27.23 active(isNatList(cons(N, L))) -> mark(and(isNat(N), isNatList(L))) 86.65/27.23 active(isNatList(take(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.23 active(isNatIList(cons(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.23 mark(isNat(X)) -> active(isNat(X)) 86.65/27.23 active(isNat(s(N))) -> mark(isNat(N)) 86.65/27.23 active(isNat(length(L))) -> mark(isNatList(L)) 86.65/27.23 mark(s(X)) -> active(s(mark(X))) 86.65/27.23 active(zeros) -> mark(cons(0, zeros)) 86.65/27.23 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 86.65/27.23 active(take(0, IL)) -> mark(uTake1(isNatIList(IL))) 86.65/27.23 mark(uTake1(X)) -> active(uTake1(mark(X))) 86.65/27.23 active(take(s(M), cons(N, IL))) -> mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL)) 86.65/27.23 mark(uTake2(X1, X2, X3, X4)) -> active(uTake2(mark(X1), X2, X3, X4)) 86.65/27.23 active(uTake2(tt, M, N, IL)) -> mark(cons(N, take(M, IL))) 86.65/27.23 active(length(cons(N, L))) -> mark(uLength(and(isNat(N), isNatList(L)), L)) 86.65/27.23 mark(uLength(X1, X2)) -> active(uLength(mark(X1), X2)) 86.65/27.23 active(uLength(tt, L)) -> mark(s(length(L))) 86.65/27.23 mark(length(X)) -> active(length(mark(X))) 86.65/27.23 mark(zeros) -> active(zeros) 86.65/27.23 mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) 86.65/27.23 mark(tt) -> active(tt) 86.65/27.23 mark(0) -> active(0) 86.65/27.23 mark(nil) -> active(nil) 86.65/27.23 take(X1, mark(X2)) -> take(X1, X2) 86.65/27.23 take(mark(X1), X2) -> take(X1, X2) 86.65/27.23 take(active(X1), X2) -> take(X1, X2) 86.65/27.23 take(X1, active(X2)) -> take(X1, X2) 86.65/27.23 and(X1, mark(X2)) -> and(X1, X2) 86.65/27.23 and(mark(X1), X2) -> and(X1, X2) 86.65/27.23 and(active(X1), X2) -> and(X1, X2) 86.65/27.23 and(X1, active(X2)) -> and(X1, X2) 86.65/27.23 active(isNat(0)) -> mark(tt) 86.65/27.23 active(isNatIList(zeros)) -> mark(tt) 86.65/27.23 active(isNatList(nil)) -> mark(tt) 86.65/27.23 active(uTake1(tt)) -> mark(nil) 86.65/27.23 s(active(X)) -> s(X) 86.65/27.23 s(mark(X)) -> s(X) 86.65/27.23 cons(X1, mark(X2)) -> cons(X1, X2) 86.65/27.23 cons(mark(X1), X2) -> cons(X1, X2) 86.65/27.23 cons(active(X1), X2) -> cons(X1, X2) 86.65/27.23 cons(X1, active(X2)) -> cons(X1, X2) 86.65/27.23 uTake1(active(X)) -> uTake1(X) 86.65/27.23 uTake1(mark(X)) -> uTake1(X) 86.65/27.23 uTake2(X1, mark(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(mark(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(X1, X2, mark(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(X1, X2, X3, mark(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(active(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(X1, active(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(X1, X2, active(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(X1, X2, X3, active(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uLength(X1, mark(X2)) -> uLength(X1, X2) 86.65/27.23 uLength(mark(X1), X2) -> uLength(X1, X2) 86.65/27.23 uLength(active(X1), X2) -> uLength(X1, X2) 86.65/27.23 uLength(X1, active(X2)) -> uLength(X1, X2) 86.65/27.23 length(active(X)) -> length(X) 86.65/27.23 length(mark(X)) -> length(X) 86.65/27.23 86.65/27.23 The set Q consists of the following terms: 86.65/27.23 86.65/27.23 active(and(tt, x0)) 86.65/27.23 active(isNatIList(x0)) 86.65/27.23 active(isNat(0)) 86.65/27.23 active(isNat(s(x0))) 86.65/27.23 active(isNat(length(x0))) 86.65/27.23 active(isNatList(nil)) 86.65/27.23 active(isNatList(cons(x0, x1))) 86.65/27.23 active(isNatList(take(x0, x1))) 86.65/27.23 active(zeros) 86.65/27.23 active(take(0, x0)) 86.65/27.23 active(uTake1(tt)) 86.65/27.23 active(take(s(x0), cons(x1, x2))) 86.65/27.23 active(uTake2(tt, x0, x1, x2)) 86.65/27.23 active(length(cons(x0, x1))) 86.65/27.23 active(uLength(tt, x0)) 86.65/27.23 mark(and(x0, x1)) 86.65/27.23 mark(tt) 86.65/27.23 mark(isNatIList(x0)) 86.65/27.23 mark(isNatList(x0)) 86.65/27.23 mark(isNat(x0)) 86.65/27.23 mark(0) 86.65/27.23 mark(s(x0)) 86.65/27.23 mark(length(x0)) 86.65/27.23 mark(zeros) 86.65/27.23 mark(cons(x0, x1)) 86.65/27.23 mark(nil) 86.65/27.23 mark(take(x0, x1)) 86.65/27.23 mark(uTake1(x0)) 86.65/27.23 mark(uTake2(x0, x1, x2, x3)) 86.65/27.23 mark(uLength(x0, x1)) 86.65/27.23 and(mark(x0), x1) 86.65/27.23 and(x0, mark(x1)) 86.65/27.23 and(active(x0), x1) 86.65/27.23 and(x0, active(x1)) 86.65/27.23 isNatIList(mark(x0)) 86.65/27.23 isNatIList(active(x0)) 86.65/27.23 isNatList(mark(x0)) 86.65/27.23 isNatList(active(x0)) 86.65/27.23 isNat(mark(x0)) 86.65/27.23 isNat(active(x0)) 86.65/27.23 s(mark(x0)) 86.65/27.23 s(active(x0)) 86.65/27.23 length(mark(x0)) 86.65/27.23 length(active(x0)) 86.65/27.23 cons(mark(x0), x1) 86.65/27.23 cons(x0, mark(x1)) 86.65/27.23 cons(active(x0), x1) 86.65/27.23 cons(x0, active(x1)) 86.65/27.23 take(mark(x0), x1) 86.65/27.23 take(x0, mark(x1)) 86.65/27.23 take(active(x0), x1) 86.65/27.23 take(x0, active(x1)) 86.65/27.23 uTake1(mark(x0)) 86.65/27.23 uTake1(active(x0)) 86.65/27.23 uTake2(mark(x0), x1, x2, x3) 86.65/27.23 uTake2(x0, mark(x1), x2, x3) 86.65/27.23 uTake2(x0, x1, mark(x2), x3) 86.65/27.23 uTake2(x0, x1, x2, mark(x3)) 86.65/27.23 uTake2(active(x0), x1, x2, x3) 86.65/27.23 uTake2(x0, active(x1), x2, x3) 86.65/27.23 uTake2(x0, x1, active(x2), x3) 86.65/27.23 uTake2(x0, x1, x2, active(x3)) 86.65/27.23 uLength(mark(x0), x1) 86.65/27.23 uLength(x0, mark(x1)) 86.65/27.23 uLength(active(x0), x1) 86.65/27.23 uLength(x0, active(x1)) 86.65/27.23 86.65/27.23 We have to consider all minimal (P,Q,R)-chains. 86.65/27.23 ---------------------------------------- 86.65/27.23 86.65/27.23 (91) DependencyGraphProof (EQUIVALENT) 86.65/27.23 The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 1 SCC with 1 less node. 86.65/27.23 ---------------------------------------- 86.65/27.23 86.65/27.23 (92) 86.65/27.23 Obligation: 86.65/27.23 Q DP problem: 86.65/27.23 The TRS P consists of the following rules: 86.65/27.23 86.65/27.23 ACTIVE(and(tt, T)) -> MARK(T) 86.65/27.23 MARK(and(X1, X2)) -> ACTIVE(and(mark(X1), mark(X2))) 86.65/27.23 ACTIVE(take(s(M), cons(N, IL))) -> MARK(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL)) 86.65/27.23 MARK(uTake2(X1, X2, X3, X4)) -> ACTIVE(uTake2(mark(X1), X2, X3, X4)) 86.65/27.23 ACTIVE(uTake2(tt, M, N, IL)) -> MARK(cons(N, take(M, IL))) 86.65/27.23 MARK(cons(X1, X2)) -> MARK(X1) 86.65/27.23 MARK(and(X1, X2)) -> MARK(X1) 86.65/27.23 MARK(and(X1, X2)) -> MARK(X2) 86.65/27.23 MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) 86.65/27.23 ACTIVE(isNatIList(IL)) -> MARK(isNatList(IL)) 86.65/27.23 MARK(isNatList(X)) -> ACTIVE(isNatList(X)) 86.65/27.23 ACTIVE(isNatList(cons(N, L))) -> MARK(and(isNat(N), isNatList(L))) 86.65/27.23 ACTIVE(isNatList(take(N, IL))) -> MARK(and(isNat(N), isNatIList(IL))) 86.65/27.23 ACTIVE(isNatIList(cons(N, IL))) -> MARK(and(isNat(N), isNatIList(IL))) 86.65/27.23 MARK(isNat(X)) -> ACTIVE(isNat(X)) 86.65/27.23 ACTIVE(isNat(s(N))) -> MARK(isNat(N)) 86.65/27.23 ACTIVE(isNat(length(L))) -> MARK(isNatList(L)) 86.65/27.23 MARK(s(X)) -> MARK(X) 86.65/27.23 MARK(length(X)) -> ACTIVE(length(mark(X))) 86.65/27.23 ACTIVE(length(cons(N, L))) -> MARK(uLength(and(isNat(N), isNatList(L)), L)) 86.65/27.23 MARK(uLength(X1, X2)) -> ACTIVE(uLength(mark(X1), X2)) 86.65/27.23 ACTIVE(uLength(tt, L)) -> MARK(s(length(L))) 86.65/27.23 MARK(take(X1, X2)) -> ACTIVE(take(mark(X1), mark(X2))) 86.65/27.23 MARK(take(X1, X2)) -> MARK(X1) 86.65/27.23 MARK(take(X1, X2)) -> MARK(X2) 86.65/27.23 MARK(uTake1(X)) -> MARK(X) 86.65/27.23 MARK(uTake2(X1, X2, X3, X4)) -> MARK(X1) 86.65/27.23 86.65/27.23 The TRS R consists of the following rules: 86.65/27.23 86.65/27.23 mark(and(X1, X2)) -> active(and(mark(X1), mark(X2))) 86.65/27.23 active(and(tt, T)) -> mark(T) 86.65/27.23 mark(isNatIList(X)) -> active(isNatIList(X)) 86.65/27.23 active(isNatIList(IL)) -> mark(isNatList(IL)) 86.65/27.23 mark(isNatList(X)) -> active(isNatList(X)) 86.65/27.23 active(isNatList(cons(N, L))) -> mark(and(isNat(N), isNatList(L))) 86.65/27.23 active(isNatList(take(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.23 active(isNatIList(cons(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.23 mark(isNat(X)) -> active(isNat(X)) 86.65/27.23 active(isNat(s(N))) -> mark(isNat(N)) 86.65/27.23 active(isNat(length(L))) -> mark(isNatList(L)) 86.65/27.23 mark(s(X)) -> active(s(mark(X))) 86.65/27.23 active(zeros) -> mark(cons(0, zeros)) 86.65/27.23 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 86.65/27.23 active(take(0, IL)) -> mark(uTake1(isNatIList(IL))) 86.65/27.23 mark(uTake1(X)) -> active(uTake1(mark(X))) 86.65/27.23 active(take(s(M), cons(N, IL))) -> mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL)) 86.65/27.23 mark(uTake2(X1, X2, X3, X4)) -> active(uTake2(mark(X1), X2, X3, X4)) 86.65/27.23 active(uTake2(tt, M, N, IL)) -> mark(cons(N, take(M, IL))) 86.65/27.23 active(length(cons(N, L))) -> mark(uLength(and(isNat(N), isNatList(L)), L)) 86.65/27.23 mark(uLength(X1, X2)) -> active(uLength(mark(X1), X2)) 86.65/27.23 active(uLength(tt, L)) -> mark(s(length(L))) 86.65/27.23 mark(length(X)) -> active(length(mark(X))) 86.65/27.23 mark(zeros) -> active(zeros) 86.65/27.23 mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) 86.65/27.23 mark(tt) -> active(tt) 86.65/27.23 mark(0) -> active(0) 86.65/27.23 mark(nil) -> active(nil) 86.65/27.23 take(X1, mark(X2)) -> take(X1, X2) 86.65/27.23 take(mark(X1), X2) -> take(X1, X2) 86.65/27.23 take(active(X1), X2) -> take(X1, X2) 86.65/27.23 take(X1, active(X2)) -> take(X1, X2) 86.65/27.23 and(X1, mark(X2)) -> and(X1, X2) 86.65/27.23 and(mark(X1), X2) -> and(X1, X2) 86.65/27.23 and(active(X1), X2) -> and(X1, X2) 86.65/27.23 and(X1, active(X2)) -> and(X1, X2) 86.65/27.23 active(isNat(0)) -> mark(tt) 86.65/27.23 active(isNatIList(zeros)) -> mark(tt) 86.65/27.23 active(isNatList(nil)) -> mark(tt) 86.65/27.23 active(uTake1(tt)) -> mark(nil) 86.65/27.23 s(active(X)) -> s(X) 86.65/27.23 s(mark(X)) -> s(X) 86.65/27.23 cons(X1, mark(X2)) -> cons(X1, X2) 86.65/27.23 cons(mark(X1), X2) -> cons(X1, X2) 86.65/27.23 cons(active(X1), X2) -> cons(X1, X2) 86.65/27.23 cons(X1, active(X2)) -> cons(X1, X2) 86.65/27.23 uTake1(active(X)) -> uTake1(X) 86.65/27.23 uTake1(mark(X)) -> uTake1(X) 86.65/27.23 uTake2(X1, mark(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(mark(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(X1, X2, mark(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(X1, X2, X3, mark(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(active(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(X1, active(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(X1, X2, active(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(X1, X2, X3, active(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uLength(X1, mark(X2)) -> uLength(X1, X2) 86.65/27.23 uLength(mark(X1), X2) -> uLength(X1, X2) 86.65/27.23 uLength(active(X1), X2) -> uLength(X1, X2) 86.65/27.23 uLength(X1, active(X2)) -> uLength(X1, X2) 86.65/27.23 length(active(X)) -> length(X) 86.65/27.23 length(mark(X)) -> length(X) 86.65/27.23 86.65/27.23 The set Q consists of the following terms: 86.65/27.23 86.65/27.23 active(and(tt, x0)) 86.65/27.23 active(isNatIList(x0)) 86.65/27.23 active(isNat(0)) 86.65/27.23 active(isNat(s(x0))) 86.65/27.23 active(isNat(length(x0))) 86.65/27.23 active(isNatList(nil)) 86.65/27.23 active(isNatList(cons(x0, x1))) 86.65/27.23 active(isNatList(take(x0, x1))) 86.65/27.23 active(zeros) 86.65/27.23 active(take(0, x0)) 86.65/27.23 active(uTake1(tt)) 86.65/27.23 active(take(s(x0), cons(x1, x2))) 86.65/27.23 active(uTake2(tt, x0, x1, x2)) 86.65/27.23 active(length(cons(x0, x1))) 86.65/27.23 active(uLength(tt, x0)) 86.65/27.23 mark(and(x0, x1)) 86.65/27.23 mark(tt) 86.65/27.23 mark(isNatIList(x0)) 86.65/27.23 mark(isNatList(x0)) 86.65/27.23 mark(isNat(x0)) 86.65/27.23 mark(0) 86.65/27.23 mark(s(x0)) 86.65/27.23 mark(length(x0)) 86.65/27.23 mark(zeros) 86.65/27.23 mark(cons(x0, x1)) 86.65/27.23 mark(nil) 86.65/27.23 mark(take(x0, x1)) 86.65/27.23 mark(uTake1(x0)) 86.65/27.23 mark(uTake2(x0, x1, x2, x3)) 86.65/27.23 mark(uLength(x0, x1)) 86.65/27.23 and(mark(x0), x1) 86.65/27.23 and(x0, mark(x1)) 86.65/27.23 and(active(x0), x1) 86.65/27.23 and(x0, active(x1)) 86.65/27.23 isNatIList(mark(x0)) 86.65/27.23 isNatIList(active(x0)) 86.65/27.23 isNatList(mark(x0)) 86.65/27.23 isNatList(active(x0)) 86.65/27.23 isNat(mark(x0)) 86.65/27.23 isNat(active(x0)) 86.65/27.23 s(mark(x0)) 86.65/27.23 s(active(x0)) 86.65/27.23 length(mark(x0)) 86.65/27.23 length(active(x0)) 86.65/27.23 cons(mark(x0), x1) 86.65/27.23 cons(x0, mark(x1)) 86.65/27.23 cons(active(x0), x1) 86.65/27.23 cons(x0, active(x1)) 86.65/27.23 take(mark(x0), x1) 86.65/27.23 take(x0, mark(x1)) 86.65/27.23 take(active(x0), x1) 86.65/27.23 take(x0, active(x1)) 86.65/27.23 uTake1(mark(x0)) 86.65/27.23 uTake1(active(x0)) 86.65/27.23 uTake2(mark(x0), x1, x2, x3) 86.65/27.23 uTake2(x0, mark(x1), x2, x3) 86.65/27.23 uTake2(x0, x1, mark(x2), x3) 86.65/27.23 uTake2(x0, x1, x2, mark(x3)) 86.65/27.23 uTake2(active(x0), x1, x2, x3) 86.65/27.23 uTake2(x0, active(x1), x2, x3) 86.65/27.23 uTake2(x0, x1, active(x2), x3) 86.65/27.23 uTake2(x0, x1, x2, active(x3)) 86.65/27.23 uLength(mark(x0), x1) 86.65/27.23 uLength(x0, mark(x1)) 86.65/27.23 uLength(active(x0), x1) 86.65/27.23 uLength(x0, active(x1)) 86.65/27.23 86.65/27.23 We have to consider all minimal (P,Q,R)-chains. 86.65/27.23 ---------------------------------------- 86.65/27.23 86.65/27.23 (93) QDPQMonotonicMRRProof (EQUIVALENT) 86.65/27.23 By using the Q-monotonic rule removal processor with the following ordering, at least one Dependency Pair or term rewrite system rule of this QDP problem can be strictly oriented such that it always occurs at a strongly monotonic position in a (P,Q,R)-chain. 86.65/27.23 86.65/27.23 Strictly oriented dependency pairs: 86.65/27.23 86.65/27.23 MARK(uTake1(X)) -> MARK(X) 86.65/27.23 86.65/27.23 86.65/27.23 Used ordering: Polynomial interpretation [POLO]: 86.65/27.23 86.65/27.23 POL(0) = 1 86.65/27.23 POL(ACTIVE(x_1)) = 2*x_1 86.65/27.23 POL(MARK(x_1)) = 2*x_1 86.65/27.23 POL(active(x_1)) = x_1 86.65/27.23 POL(and(x_1, x_2)) = 2*x_1 + 2*x_2 86.65/27.23 POL(cons(x_1, x_2)) = x_1 86.65/27.23 POL(isNat(x_1)) = 0 86.65/27.23 POL(isNatIList(x_1)) = 0 86.65/27.23 POL(isNatList(x_1)) = 0 86.65/27.23 POL(length(x_1)) = 0 86.65/27.23 POL(mark(x_1)) = x_1 86.65/27.23 POL(nil) = 0 86.65/27.23 POL(s(x_1)) = x_1 86.65/27.23 POL(take(x_1, x_2)) = x_1 + 2*x_2 86.65/27.23 POL(tt) = 0 86.65/27.23 POL(uLength(x_1, x_2)) = 0 86.65/27.23 POL(uTake1(x_1)) = 1 + x_1 86.65/27.23 POL(uTake2(x_1, x_2, x_3, x_4)) = 2*x_1 + x_3 86.65/27.23 POL(zeros) = 2 86.65/27.23 86.65/27.23 86.65/27.23 ---------------------------------------- 86.65/27.23 86.65/27.23 (94) 86.65/27.23 Obligation: 86.65/27.23 Q DP problem: 86.65/27.23 The TRS P consists of the following rules: 86.65/27.23 86.65/27.23 ACTIVE(and(tt, T)) -> MARK(T) 86.65/27.23 MARK(and(X1, X2)) -> ACTIVE(and(mark(X1), mark(X2))) 86.65/27.23 ACTIVE(take(s(M), cons(N, IL))) -> MARK(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL)) 86.65/27.23 MARK(uTake2(X1, X2, X3, X4)) -> ACTIVE(uTake2(mark(X1), X2, X3, X4)) 86.65/27.23 ACTIVE(uTake2(tt, M, N, IL)) -> MARK(cons(N, take(M, IL))) 86.65/27.23 MARK(cons(X1, X2)) -> MARK(X1) 86.65/27.23 MARK(and(X1, X2)) -> MARK(X1) 86.65/27.23 MARK(and(X1, X2)) -> MARK(X2) 86.65/27.23 MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) 86.65/27.23 ACTIVE(isNatIList(IL)) -> MARK(isNatList(IL)) 86.65/27.23 MARK(isNatList(X)) -> ACTIVE(isNatList(X)) 86.65/27.23 ACTIVE(isNatList(cons(N, L))) -> MARK(and(isNat(N), isNatList(L))) 86.65/27.23 ACTIVE(isNatList(take(N, IL))) -> MARK(and(isNat(N), isNatIList(IL))) 86.65/27.23 ACTIVE(isNatIList(cons(N, IL))) -> MARK(and(isNat(N), isNatIList(IL))) 86.65/27.23 MARK(isNat(X)) -> ACTIVE(isNat(X)) 86.65/27.23 ACTIVE(isNat(s(N))) -> MARK(isNat(N)) 86.65/27.23 ACTIVE(isNat(length(L))) -> MARK(isNatList(L)) 86.65/27.23 MARK(s(X)) -> MARK(X) 86.65/27.23 MARK(length(X)) -> ACTIVE(length(mark(X))) 86.65/27.23 ACTIVE(length(cons(N, L))) -> MARK(uLength(and(isNat(N), isNatList(L)), L)) 86.65/27.23 MARK(uLength(X1, X2)) -> ACTIVE(uLength(mark(X1), X2)) 86.65/27.23 ACTIVE(uLength(tt, L)) -> MARK(s(length(L))) 86.65/27.23 MARK(take(X1, X2)) -> ACTIVE(take(mark(X1), mark(X2))) 86.65/27.23 MARK(take(X1, X2)) -> MARK(X1) 86.65/27.23 MARK(take(X1, X2)) -> MARK(X2) 86.65/27.23 MARK(uTake2(X1, X2, X3, X4)) -> MARK(X1) 86.65/27.23 86.65/27.23 The TRS R consists of the following rules: 86.65/27.23 86.65/27.23 mark(and(X1, X2)) -> active(and(mark(X1), mark(X2))) 86.65/27.23 active(and(tt, T)) -> mark(T) 86.65/27.23 mark(isNatIList(X)) -> active(isNatIList(X)) 86.65/27.23 active(isNatIList(IL)) -> mark(isNatList(IL)) 86.65/27.23 mark(isNatList(X)) -> active(isNatList(X)) 86.65/27.23 active(isNatList(cons(N, L))) -> mark(and(isNat(N), isNatList(L))) 86.65/27.23 active(isNatList(take(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.23 active(isNatIList(cons(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.23 mark(isNat(X)) -> active(isNat(X)) 86.65/27.23 active(isNat(s(N))) -> mark(isNat(N)) 86.65/27.23 active(isNat(length(L))) -> mark(isNatList(L)) 86.65/27.23 mark(s(X)) -> active(s(mark(X))) 86.65/27.23 active(zeros) -> mark(cons(0, zeros)) 86.65/27.23 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 86.65/27.23 active(take(0, IL)) -> mark(uTake1(isNatIList(IL))) 86.65/27.23 mark(uTake1(X)) -> active(uTake1(mark(X))) 86.65/27.23 active(take(s(M), cons(N, IL))) -> mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL)) 86.65/27.23 mark(uTake2(X1, X2, X3, X4)) -> active(uTake2(mark(X1), X2, X3, X4)) 86.65/27.23 active(uTake2(tt, M, N, IL)) -> mark(cons(N, take(M, IL))) 86.65/27.23 active(length(cons(N, L))) -> mark(uLength(and(isNat(N), isNatList(L)), L)) 86.65/27.23 mark(uLength(X1, X2)) -> active(uLength(mark(X1), X2)) 86.65/27.23 active(uLength(tt, L)) -> mark(s(length(L))) 86.65/27.23 mark(length(X)) -> active(length(mark(X))) 86.65/27.23 mark(zeros) -> active(zeros) 86.65/27.23 mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) 86.65/27.23 mark(tt) -> active(tt) 86.65/27.23 mark(0) -> active(0) 86.65/27.23 mark(nil) -> active(nil) 86.65/27.23 take(X1, mark(X2)) -> take(X1, X2) 86.65/27.23 take(mark(X1), X2) -> take(X1, X2) 86.65/27.23 take(active(X1), X2) -> take(X1, X2) 86.65/27.23 take(X1, active(X2)) -> take(X1, X2) 86.65/27.23 and(X1, mark(X2)) -> and(X1, X2) 86.65/27.23 and(mark(X1), X2) -> and(X1, X2) 86.65/27.23 and(active(X1), X2) -> and(X1, X2) 86.65/27.23 and(X1, active(X2)) -> and(X1, X2) 86.65/27.23 active(isNat(0)) -> mark(tt) 86.65/27.23 active(isNatIList(zeros)) -> mark(tt) 86.65/27.23 active(isNatList(nil)) -> mark(tt) 86.65/27.23 active(uTake1(tt)) -> mark(nil) 86.65/27.23 s(active(X)) -> s(X) 86.65/27.23 s(mark(X)) -> s(X) 86.65/27.23 cons(X1, mark(X2)) -> cons(X1, X2) 86.65/27.23 cons(mark(X1), X2) -> cons(X1, X2) 86.65/27.23 cons(active(X1), X2) -> cons(X1, X2) 86.65/27.23 cons(X1, active(X2)) -> cons(X1, X2) 86.65/27.23 uTake1(active(X)) -> uTake1(X) 86.65/27.23 uTake1(mark(X)) -> uTake1(X) 86.65/27.23 uTake2(X1, mark(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(mark(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(X1, X2, mark(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(X1, X2, X3, mark(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(active(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(X1, active(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(X1, X2, active(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(X1, X2, X3, active(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uLength(X1, mark(X2)) -> uLength(X1, X2) 86.65/27.23 uLength(mark(X1), X2) -> uLength(X1, X2) 86.65/27.23 uLength(active(X1), X2) -> uLength(X1, X2) 86.65/27.23 uLength(X1, active(X2)) -> uLength(X1, X2) 86.65/27.23 length(active(X)) -> length(X) 86.65/27.23 length(mark(X)) -> length(X) 86.65/27.23 86.65/27.23 The set Q consists of the following terms: 86.65/27.23 86.65/27.23 active(and(tt, x0)) 86.65/27.23 active(isNatIList(x0)) 86.65/27.23 active(isNat(0)) 86.65/27.23 active(isNat(s(x0))) 86.65/27.23 active(isNat(length(x0))) 86.65/27.23 active(isNatList(nil)) 86.65/27.23 active(isNatList(cons(x0, x1))) 86.65/27.23 active(isNatList(take(x0, x1))) 86.65/27.23 active(zeros) 86.65/27.23 active(take(0, x0)) 86.65/27.23 active(uTake1(tt)) 86.65/27.23 active(take(s(x0), cons(x1, x2))) 86.65/27.23 active(uTake2(tt, x0, x1, x2)) 86.65/27.23 active(length(cons(x0, x1))) 86.65/27.23 active(uLength(tt, x0)) 86.65/27.23 mark(and(x0, x1)) 86.65/27.23 mark(tt) 86.65/27.23 mark(isNatIList(x0)) 86.65/27.23 mark(isNatList(x0)) 86.65/27.23 mark(isNat(x0)) 86.65/27.23 mark(0) 86.65/27.23 mark(s(x0)) 86.65/27.23 mark(length(x0)) 86.65/27.23 mark(zeros) 86.65/27.23 mark(cons(x0, x1)) 86.65/27.23 mark(nil) 86.65/27.23 mark(take(x0, x1)) 86.65/27.23 mark(uTake1(x0)) 86.65/27.23 mark(uTake2(x0, x1, x2, x3)) 86.65/27.23 mark(uLength(x0, x1)) 86.65/27.23 and(mark(x0), x1) 86.65/27.23 and(x0, mark(x1)) 86.65/27.23 and(active(x0), x1) 86.65/27.23 and(x0, active(x1)) 86.65/27.23 isNatIList(mark(x0)) 86.65/27.23 isNatIList(active(x0)) 86.65/27.23 isNatList(mark(x0)) 86.65/27.23 isNatList(active(x0)) 86.65/27.23 isNat(mark(x0)) 86.65/27.23 isNat(active(x0)) 86.65/27.23 s(mark(x0)) 86.65/27.23 s(active(x0)) 86.65/27.23 length(mark(x0)) 86.65/27.23 length(active(x0)) 86.65/27.23 cons(mark(x0), x1) 86.65/27.23 cons(x0, mark(x1)) 86.65/27.23 cons(active(x0), x1) 86.65/27.23 cons(x0, active(x1)) 86.65/27.23 take(mark(x0), x1) 86.65/27.23 take(x0, mark(x1)) 86.65/27.23 take(active(x0), x1) 86.65/27.23 take(x0, active(x1)) 86.65/27.23 uTake1(mark(x0)) 86.65/27.23 uTake1(active(x0)) 86.65/27.23 uTake2(mark(x0), x1, x2, x3) 86.65/27.23 uTake2(x0, mark(x1), x2, x3) 86.65/27.23 uTake2(x0, x1, mark(x2), x3) 86.65/27.23 uTake2(x0, x1, x2, mark(x3)) 86.65/27.23 uTake2(active(x0), x1, x2, x3) 86.65/27.23 uTake2(x0, active(x1), x2, x3) 86.65/27.23 uTake2(x0, x1, active(x2), x3) 86.65/27.23 uTake2(x0, x1, x2, active(x3)) 86.65/27.23 uLength(mark(x0), x1) 86.65/27.23 uLength(x0, mark(x1)) 86.65/27.23 uLength(active(x0), x1) 86.65/27.23 uLength(x0, active(x1)) 86.65/27.23 86.65/27.23 We have to consider all minimal (P,Q,R)-chains. 86.65/27.23 ---------------------------------------- 86.65/27.23 86.65/27.23 (95) QDPQMonotonicMRRProof (EQUIVALENT) 86.65/27.23 By using the Q-monotonic rule removal processor with the following ordering, at least one Dependency Pair or term rewrite system rule of this QDP problem can be strictly oriented such that it always occurs at a strongly monotonic position in a (P,Q,R)-chain. 86.65/27.23 86.65/27.23 Strictly oriented dependency pairs: 86.65/27.23 86.65/27.23 ACTIVE(uTake2(tt, M, N, IL)) -> MARK(cons(N, take(M, IL))) 86.65/27.23 MARK(take(X1, X2)) -> MARK(X1) 86.65/27.23 MARK(take(X1, X2)) -> MARK(X2) 86.65/27.23 MARK(uTake2(X1, X2, X3, X4)) -> MARK(X1) 86.65/27.23 86.65/27.23 86.65/27.23 Used ordering: Polynomial interpretation [POLO]: 86.65/27.23 86.65/27.23 POL(0) = 1 86.65/27.23 POL(ACTIVE(x_1)) = 2*x_1 86.65/27.23 POL(MARK(x_1)) = 2*x_1 86.65/27.23 POL(active(x_1)) = x_1 86.65/27.23 POL(and(x_1, x_2)) = 2*x_1 + 2*x_2 86.65/27.23 POL(cons(x_1, x_2)) = 2*x_1 86.65/27.23 POL(isNat(x_1)) = 0 86.65/27.23 POL(isNatIList(x_1)) = 0 86.65/27.23 POL(isNatList(x_1)) = 0 86.65/27.23 POL(length(x_1)) = 0 86.65/27.23 POL(mark(x_1)) = x_1 86.65/27.23 POL(nil) = 0 86.65/27.23 POL(s(x_1)) = x_1 86.65/27.23 POL(take(x_1, x_2)) = 1 + x_1 + x_2 86.65/27.23 POL(tt) = 0 86.65/27.23 POL(uLength(x_1, x_2)) = 0 86.65/27.23 POL(uTake1(x_1)) = 0 86.65/27.23 POL(uTake2(x_1, x_2, x_3, x_4)) = 1 + 2*x_1 + 2*x_3 86.65/27.23 POL(zeros) = 2 86.65/27.23 86.65/27.23 86.65/27.23 ---------------------------------------- 86.65/27.23 86.65/27.23 (96) 86.65/27.23 Obligation: 86.65/27.23 Q DP problem: 86.65/27.23 The TRS P consists of the following rules: 86.65/27.23 86.65/27.23 ACTIVE(and(tt, T)) -> MARK(T) 86.65/27.23 MARK(and(X1, X2)) -> ACTIVE(and(mark(X1), mark(X2))) 86.65/27.23 ACTIVE(take(s(M), cons(N, IL))) -> MARK(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL)) 86.65/27.23 MARK(uTake2(X1, X2, X3, X4)) -> ACTIVE(uTake2(mark(X1), X2, X3, X4)) 86.65/27.23 MARK(cons(X1, X2)) -> MARK(X1) 86.65/27.23 MARK(and(X1, X2)) -> MARK(X1) 86.65/27.23 MARK(and(X1, X2)) -> MARK(X2) 86.65/27.23 MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) 86.65/27.23 ACTIVE(isNatIList(IL)) -> MARK(isNatList(IL)) 86.65/27.23 MARK(isNatList(X)) -> ACTIVE(isNatList(X)) 86.65/27.23 ACTIVE(isNatList(cons(N, L))) -> MARK(and(isNat(N), isNatList(L))) 86.65/27.23 ACTIVE(isNatList(take(N, IL))) -> MARK(and(isNat(N), isNatIList(IL))) 86.65/27.23 ACTIVE(isNatIList(cons(N, IL))) -> MARK(and(isNat(N), isNatIList(IL))) 86.65/27.23 MARK(isNat(X)) -> ACTIVE(isNat(X)) 86.65/27.23 ACTIVE(isNat(s(N))) -> MARK(isNat(N)) 86.65/27.23 ACTIVE(isNat(length(L))) -> MARK(isNatList(L)) 86.65/27.23 MARK(s(X)) -> MARK(X) 86.65/27.23 MARK(length(X)) -> ACTIVE(length(mark(X))) 86.65/27.23 ACTIVE(length(cons(N, L))) -> MARK(uLength(and(isNat(N), isNatList(L)), L)) 86.65/27.23 MARK(uLength(X1, X2)) -> ACTIVE(uLength(mark(X1), X2)) 86.65/27.23 ACTIVE(uLength(tt, L)) -> MARK(s(length(L))) 86.65/27.23 MARK(take(X1, X2)) -> ACTIVE(take(mark(X1), mark(X2))) 86.65/27.23 86.65/27.23 The TRS R consists of the following rules: 86.65/27.23 86.65/27.23 mark(and(X1, X2)) -> active(and(mark(X1), mark(X2))) 86.65/27.23 active(and(tt, T)) -> mark(T) 86.65/27.23 mark(isNatIList(X)) -> active(isNatIList(X)) 86.65/27.23 active(isNatIList(IL)) -> mark(isNatList(IL)) 86.65/27.23 mark(isNatList(X)) -> active(isNatList(X)) 86.65/27.23 active(isNatList(cons(N, L))) -> mark(and(isNat(N), isNatList(L))) 86.65/27.23 active(isNatList(take(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.23 active(isNatIList(cons(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.23 mark(isNat(X)) -> active(isNat(X)) 86.65/27.23 active(isNat(s(N))) -> mark(isNat(N)) 86.65/27.23 active(isNat(length(L))) -> mark(isNatList(L)) 86.65/27.23 mark(s(X)) -> active(s(mark(X))) 86.65/27.23 active(zeros) -> mark(cons(0, zeros)) 86.65/27.23 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 86.65/27.23 active(take(0, IL)) -> mark(uTake1(isNatIList(IL))) 86.65/27.23 mark(uTake1(X)) -> active(uTake1(mark(X))) 86.65/27.23 active(take(s(M), cons(N, IL))) -> mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL)) 86.65/27.23 mark(uTake2(X1, X2, X3, X4)) -> active(uTake2(mark(X1), X2, X3, X4)) 86.65/27.23 active(uTake2(tt, M, N, IL)) -> mark(cons(N, take(M, IL))) 86.65/27.23 active(length(cons(N, L))) -> mark(uLength(and(isNat(N), isNatList(L)), L)) 86.65/27.23 mark(uLength(X1, X2)) -> active(uLength(mark(X1), X2)) 86.65/27.23 active(uLength(tt, L)) -> mark(s(length(L))) 86.65/27.23 mark(length(X)) -> active(length(mark(X))) 86.65/27.23 mark(zeros) -> active(zeros) 86.65/27.23 mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) 86.65/27.23 mark(tt) -> active(tt) 86.65/27.23 mark(0) -> active(0) 86.65/27.23 mark(nil) -> active(nil) 86.65/27.23 take(X1, mark(X2)) -> take(X1, X2) 86.65/27.23 take(mark(X1), X2) -> take(X1, X2) 86.65/27.23 take(active(X1), X2) -> take(X1, X2) 86.65/27.23 take(X1, active(X2)) -> take(X1, X2) 86.65/27.23 and(X1, mark(X2)) -> and(X1, X2) 86.65/27.23 and(mark(X1), X2) -> and(X1, X2) 86.65/27.23 and(active(X1), X2) -> and(X1, X2) 86.65/27.23 and(X1, active(X2)) -> and(X1, X2) 86.65/27.23 active(isNat(0)) -> mark(tt) 86.65/27.23 active(isNatIList(zeros)) -> mark(tt) 86.65/27.23 active(isNatList(nil)) -> mark(tt) 86.65/27.23 active(uTake1(tt)) -> mark(nil) 86.65/27.23 s(active(X)) -> s(X) 86.65/27.23 s(mark(X)) -> s(X) 86.65/27.23 cons(X1, mark(X2)) -> cons(X1, X2) 86.65/27.23 cons(mark(X1), X2) -> cons(X1, X2) 86.65/27.23 cons(active(X1), X2) -> cons(X1, X2) 86.65/27.23 cons(X1, active(X2)) -> cons(X1, X2) 86.65/27.23 uTake1(active(X)) -> uTake1(X) 86.65/27.23 uTake1(mark(X)) -> uTake1(X) 86.65/27.23 uTake2(X1, mark(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(mark(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(X1, X2, mark(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(X1, X2, X3, mark(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(active(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(X1, active(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(X1, X2, active(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(X1, X2, X3, active(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uLength(X1, mark(X2)) -> uLength(X1, X2) 86.65/27.23 uLength(mark(X1), X2) -> uLength(X1, X2) 86.65/27.23 uLength(active(X1), X2) -> uLength(X1, X2) 86.65/27.23 uLength(X1, active(X2)) -> uLength(X1, X2) 86.65/27.23 length(active(X)) -> length(X) 86.65/27.23 length(mark(X)) -> length(X) 86.65/27.23 86.65/27.23 The set Q consists of the following terms: 86.65/27.23 86.65/27.23 active(and(tt, x0)) 86.65/27.23 active(isNatIList(x0)) 86.65/27.23 active(isNat(0)) 86.65/27.23 active(isNat(s(x0))) 86.65/27.23 active(isNat(length(x0))) 86.65/27.23 active(isNatList(nil)) 86.65/27.23 active(isNatList(cons(x0, x1))) 86.65/27.23 active(isNatList(take(x0, x1))) 86.65/27.23 active(zeros) 86.65/27.23 active(take(0, x0)) 86.65/27.23 active(uTake1(tt)) 86.65/27.23 active(take(s(x0), cons(x1, x2))) 86.65/27.23 active(uTake2(tt, x0, x1, x2)) 86.65/27.23 active(length(cons(x0, x1))) 86.65/27.23 active(uLength(tt, x0)) 86.65/27.23 mark(and(x0, x1)) 86.65/27.23 mark(tt) 86.65/27.23 mark(isNatIList(x0)) 86.65/27.23 mark(isNatList(x0)) 86.65/27.23 mark(isNat(x0)) 86.65/27.23 mark(0) 86.65/27.23 mark(s(x0)) 86.65/27.23 mark(length(x0)) 86.65/27.23 mark(zeros) 86.65/27.23 mark(cons(x0, x1)) 86.65/27.23 mark(nil) 86.65/27.23 mark(take(x0, x1)) 86.65/27.23 mark(uTake1(x0)) 86.65/27.23 mark(uTake2(x0, x1, x2, x3)) 86.65/27.23 mark(uLength(x0, x1)) 86.65/27.23 and(mark(x0), x1) 86.65/27.23 and(x0, mark(x1)) 86.65/27.23 and(active(x0), x1) 86.65/27.23 and(x0, active(x1)) 86.65/27.23 isNatIList(mark(x0)) 86.65/27.23 isNatIList(active(x0)) 86.65/27.23 isNatList(mark(x0)) 86.65/27.23 isNatList(active(x0)) 86.65/27.23 isNat(mark(x0)) 86.65/27.23 isNat(active(x0)) 86.65/27.23 s(mark(x0)) 86.65/27.23 s(active(x0)) 86.65/27.23 length(mark(x0)) 86.65/27.23 length(active(x0)) 86.65/27.23 cons(mark(x0), x1) 86.65/27.23 cons(x0, mark(x1)) 86.65/27.23 cons(active(x0), x1) 86.65/27.23 cons(x0, active(x1)) 86.65/27.23 take(mark(x0), x1) 86.65/27.23 take(x0, mark(x1)) 86.65/27.23 take(active(x0), x1) 86.65/27.23 take(x0, active(x1)) 86.65/27.23 uTake1(mark(x0)) 86.65/27.23 uTake1(active(x0)) 86.65/27.23 uTake2(mark(x0), x1, x2, x3) 86.65/27.23 uTake2(x0, mark(x1), x2, x3) 86.65/27.23 uTake2(x0, x1, mark(x2), x3) 86.65/27.23 uTake2(x0, x1, x2, mark(x3)) 86.65/27.23 uTake2(active(x0), x1, x2, x3) 86.65/27.23 uTake2(x0, active(x1), x2, x3) 86.65/27.23 uTake2(x0, x1, active(x2), x3) 86.65/27.23 uTake2(x0, x1, x2, active(x3)) 86.65/27.23 uLength(mark(x0), x1) 86.65/27.23 uLength(x0, mark(x1)) 86.65/27.23 uLength(active(x0), x1) 86.65/27.23 uLength(x0, active(x1)) 86.65/27.23 86.65/27.23 We have to consider all minimal (P,Q,R)-chains. 86.65/27.23 ---------------------------------------- 86.65/27.23 86.65/27.23 (97) QDPQMonotonicMRRProof (EQUIVALENT) 86.65/27.23 By using the Q-monotonic rule removal processor with the following ordering, at least one Dependency Pair or term rewrite system rule of this QDP problem can be strictly oriented such that it always occurs at a strongly monotonic position in a (P,Q,R)-chain. 86.65/27.23 86.65/27.23 Strictly oriented dependency pairs: 86.65/27.23 86.65/27.23 MARK(uTake2(X1, X2, X3, X4)) -> ACTIVE(uTake2(mark(X1), X2, X3, X4)) 86.65/27.23 86.65/27.23 86.65/27.23 Used ordering: Polynomial interpretation [POLO]: 86.65/27.23 86.65/27.23 POL(0) = 0 86.65/27.23 POL(ACTIVE(x_1)) = x_1 86.65/27.23 POL(MARK(x_1)) = 1 86.65/27.23 POL(active(x_1)) = 0 86.65/27.23 POL(and(x_1, x_2)) = 1 86.65/27.23 POL(cons(x_1, x_2)) = 0 86.65/27.23 POL(isNat(x_1)) = 1 86.65/27.23 POL(isNatIList(x_1)) = 1 86.65/27.23 POL(isNatList(x_1)) = 1 86.65/27.23 POL(length(x_1)) = 1 86.65/27.23 POL(mark(x_1)) = 0 86.65/27.23 POL(nil) = 0 86.65/27.23 POL(s(x_1)) = 0 86.65/27.23 POL(take(x_1, x_2)) = 1 86.65/27.23 POL(tt) = 0 86.65/27.23 POL(uLength(x_1, x_2)) = 1 86.65/27.23 POL(uTake1(x_1)) = 0 86.65/27.23 POL(uTake2(x_1, x_2, x_3, x_4)) = 0 86.65/27.23 POL(zeros) = 0 86.65/27.23 86.65/27.23 86.65/27.23 ---------------------------------------- 86.65/27.23 86.65/27.23 (98) 86.65/27.23 Obligation: 86.65/27.23 Q DP problem: 86.65/27.23 The TRS P consists of the following rules: 86.65/27.23 86.65/27.23 ACTIVE(and(tt, T)) -> MARK(T) 86.65/27.23 MARK(and(X1, X2)) -> ACTIVE(and(mark(X1), mark(X2))) 86.65/27.23 ACTIVE(take(s(M), cons(N, IL))) -> MARK(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL)) 86.65/27.23 MARK(cons(X1, X2)) -> MARK(X1) 86.65/27.23 MARK(and(X1, X2)) -> MARK(X1) 86.65/27.23 MARK(and(X1, X2)) -> MARK(X2) 86.65/27.23 MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) 86.65/27.23 ACTIVE(isNatIList(IL)) -> MARK(isNatList(IL)) 86.65/27.23 MARK(isNatList(X)) -> ACTIVE(isNatList(X)) 86.65/27.23 ACTIVE(isNatList(cons(N, L))) -> MARK(and(isNat(N), isNatList(L))) 86.65/27.23 ACTIVE(isNatList(take(N, IL))) -> MARK(and(isNat(N), isNatIList(IL))) 86.65/27.23 ACTIVE(isNatIList(cons(N, IL))) -> MARK(and(isNat(N), isNatIList(IL))) 86.65/27.23 MARK(isNat(X)) -> ACTIVE(isNat(X)) 86.65/27.23 ACTIVE(isNat(s(N))) -> MARK(isNat(N)) 86.65/27.23 ACTIVE(isNat(length(L))) -> MARK(isNatList(L)) 86.65/27.23 MARK(s(X)) -> MARK(X) 86.65/27.23 MARK(length(X)) -> ACTIVE(length(mark(X))) 86.65/27.23 ACTIVE(length(cons(N, L))) -> MARK(uLength(and(isNat(N), isNatList(L)), L)) 86.65/27.23 MARK(uLength(X1, X2)) -> ACTIVE(uLength(mark(X1), X2)) 86.65/27.23 ACTIVE(uLength(tt, L)) -> MARK(s(length(L))) 86.65/27.23 MARK(take(X1, X2)) -> ACTIVE(take(mark(X1), mark(X2))) 86.65/27.23 86.65/27.23 The TRS R consists of the following rules: 86.65/27.23 86.65/27.23 mark(and(X1, X2)) -> active(and(mark(X1), mark(X2))) 86.65/27.23 active(and(tt, T)) -> mark(T) 86.65/27.23 mark(isNatIList(X)) -> active(isNatIList(X)) 86.65/27.23 active(isNatIList(IL)) -> mark(isNatList(IL)) 86.65/27.23 mark(isNatList(X)) -> active(isNatList(X)) 86.65/27.23 active(isNatList(cons(N, L))) -> mark(and(isNat(N), isNatList(L))) 86.65/27.23 active(isNatList(take(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.23 active(isNatIList(cons(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.23 mark(isNat(X)) -> active(isNat(X)) 86.65/27.23 active(isNat(s(N))) -> mark(isNat(N)) 86.65/27.23 active(isNat(length(L))) -> mark(isNatList(L)) 86.65/27.23 mark(s(X)) -> active(s(mark(X))) 86.65/27.23 active(zeros) -> mark(cons(0, zeros)) 86.65/27.23 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 86.65/27.23 active(take(0, IL)) -> mark(uTake1(isNatIList(IL))) 86.65/27.23 mark(uTake1(X)) -> active(uTake1(mark(X))) 86.65/27.23 active(take(s(M), cons(N, IL))) -> mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL)) 86.65/27.23 mark(uTake2(X1, X2, X3, X4)) -> active(uTake2(mark(X1), X2, X3, X4)) 86.65/27.23 active(uTake2(tt, M, N, IL)) -> mark(cons(N, take(M, IL))) 86.65/27.23 active(length(cons(N, L))) -> mark(uLength(and(isNat(N), isNatList(L)), L)) 86.65/27.23 mark(uLength(X1, X2)) -> active(uLength(mark(X1), X2)) 86.65/27.23 active(uLength(tt, L)) -> mark(s(length(L))) 86.65/27.23 mark(length(X)) -> active(length(mark(X))) 86.65/27.23 mark(zeros) -> active(zeros) 86.65/27.23 mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) 86.65/27.23 mark(tt) -> active(tt) 86.65/27.23 mark(0) -> active(0) 86.65/27.23 mark(nil) -> active(nil) 86.65/27.23 take(X1, mark(X2)) -> take(X1, X2) 86.65/27.23 take(mark(X1), X2) -> take(X1, X2) 86.65/27.23 take(active(X1), X2) -> take(X1, X2) 86.65/27.23 take(X1, active(X2)) -> take(X1, X2) 86.65/27.23 and(X1, mark(X2)) -> and(X1, X2) 86.65/27.23 and(mark(X1), X2) -> and(X1, X2) 86.65/27.23 and(active(X1), X2) -> and(X1, X2) 86.65/27.23 and(X1, active(X2)) -> and(X1, X2) 86.65/27.23 active(isNat(0)) -> mark(tt) 86.65/27.23 active(isNatIList(zeros)) -> mark(tt) 86.65/27.23 active(isNatList(nil)) -> mark(tt) 86.65/27.23 active(uTake1(tt)) -> mark(nil) 86.65/27.23 s(active(X)) -> s(X) 86.65/27.23 s(mark(X)) -> s(X) 86.65/27.23 cons(X1, mark(X2)) -> cons(X1, X2) 86.65/27.23 cons(mark(X1), X2) -> cons(X1, X2) 86.65/27.23 cons(active(X1), X2) -> cons(X1, X2) 86.65/27.23 cons(X1, active(X2)) -> cons(X1, X2) 86.65/27.23 uTake1(active(X)) -> uTake1(X) 86.65/27.23 uTake1(mark(X)) -> uTake1(X) 86.65/27.23 uTake2(X1, mark(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(mark(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(X1, X2, mark(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(X1, X2, X3, mark(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(active(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(X1, active(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(X1, X2, active(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(X1, X2, X3, active(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uLength(X1, mark(X2)) -> uLength(X1, X2) 86.65/27.23 uLength(mark(X1), X2) -> uLength(X1, X2) 86.65/27.23 uLength(active(X1), X2) -> uLength(X1, X2) 86.65/27.23 uLength(X1, active(X2)) -> uLength(X1, X2) 86.65/27.23 length(active(X)) -> length(X) 86.65/27.23 length(mark(X)) -> length(X) 86.65/27.23 86.65/27.23 The set Q consists of the following terms: 86.65/27.23 86.65/27.23 active(and(tt, x0)) 86.65/27.23 active(isNatIList(x0)) 86.65/27.23 active(isNat(0)) 86.65/27.23 active(isNat(s(x0))) 86.65/27.23 active(isNat(length(x0))) 86.65/27.23 active(isNatList(nil)) 86.65/27.23 active(isNatList(cons(x0, x1))) 86.65/27.23 active(isNatList(take(x0, x1))) 86.65/27.23 active(zeros) 86.65/27.23 active(take(0, x0)) 86.65/27.23 active(uTake1(tt)) 86.65/27.23 active(take(s(x0), cons(x1, x2))) 86.65/27.23 active(uTake2(tt, x0, x1, x2)) 86.65/27.23 active(length(cons(x0, x1))) 86.65/27.23 active(uLength(tt, x0)) 86.65/27.23 mark(and(x0, x1)) 86.65/27.23 mark(tt) 86.65/27.23 mark(isNatIList(x0)) 86.65/27.23 mark(isNatList(x0)) 86.65/27.23 mark(isNat(x0)) 86.65/27.23 mark(0) 86.65/27.23 mark(s(x0)) 86.65/27.23 mark(length(x0)) 86.65/27.23 mark(zeros) 86.65/27.23 mark(cons(x0, x1)) 86.65/27.23 mark(nil) 86.65/27.23 mark(take(x0, x1)) 86.65/27.23 mark(uTake1(x0)) 86.65/27.23 mark(uTake2(x0, x1, x2, x3)) 86.65/27.23 mark(uLength(x0, x1)) 86.65/27.23 and(mark(x0), x1) 86.65/27.23 and(x0, mark(x1)) 86.65/27.23 and(active(x0), x1) 86.65/27.23 and(x0, active(x1)) 86.65/27.23 isNatIList(mark(x0)) 86.65/27.23 isNatIList(active(x0)) 86.65/27.23 isNatList(mark(x0)) 86.65/27.23 isNatList(active(x0)) 86.65/27.23 isNat(mark(x0)) 86.65/27.23 isNat(active(x0)) 86.65/27.23 s(mark(x0)) 86.65/27.23 s(active(x0)) 86.65/27.23 length(mark(x0)) 86.65/27.23 length(active(x0)) 86.65/27.23 cons(mark(x0), x1) 86.65/27.23 cons(x0, mark(x1)) 86.65/27.23 cons(active(x0), x1) 86.65/27.23 cons(x0, active(x1)) 86.65/27.23 take(mark(x0), x1) 86.65/27.23 take(x0, mark(x1)) 86.65/27.23 take(active(x0), x1) 86.65/27.23 take(x0, active(x1)) 86.65/27.23 uTake1(mark(x0)) 86.65/27.23 uTake1(active(x0)) 86.65/27.23 uTake2(mark(x0), x1, x2, x3) 86.65/27.23 uTake2(x0, mark(x1), x2, x3) 86.65/27.23 uTake2(x0, x1, mark(x2), x3) 86.65/27.23 uTake2(x0, x1, x2, mark(x3)) 86.65/27.23 uTake2(active(x0), x1, x2, x3) 86.65/27.23 uTake2(x0, active(x1), x2, x3) 86.65/27.23 uTake2(x0, x1, active(x2), x3) 86.65/27.23 uTake2(x0, x1, x2, active(x3)) 86.65/27.23 uLength(mark(x0), x1) 86.65/27.23 uLength(x0, mark(x1)) 86.65/27.23 uLength(active(x0), x1) 86.65/27.23 uLength(x0, active(x1)) 86.65/27.23 86.65/27.23 We have to consider all minimal (P,Q,R)-chains. 86.65/27.23 ---------------------------------------- 86.65/27.23 86.65/27.23 (99) DependencyGraphProof (EQUIVALENT) 86.65/27.23 The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 1 SCC with 1 less node. 86.65/27.23 ---------------------------------------- 86.65/27.23 86.65/27.23 (100) 86.65/27.23 Obligation: 86.65/27.23 Q DP problem: 86.65/27.23 The TRS P consists of the following rules: 86.65/27.23 86.65/27.23 MARK(and(X1, X2)) -> ACTIVE(and(mark(X1), mark(X2))) 86.65/27.23 ACTIVE(and(tt, T)) -> MARK(T) 86.65/27.23 MARK(and(X1, X2)) -> MARK(X1) 86.65/27.23 MARK(and(X1, X2)) -> MARK(X2) 86.65/27.23 MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) 86.65/27.23 ACTIVE(isNatIList(IL)) -> MARK(isNatList(IL)) 86.65/27.23 MARK(isNatList(X)) -> ACTIVE(isNatList(X)) 86.65/27.23 ACTIVE(isNatList(cons(N, L))) -> MARK(and(isNat(N), isNatList(L))) 86.65/27.23 ACTIVE(isNatList(take(N, IL))) -> MARK(and(isNat(N), isNatIList(IL))) 86.65/27.23 ACTIVE(isNatIList(cons(N, IL))) -> MARK(and(isNat(N), isNatIList(IL))) 86.65/27.23 MARK(isNat(X)) -> ACTIVE(isNat(X)) 86.65/27.23 ACTIVE(isNat(s(N))) -> MARK(isNat(N)) 86.65/27.23 ACTIVE(isNat(length(L))) -> MARK(isNatList(L)) 86.65/27.23 MARK(s(X)) -> MARK(X) 86.65/27.23 MARK(length(X)) -> ACTIVE(length(mark(X))) 86.65/27.23 ACTIVE(length(cons(N, L))) -> MARK(uLength(and(isNat(N), isNatList(L)), L)) 86.65/27.23 MARK(uLength(X1, X2)) -> ACTIVE(uLength(mark(X1), X2)) 86.65/27.23 ACTIVE(uLength(tt, L)) -> MARK(s(length(L))) 86.65/27.23 MARK(cons(X1, X2)) -> MARK(X1) 86.65/27.23 MARK(take(X1, X2)) -> ACTIVE(take(mark(X1), mark(X2))) 86.65/27.23 86.65/27.23 The TRS R consists of the following rules: 86.65/27.23 86.65/27.23 mark(and(X1, X2)) -> active(and(mark(X1), mark(X2))) 86.65/27.23 active(and(tt, T)) -> mark(T) 86.65/27.23 mark(isNatIList(X)) -> active(isNatIList(X)) 86.65/27.23 active(isNatIList(IL)) -> mark(isNatList(IL)) 86.65/27.23 mark(isNatList(X)) -> active(isNatList(X)) 86.65/27.23 active(isNatList(cons(N, L))) -> mark(and(isNat(N), isNatList(L))) 86.65/27.23 active(isNatList(take(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.23 active(isNatIList(cons(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.23 mark(isNat(X)) -> active(isNat(X)) 86.65/27.23 active(isNat(s(N))) -> mark(isNat(N)) 86.65/27.23 active(isNat(length(L))) -> mark(isNatList(L)) 86.65/27.23 mark(s(X)) -> active(s(mark(X))) 86.65/27.23 active(zeros) -> mark(cons(0, zeros)) 86.65/27.23 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 86.65/27.23 active(take(0, IL)) -> mark(uTake1(isNatIList(IL))) 86.65/27.23 mark(uTake1(X)) -> active(uTake1(mark(X))) 86.65/27.23 active(take(s(M), cons(N, IL))) -> mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL)) 86.65/27.23 mark(uTake2(X1, X2, X3, X4)) -> active(uTake2(mark(X1), X2, X3, X4)) 86.65/27.23 active(uTake2(tt, M, N, IL)) -> mark(cons(N, take(M, IL))) 86.65/27.23 active(length(cons(N, L))) -> mark(uLength(and(isNat(N), isNatList(L)), L)) 86.65/27.23 mark(uLength(X1, X2)) -> active(uLength(mark(X1), X2)) 86.65/27.23 active(uLength(tt, L)) -> mark(s(length(L))) 86.65/27.23 mark(length(X)) -> active(length(mark(X))) 86.65/27.23 mark(zeros) -> active(zeros) 86.65/27.23 mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) 86.65/27.23 mark(tt) -> active(tt) 86.65/27.23 mark(0) -> active(0) 86.65/27.23 mark(nil) -> active(nil) 86.65/27.23 take(X1, mark(X2)) -> take(X1, X2) 86.65/27.23 take(mark(X1), X2) -> take(X1, X2) 86.65/27.23 take(active(X1), X2) -> take(X1, X2) 86.65/27.23 take(X1, active(X2)) -> take(X1, X2) 86.65/27.23 and(X1, mark(X2)) -> and(X1, X2) 86.65/27.23 and(mark(X1), X2) -> and(X1, X2) 86.65/27.23 and(active(X1), X2) -> and(X1, X2) 86.65/27.23 and(X1, active(X2)) -> and(X1, X2) 86.65/27.23 active(isNat(0)) -> mark(tt) 86.65/27.23 active(isNatIList(zeros)) -> mark(tt) 86.65/27.23 active(isNatList(nil)) -> mark(tt) 86.65/27.23 active(uTake1(tt)) -> mark(nil) 86.65/27.23 s(active(X)) -> s(X) 86.65/27.23 s(mark(X)) -> s(X) 86.65/27.23 cons(X1, mark(X2)) -> cons(X1, X2) 86.65/27.23 cons(mark(X1), X2) -> cons(X1, X2) 86.65/27.23 cons(active(X1), X2) -> cons(X1, X2) 86.65/27.23 cons(X1, active(X2)) -> cons(X1, X2) 86.65/27.23 uTake1(active(X)) -> uTake1(X) 86.65/27.23 uTake1(mark(X)) -> uTake1(X) 86.65/27.23 uTake2(X1, mark(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(mark(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(X1, X2, mark(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(X1, X2, X3, mark(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(active(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(X1, active(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(X1, X2, active(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(X1, X2, X3, active(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uLength(X1, mark(X2)) -> uLength(X1, X2) 86.65/27.23 uLength(mark(X1), X2) -> uLength(X1, X2) 86.65/27.23 uLength(active(X1), X2) -> uLength(X1, X2) 86.65/27.23 uLength(X1, active(X2)) -> uLength(X1, X2) 86.65/27.23 length(active(X)) -> length(X) 86.65/27.23 length(mark(X)) -> length(X) 86.65/27.23 86.65/27.23 The set Q consists of the following terms: 86.65/27.23 86.65/27.23 active(and(tt, x0)) 86.65/27.23 active(isNatIList(x0)) 86.65/27.23 active(isNat(0)) 86.65/27.23 active(isNat(s(x0))) 86.65/27.23 active(isNat(length(x0))) 86.65/27.23 active(isNatList(nil)) 86.65/27.23 active(isNatList(cons(x0, x1))) 86.65/27.23 active(isNatList(take(x0, x1))) 86.65/27.23 active(zeros) 86.65/27.23 active(take(0, x0)) 86.65/27.23 active(uTake1(tt)) 86.65/27.23 active(take(s(x0), cons(x1, x2))) 86.65/27.23 active(uTake2(tt, x0, x1, x2)) 86.65/27.23 active(length(cons(x0, x1))) 86.65/27.23 active(uLength(tt, x0)) 86.65/27.23 mark(and(x0, x1)) 86.65/27.23 mark(tt) 86.65/27.23 mark(isNatIList(x0)) 86.65/27.23 mark(isNatList(x0)) 86.65/27.23 mark(isNat(x0)) 86.65/27.23 mark(0) 86.65/27.23 mark(s(x0)) 86.65/27.23 mark(length(x0)) 86.65/27.23 mark(zeros) 86.65/27.23 mark(cons(x0, x1)) 86.65/27.23 mark(nil) 86.65/27.23 mark(take(x0, x1)) 86.65/27.23 mark(uTake1(x0)) 86.65/27.23 mark(uTake2(x0, x1, x2, x3)) 86.65/27.23 mark(uLength(x0, x1)) 86.65/27.23 and(mark(x0), x1) 86.65/27.23 and(x0, mark(x1)) 86.65/27.23 and(active(x0), x1) 86.65/27.23 and(x0, active(x1)) 86.65/27.23 isNatIList(mark(x0)) 86.65/27.23 isNatIList(active(x0)) 86.65/27.23 isNatList(mark(x0)) 86.65/27.23 isNatList(active(x0)) 86.65/27.23 isNat(mark(x0)) 86.65/27.23 isNat(active(x0)) 86.65/27.23 s(mark(x0)) 86.65/27.23 s(active(x0)) 86.65/27.23 length(mark(x0)) 86.65/27.23 length(active(x0)) 86.65/27.23 cons(mark(x0), x1) 86.65/27.23 cons(x0, mark(x1)) 86.65/27.23 cons(active(x0), x1) 86.65/27.23 cons(x0, active(x1)) 86.65/27.23 take(mark(x0), x1) 86.65/27.23 take(x0, mark(x1)) 86.65/27.23 take(active(x0), x1) 86.65/27.23 take(x0, active(x1)) 86.65/27.23 uTake1(mark(x0)) 86.65/27.23 uTake1(active(x0)) 86.65/27.23 uTake2(mark(x0), x1, x2, x3) 86.65/27.23 uTake2(x0, mark(x1), x2, x3) 86.65/27.23 uTake2(x0, x1, mark(x2), x3) 86.65/27.23 uTake2(x0, x1, x2, mark(x3)) 86.65/27.23 uTake2(active(x0), x1, x2, x3) 86.65/27.23 uTake2(x0, active(x1), x2, x3) 86.65/27.23 uTake2(x0, x1, active(x2), x3) 86.65/27.23 uTake2(x0, x1, x2, active(x3)) 86.65/27.23 uLength(mark(x0), x1) 86.65/27.23 uLength(x0, mark(x1)) 86.65/27.23 uLength(active(x0), x1) 86.65/27.23 uLength(x0, active(x1)) 86.65/27.23 86.65/27.23 We have to consider all minimal (P,Q,R)-chains. 86.65/27.23 ---------------------------------------- 86.65/27.23 86.65/27.23 (101) QDPQMonotonicMRRProof (EQUIVALENT) 86.65/27.23 By using the Q-monotonic rule removal processor with the following ordering, at least one Dependency Pair or term rewrite system rule of this QDP problem can be strictly oriented such that it always occurs at a strongly monotonic position in a (P,Q,R)-chain. 86.65/27.23 86.65/27.23 Strictly oriented dependency pairs: 86.65/27.23 86.65/27.23 MARK(take(X1, X2)) -> ACTIVE(take(mark(X1), mark(X2))) 86.65/27.23 86.65/27.23 86.65/27.23 Used ordering: Polynomial interpretation [POLO]: 86.65/27.23 86.65/27.23 POL(0) = 0 86.65/27.23 POL(ACTIVE(x_1)) = 2*x_1 86.65/27.23 POL(MARK(x_1)) = 2 86.65/27.23 POL(active(x_1)) = 0 86.65/27.23 POL(and(x_1, x_2)) = 1 86.65/27.23 POL(cons(x_1, x_2)) = 0 86.65/27.23 POL(isNat(x_1)) = 1 86.65/27.23 POL(isNatIList(x_1)) = 1 86.65/27.23 POL(isNatList(x_1)) = 1 86.65/27.23 POL(length(x_1)) = 1 86.65/27.23 POL(mark(x_1)) = 0 86.65/27.23 POL(nil) = 0 86.65/27.23 POL(s(x_1)) = 0 86.65/27.23 POL(take(x_1, x_2)) = 0 86.65/27.23 POL(tt) = 0 86.65/27.23 POL(uLength(x_1, x_2)) = 1 86.65/27.23 POL(uTake1(x_1)) = 0 86.65/27.23 POL(uTake2(x_1, x_2, x_3, x_4)) = 0 86.65/27.23 POL(zeros) = 0 86.65/27.23 86.65/27.23 86.65/27.23 ---------------------------------------- 86.65/27.23 86.65/27.23 (102) 86.65/27.23 Obligation: 86.65/27.23 Q DP problem: 86.65/27.23 The TRS P consists of the following rules: 86.65/27.23 86.65/27.23 MARK(and(X1, X2)) -> ACTIVE(and(mark(X1), mark(X2))) 86.65/27.23 ACTIVE(and(tt, T)) -> MARK(T) 86.65/27.23 MARK(and(X1, X2)) -> MARK(X1) 86.65/27.23 MARK(and(X1, X2)) -> MARK(X2) 86.65/27.23 MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) 86.65/27.23 ACTIVE(isNatIList(IL)) -> MARK(isNatList(IL)) 86.65/27.23 MARK(isNatList(X)) -> ACTIVE(isNatList(X)) 86.65/27.23 ACTIVE(isNatList(cons(N, L))) -> MARK(and(isNat(N), isNatList(L))) 86.65/27.23 ACTIVE(isNatList(take(N, IL))) -> MARK(and(isNat(N), isNatIList(IL))) 86.65/27.23 ACTIVE(isNatIList(cons(N, IL))) -> MARK(and(isNat(N), isNatIList(IL))) 86.65/27.23 MARK(isNat(X)) -> ACTIVE(isNat(X)) 86.65/27.23 ACTIVE(isNat(s(N))) -> MARK(isNat(N)) 86.65/27.23 ACTIVE(isNat(length(L))) -> MARK(isNatList(L)) 86.65/27.23 MARK(s(X)) -> MARK(X) 86.65/27.23 MARK(length(X)) -> ACTIVE(length(mark(X))) 86.65/27.23 ACTIVE(length(cons(N, L))) -> MARK(uLength(and(isNat(N), isNatList(L)), L)) 86.65/27.23 MARK(uLength(X1, X2)) -> ACTIVE(uLength(mark(X1), X2)) 86.65/27.23 ACTIVE(uLength(tt, L)) -> MARK(s(length(L))) 86.65/27.23 MARK(cons(X1, X2)) -> MARK(X1) 86.65/27.23 86.65/27.23 The TRS R consists of the following rules: 86.65/27.23 86.65/27.23 mark(and(X1, X2)) -> active(and(mark(X1), mark(X2))) 86.65/27.23 active(and(tt, T)) -> mark(T) 86.65/27.23 mark(isNatIList(X)) -> active(isNatIList(X)) 86.65/27.23 active(isNatIList(IL)) -> mark(isNatList(IL)) 86.65/27.23 mark(isNatList(X)) -> active(isNatList(X)) 86.65/27.23 active(isNatList(cons(N, L))) -> mark(and(isNat(N), isNatList(L))) 86.65/27.23 active(isNatList(take(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.23 active(isNatIList(cons(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.23 mark(isNat(X)) -> active(isNat(X)) 86.65/27.23 active(isNat(s(N))) -> mark(isNat(N)) 86.65/27.23 active(isNat(length(L))) -> mark(isNatList(L)) 86.65/27.23 mark(s(X)) -> active(s(mark(X))) 86.65/27.23 active(zeros) -> mark(cons(0, zeros)) 86.65/27.23 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 86.65/27.23 active(take(0, IL)) -> mark(uTake1(isNatIList(IL))) 86.65/27.23 mark(uTake1(X)) -> active(uTake1(mark(X))) 86.65/27.23 active(take(s(M), cons(N, IL))) -> mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL)) 86.65/27.23 mark(uTake2(X1, X2, X3, X4)) -> active(uTake2(mark(X1), X2, X3, X4)) 86.65/27.23 active(uTake2(tt, M, N, IL)) -> mark(cons(N, take(M, IL))) 86.65/27.23 active(length(cons(N, L))) -> mark(uLength(and(isNat(N), isNatList(L)), L)) 86.65/27.23 mark(uLength(X1, X2)) -> active(uLength(mark(X1), X2)) 86.65/27.23 active(uLength(tt, L)) -> mark(s(length(L))) 86.65/27.23 mark(length(X)) -> active(length(mark(X))) 86.65/27.23 mark(zeros) -> active(zeros) 86.65/27.23 mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) 86.65/27.23 mark(tt) -> active(tt) 86.65/27.23 mark(0) -> active(0) 86.65/27.23 mark(nil) -> active(nil) 86.65/27.23 take(X1, mark(X2)) -> take(X1, X2) 86.65/27.23 take(mark(X1), X2) -> take(X1, X2) 86.65/27.23 take(active(X1), X2) -> take(X1, X2) 86.65/27.23 take(X1, active(X2)) -> take(X1, X2) 86.65/27.23 and(X1, mark(X2)) -> and(X1, X2) 86.65/27.23 and(mark(X1), X2) -> and(X1, X2) 86.65/27.23 and(active(X1), X2) -> and(X1, X2) 86.65/27.23 and(X1, active(X2)) -> and(X1, X2) 86.65/27.23 active(isNat(0)) -> mark(tt) 86.65/27.23 active(isNatIList(zeros)) -> mark(tt) 86.65/27.23 active(isNatList(nil)) -> mark(tt) 86.65/27.23 active(uTake1(tt)) -> mark(nil) 86.65/27.23 s(active(X)) -> s(X) 86.65/27.23 s(mark(X)) -> s(X) 86.65/27.23 cons(X1, mark(X2)) -> cons(X1, X2) 86.65/27.23 cons(mark(X1), X2) -> cons(X1, X2) 86.65/27.23 cons(active(X1), X2) -> cons(X1, X2) 86.65/27.23 cons(X1, active(X2)) -> cons(X1, X2) 86.65/27.23 uTake1(active(X)) -> uTake1(X) 86.65/27.23 uTake1(mark(X)) -> uTake1(X) 86.65/27.23 uTake2(X1, mark(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(mark(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(X1, X2, mark(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(X1, X2, X3, mark(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(active(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(X1, active(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(X1, X2, active(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(X1, X2, X3, active(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uLength(X1, mark(X2)) -> uLength(X1, X2) 86.65/27.23 uLength(mark(X1), X2) -> uLength(X1, X2) 86.65/27.23 uLength(active(X1), X2) -> uLength(X1, X2) 86.65/27.23 uLength(X1, active(X2)) -> uLength(X1, X2) 86.65/27.23 length(active(X)) -> length(X) 86.65/27.23 length(mark(X)) -> length(X) 86.65/27.23 86.65/27.23 The set Q consists of the following terms: 86.65/27.23 86.65/27.23 active(and(tt, x0)) 86.65/27.23 active(isNatIList(x0)) 86.65/27.23 active(isNat(0)) 86.65/27.23 active(isNat(s(x0))) 86.65/27.23 active(isNat(length(x0))) 86.65/27.23 active(isNatList(nil)) 86.65/27.23 active(isNatList(cons(x0, x1))) 86.65/27.23 active(isNatList(take(x0, x1))) 86.65/27.23 active(zeros) 86.65/27.23 active(take(0, x0)) 86.65/27.23 active(uTake1(tt)) 86.65/27.23 active(take(s(x0), cons(x1, x2))) 86.65/27.23 active(uTake2(tt, x0, x1, x2)) 86.65/27.23 active(length(cons(x0, x1))) 86.65/27.23 active(uLength(tt, x0)) 86.65/27.23 mark(and(x0, x1)) 86.65/27.23 mark(tt) 86.65/27.23 mark(isNatIList(x0)) 86.65/27.23 mark(isNatList(x0)) 86.65/27.23 mark(isNat(x0)) 86.65/27.23 mark(0) 86.65/27.23 mark(s(x0)) 86.65/27.23 mark(length(x0)) 86.65/27.23 mark(zeros) 86.65/27.23 mark(cons(x0, x1)) 86.65/27.23 mark(nil) 86.65/27.23 mark(take(x0, x1)) 86.65/27.23 mark(uTake1(x0)) 86.65/27.23 mark(uTake2(x0, x1, x2, x3)) 86.65/27.23 mark(uLength(x0, x1)) 86.65/27.23 and(mark(x0), x1) 86.65/27.23 and(x0, mark(x1)) 86.65/27.23 and(active(x0), x1) 86.65/27.23 and(x0, active(x1)) 86.65/27.23 isNatIList(mark(x0)) 86.65/27.23 isNatIList(active(x0)) 86.65/27.23 isNatList(mark(x0)) 86.65/27.23 isNatList(active(x0)) 86.65/27.23 isNat(mark(x0)) 86.65/27.23 isNat(active(x0)) 86.65/27.23 s(mark(x0)) 86.65/27.23 s(active(x0)) 86.65/27.23 length(mark(x0)) 86.65/27.23 length(active(x0)) 86.65/27.23 cons(mark(x0), x1) 86.65/27.23 cons(x0, mark(x1)) 86.65/27.23 cons(active(x0), x1) 86.65/27.23 cons(x0, active(x1)) 86.65/27.23 take(mark(x0), x1) 86.65/27.23 take(x0, mark(x1)) 86.65/27.23 take(active(x0), x1) 86.65/27.23 take(x0, active(x1)) 86.65/27.23 uTake1(mark(x0)) 86.65/27.23 uTake1(active(x0)) 86.65/27.23 uTake2(mark(x0), x1, x2, x3) 86.65/27.23 uTake2(x0, mark(x1), x2, x3) 86.65/27.23 uTake2(x0, x1, mark(x2), x3) 86.65/27.23 uTake2(x0, x1, x2, mark(x3)) 86.65/27.23 uTake2(active(x0), x1, x2, x3) 86.65/27.23 uTake2(x0, active(x1), x2, x3) 86.65/27.23 uTake2(x0, x1, active(x2), x3) 86.65/27.23 uTake2(x0, x1, x2, active(x3)) 86.65/27.23 uLength(mark(x0), x1) 86.65/27.23 uLength(x0, mark(x1)) 86.65/27.23 uLength(active(x0), x1) 86.65/27.23 uLength(x0, active(x1)) 86.65/27.23 86.65/27.23 We have to consider all minimal (P,Q,R)-chains. 86.65/27.23 ---------------------------------------- 86.65/27.23 86.65/27.23 (103) QDPQMonotonicMRRProof (EQUIVALENT) 86.65/27.23 By using the Q-monotonic rule removal processor with the following ordering, at least one Dependency Pair or term rewrite system rule of this QDP problem can be strictly oriented such that it always occurs at a strongly monotonic position in a (P,Q,R)-chain. 86.65/27.23 86.65/27.23 Strictly oriented dependency pairs: 86.65/27.23 86.65/27.23 MARK(cons(X1, X2)) -> MARK(X1) 86.65/27.23 86.65/27.23 86.65/27.23 Used ordering: Polynomial interpretation [POLO]: 86.65/27.23 86.65/27.23 POL(0) = 0 86.65/27.23 POL(ACTIVE(x_1)) = 2*x_1 86.65/27.23 POL(MARK(x_1)) = 2*x_1 86.65/27.23 POL(active(x_1)) = x_1 86.65/27.23 POL(and(x_1, x_2)) = 2*x_1 + 2*x_2 86.65/27.23 POL(cons(x_1, x_2)) = 2 + x_1 86.65/27.23 POL(isNat(x_1)) = 0 86.65/27.23 POL(isNatIList(x_1)) = 0 86.65/27.23 POL(isNatList(x_1)) = 0 86.65/27.23 POL(length(x_1)) = 0 86.65/27.23 POL(mark(x_1)) = x_1 86.65/27.23 POL(nil) = 0 86.65/27.23 POL(s(x_1)) = x_1 86.65/27.23 POL(take(x_1, x_2)) = 2 + 2*x_2 86.65/27.23 POL(tt) = 0 86.65/27.23 POL(uLength(x_1, x_2)) = 0 86.65/27.23 POL(uTake1(x_1)) = 1 86.65/27.23 POL(uTake2(x_1, x_2, x_3, x_4)) = 2 + 2*x_3 86.65/27.23 POL(zeros) = 2 86.65/27.23 86.65/27.23 86.65/27.23 ---------------------------------------- 86.65/27.23 86.65/27.23 (104) 86.65/27.23 Obligation: 86.65/27.23 Q DP problem: 86.65/27.23 The TRS P consists of the following rules: 86.65/27.23 86.65/27.23 MARK(and(X1, X2)) -> ACTIVE(and(mark(X1), mark(X2))) 86.65/27.23 ACTIVE(and(tt, T)) -> MARK(T) 86.65/27.23 MARK(and(X1, X2)) -> MARK(X1) 86.65/27.23 MARK(and(X1, X2)) -> MARK(X2) 86.65/27.23 MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) 86.65/27.23 ACTIVE(isNatIList(IL)) -> MARK(isNatList(IL)) 86.65/27.23 MARK(isNatList(X)) -> ACTIVE(isNatList(X)) 86.65/27.23 ACTIVE(isNatList(cons(N, L))) -> MARK(and(isNat(N), isNatList(L))) 86.65/27.23 ACTIVE(isNatList(take(N, IL))) -> MARK(and(isNat(N), isNatIList(IL))) 86.65/27.23 ACTIVE(isNatIList(cons(N, IL))) -> MARK(and(isNat(N), isNatIList(IL))) 86.65/27.23 MARK(isNat(X)) -> ACTIVE(isNat(X)) 86.65/27.23 ACTIVE(isNat(s(N))) -> MARK(isNat(N)) 86.65/27.23 ACTIVE(isNat(length(L))) -> MARK(isNatList(L)) 86.65/27.23 MARK(s(X)) -> MARK(X) 86.65/27.23 MARK(length(X)) -> ACTIVE(length(mark(X))) 86.65/27.23 ACTIVE(length(cons(N, L))) -> MARK(uLength(and(isNat(N), isNatList(L)), L)) 86.65/27.23 MARK(uLength(X1, X2)) -> ACTIVE(uLength(mark(X1), X2)) 86.65/27.23 ACTIVE(uLength(tt, L)) -> MARK(s(length(L))) 86.65/27.23 86.65/27.23 The TRS R consists of the following rules: 86.65/27.23 86.65/27.23 mark(and(X1, X2)) -> active(and(mark(X1), mark(X2))) 86.65/27.23 active(and(tt, T)) -> mark(T) 86.65/27.23 mark(isNatIList(X)) -> active(isNatIList(X)) 86.65/27.23 active(isNatIList(IL)) -> mark(isNatList(IL)) 86.65/27.23 mark(isNatList(X)) -> active(isNatList(X)) 86.65/27.23 active(isNatList(cons(N, L))) -> mark(and(isNat(N), isNatList(L))) 86.65/27.23 active(isNatList(take(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.23 active(isNatIList(cons(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.23 mark(isNat(X)) -> active(isNat(X)) 86.65/27.23 active(isNat(s(N))) -> mark(isNat(N)) 86.65/27.23 active(isNat(length(L))) -> mark(isNatList(L)) 86.65/27.23 mark(s(X)) -> active(s(mark(X))) 86.65/27.23 active(zeros) -> mark(cons(0, zeros)) 86.65/27.23 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 86.65/27.23 active(take(0, IL)) -> mark(uTake1(isNatIList(IL))) 86.65/27.23 mark(uTake1(X)) -> active(uTake1(mark(X))) 86.65/27.23 active(take(s(M), cons(N, IL))) -> mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL)) 86.65/27.23 mark(uTake2(X1, X2, X3, X4)) -> active(uTake2(mark(X1), X2, X3, X4)) 86.65/27.23 active(uTake2(tt, M, N, IL)) -> mark(cons(N, take(M, IL))) 86.65/27.23 active(length(cons(N, L))) -> mark(uLength(and(isNat(N), isNatList(L)), L)) 86.65/27.23 mark(uLength(X1, X2)) -> active(uLength(mark(X1), X2)) 86.65/27.23 active(uLength(tt, L)) -> mark(s(length(L))) 86.65/27.23 mark(length(X)) -> active(length(mark(X))) 86.65/27.23 mark(zeros) -> active(zeros) 86.65/27.23 mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) 86.65/27.23 mark(tt) -> active(tt) 86.65/27.23 mark(0) -> active(0) 86.65/27.23 mark(nil) -> active(nil) 86.65/27.23 take(X1, mark(X2)) -> take(X1, X2) 86.65/27.23 take(mark(X1), X2) -> take(X1, X2) 86.65/27.23 take(active(X1), X2) -> take(X1, X2) 86.65/27.23 take(X1, active(X2)) -> take(X1, X2) 86.65/27.23 and(X1, mark(X2)) -> and(X1, X2) 86.65/27.23 and(mark(X1), X2) -> and(X1, X2) 86.65/27.23 and(active(X1), X2) -> and(X1, X2) 86.65/27.23 and(X1, active(X2)) -> and(X1, X2) 86.65/27.23 active(isNat(0)) -> mark(tt) 86.65/27.23 active(isNatIList(zeros)) -> mark(tt) 86.65/27.23 active(isNatList(nil)) -> mark(tt) 86.65/27.23 active(uTake1(tt)) -> mark(nil) 86.65/27.23 s(active(X)) -> s(X) 86.65/27.23 s(mark(X)) -> s(X) 86.65/27.23 cons(X1, mark(X2)) -> cons(X1, X2) 86.65/27.23 cons(mark(X1), X2) -> cons(X1, X2) 86.65/27.23 cons(active(X1), X2) -> cons(X1, X2) 86.65/27.23 cons(X1, active(X2)) -> cons(X1, X2) 86.65/27.23 uTake1(active(X)) -> uTake1(X) 86.65/27.23 uTake1(mark(X)) -> uTake1(X) 86.65/27.23 uTake2(X1, mark(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(mark(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(X1, X2, mark(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(X1, X2, X3, mark(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(active(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(X1, active(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(X1, X2, active(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(X1, X2, X3, active(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uLength(X1, mark(X2)) -> uLength(X1, X2) 86.65/27.23 uLength(mark(X1), X2) -> uLength(X1, X2) 86.65/27.23 uLength(active(X1), X2) -> uLength(X1, X2) 86.65/27.23 uLength(X1, active(X2)) -> uLength(X1, X2) 86.65/27.23 length(active(X)) -> length(X) 86.65/27.23 length(mark(X)) -> length(X) 86.65/27.23 86.65/27.23 The set Q consists of the following terms: 86.65/27.23 86.65/27.23 active(and(tt, x0)) 86.65/27.23 active(isNatIList(x0)) 86.65/27.23 active(isNat(0)) 86.65/27.23 active(isNat(s(x0))) 86.65/27.23 active(isNat(length(x0))) 86.65/27.23 active(isNatList(nil)) 86.65/27.23 active(isNatList(cons(x0, x1))) 86.65/27.23 active(isNatList(take(x0, x1))) 86.65/27.23 active(zeros) 86.65/27.23 active(take(0, x0)) 86.65/27.23 active(uTake1(tt)) 86.65/27.23 active(take(s(x0), cons(x1, x2))) 86.65/27.23 active(uTake2(tt, x0, x1, x2)) 86.65/27.23 active(length(cons(x0, x1))) 86.65/27.23 active(uLength(tt, x0)) 86.65/27.23 mark(and(x0, x1)) 86.65/27.23 mark(tt) 86.65/27.23 mark(isNatIList(x0)) 86.65/27.23 mark(isNatList(x0)) 86.65/27.23 mark(isNat(x0)) 86.65/27.23 mark(0) 86.65/27.23 mark(s(x0)) 86.65/27.23 mark(length(x0)) 86.65/27.23 mark(zeros) 86.65/27.23 mark(cons(x0, x1)) 86.65/27.23 mark(nil) 86.65/27.23 mark(take(x0, x1)) 86.65/27.23 mark(uTake1(x0)) 86.65/27.23 mark(uTake2(x0, x1, x2, x3)) 86.65/27.23 mark(uLength(x0, x1)) 86.65/27.23 and(mark(x0), x1) 86.65/27.23 and(x0, mark(x1)) 86.65/27.23 and(active(x0), x1) 86.65/27.23 and(x0, active(x1)) 86.65/27.23 isNatIList(mark(x0)) 86.65/27.23 isNatIList(active(x0)) 86.65/27.23 isNatList(mark(x0)) 86.65/27.23 isNatList(active(x0)) 86.65/27.23 isNat(mark(x0)) 86.65/27.23 isNat(active(x0)) 86.65/27.23 s(mark(x0)) 86.65/27.23 s(active(x0)) 86.65/27.23 length(mark(x0)) 86.65/27.23 length(active(x0)) 86.65/27.23 cons(mark(x0), x1) 86.65/27.23 cons(x0, mark(x1)) 86.65/27.23 cons(active(x0), x1) 86.65/27.23 cons(x0, active(x1)) 86.65/27.23 take(mark(x0), x1) 86.65/27.23 take(x0, mark(x1)) 86.65/27.23 take(active(x0), x1) 86.65/27.23 take(x0, active(x1)) 86.65/27.23 uTake1(mark(x0)) 86.65/27.23 uTake1(active(x0)) 86.65/27.23 uTake2(mark(x0), x1, x2, x3) 86.65/27.23 uTake2(x0, mark(x1), x2, x3) 86.65/27.23 uTake2(x0, x1, mark(x2), x3) 86.65/27.23 uTake2(x0, x1, x2, mark(x3)) 86.65/27.23 uTake2(active(x0), x1, x2, x3) 86.65/27.23 uTake2(x0, active(x1), x2, x3) 86.65/27.23 uTake2(x0, x1, active(x2), x3) 86.65/27.23 uTake2(x0, x1, x2, active(x3)) 86.65/27.23 uLength(mark(x0), x1) 86.65/27.23 uLength(x0, mark(x1)) 86.65/27.23 uLength(active(x0), x1) 86.65/27.23 uLength(x0, active(x1)) 86.65/27.23 86.65/27.23 We have to consider all minimal (P,Q,R)-chains. 86.65/27.23 ---------------------------------------- 86.65/27.23 86.65/27.23 (105) QDPQMonotonicMRRProof (EQUIVALENT) 86.65/27.23 By using the Q-monotonic rule removal processor with the following ordering, at least one Dependency Pair or term rewrite system rule of this QDP problem can be strictly oriented such that it always occurs at a strongly monotonic position in a (P,Q,R)-chain. 86.65/27.23 86.65/27.23 Strictly oriented dependency pairs: 86.65/27.23 86.65/27.23 ACTIVE(isNatIList(IL)) -> MARK(isNatList(IL)) 86.65/27.23 ACTIVE(isNatList(take(N, IL))) -> MARK(and(isNat(N), isNatIList(IL))) 86.65/27.23 86.65/27.23 86.65/27.23 Used ordering: Polynomial interpretation [POLO]: 86.65/27.23 86.65/27.23 POL(0) = 0 86.65/27.23 POL(ACTIVE(x_1)) = 2*x_1 86.65/27.23 POL(MARK(x_1)) = 2*x_1 86.65/27.23 POL(active(x_1)) = x_1 86.65/27.23 POL(and(x_1, x_2)) = 2*x_1 + x_2 86.65/27.23 POL(cons(x_1, x_2)) = 2*x_1 + x_2 86.65/27.23 POL(isNat(x_1)) = x_1 86.65/27.23 POL(isNatIList(x_1)) = 1 + 2*x_1 86.65/27.23 POL(isNatList(x_1)) = 2*x_1 86.65/27.23 POL(length(x_1)) = 2*x_1 86.65/27.23 POL(mark(x_1)) = x_1 86.65/27.23 POL(nil) = 0 86.65/27.23 POL(s(x_1)) = x_1 86.65/27.23 POL(take(x_1, x_2)) = 2 + 2*x_1 + x_2 86.65/27.23 POL(tt) = 0 86.65/27.23 POL(uLength(x_1, x_2)) = 2*x_2 86.65/27.23 POL(uTake1(x_1)) = 1 86.65/27.23 POL(uTake2(x_1, x_2, x_3, x_4)) = 2 + 2*x_2 + 2*x_3 + x_4 86.65/27.23 POL(zeros) = 0 86.65/27.23 86.65/27.23 86.65/27.23 ---------------------------------------- 86.65/27.23 86.65/27.23 (106) 86.65/27.23 Obligation: 86.65/27.23 Q DP problem: 86.65/27.23 The TRS P consists of the following rules: 86.65/27.23 86.65/27.23 MARK(and(X1, X2)) -> ACTIVE(and(mark(X1), mark(X2))) 86.65/27.23 ACTIVE(and(tt, T)) -> MARK(T) 86.65/27.23 MARK(and(X1, X2)) -> MARK(X1) 86.65/27.23 MARK(and(X1, X2)) -> MARK(X2) 86.65/27.23 MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) 86.65/27.23 MARK(isNatList(X)) -> ACTIVE(isNatList(X)) 86.65/27.23 ACTIVE(isNatList(cons(N, L))) -> MARK(and(isNat(N), isNatList(L))) 86.65/27.23 ACTIVE(isNatIList(cons(N, IL))) -> MARK(and(isNat(N), isNatIList(IL))) 86.65/27.23 MARK(isNat(X)) -> ACTIVE(isNat(X)) 86.65/27.23 ACTIVE(isNat(s(N))) -> MARK(isNat(N)) 86.65/27.23 ACTIVE(isNat(length(L))) -> MARK(isNatList(L)) 86.65/27.23 MARK(s(X)) -> MARK(X) 86.65/27.23 MARK(length(X)) -> ACTIVE(length(mark(X))) 86.65/27.23 ACTIVE(length(cons(N, L))) -> MARK(uLength(and(isNat(N), isNatList(L)), L)) 86.65/27.23 MARK(uLength(X1, X2)) -> ACTIVE(uLength(mark(X1), X2)) 86.65/27.23 ACTIVE(uLength(tt, L)) -> MARK(s(length(L))) 86.65/27.23 86.65/27.23 The TRS R consists of the following rules: 86.65/27.23 86.65/27.23 mark(and(X1, X2)) -> active(and(mark(X1), mark(X2))) 86.65/27.23 active(and(tt, T)) -> mark(T) 86.65/27.23 mark(isNatIList(X)) -> active(isNatIList(X)) 86.65/27.23 active(isNatIList(IL)) -> mark(isNatList(IL)) 86.65/27.23 mark(isNatList(X)) -> active(isNatList(X)) 86.65/27.23 active(isNatList(cons(N, L))) -> mark(and(isNat(N), isNatList(L))) 86.65/27.23 active(isNatList(take(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.23 active(isNatIList(cons(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.23 mark(isNat(X)) -> active(isNat(X)) 86.65/27.23 active(isNat(s(N))) -> mark(isNat(N)) 86.65/27.23 active(isNat(length(L))) -> mark(isNatList(L)) 86.65/27.23 mark(s(X)) -> active(s(mark(X))) 86.65/27.23 active(zeros) -> mark(cons(0, zeros)) 86.65/27.23 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 86.65/27.23 active(take(0, IL)) -> mark(uTake1(isNatIList(IL))) 86.65/27.23 mark(uTake1(X)) -> active(uTake1(mark(X))) 86.65/27.23 active(take(s(M), cons(N, IL))) -> mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL)) 86.65/27.23 mark(uTake2(X1, X2, X3, X4)) -> active(uTake2(mark(X1), X2, X3, X4)) 86.65/27.23 active(uTake2(tt, M, N, IL)) -> mark(cons(N, take(M, IL))) 86.65/27.23 active(length(cons(N, L))) -> mark(uLength(and(isNat(N), isNatList(L)), L)) 86.65/27.23 mark(uLength(X1, X2)) -> active(uLength(mark(X1), X2)) 86.65/27.23 active(uLength(tt, L)) -> mark(s(length(L))) 86.65/27.23 mark(length(X)) -> active(length(mark(X))) 86.65/27.23 mark(zeros) -> active(zeros) 86.65/27.23 mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) 86.65/27.23 mark(tt) -> active(tt) 86.65/27.23 mark(0) -> active(0) 86.65/27.23 mark(nil) -> active(nil) 86.65/27.23 take(X1, mark(X2)) -> take(X1, X2) 86.65/27.23 take(mark(X1), X2) -> take(X1, X2) 86.65/27.23 take(active(X1), X2) -> take(X1, X2) 86.65/27.23 take(X1, active(X2)) -> take(X1, X2) 86.65/27.23 and(X1, mark(X2)) -> and(X1, X2) 86.65/27.23 and(mark(X1), X2) -> and(X1, X2) 86.65/27.23 and(active(X1), X2) -> and(X1, X2) 86.65/27.23 and(X1, active(X2)) -> and(X1, X2) 86.65/27.23 active(isNat(0)) -> mark(tt) 86.65/27.23 active(isNatIList(zeros)) -> mark(tt) 86.65/27.23 active(isNatList(nil)) -> mark(tt) 86.65/27.23 active(uTake1(tt)) -> mark(nil) 86.65/27.23 s(active(X)) -> s(X) 86.65/27.23 s(mark(X)) -> s(X) 86.65/27.23 cons(X1, mark(X2)) -> cons(X1, X2) 86.65/27.23 cons(mark(X1), X2) -> cons(X1, X2) 86.65/27.23 cons(active(X1), X2) -> cons(X1, X2) 86.65/27.23 cons(X1, active(X2)) -> cons(X1, X2) 86.65/27.23 uTake1(active(X)) -> uTake1(X) 86.65/27.23 uTake1(mark(X)) -> uTake1(X) 86.65/27.23 uTake2(X1, mark(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(mark(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(X1, X2, mark(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(X1, X2, X3, mark(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(active(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(X1, active(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(X1, X2, active(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uTake2(X1, X2, X3, active(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.23 uLength(X1, mark(X2)) -> uLength(X1, X2) 86.65/27.23 uLength(mark(X1), X2) -> uLength(X1, X2) 86.65/27.23 uLength(active(X1), X2) -> uLength(X1, X2) 86.65/27.23 uLength(X1, active(X2)) -> uLength(X1, X2) 86.65/27.23 length(active(X)) -> length(X) 86.65/27.23 length(mark(X)) -> length(X) 86.65/27.23 86.65/27.23 The set Q consists of the following terms: 86.65/27.23 86.65/27.23 active(and(tt, x0)) 86.65/27.23 active(isNatIList(x0)) 86.65/27.23 active(isNat(0)) 86.65/27.23 active(isNat(s(x0))) 86.65/27.23 active(isNat(length(x0))) 86.65/27.23 active(isNatList(nil)) 86.65/27.23 active(isNatList(cons(x0, x1))) 86.65/27.23 active(isNatList(take(x0, x1))) 86.65/27.23 active(zeros) 86.65/27.23 active(take(0, x0)) 86.65/27.23 active(uTake1(tt)) 86.65/27.23 active(take(s(x0), cons(x1, x2))) 86.65/27.23 active(uTake2(tt, x0, x1, x2)) 86.65/27.23 active(length(cons(x0, x1))) 86.65/27.23 active(uLength(tt, x0)) 86.65/27.23 mark(and(x0, x1)) 86.65/27.23 mark(tt) 86.65/27.23 mark(isNatIList(x0)) 86.65/27.23 mark(isNatList(x0)) 86.65/27.23 mark(isNat(x0)) 86.65/27.23 mark(0) 86.65/27.23 mark(s(x0)) 86.65/27.23 mark(length(x0)) 86.65/27.23 mark(zeros) 86.65/27.23 mark(cons(x0, x1)) 86.65/27.23 mark(nil) 86.65/27.23 mark(take(x0, x1)) 86.65/27.23 mark(uTake1(x0)) 86.65/27.23 mark(uTake2(x0, x1, x2, x3)) 86.65/27.23 mark(uLength(x0, x1)) 86.65/27.23 and(mark(x0), x1) 86.65/27.23 and(x0, mark(x1)) 86.65/27.23 and(active(x0), x1) 86.65/27.23 and(x0, active(x1)) 86.65/27.23 isNatIList(mark(x0)) 86.65/27.23 isNatIList(active(x0)) 86.65/27.23 isNatList(mark(x0)) 86.65/27.23 isNatList(active(x0)) 86.65/27.23 isNat(mark(x0)) 86.65/27.23 isNat(active(x0)) 86.65/27.23 s(mark(x0)) 86.65/27.23 s(active(x0)) 86.65/27.23 length(mark(x0)) 86.65/27.23 length(active(x0)) 86.65/27.23 cons(mark(x0), x1) 86.65/27.23 cons(x0, mark(x1)) 86.65/27.23 cons(active(x0), x1) 86.65/27.23 cons(x0, active(x1)) 86.65/27.23 take(mark(x0), x1) 86.65/27.23 take(x0, mark(x1)) 86.65/27.23 take(active(x0), x1) 86.65/27.23 take(x0, active(x1)) 86.65/27.23 uTake1(mark(x0)) 86.65/27.23 uTake1(active(x0)) 86.65/27.23 uTake2(mark(x0), x1, x2, x3) 86.65/27.23 uTake2(x0, mark(x1), x2, x3) 86.65/27.23 uTake2(x0, x1, mark(x2), x3) 86.65/27.23 uTake2(x0, x1, x2, mark(x3)) 86.65/27.23 uTake2(active(x0), x1, x2, x3) 86.65/27.23 uTake2(x0, active(x1), x2, x3) 86.65/27.23 uTake2(x0, x1, active(x2), x3) 86.65/27.23 uTake2(x0, x1, x2, active(x3)) 86.65/27.23 uLength(mark(x0), x1) 86.65/27.23 uLength(x0, mark(x1)) 86.65/27.23 uLength(active(x0), x1) 86.65/27.23 uLength(x0, active(x1)) 86.65/27.23 86.65/27.23 We have to consider all minimal (P,Q,R)-chains. 86.65/27.23 ---------------------------------------- 86.65/27.23 86.65/27.23 (107) QDPQMonotonicMRRProof (EQUIVALENT) 86.65/27.23 By using the Q-monotonic rule removal processor with the following ordering, at least one Dependency Pair or term rewrite system rule of this QDP problem can be strictly oriented such that it always occurs at a strongly monotonic position in a (P,Q,R)-chain. 86.65/27.23 86.65/27.23 86.65/27.23 Strictly oriented rules of the TRS R: 86.65/27.23 86.65/27.23 active(uTake1(tt)) -> mark(nil) 86.65/27.23 86.65/27.23 Used ordering: Polynomial interpretation [POLO]: 86.65/27.23 86.65/27.23 POL(0) = 0 86.65/27.23 POL(ACTIVE(x_1)) = 2*x_1 86.65/27.23 POL(MARK(x_1)) = 2*x_1 86.65/27.23 POL(active(x_1)) = x_1 86.65/27.23 POL(and(x_1, x_2)) = 2*x_1 + 2*x_2 86.65/27.23 POL(cons(x_1, x_2)) = 2*x_1 + x_2 86.65/27.23 POL(isNat(x_1)) = 0 86.65/27.23 POL(isNatIList(x_1)) = 0 86.65/27.23 POL(isNatList(x_1)) = 0 86.65/27.23 POL(length(x_1)) = 2*x_1 86.65/27.23 POL(mark(x_1)) = x_1 86.65/27.23 POL(nil) = 0 86.65/27.23 POL(s(x_1)) = x_1 86.65/27.23 POL(take(x_1, x_2)) = 1 + x_1 + x_2 86.65/27.23 POL(tt) = 0 86.65/27.23 POL(uLength(x_1, x_2)) = x_1 + 2*x_2 86.65/27.23 POL(uTake1(x_1)) = 1 + x_1 86.65/27.23 POL(uTake2(x_1, x_2, x_3, x_4)) = 1 + x_1 + x_2 + 2*x_3 + x_4 86.65/27.23 POL(zeros) = 0 86.65/27.23 86.65/27.23 86.65/27.23 ---------------------------------------- 86.65/27.23 86.65/27.23 (108) 86.65/27.23 Obligation: 86.65/27.23 Q DP problem: 86.65/27.23 The TRS P consists of the following rules: 86.65/27.23 86.65/27.23 MARK(and(X1, X2)) -> ACTIVE(and(mark(X1), mark(X2))) 86.65/27.23 ACTIVE(and(tt, T)) -> MARK(T) 86.65/27.23 MARK(and(X1, X2)) -> MARK(X1) 86.65/27.23 MARK(and(X1, X2)) -> MARK(X2) 86.65/27.23 MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) 86.65/27.23 MARK(isNatList(X)) -> ACTIVE(isNatList(X)) 86.65/27.23 ACTIVE(isNatList(cons(N, L))) -> MARK(and(isNat(N), isNatList(L))) 86.65/27.23 ACTIVE(isNatIList(cons(N, IL))) -> MARK(and(isNat(N), isNatIList(IL))) 86.65/27.23 MARK(isNat(X)) -> ACTIVE(isNat(X)) 86.65/27.23 ACTIVE(isNat(s(N))) -> MARK(isNat(N)) 86.65/27.23 ACTIVE(isNat(length(L))) -> MARK(isNatList(L)) 86.65/27.23 MARK(s(X)) -> MARK(X) 86.65/27.23 MARK(length(X)) -> ACTIVE(length(mark(X))) 86.65/27.23 ACTIVE(length(cons(N, L))) -> MARK(uLength(and(isNat(N), isNatList(L)), L)) 86.65/27.23 MARK(uLength(X1, X2)) -> ACTIVE(uLength(mark(X1), X2)) 86.65/27.23 ACTIVE(uLength(tt, L)) -> MARK(s(length(L))) 86.65/27.24 86.65/27.24 The TRS R consists of the following rules: 86.65/27.24 86.65/27.24 mark(and(X1, X2)) -> active(and(mark(X1), mark(X2))) 86.65/27.24 active(and(tt, T)) -> mark(T) 86.65/27.24 mark(isNatIList(X)) -> active(isNatIList(X)) 86.65/27.24 active(isNatIList(IL)) -> mark(isNatList(IL)) 86.65/27.24 mark(isNatList(X)) -> active(isNatList(X)) 86.65/27.24 active(isNatList(cons(N, L))) -> mark(and(isNat(N), isNatList(L))) 86.65/27.24 active(isNatList(take(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.24 active(isNatIList(cons(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.24 mark(isNat(X)) -> active(isNat(X)) 86.65/27.24 active(isNat(s(N))) -> mark(isNat(N)) 86.65/27.24 active(isNat(length(L))) -> mark(isNatList(L)) 86.65/27.24 mark(s(X)) -> active(s(mark(X))) 86.65/27.24 active(zeros) -> mark(cons(0, zeros)) 86.65/27.24 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 86.65/27.24 active(take(0, IL)) -> mark(uTake1(isNatIList(IL))) 86.65/27.24 mark(uTake1(X)) -> active(uTake1(mark(X))) 86.65/27.24 active(take(s(M), cons(N, IL))) -> mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL)) 86.65/27.24 mark(uTake2(X1, X2, X3, X4)) -> active(uTake2(mark(X1), X2, X3, X4)) 86.65/27.24 active(uTake2(tt, M, N, IL)) -> mark(cons(N, take(M, IL))) 86.65/27.24 active(length(cons(N, L))) -> mark(uLength(and(isNat(N), isNatList(L)), L)) 86.65/27.24 mark(uLength(X1, X2)) -> active(uLength(mark(X1), X2)) 86.65/27.24 active(uLength(tt, L)) -> mark(s(length(L))) 86.65/27.24 mark(length(X)) -> active(length(mark(X))) 86.65/27.24 mark(zeros) -> active(zeros) 86.65/27.24 mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) 86.65/27.24 mark(tt) -> active(tt) 86.65/27.24 mark(0) -> active(0) 86.65/27.24 mark(nil) -> active(nil) 86.65/27.24 take(X1, mark(X2)) -> take(X1, X2) 86.65/27.24 take(mark(X1), X2) -> take(X1, X2) 86.65/27.24 take(active(X1), X2) -> take(X1, X2) 86.65/27.24 take(X1, active(X2)) -> take(X1, X2) 86.65/27.24 and(X1, mark(X2)) -> and(X1, X2) 86.65/27.24 and(mark(X1), X2) -> and(X1, X2) 86.65/27.24 and(active(X1), X2) -> and(X1, X2) 86.65/27.24 and(X1, active(X2)) -> and(X1, X2) 86.65/27.24 active(isNat(0)) -> mark(tt) 86.65/27.24 active(isNatIList(zeros)) -> mark(tt) 86.65/27.24 active(isNatList(nil)) -> mark(tt) 86.65/27.24 s(active(X)) -> s(X) 86.65/27.24 s(mark(X)) -> s(X) 86.65/27.24 cons(X1, mark(X2)) -> cons(X1, X2) 86.65/27.24 cons(mark(X1), X2) -> cons(X1, X2) 86.65/27.24 cons(active(X1), X2) -> cons(X1, X2) 86.65/27.24 cons(X1, active(X2)) -> cons(X1, X2) 86.65/27.24 uTake1(active(X)) -> uTake1(X) 86.65/27.24 uTake1(mark(X)) -> uTake1(X) 86.65/27.24 uTake2(X1, mark(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(mark(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(X1, X2, mark(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(X1, X2, X3, mark(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(active(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(X1, active(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(X1, X2, active(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(X1, X2, X3, active(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uLength(X1, mark(X2)) -> uLength(X1, X2) 86.65/27.24 uLength(mark(X1), X2) -> uLength(X1, X2) 86.65/27.24 uLength(active(X1), X2) -> uLength(X1, X2) 86.65/27.24 uLength(X1, active(X2)) -> uLength(X1, X2) 86.65/27.24 length(active(X)) -> length(X) 86.65/27.24 length(mark(X)) -> length(X) 86.65/27.24 86.65/27.24 The set Q consists of the following terms: 86.65/27.24 86.65/27.24 active(and(tt, x0)) 86.65/27.24 active(isNatIList(x0)) 86.65/27.24 active(isNat(0)) 86.65/27.24 active(isNat(s(x0))) 86.65/27.24 active(isNat(length(x0))) 86.65/27.24 active(isNatList(nil)) 86.65/27.24 active(isNatList(cons(x0, x1))) 86.65/27.24 active(isNatList(take(x0, x1))) 86.65/27.24 active(zeros) 86.65/27.24 active(take(0, x0)) 86.65/27.24 active(uTake1(tt)) 86.65/27.24 active(take(s(x0), cons(x1, x2))) 86.65/27.24 active(uTake2(tt, x0, x1, x2)) 86.65/27.24 active(length(cons(x0, x1))) 86.65/27.24 active(uLength(tt, x0)) 86.65/27.24 mark(and(x0, x1)) 86.65/27.24 mark(tt) 86.65/27.24 mark(isNatIList(x0)) 86.65/27.24 mark(isNatList(x0)) 86.65/27.24 mark(isNat(x0)) 86.65/27.24 mark(0) 86.65/27.24 mark(s(x0)) 86.65/27.24 mark(length(x0)) 86.65/27.24 mark(zeros) 86.65/27.24 mark(cons(x0, x1)) 86.65/27.24 mark(nil) 86.65/27.24 mark(take(x0, x1)) 86.65/27.24 mark(uTake1(x0)) 86.65/27.24 mark(uTake2(x0, x1, x2, x3)) 86.65/27.24 mark(uLength(x0, x1)) 86.65/27.24 and(mark(x0), x1) 86.65/27.24 and(x0, mark(x1)) 86.65/27.24 and(active(x0), x1) 86.65/27.24 and(x0, active(x1)) 86.65/27.24 isNatIList(mark(x0)) 86.65/27.24 isNatIList(active(x0)) 86.65/27.24 isNatList(mark(x0)) 86.65/27.24 isNatList(active(x0)) 86.65/27.24 isNat(mark(x0)) 86.65/27.24 isNat(active(x0)) 86.65/27.24 s(mark(x0)) 86.65/27.24 s(active(x0)) 86.65/27.24 length(mark(x0)) 86.65/27.24 length(active(x0)) 86.65/27.24 cons(mark(x0), x1) 86.65/27.24 cons(x0, mark(x1)) 86.65/27.24 cons(active(x0), x1) 86.65/27.24 cons(x0, active(x1)) 86.65/27.24 take(mark(x0), x1) 86.65/27.24 take(x0, mark(x1)) 86.65/27.24 take(active(x0), x1) 86.65/27.24 take(x0, active(x1)) 86.65/27.24 uTake1(mark(x0)) 86.65/27.24 uTake1(active(x0)) 86.65/27.24 uTake2(mark(x0), x1, x2, x3) 86.65/27.24 uTake2(x0, mark(x1), x2, x3) 86.65/27.24 uTake2(x0, x1, mark(x2), x3) 86.65/27.24 uTake2(x0, x1, x2, mark(x3)) 86.65/27.24 uTake2(active(x0), x1, x2, x3) 86.65/27.24 uTake2(x0, active(x1), x2, x3) 86.65/27.24 uTake2(x0, x1, active(x2), x3) 86.65/27.24 uTake2(x0, x1, x2, active(x3)) 86.65/27.24 uLength(mark(x0), x1) 86.65/27.24 uLength(x0, mark(x1)) 86.65/27.24 uLength(active(x0), x1) 86.65/27.24 uLength(x0, active(x1)) 86.65/27.24 86.65/27.24 We have to consider all minimal (P,Q,R)-chains. 86.65/27.24 ---------------------------------------- 86.65/27.24 86.65/27.24 (109) QDPQMonotonicMRRProof (EQUIVALENT) 86.65/27.24 By using the Q-monotonic rule removal processor with the following ordering, at least one Dependency Pair or term rewrite system rule of this QDP problem can be strictly oriented such that it always occurs at a strongly monotonic position in a (P,Q,R)-chain. 86.65/27.24 86.65/27.24 86.65/27.24 Strictly oriented rules of the TRS R: 86.65/27.24 86.65/27.24 active(take(0, IL)) -> mark(uTake1(isNatIList(IL))) 86.65/27.24 86.65/27.24 Used ordering: Polynomial interpretation [POLO]: 86.65/27.24 86.65/27.24 POL(0) = 0 86.65/27.24 POL(ACTIVE(x_1)) = 2*x_1 86.65/27.24 POL(MARK(x_1)) = 2*x_1 86.65/27.24 POL(active(x_1)) = x_1 86.65/27.24 POL(and(x_1, x_2)) = 2*x_1 + x_2 86.65/27.24 POL(cons(x_1, x_2)) = x_1 + x_2 86.65/27.24 POL(isNat(x_1)) = 0 86.65/27.24 POL(isNatIList(x_1)) = 0 86.65/27.24 POL(isNatList(x_1)) = 0 86.65/27.24 POL(length(x_1)) = 2*x_1 86.65/27.24 POL(mark(x_1)) = x_1 86.65/27.24 POL(nil) = 0 86.65/27.24 POL(s(x_1)) = x_1 86.65/27.24 POL(take(x_1, x_2)) = 1 + x_1 + x_2 86.65/27.24 POL(tt) = 0 86.65/27.24 POL(uLength(x_1, x_2)) = x_1 + 2*x_2 86.65/27.24 POL(uTake1(x_1)) = x_1 86.65/27.24 POL(uTake2(x_1, x_2, x_3, x_4)) = 1 + x_1 + x_2 + x_3 + x_4 86.65/27.24 POL(zeros) = 0 86.65/27.24 86.65/27.24 86.65/27.24 ---------------------------------------- 86.65/27.24 86.65/27.24 (110) 86.65/27.24 Obligation: 86.65/27.24 Q DP problem: 86.65/27.24 The TRS P consists of the following rules: 86.65/27.24 86.65/27.24 MARK(and(X1, X2)) -> ACTIVE(and(mark(X1), mark(X2))) 86.65/27.24 ACTIVE(and(tt, T)) -> MARK(T) 86.65/27.24 MARK(and(X1, X2)) -> MARK(X1) 86.65/27.24 MARK(and(X1, X2)) -> MARK(X2) 86.65/27.24 MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) 86.65/27.24 MARK(isNatList(X)) -> ACTIVE(isNatList(X)) 86.65/27.24 ACTIVE(isNatList(cons(N, L))) -> MARK(and(isNat(N), isNatList(L))) 86.65/27.24 ACTIVE(isNatIList(cons(N, IL))) -> MARK(and(isNat(N), isNatIList(IL))) 86.65/27.24 MARK(isNat(X)) -> ACTIVE(isNat(X)) 86.65/27.24 ACTIVE(isNat(s(N))) -> MARK(isNat(N)) 86.65/27.24 ACTIVE(isNat(length(L))) -> MARK(isNatList(L)) 86.65/27.24 MARK(s(X)) -> MARK(X) 86.65/27.24 MARK(length(X)) -> ACTIVE(length(mark(X))) 86.65/27.24 ACTIVE(length(cons(N, L))) -> MARK(uLength(and(isNat(N), isNatList(L)), L)) 86.65/27.24 MARK(uLength(X1, X2)) -> ACTIVE(uLength(mark(X1), X2)) 86.65/27.24 ACTIVE(uLength(tt, L)) -> MARK(s(length(L))) 86.65/27.24 86.65/27.24 The TRS R consists of the following rules: 86.65/27.24 86.65/27.24 mark(and(X1, X2)) -> active(and(mark(X1), mark(X2))) 86.65/27.24 active(and(tt, T)) -> mark(T) 86.65/27.24 mark(isNatIList(X)) -> active(isNatIList(X)) 86.65/27.24 active(isNatIList(IL)) -> mark(isNatList(IL)) 86.65/27.24 mark(isNatList(X)) -> active(isNatList(X)) 86.65/27.24 active(isNatList(cons(N, L))) -> mark(and(isNat(N), isNatList(L))) 86.65/27.24 active(isNatList(take(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.24 active(isNatIList(cons(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.24 mark(isNat(X)) -> active(isNat(X)) 86.65/27.24 active(isNat(s(N))) -> mark(isNat(N)) 86.65/27.24 active(isNat(length(L))) -> mark(isNatList(L)) 86.65/27.24 mark(s(X)) -> active(s(mark(X))) 86.65/27.24 active(zeros) -> mark(cons(0, zeros)) 86.65/27.24 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 86.65/27.24 mark(uTake1(X)) -> active(uTake1(mark(X))) 86.65/27.24 active(take(s(M), cons(N, IL))) -> mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL)) 86.65/27.24 mark(uTake2(X1, X2, X3, X4)) -> active(uTake2(mark(X1), X2, X3, X4)) 86.65/27.24 active(uTake2(tt, M, N, IL)) -> mark(cons(N, take(M, IL))) 86.65/27.24 active(length(cons(N, L))) -> mark(uLength(and(isNat(N), isNatList(L)), L)) 86.65/27.24 mark(uLength(X1, X2)) -> active(uLength(mark(X1), X2)) 86.65/27.24 active(uLength(tt, L)) -> mark(s(length(L))) 86.65/27.24 mark(length(X)) -> active(length(mark(X))) 86.65/27.24 mark(zeros) -> active(zeros) 86.65/27.24 mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) 86.65/27.24 mark(tt) -> active(tt) 86.65/27.24 mark(0) -> active(0) 86.65/27.24 mark(nil) -> active(nil) 86.65/27.24 take(X1, mark(X2)) -> take(X1, X2) 86.65/27.24 take(mark(X1), X2) -> take(X1, X2) 86.65/27.24 take(active(X1), X2) -> take(X1, X2) 86.65/27.24 take(X1, active(X2)) -> take(X1, X2) 86.65/27.24 and(X1, mark(X2)) -> and(X1, X2) 86.65/27.24 and(mark(X1), X2) -> and(X1, X2) 86.65/27.24 and(active(X1), X2) -> and(X1, X2) 86.65/27.24 and(X1, active(X2)) -> and(X1, X2) 86.65/27.24 active(isNat(0)) -> mark(tt) 86.65/27.24 active(isNatIList(zeros)) -> mark(tt) 86.65/27.24 active(isNatList(nil)) -> mark(tt) 86.65/27.24 s(active(X)) -> s(X) 86.65/27.24 s(mark(X)) -> s(X) 86.65/27.24 cons(X1, mark(X2)) -> cons(X1, X2) 86.65/27.24 cons(mark(X1), X2) -> cons(X1, X2) 86.65/27.24 cons(active(X1), X2) -> cons(X1, X2) 86.65/27.24 cons(X1, active(X2)) -> cons(X1, X2) 86.65/27.24 uTake1(active(X)) -> uTake1(X) 86.65/27.24 uTake1(mark(X)) -> uTake1(X) 86.65/27.24 uTake2(X1, mark(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(mark(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(X1, X2, mark(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(X1, X2, X3, mark(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(active(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(X1, active(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(X1, X2, active(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(X1, X2, X3, active(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uLength(X1, mark(X2)) -> uLength(X1, X2) 86.65/27.24 uLength(mark(X1), X2) -> uLength(X1, X2) 86.65/27.24 uLength(active(X1), X2) -> uLength(X1, X2) 86.65/27.24 uLength(X1, active(X2)) -> uLength(X1, X2) 86.65/27.24 length(active(X)) -> length(X) 86.65/27.24 length(mark(X)) -> length(X) 86.65/27.24 86.65/27.24 The set Q consists of the following terms: 86.65/27.24 86.65/27.24 active(and(tt, x0)) 86.65/27.24 active(isNatIList(x0)) 86.65/27.24 active(isNat(0)) 86.65/27.24 active(isNat(s(x0))) 86.65/27.24 active(isNat(length(x0))) 86.65/27.24 active(isNatList(nil)) 86.65/27.24 active(isNatList(cons(x0, x1))) 86.65/27.24 active(isNatList(take(x0, x1))) 86.65/27.24 active(zeros) 86.65/27.24 active(take(0, x0)) 86.65/27.24 active(uTake1(tt)) 86.65/27.24 active(take(s(x0), cons(x1, x2))) 86.65/27.24 active(uTake2(tt, x0, x1, x2)) 86.65/27.24 active(length(cons(x0, x1))) 86.65/27.24 active(uLength(tt, x0)) 86.65/27.24 mark(and(x0, x1)) 86.65/27.24 mark(tt) 86.65/27.24 mark(isNatIList(x0)) 86.65/27.24 mark(isNatList(x0)) 86.65/27.24 mark(isNat(x0)) 86.65/27.24 mark(0) 86.65/27.24 mark(s(x0)) 86.65/27.24 mark(length(x0)) 86.65/27.24 mark(zeros) 86.65/27.24 mark(cons(x0, x1)) 86.65/27.24 mark(nil) 86.65/27.24 mark(take(x0, x1)) 86.65/27.24 mark(uTake1(x0)) 86.65/27.24 mark(uTake2(x0, x1, x2, x3)) 86.65/27.24 mark(uLength(x0, x1)) 86.65/27.24 and(mark(x0), x1) 86.65/27.24 and(x0, mark(x1)) 86.65/27.24 and(active(x0), x1) 86.65/27.24 and(x0, active(x1)) 86.65/27.24 isNatIList(mark(x0)) 86.65/27.24 isNatIList(active(x0)) 86.65/27.24 isNatList(mark(x0)) 86.65/27.24 isNatList(active(x0)) 86.65/27.24 isNat(mark(x0)) 86.65/27.24 isNat(active(x0)) 86.65/27.24 s(mark(x0)) 86.65/27.24 s(active(x0)) 86.65/27.24 length(mark(x0)) 86.65/27.24 length(active(x0)) 86.65/27.24 cons(mark(x0), x1) 86.65/27.24 cons(x0, mark(x1)) 86.65/27.24 cons(active(x0), x1) 86.65/27.24 cons(x0, active(x1)) 86.65/27.24 take(mark(x0), x1) 86.65/27.24 take(x0, mark(x1)) 86.65/27.24 take(active(x0), x1) 86.65/27.24 take(x0, active(x1)) 86.65/27.24 uTake1(mark(x0)) 86.65/27.24 uTake1(active(x0)) 86.65/27.24 uTake2(mark(x0), x1, x2, x3) 86.65/27.24 uTake2(x0, mark(x1), x2, x3) 86.65/27.24 uTake2(x0, x1, mark(x2), x3) 86.65/27.24 uTake2(x0, x1, x2, mark(x3)) 86.65/27.24 uTake2(active(x0), x1, x2, x3) 86.65/27.24 uTake2(x0, active(x1), x2, x3) 86.65/27.24 uTake2(x0, x1, active(x2), x3) 86.65/27.24 uTake2(x0, x1, x2, active(x3)) 86.65/27.24 uLength(mark(x0), x1) 86.65/27.24 uLength(x0, mark(x1)) 86.65/27.24 uLength(active(x0), x1) 86.65/27.24 uLength(x0, active(x1)) 86.65/27.24 86.65/27.24 We have to consider all minimal (P,Q,R)-chains. 86.65/27.24 ---------------------------------------- 86.65/27.24 86.65/27.24 (111) QDPQMonotonicMRRProof (EQUIVALENT) 86.65/27.24 By using the Q-monotonic rule removal processor with the following ordering, at least one Dependency Pair or term rewrite system rule of this QDP problem can be strictly oriented such that it always occurs at a strongly monotonic position in a (P,Q,R)-chain. 86.65/27.24 86.65/27.24 Strictly oriented dependency pairs: 86.65/27.24 86.65/27.24 ACTIVE(isNat(length(L))) -> MARK(isNatList(L)) 86.65/27.24 86.65/27.24 86.65/27.24 Used ordering: Polynomial interpretation [POLO]: 86.65/27.24 86.65/27.24 POL(0) = 0 86.65/27.24 POL(ACTIVE(x_1)) = x_1 86.65/27.24 POL(MARK(x_1)) = x_1 86.65/27.24 POL(active(x_1)) = x_1 86.65/27.24 POL(and(x_1, x_2)) = 2*x_1 + x_2 86.65/27.24 POL(cons(x_1, x_2)) = 2*x_1 + x_2 86.65/27.24 POL(isNat(x_1)) = 2*x_1 86.65/27.24 POL(isNatIList(x_1)) = 2*x_1 86.65/27.24 POL(isNatList(x_1)) = 2*x_1 86.65/27.24 POL(length(x_1)) = 2 + 2*x_1 86.65/27.24 POL(mark(x_1)) = x_1 86.65/27.24 POL(nil) = 0 86.65/27.24 POL(s(x_1)) = x_1 86.65/27.24 POL(take(x_1, x_2)) = 2*x_1 + x_2 86.65/27.24 POL(tt) = 0 86.65/27.24 POL(uLength(x_1, x_2)) = 2 + 2*x_2 86.65/27.24 POL(uTake1(x_1)) = 0 86.65/27.24 POL(uTake2(x_1, x_2, x_3, x_4)) = 2*x_2 + 2*x_3 + x_4 86.65/27.24 POL(zeros) = 2 86.65/27.24 86.65/27.24 86.65/27.24 ---------------------------------------- 86.65/27.24 86.65/27.24 (112) 86.65/27.24 Obligation: 86.65/27.24 Q DP problem: 86.65/27.24 The TRS P consists of the following rules: 86.65/27.24 86.65/27.24 MARK(and(X1, X2)) -> ACTIVE(and(mark(X1), mark(X2))) 86.65/27.24 ACTIVE(and(tt, T)) -> MARK(T) 86.65/27.24 MARK(and(X1, X2)) -> MARK(X1) 86.65/27.24 MARK(and(X1, X2)) -> MARK(X2) 86.65/27.24 MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) 86.65/27.24 MARK(isNatList(X)) -> ACTIVE(isNatList(X)) 86.65/27.24 ACTIVE(isNatList(cons(N, L))) -> MARK(and(isNat(N), isNatList(L))) 86.65/27.24 ACTIVE(isNatIList(cons(N, IL))) -> MARK(and(isNat(N), isNatIList(IL))) 86.65/27.24 MARK(isNat(X)) -> ACTIVE(isNat(X)) 86.65/27.24 ACTIVE(isNat(s(N))) -> MARK(isNat(N)) 86.65/27.24 MARK(s(X)) -> MARK(X) 86.65/27.24 MARK(length(X)) -> ACTIVE(length(mark(X))) 86.65/27.24 ACTIVE(length(cons(N, L))) -> MARK(uLength(and(isNat(N), isNatList(L)), L)) 86.65/27.24 MARK(uLength(X1, X2)) -> ACTIVE(uLength(mark(X1), X2)) 86.65/27.24 ACTIVE(uLength(tt, L)) -> MARK(s(length(L))) 86.65/27.24 86.65/27.24 The TRS R consists of the following rules: 86.65/27.24 86.65/27.24 mark(and(X1, X2)) -> active(and(mark(X1), mark(X2))) 86.65/27.24 active(and(tt, T)) -> mark(T) 86.65/27.24 mark(isNatIList(X)) -> active(isNatIList(X)) 86.65/27.24 active(isNatIList(IL)) -> mark(isNatList(IL)) 86.65/27.24 mark(isNatList(X)) -> active(isNatList(X)) 86.65/27.24 active(isNatList(cons(N, L))) -> mark(and(isNat(N), isNatList(L))) 86.65/27.24 active(isNatList(take(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.24 active(isNatIList(cons(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.24 mark(isNat(X)) -> active(isNat(X)) 86.65/27.24 active(isNat(s(N))) -> mark(isNat(N)) 86.65/27.24 active(isNat(length(L))) -> mark(isNatList(L)) 86.65/27.24 mark(s(X)) -> active(s(mark(X))) 86.65/27.24 active(zeros) -> mark(cons(0, zeros)) 86.65/27.24 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 86.65/27.24 mark(uTake1(X)) -> active(uTake1(mark(X))) 86.65/27.24 active(take(s(M), cons(N, IL))) -> mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL)) 86.65/27.24 mark(uTake2(X1, X2, X3, X4)) -> active(uTake2(mark(X1), X2, X3, X4)) 86.65/27.24 active(uTake2(tt, M, N, IL)) -> mark(cons(N, take(M, IL))) 86.65/27.24 active(length(cons(N, L))) -> mark(uLength(and(isNat(N), isNatList(L)), L)) 86.65/27.24 mark(uLength(X1, X2)) -> active(uLength(mark(X1), X2)) 86.65/27.24 active(uLength(tt, L)) -> mark(s(length(L))) 86.65/27.24 mark(length(X)) -> active(length(mark(X))) 86.65/27.24 mark(zeros) -> active(zeros) 86.65/27.24 mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) 86.65/27.24 mark(tt) -> active(tt) 86.65/27.24 mark(0) -> active(0) 86.65/27.24 mark(nil) -> active(nil) 86.65/27.24 take(X1, mark(X2)) -> take(X1, X2) 86.65/27.24 take(mark(X1), X2) -> take(X1, X2) 86.65/27.24 take(active(X1), X2) -> take(X1, X2) 86.65/27.24 take(X1, active(X2)) -> take(X1, X2) 86.65/27.24 and(X1, mark(X2)) -> and(X1, X2) 86.65/27.24 and(mark(X1), X2) -> and(X1, X2) 86.65/27.24 and(active(X1), X2) -> and(X1, X2) 86.65/27.24 and(X1, active(X2)) -> and(X1, X2) 86.65/27.24 active(isNat(0)) -> mark(tt) 86.65/27.24 active(isNatIList(zeros)) -> mark(tt) 86.65/27.24 active(isNatList(nil)) -> mark(tt) 86.65/27.24 s(active(X)) -> s(X) 86.65/27.24 s(mark(X)) -> s(X) 86.65/27.24 cons(X1, mark(X2)) -> cons(X1, X2) 86.65/27.24 cons(mark(X1), X2) -> cons(X1, X2) 86.65/27.24 cons(active(X1), X2) -> cons(X1, X2) 86.65/27.24 cons(X1, active(X2)) -> cons(X1, X2) 86.65/27.24 uTake1(active(X)) -> uTake1(X) 86.65/27.24 uTake1(mark(X)) -> uTake1(X) 86.65/27.24 uTake2(X1, mark(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(mark(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(X1, X2, mark(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(X1, X2, X3, mark(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(active(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(X1, active(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(X1, X2, active(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(X1, X2, X3, active(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uLength(X1, mark(X2)) -> uLength(X1, X2) 86.65/27.24 uLength(mark(X1), X2) -> uLength(X1, X2) 86.65/27.24 uLength(active(X1), X2) -> uLength(X1, X2) 86.65/27.24 uLength(X1, active(X2)) -> uLength(X1, X2) 86.65/27.24 length(active(X)) -> length(X) 86.65/27.24 length(mark(X)) -> length(X) 86.65/27.24 86.65/27.24 The set Q consists of the following terms: 86.65/27.24 86.65/27.24 active(and(tt, x0)) 86.65/27.24 active(isNatIList(x0)) 86.65/27.24 active(isNat(0)) 86.65/27.24 active(isNat(s(x0))) 86.65/27.24 active(isNat(length(x0))) 86.65/27.24 active(isNatList(nil)) 86.65/27.24 active(isNatList(cons(x0, x1))) 86.65/27.24 active(isNatList(take(x0, x1))) 86.65/27.24 active(zeros) 86.65/27.24 active(take(0, x0)) 86.65/27.24 active(uTake1(tt)) 86.65/27.24 active(take(s(x0), cons(x1, x2))) 86.65/27.24 active(uTake2(tt, x0, x1, x2)) 86.65/27.24 active(length(cons(x0, x1))) 86.65/27.24 active(uLength(tt, x0)) 86.65/27.24 mark(and(x0, x1)) 86.65/27.24 mark(tt) 86.65/27.24 mark(isNatIList(x0)) 86.65/27.24 mark(isNatList(x0)) 86.65/27.24 mark(isNat(x0)) 86.65/27.24 mark(0) 86.65/27.24 mark(s(x0)) 86.65/27.24 mark(length(x0)) 86.65/27.24 mark(zeros) 86.65/27.24 mark(cons(x0, x1)) 86.65/27.24 mark(nil) 86.65/27.24 mark(take(x0, x1)) 86.65/27.24 mark(uTake1(x0)) 86.65/27.24 mark(uTake2(x0, x1, x2, x3)) 86.65/27.24 mark(uLength(x0, x1)) 86.65/27.24 and(mark(x0), x1) 86.65/27.24 and(x0, mark(x1)) 86.65/27.24 and(active(x0), x1) 86.65/27.24 and(x0, active(x1)) 86.65/27.24 isNatIList(mark(x0)) 86.65/27.24 isNatIList(active(x0)) 86.65/27.24 isNatList(mark(x0)) 86.65/27.24 isNatList(active(x0)) 86.65/27.24 isNat(mark(x0)) 86.65/27.24 isNat(active(x0)) 86.65/27.24 s(mark(x0)) 86.65/27.24 s(active(x0)) 86.65/27.24 length(mark(x0)) 86.65/27.24 length(active(x0)) 86.65/27.24 cons(mark(x0), x1) 86.65/27.24 cons(x0, mark(x1)) 86.65/27.24 cons(active(x0), x1) 86.65/27.24 cons(x0, active(x1)) 86.65/27.24 take(mark(x0), x1) 86.65/27.24 take(x0, mark(x1)) 86.65/27.24 take(active(x0), x1) 86.65/27.24 take(x0, active(x1)) 86.65/27.24 uTake1(mark(x0)) 86.65/27.24 uTake1(active(x0)) 86.65/27.24 uTake2(mark(x0), x1, x2, x3) 86.65/27.24 uTake2(x0, mark(x1), x2, x3) 86.65/27.24 uTake2(x0, x1, mark(x2), x3) 86.65/27.24 uTake2(x0, x1, x2, mark(x3)) 86.65/27.24 uTake2(active(x0), x1, x2, x3) 86.65/27.24 uTake2(x0, active(x1), x2, x3) 86.65/27.24 uTake2(x0, x1, active(x2), x3) 86.65/27.24 uTake2(x0, x1, x2, active(x3)) 86.65/27.24 uLength(mark(x0), x1) 86.65/27.24 uLength(x0, mark(x1)) 86.65/27.24 uLength(active(x0), x1) 86.65/27.24 uLength(x0, active(x1)) 86.65/27.24 86.65/27.24 We have to consider all minimal (P,Q,R)-chains. 86.65/27.24 ---------------------------------------- 86.65/27.24 86.65/27.24 (113) DependencyGraphProof (EQUIVALENT) 86.65/27.24 The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 2 SCCs. 86.65/27.24 ---------------------------------------- 86.65/27.24 86.65/27.24 (114) 86.65/27.24 Complex Obligation (AND) 86.65/27.24 86.65/27.24 ---------------------------------------- 86.65/27.24 86.65/27.24 (115) 86.65/27.24 Obligation: 86.65/27.24 Q DP problem: 86.65/27.24 The TRS P consists of the following rules: 86.65/27.24 86.65/27.24 ACTIVE(isNat(s(N))) -> MARK(isNat(N)) 86.65/27.24 MARK(isNat(X)) -> ACTIVE(isNat(X)) 86.65/27.24 86.65/27.24 The TRS R consists of the following rules: 86.65/27.24 86.65/27.24 mark(and(X1, X2)) -> active(and(mark(X1), mark(X2))) 86.65/27.24 active(and(tt, T)) -> mark(T) 86.65/27.24 mark(isNatIList(X)) -> active(isNatIList(X)) 86.65/27.24 active(isNatIList(IL)) -> mark(isNatList(IL)) 86.65/27.24 mark(isNatList(X)) -> active(isNatList(X)) 86.65/27.24 active(isNatList(cons(N, L))) -> mark(and(isNat(N), isNatList(L))) 86.65/27.24 active(isNatList(take(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.24 active(isNatIList(cons(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.24 mark(isNat(X)) -> active(isNat(X)) 86.65/27.24 active(isNat(s(N))) -> mark(isNat(N)) 86.65/27.24 active(isNat(length(L))) -> mark(isNatList(L)) 86.65/27.24 mark(s(X)) -> active(s(mark(X))) 86.65/27.24 active(zeros) -> mark(cons(0, zeros)) 86.65/27.24 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 86.65/27.24 mark(uTake1(X)) -> active(uTake1(mark(X))) 86.65/27.24 active(take(s(M), cons(N, IL))) -> mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL)) 86.65/27.24 mark(uTake2(X1, X2, X3, X4)) -> active(uTake2(mark(X1), X2, X3, X4)) 86.65/27.24 active(uTake2(tt, M, N, IL)) -> mark(cons(N, take(M, IL))) 86.65/27.24 active(length(cons(N, L))) -> mark(uLength(and(isNat(N), isNatList(L)), L)) 86.65/27.24 mark(uLength(X1, X2)) -> active(uLength(mark(X1), X2)) 86.65/27.24 active(uLength(tt, L)) -> mark(s(length(L))) 86.65/27.24 mark(length(X)) -> active(length(mark(X))) 86.65/27.24 mark(zeros) -> active(zeros) 86.65/27.24 mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) 86.65/27.24 mark(tt) -> active(tt) 86.65/27.24 mark(0) -> active(0) 86.65/27.24 mark(nil) -> active(nil) 86.65/27.24 take(X1, mark(X2)) -> take(X1, X2) 86.65/27.24 take(mark(X1), X2) -> take(X1, X2) 86.65/27.24 take(active(X1), X2) -> take(X1, X2) 86.65/27.24 take(X1, active(X2)) -> take(X1, X2) 86.65/27.24 and(X1, mark(X2)) -> and(X1, X2) 86.65/27.24 and(mark(X1), X2) -> and(X1, X2) 86.65/27.24 and(active(X1), X2) -> and(X1, X2) 86.65/27.24 and(X1, active(X2)) -> and(X1, X2) 86.65/27.24 active(isNat(0)) -> mark(tt) 86.65/27.24 active(isNatIList(zeros)) -> mark(tt) 86.65/27.24 active(isNatList(nil)) -> mark(tt) 86.65/27.24 s(active(X)) -> s(X) 86.65/27.24 s(mark(X)) -> s(X) 86.65/27.24 cons(X1, mark(X2)) -> cons(X1, X2) 86.65/27.24 cons(mark(X1), X2) -> cons(X1, X2) 86.65/27.24 cons(active(X1), X2) -> cons(X1, X2) 86.65/27.24 cons(X1, active(X2)) -> cons(X1, X2) 86.65/27.24 uTake1(active(X)) -> uTake1(X) 86.65/27.24 uTake1(mark(X)) -> uTake1(X) 86.65/27.24 uTake2(X1, mark(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(mark(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(X1, X2, mark(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(X1, X2, X3, mark(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(active(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(X1, active(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(X1, X2, active(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(X1, X2, X3, active(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uLength(X1, mark(X2)) -> uLength(X1, X2) 86.65/27.24 uLength(mark(X1), X2) -> uLength(X1, X2) 86.65/27.24 uLength(active(X1), X2) -> uLength(X1, X2) 86.65/27.24 uLength(X1, active(X2)) -> uLength(X1, X2) 86.65/27.24 length(active(X)) -> length(X) 86.65/27.24 length(mark(X)) -> length(X) 86.65/27.24 86.65/27.24 The set Q consists of the following terms: 86.65/27.24 86.65/27.24 active(and(tt, x0)) 86.65/27.24 active(isNatIList(x0)) 86.65/27.24 active(isNat(0)) 86.65/27.24 active(isNat(s(x0))) 86.65/27.24 active(isNat(length(x0))) 86.65/27.24 active(isNatList(nil)) 86.65/27.24 active(isNatList(cons(x0, x1))) 86.65/27.24 active(isNatList(take(x0, x1))) 86.65/27.24 active(zeros) 86.65/27.24 active(take(0, x0)) 86.65/27.24 active(uTake1(tt)) 86.65/27.24 active(take(s(x0), cons(x1, x2))) 86.65/27.24 active(uTake2(tt, x0, x1, x2)) 86.65/27.24 active(length(cons(x0, x1))) 86.65/27.24 active(uLength(tt, x0)) 86.65/27.24 mark(and(x0, x1)) 86.65/27.24 mark(tt) 86.65/27.24 mark(isNatIList(x0)) 86.65/27.24 mark(isNatList(x0)) 86.65/27.24 mark(isNat(x0)) 86.65/27.24 mark(0) 86.65/27.24 mark(s(x0)) 86.65/27.24 mark(length(x0)) 86.65/27.24 mark(zeros) 86.65/27.24 mark(cons(x0, x1)) 86.65/27.24 mark(nil) 86.65/27.24 mark(take(x0, x1)) 86.65/27.24 mark(uTake1(x0)) 86.65/27.24 mark(uTake2(x0, x1, x2, x3)) 86.65/27.24 mark(uLength(x0, x1)) 86.65/27.24 and(mark(x0), x1) 86.65/27.24 and(x0, mark(x1)) 86.65/27.24 and(active(x0), x1) 86.65/27.24 and(x0, active(x1)) 86.65/27.24 isNatIList(mark(x0)) 86.65/27.24 isNatIList(active(x0)) 86.65/27.24 isNatList(mark(x0)) 86.65/27.24 isNatList(active(x0)) 86.65/27.24 isNat(mark(x0)) 86.65/27.24 isNat(active(x0)) 86.65/27.24 s(mark(x0)) 86.65/27.24 s(active(x0)) 86.65/27.24 length(mark(x0)) 86.65/27.24 length(active(x0)) 86.65/27.24 cons(mark(x0), x1) 86.65/27.24 cons(x0, mark(x1)) 86.65/27.24 cons(active(x0), x1) 86.65/27.24 cons(x0, active(x1)) 86.65/27.24 take(mark(x0), x1) 86.65/27.24 take(x0, mark(x1)) 86.65/27.24 take(active(x0), x1) 86.65/27.24 take(x0, active(x1)) 86.65/27.24 uTake1(mark(x0)) 86.65/27.24 uTake1(active(x0)) 86.65/27.24 uTake2(mark(x0), x1, x2, x3) 86.65/27.24 uTake2(x0, mark(x1), x2, x3) 86.65/27.24 uTake2(x0, x1, mark(x2), x3) 86.65/27.24 uTake2(x0, x1, x2, mark(x3)) 86.65/27.24 uTake2(active(x0), x1, x2, x3) 86.65/27.24 uTake2(x0, active(x1), x2, x3) 86.65/27.24 uTake2(x0, x1, active(x2), x3) 86.65/27.24 uTake2(x0, x1, x2, active(x3)) 86.65/27.24 uLength(mark(x0), x1) 86.65/27.24 uLength(x0, mark(x1)) 86.65/27.24 uLength(active(x0), x1) 86.65/27.24 uLength(x0, active(x1)) 86.65/27.24 86.65/27.24 We have to consider all minimal (P,Q,R)-chains. 86.65/27.24 ---------------------------------------- 86.65/27.24 86.65/27.24 (116) UsableRulesProof (EQUIVALENT) 86.65/27.24 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. 86.65/27.24 ---------------------------------------- 86.65/27.24 86.65/27.24 (117) 86.65/27.24 Obligation: 86.65/27.24 Q DP problem: 86.65/27.24 The TRS P consists of the following rules: 86.65/27.24 86.65/27.24 ACTIVE(isNat(s(N))) -> MARK(isNat(N)) 86.65/27.24 MARK(isNat(X)) -> ACTIVE(isNat(X)) 86.65/27.24 86.65/27.24 R is empty. 86.65/27.24 The set Q consists of the following terms: 86.65/27.24 86.65/27.24 active(and(tt, x0)) 86.65/27.24 active(isNatIList(x0)) 86.65/27.24 active(isNat(0)) 86.65/27.24 active(isNat(s(x0))) 86.65/27.24 active(isNat(length(x0))) 86.65/27.24 active(isNatList(nil)) 86.65/27.24 active(isNatList(cons(x0, x1))) 86.65/27.24 active(isNatList(take(x0, x1))) 86.65/27.24 active(zeros) 86.65/27.24 active(take(0, x0)) 86.65/27.24 active(uTake1(tt)) 86.65/27.24 active(take(s(x0), cons(x1, x2))) 86.65/27.24 active(uTake2(tt, x0, x1, x2)) 86.65/27.24 active(length(cons(x0, x1))) 86.65/27.24 active(uLength(tt, x0)) 86.65/27.24 mark(and(x0, x1)) 86.65/27.24 mark(tt) 86.65/27.24 mark(isNatIList(x0)) 86.65/27.24 mark(isNatList(x0)) 86.65/27.24 mark(isNat(x0)) 86.65/27.24 mark(0) 86.65/27.24 mark(s(x0)) 86.65/27.24 mark(length(x0)) 86.65/27.24 mark(zeros) 86.65/27.24 mark(cons(x0, x1)) 86.65/27.24 mark(nil) 86.65/27.24 mark(take(x0, x1)) 86.65/27.24 mark(uTake1(x0)) 86.65/27.24 mark(uTake2(x0, x1, x2, x3)) 86.65/27.24 mark(uLength(x0, x1)) 86.65/27.24 and(mark(x0), x1) 86.65/27.24 and(x0, mark(x1)) 86.65/27.24 and(active(x0), x1) 86.65/27.24 and(x0, active(x1)) 86.65/27.24 isNatIList(mark(x0)) 86.65/27.24 isNatIList(active(x0)) 86.65/27.24 isNatList(mark(x0)) 86.65/27.24 isNatList(active(x0)) 86.65/27.24 isNat(mark(x0)) 86.65/27.24 isNat(active(x0)) 86.65/27.24 s(mark(x0)) 86.65/27.24 s(active(x0)) 86.65/27.24 length(mark(x0)) 86.65/27.24 length(active(x0)) 86.65/27.24 cons(mark(x0), x1) 86.65/27.24 cons(x0, mark(x1)) 86.65/27.24 cons(active(x0), x1) 86.65/27.24 cons(x0, active(x1)) 86.65/27.24 take(mark(x0), x1) 86.65/27.24 take(x0, mark(x1)) 86.65/27.24 take(active(x0), x1) 86.65/27.24 take(x0, active(x1)) 86.65/27.24 uTake1(mark(x0)) 86.65/27.24 uTake1(active(x0)) 86.65/27.24 uTake2(mark(x0), x1, x2, x3) 86.65/27.24 uTake2(x0, mark(x1), x2, x3) 86.65/27.24 uTake2(x0, x1, mark(x2), x3) 86.65/27.24 uTake2(x0, x1, x2, mark(x3)) 86.65/27.24 uTake2(active(x0), x1, x2, x3) 86.65/27.24 uTake2(x0, active(x1), x2, x3) 86.65/27.24 uTake2(x0, x1, active(x2), x3) 86.65/27.24 uTake2(x0, x1, x2, active(x3)) 86.65/27.24 uLength(mark(x0), x1) 86.65/27.24 uLength(x0, mark(x1)) 86.65/27.24 uLength(active(x0), x1) 86.65/27.24 uLength(x0, active(x1)) 86.65/27.24 86.65/27.24 We have to consider all minimal (P,Q,R)-chains. 86.65/27.24 ---------------------------------------- 86.65/27.24 86.65/27.24 (118) QReductionProof (EQUIVALENT) 86.65/27.24 We deleted the following terms from Q as each root-symbol of these terms does neither occur in P nor in R.[THIEMANN]. 86.65/27.24 86.65/27.24 active(and(tt, x0)) 86.65/27.24 active(isNatIList(x0)) 86.65/27.24 active(isNat(0)) 86.65/27.24 active(isNat(s(x0))) 86.65/27.24 active(isNat(length(x0))) 86.65/27.24 active(isNatList(nil)) 86.65/27.24 active(isNatList(cons(x0, x1))) 86.65/27.24 active(isNatList(take(x0, x1))) 86.65/27.24 active(zeros) 86.65/27.24 active(take(0, x0)) 86.65/27.24 active(uTake1(tt)) 86.65/27.24 active(take(s(x0), cons(x1, x2))) 86.65/27.24 active(uTake2(tt, x0, x1, x2)) 86.65/27.24 active(length(cons(x0, x1))) 86.65/27.24 active(uLength(tt, x0)) 86.65/27.24 mark(and(x0, x1)) 86.65/27.24 mark(tt) 86.65/27.24 mark(isNatIList(x0)) 86.65/27.24 mark(isNatList(x0)) 86.65/27.24 mark(isNat(x0)) 86.65/27.24 mark(0) 86.65/27.24 mark(s(x0)) 86.65/27.24 mark(length(x0)) 86.65/27.24 mark(zeros) 86.65/27.24 mark(cons(x0, x1)) 86.65/27.24 mark(nil) 86.65/27.24 mark(take(x0, x1)) 86.65/27.24 mark(uTake1(x0)) 86.65/27.24 mark(uTake2(x0, x1, x2, x3)) 86.65/27.24 mark(uLength(x0, x1)) 86.65/27.24 and(mark(x0), x1) 86.65/27.24 and(x0, mark(x1)) 86.65/27.24 and(active(x0), x1) 86.65/27.24 and(x0, active(x1)) 86.65/27.24 isNatIList(mark(x0)) 86.65/27.24 isNatIList(active(x0)) 86.65/27.24 isNatList(mark(x0)) 86.65/27.24 isNatList(active(x0)) 86.65/27.24 length(mark(x0)) 86.65/27.24 length(active(x0)) 86.65/27.24 cons(mark(x0), x1) 86.65/27.24 cons(x0, mark(x1)) 86.65/27.24 cons(active(x0), x1) 86.65/27.24 cons(x0, active(x1)) 86.65/27.24 take(mark(x0), x1) 86.65/27.24 take(x0, mark(x1)) 86.65/27.24 take(active(x0), x1) 86.65/27.24 take(x0, active(x1)) 86.65/27.24 uTake1(mark(x0)) 86.65/27.24 uTake1(active(x0)) 86.65/27.24 uTake2(mark(x0), x1, x2, x3) 86.65/27.24 uTake2(x0, mark(x1), x2, x3) 86.65/27.24 uTake2(x0, x1, mark(x2), x3) 86.65/27.24 uTake2(x0, x1, x2, mark(x3)) 86.65/27.24 uTake2(active(x0), x1, x2, x3) 86.65/27.24 uTake2(x0, active(x1), x2, x3) 86.65/27.24 uTake2(x0, x1, active(x2), x3) 86.65/27.24 uTake2(x0, x1, x2, active(x3)) 86.65/27.24 uLength(mark(x0), x1) 86.65/27.24 uLength(x0, mark(x1)) 86.65/27.24 uLength(active(x0), x1) 86.65/27.24 uLength(x0, active(x1)) 86.65/27.24 86.65/27.24 86.65/27.24 ---------------------------------------- 86.65/27.24 86.65/27.24 (119) 86.65/27.24 Obligation: 86.65/27.24 Q DP problem: 86.65/27.24 The TRS P consists of the following rules: 86.65/27.24 86.65/27.24 ACTIVE(isNat(s(N))) -> MARK(isNat(N)) 86.65/27.24 MARK(isNat(X)) -> ACTIVE(isNat(X)) 86.65/27.24 86.65/27.24 R is empty. 86.65/27.24 The set Q consists of the following terms: 86.65/27.24 86.65/27.24 isNat(mark(x0)) 86.65/27.24 isNat(active(x0)) 86.65/27.24 s(mark(x0)) 86.65/27.24 s(active(x0)) 86.65/27.24 86.65/27.24 We have to consider all minimal (P,Q,R)-chains. 86.65/27.24 ---------------------------------------- 86.65/27.24 86.65/27.24 (120) UsableRulesReductionPairsProof (EQUIVALENT) 86.65/27.24 By using the usable rules with reduction pair processor [LPAR04] with a polynomial ordering [POLO], all dependency pairs and the corresponding usable rules [FROCOS05] can be oriented non-strictly. All non-usable rules are removed, and those dependency pairs and usable rules that have been oriented strictly or contain non-usable symbols in their left-hand side are removed as well. 86.65/27.24 86.65/27.24 The following dependency pairs can be deleted: 86.65/27.24 86.65/27.24 ACTIVE(isNat(s(N))) -> MARK(isNat(N)) 86.65/27.24 No rules are removed from R. 86.65/27.24 86.65/27.24 Used ordering: POLO with Polynomial interpretation [POLO]: 86.65/27.24 86.65/27.24 POL(ACTIVE(x_1)) = x_1 86.65/27.24 POL(MARK(x_1)) = 2*x_1 86.65/27.24 POL(isNat(x_1)) = 2*x_1 86.65/27.24 POL(s(x_1)) = 2*x_1 86.65/27.24 86.65/27.24 86.65/27.24 ---------------------------------------- 86.65/27.24 86.65/27.24 (121) 86.65/27.24 Obligation: 86.65/27.24 Q DP problem: 86.65/27.24 The TRS P consists of the following rules: 86.65/27.24 86.65/27.24 MARK(isNat(X)) -> ACTIVE(isNat(X)) 86.65/27.24 86.65/27.24 R is empty. 86.65/27.24 The set Q consists of the following terms: 86.65/27.24 86.65/27.24 isNat(mark(x0)) 86.65/27.24 isNat(active(x0)) 86.65/27.24 s(mark(x0)) 86.65/27.24 s(active(x0)) 86.65/27.24 86.65/27.24 We have to consider all minimal (P,Q,R)-chains. 86.65/27.24 ---------------------------------------- 86.65/27.24 86.65/27.24 (122) DependencyGraphProof (EQUIVALENT) 86.65/27.24 The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 0 SCCs with 1 less node. 86.65/27.24 ---------------------------------------- 86.65/27.24 86.65/27.24 (123) 86.65/27.24 TRUE 86.65/27.24 86.65/27.24 ---------------------------------------- 86.65/27.24 86.65/27.24 (124) 86.65/27.24 Obligation: 86.65/27.24 Q DP problem: 86.65/27.24 The TRS P consists of the following rules: 86.65/27.24 86.65/27.24 ACTIVE(and(tt, T)) -> MARK(T) 86.65/27.24 MARK(and(X1, X2)) -> ACTIVE(and(mark(X1), mark(X2))) 86.65/27.24 ACTIVE(length(cons(N, L))) -> MARK(uLength(and(isNat(N), isNatList(L)), L)) 86.65/27.24 MARK(uLength(X1, X2)) -> ACTIVE(uLength(mark(X1), X2)) 86.65/27.24 ACTIVE(uLength(tt, L)) -> MARK(s(length(L))) 86.65/27.24 MARK(s(X)) -> MARK(X) 86.65/27.24 MARK(and(X1, X2)) -> MARK(X1) 86.65/27.24 MARK(and(X1, X2)) -> MARK(X2) 86.65/27.24 MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) 86.65/27.24 ACTIVE(isNatIList(cons(N, IL))) -> MARK(and(isNat(N), isNatIList(IL))) 86.65/27.24 MARK(isNatList(X)) -> ACTIVE(isNatList(X)) 86.65/27.24 ACTIVE(isNatList(cons(N, L))) -> MARK(and(isNat(N), isNatList(L))) 86.65/27.24 MARK(length(X)) -> ACTIVE(length(mark(X))) 86.65/27.24 86.65/27.24 The TRS R consists of the following rules: 86.65/27.24 86.65/27.24 mark(and(X1, X2)) -> active(and(mark(X1), mark(X2))) 86.65/27.24 active(and(tt, T)) -> mark(T) 86.65/27.24 mark(isNatIList(X)) -> active(isNatIList(X)) 86.65/27.24 active(isNatIList(IL)) -> mark(isNatList(IL)) 86.65/27.24 mark(isNatList(X)) -> active(isNatList(X)) 86.65/27.24 active(isNatList(cons(N, L))) -> mark(and(isNat(N), isNatList(L))) 86.65/27.24 active(isNatList(take(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.24 active(isNatIList(cons(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.24 mark(isNat(X)) -> active(isNat(X)) 86.65/27.24 active(isNat(s(N))) -> mark(isNat(N)) 86.65/27.24 active(isNat(length(L))) -> mark(isNatList(L)) 86.65/27.24 mark(s(X)) -> active(s(mark(X))) 86.65/27.24 active(zeros) -> mark(cons(0, zeros)) 86.65/27.24 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 86.65/27.24 mark(uTake1(X)) -> active(uTake1(mark(X))) 86.65/27.24 active(take(s(M), cons(N, IL))) -> mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL)) 86.65/27.24 mark(uTake2(X1, X2, X3, X4)) -> active(uTake2(mark(X1), X2, X3, X4)) 86.65/27.24 active(uTake2(tt, M, N, IL)) -> mark(cons(N, take(M, IL))) 86.65/27.24 active(length(cons(N, L))) -> mark(uLength(and(isNat(N), isNatList(L)), L)) 86.65/27.24 mark(uLength(X1, X2)) -> active(uLength(mark(X1), X2)) 86.65/27.24 active(uLength(tt, L)) -> mark(s(length(L))) 86.65/27.24 mark(length(X)) -> active(length(mark(X))) 86.65/27.24 mark(zeros) -> active(zeros) 86.65/27.24 mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) 86.65/27.24 mark(tt) -> active(tt) 86.65/27.24 mark(0) -> active(0) 86.65/27.24 mark(nil) -> active(nil) 86.65/27.24 take(X1, mark(X2)) -> take(X1, X2) 86.65/27.24 take(mark(X1), X2) -> take(X1, X2) 86.65/27.24 take(active(X1), X2) -> take(X1, X2) 86.65/27.24 take(X1, active(X2)) -> take(X1, X2) 86.65/27.24 and(X1, mark(X2)) -> and(X1, X2) 86.65/27.24 and(mark(X1), X2) -> and(X1, X2) 86.65/27.24 and(active(X1), X2) -> and(X1, X2) 86.65/27.24 and(X1, active(X2)) -> and(X1, X2) 86.65/27.24 active(isNat(0)) -> mark(tt) 86.65/27.24 active(isNatIList(zeros)) -> mark(tt) 86.65/27.24 active(isNatList(nil)) -> mark(tt) 86.65/27.24 s(active(X)) -> s(X) 86.65/27.24 s(mark(X)) -> s(X) 86.65/27.24 cons(X1, mark(X2)) -> cons(X1, X2) 86.65/27.24 cons(mark(X1), X2) -> cons(X1, X2) 86.65/27.24 cons(active(X1), X2) -> cons(X1, X2) 86.65/27.24 cons(X1, active(X2)) -> cons(X1, X2) 86.65/27.24 uTake1(active(X)) -> uTake1(X) 86.65/27.24 uTake1(mark(X)) -> uTake1(X) 86.65/27.24 uTake2(X1, mark(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(mark(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(X1, X2, mark(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(X1, X2, X3, mark(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(active(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(X1, active(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(X1, X2, active(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(X1, X2, X3, active(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uLength(X1, mark(X2)) -> uLength(X1, X2) 86.65/27.24 uLength(mark(X1), X2) -> uLength(X1, X2) 86.65/27.24 uLength(active(X1), X2) -> uLength(X1, X2) 86.65/27.24 uLength(X1, active(X2)) -> uLength(X1, X2) 86.65/27.24 length(active(X)) -> length(X) 86.65/27.24 length(mark(X)) -> length(X) 86.65/27.24 86.65/27.24 The set Q consists of the following terms: 86.65/27.24 86.65/27.24 active(and(tt, x0)) 86.65/27.24 active(isNatIList(x0)) 86.65/27.24 active(isNat(0)) 86.65/27.24 active(isNat(s(x0))) 86.65/27.24 active(isNat(length(x0))) 86.65/27.24 active(isNatList(nil)) 86.65/27.24 active(isNatList(cons(x0, x1))) 86.65/27.24 active(isNatList(take(x0, x1))) 86.65/27.24 active(zeros) 86.65/27.24 active(take(0, x0)) 86.65/27.24 active(uTake1(tt)) 86.65/27.24 active(take(s(x0), cons(x1, x2))) 86.65/27.24 active(uTake2(tt, x0, x1, x2)) 86.65/27.24 active(length(cons(x0, x1))) 86.65/27.24 active(uLength(tt, x0)) 86.65/27.24 mark(and(x0, x1)) 86.65/27.24 mark(tt) 86.65/27.24 mark(isNatIList(x0)) 86.65/27.24 mark(isNatList(x0)) 86.65/27.24 mark(isNat(x0)) 86.65/27.24 mark(0) 86.65/27.24 mark(s(x0)) 86.65/27.24 mark(length(x0)) 86.65/27.24 mark(zeros) 86.65/27.24 mark(cons(x0, x1)) 86.65/27.24 mark(nil) 86.65/27.24 mark(take(x0, x1)) 86.65/27.24 mark(uTake1(x0)) 86.65/27.24 mark(uTake2(x0, x1, x2, x3)) 86.65/27.24 mark(uLength(x0, x1)) 86.65/27.24 and(mark(x0), x1) 86.65/27.24 and(x0, mark(x1)) 86.65/27.24 and(active(x0), x1) 86.65/27.24 and(x0, active(x1)) 86.65/27.24 isNatIList(mark(x0)) 86.65/27.24 isNatIList(active(x0)) 86.65/27.24 isNatList(mark(x0)) 86.65/27.24 isNatList(active(x0)) 86.65/27.24 isNat(mark(x0)) 86.65/27.24 isNat(active(x0)) 86.65/27.24 s(mark(x0)) 86.65/27.24 s(active(x0)) 86.65/27.24 length(mark(x0)) 86.65/27.24 length(active(x0)) 86.65/27.24 cons(mark(x0), x1) 86.65/27.24 cons(x0, mark(x1)) 86.65/27.24 cons(active(x0), x1) 86.65/27.24 cons(x0, active(x1)) 86.65/27.24 take(mark(x0), x1) 86.65/27.24 take(x0, mark(x1)) 86.65/27.24 take(active(x0), x1) 86.65/27.24 take(x0, active(x1)) 86.65/27.24 uTake1(mark(x0)) 86.65/27.24 uTake1(active(x0)) 86.65/27.24 uTake2(mark(x0), x1, x2, x3) 86.65/27.24 uTake2(x0, mark(x1), x2, x3) 86.65/27.24 uTake2(x0, x1, mark(x2), x3) 86.65/27.24 uTake2(x0, x1, x2, mark(x3)) 86.65/27.24 uTake2(active(x0), x1, x2, x3) 86.65/27.24 uTake2(x0, active(x1), x2, x3) 86.65/27.24 uTake2(x0, x1, active(x2), x3) 86.65/27.24 uTake2(x0, x1, x2, active(x3)) 86.65/27.24 uLength(mark(x0), x1) 86.65/27.24 uLength(x0, mark(x1)) 86.65/27.24 uLength(active(x0), x1) 86.65/27.24 uLength(x0, active(x1)) 86.65/27.24 86.65/27.24 We have to consider all minimal (P,Q,R)-chains. 86.65/27.24 ---------------------------------------- 86.65/27.24 86.65/27.24 (125) QDPOrderProof (EQUIVALENT) 86.65/27.24 We use the reduction pair processor [LPAR04,JAR06]. 86.65/27.24 86.65/27.24 86.65/27.24 The following pairs can be oriented strictly and are deleted. 86.65/27.24 86.65/27.24 MARK(and(X1, X2)) -> MARK(X1) 86.65/27.24 The remaining pairs can at least be oriented weakly. 86.65/27.24 Used ordering: Matrix interpretation [MATRO] with arctic natural numbers [ARCTIC]: 86.65/27.24 86.65/27.24 <<< 86.65/27.24 POL(ACTIVE(x_1)) = [[-I]] + [[0A]] * x_1 86.65/27.24 >>> 86.65/27.24 86.65/27.24 <<< 86.65/27.24 POL(and(x_1, x_2)) = [[-I]] + [[1A]] * x_1 + [[0A]] * x_2 86.65/27.24 >>> 86.65/27.24 86.65/27.24 <<< 86.65/27.24 POL(tt) = [[0A]] 86.65/27.24 >>> 86.65/27.24 86.65/27.24 <<< 86.65/27.24 POL(MARK(x_1)) = [[-I]] + [[0A]] * x_1 86.65/27.24 >>> 86.65/27.24 86.65/27.24 <<< 86.65/27.24 POL(mark(x_1)) = [[-I]] + [[0A]] * x_1 86.65/27.24 >>> 86.65/27.24 86.65/27.24 <<< 86.65/27.24 POL(length(x_1)) = [[-I]] + [[0A]] * x_1 86.65/27.24 >>> 86.65/27.24 86.65/27.24 <<< 86.65/27.24 POL(cons(x_1, x_2)) = [[-I]] + [[1A]] * x_1 + [[0A]] * x_2 86.65/27.24 >>> 86.65/27.24 86.65/27.24 <<< 86.65/27.24 POL(uLength(x_1, x_2)) = [[-I]] + [[0A]] * x_1 + [[0A]] * x_2 86.65/27.24 >>> 86.65/27.24 86.65/27.24 <<< 86.65/27.24 POL(isNat(x_1)) = [[-I]] + [[0A]] * x_1 86.65/27.24 >>> 86.65/27.24 86.65/27.24 <<< 86.65/27.24 POL(isNatList(x_1)) = [[-I]] + [[0A]] * x_1 86.65/27.24 >>> 86.65/27.24 86.65/27.24 <<< 86.65/27.24 POL(s(x_1)) = [[0A]] + [[0A]] * x_1 86.65/27.24 >>> 86.65/27.24 86.65/27.24 <<< 86.65/27.24 POL(isNatIList(x_1)) = [[-I]] + [[0A]] * x_1 86.65/27.24 >>> 86.65/27.24 86.65/27.24 <<< 86.65/27.24 POL(active(x_1)) = [[-I]] + [[0A]] * x_1 86.65/27.24 >>> 86.65/27.24 86.65/27.24 <<< 86.65/27.24 POL(take(x_1, x_2)) = [[2A]] + [[2A]] * x_1 + [[1A]] * x_2 86.65/27.24 >>> 86.65/27.24 86.65/27.24 <<< 86.65/27.24 POL(zeros) = [[1A]] 86.65/27.24 >>> 86.65/27.24 86.65/27.24 <<< 86.65/27.24 POL(0) = [[0A]] 86.65/27.24 >>> 86.65/27.24 86.65/27.24 <<< 86.65/27.24 POL(uTake2(x_1, x_2, x_3, x_4)) = [[2A]] + [[0A]] * x_1 + [[2A]] * x_2 + [[2A]] * x_3 + [[1A]] * x_4 86.65/27.24 >>> 86.65/27.24 86.65/27.24 <<< 86.65/27.24 POL(uTake1(x_1)) = [[0A]] + [[0A]] * x_1 86.65/27.24 >>> 86.65/27.24 86.65/27.24 <<< 86.65/27.24 POL(nil) = [[0A]] 86.65/27.24 >>> 86.65/27.24 86.65/27.24 86.65/27.24 The following usable rules [FROCOS05] with respect to the argument filtering of the ordering [JAR06] were oriented: 86.65/27.24 86.65/27.24 active(and(tt, T)) -> mark(T) 86.65/27.24 mark(and(X1, X2)) -> active(and(mark(X1), mark(X2))) 86.65/27.24 active(isNatIList(IL)) -> mark(isNatList(IL)) 86.65/27.24 mark(isNatList(X)) -> active(isNatList(X)) 86.65/27.24 active(isNatList(cons(N, L))) -> mark(and(isNat(N), isNatList(L))) 86.65/27.24 active(isNatList(take(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.24 active(isNatIList(cons(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.24 active(isNat(s(N))) -> mark(isNat(N)) 86.65/27.24 mark(isNat(X)) -> active(isNat(X)) 86.65/27.24 active(isNat(length(L))) -> mark(isNatList(L)) 86.65/27.24 active(zeros) -> mark(cons(0, zeros)) 86.65/27.24 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 86.65/27.24 active(take(s(M), cons(N, IL))) -> mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL)) 86.65/27.24 mark(uTake2(X1, X2, X3, X4)) -> active(uTake2(mark(X1), X2, X3, X4)) 86.65/27.24 active(uTake2(tt, M, N, IL)) -> mark(cons(N, take(M, IL))) 86.65/27.24 active(length(cons(N, L))) -> mark(uLength(and(isNat(N), isNatList(L)), L)) 86.65/27.24 mark(uLength(X1, X2)) -> active(uLength(mark(X1), X2)) 86.65/27.24 active(uLength(tt, L)) -> mark(s(length(L))) 86.65/27.24 mark(s(X)) -> active(s(mark(X))) 86.65/27.24 mark(isNatIList(X)) -> active(isNatIList(X)) 86.65/27.24 mark(uTake1(X)) -> active(uTake1(mark(X))) 86.65/27.24 mark(length(X)) -> active(length(mark(X))) 86.65/27.24 mark(zeros) -> active(zeros) 86.65/27.24 mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) 86.65/27.24 mark(tt) -> active(tt) 86.65/27.24 mark(0) -> active(0) 86.65/27.24 mark(nil) -> active(nil) 86.65/27.24 and(mark(X1), X2) -> and(X1, X2) 86.65/27.24 and(X1, mark(X2)) -> and(X1, X2) 86.65/27.24 and(active(X1), X2) -> and(X1, X2) 86.65/27.24 and(X1, active(X2)) -> and(X1, X2) 86.65/27.24 uLength(mark(X1), X2) -> uLength(X1, X2) 86.65/27.24 uLength(X1, mark(X2)) -> uLength(X1, X2) 86.65/27.24 uLength(active(X1), X2) -> uLength(X1, X2) 86.65/27.24 uLength(X1, active(X2)) -> uLength(X1, X2) 86.65/27.24 length(mark(X)) -> length(X) 86.65/27.24 length(active(X)) -> length(X) 86.65/27.24 active(isNat(0)) -> mark(tt) 86.65/27.24 active(isNatIList(zeros)) -> mark(tt) 86.65/27.24 active(isNatList(nil)) -> mark(tt) 86.65/27.24 cons(mark(X1), X2) -> cons(X1, X2) 86.65/27.24 cons(X1, mark(X2)) -> cons(X1, X2) 86.65/27.24 cons(active(X1), X2) -> cons(X1, X2) 86.65/27.24 cons(X1, active(X2)) -> cons(X1, X2) 86.65/27.24 uTake2(mark(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(X1, mark(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(X1, X2, mark(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(X1, X2, X3, mark(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(active(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(X1, active(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(X1, X2, active(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(X1, X2, X3, active(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.24 s(mark(X)) -> s(X) 86.65/27.24 s(active(X)) -> s(X) 86.65/27.24 uTake1(mark(X)) -> uTake1(X) 86.65/27.24 uTake1(active(X)) -> uTake1(X) 86.65/27.24 take(mark(X1), X2) -> take(X1, X2) 86.65/27.24 take(X1, mark(X2)) -> take(X1, X2) 86.65/27.24 take(active(X1), X2) -> take(X1, X2) 86.65/27.24 take(X1, active(X2)) -> take(X1, X2) 86.65/27.24 86.65/27.24 86.65/27.24 ---------------------------------------- 86.65/27.24 86.65/27.24 (126) 86.65/27.24 Obligation: 86.65/27.24 Q DP problem: 86.65/27.24 The TRS P consists of the following rules: 86.65/27.24 86.65/27.24 ACTIVE(and(tt, T)) -> MARK(T) 86.65/27.24 MARK(and(X1, X2)) -> ACTIVE(and(mark(X1), mark(X2))) 86.65/27.24 ACTIVE(length(cons(N, L))) -> MARK(uLength(and(isNat(N), isNatList(L)), L)) 86.65/27.24 MARK(uLength(X1, X2)) -> ACTIVE(uLength(mark(X1), X2)) 86.65/27.24 ACTIVE(uLength(tt, L)) -> MARK(s(length(L))) 86.65/27.24 MARK(s(X)) -> MARK(X) 86.65/27.24 MARK(and(X1, X2)) -> MARK(X2) 86.65/27.24 MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) 86.65/27.24 ACTIVE(isNatIList(cons(N, IL))) -> MARK(and(isNat(N), isNatIList(IL))) 86.65/27.24 MARK(isNatList(X)) -> ACTIVE(isNatList(X)) 86.65/27.24 ACTIVE(isNatList(cons(N, L))) -> MARK(and(isNat(N), isNatList(L))) 86.65/27.24 MARK(length(X)) -> ACTIVE(length(mark(X))) 86.65/27.24 86.65/27.24 The TRS R consists of the following rules: 86.65/27.24 86.65/27.24 mark(and(X1, X2)) -> active(and(mark(X1), mark(X2))) 86.65/27.24 active(and(tt, T)) -> mark(T) 86.65/27.24 mark(isNatIList(X)) -> active(isNatIList(X)) 86.65/27.24 active(isNatIList(IL)) -> mark(isNatList(IL)) 86.65/27.24 mark(isNatList(X)) -> active(isNatList(X)) 86.65/27.24 active(isNatList(cons(N, L))) -> mark(and(isNat(N), isNatList(L))) 86.65/27.24 active(isNatList(take(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.24 active(isNatIList(cons(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.24 mark(isNat(X)) -> active(isNat(X)) 86.65/27.24 active(isNat(s(N))) -> mark(isNat(N)) 86.65/27.24 active(isNat(length(L))) -> mark(isNatList(L)) 86.65/27.24 mark(s(X)) -> active(s(mark(X))) 86.65/27.24 active(zeros) -> mark(cons(0, zeros)) 86.65/27.24 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 86.65/27.24 mark(uTake1(X)) -> active(uTake1(mark(X))) 86.65/27.24 active(take(s(M), cons(N, IL))) -> mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL)) 86.65/27.24 mark(uTake2(X1, X2, X3, X4)) -> active(uTake2(mark(X1), X2, X3, X4)) 86.65/27.24 active(uTake2(tt, M, N, IL)) -> mark(cons(N, take(M, IL))) 86.65/27.24 active(length(cons(N, L))) -> mark(uLength(and(isNat(N), isNatList(L)), L)) 86.65/27.24 mark(uLength(X1, X2)) -> active(uLength(mark(X1), X2)) 86.65/27.24 active(uLength(tt, L)) -> mark(s(length(L))) 86.65/27.24 mark(length(X)) -> active(length(mark(X))) 86.65/27.24 mark(zeros) -> active(zeros) 86.65/27.24 mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) 86.65/27.24 mark(tt) -> active(tt) 86.65/27.24 mark(0) -> active(0) 86.65/27.24 mark(nil) -> active(nil) 86.65/27.24 take(X1, mark(X2)) -> take(X1, X2) 86.65/27.24 take(mark(X1), X2) -> take(X1, X2) 86.65/27.24 take(active(X1), X2) -> take(X1, X2) 86.65/27.24 take(X1, active(X2)) -> take(X1, X2) 86.65/27.24 and(X1, mark(X2)) -> and(X1, X2) 86.65/27.24 and(mark(X1), X2) -> and(X1, X2) 86.65/27.24 and(active(X1), X2) -> and(X1, X2) 86.65/27.24 and(X1, active(X2)) -> and(X1, X2) 86.65/27.24 active(isNat(0)) -> mark(tt) 86.65/27.24 active(isNatIList(zeros)) -> mark(tt) 86.65/27.24 active(isNatList(nil)) -> mark(tt) 86.65/27.24 s(active(X)) -> s(X) 86.65/27.24 s(mark(X)) -> s(X) 86.65/27.24 cons(X1, mark(X2)) -> cons(X1, X2) 86.65/27.24 cons(mark(X1), X2) -> cons(X1, X2) 86.65/27.24 cons(active(X1), X2) -> cons(X1, X2) 86.65/27.24 cons(X1, active(X2)) -> cons(X1, X2) 86.65/27.24 uTake1(active(X)) -> uTake1(X) 86.65/27.24 uTake1(mark(X)) -> uTake1(X) 86.65/27.24 uTake2(X1, mark(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(mark(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(X1, X2, mark(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(X1, X2, X3, mark(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(active(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(X1, active(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(X1, X2, active(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(X1, X2, X3, active(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uLength(X1, mark(X2)) -> uLength(X1, X2) 86.65/27.24 uLength(mark(X1), X2) -> uLength(X1, X2) 86.65/27.24 uLength(active(X1), X2) -> uLength(X1, X2) 86.65/27.24 uLength(X1, active(X2)) -> uLength(X1, X2) 86.65/27.24 length(active(X)) -> length(X) 86.65/27.24 length(mark(X)) -> length(X) 86.65/27.24 86.65/27.24 The set Q consists of the following terms: 86.65/27.24 86.65/27.24 active(and(tt, x0)) 86.65/27.24 active(isNatIList(x0)) 86.65/27.24 active(isNat(0)) 86.65/27.24 active(isNat(s(x0))) 86.65/27.24 active(isNat(length(x0))) 86.65/27.24 active(isNatList(nil)) 86.65/27.24 active(isNatList(cons(x0, x1))) 86.65/27.24 active(isNatList(take(x0, x1))) 86.65/27.24 active(zeros) 86.65/27.24 active(take(0, x0)) 86.65/27.24 active(uTake1(tt)) 86.65/27.24 active(take(s(x0), cons(x1, x2))) 86.65/27.24 active(uTake2(tt, x0, x1, x2)) 86.65/27.24 active(length(cons(x0, x1))) 86.65/27.24 active(uLength(tt, x0)) 86.65/27.24 mark(and(x0, x1)) 86.65/27.24 mark(tt) 86.65/27.24 mark(isNatIList(x0)) 86.65/27.24 mark(isNatList(x0)) 86.65/27.24 mark(isNat(x0)) 86.65/27.24 mark(0) 86.65/27.24 mark(s(x0)) 86.65/27.24 mark(length(x0)) 86.65/27.24 mark(zeros) 86.65/27.24 mark(cons(x0, x1)) 86.65/27.24 mark(nil) 86.65/27.24 mark(take(x0, x1)) 86.65/27.24 mark(uTake1(x0)) 86.65/27.24 mark(uTake2(x0, x1, x2, x3)) 86.65/27.24 mark(uLength(x0, x1)) 86.65/27.24 and(mark(x0), x1) 86.65/27.24 and(x0, mark(x1)) 86.65/27.24 and(active(x0), x1) 86.65/27.24 and(x0, active(x1)) 86.65/27.24 isNatIList(mark(x0)) 86.65/27.24 isNatIList(active(x0)) 86.65/27.24 isNatList(mark(x0)) 86.65/27.24 isNatList(active(x0)) 86.65/27.24 isNat(mark(x0)) 86.65/27.24 isNat(active(x0)) 86.65/27.24 s(mark(x0)) 86.65/27.24 s(active(x0)) 86.65/27.24 length(mark(x0)) 86.65/27.24 length(active(x0)) 86.65/27.24 cons(mark(x0), x1) 86.65/27.24 cons(x0, mark(x1)) 86.65/27.24 cons(active(x0), x1) 86.65/27.24 cons(x0, active(x1)) 86.65/27.24 take(mark(x0), x1) 86.65/27.24 take(x0, mark(x1)) 86.65/27.24 take(active(x0), x1) 86.65/27.24 take(x0, active(x1)) 86.65/27.24 uTake1(mark(x0)) 86.65/27.24 uTake1(active(x0)) 86.65/27.24 uTake2(mark(x0), x1, x2, x3) 86.65/27.24 uTake2(x0, mark(x1), x2, x3) 86.65/27.24 uTake2(x0, x1, mark(x2), x3) 86.65/27.24 uTake2(x0, x1, x2, mark(x3)) 86.65/27.24 uTake2(active(x0), x1, x2, x3) 86.65/27.24 uTake2(x0, active(x1), x2, x3) 86.65/27.24 uTake2(x0, x1, active(x2), x3) 86.65/27.24 uTake2(x0, x1, x2, active(x3)) 86.65/27.24 uLength(mark(x0), x1) 86.65/27.24 uLength(x0, mark(x1)) 86.65/27.24 uLength(active(x0), x1) 86.65/27.24 uLength(x0, active(x1)) 86.65/27.24 86.65/27.24 We have to consider all minimal (P,Q,R)-chains. 86.65/27.24 ---------------------------------------- 86.65/27.24 86.65/27.24 (127) QDPOrderProof (EQUIVALENT) 86.65/27.24 We use the reduction pair processor [LPAR04,JAR06]. 86.65/27.24 86.65/27.24 86.65/27.24 The following pairs can be oriented strictly and are deleted. 86.65/27.24 86.65/27.24 MARK(s(X)) -> MARK(X) 86.65/27.24 The remaining pairs can at least be oriented weakly. 86.65/27.24 Used ordering: Matrix interpretation [MATRO] with arctic natural numbers [ARCTIC]: 86.65/27.24 86.65/27.24 <<< 86.65/27.24 POL(ACTIVE(x_1)) = [[1A]] + [[0A]] * x_1 86.65/27.24 >>> 86.65/27.24 86.65/27.24 <<< 86.65/27.24 POL(and(x_1, x_2)) = [[-I]] + [[-I]] * x_1 + [[0A]] * x_2 86.65/27.24 >>> 86.65/27.24 86.65/27.24 <<< 86.65/27.24 POL(tt) = [[2A]] 86.65/27.24 >>> 86.65/27.24 86.65/27.24 <<< 86.65/27.24 POL(MARK(x_1)) = [[1A]] + [[0A]] * x_1 86.65/27.24 >>> 86.65/27.24 86.65/27.24 <<< 86.65/27.24 POL(mark(x_1)) = [[1A]] + [[0A]] * x_1 86.65/27.24 >>> 86.65/27.24 86.65/27.24 <<< 86.65/27.24 POL(length(x_1)) = [[-I]] + [[0A]] * x_1 86.65/27.24 >>> 86.65/27.24 86.65/27.24 <<< 86.65/27.24 POL(cons(x_1, x_2)) = [[-I]] + [[-I]] * x_1 + [[1A]] * x_2 86.65/27.24 >>> 86.65/27.24 86.65/27.24 <<< 86.65/27.24 POL(uLength(x_1, x_2)) = [[-I]] + [[0A]] * x_1 + [[1A]] * x_2 86.65/27.24 >>> 86.65/27.24 86.65/27.24 <<< 86.65/27.24 POL(isNat(x_1)) = [[-I]] + [[2A]] * x_1 86.65/27.24 >>> 86.65/27.24 86.65/27.24 <<< 86.65/27.24 POL(isNatList(x_1)) = [[-I]] + [[1A]] * x_1 86.65/27.24 >>> 86.65/27.24 86.65/27.24 <<< 86.65/27.24 POL(s(x_1)) = [[2A]] + [[1A]] * x_1 86.65/27.24 >>> 86.65/27.24 86.65/27.24 <<< 86.65/27.24 POL(isNatIList(x_1)) = [[-I]] + [[2A]] * x_1 86.65/27.24 >>> 86.65/27.24 86.65/27.24 <<< 86.65/27.24 POL(active(x_1)) = [[1A]] + [[0A]] * x_1 86.65/27.24 >>> 86.65/27.24 86.65/27.24 <<< 86.65/27.24 POL(take(x_1, x_2)) = [[2A]] + [[1A]] * x_1 + [[1A]] * x_2 86.65/27.24 >>> 86.65/27.24 86.65/27.24 <<< 86.65/27.24 POL(zeros) = [[0A]] 86.65/27.24 >>> 86.65/27.24 86.65/27.24 <<< 86.65/27.24 POL(0) = [[0A]] 86.65/27.24 >>> 86.65/27.24 86.65/27.24 <<< 86.65/27.24 POL(uTake2(x_1, x_2, x_3, x_4)) = [[3A]] + [[-I]] * x_1 + [[2A]] * x_2 + [[-I]] * x_3 + [[2A]] * x_4 86.65/27.24 >>> 86.65/27.24 86.65/27.24 <<< 86.65/27.24 POL(uTake1(x_1)) = [[0A]] + [[-I]] * x_1 86.65/27.24 >>> 86.65/27.24 86.65/27.24 <<< 86.65/27.24 POL(nil) = [[1A]] 86.65/27.24 >>> 86.65/27.24 86.65/27.24 86.65/27.24 The following usable rules [FROCOS05] with respect to the argument filtering of the ordering [JAR06] were oriented: 86.65/27.24 86.65/27.24 active(and(tt, T)) -> mark(T) 86.65/27.24 mark(and(X1, X2)) -> active(and(mark(X1), mark(X2))) 86.65/27.24 active(isNatIList(IL)) -> mark(isNatList(IL)) 86.65/27.24 mark(isNatList(X)) -> active(isNatList(X)) 86.65/27.24 active(isNatList(cons(N, L))) -> mark(and(isNat(N), isNatList(L))) 86.65/27.24 active(isNatList(take(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.24 active(isNatIList(cons(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.24 active(isNat(s(N))) -> mark(isNat(N)) 86.65/27.24 mark(isNat(X)) -> active(isNat(X)) 86.65/27.24 active(isNat(length(L))) -> mark(isNatList(L)) 86.65/27.24 active(zeros) -> mark(cons(0, zeros)) 86.65/27.24 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 86.65/27.24 active(take(s(M), cons(N, IL))) -> mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL)) 86.65/27.24 mark(uTake2(X1, X2, X3, X4)) -> active(uTake2(mark(X1), X2, X3, X4)) 86.65/27.24 active(uTake2(tt, M, N, IL)) -> mark(cons(N, take(M, IL))) 86.65/27.24 active(length(cons(N, L))) -> mark(uLength(and(isNat(N), isNatList(L)), L)) 86.65/27.24 mark(uLength(X1, X2)) -> active(uLength(mark(X1), X2)) 86.65/27.24 active(uLength(tt, L)) -> mark(s(length(L))) 86.65/27.24 mark(s(X)) -> active(s(mark(X))) 86.65/27.24 mark(isNatIList(X)) -> active(isNatIList(X)) 86.65/27.24 mark(uTake1(X)) -> active(uTake1(mark(X))) 86.65/27.24 mark(length(X)) -> active(length(mark(X))) 86.65/27.24 mark(zeros) -> active(zeros) 86.65/27.24 mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) 86.65/27.24 mark(tt) -> active(tt) 86.65/27.24 mark(0) -> active(0) 86.65/27.24 mark(nil) -> active(nil) 86.65/27.24 and(mark(X1), X2) -> and(X1, X2) 86.65/27.24 and(X1, mark(X2)) -> and(X1, X2) 86.65/27.24 and(active(X1), X2) -> and(X1, X2) 86.65/27.24 and(X1, active(X2)) -> and(X1, X2) 86.65/27.24 uLength(mark(X1), X2) -> uLength(X1, X2) 86.65/27.24 uLength(X1, mark(X2)) -> uLength(X1, X2) 86.65/27.24 uLength(active(X1), X2) -> uLength(X1, X2) 86.65/27.24 uLength(X1, active(X2)) -> uLength(X1, X2) 86.65/27.24 length(mark(X)) -> length(X) 86.65/27.24 length(active(X)) -> length(X) 86.65/27.24 active(isNat(0)) -> mark(tt) 86.65/27.24 active(isNatIList(zeros)) -> mark(tt) 86.65/27.24 active(isNatList(nil)) -> mark(tt) 86.65/27.24 cons(mark(X1), X2) -> cons(X1, X2) 86.65/27.24 cons(X1, mark(X2)) -> cons(X1, X2) 86.65/27.24 cons(active(X1), X2) -> cons(X1, X2) 86.65/27.24 cons(X1, active(X2)) -> cons(X1, X2) 86.65/27.24 uTake2(mark(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(X1, mark(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(X1, X2, mark(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(X1, X2, X3, mark(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(active(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(X1, active(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(X1, X2, active(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(X1, X2, X3, active(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.24 s(mark(X)) -> s(X) 86.65/27.24 s(active(X)) -> s(X) 86.65/27.24 uTake1(mark(X)) -> uTake1(X) 86.65/27.24 uTake1(active(X)) -> uTake1(X) 86.65/27.24 take(mark(X1), X2) -> take(X1, X2) 86.65/27.24 take(X1, mark(X2)) -> take(X1, X2) 86.65/27.24 take(active(X1), X2) -> take(X1, X2) 86.65/27.24 take(X1, active(X2)) -> take(X1, X2) 86.65/27.24 86.65/27.24 86.65/27.24 ---------------------------------------- 86.65/27.24 86.65/27.24 (128) 86.65/27.24 Obligation: 86.65/27.24 Q DP problem: 86.65/27.24 The TRS P consists of the following rules: 86.65/27.24 86.65/27.24 ACTIVE(and(tt, T)) -> MARK(T) 86.65/27.24 MARK(and(X1, X2)) -> ACTIVE(and(mark(X1), mark(X2))) 86.65/27.24 ACTIVE(length(cons(N, L))) -> MARK(uLength(and(isNat(N), isNatList(L)), L)) 86.65/27.24 MARK(uLength(X1, X2)) -> ACTIVE(uLength(mark(X1), X2)) 86.65/27.24 ACTIVE(uLength(tt, L)) -> MARK(s(length(L))) 86.65/27.24 MARK(and(X1, X2)) -> MARK(X2) 86.65/27.24 MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) 86.65/27.24 ACTIVE(isNatIList(cons(N, IL))) -> MARK(and(isNat(N), isNatIList(IL))) 86.65/27.24 MARK(isNatList(X)) -> ACTIVE(isNatList(X)) 86.65/27.24 ACTIVE(isNatList(cons(N, L))) -> MARK(and(isNat(N), isNatList(L))) 86.65/27.24 MARK(length(X)) -> ACTIVE(length(mark(X))) 86.65/27.24 86.65/27.24 The TRS R consists of the following rules: 86.65/27.24 86.65/27.24 mark(and(X1, X2)) -> active(and(mark(X1), mark(X2))) 86.65/27.24 active(and(tt, T)) -> mark(T) 86.65/27.24 mark(isNatIList(X)) -> active(isNatIList(X)) 86.65/27.24 active(isNatIList(IL)) -> mark(isNatList(IL)) 86.65/27.24 mark(isNatList(X)) -> active(isNatList(X)) 86.65/27.24 active(isNatList(cons(N, L))) -> mark(and(isNat(N), isNatList(L))) 86.65/27.24 active(isNatList(take(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.24 active(isNatIList(cons(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.24 mark(isNat(X)) -> active(isNat(X)) 86.65/27.24 active(isNat(s(N))) -> mark(isNat(N)) 86.65/27.24 active(isNat(length(L))) -> mark(isNatList(L)) 86.65/27.24 mark(s(X)) -> active(s(mark(X))) 86.65/27.24 active(zeros) -> mark(cons(0, zeros)) 86.65/27.24 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 86.65/27.24 mark(uTake1(X)) -> active(uTake1(mark(X))) 86.65/27.24 active(take(s(M), cons(N, IL))) -> mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL)) 86.65/27.24 mark(uTake2(X1, X2, X3, X4)) -> active(uTake2(mark(X1), X2, X3, X4)) 86.65/27.24 active(uTake2(tt, M, N, IL)) -> mark(cons(N, take(M, IL))) 86.65/27.24 active(length(cons(N, L))) -> mark(uLength(and(isNat(N), isNatList(L)), L)) 86.65/27.24 mark(uLength(X1, X2)) -> active(uLength(mark(X1), X2)) 86.65/27.24 active(uLength(tt, L)) -> mark(s(length(L))) 86.65/27.24 mark(length(X)) -> active(length(mark(X))) 86.65/27.24 mark(zeros) -> active(zeros) 86.65/27.24 mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) 86.65/27.24 mark(tt) -> active(tt) 86.65/27.24 mark(0) -> active(0) 86.65/27.24 mark(nil) -> active(nil) 86.65/27.24 take(X1, mark(X2)) -> take(X1, X2) 86.65/27.24 take(mark(X1), X2) -> take(X1, X2) 86.65/27.24 take(active(X1), X2) -> take(X1, X2) 86.65/27.24 take(X1, active(X2)) -> take(X1, X2) 86.65/27.24 and(X1, mark(X2)) -> and(X1, X2) 86.65/27.24 and(mark(X1), X2) -> and(X1, X2) 86.65/27.24 and(active(X1), X2) -> and(X1, X2) 86.65/27.24 and(X1, active(X2)) -> and(X1, X2) 86.65/27.24 active(isNat(0)) -> mark(tt) 86.65/27.24 active(isNatIList(zeros)) -> mark(tt) 86.65/27.24 active(isNatList(nil)) -> mark(tt) 86.65/27.24 s(active(X)) -> s(X) 86.65/27.24 s(mark(X)) -> s(X) 86.65/27.24 cons(X1, mark(X2)) -> cons(X1, X2) 86.65/27.24 cons(mark(X1), X2) -> cons(X1, X2) 86.65/27.24 cons(active(X1), X2) -> cons(X1, X2) 86.65/27.24 cons(X1, active(X2)) -> cons(X1, X2) 86.65/27.24 uTake1(active(X)) -> uTake1(X) 86.65/27.24 uTake1(mark(X)) -> uTake1(X) 86.65/27.24 uTake2(X1, mark(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(mark(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(X1, X2, mark(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(X1, X2, X3, mark(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(active(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(X1, active(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(X1, X2, active(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(X1, X2, X3, active(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uLength(X1, mark(X2)) -> uLength(X1, X2) 86.65/27.24 uLength(mark(X1), X2) -> uLength(X1, X2) 86.65/27.24 uLength(active(X1), X2) -> uLength(X1, X2) 86.65/27.24 uLength(X1, active(X2)) -> uLength(X1, X2) 86.65/27.24 length(active(X)) -> length(X) 86.65/27.24 length(mark(X)) -> length(X) 86.65/27.24 86.65/27.24 The set Q consists of the following terms: 86.65/27.24 86.65/27.24 active(and(tt, x0)) 86.65/27.24 active(isNatIList(x0)) 86.65/27.24 active(isNat(0)) 86.65/27.24 active(isNat(s(x0))) 86.65/27.24 active(isNat(length(x0))) 86.65/27.24 active(isNatList(nil)) 86.65/27.24 active(isNatList(cons(x0, x1))) 86.65/27.24 active(isNatList(take(x0, x1))) 86.65/27.24 active(zeros) 86.65/27.24 active(take(0, x0)) 86.65/27.24 active(uTake1(tt)) 86.65/27.24 active(take(s(x0), cons(x1, x2))) 86.65/27.24 active(uTake2(tt, x0, x1, x2)) 86.65/27.24 active(length(cons(x0, x1))) 86.65/27.24 active(uLength(tt, x0)) 86.65/27.24 mark(and(x0, x1)) 86.65/27.24 mark(tt) 86.65/27.24 mark(isNatIList(x0)) 86.65/27.24 mark(isNatList(x0)) 86.65/27.24 mark(isNat(x0)) 86.65/27.24 mark(0) 86.65/27.24 mark(s(x0)) 86.65/27.24 mark(length(x0)) 86.65/27.24 mark(zeros) 86.65/27.24 mark(cons(x0, x1)) 86.65/27.24 mark(nil) 86.65/27.24 mark(take(x0, x1)) 86.65/27.24 mark(uTake1(x0)) 86.65/27.24 mark(uTake2(x0, x1, x2, x3)) 86.65/27.24 mark(uLength(x0, x1)) 86.65/27.24 and(mark(x0), x1) 86.65/27.24 and(x0, mark(x1)) 86.65/27.24 and(active(x0), x1) 86.65/27.24 and(x0, active(x1)) 86.65/27.24 isNatIList(mark(x0)) 86.65/27.24 isNatIList(active(x0)) 86.65/27.24 isNatList(mark(x0)) 86.65/27.24 isNatList(active(x0)) 86.65/27.24 isNat(mark(x0)) 86.65/27.24 isNat(active(x0)) 86.65/27.24 s(mark(x0)) 86.65/27.24 s(active(x0)) 86.65/27.24 length(mark(x0)) 86.65/27.24 length(active(x0)) 86.65/27.24 cons(mark(x0), x1) 86.65/27.24 cons(x0, mark(x1)) 86.65/27.24 cons(active(x0), x1) 86.65/27.24 cons(x0, active(x1)) 86.65/27.24 take(mark(x0), x1) 86.65/27.24 take(x0, mark(x1)) 86.65/27.24 take(active(x0), x1) 86.65/27.24 take(x0, active(x1)) 86.65/27.24 uTake1(mark(x0)) 86.65/27.24 uTake1(active(x0)) 86.65/27.24 uTake2(mark(x0), x1, x2, x3) 86.65/27.24 uTake2(x0, mark(x1), x2, x3) 86.65/27.24 uTake2(x0, x1, mark(x2), x3) 86.65/27.24 uTake2(x0, x1, x2, mark(x3)) 86.65/27.24 uTake2(active(x0), x1, x2, x3) 86.65/27.24 uTake2(x0, active(x1), x2, x3) 86.65/27.24 uTake2(x0, x1, active(x2), x3) 86.65/27.24 uTake2(x0, x1, x2, active(x3)) 86.65/27.24 uLength(mark(x0), x1) 86.65/27.24 uLength(x0, mark(x1)) 86.65/27.24 uLength(active(x0), x1) 86.65/27.24 uLength(x0, active(x1)) 86.65/27.24 86.65/27.24 We have to consider all minimal (P,Q,R)-chains. 86.65/27.24 ---------------------------------------- 86.65/27.24 86.65/27.24 (129) DependencyGraphProof (EQUIVALENT) 86.65/27.24 The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 1 SCC with 1 less node. 86.65/27.24 ---------------------------------------- 86.65/27.24 86.65/27.24 (130) 86.65/27.24 Obligation: 86.65/27.24 Q DP problem: 86.65/27.24 The TRS P consists of the following rules: 86.65/27.24 86.65/27.24 MARK(and(X1, X2)) -> ACTIVE(and(mark(X1), mark(X2))) 86.65/27.24 ACTIVE(and(tt, T)) -> MARK(T) 86.65/27.24 MARK(and(X1, X2)) -> MARK(X2) 86.65/27.24 MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) 86.65/27.24 ACTIVE(isNatIList(cons(N, IL))) -> MARK(and(isNat(N), isNatIList(IL))) 86.65/27.24 MARK(isNatList(X)) -> ACTIVE(isNatList(X)) 86.65/27.24 ACTIVE(isNatList(cons(N, L))) -> MARK(and(isNat(N), isNatList(L))) 86.65/27.24 MARK(length(X)) -> ACTIVE(length(mark(X))) 86.65/27.24 ACTIVE(length(cons(N, L))) -> MARK(uLength(and(isNat(N), isNatList(L)), L)) 86.65/27.24 MARK(uLength(X1, X2)) -> ACTIVE(uLength(mark(X1), X2)) 86.65/27.24 86.65/27.24 The TRS R consists of the following rules: 86.65/27.24 86.65/27.24 mark(and(X1, X2)) -> active(and(mark(X1), mark(X2))) 86.65/27.24 active(and(tt, T)) -> mark(T) 86.65/27.24 mark(isNatIList(X)) -> active(isNatIList(X)) 86.65/27.24 active(isNatIList(IL)) -> mark(isNatList(IL)) 86.65/27.24 mark(isNatList(X)) -> active(isNatList(X)) 86.65/27.24 active(isNatList(cons(N, L))) -> mark(and(isNat(N), isNatList(L))) 86.65/27.24 active(isNatList(take(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.24 active(isNatIList(cons(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.24 mark(isNat(X)) -> active(isNat(X)) 86.65/27.24 active(isNat(s(N))) -> mark(isNat(N)) 86.65/27.24 active(isNat(length(L))) -> mark(isNatList(L)) 86.65/27.24 mark(s(X)) -> active(s(mark(X))) 86.65/27.24 active(zeros) -> mark(cons(0, zeros)) 86.65/27.24 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 86.65/27.24 mark(uTake1(X)) -> active(uTake1(mark(X))) 86.65/27.24 active(take(s(M), cons(N, IL))) -> mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL)) 86.65/27.24 mark(uTake2(X1, X2, X3, X4)) -> active(uTake2(mark(X1), X2, X3, X4)) 86.65/27.24 active(uTake2(tt, M, N, IL)) -> mark(cons(N, take(M, IL))) 86.65/27.24 active(length(cons(N, L))) -> mark(uLength(and(isNat(N), isNatList(L)), L)) 86.65/27.24 mark(uLength(X1, X2)) -> active(uLength(mark(X1), X2)) 86.65/27.24 active(uLength(tt, L)) -> mark(s(length(L))) 86.65/27.24 mark(length(X)) -> active(length(mark(X))) 86.65/27.24 mark(zeros) -> active(zeros) 86.65/27.24 mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) 86.65/27.24 mark(tt) -> active(tt) 86.65/27.24 mark(0) -> active(0) 86.65/27.24 mark(nil) -> active(nil) 86.65/27.24 take(X1, mark(X2)) -> take(X1, X2) 86.65/27.24 take(mark(X1), X2) -> take(X1, X2) 86.65/27.24 take(active(X1), X2) -> take(X1, X2) 86.65/27.24 take(X1, active(X2)) -> take(X1, X2) 86.65/27.24 and(X1, mark(X2)) -> and(X1, X2) 86.65/27.24 and(mark(X1), X2) -> and(X1, X2) 86.65/27.24 and(active(X1), X2) -> and(X1, X2) 86.65/27.24 and(X1, active(X2)) -> and(X1, X2) 86.65/27.24 active(isNat(0)) -> mark(tt) 86.65/27.24 active(isNatIList(zeros)) -> mark(tt) 86.65/27.24 active(isNatList(nil)) -> mark(tt) 86.65/27.24 s(active(X)) -> s(X) 86.65/27.24 s(mark(X)) -> s(X) 86.65/27.24 cons(X1, mark(X2)) -> cons(X1, X2) 86.65/27.24 cons(mark(X1), X2) -> cons(X1, X2) 86.65/27.24 cons(active(X1), X2) -> cons(X1, X2) 86.65/27.24 cons(X1, active(X2)) -> cons(X1, X2) 86.65/27.24 uTake1(active(X)) -> uTake1(X) 86.65/27.24 uTake1(mark(X)) -> uTake1(X) 86.65/27.24 uTake2(X1, mark(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(mark(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(X1, X2, mark(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(X1, X2, X3, mark(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(active(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(X1, active(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(X1, X2, active(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(X1, X2, X3, active(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uLength(X1, mark(X2)) -> uLength(X1, X2) 86.65/27.24 uLength(mark(X1), X2) -> uLength(X1, X2) 86.65/27.24 uLength(active(X1), X2) -> uLength(X1, X2) 86.65/27.24 uLength(X1, active(X2)) -> uLength(X1, X2) 86.65/27.24 length(active(X)) -> length(X) 86.65/27.24 length(mark(X)) -> length(X) 86.65/27.24 86.65/27.24 The set Q consists of the following terms: 86.65/27.24 86.65/27.24 active(and(tt, x0)) 86.65/27.24 active(isNatIList(x0)) 86.65/27.24 active(isNat(0)) 86.65/27.24 active(isNat(s(x0))) 86.65/27.24 active(isNat(length(x0))) 86.65/27.24 active(isNatList(nil)) 86.65/27.24 active(isNatList(cons(x0, x1))) 86.65/27.24 active(isNatList(take(x0, x1))) 86.65/27.24 active(zeros) 86.65/27.24 active(take(0, x0)) 86.65/27.24 active(uTake1(tt)) 86.65/27.24 active(take(s(x0), cons(x1, x2))) 86.65/27.24 active(uTake2(tt, x0, x1, x2)) 86.65/27.24 active(length(cons(x0, x1))) 86.65/27.24 active(uLength(tt, x0)) 86.65/27.24 mark(and(x0, x1)) 86.65/27.24 mark(tt) 86.65/27.24 mark(isNatIList(x0)) 86.65/27.24 mark(isNatList(x0)) 86.65/27.24 mark(isNat(x0)) 86.65/27.24 mark(0) 86.65/27.24 mark(s(x0)) 86.65/27.24 mark(length(x0)) 86.65/27.24 mark(zeros) 86.65/27.24 mark(cons(x0, x1)) 86.65/27.24 mark(nil) 86.65/27.24 mark(take(x0, x1)) 86.65/27.24 mark(uTake1(x0)) 86.65/27.24 mark(uTake2(x0, x1, x2, x3)) 86.65/27.24 mark(uLength(x0, x1)) 86.65/27.24 and(mark(x0), x1) 86.65/27.24 and(x0, mark(x1)) 86.65/27.24 and(active(x0), x1) 86.65/27.24 and(x0, active(x1)) 86.65/27.24 isNatIList(mark(x0)) 86.65/27.24 isNatIList(active(x0)) 86.65/27.24 isNatList(mark(x0)) 86.65/27.24 isNatList(active(x0)) 86.65/27.24 isNat(mark(x0)) 86.65/27.24 isNat(active(x0)) 86.65/27.24 s(mark(x0)) 86.65/27.24 s(active(x0)) 86.65/27.24 length(mark(x0)) 86.65/27.24 length(active(x0)) 86.65/27.24 cons(mark(x0), x1) 86.65/27.24 cons(x0, mark(x1)) 86.65/27.24 cons(active(x0), x1) 86.65/27.24 cons(x0, active(x1)) 86.65/27.24 take(mark(x0), x1) 86.65/27.24 take(x0, mark(x1)) 86.65/27.24 take(active(x0), x1) 86.65/27.24 take(x0, active(x1)) 86.65/27.24 uTake1(mark(x0)) 86.65/27.24 uTake1(active(x0)) 86.65/27.24 uTake2(mark(x0), x1, x2, x3) 86.65/27.24 uTake2(x0, mark(x1), x2, x3) 86.65/27.24 uTake2(x0, x1, mark(x2), x3) 86.65/27.24 uTake2(x0, x1, x2, mark(x3)) 86.65/27.24 uTake2(active(x0), x1, x2, x3) 86.65/27.24 uTake2(x0, active(x1), x2, x3) 86.65/27.24 uTake2(x0, x1, active(x2), x3) 86.65/27.24 uTake2(x0, x1, x2, active(x3)) 86.65/27.24 uLength(mark(x0), x1) 86.65/27.24 uLength(x0, mark(x1)) 86.65/27.24 uLength(active(x0), x1) 86.65/27.24 uLength(x0, active(x1)) 86.65/27.24 86.65/27.24 We have to consider all minimal (P,Q,R)-chains. 86.65/27.24 ---------------------------------------- 86.65/27.24 86.65/27.24 (131) QDPQMonotonicMRRProof (EQUIVALENT) 86.65/27.24 By using the Q-monotonic rule removal processor with the following ordering, at least one Dependency Pair or term rewrite system rule of this QDP problem can be strictly oriented such that it always occurs at a strongly monotonic position in a (P,Q,R)-chain. 86.65/27.24 86.65/27.24 Strictly oriented dependency pairs: 86.65/27.24 86.65/27.24 MARK(uLength(X1, X2)) -> ACTIVE(uLength(mark(X1), X2)) 86.65/27.24 86.65/27.24 86.65/27.24 Used ordering: Polynomial interpretation [POLO]: 86.65/27.24 86.65/27.24 POL(0) = 0 86.65/27.24 POL(ACTIVE(x_1)) = 2*x_1 86.65/27.24 POL(MARK(x_1)) = 2 86.65/27.24 POL(active(x_1)) = 0 86.65/27.24 POL(and(x_1, x_2)) = 1 86.65/27.24 POL(cons(x_1, x_2)) = 0 86.65/27.24 POL(isNat(x_1)) = 0 86.65/27.24 POL(isNatIList(x_1)) = 1 86.65/27.24 POL(isNatList(x_1)) = 1 86.65/27.24 POL(length(x_1)) = 1 86.65/27.24 POL(mark(x_1)) = 0 86.65/27.24 POL(nil) = 0 86.65/27.24 POL(s(x_1)) = 0 86.65/27.24 POL(take(x_1, x_2)) = 0 86.65/27.24 POL(tt) = 0 86.65/27.24 POL(uLength(x_1, x_2)) = 0 86.65/27.24 POL(uTake1(x_1)) = 0 86.65/27.24 POL(uTake2(x_1, x_2, x_3, x_4)) = 0 86.65/27.24 POL(zeros) = 0 86.65/27.24 86.65/27.24 86.65/27.24 ---------------------------------------- 86.65/27.24 86.65/27.24 (132) 86.65/27.24 Obligation: 86.65/27.24 Q DP problem: 86.65/27.24 The TRS P consists of the following rules: 86.65/27.24 86.65/27.24 MARK(and(X1, X2)) -> ACTIVE(and(mark(X1), mark(X2))) 86.65/27.24 ACTIVE(and(tt, T)) -> MARK(T) 86.65/27.24 MARK(and(X1, X2)) -> MARK(X2) 86.65/27.24 MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) 86.65/27.24 ACTIVE(isNatIList(cons(N, IL))) -> MARK(and(isNat(N), isNatIList(IL))) 86.65/27.24 MARK(isNatList(X)) -> ACTIVE(isNatList(X)) 86.65/27.24 ACTIVE(isNatList(cons(N, L))) -> MARK(and(isNat(N), isNatList(L))) 86.65/27.24 MARK(length(X)) -> ACTIVE(length(mark(X))) 86.65/27.24 ACTIVE(length(cons(N, L))) -> MARK(uLength(and(isNat(N), isNatList(L)), L)) 86.65/27.24 86.65/27.24 The TRS R consists of the following rules: 86.65/27.24 86.65/27.24 mark(and(X1, X2)) -> active(and(mark(X1), mark(X2))) 86.65/27.24 active(and(tt, T)) -> mark(T) 86.65/27.24 mark(isNatIList(X)) -> active(isNatIList(X)) 86.65/27.24 active(isNatIList(IL)) -> mark(isNatList(IL)) 86.65/27.24 mark(isNatList(X)) -> active(isNatList(X)) 86.65/27.24 active(isNatList(cons(N, L))) -> mark(and(isNat(N), isNatList(L))) 86.65/27.24 active(isNatList(take(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.24 active(isNatIList(cons(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.24 mark(isNat(X)) -> active(isNat(X)) 86.65/27.24 active(isNat(s(N))) -> mark(isNat(N)) 86.65/27.24 active(isNat(length(L))) -> mark(isNatList(L)) 86.65/27.24 mark(s(X)) -> active(s(mark(X))) 86.65/27.24 active(zeros) -> mark(cons(0, zeros)) 86.65/27.24 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 86.65/27.24 mark(uTake1(X)) -> active(uTake1(mark(X))) 86.65/27.24 active(take(s(M), cons(N, IL))) -> mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL)) 86.65/27.24 mark(uTake2(X1, X2, X3, X4)) -> active(uTake2(mark(X1), X2, X3, X4)) 86.65/27.24 active(uTake2(tt, M, N, IL)) -> mark(cons(N, take(M, IL))) 86.65/27.24 active(length(cons(N, L))) -> mark(uLength(and(isNat(N), isNatList(L)), L)) 86.65/27.24 mark(uLength(X1, X2)) -> active(uLength(mark(X1), X2)) 86.65/27.24 active(uLength(tt, L)) -> mark(s(length(L))) 86.65/27.24 mark(length(X)) -> active(length(mark(X))) 86.65/27.24 mark(zeros) -> active(zeros) 86.65/27.24 mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) 86.65/27.24 mark(tt) -> active(tt) 86.65/27.24 mark(0) -> active(0) 86.65/27.24 mark(nil) -> active(nil) 86.65/27.24 take(X1, mark(X2)) -> take(X1, X2) 86.65/27.24 take(mark(X1), X2) -> take(X1, X2) 86.65/27.24 take(active(X1), X2) -> take(X1, X2) 86.65/27.24 take(X1, active(X2)) -> take(X1, X2) 86.65/27.24 and(X1, mark(X2)) -> and(X1, X2) 86.65/27.24 and(mark(X1), X2) -> and(X1, X2) 86.65/27.24 and(active(X1), X2) -> and(X1, X2) 86.65/27.24 and(X1, active(X2)) -> and(X1, X2) 86.65/27.24 active(isNat(0)) -> mark(tt) 86.65/27.24 active(isNatIList(zeros)) -> mark(tt) 86.65/27.24 active(isNatList(nil)) -> mark(tt) 86.65/27.24 s(active(X)) -> s(X) 86.65/27.24 s(mark(X)) -> s(X) 86.65/27.24 cons(X1, mark(X2)) -> cons(X1, X2) 86.65/27.24 cons(mark(X1), X2) -> cons(X1, X2) 86.65/27.24 cons(active(X1), X2) -> cons(X1, X2) 86.65/27.24 cons(X1, active(X2)) -> cons(X1, X2) 86.65/27.24 uTake1(active(X)) -> uTake1(X) 86.65/27.24 uTake1(mark(X)) -> uTake1(X) 86.65/27.24 uTake2(X1, mark(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(mark(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(X1, X2, mark(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(X1, X2, X3, mark(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(active(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(X1, active(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(X1, X2, active(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(X1, X2, X3, active(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uLength(X1, mark(X2)) -> uLength(X1, X2) 86.65/27.24 uLength(mark(X1), X2) -> uLength(X1, X2) 86.65/27.24 uLength(active(X1), X2) -> uLength(X1, X2) 86.65/27.24 uLength(X1, active(X2)) -> uLength(X1, X2) 86.65/27.24 length(active(X)) -> length(X) 86.65/27.24 length(mark(X)) -> length(X) 86.65/27.24 86.65/27.24 The set Q consists of the following terms: 86.65/27.24 86.65/27.24 active(and(tt, x0)) 86.65/27.24 active(isNatIList(x0)) 86.65/27.24 active(isNat(0)) 86.65/27.24 active(isNat(s(x0))) 86.65/27.24 active(isNat(length(x0))) 86.65/27.24 active(isNatList(nil)) 86.65/27.24 active(isNatList(cons(x0, x1))) 86.65/27.24 active(isNatList(take(x0, x1))) 86.65/27.24 active(zeros) 86.65/27.24 active(take(0, x0)) 86.65/27.24 active(uTake1(tt)) 86.65/27.24 active(take(s(x0), cons(x1, x2))) 86.65/27.24 active(uTake2(tt, x0, x1, x2)) 86.65/27.24 active(length(cons(x0, x1))) 86.65/27.24 active(uLength(tt, x0)) 86.65/27.24 mark(and(x0, x1)) 86.65/27.24 mark(tt) 86.65/27.24 mark(isNatIList(x0)) 86.65/27.24 mark(isNatList(x0)) 86.65/27.24 mark(isNat(x0)) 86.65/27.24 mark(0) 86.65/27.24 mark(s(x0)) 86.65/27.24 mark(length(x0)) 86.65/27.24 mark(zeros) 86.65/27.24 mark(cons(x0, x1)) 86.65/27.24 mark(nil) 86.65/27.24 mark(take(x0, x1)) 86.65/27.24 mark(uTake1(x0)) 86.65/27.24 mark(uTake2(x0, x1, x2, x3)) 86.65/27.24 mark(uLength(x0, x1)) 86.65/27.24 and(mark(x0), x1) 86.65/27.24 and(x0, mark(x1)) 86.65/27.24 and(active(x0), x1) 86.65/27.24 and(x0, active(x1)) 86.65/27.24 isNatIList(mark(x0)) 86.65/27.24 isNatIList(active(x0)) 86.65/27.24 isNatList(mark(x0)) 86.65/27.24 isNatList(active(x0)) 86.65/27.24 isNat(mark(x0)) 86.65/27.24 isNat(active(x0)) 86.65/27.24 s(mark(x0)) 86.65/27.24 s(active(x0)) 86.65/27.24 length(mark(x0)) 86.65/27.24 length(active(x0)) 86.65/27.24 cons(mark(x0), x1) 86.65/27.24 cons(x0, mark(x1)) 86.65/27.24 cons(active(x0), x1) 86.65/27.24 cons(x0, active(x1)) 86.65/27.24 take(mark(x0), x1) 86.65/27.24 take(x0, mark(x1)) 86.65/27.24 take(active(x0), x1) 86.65/27.24 take(x0, active(x1)) 86.65/27.24 uTake1(mark(x0)) 86.65/27.24 uTake1(active(x0)) 86.65/27.24 uTake2(mark(x0), x1, x2, x3) 86.65/27.24 uTake2(x0, mark(x1), x2, x3) 86.65/27.24 uTake2(x0, x1, mark(x2), x3) 86.65/27.24 uTake2(x0, x1, x2, mark(x3)) 86.65/27.24 uTake2(active(x0), x1, x2, x3) 86.65/27.24 uTake2(x0, active(x1), x2, x3) 86.65/27.24 uTake2(x0, x1, active(x2), x3) 86.65/27.24 uTake2(x0, x1, x2, active(x3)) 86.65/27.24 uLength(mark(x0), x1) 86.65/27.24 uLength(x0, mark(x1)) 86.65/27.24 uLength(active(x0), x1) 86.65/27.24 uLength(x0, active(x1)) 86.65/27.24 86.65/27.24 We have to consider all minimal (P,Q,R)-chains. 86.65/27.24 ---------------------------------------- 86.65/27.24 86.65/27.24 (133) DependencyGraphProof (EQUIVALENT) 86.65/27.24 The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 1 SCC with 1 less node. 86.65/27.24 ---------------------------------------- 86.65/27.24 86.65/27.24 (134) 86.65/27.24 Obligation: 86.65/27.24 Q DP problem: 86.65/27.24 The TRS P consists of the following rules: 86.65/27.24 86.65/27.24 ACTIVE(and(tt, T)) -> MARK(T) 86.65/27.24 MARK(and(X1, X2)) -> ACTIVE(and(mark(X1), mark(X2))) 86.65/27.24 MARK(and(X1, X2)) -> MARK(X2) 86.65/27.24 MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) 86.65/27.24 ACTIVE(isNatIList(cons(N, IL))) -> MARK(and(isNat(N), isNatIList(IL))) 86.65/27.24 MARK(isNatList(X)) -> ACTIVE(isNatList(X)) 86.65/27.24 ACTIVE(isNatList(cons(N, L))) -> MARK(and(isNat(N), isNatList(L))) 86.65/27.24 MARK(length(X)) -> ACTIVE(length(mark(X))) 86.65/27.24 86.65/27.24 The TRS R consists of the following rules: 86.65/27.24 86.65/27.24 mark(and(X1, X2)) -> active(and(mark(X1), mark(X2))) 86.65/27.24 active(and(tt, T)) -> mark(T) 86.65/27.24 mark(isNatIList(X)) -> active(isNatIList(X)) 86.65/27.24 active(isNatIList(IL)) -> mark(isNatList(IL)) 86.65/27.24 mark(isNatList(X)) -> active(isNatList(X)) 86.65/27.24 active(isNatList(cons(N, L))) -> mark(and(isNat(N), isNatList(L))) 86.65/27.24 active(isNatList(take(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.24 active(isNatIList(cons(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.24 mark(isNat(X)) -> active(isNat(X)) 86.65/27.24 active(isNat(s(N))) -> mark(isNat(N)) 86.65/27.24 active(isNat(length(L))) -> mark(isNatList(L)) 86.65/27.24 mark(s(X)) -> active(s(mark(X))) 86.65/27.24 active(zeros) -> mark(cons(0, zeros)) 86.65/27.24 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 86.65/27.24 mark(uTake1(X)) -> active(uTake1(mark(X))) 86.65/27.24 active(take(s(M), cons(N, IL))) -> mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL)) 86.65/27.24 mark(uTake2(X1, X2, X3, X4)) -> active(uTake2(mark(X1), X2, X3, X4)) 86.65/27.24 active(uTake2(tt, M, N, IL)) -> mark(cons(N, take(M, IL))) 86.65/27.24 active(length(cons(N, L))) -> mark(uLength(and(isNat(N), isNatList(L)), L)) 86.65/27.24 mark(uLength(X1, X2)) -> active(uLength(mark(X1), X2)) 86.65/27.24 active(uLength(tt, L)) -> mark(s(length(L))) 86.65/27.24 mark(length(X)) -> active(length(mark(X))) 86.65/27.24 mark(zeros) -> active(zeros) 86.65/27.24 mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) 86.65/27.24 mark(tt) -> active(tt) 86.65/27.24 mark(0) -> active(0) 86.65/27.24 mark(nil) -> active(nil) 86.65/27.24 take(X1, mark(X2)) -> take(X1, X2) 86.65/27.24 take(mark(X1), X2) -> take(X1, X2) 86.65/27.24 take(active(X1), X2) -> take(X1, X2) 86.65/27.24 take(X1, active(X2)) -> take(X1, X2) 86.65/27.24 and(X1, mark(X2)) -> and(X1, X2) 86.65/27.24 and(mark(X1), X2) -> and(X1, X2) 86.65/27.24 and(active(X1), X2) -> and(X1, X2) 86.65/27.24 and(X1, active(X2)) -> and(X1, X2) 86.65/27.24 active(isNat(0)) -> mark(tt) 86.65/27.24 active(isNatIList(zeros)) -> mark(tt) 86.65/27.24 active(isNatList(nil)) -> mark(tt) 86.65/27.24 s(active(X)) -> s(X) 86.65/27.24 s(mark(X)) -> s(X) 86.65/27.24 cons(X1, mark(X2)) -> cons(X1, X2) 86.65/27.24 cons(mark(X1), X2) -> cons(X1, X2) 86.65/27.24 cons(active(X1), X2) -> cons(X1, X2) 86.65/27.24 cons(X1, active(X2)) -> cons(X1, X2) 86.65/27.24 uTake1(active(X)) -> uTake1(X) 86.65/27.24 uTake1(mark(X)) -> uTake1(X) 86.65/27.24 uTake2(X1, mark(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(mark(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(X1, X2, mark(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(X1, X2, X3, mark(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(active(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(X1, active(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(X1, X2, active(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uTake2(X1, X2, X3, active(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.24 uLength(X1, mark(X2)) -> uLength(X1, X2) 86.65/27.24 uLength(mark(X1), X2) -> uLength(X1, X2) 86.65/27.24 uLength(active(X1), X2) -> uLength(X1, X2) 86.65/27.24 uLength(X1, active(X2)) -> uLength(X1, X2) 86.65/27.24 length(active(X)) -> length(X) 86.65/27.24 length(mark(X)) -> length(X) 86.65/27.24 86.65/27.24 The set Q consists of the following terms: 86.65/27.24 86.65/27.24 active(and(tt, x0)) 86.65/27.24 active(isNatIList(x0)) 86.65/27.24 active(isNat(0)) 86.65/27.24 active(isNat(s(x0))) 86.65/27.24 active(isNat(length(x0))) 86.65/27.24 active(isNatList(nil)) 86.65/27.24 active(isNatList(cons(x0, x1))) 86.65/27.24 active(isNatList(take(x0, x1))) 86.65/27.24 active(zeros) 86.65/27.24 active(take(0, x0)) 86.65/27.24 active(uTake1(tt)) 86.65/27.24 active(take(s(x0), cons(x1, x2))) 86.65/27.24 active(uTake2(tt, x0, x1, x2)) 86.65/27.24 active(length(cons(x0, x1))) 86.65/27.24 active(uLength(tt, x0)) 86.65/27.24 mark(and(x0, x1)) 86.65/27.24 mark(tt) 86.65/27.24 mark(isNatIList(x0)) 86.65/27.24 mark(isNatList(x0)) 86.65/27.24 mark(isNat(x0)) 86.65/27.24 mark(0) 86.65/27.24 mark(s(x0)) 86.65/27.24 mark(length(x0)) 86.65/27.24 mark(zeros) 86.65/27.24 mark(cons(x0, x1)) 86.65/27.24 mark(nil) 86.65/27.24 mark(take(x0, x1)) 86.65/27.24 mark(uTake1(x0)) 86.65/27.24 mark(uTake2(x0, x1, x2, x3)) 86.65/27.24 mark(uLength(x0, x1)) 86.65/27.24 and(mark(x0), x1) 86.65/27.24 and(x0, mark(x1)) 86.65/27.24 and(active(x0), x1) 86.65/27.24 and(x0, active(x1)) 86.65/27.24 isNatIList(mark(x0)) 86.65/27.24 isNatIList(active(x0)) 86.65/27.24 isNatList(mark(x0)) 86.65/27.24 isNatList(active(x0)) 86.65/27.24 isNat(mark(x0)) 86.65/27.24 isNat(active(x0)) 86.65/27.24 s(mark(x0)) 86.65/27.24 s(active(x0)) 86.65/27.24 length(mark(x0)) 86.65/27.24 length(active(x0)) 86.65/27.24 cons(mark(x0), x1) 86.65/27.24 cons(x0, mark(x1)) 86.65/27.24 cons(active(x0), x1) 86.65/27.24 cons(x0, active(x1)) 86.65/27.24 take(mark(x0), x1) 86.65/27.24 take(x0, mark(x1)) 86.65/27.24 take(active(x0), x1) 86.65/27.24 take(x0, active(x1)) 86.65/27.24 uTake1(mark(x0)) 86.65/27.24 uTake1(active(x0)) 86.65/27.24 uTake2(mark(x0), x1, x2, x3) 86.65/27.24 uTake2(x0, mark(x1), x2, x3) 86.65/27.24 uTake2(x0, x1, mark(x2), x3) 86.65/27.24 uTake2(x0, x1, x2, mark(x3)) 86.65/27.24 uTake2(active(x0), x1, x2, x3) 86.65/27.24 uTake2(x0, active(x1), x2, x3) 86.65/27.24 uTake2(x0, x1, active(x2), x3) 86.65/27.24 uTake2(x0, x1, x2, active(x3)) 86.65/27.24 uLength(mark(x0), x1) 86.65/27.24 uLength(x0, mark(x1)) 86.65/27.24 uLength(active(x0), x1) 86.65/27.24 uLength(x0, active(x1)) 86.65/27.24 86.65/27.24 We have to consider all minimal (P,Q,R)-chains. 86.65/27.24 ---------------------------------------- 86.65/27.24 86.65/27.24 (135) QDPQMonotonicMRRProof (EQUIVALENT) 86.65/27.24 By using the Q-monotonic rule removal processor with the following ordering, at least one Dependency Pair or term rewrite system rule of this QDP problem can be strictly oriented such that it always occurs at a strongly monotonic position in a (P,Q,R)-chain. 86.65/27.25 86.65/27.25 Strictly oriented dependency pairs: 86.65/27.25 86.65/27.25 MARK(length(X)) -> ACTIVE(length(mark(X))) 86.65/27.25 86.65/27.25 86.65/27.25 Used ordering: Polynomial interpretation [POLO]: 86.65/27.25 86.65/27.25 POL(0) = 0 86.65/27.25 POL(ACTIVE(x_1)) = x_1 86.65/27.25 POL(MARK(x_1)) = 1 86.65/27.25 POL(active(x_1)) = 0 86.65/27.25 POL(and(x_1, x_2)) = 1 86.65/27.25 POL(cons(x_1, x_2)) = 0 86.65/27.25 POL(isNat(x_1)) = 0 86.65/27.25 POL(isNatIList(x_1)) = 1 86.65/27.25 POL(isNatList(x_1)) = 1 86.65/27.25 POL(length(x_1)) = 0 86.65/27.25 POL(mark(x_1)) = 0 86.65/27.25 POL(nil) = 0 86.65/27.25 POL(s(x_1)) = 0 86.65/27.25 POL(take(x_1, x_2)) = 0 86.65/27.25 POL(tt) = 0 86.65/27.25 POL(uLength(x_1, x_2)) = 0 86.65/27.25 POL(uTake1(x_1)) = 0 86.65/27.25 POL(uTake2(x_1, x_2, x_3, x_4)) = 0 86.65/27.25 POL(zeros) = 0 86.65/27.25 86.65/27.25 86.65/27.25 ---------------------------------------- 86.65/27.25 86.65/27.25 (136) 86.65/27.25 Obligation: 86.65/27.25 Q DP problem: 86.65/27.25 The TRS P consists of the following rules: 86.65/27.25 86.65/27.25 ACTIVE(and(tt, T)) -> MARK(T) 86.65/27.25 MARK(and(X1, X2)) -> ACTIVE(and(mark(X1), mark(X2))) 86.65/27.25 MARK(and(X1, X2)) -> MARK(X2) 86.65/27.25 MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) 86.65/27.25 ACTIVE(isNatIList(cons(N, IL))) -> MARK(and(isNat(N), isNatIList(IL))) 86.65/27.25 MARK(isNatList(X)) -> ACTIVE(isNatList(X)) 86.65/27.25 ACTIVE(isNatList(cons(N, L))) -> MARK(and(isNat(N), isNatList(L))) 86.65/27.25 86.65/27.25 The TRS R consists of the following rules: 86.65/27.25 86.65/27.25 mark(and(X1, X2)) -> active(and(mark(X1), mark(X2))) 86.65/27.25 active(and(tt, T)) -> mark(T) 86.65/27.25 mark(isNatIList(X)) -> active(isNatIList(X)) 86.65/27.25 active(isNatIList(IL)) -> mark(isNatList(IL)) 86.65/27.25 mark(isNatList(X)) -> active(isNatList(X)) 86.65/27.25 active(isNatList(cons(N, L))) -> mark(and(isNat(N), isNatList(L))) 86.65/27.25 active(isNatList(take(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.25 active(isNatIList(cons(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.25 mark(isNat(X)) -> active(isNat(X)) 86.65/27.25 active(isNat(s(N))) -> mark(isNat(N)) 86.65/27.25 active(isNat(length(L))) -> mark(isNatList(L)) 86.65/27.25 mark(s(X)) -> active(s(mark(X))) 86.65/27.25 active(zeros) -> mark(cons(0, zeros)) 86.65/27.25 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 86.65/27.25 mark(uTake1(X)) -> active(uTake1(mark(X))) 86.65/27.25 active(take(s(M), cons(N, IL))) -> mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL)) 86.65/27.25 mark(uTake2(X1, X2, X3, X4)) -> active(uTake2(mark(X1), X2, X3, X4)) 86.65/27.25 active(uTake2(tt, M, N, IL)) -> mark(cons(N, take(M, IL))) 86.65/27.25 active(length(cons(N, L))) -> mark(uLength(and(isNat(N), isNatList(L)), L)) 86.65/27.25 mark(uLength(X1, X2)) -> active(uLength(mark(X1), X2)) 86.65/27.25 active(uLength(tt, L)) -> mark(s(length(L))) 86.65/27.25 mark(length(X)) -> active(length(mark(X))) 86.65/27.25 mark(zeros) -> active(zeros) 86.65/27.25 mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) 86.65/27.25 mark(tt) -> active(tt) 86.65/27.25 mark(0) -> active(0) 86.65/27.25 mark(nil) -> active(nil) 86.65/27.25 take(X1, mark(X2)) -> take(X1, X2) 86.65/27.25 take(mark(X1), X2) -> take(X1, X2) 86.65/27.25 take(active(X1), X2) -> take(X1, X2) 86.65/27.25 take(X1, active(X2)) -> take(X1, X2) 86.65/27.25 and(X1, mark(X2)) -> and(X1, X2) 86.65/27.25 and(mark(X1), X2) -> and(X1, X2) 86.65/27.25 and(active(X1), X2) -> and(X1, X2) 86.65/27.25 and(X1, active(X2)) -> and(X1, X2) 86.65/27.25 active(isNat(0)) -> mark(tt) 86.65/27.25 active(isNatIList(zeros)) -> mark(tt) 86.65/27.25 active(isNatList(nil)) -> mark(tt) 86.65/27.25 s(active(X)) -> s(X) 86.65/27.25 s(mark(X)) -> s(X) 86.65/27.25 cons(X1, mark(X2)) -> cons(X1, X2) 86.65/27.25 cons(mark(X1), X2) -> cons(X1, X2) 86.65/27.25 cons(active(X1), X2) -> cons(X1, X2) 86.65/27.25 cons(X1, active(X2)) -> cons(X1, X2) 86.65/27.25 uTake1(active(X)) -> uTake1(X) 86.65/27.25 uTake1(mark(X)) -> uTake1(X) 86.65/27.25 uTake2(X1, mark(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.25 uTake2(mark(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.25 uTake2(X1, X2, mark(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.25 uTake2(X1, X2, X3, mark(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.25 uTake2(active(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.25 uTake2(X1, active(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.25 uTake2(X1, X2, active(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.25 uTake2(X1, X2, X3, active(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.25 uLength(X1, mark(X2)) -> uLength(X1, X2) 86.65/27.25 uLength(mark(X1), X2) -> uLength(X1, X2) 86.65/27.25 uLength(active(X1), X2) -> uLength(X1, X2) 86.65/27.25 uLength(X1, active(X2)) -> uLength(X1, X2) 86.65/27.25 length(active(X)) -> length(X) 86.65/27.25 length(mark(X)) -> length(X) 86.65/27.25 86.65/27.25 The set Q consists of the following terms: 86.65/27.25 86.65/27.25 active(and(tt, x0)) 86.65/27.25 active(isNatIList(x0)) 86.65/27.25 active(isNat(0)) 86.65/27.25 active(isNat(s(x0))) 86.65/27.25 active(isNat(length(x0))) 86.65/27.25 active(isNatList(nil)) 86.65/27.25 active(isNatList(cons(x0, x1))) 86.65/27.25 active(isNatList(take(x0, x1))) 86.65/27.25 active(zeros) 86.65/27.25 active(take(0, x0)) 86.65/27.25 active(uTake1(tt)) 86.65/27.25 active(take(s(x0), cons(x1, x2))) 86.65/27.25 active(uTake2(tt, x0, x1, x2)) 86.65/27.25 active(length(cons(x0, x1))) 86.65/27.25 active(uLength(tt, x0)) 86.65/27.25 mark(and(x0, x1)) 86.65/27.25 mark(tt) 86.65/27.25 mark(isNatIList(x0)) 86.65/27.25 mark(isNatList(x0)) 86.65/27.25 mark(isNat(x0)) 86.65/27.25 mark(0) 86.65/27.25 mark(s(x0)) 86.65/27.25 mark(length(x0)) 86.65/27.25 mark(zeros) 86.65/27.25 mark(cons(x0, x1)) 86.65/27.25 mark(nil) 86.65/27.25 mark(take(x0, x1)) 86.65/27.25 mark(uTake1(x0)) 86.65/27.25 mark(uTake2(x0, x1, x2, x3)) 86.65/27.25 mark(uLength(x0, x1)) 86.65/27.25 and(mark(x0), x1) 86.65/27.25 and(x0, mark(x1)) 86.65/27.25 and(active(x0), x1) 86.65/27.25 and(x0, active(x1)) 86.65/27.25 isNatIList(mark(x0)) 86.65/27.25 isNatIList(active(x0)) 86.65/27.25 isNatList(mark(x0)) 86.65/27.25 isNatList(active(x0)) 86.65/27.25 isNat(mark(x0)) 86.65/27.25 isNat(active(x0)) 86.65/27.25 s(mark(x0)) 86.65/27.25 s(active(x0)) 86.65/27.25 length(mark(x0)) 86.65/27.25 length(active(x0)) 86.65/27.25 cons(mark(x0), x1) 86.65/27.25 cons(x0, mark(x1)) 86.65/27.25 cons(active(x0), x1) 86.65/27.25 cons(x0, active(x1)) 86.65/27.25 take(mark(x0), x1) 86.65/27.25 take(x0, mark(x1)) 86.65/27.25 take(active(x0), x1) 86.65/27.25 take(x0, active(x1)) 86.65/27.25 uTake1(mark(x0)) 86.65/27.25 uTake1(active(x0)) 86.65/27.25 uTake2(mark(x0), x1, x2, x3) 86.65/27.25 uTake2(x0, mark(x1), x2, x3) 86.65/27.25 uTake2(x0, x1, mark(x2), x3) 86.65/27.25 uTake2(x0, x1, x2, mark(x3)) 86.65/27.25 uTake2(active(x0), x1, x2, x3) 86.65/27.25 uTake2(x0, active(x1), x2, x3) 86.65/27.25 uTake2(x0, x1, active(x2), x3) 86.65/27.25 uTake2(x0, x1, x2, active(x3)) 86.65/27.25 uLength(mark(x0), x1) 86.65/27.25 uLength(x0, mark(x1)) 86.65/27.25 uLength(active(x0), x1) 86.65/27.25 uLength(x0, active(x1)) 86.65/27.25 86.65/27.25 We have to consider all minimal (P,Q,R)-chains. 86.65/27.25 ---------------------------------------- 86.65/27.25 86.65/27.25 (137) QDPOrderProof (EQUIVALENT) 86.65/27.25 We use the reduction pair processor [LPAR04,JAR06]. 86.65/27.25 86.65/27.25 86.65/27.25 The following pairs can be oriented strictly and are deleted. 86.65/27.25 86.65/27.25 ACTIVE(isNatList(cons(N, L))) -> MARK(and(isNat(N), isNatList(L))) 86.65/27.25 The remaining pairs can at least be oriented weakly. 86.65/27.25 Used ordering: Matrix interpretation [MATRO] with arctic natural numbers [ARCTIC]: 86.65/27.25 86.65/27.25 <<< 86.65/27.25 POL(ACTIVE(x_1)) = [[-I]] + [[0A]] * x_1 86.65/27.25 >>> 86.65/27.25 86.65/27.25 <<< 86.65/27.25 POL(and(x_1, x_2)) = [[1A]] + [[-I]] * x_1 + [[0A]] * x_2 86.65/27.25 >>> 86.65/27.25 86.65/27.25 <<< 86.65/27.25 POL(tt) = [[2A]] 86.65/27.25 >>> 86.65/27.25 86.65/27.25 <<< 86.65/27.25 POL(MARK(x_1)) = [[1A]] + [[0A]] * x_1 86.65/27.25 >>> 86.65/27.25 86.65/27.25 <<< 86.65/27.25 POL(mark(x_1)) = [[1A]] + [[0A]] * x_1 86.65/27.25 >>> 86.65/27.25 86.65/27.25 <<< 86.65/27.25 POL(isNatIList(x_1)) = [[2A]] + [[1A]] * x_1 86.65/27.25 >>> 86.65/27.25 86.65/27.25 <<< 86.65/27.25 POL(cons(x_1, x_2)) = [[1A]] + [[-I]] * x_1 + [[1A]] * x_2 86.65/27.25 >>> 86.65/27.25 86.65/27.25 <<< 86.65/27.25 POL(isNat(x_1)) = [[0A]] + [[1A]] * x_1 86.65/27.25 >>> 86.65/27.25 86.65/27.25 <<< 86.65/27.25 POL(isNatList(x_1)) = [[-I]] + [[1A]] * x_1 86.65/27.25 >>> 86.65/27.25 86.65/27.25 <<< 86.65/27.25 POL(active(x_1)) = [[1A]] + [[0A]] * x_1 86.65/27.25 >>> 86.65/27.25 86.65/27.25 <<< 86.65/27.25 POL(take(x_1, x_2)) = [[1A]] + [[0A]] * x_1 + [[0A]] * x_2 86.65/27.25 >>> 86.65/27.25 86.65/27.25 <<< 86.65/27.25 POL(s(x_1)) = [[2A]] + [[1A]] * x_1 86.65/27.25 >>> 86.65/27.25 86.65/27.25 <<< 86.65/27.25 POL(length(x_1)) = [[-I]] + [[0A]] * x_1 86.65/27.25 >>> 86.65/27.25 86.65/27.25 <<< 86.65/27.25 POL(zeros) = [[0A]] 86.65/27.25 >>> 86.65/27.25 86.65/27.25 <<< 86.65/27.25 POL(0) = [[1A]] 86.65/27.25 >>> 86.65/27.25 86.65/27.25 <<< 86.65/27.25 POL(uTake2(x_1, x_2, x_3, x_4)) = [[2A]] + [[-I]] * x_1 + [[1A]] * x_2 + [[-I]] * x_3 + [[1A]] * x_4 86.65/27.25 >>> 86.65/27.25 86.65/27.25 <<< 86.65/27.25 POL(uLength(x_1, x_2)) = [[-I]] + [[0A]] * x_1 + [[1A]] * x_2 86.65/27.25 >>> 86.65/27.25 86.65/27.25 <<< 86.65/27.25 POL(uTake1(x_1)) = [[-I]] + [[0A]] * x_1 86.65/27.25 >>> 86.65/27.25 86.65/27.25 <<< 86.65/27.25 POL(nil) = [[2A]] 86.65/27.25 >>> 86.65/27.25 86.65/27.25 86.65/27.25 The following usable rules [FROCOS05] with respect to the argument filtering of the ordering [JAR06] were oriented: 86.65/27.25 86.65/27.25 active(and(tt, T)) -> mark(T) 86.65/27.25 mark(and(X1, X2)) -> active(and(mark(X1), mark(X2))) 86.65/27.25 active(isNatIList(IL)) -> mark(isNatList(IL)) 86.65/27.25 mark(isNatList(X)) -> active(isNatList(X)) 86.65/27.25 active(isNatList(cons(N, L))) -> mark(and(isNat(N), isNatList(L))) 86.65/27.25 active(isNatList(take(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.25 active(isNatIList(cons(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.25 active(isNat(s(N))) -> mark(isNat(N)) 86.65/27.25 mark(isNat(X)) -> active(isNat(X)) 86.65/27.25 active(isNat(length(L))) -> mark(isNatList(L)) 86.65/27.25 active(zeros) -> mark(cons(0, zeros)) 86.65/27.25 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 86.65/27.25 active(take(s(M), cons(N, IL))) -> mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL)) 86.65/27.25 mark(uTake2(X1, X2, X3, X4)) -> active(uTake2(mark(X1), X2, X3, X4)) 86.65/27.25 active(uTake2(tt, M, N, IL)) -> mark(cons(N, take(M, IL))) 86.65/27.25 active(length(cons(N, L))) -> mark(uLength(and(isNat(N), isNatList(L)), L)) 86.65/27.25 mark(uLength(X1, X2)) -> active(uLength(mark(X1), X2)) 86.65/27.25 active(uLength(tt, L)) -> mark(s(length(L))) 86.65/27.25 mark(s(X)) -> active(s(mark(X))) 86.65/27.25 mark(isNatIList(X)) -> active(isNatIList(X)) 86.65/27.25 mark(uTake1(X)) -> active(uTake1(mark(X))) 86.65/27.25 mark(length(X)) -> active(length(mark(X))) 86.65/27.25 mark(zeros) -> active(zeros) 86.65/27.25 mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) 86.65/27.25 mark(tt) -> active(tt) 86.65/27.25 mark(0) -> active(0) 86.65/27.25 mark(nil) -> active(nil) 86.65/27.25 and(mark(X1), X2) -> and(X1, X2) 86.65/27.25 and(X1, mark(X2)) -> and(X1, X2) 86.65/27.25 and(active(X1), X2) -> and(X1, X2) 86.65/27.25 and(X1, active(X2)) -> and(X1, X2) 86.65/27.25 active(isNat(0)) -> mark(tt) 86.65/27.25 active(isNatIList(zeros)) -> mark(tt) 86.65/27.25 active(isNatList(nil)) -> mark(tt) 86.65/27.25 cons(mark(X1), X2) -> cons(X1, X2) 86.65/27.25 cons(X1, mark(X2)) -> cons(X1, X2) 86.65/27.25 cons(active(X1), X2) -> cons(X1, X2) 86.65/27.25 cons(X1, active(X2)) -> cons(X1, X2) 86.65/27.25 uTake2(mark(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.25 uTake2(X1, mark(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.25 uTake2(X1, X2, mark(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.25 uTake2(X1, X2, X3, mark(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.25 uTake2(active(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.25 uTake2(X1, active(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.25 uTake2(X1, X2, active(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.25 uTake2(X1, X2, X3, active(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.25 uLength(mark(X1), X2) -> uLength(X1, X2) 86.65/27.25 uLength(X1, mark(X2)) -> uLength(X1, X2) 86.65/27.25 uLength(active(X1), X2) -> uLength(X1, X2) 86.65/27.25 uLength(X1, active(X2)) -> uLength(X1, X2) 86.65/27.25 s(mark(X)) -> s(X) 86.65/27.25 s(active(X)) -> s(X) 86.65/27.25 uTake1(mark(X)) -> uTake1(X) 86.65/27.25 uTake1(active(X)) -> uTake1(X) 86.65/27.25 length(mark(X)) -> length(X) 86.65/27.25 length(active(X)) -> length(X) 86.65/27.25 take(mark(X1), X2) -> take(X1, X2) 86.65/27.25 take(X1, mark(X2)) -> take(X1, X2) 86.65/27.25 take(active(X1), X2) -> take(X1, X2) 86.65/27.25 take(X1, active(X2)) -> take(X1, X2) 86.65/27.25 86.65/27.25 86.65/27.25 ---------------------------------------- 86.65/27.25 86.65/27.25 (138) 86.65/27.25 Obligation: 86.65/27.25 Q DP problem: 86.65/27.25 The TRS P consists of the following rules: 86.65/27.25 86.65/27.25 ACTIVE(and(tt, T)) -> MARK(T) 86.65/27.25 MARK(and(X1, X2)) -> ACTIVE(and(mark(X1), mark(X2))) 86.65/27.25 MARK(and(X1, X2)) -> MARK(X2) 86.65/27.25 MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) 86.65/27.25 ACTIVE(isNatIList(cons(N, IL))) -> MARK(and(isNat(N), isNatIList(IL))) 86.65/27.25 MARK(isNatList(X)) -> ACTIVE(isNatList(X)) 86.65/27.25 86.65/27.25 The TRS R consists of the following rules: 86.65/27.25 86.65/27.25 mark(and(X1, X2)) -> active(and(mark(X1), mark(X2))) 86.65/27.25 active(and(tt, T)) -> mark(T) 86.65/27.25 mark(isNatIList(X)) -> active(isNatIList(X)) 86.65/27.25 active(isNatIList(IL)) -> mark(isNatList(IL)) 86.65/27.25 mark(isNatList(X)) -> active(isNatList(X)) 86.65/27.25 active(isNatList(cons(N, L))) -> mark(and(isNat(N), isNatList(L))) 86.65/27.25 active(isNatList(take(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.25 active(isNatIList(cons(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.25 mark(isNat(X)) -> active(isNat(X)) 86.65/27.25 active(isNat(s(N))) -> mark(isNat(N)) 86.65/27.25 active(isNat(length(L))) -> mark(isNatList(L)) 86.65/27.25 mark(s(X)) -> active(s(mark(X))) 86.65/27.25 active(zeros) -> mark(cons(0, zeros)) 86.65/27.25 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 86.65/27.25 mark(uTake1(X)) -> active(uTake1(mark(X))) 86.65/27.25 active(take(s(M), cons(N, IL))) -> mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL)) 86.65/27.25 mark(uTake2(X1, X2, X3, X4)) -> active(uTake2(mark(X1), X2, X3, X4)) 86.65/27.25 active(uTake2(tt, M, N, IL)) -> mark(cons(N, take(M, IL))) 86.65/27.25 active(length(cons(N, L))) -> mark(uLength(and(isNat(N), isNatList(L)), L)) 86.65/27.25 mark(uLength(X1, X2)) -> active(uLength(mark(X1), X2)) 86.65/27.25 active(uLength(tt, L)) -> mark(s(length(L))) 86.65/27.25 mark(length(X)) -> active(length(mark(X))) 86.65/27.25 mark(zeros) -> active(zeros) 86.65/27.25 mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) 86.65/27.25 mark(tt) -> active(tt) 86.65/27.25 mark(0) -> active(0) 86.65/27.25 mark(nil) -> active(nil) 86.65/27.25 take(X1, mark(X2)) -> take(X1, X2) 86.65/27.25 take(mark(X1), X2) -> take(X1, X2) 86.65/27.25 take(active(X1), X2) -> take(X1, X2) 86.65/27.25 take(X1, active(X2)) -> take(X1, X2) 86.65/27.25 and(X1, mark(X2)) -> and(X1, X2) 86.65/27.25 and(mark(X1), X2) -> and(X1, X2) 86.65/27.25 and(active(X1), X2) -> and(X1, X2) 86.65/27.25 and(X1, active(X2)) -> and(X1, X2) 86.65/27.25 active(isNat(0)) -> mark(tt) 86.65/27.25 active(isNatIList(zeros)) -> mark(tt) 86.65/27.25 active(isNatList(nil)) -> mark(tt) 86.65/27.25 s(active(X)) -> s(X) 86.65/27.25 s(mark(X)) -> s(X) 86.65/27.25 cons(X1, mark(X2)) -> cons(X1, X2) 86.65/27.25 cons(mark(X1), X2) -> cons(X1, X2) 86.65/27.25 cons(active(X1), X2) -> cons(X1, X2) 86.65/27.25 cons(X1, active(X2)) -> cons(X1, X2) 86.65/27.25 uTake1(active(X)) -> uTake1(X) 86.65/27.25 uTake1(mark(X)) -> uTake1(X) 86.65/27.25 uTake2(X1, mark(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.25 uTake2(mark(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.25 uTake2(X1, X2, mark(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.25 uTake2(X1, X2, X3, mark(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.25 uTake2(active(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.25 uTake2(X1, active(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.25 uTake2(X1, X2, active(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.25 uTake2(X1, X2, X3, active(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.25 uLength(X1, mark(X2)) -> uLength(X1, X2) 86.65/27.25 uLength(mark(X1), X2) -> uLength(X1, X2) 86.65/27.25 uLength(active(X1), X2) -> uLength(X1, X2) 86.65/27.25 uLength(X1, active(X2)) -> uLength(X1, X2) 86.65/27.25 length(active(X)) -> length(X) 86.65/27.25 length(mark(X)) -> length(X) 86.65/27.25 86.65/27.25 The set Q consists of the following terms: 86.65/27.25 86.65/27.25 active(and(tt, x0)) 86.65/27.25 active(isNatIList(x0)) 86.65/27.25 active(isNat(0)) 86.65/27.25 active(isNat(s(x0))) 86.65/27.25 active(isNat(length(x0))) 86.65/27.25 active(isNatList(nil)) 86.65/27.25 active(isNatList(cons(x0, x1))) 86.65/27.25 active(isNatList(take(x0, x1))) 86.65/27.25 active(zeros) 86.65/27.25 active(take(0, x0)) 86.65/27.25 active(uTake1(tt)) 86.65/27.25 active(take(s(x0), cons(x1, x2))) 86.65/27.25 active(uTake2(tt, x0, x1, x2)) 86.65/27.25 active(length(cons(x0, x1))) 86.65/27.25 active(uLength(tt, x0)) 86.65/27.25 mark(and(x0, x1)) 86.65/27.25 mark(tt) 86.65/27.25 mark(isNatIList(x0)) 86.65/27.25 mark(isNatList(x0)) 86.65/27.25 mark(isNat(x0)) 86.65/27.25 mark(0) 86.65/27.25 mark(s(x0)) 86.65/27.25 mark(length(x0)) 86.65/27.25 mark(zeros) 86.65/27.25 mark(cons(x0, x1)) 86.65/27.25 mark(nil) 86.65/27.25 mark(take(x0, x1)) 86.65/27.25 mark(uTake1(x0)) 86.65/27.25 mark(uTake2(x0, x1, x2, x3)) 86.65/27.25 mark(uLength(x0, x1)) 86.65/27.25 and(mark(x0), x1) 86.65/27.25 and(x0, mark(x1)) 86.65/27.25 and(active(x0), x1) 86.65/27.25 and(x0, active(x1)) 86.65/27.25 isNatIList(mark(x0)) 86.65/27.25 isNatIList(active(x0)) 86.65/27.25 isNatList(mark(x0)) 86.65/27.25 isNatList(active(x0)) 86.65/27.25 isNat(mark(x0)) 86.65/27.25 isNat(active(x0)) 86.65/27.25 s(mark(x0)) 86.65/27.25 s(active(x0)) 86.65/27.25 length(mark(x0)) 86.65/27.25 length(active(x0)) 86.65/27.25 cons(mark(x0), x1) 86.65/27.25 cons(x0, mark(x1)) 86.65/27.25 cons(active(x0), x1) 86.65/27.25 cons(x0, active(x1)) 86.65/27.25 take(mark(x0), x1) 86.65/27.25 take(x0, mark(x1)) 86.65/27.25 take(active(x0), x1) 86.65/27.25 take(x0, active(x1)) 86.65/27.25 uTake1(mark(x0)) 86.65/27.25 uTake1(active(x0)) 86.65/27.25 uTake2(mark(x0), x1, x2, x3) 86.65/27.25 uTake2(x0, mark(x1), x2, x3) 86.65/27.25 uTake2(x0, x1, mark(x2), x3) 86.65/27.25 uTake2(x0, x1, x2, mark(x3)) 86.65/27.25 uTake2(active(x0), x1, x2, x3) 86.65/27.25 uTake2(x0, active(x1), x2, x3) 86.65/27.25 uTake2(x0, x1, active(x2), x3) 86.65/27.25 uTake2(x0, x1, x2, active(x3)) 86.65/27.25 uLength(mark(x0), x1) 86.65/27.25 uLength(x0, mark(x1)) 86.65/27.25 uLength(active(x0), x1) 86.65/27.25 uLength(x0, active(x1)) 86.65/27.25 86.65/27.25 We have to consider all minimal (P,Q,R)-chains. 86.65/27.25 ---------------------------------------- 86.65/27.25 86.65/27.25 (139) DependencyGraphProof (EQUIVALENT) 86.65/27.25 The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 1 SCC with 1 less node. 86.65/27.25 ---------------------------------------- 86.65/27.25 86.65/27.25 (140) 86.65/27.25 Obligation: 86.65/27.25 Q DP problem: 86.65/27.25 The TRS P consists of the following rules: 86.65/27.25 86.65/27.25 MARK(and(X1, X2)) -> ACTIVE(and(mark(X1), mark(X2))) 86.65/27.25 ACTIVE(and(tt, T)) -> MARK(T) 86.65/27.25 MARK(and(X1, X2)) -> MARK(X2) 86.65/27.25 MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) 86.65/27.25 ACTIVE(isNatIList(cons(N, IL))) -> MARK(and(isNat(N), isNatIList(IL))) 86.65/27.25 86.65/27.25 The TRS R consists of the following rules: 86.65/27.25 86.65/27.25 mark(and(X1, X2)) -> active(and(mark(X1), mark(X2))) 86.65/27.25 active(and(tt, T)) -> mark(T) 86.65/27.25 mark(isNatIList(X)) -> active(isNatIList(X)) 86.65/27.25 active(isNatIList(IL)) -> mark(isNatList(IL)) 86.65/27.25 mark(isNatList(X)) -> active(isNatList(X)) 86.65/27.25 active(isNatList(cons(N, L))) -> mark(and(isNat(N), isNatList(L))) 86.65/27.25 active(isNatList(take(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.25 active(isNatIList(cons(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.25 mark(isNat(X)) -> active(isNat(X)) 86.65/27.25 active(isNat(s(N))) -> mark(isNat(N)) 86.65/27.25 active(isNat(length(L))) -> mark(isNatList(L)) 86.65/27.25 mark(s(X)) -> active(s(mark(X))) 86.65/27.25 active(zeros) -> mark(cons(0, zeros)) 86.65/27.25 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 86.65/27.25 mark(uTake1(X)) -> active(uTake1(mark(X))) 86.65/27.25 active(take(s(M), cons(N, IL))) -> mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL)) 86.65/27.25 mark(uTake2(X1, X2, X3, X4)) -> active(uTake2(mark(X1), X2, X3, X4)) 86.65/27.25 active(uTake2(tt, M, N, IL)) -> mark(cons(N, take(M, IL))) 86.65/27.25 active(length(cons(N, L))) -> mark(uLength(and(isNat(N), isNatList(L)), L)) 86.65/27.25 mark(uLength(X1, X2)) -> active(uLength(mark(X1), X2)) 86.65/27.25 active(uLength(tt, L)) -> mark(s(length(L))) 86.65/27.25 mark(length(X)) -> active(length(mark(X))) 86.65/27.25 mark(zeros) -> active(zeros) 86.65/27.25 mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) 86.65/27.25 mark(tt) -> active(tt) 86.65/27.25 mark(0) -> active(0) 86.65/27.25 mark(nil) -> active(nil) 86.65/27.25 take(X1, mark(X2)) -> take(X1, X2) 86.65/27.25 take(mark(X1), X2) -> take(X1, X2) 86.65/27.25 take(active(X1), X2) -> take(X1, X2) 86.65/27.25 take(X1, active(X2)) -> take(X1, X2) 86.65/27.25 and(X1, mark(X2)) -> and(X1, X2) 86.65/27.25 and(mark(X1), X2) -> and(X1, X2) 86.65/27.25 and(active(X1), X2) -> and(X1, X2) 86.65/27.25 and(X1, active(X2)) -> and(X1, X2) 86.65/27.25 active(isNat(0)) -> mark(tt) 86.65/27.25 active(isNatIList(zeros)) -> mark(tt) 86.65/27.25 active(isNatList(nil)) -> mark(tt) 86.65/27.25 s(active(X)) -> s(X) 86.65/27.25 s(mark(X)) -> s(X) 86.65/27.25 cons(X1, mark(X2)) -> cons(X1, X2) 86.65/27.25 cons(mark(X1), X2) -> cons(X1, X2) 86.65/27.25 cons(active(X1), X2) -> cons(X1, X2) 86.65/27.25 cons(X1, active(X2)) -> cons(X1, X2) 86.65/27.25 uTake1(active(X)) -> uTake1(X) 86.65/27.25 uTake1(mark(X)) -> uTake1(X) 86.65/27.25 uTake2(X1, mark(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.25 uTake2(mark(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.25 uTake2(X1, X2, mark(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.25 uTake2(X1, X2, X3, mark(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.25 uTake2(active(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.25 uTake2(X1, active(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.25 uTake2(X1, X2, active(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.25 uTake2(X1, X2, X3, active(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.25 uLength(X1, mark(X2)) -> uLength(X1, X2) 86.65/27.25 uLength(mark(X1), X2) -> uLength(X1, X2) 86.65/27.25 uLength(active(X1), X2) -> uLength(X1, X2) 86.65/27.25 uLength(X1, active(X2)) -> uLength(X1, X2) 86.65/27.25 length(active(X)) -> length(X) 86.65/27.25 length(mark(X)) -> length(X) 86.65/27.25 86.65/27.25 The set Q consists of the following terms: 86.65/27.25 86.65/27.25 active(and(tt, x0)) 86.65/27.25 active(isNatIList(x0)) 86.65/27.25 active(isNat(0)) 86.65/27.25 active(isNat(s(x0))) 86.65/27.25 active(isNat(length(x0))) 86.65/27.25 active(isNatList(nil)) 86.65/27.25 active(isNatList(cons(x0, x1))) 86.65/27.25 active(isNatList(take(x0, x1))) 86.65/27.25 active(zeros) 86.65/27.25 active(take(0, x0)) 86.65/27.25 active(uTake1(tt)) 86.65/27.25 active(take(s(x0), cons(x1, x2))) 86.65/27.25 active(uTake2(tt, x0, x1, x2)) 86.65/27.25 active(length(cons(x0, x1))) 86.65/27.25 active(uLength(tt, x0)) 86.65/27.25 mark(and(x0, x1)) 86.65/27.25 mark(tt) 86.65/27.25 mark(isNatIList(x0)) 86.65/27.25 mark(isNatList(x0)) 86.65/27.25 mark(isNat(x0)) 86.65/27.25 mark(0) 86.65/27.25 mark(s(x0)) 86.65/27.25 mark(length(x0)) 86.65/27.25 mark(zeros) 86.65/27.25 mark(cons(x0, x1)) 86.65/27.25 mark(nil) 86.65/27.25 mark(take(x0, x1)) 86.65/27.25 mark(uTake1(x0)) 86.65/27.25 mark(uTake2(x0, x1, x2, x3)) 86.65/27.25 mark(uLength(x0, x1)) 86.65/27.25 and(mark(x0), x1) 86.65/27.25 and(x0, mark(x1)) 86.65/27.25 and(active(x0), x1) 86.65/27.25 and(x0, active(x1)) 86.65/27.25 isNatIList(mark(x0)) 86.65/27.25 isNatIList(active(x0)) 86.65/27.25 isNatList(mark(x0)) 86.65/27.25 isNatList(active(x0)) 86.65/27.25 isNat(mark(x0)) 86.65/27.25 isNat(active(x0)) 86.65/27.25 s(mark(x0)) 86.65/27.25 s(active(x0)) 86.65/27.25 length(mark(x0)) 86.65/27.25 length(active(x0)) 86.65/27.25 cons(mark(x0), x1) 86.65/27.25 cons(x0, mark(x1)) 86.65/27.25 cons(active(x0), x1) 86.65/27.25 cons(x0, active(x1)) 86.65/27.25 take(mark(x0), x1) 86.65/27.25 take(x0, mark(x1)) 86.65/27.25 take(active(x0), x1) 86.65/27.25 take(x0, active(x1)) 86.65/27.25 uTake1(mark(x0)) 86.65/27.25 uTake1(active(x0)) 86.65/27.25 uTake2(mark(x0), x1, x2, x3) 86.65/27.25 uTake2(x0, mark(x1), x2, x3) 86.65/27.25 uTake2(x0, x1, mark(x2), x3) 86.65/27.25 uTake2(x0, x1, x2, mark(x3)) 86.65/27.25 uTake2(active(x0), x1, x2, x3) 86.65/27.25 uTake2(x0, active(x1), x2, x3) 86.65/27.25 uTake2(x0, x1, active(x2), x3) 86.65/27.25 uTake2(x0, x1, x2, active(x3)) 86.65/27.25 uLength(mark(x0), x1) 86.65/27.25 uLength(x0, mark(x1)) 86.65/27.25 uLength(active(x0), x1) 86.65/27.25 uLength(x0, active(x1)) 86.65/27.25 86.65/27.25 We have to consider all minimal (P,Q,R)-chains. 86.65/27.25 ---------------------------------------- 86.65/27.25 86.65/27.25 (141) QDPOrderProof (EQUIVALENT) 86.65/27.25 We use the reduction pair processor [LPAR04,JAR06]. 86.65/27.25 86.65/27.25 86.65/27.25 The following pairs can be oriented strictly and are deleted. 86.65/27.25 86.65/27.25 ACTIVE(isNatIList(cons(N, IL))) -> MARK(and(isNat(N), isNatIList(IL))) 86.65/27.25 The remaining pairs can at least be oriented weakly. 86.65/27.25 Used ordering: Matrix interpretation [MATRO] with arctic natural numbers [ARCTIC]: 86.65/27.25 86.65/27.25 <<< 86.65/27.25 POL(MARK(x_1)) = [[-I]] + [[0A]] * x_1 86.65/27.25 >>> 86.65/27.25 86.65/27.25 <<< 86.65/27.25 POL(and(x_1, x_2)) = [[5A]] + [[-I]] * x_1 + [[0A]] * x_2 86.65/27.25 >>> 86.65/27.25 86.65/27.25 <<< 86.65/27.25 POL(ACTIVE(x_1)) = [[0A]] + [[0A]] * x_1 86.65/27.25 >>> 86.65/27.25 86.65/27.25 <<< 86.65/27.25 POL(mark(x_1)) = [[4A]] + [[0A]] * x_1 86.65/27.25 >>> 86.65/27.25 86.65/27.25 <<< 86.65/27.25 POL(tt) = [[0A]] 86.65/27.25 >>> 86.65/27.25 86.65/27.25 <<< 86.65/27.25 POL(isNatIList(x_1)) = [[0A]] + [[2A]] * x_1 86.65/27.25 >>> 86.65/27.25 86.65/27.25 <<< 86.65/27.25 POL(cons(x_1, x_2)) = [[4A]] + [[0A]] * x_1 + [[1A]] * x_2 86.65/27.25 >>> 86.65/27.25 86.65/27.25 <<< 86.65/27.25 POL(isNat(x_1)) = [[0A]] + [[2A]] * x_1 86.65/27.25 >>> 86.65/27.25 86.65/27.25 <<< 86.65/27.25 POL(active(x_1)) = [[4A]] + [[0A]] * x_1 86.65/27.25 >>> 86.65/27.25 86.65/27.25 <<< 86.65/27.25 POL(isNatList(x_1)) = [[-I]] + [[2A]] * x_1 86.65/27.25 >>> 86.65/27.25 86.65/27.25 <<< 86.65/27.25 POL(take(x_1, x_2)) = [[3A]] + [[-I]] * x_1 + [[0A]] * x_2 86.65/27.25 >>> 86.65/27.25 86.65/27.25 <<< 86.65/27.25 POL(s(x_1)) = [[-I]] + [[0A]] * x_1 86.65/27.25 >>> 86.65/27.25 86.65/27.25 <<< 86.65/27.25 POL(length(x_1)) = [[5A]] + [[1A]] * x_1 86.65/27.25 >>> 86.65/27.25 86.65/27.25 <<< 86.65/27.25 POL(zeros) = [[0A]] 86.65/27.25 >>> 86.65/27.25 86.65/27.25 <<< 86.65/27.25 POL(0) = [[0A]] 86.65/27.25 >>> 86.65/27.25 86.65/27.25 <<< 86.65/27.25 POL(uTake2(x_1, x_2, x_3, x_4)) = [[-I]] + [[-I]] * x_1 + [[-I]] * x_2 + [[0A]] * x_3 + [[1A]] * x_4 86.65/27.25 >>> 86.65/27.25 86.65/27.25 <<< 86.65/27.25 POL(uLength(x_1, x_2)) = [[5A]] + [[-I]] * x_1 + [[1A]] * x_2 86.65/27.25 >>> 86.65/27.25 86.65/27.25 <<< 86.65/27.25 POL(uTake1(x_1)) = [[0A]] + [[0A]] * x_1 86.65/27.25 >>> 86.65/27.25 86.65/27.25 <<< 86.65/27.25 POL(nil) = [[0A]] 86.65/27.25 >>> 86.65/27.25 86.65/27.25 86.65/27.25 The following usable rules [FROCOS05] with respect to the argument filtering of the ordering [JAR06] were oriented: 86.65/27.25 86.65/27.25 active(and(tt, T)) -> mark(T) 86.65/27.25 mark(and(X1, X2)) -> active(and(mark(X1), mark(X2))) 86.65/27.25 active(isNatIList(IL)) -> mark(isNatList(IL)) 86.65/27.25 mark(isNatList(X)) -> active(isNatList(X)) 86.65/27.25 active(isNatList(cons(N, L))) -> mark(and(isNat(N), isNatList(L))) 86.65/27.25 active(isNatList(take(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.25 active(isNatIList(cons(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.25 active(isNat(s(N))) -> mark(isNat(N)) 86.65/27.25 mark(isNat(X)) -> active(isNat(X)) 86.65/27.25 active(isNat(length(L))) -> mark(isNatList(L)) 86.65/27.25 active(zeros) -> mark(cons(0, zeros)) 86.65/27.25 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 86.65/27.25 active(take(s(M), cons(N, IL))) -> mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL)) 86.65/27.25 mark(uTake2(X1, X2, X3, X4)) -> active(uTake2(mark(X1), X2, X3, X4)) 86.65/27.25 active(uTake2(tt, M, N, IL)) -> mark(cons(N, take(M, IL))) 86.65/27.25 active(length(cons(N, L))) -> mark(uLength(and(isNat(N), isNatList(L)), L)) 86.65/27.25 mark(uLength(X1, X2)) -> active(uLength(mark(X1), X2)) 86.65/27.25 active(uLength(tt, L)) -> mark(s(length(L))) 86.65/27.25 mark(s(X)) -> active(s(mark(X))) 86.65/27.25 mark(isNatIList(X)) -> active(isNatIList(X)) 86.65/27.25 mark(uTake1(X)) -> active(uTake1(mark(X))) 86.65/27.25 mark(length(X)) -> active(length(mark(X))) 86.65/27.25 mark(zeros) -> active(zeros) 86.65/27.25 mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) 86.65/27.25 mark(tt) -> active(tt) 86.65/27.25 mark(0) -> active(0) 86.65/27.25 mark(nil) -> active(nil) 86.65/27.25 and(mark(X1), X2) -> and(X1, X2) 86.65/27.25 and(X1, mark(X2)) -> and(X1, X2) 86.65/27.25 and(active(X1), X2) -> and(X1, X2) 86.65/27.25 and(X1, active(X2)) -> and(X1, X2) 86.65/27.25 active(isNat(0)) -> mark(tt) 86.65/27.25 active(isNatIList(zeros)) -> mark(tt) 86.65/27.25 active(isNatList(nil)) -> mark(tt) 86.65/27.25 cons(mark(X1), X2) -> cons(X1, X2) 86.65/27.25 cons(X1, mark(X2)) -> cons(X1, X2) 86.65/27.25 cons(active(X1), X2) -> cons(X1, X2) 86.65/27.25 cons(X1, active(X2)) -> cons(X1, X2) 86.65/27.25 uTake2(mark(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.25 uTake2(X1, mark(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.25 uTake2(X1, X2, mark(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.25 uTake2(X1, X2, X3, mark(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.25 uTake2(active(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.25 uTake2(X1, active(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.65/27.25 uTake2(X1, X2, active(X3), X4) -> uTake2(X1, X2, X3, X4) 86.65/27.25 uTake2(X1, X2, X3, active(X4)) -> uTake2(X1, X2, X3, X4) 86.65/27.25 uLength(mark(X1), X2) -> uLength(X1, X2) 86.65/27.25 uLength(X1, mark(X2)) -> uLength(X1, X2) 86.65/27.25 uLength(active(X1), X2) -> uLength(X1, X2) 86.65/27.25 uLength(X1, active(X2)) -> uLength(X1, X2) 86.65/27.25 s(mark(X)) -> s(X) 86.65/27.25 s(active(X)) -> s(X) 86.65/27.25 uTake1(mark(X)) -> uTake1(X) 86.65/27.25 uTake1(active(X)) -> uTake1(X) 86.65/27.25 length(mark(X)) -> length(X) 86.65/27.25 length(active(X)) -> length(X) 86.65/27.25 take(mark(X1), X2) -> take(X1, X2) 86.65/27.25 take(X1, mark(X2)) -> take(X1, X2) 86.65/27.25 take(active(X1), X2) -> take(X1, X2) 86.65/27.25 take(X1, active(X2)) -> take(X1, X2) 86.65/27.25 86.65/27.25 86.65/27.25 ---------------------------------------- 86.65/27.25 86.65/27.25 (142) 86.65/27.25 Obligation: 86.65/27.25 Q DP problem: 86.65/27.25 The TRS P consists of the following rules: 86.65/27.25 86.65/27.25 MARK(and(X1, X2)) -> ACTIVE(and(mark(X1), mark(X2))) 86.65/27.25 ACTIVE(and(tt, T)) -> MARK(T) 86.65/27.25 MARK(and(X1, X2)) -> MARK(X2) 86.65/27.25 MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) 86.65/27.25 86.65/27.25 The TRS R consists of the following rules: 86.65/27.25 86.65/27.25 mark(and(X1, X2)) -> active(and(mark(X1), mark(X2))) 86.65/27.25 active(and(tt, T)) -> mark(T) 86.65/27.25 mark(isNatIList(X)) -> active(isNatIList(X)) 86.65/27.25 active(isNatIList(IL)) -> mark(isNatList(IL)) 86.65/27.25 mark(isNatList(X)) -> active(isNatList(X)) 86.65/27.25 active(isNatList(cons(N, L))) -> mark(and(isNat(N), isNatList(L))) 86.65/27.25 active(isNatList(take(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.25 active(isNatIList(cons(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.65/27.25 mark(isNat(X)) -> active(isNat(X)) 86.65/27.25 active(isNat(s(N))) -> mark(isNat(N)) 86.65/27.25 active(isNat(length(L))) -> mark(isNatList(L)) 86.65/27.25 mark(s(X)) -> active(s(mark(X))) 86.65/27.25 active(zeros) -> mark(cons(0, zeros)) 86.65/27.25 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 86.65/27.25 mark(uTake1(X)) -> active(uTake1(mark(X))) 86.65/27.25 active(take(s(M), cons(N, IL))) -> mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL)) 86.65/27.25 mark(uTake2(X1, X2, X3, X4)) -> active(uTake2(mark(X1), X2, X3, X4)) 86.65/27.25 active(uTake2(tt, M, N, IL)) -> mark(cons(N, take(M, IL))) 86.65/27.25 active(length(cons(N, L))) -> mark(uLength(and(isNat(N), isNatList(L)), L)) 86.65/27.25 mark(uLength(X1, X2)) -> active(uLength(mark(X1), X2)) 86.65/27.25 active(uLength(tt, L)) -> mark(s(length(L))) 86.65/27.25 mark(length(X)) -> active(length(mark(X))) 86.65/27.25 mark(zeros) -> active(zeros) 86.65/27.25 mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) 86.65/27.25 mark(tt) -> active(tt) 86.65/27.25 mark(0) -> active(0) 86.81/27.25 mark(nil) -> active(nil) 86.81/27.25 take(X1, mark(X2)) -> take(X1, X2) 86.81/27.25 take(mark(X1), X2) -> take(X1, X2) 86.81/27.25 take(active(X1), X2) -> take(X1, X2) 86.81/27.25 take(X1, active(X2)) -> take(X1, X2) 86.81/27.25 and(X1, mark(X2)) -> and(X1, X2) 86.81/27.25 and(mark(X1), X2) -> and(X1, X2) 86.81/27.25 and(active(X1), X2) -> and(X1, X2) 86.81/27.25 and(X1, active(X2)) -> and(X1, X2) 86.81/27.25 active(isNat(0)) -> mark(tt) 86.81/27.25 active(isNatIList(zeros)) -> mark(tt) 86.81/27.25 active(isNatList(nil)) -> mark(tt) 86.81/27.25 s(active(X)) -> s(X) 86.81/27.25 s(mark(X)) -> s(X) 86.81/27.25 cons(X1, mark(X2)) -> cons(X1, X2) 86.81/27.25 cons(mark(X1), X2) -> cons(X1, X2) 86.81/27.25 cons(active(X1), X2) -> cons(X1, X2) 86.81/27.25 cons(X1, active(X2)) -> cons(X1, X2) 86.81/27.25 uTake1(active(X)) -> uTake1(X) 86.81/27.25 uTake1(mark(X)) -> uTake1(X) 86.81/27.25 uTake2(X1, mark(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.81/27.25 uTake2(mark(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.81/27.25 uTake2(X1, X2, mark(X3), X4) -> uTake2(X1, X2, X3, X4) 86.81/27.25 uTake2(X1, X2, X3, mark(X4)) -> uTake2(X1, X2, X3, X4) 86.81/27.25 uTake2(active(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.81/27.25 uTake2(X1, active(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.81/27.25 uTake2(X1, X2, active(X3), X4) -> uTake2(X1, X2, X3, X4) 86.81/27.25 uTake2(X1, X2, X3, active(X4)) -> uTake2(X1, X2, X3, X4) 86.81/27.25 uLength(X1, mark(X2)) -> uLength(X1, X2) 86.81/27.25 uLength(mark(X1), X2) -> uLength(X1, X2) 86.81/27.25 uLength(active(X1), X2) -> uLength(X1, X2) 86.81/27.25 uLength(X1, active(X2)) -> uLength(X1, X2) 86.81/27.25 length(active(X)) -> length(X) 86.81/27.25 length(mark(X)) -> length(X) 86.81/27.25 86.81/27.25 The set Q consists of the following terms: 86.81/27.25 86.81/27.25 active(and(tt, x0)) 86.81/27.25 active(isNatIList(x0)) 86.81/27.25 active(isNat(0)) 86.81/27.25 active(isNat(s(x0))) 86.81/27.25 active(isNat(length(x0))) 86.81/27.25 active(isNatList(nil)) 86.81/27.25 active(isNatList(cons(x0, x1))) 86.81/27.25 active(isNatList(take(x0, x1))) 86.81/27.25 active(zeros) 86.81/27.25 active(take(0, x0)) 86.81/27.25 active(uTake1(tt)) 86.81/27.25 active(take(s(x0), cons(x1, x2))) 86.81/27.25 active(uTake2(tt, x0, x1, x2)) 86.81/27.25 active(length(cons(x0, x1))) 86.81/27.25 active(uLength(tt, x0)) 86.81/27.25 mark(and(x0, x1)) 86.81/27.25 mark(tt) 86.81/27.25 mark(isNatIList(x0)) 86.81/27.25 mark(isNatList(x0)) 86.81/27.25 mark(isNat(x0)) 86.81/27.25 mark(0) 86.81/27.25 mark(s(x0)) 86.81/27.25 mark(length(x0)) 86.81/27.25 mark(zeros) 86.81/27.25 mark(cons(x0, x1)) 86.81/27.25 mark(nil) 86.81/27.25 mark(take(x0, x1)) 86.81/27.25 mark(uTake1(x0)) 86.81/27.25 mark(uTake2(x0, x1, x2, x3)) 86.81/27.25 mark(uLength(x0, x1)) 86.81/27.25 and(mark(x0), x1) 86.81/27.25 and(x0, mark(x1)) 86.81/27.25 and(active(x0), x1) 86.81/27.25 and(x0, active(x1)) 86.81/27.25 isNatIList(mark(x0)) 86.81/27.25 isNatIList(active(x0)) 86.81/27.25 isNatList(mark(x0)) 86.81/27.25 isNatList(active(x0)) 86.81/27.25 isNat(mark(x0)) 86.81/27.25 isNat(active(x0)) 86.81/27.25 s(mark(x0)) 86.81/27.25 s(active(x0)) 86.81/27.25 length(mark(x0)) 86.81/27.25 length(active(x0)) 86.81/27.25 cons(mark(x0), x1) 86.81/27.25 cons(x0, mark(x1)) 86.81/27.25 cons(active(x0), x1) 86.81/27.25 cons(x0, active(x1)) 86.81/27.25 take(mark(x0), x1) 86.81/27.25 take(x0, mark(x1)) 86.81/27.25 take(active(x0), x1) 86.81/27.25 take(x0, active(x1)) 86.81/27.25 uTake1(mark(x0)) 86.81/27.25 uTake1(active(x0)) 86.81/27.25 uTake2(mark(x0), x1, x2, x3) 86.81/27.25 uTake2(x0, mark(x1), x2, x3) 86.81/27.25 uTake2(x0, x1, mark(x2), x3) 86.81/27.25 uTake2(x0, x1, x2, mark(x3)) 86.81/27.25 uTake2(active(x0), x1, x2, x3) 86.81/27.25 uTake2(x0, active(x1), x2, x3) 86.81/27.25 uTake2(x0, x1, active(x2), x3) 86.81/27.25 uTake2(x0, x1, x2, active(x3)) 86.81/27.25 uLength(mark(x0), x1) 86.81/27.25 uLength(x0, mark(x1)) 86.81/27.25 uLength(active(x0), x1) 86.81/27.25 uLength(x0, active(x1)) 86.81/27.25 86.81/27.25 We have to consider all minimal (P,Q,R)-chains. 86.81/27.25 ---------------------------------------- 86.81/27.25 86.81/27.25 (143) DependencyGraphProof (EQUIVALENT) 86.81/27.25 The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 1 SCC with 1 less node. 86.81/27.25 ---------------------------------------- 86.81/27.25 86.81/27.25 (144) 86.81/27.25 Obligation: 86.81/27.25 Q DP problem: 86.81/27.25 The TRS P consists of the following rules: 86.81/27.25 86.81/27.25 ACTIVE(and(tt, T)) -> MARK(T) 86.81/27.25 MARK(and(X1, X2)) -> ACTIVE(and(mark(X1), mark(X2))) 86.81/27.25 MARK(and(X1, X2)) -> MARK(X2) 86.81/27.25 86.81/27.25 The TRS R consists of the following rules: 86.81/27.25 86.81/27.25 mark(and(X1, X2)) -> active(and(mark(X1), mark(X2))) 86.81/27.25 active(and(tt, T)) -> mark(T) 86.81/27.25 mark(isNatIList(X)) -> active(isNatIList(X)) 86.81/27.25 active(isNatIList(IL)) -> mark(isNatList(IL)) 86.81/27.25 mark(isNatList(X)) -> active(isNatList(X)) 86.81/27.25 active(isNatList(cons(N, L))) -> mark(and(isNat(N), isNatList(L))) 86.81/27.25 active(isNatList(take(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.81/27.25 active(isNatIList(cons(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.81/27.25 mark(isNat(X)) -> active(isNat(X)) 86.81/27.25 active(isNat(s(N))) -> mark(isNat(N)) 86.81/27.25 active(isNat(length(L))) -> mark(isNatList(L)) 86.81/27.25 mark(s(X)) -> active(s(mark(X))) 86.81/27.25 active(zeros) -> mark(cons(0, zeros)) 86.81/27.25 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 86.81/27.25 mark(uTake1(X)) -> active(uTake1(mark(X))) 86.81/27.25 active(take(s(M), cons(N, IL))) -> mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL)) 86.81/27.25 mark(uTake2(X1, X2, X3, X4)) -> active(uTake2(mark(X1), X2, X3, X4)) 86.81/27.25 active(uTake2(tt, M, N, IL)) -> mark(cons(N, take(M, IL))) 86.81/27.25 active(length(cons(N, L))) -> mark(uLength(and(isNat(N), isNatList(L)), L)) 86.81/27.25 mark(uLength(X1, X2)) -> active(uLength(mark(X1), X2)) 86.81/27.25 active(uLength(tt, L)) -> mark(s(length(L))) 86.81/27.25 mark(length(X)) -> active(length(mark(X))) 86.81/27.25 mark(zeros) -> active(zeros) 86.81/27.25 mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) 86.81/27.25 mark(tt) -> active(tt) 86.81/27.25 mark(0) -> active(0) 86.81/27.25 mark(nil) -> active(nil) 86.81/27.25 take(X1, mark(X2)) -> take(X1, X2) 86.81/27.25 take(mark(X1), X2) -> take(X1, X2) 86.81/27.25 take(active(X1), X2) -> take(X1, X2) 86.81/27.25 take(X1, active(X2)) -> take(X1, X2) 86.81/27.25 and(X1, mark(X2)) -> and(X1, X2) 86.81/27.25 and(mark(X1), X2) -> and(X1, X2) 86.81/27.25 and(active(X1), X2) -> and(X1, X2) 86.81/27.25 and(X1, active(X2)) -> and(X1, X2) 86.81/27.25 active(isNat(0)) -> mark(tt) 86.81/27.25 active(isNatIList(zeros)) -> mark(tt) 86.81/27.25 active(isNatList(nil)) -> mark(tt) 86.81/27.25 s(active(X)) -> s(X) 86.81/27.25 s(mark(X)) -> s(X) 86.81/27.25 cons(X1, mark(X2)) -> cons(X1, X2) 86.81/27.25 cons(mark(X1), X2) -> cons(X1, X2) 86.81/27.25 cons(active(X1), X2) -> cons(X1, X2) 86.81/27.25 cons(X1, active(X2)) -> cons(X1, X2) 86.81/27.25 uTake1(active(X)) -> uTake1(X) 86.81/27.25 uTake1(mark(X)) -> uTake1(X) 86.81/27.25 uTake2(X1, mark(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.81/27.25 uTake2(mark(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.81/27.25 uTake2(X1, X2, mark(X3), X4) -> uTake2(X1, X2, X3, X4) 86.81/27.25 uTake2(X1, X2, X3, mark(X4)) -> uTake2(X1, X2, X3, X4) 86.81/27.25 uTake2(active(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.81/27.25 uTake2(X1, active(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.81/27.25 uTake2(X1, X2, active(X3), X4) -> uTake2(X1, X2, X3, X4) 86.81/27.25 uTake2(X1, X2, X3, active(X4)) -> uTake2(X1, X2, X3, X4) 86.81/27.25 uLength(X1, mark(X2)) -> uLength(X1, X2) 86.81/27.25 uLength(mark(X1), X2) -> uLength(X1, X2) 86.81/27.25 uLength(active(X1), X2) -> uLength(X1, X2) 86.81/27.25 uLength(X1, active(X2)) -> uLength(X1, X2) 86.81/27.25 length(active(X)) -> length(X) 86.81/27.25 length(mark(X)) -> length(X) 86.81/27.25 86.81/27.25 The set Q consists of the following terms: 86.81/27.25 86.81/27.25 active(and(tt, x0)) 86.81/27.25 active(isNatIList(x0)) 86.81/27.25 active(isNat(0)) 86.81/27.25 active(isNat(s(x0))) 86.81/27.25 active(isNat(length(x0))) 86.81/27.25 active(isNatList(nil)) 86.81/27.25 active(isNatList(cons(x0, x1))) 86.81/27.25 active(isNatList(take(x0, x1))) 86.81/27.25 active(zeros) 86.81/27.25 active(take(0, x0)) 86.81/27.25 active(uTake1(tt)) 86.81/27.25 active(take(s(x0), cons(x1, x2))) 86.81/27.25 active(uTake2(tt, x0, x1, x2)) 86.81/27.25 active(length(cons(x0, x1))) 86.81/27.25 active(uLength(tt, x0)) 86.81/27.25 mark(and(x0, x1)) 86.81/27.25 mark(tt) 86.81/27.25 mark(isNatIList(x0)) 86.81/27.25 mark(isNatList(x0)) 86.81/27.25 mark(isNat(x0)) 86.81/27.25 mark(0) 86.81/27.25 mark(s(x0)) 86.81/27.25 mark(length(x0)) 86.81/27.25 mark(zeros) 86.81/27.25 mark(cons(x0, x1)) 86.81/27.25 mark(nil) 86.81/27.25 mark(take(x0, x1)) 86.81/27.25 mark(uTake1(x0)) 86.81/27.25 mark(uTake2(x0, x1, x2, x3)) 86.81/27.25 mark(uLength(x0, x1)) 86.81/27.25 and(mark(x0), x1) 86.81/27.25 and(x0, mark(x1)) 86.81/27.25 and(active(x0), x1) 86.81/27.25 and(x0, active(x1)) 86.81/27.25 isNatIList(mark(x0)) 86.81/27.25 isNatIList(active(x0)) 86.81/27.25 isNatList(mark(x0)) 86.81/27.25 isNatList(active(x0)) 86.81/27.25 isNat(mark(x0)) 86.81/27.25 isNat(active(x0)) 86.81/27.25 s(mark(x0)) 86.81/27.25 s(active(x0)) 86.81/27.25 length(mark(x0)) 86.81/27.25 length(active(x0)) 86.81/27.25 cons(mark(x0), x1) 86.81/27.25 cons(x0, mark(x1)) 86.81/27.25 cons(active(x0), x1) 86.81/27.25 cons(x0, active(x1)) 86.81/27.25 take(mark(x0), x1) 86.81/27.25 take(x0, mark(x1)) 86.81/27.25 take(active(x0), x1) 86.81/27.25 take(x0, active(x1)) 86.81/27.25 uTake1(mark(x0)) 86.81/27.25 uTake1(active(x0)) 86.81/27.25 uTake2(mark(x0), x1, x2, x3) 86.81/27.25 uTake2(x0, mark(x1), x2, x3) 86.81/27.25 uTake2(x0, x1, mark(x2), x3) 86.81/27.25 uTake2(x0, x1, x2, mark(x3)) 86.81/27.25 uTake2(active(x0), x1, x2, x3) 86.81/27.25 uTake2(x0, active(x1), x2, x3) 86.81/27.25 uTake2(x0, x1, active(x2), x3) 86.81/27.25 uTake2(x0, x1, x2, active(x3)) 86.81/27.25 uLength(mark(x0), x1) 86.81/27.25 uLength(x0, mark(x1)) 86.81/27.25 uLength(active(x0), x1) 86.81/27.25 uLength(x0, active(x1)) 86.81/27.25 86.81/27.25 We have to consider all minimal (P,Q,R)-chains. 86.81/27.25 ---------------------------------------- 86.81/27.25 86.81/27.25 (145) QDPOrderProof (EQUIVALENT) 86.81/27.25 We use the reduction pair processor [LPAR04,JAR06]. 86.81/27.25 86.81/27.25 86.81/27.25 The following pairs can be oriented strictly and are deleted. 86.81/27.25 86.81/27.25 MARK(and(X1, X2)) -> MARK(X2) 86.81/27.25 The remaining pairs can at least be oriented weakly. 86.81/27.25 Used ordering: Matrix interpretation [MATRO] with arctic natural numbers [ARCTIC]: 86.81/27.25 86.81/27.25 <<< 86.81/27.25 POL(ACTIVE(x_1)) = [[4A]] + [[1A]] * x_1 86.81/27.25 >>> 86.81/27.25 86.81/27.25 <<< 86.81/27.25 POL(and(x_1, x_2)) = [[2A]] + [[-I]] * x_1 + [[1A]] * x_2 86.81/27.25 >>> 86.81/27.25 86.81/27.25 <<< 86.81/27.25 POL(tt) = [[3A]] 86.81/27.25 >>> 86.81/27.25 86.81/27.25 <<< 86.81/27.25 POL(MARK(x_1)) = [[3A]] + [[2A]] * x_1 86.81/27.25 >>> 86.81/27.25 86.81/27.25 <<< 86.81/27.25 POL(mark(x_1)) = [[1A]] + [[0A]] * x_1 86.81/27.25 >>> 86.81/27.25 86.81/27.25 <<< 86.81/27.25 POL(active(x_1)) = [[1A]] + [[0A]] * x_1 86.81/27.25 >>> 86.81/27.25 86.81/27.25 <<< 86.81/27.25 POL(isNatIList(x_1)) = [[-I]] + [[3A]] * x_1 86.81/27.25 >>> 86.81/27.25 86.81/27.25 <<< 86.81/27.25 POL(isNatList(x_1)) = [[-I]] + [[1A]] * x_1 86.81/27.25 >>> 86.81/27.25 86.81/27.25 <<< 86.81/27.25 POL(cons(x_1, x_2)) = [[1A]] + [[-I]] * x_1 + [[1A]] * x_2 86.81/27.25 >>> 86.81/27.25 86.81/27.25 <<< 86.81/27.25 POL(isNat(x_1)) = [[-I]] + [[1A]] * x_1 86.81/27.25 >>> 86.81/27.25 86.81/27.25 <<< 86.81/27.25 POL(take(x_1, x_2)) = [[4A]] + [[3A]] * x_1 + [[3A]] * x_2 86.81/27.25 >>> 86.81/27.25 86.81/27.25 <<< 86.81/27.25 POL(s(x_1)) = [[2A]] + [[1A]] * x_1 86.81/27.25 >>> 86.81/27.25 86.81/27.25 <<< 86.81/27.25 POL(length(x_1)) = [[2A]] + [[1A]] * x_1 86.81/27.25 >>> 86.81/27.25 86.81/27.25 <<< 86.81/27.25 POL(zeros) = [[0A]] 86.81/27.25 >>> 86.81/27.25 86.81/27.25 <<< 86.81/27.25 POL(0) = [[2A]] 86.81/27.25 >>> 86.81/27.25 86.81/27.25 <<< 86.81/27.25 POL(uTake2(x_1, x_2, x_3, x_4)) = [[5A]] + [[-I]] * x_1 + [[4A]] * x_2 + [[-I]] * x_3 + [[4A]] * x_4 86.81/27.25 >>> 86.81/27.25 86.81/27.25 <<< 86.81/27.25 POL(uLength(x_1, x_2)) = [[0A]] + [[0A]] * x_1 + [[2A]] * x_2 86.81/27.25 >>> 86.81/27.25 86.81/27.25 <<< 86.81/27.25 POL(uTake1(x_1)) = [[0A]] + [[-I]] * x_1 86.81/27.25 >>> 86.81/27.25 86.81/27.25 <<< 86.81/27.25 POL(nil) = [[2A]] 86.81/27.25 >>> 86.81/27.25 86.81/27.25 86.81/27.25 The following usable rules [FROCOS05] with respect to the argument filtering of the ordering [JAR06] were oriented: 86.81/27.25 86.81/27.25 active(and(tt, T)) -> mark(T) 86.81/27.25 mark(and(X1, X2)) -> active(and(mark(X1), mark(X2))) 86.81/27.25 active(isNatIList(IL)) -> mark(isNatList(IL)) 86.81/27.25 mark(isNatList(X)) -> active(isNatList(X)) 86.81/27.25 active(isNatList(cons(N, L))) -> mark(and(isNat(N), isNatList(L))) 86.81/27.25 active(isNatList(take(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.81/27.25 active(isNatIList(cons(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.81/27.25 active(isNat(s(N))) -> mark(isNat(N)) 86.81/27.25 mark(isNat(X)) -> active(isNat(X)) 86.81/27.25 active(isNat(length(L))) -> mark(isNatList(L)) 86.81/27.25 active(zeros) -> mark(cons(0, zeros)) 86.81/27.25 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 86.81/27.25 active(take(s(M), cons(N, IL))) -> mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL)) 86.81/27.25 mark(uTake2(X1, X2, X3, X4)) -> active(uTake2(mark(X1), X2, X3, X4)) 86.81/27.25 active(uTake2(tt, M, N, IL)) -> mark(cons(N, take(M, IL))) 86.81/27.25 active(length(cons(N, L))) -> mark(uLength(and(isNat(N), isNatList(L)), L)) 86.81/27.25 mark(uLength(X1, X2)) -> active(uLength(mark(X1), X2)) 86.81/27.25 active(uLength(tt, L)) -> mark(s(length(L))) 86.81/27.25 mark(s(X)) -> active(s(mark(X))) 86.81/27.25 mark(isNatIList(X)) -> active(isNatIList(X)) 86.81/27.25 mark(uTake1(X)) -> active(uTake1(mark(X))) 86.81/27.25 mark(length(X)) -> active(length(mark(X))) 86.81/27.25 mark(zeros) -> active(zeros) 86.81/27.25 mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) 86.81/27.25 mark(tt) -> active(tt) 86.81/27.25 mark(0) -> active(0) 86.81/27.25 mark(nil) -> active(nil) 86.81/27.25 and(mark(X1), X2) -> and(X1, X2) 86.81/27.25 and(X1, mark(X2)) -> and(X1, X2) 86.81/27.25 and(active(X1), X2) -> and(X1, X2) 86.81/27.25 and(X1, active(X2)) -> and(X1, X2) 86.81/27.25 active(isNat(0)) -> mark(tt) 86.81/27.25 active(isNatIList(zeros)) -> mark(tt) 86.81/27.25 active(isNatList(nil)) -> mark(tt) 86.81/27.25 cons(mark(X1), X2) -> cons(X1, X2) 86.81/27.25 cons(X1, mark(X2)) -> cons(X1, X2) 86.81/27.25 cons(active(X1), X2) -> cons(X1, X2) 86.81/27.25 cons(X1, active(X2)) -> cons(X1, X2) 86.81/27.25 uTake2(mark(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.81/27.25 uTake2(X1, mark(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.81/27.25 uTake2(X1, X2, mark(X3), X4) -> uTake2(X1, X2, X3, X4) 86.81/27.25 uTake2(X1, X2, X3, mark(X4)) -> uTake2(X1, X2, X3, X4) 86.81/27.25 uTake2(active(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.81/27.25 uTake2(X1, active(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.81/27.25 uTake2(X1, X2, active(X3), X4) -> uTake2(X1, X2, X3, X4) 86.81/27.25 uTake2(X1, X2, X3, active(X4)) -> uTake2(X1, X2, X3, X4) 86.81/27.25 uLength(mark(X1), X2) -> uLength(X1, X2) 86.81/27.25 uLength(X1, mark(X2)) -> uLength(X1, X2) 86.81/27.25 uLength(active(X1), X2) -> uLength(X1, X2) 86.81/27.25 uLength(X1, active(X2)) -> uLength(X1, X2) 86.81/27.25 s(mark(X)) -> s(X) 86.81/27.25 s(active(X)) -> s(X) 86.81/27.25 uTake1(mark(X)) -> uTake1(X) 86.81/27.25 uTake1(active(X)) -> uTake1(X) 86.81/27.25 length(mark(X)) -> length(X) 86.81/27.25 length(active(X)) -> length(X) 86.81/27.25 take(mark(X1), X2) -> take(X1, X2) 86.81/27.25 take(X1, mark(X2)) -> take(X1, X2) 86.81/27.25 take(active(X1), X2) -> take(X1, X2) 86.81/27.25 take(X1, active(X2)) -> take(X1, X2) 86.81/27.25 86.81/27.25 86.81/27.25 ---------------------------------------- 86.81/27.25 86.81/27.25 (146) 86.81/27.25 Obligation: 86.81/27.25 Q DP problem: 86.81/27.25 The TRS P consists of the following rules: 86.81/27.25 86.81/27.25 ACTIVE(and(tt, T)) -> MARK(T) 86.81/27.25 MARK(and(X1, X2)) -> ACTIVE(and(mark(X1), mark(X2))) 86.81/27.25 86.81/27.25 The TRS R consists of the following rules: 86.81/27.25 86.81/27.25 mark(and(X1, X2)) -> active(and(mark(X1), mark(X2))) 86.81/27.25 active(and(tt, T)) -> mark(T) 86.81/27.25 mark(isNatIList(X)) -> active(isNatIList(X)) 86.81/27.25 active(isNatIList(IL)) -> mark(isNatList(IL)) 86.81/27.25 mark(isNatList(X)) -> active(isNatList(X)) 86.81/27.25 active(isNatList(cons(N, L))) -> mark(and(isNat(N), isNatList(L))) 86.81/27.25 active(isNatList(take(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.81/27.25 active(isNatIList(cons(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.81/27.25 mark(isNat(X)) -> active(isNat(X)) 86.81/27.25 active(isNat(s(N))) -> mark(isNat(N)) 86.81/27.25 active(isNat(length(L))) -> mark(isNatList(L)) 86.81/27.25 mark(s(X)) -> active(s(mark(X))) 86.81/27.25 active(zeros) -> mark(cons(0, zeros)) 86.81/27.25 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 86.81/27.25 mark(uTake1(X)) -> active(uTake1(mark(X))) 86.81/27.25 active(take(s(M), cons(N, IL))) -> mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL)) 86.81/27.25 mark(uTake2(X1, X2, X3, X4)) -> active(uTake2(mark(X1), X2, X3, X4)) 86.81/27.25 active(uTake2(tt, M, N, IL)) -> mark(cons(N, take(M, IL))) 86.81/27.25 active(length(cons(N, L))) -> mark(uLength(and(isNat(N), isNatList(L)), L)) 86.81/27.25 mark(uLength(X1, X2)) -> active(uLength(mark(X1), X2)) 86.81/27.25 active(uLength(tt, L)) -> mark(s(length(L))) 86.81/27.25 mark(length(X)) -> active(length(mark(X))) 86.81/27.25 mark(zeros) -> active(zeros) 86.81/27.25 mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) 86.81/27.25 mark(tt) -> active(tt) 86.81/27.25 mark(0) -> active(0) 86.81/27.25 mark(nil) -> active(nil) 86.81/27.25 take(X1, mark(X2)) -> take(X1, X2) 86.81/27.25 take(mark(X1), X2) -> take(X1, X2) 86.81/27.25 take(active(X1), X2) -> take(X1, X2) 86.81/27.25 take(X1, active(X2)) -> take(X1, X2) 86.81/27.25 and(X1, mark(X2)) -> and(X1, X2) 86.81/27.25 and(mark(X1), X2) -> and(X1, X2) 86.81/27.25 and(active(X1), X2) -> and(X1, X2) 86.81/27.25 and(X1, active(X2)) -> and(X1, X2) 86.81/27.25 active(isNat(0)) -> mark(tt) 86.81/27.25 active(isNatIList(zeros)) -> mark(tt) 86.81/27.25 active(isNatList(nil)) -> mark(tt) 86.81/27.25 s(active(X)) -> s(X) 86.81/27.25 s(mark(X)) -> s(X) 86.81/27.25 cons(X1, mark(X2)) -> cons(X1, X2) 86.81/27.25 cons(mark(X1), X2) -> cons(X1, X2) 86.81/27.25 cons(active(X1), X2) -> cons(X1, X2) 86.81/27.25 cons(X1, active(X2)) -> cons(X1, X2) 86.81/27.25 uTake1(active(X)) -> uTake1(X) 86.81/27.25 uTake1(mark(X)) -> uTake1(X) 86.81/27.25 uTake2(X1, mark(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.81/27.25 uTake2(mark(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.81/27.25 uTake2(X1, X2, mark(X3), X4) -> uTake2(X1, X2, X3, X4) 86.81/27.25 uTake2(X1, X2, X3, mark(X4)) -> uTake2(X1, X2, X3, X4) 86.81/27.25 uTake2(active(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.81/27.25 uTake2(X1, active(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.81/27.25 uTake2(X1, X2, active(X3), X4) -> uTake2(X1, X2, X3, X4) 86.81/27.25 uTake2(X1, X2, X3, active(X4)) -> uTake2(X1, X2, X3, X4) 86.81/27.25 uLength(X1, mark(X2)) -> uLength(X1, X2) 86.81/27.25 uLength(mark(X1), X2) -> uLength(X1, X2) 86.81/27.25 uLength(active(X1), X2) -> uLength(X1, X2) 86.81/27.25 uLength(X1, active(X2)) -> uLength(X1, X2) 86.81/27.25 length(active(X)) -> length(X) 86.81/27.25 length(mark(X)) -> length(X) 86.81/27.25 86.81/27.25 The set Q consists of the following terms: 86.81/27.25 86.81/27.25 active(and(tt, x0)) 86.81/27.25 active(isNatIList(x0)) 86.81/27.25 active(isNat(0)) 86.81/27.25 active(isNat(s(x0))) 86.81/27.25 active(isNat(length(x0))) 86.81/27.25 active(isNatList(nil)) 86.81/27.25 active(isNatList(cons(x0, x1))) 86.81/27.25 active(isNatList(take(x0, x1))) 86.81/27.25 active(zeros) 86.81/27.25 active(take(0, x0)) 86.81/27.25 active(uTake1(tt)) 86.81/27.25 active(take(s(x0), cons(x1, x2))) 86.81/27.25 active(uTake2(tt, x0, x1, x2)) 86.81/27.25 active(length(cons(x0, x1))) 86.81/27.25 active(uLength(tt, x0)) 86.81/27.25 mark(and(x0, x1)) 86.81/27.25 mark(tt) 86.81/27.25 mark(isNatIList(x0)) 86.81/27.25 mark(isNatList(x0)) 86.81/27.25 mark(isNat(x0)) 86.81/27.25 mark(0) 86.81/27.25 mark(s(x0)) 86.81/27.25 mark(length(x0)) 86.81/27.25 mark(zeros) 86.81/27.25 mark(cons(x0, x1)) 86.81/27.25 mark(nil) 86.81/27.25 mark(take(x0, x1)) 86.81/27.25 mark(uTake1(x0)) 86.81/27.25 mark(uTake2(x0, x1, x2, x3)) 86.81/27.25 mark(uLength(x0, x1)) 86.81/27.25 and(mark(x0), x1) 86.81/27.25 and(x0, mark(x1)) 86.81/27.25 and(active(x0), x1) 86.81/27.25 and(x0, active(x1)) 86.81/27.25 isNatIList(mark(x0)) 86.81/27.25 isNatIList(active(x0)) 86.81/27.25 isNatList(mark(x0)) 86.81/27.25 isNatList(active(x0)) 86.81/27.25 isNat(mark(x0)) 86.81/27.25 isNat(active(x0)) 86.81/27.25 s(mark(x0)) 86.81/27.25 s(active(x0)) 86.81/27.25 length(mark(x0)) 86.81/27.25 length(active(x0)) 86.81/27.25 cons(mark(x0), x1) 86.81/27.25 cons(x0, mark(x1)) 86.81/27.25 cons(active(x0), x1) 86.81/27.25 cons(x0, active(x1)) 86.81/27.25 take(mark(x0), x1) 86.81/27.25 take(x0, mark(x1)) 86.81/27.25 take(active(x0), x1) 86.81/27.25 take(x0, active(x1)) 86.81/27.25 uTake1(mark(x0)) 86.81/27.25 uTake1(active(x0)) 86.81/27.25 uTake2(mark(x0), x1, x2, x3) 86.81/27.25 uTake2(x0, mark(x1), x2, x3) 86.81/27.25 uTake2(x0, x1, mark(x2), x3) 86.81/27.25 uTake2(x0, x1, x2, mark(x3)) 86.81/27.25 uTake2(active(x0), x1, x2, x3) 86.81/27.25 uTake2(x0, active(x1), x2, x3) 86.81/27.25 uTake2(x0, x1, active(x2), x3) 86.81/27.25 uTake2(x0, x1, x2, active(x3)) 86.81/27.25 uLength(mark(x0), x1) 86.81/27.25 uLength(x0, mark(x1)) 86.81/27.25 uLength(active(x0), x1) 86.81/27.25 uLength(x0, active(x1)) 86.81/27.25 86.81/27.25 We have to consider all minimal (P,Q,R)-chains. 86.81/27.25 ---------------------------------------- 86.81/27.25 86.81/27.25 (147) QDPOrderProof (EQUIVALENT) 86.81/27.25 We use the reduction pair processor [LPAR04,JAR06]. 86.81/27.25 86.81/27.25 86.81/27.25 The following pairs can be oriented strictly and are deleted. 86.81/27.25 86.81/27.25 MARK(and(X1, X2)) -> ACTIVE(and(mark(X1), mark(X2))) 86.81/27.25 The remaining pairs can at least be oriented weakly. 86.81/27.25 Used ordering: Matrix interpretation [MATRO] with arctic natural numbers [ARCTIC]: 86.81/27.25 86.81/27.25 <<< 86.81/27.25 POL(ACTIVE(x_1)) = [[-I]] + [[0A]] * x_1 86.81/27.25 >>> 86.81/27.25 86.81/27.25 <<< 86.81/27.25 POL(and(x_1, x_2)) = [[2A]] + [[-I]] * x_1 + [[1A]] * x_2 86.81/27.25 >>> 86.81/27.25 86.81/27.25 <<< 86.81/27.25 POL(tt) = [[4A]] 86.81/27.25 >>> 86.81/27.25 86.81/27.25 <<< 86.81/27.25 POL(MARK(x_1)) = [[2A]] + [[1A]] * x_1 86.81/27.25 >>> 86.81/27.25 86.81/27.25 <<< 86.81/27.25 POL(mark(x_1)) = [[1A]] + [[0A]] * x_1 86.81/27.25 >>> 86.81/27.25 86.81/27.25 <<< 86.81/27.25 POL(active(x_1)) = [[1A]] + [[0A]] * x_1 86.81/27.25 >>> 86.81/27.25 86.81/27.25 <<< 86.81/27.25 POL(isNatIList(x_1)) = [[-I]] + [[4A]] * x_1 86.81/27.25 >>> 86.81/27.25 86.81/27.25 <<< 86.81/27.25 POL(isNatList(x_1)) = [[-I]] + [[2A]] * x_1 86.81/27.25 >>> 86.81/27.25 86.81/27.25 <<< 86.81/27.25 POL(cons(x_1, x_2)) = [[0A]] + [[-I]] * x_1 + [[1A]] * x_2 86.81/27.25 >>> 86.81/27.25 86.81/27.25 <<< 86.81/27.25 POL(isNat(x_1)) = [[-I]] + [[0A]] * x_1 86.81/27.25 >>> 86.81/27.25 86.81/27.25 <<< 86.81/27.25 POL(take(x_1, x_2)) = [[4A]] + [[2A]] * x_1 + [[3A]] * x_2 86.81/27.25 >>> 86.81/27.25 86.81/27.25 <<< 86.81/27.25 POL(s(x_1)) = [[3A]] + [[1A]] * x_1 86.81/27.25 >>> 86.81/27.25 86.81/27.25 <<< 86.81/27.25 POL(length(x_1)) = [[3A]] + [[2A]] * x_1 86.81/27.25 >>> 86.81/27.25 86.81/27.25 <<< 86.81/27.25 POL(zeros) = [[0A]] 86.81/27.25 >>> 86.81/27.25 86.81/27.25 <<< 86.81/27.25 POL(0) = [[4A]] 86.81/27.25 >>> 86.81/27.25 86.81/27.25 <<< 86.81/27.25 POL(uTake2(x_1, x_2, x_3, x_4)) = [[5A]] + [[-I]] * x_1 + [[3A]] * x_2 + [[-I]] * x_3 + [[4A]] * x_4 86.81/27.25 >>> 86.81/27.25 86.81/27.25 <<< 86.81/27.25 POL(uLength(x_1, x_2)) = [[3A]] + [[0A]] * x_1 + [[3A]] * x_2 86.81/27.25 >>> 86.81/27.25 86.81/27.25 <<< 86.81/27.25 POL(uTake1(x_1)) = [[0A]] + [[-I]] * x_1 86.81/27.25 >>> 86.81/27.25 86.81/27.25 <<< 86.81/27.25 POL(nil) = [[2A]] 86.81/27.25 >>> 86.81/27.25 86.81/27.25 86.81/27.25 The following usable rules [FROCOS05] with respect to the argument filtering of the ordering [JAR06] were oriented: 86.81/27.25 86.81/27.25 active(and(tt, T)) -> mark(T) 86.81/27.25 mark(and(X1, X2)) -> active(and(mark(X1), mark(X2))) 86.81/27.25 active(isNatIList(IL)) -> mark(isNatList(IL)) 86.81/27.25 mark(isNatList(X)) -> active(isNatList(X)) 86.81/27.25 active(isNatList(cons(N, L))) -> mark(and(isNat(N), isNatList(L))) 86.81/27.25 active(isNatList(take(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.81/27.25 active(isNatIList(cons(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.81/27.25 active(isNat(s(N))) -> mark(isNat(N)) 86.81/27.25 mark(isNat(X)) -> active(isNat(X)) 86.81/27.25 active(isNat(length(L))) -> mark(isNatList(L)) 86.81/27.25 active(zeros) -> mark(cons(0, zeros)) 86.81/27.25 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 86.81/27.25 active(take(s(M), cons(N, IL))) -> mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL)) 86.81/27.25 mark(uTake2(X1, X2, X3, X4)) -> active(uTake2(mark(X1), X2, X3, X4)) 86.81/27.25 active(uTake2(tt, M, N, IL)) -> mark(cons(N, take(M, IL))) 86.81/27.25 active(length(cons(N, L))) -> mark(uLength(and(isNat(N), isNatList(L)), L)) 86.81/27.25 mark(uLength(X1, X2)) -> active(uLength(mark(X1), X2)) 86.81/27.25 active(uLength(tt, L)) -> mark(s(length(L))) 86.81/27.25 mark(s(X)) -> active(s(mark(X))) 86.81/27.25 mark(isNatIList(X)) -> active(isNatIList(X)) 86.81/27.25 mark(uTake1(X)) -> active(uTake1(mark(X))) 86.81/27.25 mark(length(X)) -> active(length(mark(X))) 86.81/27.25 mark(zeros) -> active(zeros) 86.81/27.25 mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) 86.81/27.25 mark(tt) -> active(tt) 86.81/27.25 mark(0) -> active(0) 86.81/27.25 mark(nil) -> active(nil) 86.81/27.25 and(mark(X1), X2) -> and(X1, X2) 86.81/27.25 and(X1, mark(X2)) -> and(X1, X2) 86.81/27.25 and(active(X1), X2) -> and(X1, X2) 86.81/27.25 and(X1, active(X2)) -> and(X1, X2) 86.81/27.25 active(isNat(0)) -> mark(tt) 86.81/27.25 active(isNatIList(zeros)) -> mark(tt) 86.81/27.25 active(isNatList(nil)) -> mark(tt) 86.81/27.25 cons(mark(X1), X2) -> cons(X1, X2) 86.81/27.25 cons(X1, mark(X2)) -> cons(X1, X2) 86.81/27.25 cons(active(X1), X2) -> cons(X1, X2) 86.81/27.25 cons(X1, active(X2)) -> cons(X1, X2) 86.81/27.25 uTake2(mark(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.81/27.25 uTake2(X1, mark(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.81/27.25 uTake2(X1, X2, mark(X3), X4) -> uTake2(X1, X2, X3, X4) 86.81/27.25 uTake2(X1, X2, X3, mark(X4)) -> uTake2(X1, X2, X3, X4) 86.81/27.25 uTake2(active(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.81/27.25 uTake2(X1, active(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.81/27.25 uTake2(X1, X2, active(X3), X4) -> uTake2(X1, X2, X3, X4) 86.81/27.25 uTake2(X1, X2, X3, active(X4)) -> uTake2(X1, X2, X3, X4) 86.81/27.25 uLength(mark(X1), X2) -> uLength(X1, X2) 86.81/27.25 uLength(X1, mark(X2)) -> uLength(X1, X2) 86.81/27.25 uLength(active(X1), X2) -> uLength(X1, X2) 86.81/27.25 uLength(X1, active(X2)) -> uLength(X1, X2) 86.81/27.25 s(mark(X)) -> s(X) 86.81/27.25 s(active(X)) -> s(X) 86.81/27.25 uTake1(mark(X)) -> uTake1(X) 86.81/27.25 uTake1(active(X)) -> uTake1(X) 86.81/27.25 length(mark(X)) -> length(X) 86.81/27.25 length(active(X)) -> length(X) 86.81/27.25 take(mark(X1), X2) -> take(X1, X2) 86.81/27.25 take(X1, mark(X2)) -> take(X1, X2) 86.81/27.25 take(active(X1), X2) -> take(X1, X2) 86.81/27.25 take(X1, active(X2)) -> take(X1, X2) 86.81/27.25 86.81/27.25 86.81/27.25 ---------------------------------------- 86.81/27.25 86.81/27.25 (148) 86.81/27.25 Obligation: 86.81/27.25 Q DP problem: 86.81/27.25 The TRS P consists of the following rules: 86.81/27.25 86.81/27.25 ACTIVE(and(tt, T)) -> MARK(T) 86.81/27.25 86.81/27.25 The TRS R consists of the following rules: 86.81/27.25 86.81/27.25 mark(and(X1, X2)) -> active(and(mark(X1), mark(X2))) 86.81/27.25 active(and(tt, T)) -> mark(T) 86.81/27.25 mark(isNatIList(X)) -> active(isNatIList(X)) 86.81/27.25 active(isNatIList(IL)) -> mark(isNatList(IL)) 86.81/27.25 mark(isNatList(X)) -> active(isNatList(X)) 86.81/27.25 active(isNatList(cons(N, L))) -> mark(and(isNat(N), isNatList(L))) 86.81/27.25 active(isNatList(take(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.81/27.25 active(isNatIList(cons(N, IL))) -> mark(and(isNat(N), isNatIList(IL))) 86.81/27.25 mark(isNat(X)) -> active(isNat(X)) 86.81/27.25 active(isNat(s(N))) -> mark(isNat(N)) 86.81/27.25 active(isNat(length(L))) -> mark(isNatList(L)) 86.81/27.25 mark(s(X)) -> active(s(mark(X))) 86.81/27.25 active(zeros) -> mark(cons(0, zeros)) 86.81/27.25 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 86.81/27.25 mark(uTake1(X)) -> active(uTake1(mark(X))) 86.81/27.25 active(take(s(M), cons(N, IL))) -> mark(uTake2(and(isNat(M), and(isNat(N), isNatIList(IL))), M, N, IL)) 86.81/27.25 mark(uTake2(X1, X2, X3, X4)) -> active(uTake2(mark(X1), X2, X3, X4)) 86.81/27.25 active(uTake2(tt, M, N, IL)) -> mark(cons(N, take(M, IL))) 86.81/27.25 active(length(cons(N, L))) -> mark(uLength(and(isNat(N), isNatList(L)), L)) 86.81/27.25 mark(uLength(X1, X2)) -> active(uLength(mark(X1), X2)) 86.81/27.25 active(uLength(tt, L)) -> mark(s(length(L))) 86.81/27.25 mark(length(X)) -> active(length(mark(X))) 86.81/27.25 mark(zeros) -> active(zeros) 86.81/27.25 mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) 86.81/27.25 mark(tt) -> active(tt) 86.81/27.25 mark(0) -> active(0) 86.81/27.25 mark(nil) -> active(nil) 86.81/27.25 take(X1, mark(X2)) -> take(X1, X2) 86.81/27.25 take(mark(X1), X2) -> take(X1, X2) 86.81/27.25 take(active(X1), X2) -> take(X1, X2) 86.81/27.25 take(X1, active(X2)) -> take(X1, X2) 86.81/27.25 and(X1, mark(X2)) -> and(X1, X2) 86.81/27.25 and(mark(X1), X2) -> and(X1, X2) 86.81/27.25 and(active(X1), X2) -> and(X1, X2) 86.81/27.25 and(X1, active(X2)) -> and(X1, X2) 86.81/27.25 active(isNat(0)) -> mark(tt) 86.81/27.25 active(isNatIList(zeros)) -> mark(tt) 86.81/27.25 active(isNatList(nil)) -> mark(tt) 86.81/27.25 s(active(X)) -> s(X) 86.81/27.25 s(mark(X)) -> s(X) 86.81/27.25 cons(X1, mark(X2)) -> cons(X1, X2) 86.81/27.25 cons(mark(X1), X2) -> cons(X1, X2) 86.81/27.25 cons(active(X1), X2) -> cons(X1, X2) 86.81/27.25 cons(X1, active(X2)) -> cons(X1, X2) 86.81/27.25 uTake1(active(X)) -> uTake1(X) 86.81/27.25 uTake1(mark(X)) -> uTake1(X) 86.81/27.25 uTake2(X1, mark(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.81/27.25 uTake2(mark(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.81/27.25 uTake2(X1, X2, mark(X3), X4) -> uTake2(X1, X2, X3, X4) 86.81/27.25 uTake2(X1, X2, X3, mark(X4)) -> uTake2(X1, X2, X3, X4) 86.81/27.25 uTake2(active(X1), X2, X3, X4) -> uTake2(X1, X2, X3, X4) 86.81/27.25 uTake2(X1, active(X2), X3, X4) -> uTake2(X1, X2, X3, X4) 86.81/27.25 uTake2(X1, X2, active(X3), X4) -> uTake2(X1, X2, X3, X4) 86.81/27.25 uTake2(X1, X2, X3, active(X4)) -> uTake2(X1, X2, X3, X4) 86.81/27.25 uLength(X1, mark(X2)) -> uLength(X1, X2) 86.81/27.25 uLength(mark(X1), X2) -> uLength(X1, X2) 86.81/27.25 uLength(active(X1), X2) -> uLength(X1, X2) 86.81/27.25 uLength(X1, active(X2)) -> uLength(X1, X2) 86.81/27.25 length(active(X)) -> length(X) 86.81/27.25 length(mark(X)) -> length(X) 86.81/27.25 86.81/27.25 The set Q consists of the following terms: 86.81/27.25 86.81/27.25 active(and(tt, x0)) 86.81/27.25 active(isNatIList(x0)) 86.81/27.25 active(isNat(0)) 86.81/27.25 active(isNat(s(x0))) 86.81/27.25 active(isNat(length(x0))) 86.81/27.25 active(isNatList(nil)) 86.81/27.25 active(isNatList(cons(x0, x1))) 86.81/27.25 active(isNatList(take(x0, x1))) 86.81/27.25 active(zeros) 86.81/27.25 active(take(0, x0)) 86.81/27.25 active(uTake1(tt)) 86.81/27.25 active(take(s(x0), cons(x1, x2))) 86.81/27.25 active(uTake2(tt, x0, x1, x2)) 86.81/27.25 active(length(cons(x0, x1))) 86.81/27.25 active(uLength(tt, x0)) 86.81/27.25 mark(and(x0, x1)) 86.81/27.25 mark(tt) 86.81/27.25 mark(isNatIList(x0)) 86.81/27.25 mark(isNatList(x0)) 86.81/27.25 mark(isNat(x0)) 86.81/27.25 mark(0) 86.81/27.25 mark(s(x0)) 86.81/27.25 mark(length(x0)) 86.81/27.25 mark(zeros) 86.81/27.25 mark(cons(x0, x1)) 86.81/27.25 mark(nil) 86.81/27.25 mark(take(x0, x1)) 86.81/27.25 mark(uTake1(x0)) 86.81/27.25 mark(uTake2(x0, x1, x2, x3)) 86.81/27.25 mark(uLength(x0, x1)) 86.81/27.25 and(mark(x0), x1) 86.81/27.25 and(x0, mark(x1)) 86.81/27.25 and(active(x0), x1) 86.81/27.25 and(x0, active(x1)) 86.81/27.25 isNatIList(mark(x0)) 86.81/27.25 isNatIList(active(x0)) 86.81/27.25 isNatList(mark(x0)) 86.81/27.25 isNatList(active(x0)) 86.81/27.25 isNat(mark(x0)) 86.81/27.25 isNat(active(x0)) 86.81/27.25 s(mark(x0)) 86.81/27.25 s(active(x0)) 86.81/27.25 length(mark(x0)) 86.81/27.25 length(active(x0)) 86.81/27.25 cons(mark(x0), x1) 86.81/27.25 cons(x0, mark(x1)) 86.81/27.25 cons(active(x0), x1) 86.81/27.25 cons(x0, active(x1)) 86.81/27.25 take(mark(x0), x1) 86.81/27.25 take(x0, mark(x1)) 86.81/27.25 take(active(x0), x1) 86.81/27.25 take(x0, active(x1)) 86.81/27.25 uTake1(mark(x0)) 86.81/27.25 uTake1(active(x0)) 86.81/27.25 uTake2(mark(x0), x1, x2, x3) 86.81/27.25 uTake2(x0, mark(x1), x2, x3) 86.81/27.25 uTake2(x0, x1, mark(x2), x3) 86.81/27.25 uTake2(x0, x1, x2, mark(x3)) 86.81/27.25 uTake2(active(x0), x1, x2, x3) 86.81/27.25 uTake2(x0, active(x1), x2, x3) 86.81/27.25 uTake2(x0, x1, active(x2), x3) 86.81/27.25 uTake2(x0, x1, x2, active(x3)) 86.81/27.25 uLength(mark(x0), x1) 86.81/27.25 uLength(x0, mark(x1)) 86.81/27.25 uLength(active(x0), x1) 86.81/27.25 uLength(x0, active(x1)) 86.81/27.25 86.81/27.25 We have to consider all minimal (P,Q,R)-chains. 86.81/27.25 ---------------------------------------- 86.81/27.25 86.81/27.25 (149) DependencyGraphProof (EQUIVALENT) 86.81/27.25 The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 0 SCCs with 1 less node. 86.81/27.25 ---------------------------------------- 86.81/27.25 86.81/27.25 (150) 86.81/27.25 TRUE 86.83/27.29 EOF