YES proof of /export/starexec/sandbox/benchmark/theBenchmark.xml # AProVE Commit ID: 794c25de1cacf0d048858bcd21c9a779e1221865 marcel 20200619 unpublished dirty Termination w.r.t. Q of the given QTRS could be proven: (0) QTRS (1) DependencyPairsProof [EQUIVALENT, 191 ms] (2) QDP (3) DependencyGraphProof [EQUIVALENT, 8 ms] (4) AND (5) QDP (6) UsableRulesProof [EQUIVALENT, 0 ms] (7) QDP (8) QReductionProof [EQUIVALENT, 0 ms] (9) QDP (10) QDPSizeChangeProof [EQUIVALENT, 0 ms] (11) YES (12) QDP (13) UsableRulesProof [EQUIVALENT, 0 ms] (14) QDP (15) QReductionProof [EQUIVALENT, 0 ms] (16) QDP (17) QDPSizeChangeProof [EQUIVALENT, 0 ms] (18) YES (19) QDP (20) UsableRulesProof [EQUIVALENT, 0 ms] (21) QDP (22) QReductionProof [EQUIVALENT, 0 ms] (23) QDP (24) QDPSizeChangeProof [EQUIVALENT, 0 ms] (25) YES (26) QDP (27) UsableRulesProof [EQUIVALENT, 0 ms] (28) QDP (29) QReductionProof [EQUIVALENT, 0 ms] (30) QDP (31) QDPSizeChangeProof [EQUIVALENT, 0 ms] (32) YES (33) QDP (34) UsableRulesProof [EQUIVALENT, 0 ms] (35) QDP (36) QReductionProof [EQUIVALENT, 0 ms] (37) QDP (38) QDPSizeChangeProof [EQUIVALENT, 0 ms] (39) YES (40) QDP (41) UsableRulesProof [EQUIVALENT, 0 ms] (42) QDP (43) QReductionProof [EQUIVALENT, 1 ms] (44) QDP (45) QDPSizeChangeProof [EQUIVALENT, 0 ms] (46) YES (47) QDP (48) UsableRulesProof [EQUIVALENT, 0 ms] (49) QDP (50) QReductionProof [EQUIVALENT, 0 ms] (51) QDP (52) QDPSizeChangeProof [EQUIVALENT, 0 ms] (53) YES (54) QDP (55) UsableRulesProof [EQUIVALENT, 0 ms] (56) QDP (57) QReductionProof [EQUIVALENT, 0 ms] (58) QDP (59) QDPSizeChangeProof [EQUIVALENT, 0 ms] (60) YES (61) QDP (62) UsableRulesProof [EQUIVALENT, 0 ms] (63) QDP (64) QReductionProof [EQUIVALENT, 1 ms] (65) QDP (66) QDPSizeChangeProof [EQUIVALENT, 0 ms] (67) YES (68) QDP (69) UsableRulesProof [EQUIVALENT, 0 ms] (70) QDP (71) QReductionProof [EQUIVALENT, 0 ms] (72) QDP (73) QDPSizeChangeProof [EQUIVALENT, 0 ms] (74) YES (75) QDP (76) UsableRulesProof [EQUIVALENT, 0 ms] (77) QDP (78) QReductionProof [EQUIVALENT, 0 ms] (79) QDP (80) QDPSizeChangeProof [EQUIVALENT, 0 ms] (81) YES (82) QDP (83) UsableRulesProof [EQUIVALENT, 0 ms] (84) QDP (85) QReductionProof [EQUIVALENT, 1 ms] (86) QDP (87) QDPSizeChangeProof [EQUIVALENT, 0 ms] (88) YES (89) QDP (90) UsableRulesProof [EQUIVALENT, 0 ms] (91) QDP (92) QReductionProof [EQUIVALENT, 2 ms] (93) QDP (94) QDPSizeChangeProof [EQUIVALENT, 0 ms] (95) YES (96) QDP (97) UsableRulesProof [EQUIVALENT, 0 ms] (98) QDP (99) QReductionProof [EQUIVALENT, 0 ms] (100) QDP (101) QDPSizeChangeProof [EQUIVALENT, 0 ms] (102) YES (103) QDP (104) UsableRulesProof [EQUIVALENT, 0 ms] (105) QDP (106) QReductionProof [EQUIVALENT, 0 ms] (107) QDP (108) QDPSizeChangeProof [EQUIVALENT, 0 ms] (109) YES (110) QDP (111) UsableRulesProof [EQUIVALENT, 0 ms] (112) QDP (113) QReductionProof [EQUIVALENT, 0 ms] (114) QDP (115) QDPSizeChangeProof [EQUIVALENT, 0 ms] (116) YES (117) QDP (118) UsableRulesProof [EQUIVALENT, 0 ms] (119) QDP (120) QReductionProof [EQUIVALENT, 0 ms] (121) QDP (122) QDPSizeChangeProof [EQUIVALENT, 0 ms] (123) YES (124) QDP (125) UsableRulesProof [EQUIVALENT, 0 ms] (126) QDP (127) QReductionProof [EQUIVALENT, 0 ms] (128) QDP (129) QDPSizeChangeProof [EQUIVALENT, 0 ms] (130) YES (131) QDP (132) UsableRulesProof [EQUIVALENT, 0 ms] (133) QDP (134) QReductionProof [EQUIVALENT, 0 ms] (135) QDP (136) QDPSizeChangeProof [EQUIVALENT, 0 ms] (137) YES (138) QDP (139) UsableRulesProof [EQUIVALENT, 0 ms] (140) QDP (141) QReductionProof [EQUIVALENT, 0 ms] (142) QDP (143) QDPSizeChangeProof [EQUIVALENT, 0 ms] (144) YES (145) QDP (146) UsableRulesProof [EQUIVALENT, 0 ms] (147) QDP (148) QReductionProof [EQUIVALENT, 0 ms] (149) QDP (150) QDPSizeChangeProof [EQUIVALENT, 0 ms] (151) YES (152) QDP (153) UsableRulesProof [EQUIVALENT, 0 ms] (154) QDP (155) QReductionProof [EQUIVALENT, 0 ms] (156) QDP (157) QDPSizeChangeProof [EQUIVALENT, 0 ms] (158) YES (159) QDP (160) UsableRulesProof [EQUIVALENT, 0 ms] (161) QDP (162) QDPOrderProof [EQUIVALENT, 875 ms] (163) QDP (164) QDPOrderProof [EQUIVALENT, 70 ms] (165) QDP (166) QDPOrderProof [EQUIVALENT, 816 ms] (167) QDP (168) QDPQMonotonicMRRProof [EQUIVALENT, 434 ms] (169) QDP (170) QDPQMonotonicMRRProof [EQUIVALENT, 485 ms] (171) QDP (172) DependencyGraphProof [EQUIVALENT, 0 ms] (173) QDP (174) QDPOrderProof [EQUIVALENT, 905 ms] (175) QDP (176) DependencyGraphProof [EQUIVALENT, 0 ms] (177) QDP (178) QDPOrderProof [EQUIVALENT, 593 ms] (179) QDP (180) DependencyGraphProof [EQUIVALENT, 0 ms] (181) QDP (182) QDPOrderProof [EQUIVALENT, 584 ms] (183) QDP (184) DependencyGraphProof [EQUIVALENT, 0 ms] (185) QDP (186) QDPOrderProof [EQUIVALENT, 518 ms] (187) QDP (188) QDPOrderProof [EQUIVALENT, 984 ms] (189) QDP (190) DependencyGraphProof [EQUIVALENT, 0 ms] (191) QDP (192) QDPOrderProof [EQUIVALENT, 915 ms] (193) QDP (194) QDPOrderProof [EQUIVALENT, 587 ms] (195) QDP (196) DependencyGraphProof [EQUIVALENT, 0 ms] (197) QDP (198) QDPQMonotonicMRRProof [EQUIVALENT, 419 ms] (199) QDP (200) QDPQMonotonicMRRProof [EQUIVALENT, 414 ms] (201) QDP (202) QDPQMonotonicMRRProof [EQUIVALENT, 369 ms] (203) QDP (204) QDPQMonotonicMRRProof [EQUIVALENT, 245 ms] (205) QDP (206) QDPQMonotonicMRRProof [EQUIVALENT, 319 ms] (207) QDP (208) QDPOrderProof [EQUIVALENT, 420 ms] (209) QDP (210) QDPOrderProof [EQUIVALENT, 1012 ms] (211) QDP (212) DependencyGraphProof [EQUIVALENT, 0 ms] (213) QDP (214) QDPOrderProof [EQUIVALENT, 400 ms] (215) QDP (216) QDPOrderProof [EQUIVALENT, 396 ms] (217) QDP (218) QDPQMonotonicMRRProof [EQUIVALENT, 274 ms] (219) QDP (220) QDPQMonotonicMRRProof [EQUIVALENT, 371 ms] (221) QDP (222) QDPOrderProof [EQUIVALENT, 508 ms] (223) QDP (224) QDPOrderProof [EQUIVALENT, 727 ms] (225) QDP (226) DependencyGraphProof [EQUIVALENT, 0 ms] (227) QDP (228) QDPOrderProof [EQUIVALENT, 373 ms] (229) QDP (230) QDPOrderProof [EQUIVALENT, 310 ms] (231) QDP (232) QDPOrderProof [EQUIVALENT, 1005 ms] (233) QDP (234) QDPOrderProof [EQUIVALENT, 1625 ms] (235) QDP (236) DependencyGraphProof [EQUIVALENT, 0 ms] (237) QDP (238) TransformationProof [EQUIVALENT, 0 ms] (239) QDP (240) QDPOrderProof [EQUIVALENT, 0 ms] (241) QDP (242) DependencyGraphProof [EQUIVALENT, 0 ms] (243) TRUE ---------------------------------------- (0) Obligation: Q restricted rewrite system: The TRS R consists of the following rules: active(zeros) -> mark(cons(0, zeros)) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) active(U42(tt)) -> mark(tt) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) active(U52(tt)) -> mark(tt) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) active(U62(tt)) -> mark(tt) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) active(U72(tt, L)) -> mark(s(length(L))) active(U81(tt)) -> mark(nil) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(0)) -> mark(tt) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) active(isNatIList(V)) -> mark(U31(isNatList(V))) active(isNatIList(zeros)) -> mark(tt) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) active(isNatList(nil)) -> mark(tt) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) active(length(nil)) -> mark(0) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) active(take(0, IL)) -> mark(U81(isNatIList(IL))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) mark(0) -> active(0) mark(U11(X)) -> active(U11(mark(X))) mark(tt) -> active(tt) mark(U21(X)) -> active(U21(mark(X))) mark(U31(X)) -> active(U31(mark(X))) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) mark(U42(X)) -> active(U42(mark(X))) mark(isNatIList(X)) -> active(isNatIList(X)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) mark(U52(X)) -> active(U52(mark(X))) mark(isNatList(X)) -> active(isNatList(X)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) mark(U62(X)) -> active(U62(mark(X))) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) mark(isNat(X)) -> active(isNat(X)) mark(s(X)) -> active(s(mark(X))) mark(length(X)) -> active(length(mark(X))) mark(U81(X)) -> active(U81(mark(X))) mark(nil) -> active(nil) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) cons(mark(X1), X2) -> cons(X1, X2) cons(X1, mark(X2)) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U11(mark(X)) -> U11(X) U11(active(X)) -> U11(X) U21(mark(X)) -> U21(X) U21(active(X)) -> U21(X) U31(mark(X)) -> U31(X) U31(active(X)) -> U31(X) U41(mark(X1), X2) -> U41(X1, X2) U41(X1, mark(X2)) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U42(mark(X)) -> U42(X) U42(active(X)) -> U42(X) isNatIList(mark(X)) -> isNatIList(X) isNatIList(active(X)) -> isNatIList(X) U51(mark(X1), X2) -> U51(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U52(mark(X)) -> U52(X) U52(active(X)) -> U52(X) isNatList(mark(X)) -> isNatList(X) isNatList(active(X)) -> isNatList(X) U61(mark(X1), X2) -> U61(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U62(mark(X)) -> U62(X) U62(active(X)) -> U62(X) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U72(mark(X1), X2) -> U72(X1, X2) U72(X1, mark(X2)) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) isNat(mark(X)) -> isNat(X) isNat(active(X)) -> isNat(X) s(mark(X)) -> s(X) s(active(X)) -> s(X) length(mark(X)) -> length(X) length(active(X)) -> length(X) U81(mark(X)) -> U81(X) U81(active(X)) -> U81(X) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) take(mark(X1), X2) -> take(X1, X2) take(X1, mark(X2)) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) ---------------------------------------- (1) DependencyPairsProof (EQUIVALENT) Using Dependency Pairs [AG00,LPAR04] we result in the following initial DP problem. ---------------------------------------- (2) Obligation: Q DP problem: The TRS P consists of the following rules: ACTIVE(zeros) -> MARK(cons(0, zeros)) ACTIVE(zeros) -> CONS(0, zeros) ACTIVE(U11(tt)) -> MARK(tt) ACTIVE(U21(tt)) -> MARK(tt) ACTIVE(U31(tt)) -> MARK(tt) ACTIVE(U41(tt, V2)) -> MARK(U42(isNatIList(V2))) ACTIVE(U41(tt, V2)) -> U42^1(isNatIList(V2)) ACTIVE(U41(tt, V2)) -> ISNATILIST(V2) ACTIVE(U42(tt)) -> MARK(tt) ACTIVE(U51(tt, V2)) -> MARK(U52(isNatList(V2))) ACTIVE(U51(tt, V2)) -> U52^1(isNatList(V2)) ACTIVE(U51(tt, V2)) -> ISNATLIST(V2) ACTIVE(U52(tt)) -> MARK(tt) ACTIVE(U61(tt, V2)) -> MARK(U62(isNatIList(V2))) ACTIVE(U61(tt, V2)) -> U62^1(isNatIList(V2)) ACTIVE(U61(tt, V2)) -> ISNATILIST(V2) ACTIVE(U62(tt)) -> MARK(tt) ACTIVE(U71(tt, L, N)) -> MARK(U72(isNat(N), L)) ACTIVE(U71(tt, L, N)) -> U72^1(isNat(N), L) ACTIVE(U71(tt, L, N)) -> ISNAT(N) ACTIVE(U72(tt, L)) -> MARK(s(length(L))) ACTIVE(U72(tt, L)) -> S(length(L)) ACTIVE(U72(tt, L)) -> LENGTH(L) ACTIVE(U81(tt)) -> MARK(nil) ACTIVE(U91(tt, IL, M, N)) -> MARK(U92(isNat(M), IL, M, N)) ACTIVE(U91(tt, IL, M, N)) -> U92^1(isNat(M), IL, M, N) ACTIVE(U91(tt, IL, M, N)) -> ISNAT(M) ACTIVE(U92(tt, IL, M, N)) -> MARK(U93(isNat(N), IL, M, N)) ACTIVE(U92(tt, IL, M, N)) -> U93^1(isNat(N), IL, M, N) ACTIVE(U92(tt, IL, M, N)) -> ISNAT(N) ACTIVE(U93(tt, IL, M, N)) -> MARK(cons(N, take(M, IL))) ACTIVE(U93(tt, IL, M, N)) -> CONS(N, take(M, IL)) ACTIVE(U93(tt, IL, M, N)) -> TAKE(M, IL) ACTIVE(isNat(0)) -> MARK(tt) ACTIVE(isNat(length(V1))) -> MARK(U11(isNatList(V1))) ACTIVE(isNat(length(V1))) -> U11^1(isNatList(V1)) ACTIVE(isNat(length(V1))) -> ISNATLIST(V1) ACTIVE(isNat(s(V1))) -> MARK(U21(isNat(V1))) ACTIVE(isNat(s(V1))) -> U21^1(isNat(V1)) ACTIVE(isNat(s(V1))) -> ISNAT(V1) ACTIVE(isNatIList(V)) -> MARK(U31(isNatList(V))) ACTIVE(isNatIList(V)) -> U31^1(isNatList(V)) ACTIVE(isNatIList(V)) -> ISNATLIST(V) ACTIVE(isNatIList(zeros)) -> MARK(tt) ACTIVE(isNatIList(cons(V1, V2))) -> MARK(U41(isNat(V1), V2)) ACTIVE(isNatIList(cons(V1, V2))) -> U41^1(isNat(V1), V2) ACTIVE(isNatIList(cons(V1, V2))) -> ISNAT(V1) ACTIVE(isNatList(nil)) -> MARK(tt) ACTIVE(isNatList(cons(V1, V2))) -> MARK(U51(isNat(V1), V2)) ACTIVE(isNatList(cons(V1, V2))) -> U51^1(isNat(V1), V2) ACTIVE(isNatList(cons(V1, V2))) -> ISNAT(V1) ACTIVE(isNatList(take(V1, V2))) -> MARK(U61(isNat(V1), V2)) ACTIVE(isNatList(take(V1, V2))) -> U61^1(isNat(V1), V2) ACTIVE(isNatList(take(V1, V2))) -> ISNAT(V1) ACTIVE(length(nil)) -> MARK(0) ACTIVE(length(cons(N, L))) -> MARK(U71(isNatList(L), L, N)) ACTIVE(length(cons(N, L))) -> U71^1(isNatList(L), L, N) ACTIVE(length(cons(N, L))) -> ISNATLIST(L) ACTIVE(take(0, IL)) -> MARK(U81(isNatIList(IL))) ACTIVE(take(0, IL)) -> U81^1(isNatIList(IL)) ACTIVE(take(0, IL)) -> ISNATILIST(IL) ACTIVE(take(s(M), cons(N, IL))) -> MARK(U91(isNatIList(IL), IL, M, N)) ACTIVE(take(s(M), cons(N, IL))) -> U91^1(isNatIList(IL), IL, M, N) ACTIVE(take(s(M), cons(N, IL))) -> ISNATILIST(IL) MARK(zeros) -> ACTIVE(zeros) MARK(cons(X1, X2)) -> ACTIVE(cons(mark(X1), X2)) MARK(cons(X1, X2)) -> CONS(mark(X1), X2) MARK(cons(X1, X2)) -> MARK(X1) MARK(0) -> ACTIVE(0) MARK(U11(X)) -> ACTIVE(U11(mark(X))) MARK(U11(X)) -> U11^1(mark(X)) MARK(U11(X)) -> MARK(X) MARK(tt) -> ACTIVE(tt) MARK(U21(X)) -> ACTIVE(U21(mark(X))) MARK(U21(X)) -> U21^1(mark(X)) MARK(U21(X)) -> MARK(X) MARK(U31(X)) -> ACTIVE(U31(mark(X))) MARK(U31(X)) -> U31^1(mark(X)) MARK(U31(X)) -> MARK(X) MARK(U41(X1, X2)) -> ACTIVE(U41(mark(X1), X2)) MARK(U41(X1, X2)) -> U41^1(mark(X1), X2) MARK(U41(X1, X2)) -> MARK(X1) MARK(U42(X)) -> ACTIVE(U42(mark(X))) MARK(U42(X)) -> U42^1(mark(X)) MARK(U42(X)) -> MARK(X) MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) MARK(U51(X1, X2)) -> ACTIVE(U51(mark(X1), X2)) MARK(U51(X1, X2)) -> U51^1(mark(X1), X2) MARK(U51(X1, X2)) -> MARK(X1) MARK(U52(X)) -> ACTIVE(U52(mark(X))) MARK(U52(X)) -> U52^1(mark(X)) MARK(U52(X)) -> MARK(X) MARK(isNatList(X)) -> ACTIVE(isNatList(X)) MARK(U61(X1, X2)) -> ACTIVE(U61(mark(X1), X2)) MARK(U61(X1, X2)) -> U61^1(mark(X1), X2) MARK(U61(X1, X2)) -> MARK(X1) MARK(U62(X)) -> ACTIVE(U62(mark(X))) MARK(U62(X)) -> U62^1(mark(X)) MARK(U62(X)) -> MARK(X) MARK(U71(X1, X2, X3)) -> ACTIVE(U71(mark(X1), X2, X3)) MARK(U71(X1, X2, X3)) -> U71^1(mark(X1), X2, X3) MARK(U71(X1, X2, X3)) -> MARK(X1) MARK(U72(X1, X2)) -> ACTIVE(U72(mark(X1), X2)) MARK(U72(X1, X2)) -> U72^1(mark(X1), X2) MARK(U72(X1, X2)) -> MARK(X1) MARK(isNat(X)) -> ACTIVE(isNat(X)) MARK(s(X)) -> ACTIVE(s(mark(X))) MARK(s(X)) -> S(mark(X)) MARK(s(X)) -> MARK(X) MARK(length(X)) -> ACTIVE(length(mark(X))) MARK(length(X)) -> LENGTH(mark(X)) MARK(length(X)) -> MARK(X) MARK(U81(X)) -> ACTIVE(U81(mark(X))) MARK(U81(X)) -> U81^1(mark(X)) MARK(U81(X)) -> MARK(X) MARK(nil) -> ACTIVE(nil) MARK(U91(X1, X2, X3, X4)) -> ACTIVE(U91(mark(X1), X2, X3, X4)) MARK(U91(X1, X2, X3, X4)) -> U91^1(mark(X1), X2, X3, X4) MARK(U91(X1, X2, X3, X4)) -> MARK(X1) MARK(U92(X1, X2, X3, X4)) -> ACTIVE(U92(mark(X1), X2, X3, X4)) MARK(U92(X1, X2, X3, X4)) -> U92^1(mark(X1), X2, X3, X4) MARK(U92(X1, X2, X3, X4)) -> MARK(X1) MARK(U93(X1, X2, X3, X4)) -> ACTIVE(U93(mark(X1), X2, X3, X4)) MARK(U93(X1, X2, X3, X4)) -> U93^1(mark(X1), X2, X3, X4) MARK(U93(X1, X2, X3, X4)) -> MARK(X1) MARK(take(X1, X2)) -> ACTIVE(take(mark(X1), mark(X2))) MARK(take(X1, X2)) -> TAKE(mark(X1), mark(X2)) MARK(take(X1, X2)) -> MARK(X1) MARK(take(X1, X2)) -> MARK(X2) CONS(mark(X1), X2) -> CONS(X1, X2) CONS(X1, mark(X2)) -> CONS(X1, X2) CONS(active(X1), X2) -> CONS(X1, X2) CONS(X1, active(X2)) -> CONS(X1, X2) U11^1(mark(X)) -> U11^1(X) U11^1(active(X)) -> U11^1(X) U21^1(mark(X)) -> U21^1(X) U21^1(active(X)) -> U21^1(X) U31^1(mark(X)) -> U31^1(X) U31^1(active(X)) -> U31^1(X) U41^1(mark(X1), X2) -> U41^1(X1, X2) U41^1(X1, mark(X2)) -> U41^1(X1, X2) U41^1(active(X1), X2) -> U41^1(X1, X2) U41^1(X1, active(X2)) -> U41^1(X1, X2) U42^1(mark(X)) -> U42^1(X) U42^1(active(X)) -> U42^1(X) ISNATILIST(mark(X)) -> ISNATILIST(X) ISNATILIST(active(X)) -> ISNATILIST(X) U51^1(mark(X1), X2) -> U51^1(X1, X2) U51^1(X1, mark(X2)) -> U51^1(X1, X2) U51^1(active(X1), X2) -> U51^1(X1, X2) U51^1(X1, active(X2)) -> U51^1(X1, X2) U52^1(mark(X)) -> U52^1(X) U52^1(active(X)) -> U52^1(X) ISNATLIST(mark(X)) -> ISNATLIST(X) ISNATLIST(active(X)) -> ISNATLIST(X) U61^1(mark(X1), X2) -> U61^1(X1, X2) U61^1(X1, mark(X2)) -> U61^1(X1, X2) U61^1(active(X1), X2) -> U61^1(X1, X2) U61^1(X1, active(X2)) -> U61^1(X1, X2) U62^1(mark(X)) -> U62^1(X) U62^1(active(X)) -> U62^1(X) U71^1(mark(X1), X2, X3) -> U71^1(X1, X2, X3) U71^1(X1, mark(X2), X3) -> U71^1(X1, X2, X3) U71^1(X1, X2, mark(X3)) -> U71^1(X1, X2, X3) U71^1(active(X1), X2, X3) -> U71^1(X1, X2, X3) U71^1(X1, active(X2), X3) -> U71^1(X1, X2, X3) U71^1(X1, X2, active(X3)) -> U71^1(X1, X2, X3) U72^1(mark(X1), X2) -> U72^1(X1, X2) U72^1(X1, mark(X2)) -> U72^1(X1, X2) U72^1(active(X1), X2) -> U72^1(X1, X2) U72^1(X1, active(X2)) -> U72^1(X1, X2) ISNAT(mark(X)) -> ISNAT(X) ISNAT(active(X)) -> ISNAT(X) S(mark(X)) -> S(X) S(active(X)) -> S(X) LENGTH(mark(X)) -> LENGTH(X) LENGTH(active(X)) -> LENGTH(X) U81^1(mark(X)) -> U81^1(X) U81^1(active(X)) -> U81^1(X) U91^1(mark(X1), X2, X3, X4) -> U91^1(X1, X2, X3, X4) U91^1(X1, mark(X2), X3, X4) -> U91^1(X1, X2, X3, X4) U91^1(X1, X2, mark(X3), X4) -> U91^1(X1, X2, X3, X4) U91^1(X1, X2, X3, mark(X4)) -> U91^1(X1, X2, X3, X4) U91^1(active(X1), X2, X3, X4) -> U91^1(X1, X2, X3, X4) U91^1(X1, active(X2), X3, X4) -> U91^1(X1, X2, X3, X4) U91^1(X1, X2, active(X3), X4) -> U91^1(X1, X2, X3, X4) U91^1(X1, X2, X3, active(X4)) -> U91^1(X1, X2, X3, X4) U92^1(mark(X1), X2, X3, X4) -> U92^1(X1, X2, X3, X4) U92^1(X1, mark(X2), X3, X4) -> U92^1(X1, X2, X3, X4) U92^1(X1, X2, mark(X3), X4) -> U92^1(X1, X2, X3, X4) U92^1(X1, X2, X3, mark(X4)) -> U92^1(X1, X2, X3, X4) U92^1(active(X1), X2, X3, X4) -> U92^1(X1, X2, X3, X4) U92^1(X1, active(X2), X3, X4) -> U92^1(X1, X2, X3, X4) U92^1(X1, X2, active(X3), X4) -> U92^1(X1, X2, X3, X4) U92^1(X1, X2, X3, active(X4)) -> U92^1(X1, X2, X3, X4) U93^1(mark(X1), X2, X3, X4) -> U93^1(X1, X2, X3, X4) U93^1(X1, mark(X2), X3, X4) -> U93^1(X1, X2, X3, X4) U93^1(X1, X2, mark(X3), X4) -> U93^1(X1, X2, X3, X4) U93^1(X1, X2, X3, mark(X4)) -> U93^1(X1, X2, X3, X4) U93^1(active(X1), X2, X3, X4) -> U93^1(X1, X2, X3, X4) U93^1(X1, active(X2), X3, X4) -> U93^1(X1, X2, X3, X4) U93^1(X1, X2, active(X3), X4) -> U93^1(X1, X2, X3, X4) U93^1(X1, X2, X3, active(X4)) -> U93^1(X1, X2, X3, X4) TAKE(mark(X1), X2) -> TAKE(X1, X2) TAKE(X1, mark(X2)) -> TAKE(X1, X2) TAKE(active(X1), X2) -> TAKE(X1, X2) TAKE(X1, active(X2)) -> TAKE(X1, X2) The TRS R consists of the following rules: active(zeros) -> mark(cons(0, zeros)) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) active(U42(tt)) -> mark(tt) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) active(U52(tt)) -> mark(tt) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) active(U62(tt)) -> mark(tt) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) active(U72(tt, L)) -> mark(s(length(L))) active(U81(tt)) -> mark(nil) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(0)) -> mark(tt) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) active(isNatIList(V)) -> mark(U31(isNatList(V))) active(isNatIList(zeros)) -> mark(tt) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) active(isNatList(nil)) -> mark(tt) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) active(length(nil)) -> mark(0) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) active(take(0, IL)) -> mark(U81(isNatIList(IL))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) mark(0) -> active(0) mark(U11(X)) -> active(U11(mark(X))) mark(tt) -> active(tt) mark(U21(X)) -> active(U21(mark(X))) mark(U31(X)) -> active(U31(mark(X))) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) mark(U42(X)) -> active(U42(mark(X))) mark(isNatIList(X)) -> active(isNatIList(X)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) mark(U52(X)) -> active(U52(mark(X))) mark(isNatList(X)) -> active(isNatList(X)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) mark(U62(X)) -> active(U62(mark(X))) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) mark(isNat(X)) -> active(isNat(X)) mark(s(X)) -> active(s(mark(X))) mark(length(X)) -> active(length(mark(X))) mark(U81(X)) -> active(U81(mark(X))) mark(nil) -> active(nil) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) cons(mark(X1), X2) -> cons(X1, X2) cons(X1, mark(X2)) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U11(mark(X)) -> U11(X) U11(active(X)) -> U11(X) U21(mark(X)) -> U21(X) U21(active(X)) -> U21(X) U31(mark(X)) -> U31(X) U31(active(X)) -> U31(X) U41(mark(X1), X2) -> U41(X1, X2) U41(X1, mark(X2)) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U42(mark(X)) -> U42(X) U42(active(X)) -> U42(X) isNatIList(mark(X)) -> isNatIList(X) isNatIList(active(X)) -> isNatIList(X) U51(mark(X1), X2) -> U51(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U52(mark(X)) -> U52(X) U52(active(X)) -> U52(X) isNatList(mark(X)) -> isNatList(X) isNatList(active(X)) -> isNatList(X) U61(mark(X1), X2) -> U61(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U62(mark(X)) -> U62(X) U62(active(X)) -> U62(X) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U72(mark(X1), X2) -> U72(X1, X2) U72(X1, mark(X2)) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) isNat(mark(X)) -> isNat(X) isNat(active(X)) -> isNat(X) s(mark(X)) -> s(X) s(active(X)) -> s(X) length(mark(X)) -> length(X) length(active(X)) -> length(X) U81(mark(X)) -> U81(X) U81(active(X)) -> U81(X) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) take(mark(X1), X2) -> take(X1, X2) take(X1, mark(X2)) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (3) DependencyGraphProof (EQUIVALENT) The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 23 SCCs with 68 less nodes. ---------------------------------------- (4) Complex Obligation (AND) ---------------------------------------- (5) Obligation: Q DP problem: The TRS P consists of the following rules: TAKE(X1, mark(X2)) -> TAKE(X1, X2) TAKE(mark(X1), X2) -> TAKE(X1, X2) TAKE(active(X1), X2) -> TAKE(X1, X2) TAKE(X1, active(X2)) -> TAKE(X1, X2) The TRS R consists of the following rules: active(zeros) -> mark(cons(0, zeros)) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) active(U42(tt)) -> mark(tt) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) active(U52(tt)) -> mark(tt) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) active(U62(tt)) -> mark(tt) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) active(U72(tt, L)) -> mark(s(length(L))) active(U81(tt)) -> mark(nil) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(0)) -> mark(tt) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) active(isNatIList(V)) -> mark(U31(isNatList(V))) active(isNatIList(zeros)) -> mark(tt) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) active(isNatList(nil)) -> mark(tt) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) active(length(nil)) -> mark(0) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) active(take(0, IL)) -> mark(U81(isNatIList(IL))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) mark(0) -> active(0) mark(U11(X)) -> active(U11(mark(X))) mark(tt) -> active(tt) mark(U21(X)) -> active(U21(mark(X))) mark(U31(X)) -> active(U31(mark(X))) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) mark(U42(X)) -> active(U42(mark(X))) mark(isNatIList(X)) -> active(isNatIList(X)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) mark(U52(X)) -> active(U52(mark(X))) mark(isNatList(X)) -> active(isNatList(X)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) mark(U62(X)) -> active(U62(mark(X))) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) mark(isNat(X)) -> active(isNat(X)) mark(s(X)) -> active(s(mark(X))) mark(length(X)) -> active(length(mark(X))) mark(U81(X)) -> active(U81(mark(X))) mark(nil) -> active(nil) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) cons(mark(X1), X2) -> cons(X1, X2) cons(X1, mark(X2)) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U11(mark(X)) -> U11(X) U11(active(X)) -> U11(X) U21(mark(X)) -> U21(X) U21(active(X)) -> U21(X) U31(mark(X)) -> U31(X) U31(active(X)) -> U31(X) U41(mark(X1), X2) -> U41(X1, X2) U41(X1, mark(X2)) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U42(mark(X)) -> U42(X) U42(active(X)) -> U42(X) isNatIList(mark(X)) -> isNatIList(X) isNatIList(active(X)) -> isNatIList(X) U51(mark(X1), X2) -> U51(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U52(mark(X)) -> U52(X) U52(active(X)) -> U52(X) isNatList(mark(X)) -> isNatList(X) isNatList(active(X)) -> isNatList(X) U61(mark(X1), X2) -> U61(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U62(mark(X)) -> U62(X) U62(active(X)) -> U62(X) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U72(mark(X1), X2) -> U72(X1, X2) U72(X1, mark(X2)) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) isNat(mark(X)) -> isNat(X) isNat(active(X)) -> isNat(X) s(mark(X)) -> s(X) s(active(X)) -> s(X) length(mark(X)) -> length(X) length(active(X)) -> length(X) U81(mark(X)) -> U81(X) U81(active(X)) -> U81(X) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) take(mark(X1), X2) -> take(X1, X2) take(X1, mark(X2)) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (6) UsableRulesProof (EQUIVALENT) 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. ---------------------------------------- (7) Obligation: Q DP problem: The TRS P consists of the following rules: TAKE(X1, mark(X2)) -> TAKE(X1, X2) TAKE(mark(X1), X2) -> TAKE(X1, X2) TAKE(active(X1), X2) -> TAKE(X1, X2) TAKE(X1, active(X2)) -> TAKE(X1, X2) R is empty. The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (8) QReductionProof (EQUIVALENT) We deleted the following terms from Q as each root-symbol of these terms does neither occur in P nor in R.[THIEMANN]. cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) ---------------------------------------- (9) Obligation: Q DP problem: The TRS P consists of the following rules: TAKE(X1, mark(X2)) -> TAKE(X1, X2) TAKE(mark(X1), X2) -> TAKE(X1, X2) TAKE(active(X1), X2) -> TAKE(X1, X2) TAKE(X1, active(X2)) -> TAKE(X1, X2) R is empty. The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (10) QDPSizeChangeProof (EQUIVALENT) 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. From the DPs we obtained the following set of size-change graphs: *TAKE(X1, mark(X2)) -> TAKE(X1, X2) The graph contains the following edges 1 >= 1, 2 > 2 *TAKE(mark(X1), X2) -> TAKE(X1, X2) The graph contains the following edges 1 > 1, 2 >= 2 *TAKE(active(X1), X2) -> TAKE(X1, X2) The graph contains the following edges 1 > 1, 2 >= 2 *TAKE(X1, active(X2)) -> TAKE(X1, X2) The graph contains the following edges 1 >= 1, 2 > 2 ---------------------------------------- (11) YES ---------------------------------------- (12) Obligation: Q DP problem: The TRS P consists of the following rules: U93^1(X1, mark(X2), X3, X4) -> U93^1(X1, X2, X3, X4) U93^1(mark(X1), X2, X3, X4) -> U93^1(X1, X2, X3, X4) U93^1(X1, X2, mark(X3), X4) -> U93^1(X1, X2, X3, X4) U93^1(X1, X2, X3, mark(X4)) -> U93^1(X1, X2, X3, X4) U93^1(active(X1), X2, X3, X4) -> U93^1(X1, X2, X3, X4) U93^1(X1, active(X2), X3, X4) -> U93^1(X1, X2, X3, X4) U93^1(X1, X2, active(X3), X4) -> U93^1(X1, X2, X3, X4) U93^1(X1, X2, X3, active(X4)) -> U93^1(X1, X2, X3, X4) The TRS R consists of the following rules: active(zeros) -> mark(cons(0, zeros)) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) active(U42(tt)) -> mark(tt) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) active(U52(tt)) -> mark(tt) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) active(U62(tt)) -> mark(tt) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) active(U72(tt, L)) -> mark(s(length(L))) active(U81(tt)) -> mark(nil) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(0)) -> mark(tt) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) active(isNatIList(V)) -> mark(U31(isNatList(V))) active(isNatIList(zeros)) -> mark(tt) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) active(isNatList(nil)) -> mark(tt) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) active(length(nil)) -> mark(0) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) active(take(0, IL)) -> mark(U81(isNatIList(IL))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) mark(0) -> active(0) mark(U11(X)) -> active(U11(mark(X))) mark(tt) -> active(tt) mark(U21(X)) -> active(U21(mark(X))) mark(U31(X)) -> active(U31(mark(X))) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) mark(U42(X)) -> active(U42(mark(X))) mark(isNatIList(X)) -> active(isNatIList(X)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) mark(U52(X)) -> active(U52(mark(X))) mark(isNatList(X)) -> active(isNatList(X)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) mark(U62(X)) -> active(U62(mark(X))) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) mark(isNat(X)) -> active(isNat(X)) mark(s(X)) -> active(s(mark(X))) mark(length(X)) -> active(length(mark(X))) mark(U81(X)) -> active(U81(mark(X))) mark(nil) -> active(nil) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) cons(mark(X1), X2) -> cons(X1, X2) cons(X1, mark(X2)) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U11(mark(X)) -> U11(X) U11(active(X)) -> U11(X) U21(mark(X)) -> U21(X) U21(active(X)) -> U21(X) U31(mark(X)) -> U31(X) U31(active(X)) -> U31(X) U41(mark(X1), X2) -> U41(X1, X2) U41(X1, mark(X2)) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U42(mark(X)) -> U42(X) U42(active(X)) -> U42(X) isNatIList(mark(X)) -> isNatIList(X) isNatIList(active(X)) -> isNatIList(X) U51(mark(X1), X2) -> U51(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U52(mark(X)) -> U52(X) U52(active(X)) -> U52(X) isNatList(mark(X)) -> isNatList(X) isNatList(active(X)) -> isNatList(X) U61(mark(X1), X2) -> U61(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U62(mark(X)) -> U62(X) U62(active(X)) -> U62(X) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U72(mark(X1), X2) -> U72(X1, X2) U72(X1, mark(X2)) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) isNat(mark(X)) -> isNat(X) isNat(active(X)) -> isNat(X) s(mark(X)) -> s(X) s(active(X)) -> s(X) length(mark(X)) -> length(X) length(active(X)) -> length(X) U81(mark(X)) -> U81(X) U81(active(X)) -> U81(X) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) take(mark(X1), X2) -> take(X1, X2) take(X1, mark(X2)) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (13) UsableRulesProof (EQUIVALENT) 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. ---------------------------------------- (14) Obligation: Q DP problem: The TRS P consists of the following rules: U93^1(X1, mark(X2), X3, X4) -> U93^1(X1, X2, X3, X4) U93^1(mark(X1), X2, X3, X4) -> U93^1(X1, X2, X3, X4) U93^1(X1, X2, mark(X3), X4) -> U93^1(X1, X2, X3, X4) U93^1(X1, X2, X3, mark(X4)) -> U93^1(X1, X2, X3, X4) U93^1(active(X1), X2, X3, X4) -> U93^1(X1, X2, X3, X4) U93^1(X1, active(X2), X3, X4) -> U93^1(X1, X2, X3, X4) U93^1(X1, X2, active(X3), X4) -> U93^1(X1, X2, X3, X4) U93^1(X1, X2, X3, active(X4)) -> U93^1(X1, X2, X3, X4) R is empty. The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (15) QReductionProof (EQUIVALENT) We deleted the following terms from Q as each root-symbol of these terms does neither occur in P nor in R.[THIEMANN]. cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) ---------------------------------------- (16) Obligation: Q DP problem: The TRS P consists of the following rules: U93^1(X1, mark(X2), X3, X4) -> U93^1(X1, X2, X3, X4) U93^1(mark(X1), X2, X3, X4) -> U93^1(X1, X2, X3, X4) U93^1(X1, X2, mark(X3), X4) -> U93^1(X1, X2, X3, X4) U93^1(X1, X2, X3, mark(X4)) -> U93^1(X1, X2, X3, X4) U93^1(active(X1), X2, X3, X4) -> U93^1(X1, X2, X3, X4) U93^1(X1, active(X2), X3, X4) -> U93^1(X1, X2, X3, X4) U93^1(X1, X2, active(X3), X4) -> U93^1(X1, X2, X3, X4) U93^1(X1, X2, X3, active(X4)) -> U93^1(X1, X2, X3, X4) R is empty. The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (17) QDPSizeChangeProof (EQUIVALENT) 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. From the DPs we obtained the following set of size-change graphs: *U93^1(X1, mark(X2), X3, X4) -> U93^1(X1, X2, X3, X4) The graph contains the following edges 1 >= 1, 2 > 2, 3 >= 3, 4 >= 4 *U93^1(mark(X1), X2, X3, X4) -> U93^1(X1, X2, X3, X4) The graph contains the following edges 1 > 1, 2 >= 2, 3 >= 3, 4 >= 4 *U93^1(X1, X2, mark(X3), X4) -> U93^1(X1, X2, X3, X4) The graph contains the following edges 1 >= 1, 2 >= 2, 3 > 3, 4 >= 4 *U93^1(X1, X2, X3, mark(X4)) -> U93^1(X1, X2, X3, X4) The graph contains the following edges 1 >= 1, 2 >= 2, 3 >= 3, 4 > 4 *U93^1(active(X1), X2, X3, X4) -> U93^1(X1, X2, X3, X4) The graph contains the following edges 1 > 1, 2 >= 2, 3 >= 3, 4 >= 4 *U93^1(X1, active(X2), X3, X4) -> U93^1(X1, X2, X3, X4) The graph contains the following edges 1 >= 1, 2 > 2, 3 >= 3, 4 >= 4 *U93^1(X1, X2, active(X3), X4) -> U93^1(X1, X2, X3, X4) The graph contains the following edges 1 >= 1, 2 >= 2, 3 > 3, 4 >= 4 *U93^1(X1, X2, X3, active(X4)) -> U93^1(X1, X2, X3, X4) The graph contains the following edges 1 >= 1, 2 >= 2, 3 >= 3, 4 > 4 ---------------------------------------- (18) YES ---------------------------------------- (19) Obligation: Q DP problem: The TRS P consists of the following rules: U92^1(X1, mark(X2), X3, X4) -> U92^1(X1, X2, X3, X4) U92^1(mark(X1), X2, X3, X4) -> U92^1(X1, X2, X3, X4) U92^1(X1, X2, mark(X3), X4) -> U92^1(X1, X2, X3, X4) U92^1(X1, X2, X3, mark(X4)) -> U92^1(X1, X2, X3, X4) U92^1(active(X1), X2, X3, X4) -> U92^1(X1, X2, X3, X4) U92^1(X1, active(X2), X3, X4) -> U92^1(X1, X2, X3, X4) U92^1(X1, X2, active(X3), X4) -> U92^1(X1, X2, X3, X4) U92^1(X1, X2, X3, active(X4)) -> U92^1(X1, X2, X3, X4) The TRS R consists of the following rules: active(zeros) -> mark(cons(0, zeros)) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) active(U42(tt)) -> mark(tt) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) active(U52(tt)) -> mark(tt) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) active(U62(tt)) -> mark(tt) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) active(U72(tt, L)) -> mark(s(length(L))) active(U81(tt)) -> mark(nil) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(0)) -> mark(tt) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) active(isNatIList(V)) -> mark(U31(isNatList(V))) active(isNatIList(zeros)) -> mark(tt) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) active(isNatList(nil)) -> mark(tt) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) active(length(nil)) -> mark(0) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) active(take(0, IL)) -> mark(U81(isNatIList(IL))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) mark(0) -> active(0) mark(U11(X)) -> active(U11(mark(X))) mark(tt) -> active(tt) mark(U21(X)) -> active(U21(mark(X))) mark(U31(X)) -> active(U31(mark(X))) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) mark(U42(X)) -> active(U42(mark(X))) mark(isNatIList(X)) -> active(isNatIList(X)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) mark(U52(X)) -> active(U52(mark(X))) mark(isNatList(X)) -> active(isNatList(X)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) mark(U62(X)) -> active(U62(mark(X))) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) mark(isNat(X)) -> active(isNat(X)) mark(s(X)) -> active(s(mark(X))) mark(length(X)) -> active(length(mark(X))) mark(U81(X)) -> active(U81(mark(X))) mark(nil) -> active(nil) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) cons(mark(X1), X2) -> cons(X1, X2) cons(X1, mark(X2)) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U11(mark(X)) -> U11(X) U11(active(X)) -> U11(X) U21(mark(X)) -> U21(X) U21(active(X)) -> U21(X) U31(mark(X)) -> U31(X) U31(active(X)) -> U31(X) U41(mark(X1), X2) -> U41(X1, X2) U41(X1, mark(X2)) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U42(mark(X)) -> U42(X) U42(active(X)) -> U42(X) isNatIList(mark(X)) -> isNatIList(X) isNatIList(active(X)) -> isNatIList(X) U51(mark(X1), X2) -> U51(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U52(mark(X)) -> U52(X) U52(active(X)) -> U52(X) isNatList(mark(X)) -> isNatList(X) isNatList(active(X)) -> isNatList(X) U61(mark(X1), X2) -> U61(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U62(mark(X)) -> U62(X) U62(active(X)) -> U62(X) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U72(mark(X1), X2) -> U72(X1, X2) U72(X1, mark(X2)) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) isNat(mark(X)) -> isNat(X) isNat(active(X)) -> isNat(X) s(mark(X)) -> s(X) s(active(X)) -> s(X) length(mark(X)) -> length(X) length(active(X)) -> length(X) U81(mark(X)) -> U81(X) U81(active(X)) -> U81(X) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) take(mark(X1), X2) -> take(X1, X2) take(X1, mark(X2)) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (20) UsableRulesProof (EQUIVALENT) 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. ---------------------------------------- (21) Obligation: Q DP problem: The TRS P consists of the following rules: U92^1(X1, mark(X2), X3, X4) -> U92^1(X1, X2, X3, X4) U92^1(mark(X1), X2, X3, X4) -> U92^1(X1, X2, X3, X4) U92^1(X1, X2, mark(X3), X4) -> U92^1(X1, X2, X3, X4) U92^1(X1, X2, X3, mark(X4)) -> U92^1(X1, X2, X3, X4) U92^1(active(X1), X2, X3, X4) -> U92^1(X1, X2, X3, X4) U92^1(X1, active(X2), X3, X4) -> U92^1(X1, X2, X3, X4) U92^1(X1, X2, active(X3), X4) -> U92^1(X1, X2, X3, X4) U92^1(X1, X2, X3, active(X4)) -> U92^1(X1, X2, X3, X4) R is empty. The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (22) QReductionProof (EQUIVALENT) We deleted the following terms from Q as each root-symbol of these terms does neither occur in P nor in R.[THIEMANN]. cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) ---------------------------------------- (23) Obligation: Q DP problem: The TRS P consists of the following rules: U92^1(X1, mark(X2), X3, X4) -> U92^1(X1, X2, X3, X4) U92^1(mark(X1), X2, X3, X4) -> U92^1(X1, X2, X3, X4) U92^1(X1, X2, mark(X3), X4) -> U92^1(X1, X2, X3, X4) U92^1(X1, X2, X3, mark(X4)) -> U92^1(X1, X2, X3, X4) U92^1(active(X1), X2, X3, X4) -> U92^1(X1, X2, X3, X4) U92^1(X1, active(X2), X3, X4) -> U92^1(X1, X2, X3, X4) U92^1(X1, X2, active(X3), X4) -> U92^1(X1, X2, X3, X4) U92^1(X1, X2, X3, active(X4)) -> U92^1(X1, X2, X3, X4) R is empty. The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (24) QDPSizeChangeProof (EQUIVALENT) 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. From the DPs we obtained the following set of size-change graphs: *U92^1(X1, mark(X2), X3, X4) -> U92^1(X1, X2, X3, X4) The graph contains the following edges 1 >= 1, 2 > 2, 3 >= 3, 4 >= 4 *U92^1(mark(X1), X2, X3, X4) -> U92^1(X1, X2, X3, X4) The graph contains the following edges 1 > 1, 2 >= 2, 3 >= 3, 4 >= 4 *U92^1(X1, X2, mark(X3), X4) -> U92^1(X1, X2, X3, X4) The graph contains the following edges 1 >= 1, 2 >= 2, 3 > 3, 4 >= 4 *U92^1(X1, X2, X3, mark(X4)) -> U92^1(X1, X2, X3, X4) The graph contains the following edges 1 >= 1, 2 >= 2, 3 >= 3, 4 > 4 *U92^1(active(X1), X2, X3, X4) -> U92^1(X1, X2, X3, X4) The graph contains the following edges 1 > 1, 2 >= 2, 3 >= 3, 4 >= 4 *U92^1(X1, active(X2), X3, X4) -> U92^1(X1, X2, X3, X4) The graph contains the following edges 1 >= 1, 2 > 2, 3 >= 3, 4 >= 4 *U92^1(X1, X2, active(X3), X4) -> U92^1(X1, X2, X3, X4) The graph contains the following edges 1 >= 1, 2 >= 2, 3 > 3, 4 >= 4 *U92^1(X1, X2, X3, active(X4)) -> U92^1(X1, X2, X3, X4) The graph contains the following edges 1 >= 1, 2 >= 2, 3 >= 3, 4 > 4 ---------------------------------------- (25) YES ---------------------------------------- (26) Obligation: Q DP problem: The TRS P consists of the following rules: U91^1(X1, mark(X2), X3, X4) -> U91^1(X1, X2, X3, X4) U91^1(mark(X1), X2, X3, X4) -> U91^1(X1, X2, X3, X4) U91^1(X1, X2, mark(X3), X4) -> U91^1(X1, X2, X3, X4) U91^1(X1, X2, X3, mark(X4)) -> U91^1(X1, X2, X3, X4) U91^1(active(X1), X2, X3, X4) -> U91^1(X1, X2, X3, X4) U91^1(X1, active(X2), X3, X4) -> U91^1(X1, X2, X3, X4) U91^1(X1, X2, active(X3), X4) -> U91^1(X1, X2, X3, X4) U91^1(X1, X2, X3, active(X4)) -> U91^1(X1, X2, X3, X4) The TRS R consists of the following rules: active(zeros) -> mark(cons(0, zeros)) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) active(U42(tt)) -> mark(tt) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) active(U52(tt)) -> mark(tt) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) active(U62(tt)) -> mark(tt) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) active(U72(tt, L)) -> mark(s(length(L))) active(U81(tt)) -> mark(nil) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(0)) -> mark(tt) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) active(isNatIList(V)) -> mark(U31(isNatList(V))) active(isNatIList(zeros)) -> mark(tt) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) active(isNatList(nil)) -> mark(tt) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) active(length(nil)) -> mark(0) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) active(take(0, IL)) -> mark(U81(isNatIList(IL))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) mark(0) -> active(0) mark(U11(X)) -> active(U11(mark(X))) mark(tt) -> active(tt) mark(U21(X)) -> active(U21(mark(X))) mark(U31(X)) -> active(U31(mark(X))) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) mark(U42(X)) -> active(U42(mark(X))) mark(isNatIList(X)) -> active(isNatIList(X)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) mark(U52(X)) -> active(U52(mark(X))) mark(isNatList(X)) -> active(isNatList(X)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) mark(U62(X)) -> active(U62(mark(X))) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) mark(isNat(X)) -> active(isNat(X)) mark(s(X)) -> active(s(mark(X))) mark(length(X)) -> active(length(mark(X))) mark(U81(X)) -> active(U81(mark(X))) mark(nil) -> active(nil) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) cons(mark(X1), X2) -> cons(X1, X2) cons(X1, mark(X2)) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U11(mark(X)) -> U11(X) U11(active(X)) -> U11(X) U21(mark(X)) -> U21(X) U21(active(X)) -> U21(X) U31(mark(X)) -> U31(X) U31(active(X)) -> U31(X) U41(mark(X1), X2) -> U41(X1, X2) U41(X1, mark(X2)) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U42(mark(X)) -> U42(X) U42(active(X)) -> U42(X) isNatIList(mark(X)) -> isNatIList(X) isNatIList(active(X)) -> isNatIList(X) U51(mark(X1), X2) -> U51(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U52(mark(X)) -> U52(X) U52(active(X)) -> U52(X) isNatList(mark(X)) -> isNatList(X) isNatList(active(X)) -> isNatList(X) U61(mark(X1), X2) -> U61(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U62(mark(X)) -> U62(X) U62(active(X)) -> U62(X) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U72(mark(X1), X2) -> U72(X1, X2) U72(X1, mark(X2)) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) isNat(mark(X)) -> isNat(X) isNat(active(X)) -> isNat(X) s(mark(X)) -> s(X) s(active(X)) -> s(X) length(mark(X)) -> length(X) length(active(X)) -> length(X) U81(mark(X)) -> U81(X) U81(active(X)) -> U81(X) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) take(mark(X1), X2) -> take(X1, X2) take(X1, mark(X2)) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (27) UsableRulesProof (EQUIVALENT) 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. ---------------------------------------- (28) Obligation: Q DP problem: The TRS P consists of the following rules: U91^1(X1, mark(X2), X3, X4) -> U91^1(X1, X2, X3, X4) U91^1(mark(X1), X2, X3, X4) -> U91^1(X1, X2, X3, X4) U91^1(X1, X2, mark(X3), X4) -> U91^1(X1, X2, X3, X4) U91^1(X1, X2, X3, mark(X4)) -> U91^1(X1, X2, X3, X4) U91^1(active(X1), X2, X3, X4) -> U91^1(X1, X2, X3, X4) U91^1(X1, active(X2), X3, X4) -> U91^1(X1, X2, X3, X4) U91^1(X1, X2, active(X3), X4) -> U91^1(X1, X2, X3, X4) U91^1(X1, X2, X3, active(X4)) -> U91^1(X1, X2, X3, X4) R is empty. The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (29) QReductionProof (EQUIVALENT) We deleted the following terms from Q as each root-symbol of these terms does neither occur in P nor in R.[THIEMANN]. cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) ---------------------------------------- (30) Obligation: Q DP problem: The TRS P consists of the following rules: U91^1(X1, mark(X2), X3, X4) -> U91^1(X1, X2, X3, X4) U91^1(mark(X1), X2, X3, X4) -> U91^1(X1, X2, X3, X4) U91^1(X1, X2, mark(X3), X4) -> U91^1(X1, X2, X3, X4) U91^1(X1, X2, X3, mark(X4)) -> U91^1(X1, X2, X3, X4) U91^1(active(X1), X2, X3, X4) -> U91^1(X1, X2, X3, X4) U91^1(X1, active(X2), X3, X4) -> U91^1(X1, X2, X3, X4) U91^1(X1, X2, active(X3), X4) -> U91^1(X1, X2, X3, X4) U91^1(X1, X2, X3, active(X4)) -> U91^1(X1, X2, X3, X4) R is empty. The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (31) QDPSizeChangeProof (EQUIVALENT) 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. From the DPs we obtained the following set of size-change graphs: *U91^1(X1, mark(X2), X3, X4) -> U91^1(X1, X2, X3, X4) The graph contains the following edges 1 >= 1, 2 > 2, 3 >= 3, 4 >= 4 *U91^1(mark(X1), X2, X3, X4) -> U91^1(X1, X2, X3, X4) The graph contains the following edges 1 > 1, 2 >= 2, 3 >= 3, 4 >= 4 *U91^1(X1, X2, mark(X3), X4) -> U91^1(X1, X2, X3, X4) The graph contains the following edges 1 >= 1, 2 >= 2, 3 > 3, 4 >= 4 *U91^1(X1, X2, X3, mark(X4)) -> U91^1(X1, X2, X3, X4) The graph contains the following edges 1 >= 1, 2 >= 2, 3 >= 3, 4 > 4 *U91^1(active(X1), X2, X3, X4) -> U91^1(X1, X2, X3, X4) The graph contains the following edges 1 > 1, 2 >= 2, 3 >= 3, 4 >= 4 *U91^1(X1, active(X2), X3, X4) -> U91^1(X1, X2, X3, X4) The graph contains the following edges 1 >= 1, 2 > 2, 3 >= 3, 4 >= 4 *U91^1(X1, X2, active(X3), X4) -> U91^1(X1, X2, X3, X4) The graph contains the following edges 1 >= 1, 2 >= 2, 3 > 3, 4 >= 4 *U91^1(X1, X2, X3, active(X4)) -> U91^1(X1, X2, X3, X4) The graph contains the following edges 1 >= 1, 2 >= 2, 3 >= 3, 4 > 4 ---------------------------------------- (32) YES ---------------------------------------- (33) Obligation: Q DP problem: The TRS P consists of the following rules: U81^1(active(X)) -> U81^1(X) U81^1(mark(X)) -> U81^1(X) The TRS R consists of the following rules: active(zeros) -> mark(cons(0, zeros)) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) active(U42(tt)) -> mark(tt) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) active(U52(tt)) -> mark(tt) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) active(U62(tt)) -> mark(tt) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) active(U72(tt, L)) -> mark(s(length(L))) active(U81(tt)) -> mark(nil) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(0)) -> mark(tt) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) active(isNatIList(V)) -> mark(U31(isNatList(V))) active(isNatIList(zeros)) -> mark(tt) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) active(isNatList(nil)) -> mark(tt) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) active(length(nil)) -> mark(0) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) active(take(0, IL)) -> mark(U81(isNatIList(IL))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) mark(0) -> active(0) mark(U11(X)) -> active(U11(mark(X))) mark(tt) -> active(tt) mark(U21(X)) -> active(U21(mark(X))) mark(U31(X)) -> active(U31(mark(X))) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) mark(U42(X)) -> active(U42(mark(X))) mark(isNatIList(X)) -> active(isNatIList(X)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) mark(U52(X)) -> active(U52(mark(X))) mark(isNatList(X)) -> active(isNatList(X)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) mark(U62(X)) -> active(U62(mark(X))) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) mark(isNat(X)) -> active(isNat(X)) mark(s(X)) -> active(s(mark(X))) mark(length(X)) -> active(length(mark(X))) mark(U81(X)) -> active(U81(mark(X))) mark(nil) -> active(nil) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) cons(mark(X1), X2) -> cons(X1, X2) cons(X1, mark(X2)) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U11(mark(X)) -> U11(X) U11(active(X)) -> U11(X) U21(mark(X)) -> U21(X) U21(active(X)) -> U21(X) U31(mark(X)) -> U31(X) U31(active(X)) -> U31(X) U41(mark(X1), X2) -> U41(X1, X2) U41(X1, mark(X2)) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U42(mark(X)) -> U42(X) U42(active(X)) -> U42(X) isNatIList(mark(X)) -> isNatIList(X) isNatIList(active(X)) -> isNatIList(X) U51(mark(X1), X2) -> U51(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U52(mark(X)) -> U52(X) U52(active(X)) -> U52(X) isNatList(mark(X)) -> isNatList(X) isNatList(active(X)) -> isNatList(X) U61(mark(X1), X2) -> U61(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U62(mark(X)) -> U62(X) U62(active(X)) -> U62(X) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U72(mark(X1), X2) -> U72(X1, X2) U72(X1, mark(X2)) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) isNat(mark(X)) -> isNat(X) isNat(active(X)) -> isNat(X) s(mark(X)) -> s(X) s(active(X)) -> s(X) length(mark(X)) -> length(X) length(active(X)) -> length(X) U81(mark(X)) -> U81(X) U81(active(X)) -> U81(X) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) take(mark(X1), X2) -> take(X1, X2) take(X1, mark(X2)) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (34) UsableRulesProof (EQUIVALENT) 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. ---------------------------------------- (35) Obligation: Q DP problem: The TRS P consists of the following rules: U81^1(active(X)) -> U81^1(X) U81^1(mark(X)) -> U81^1(X) R is empty. The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (36) QReductionProof (EQUIVALENT) We deleted the following terms from Q as each root-symbol of these terms does neither occur in P nor in R.[THIEMANN]. cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) ---------------------------------------- (37) Obligation: Q DP problem: The TRS P consists of the following rules: U81^1(active(X)) -> U81^1(X) U81^1(mark(X)) -> U81^1(X) R is empty. The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (38) QDPSizeChangeProof (EQUIVALENT) 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. From the DPs we obtained the following set of size-change graphs: *U81^1(active(X)) -> U81^1(X) The graph contains the following edges 1 > 1 *U81^1(mark(X)) -> U81^1(X) The graph contains the following edges 1 > 1 ---------------------------------------- (39) YES ---------------------------------------- (40) Obligation: Q DP problem: The TRS P consists of the following rules: LENGTH(active(X)) -> LENGTH(X) LENGTH(mark(X)) -> LENGTH(X) The TRS R consists of the following rules: active(zeros) -> mark(cons(0, zeros)) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) active(U42(tt)) -> mark(tt) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) active(U52(tt)) -> mark(tt) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) active(U62(tt)) -> mark(tt) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) active(U72(tt, L)) -> mark(s(length(L))) active(U81(tt)) -> mark(nil) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(0)) -> mark(tt) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) active(isNatIList(V)) -> mark(U31(isNatList(V))) active(isNatIList(zeros)) -> mark(tt) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) active(isNatList(nil)) -> mark(tt) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) active(length(nil)) -> mark(0) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) active(take(0, IL)) -> mark(U81(isNatIList(IL))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) mark(0) -> active(0) mark(U11(X)) -> active(U11(mark(X))) mark(tt) -> active(tt) mark(U21(X)) -> active(U21(mark(X))) mark(U31(X)) -> active(U31(mark(X))) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) mark(U42(X)) -> active(U42(mark(X))) mark(isNatIList(X)) -> active(isNatIList(X)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) mark(U52(X)) -> active(U52(mark(X))) mark(isNatList(X)) -> active(isNatList(X)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) mark(U62(X)) -> active(U62(mark(X))) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) mark(isNat(X)) -> active(isNat(X)) mark(s(X)) -> active(s(mark(X))) mark(length(X)) -> active(length(mark(X))) mark(U81(X)) -> active(U81(mark(X))) mark(nil) -> active(nil) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) cons(mark(X1), X2) -> cons(X1, X2) cons(X1, mark(X2)) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U11(mark(X)) -> U11(X) U11(active(X)) -> U11(X) U21(mark(X)) -> U21(X) U21(active(X)) -> U21(X) U31(mark(X)) -> U31(X) U31(active(X)) -> U31(X) U41(mark(X1), X2) -> U41(X1, X2) U41(X1, mark(X2)) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U42(mark(X)) -> U42(X) U42(active(X)) -> U42(X) isNatIList(mark(X)) -> isNatIList(X) isNatIList(active(X)) -> isNatIList(X) U51(mark(X1), X2) -> U51(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U52(mark(X)) -> U52(X) U52(active(X)) -> U52(X) isNatList(mark(X)) -> isNatList(X) isNatList(active(X)) -> isNatList(X) U61(mark(X1), X2) -> U61(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U62(mark(X)) -> U62(X) U62(active(X)) -> U62(X) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U72(mark(X1), X2) -> U72(X1, X2) U72(X1, mark(X2)) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) isNat(mark(X)) -> isNat(X) isNat(active(X)) -> isNat(X) s(mark(X)) -> s(X) s(active(X)) -> s(X) length(mark(X)) -> length(X) length(active(X)) -> length(X) U81(mark(X)) -> U81(X) U81(active(X)) -> U81(X) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) take(mark(X1), X2) -> take(X1, X2) take(X1, mark(X2)) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (41) UsableRulesProof (EQUIVALENT) 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. ---------------------------------------- (42) Obligation: Q DP problem: The TRS P consists of the following rules: LENGTH(active(X)) -> LENGTH(X) LENGTH(mark(X)) -> LENGTH(X) R is empty. The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (43) QReductionProof (EQUIVALENT) We deleted the following terms from Q as each root-symbol of these terms does neither occur in P nor in R.[THIEMANN]. cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) ---------------------------------------- (44) Obligation: Q DP problem: The TRS P consists of the following rules: LENGTH(active(X)) -> LENGTH(X) LENGTH(mark(X)) -> LENGTH(X) R is empty. The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (45) QDPSizeChangeProof (EQUIVALENT) 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. From the DPs we obtained the following set of size-change graphs: *LENGTH(active(X)) -> LENGTH(X) The graph contains the following edges 1 > 1 *LENGTH(mark(X)) -> LENGTH(X) The graph contains the following edges 1 > 1 ---------------------------------------- (46) YES ---------------------------------------- (47) Obligation: Q DP problem: The TRS P consists of the following rules: S(active(X)) -> S(X) S(mark(X)) -> S(X) The TRS R consists of the following rules: active(zeros) -> mark(cons(0, zeros)) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) active(U42(tt)) -> mark(tt) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) active(U52(tt)) -> mark(tt) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) active(U62(tt)) -> mark(tt) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) active(U72(tt, L)) -> mark(s(length(L))) active(U81(tt)) -> mark(nil) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(0)) -> mark(tt) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) active(isNatIList(V)) -> mark(U31(isNatList(V))) active(isNatIList(zeros)) -> mark(tt) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) active(isNatList(nil)) -> mark(tt) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) active(length(nil)) -> mark(0) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) active(take(0, IL)) -> mark(U81(isNatIList(IL))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) mark(0) -> active(0) mark(U11(X)) -> active(U11(mark(X))) mark(tt) -> active(tt) mark(U21(X)) -> active(U21(mark(X))) mark(U31(X)) -> active(U31(mark(X))) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) mark(U42(X)) -> active(U42(mark(X))) mark(isNatIList(X)) -> active(isNatIList(X)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) mark(U52(X)) -> active(U52(mark(X))) mark(isNatList(X)) -> active(isNatList(X)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) mark(U62(X)) -> active(U62(mark(X))) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) mark(isNat(X)) -> active(isNat(X)) mark(s(X)) -> active(s(mark(X))) mark(length(X)) -> active(length(mark(X))) mark(U81(X)) -> active(U81(mark(X))) mark(nil) -> active(nil) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) cons(mark(X1), X2) -> cons(X1, X2) cons(X1, mark(X2)) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U11(mark(X)) -> U11(X) U11(active(X)) -> U11(X) U21(mark(X)) -> U21(X) U21(active(X)) -> U21(X) U31(mark(X)) -> U31(X) U31(active(X)) -> U31(X) U41(mark(X1), X2) -> U41(X1, X2) U41(X1, mark(X2)) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U42(mark(X)) -> U42(X) U42(active(X)) -> U42(X) isNatIList(mark(X)) -> isNatIList(X) isNatIList(active(X)) -> isNatIList(X) U51(mark(X1), X2) -> U51(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U52(mark(X)) -> U52(X) U52(active(X)) -> U52(X) isNatList(mark(X)) -> isNatList(X) isNatList(active(X)) -> isNatList(X) U61(mark(X1), X2) -> U61(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U62(mark(X)) -> U62(X) U62(active(X)) -> U62(X) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U72(mark(X1), X2) -> U72(X1, X2) U72(X1, mark(X2)) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) isNat(mark(X)) -> isNat(X) isNat(active(X)) -> isNat(X) s(mark(X)) -> s(X) s(active(X)) -> s(X) length(mark(X)) -> length(X) length(active(X)) -> length(X) U81(mark(X)) -> U81(X) U81(active(X)) -> U81(X) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) take(mark(X1), X2) -> take(X1, X2) take(X1, mark(X2)) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (48) UsableRulesProof (EQUIVALENT) 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. ---------------------------------------- (49) Obligation: Q DP problem: The TRS P consists of the following rules: S(active(X)) -> S(X) S(mark(X)) -> S(X) R is empty. The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (50) QReductionProof (EQUIVALENT) We deleted the following terms from Q as each root-symbol of these terms does neither occur in P nor in R.[THIEMANN]. cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) ---------------------------------------- (51) Obligation: Q DP problem: The TRS P consists of the following rules: S(active(X)) -> S(X) S(mark(X)) -> S(X) R is empty. The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (52) QDPSizeChangeProof (EQUIVALENT) 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. From the DPs we obtained the following set of size-change graphs: *S(active(X)) -> S(X) The graph contains the following edges 1 > 1 *S(mark(X)) -> S(X) The graph contains the following edges 1 > 1 ---------------------------------------- (53) YES ---------------------------------------- (54) Obligation: Q DP problem: The TRS P consists of the following rules: ISNAT(active(X)) -> ISNAT(X) ISNAT(mark(X)) -> ISNAT(X) The TRS R consists of the following rules: active(zeros) -> mark(cons(0, zeros)) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) active(U42(tt)) -> mark(tt) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) active(U52(tt)) -> mark(tt) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) active(U62(tt)) -> mark(tt) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) active(U72(tt, L)) -> mark(s(length(L))) active(U81(tt)) -> mark(nil) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(0)) -> mark(tt) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) active(isNatIList(V)) -> mark(U31(isNatList(V))) active(isNatIList(zeros)) -> mark(tt) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) active(isNatList(nil)) -> mark(tt) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) active(length(nil)) -> mark(0) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) active(take(0, IL)) -> mark(U81(isNatIList(IL))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) mark(0) -> active(0) mark(U11(X)) -> active(U11(mark(X))) mark(tt) -> active(tt) mark(U21(X)) -> active(U21(mark(X))) mark(U31(X)) -> active(U31(mark(X))) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) mark(U42(X)) -> active(U42(mark(X))) mark(isNatIList(X)) -> active(isNatIList(X)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) mark(U52(X)) -> active(U52(mark(X))) mark(isNatList(X)) -> active(isNatList(X)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) mark(U62(X)) -> active(U62(mark(X))) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) mark(isNat(X)) -> active(isNat(X)) mark(s(X)) -> active(s(mark(X))) mark(length(X)) -> active(length(mark(X))) mark(U81(X)) -> active(U81(mark(X))) mark(nil) -> active(nil) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) cons(mark(X1), X2) -> cons(X1, X2) cons(X1, mark(X2)) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U11(mark(X)) -> U11(X) U11(active(X)) -> U11(X) U21(mark(X)) -> U21(X) U21(active(X)) -> U21(X) U31(mark(X)) -> U31(X) U31(active(X)) -> U31(X) U41(mark(X1), X2) -> U41(X1, X2) U41(X1, mark(X2)) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U42(mark(X)) -> U42(X) U42(active(X)) -> U42(X) isNatIList(mark(X)) -> isNatIList(X) isNatIList(active(X)) -> isNatIList(X) U51(mark(X1), X2) -> U51(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U52(mark(X)) -> U52(X) U52(active(X)) -> U52(X) isNatList(mark(X)) -> isNatList(X) isNatList(active(X)) -> isNatList(X) U61(mark(X1), X2) -> U61(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U62(mark(X)) -> U62(X) U62(active(X)) -> U62(X) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U72(mark(X1), X2) -> U72(X1, X2) U72(X1, mark(X2)) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) isNat(mark(X)) -> isNat(X) isNat(active(X)) -> isNat(X) s(mark(X)) -> s(X) s(active(X)) -> s(X) length(mark(X)) -> length(X) length(active(X)) -> length(X) U81(mark(X)) -> U81(X) U81(active(X)) -> U81(X) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) take(mark(X1), X2) -> take(X1, X2) take(X1, mark(X2)) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (55) UsableRulesProof (EQUIVALENT) 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. ---------------------------------------- (56) Obligation: Q DP problem: The TRS P consists of the following rules: ISNAT(active(X)) -> ISNAT(X) ISNAT(mark(X)) -> ISNAT(X) R is empty. The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (57) QReductionProof (EQUIVALENT) We deleted the following terms from Q as each root-symbol of these terms does neither occur in P nor in R.[THIEMANN]. cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) ---------------------------------------- (58) Obligation: Q DP problem: The TRS P consists of the following rules: ISNAT(active(X)) -> ISNAT(X) ISNAT(mark(X)) -> ISNAT(X) R is empty. The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (59) QDPSizeChangeProof (EQUIVALENT) 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. From the DPs we obtained the following set of size-change graphs: *ISNAT(active(X)) -> ISNAT(X) The graph contains the following edges 1 > 1 *ISNAT(mark(X)) -> ISNAT(X) The graph contains the following edges 1 > 1 ---------------------------------------- (60) YES ---------------------------------------- (61) Obligation: Q DP problem: The TRS P consists of the following rules: U72^1(X1, mark(X2)) -> U72^1(X1, X2) U72^1(mark(X1), X2) -> U72^1(X1, X2) U72^1(active(X1), X2) -> U72^1(X1, X2) U72^1(X1, active(X2)) -> U72^1(X1, X2) The TRS R consists of the following rules: active(zeros) -> mark(cons(0, zeros)) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) active(U42(tt)) -> mark(tt) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) active(U52(tt)) -> mark(tt) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) active(U62(tt)) -> mark(tt) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) active(U72(tt, L)) -> mark(s(length(L))) active(U81(tt)) -> mark(nil) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(0)) -> mark(tt) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) active(isNatIList(V)) -> mark(U31(isNatList(V))) active(isNatIList(zeros)) -> mark(tt) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) active(isNatList(nil)) -> mark(tt) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) active(length(nil)) -> mark(0) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) active(take(0, IL)) -> mark(U81(isNatIList(IL))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) mark(0) -> active(0) mark(U11(X)) -> active(U11(mark(X))) mark(tt) -> active(tt) mark(U21(X)) -> active(U21(mark(X))) mark(U31(X)) -> active(U31(mark(X))) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) mark(U42(X)) -> active(U42(mark(X))) mark(isNatIList(X)) -> active(isNatIList(X)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) mark(U52(X)) -> active(U52(mark(X))) mark(isNatList(X)) -> active(isNatList(X)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) mark(U62(X)) -> active(U62(mark(X))) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) mark(isNat(X)) -> active(isNat(X)) mark(s(X)) -> active(s(mark(X))) mark(length(X)) -> active(length(mark(X))) mark(U81(X)) -> active(U81(mark(X))) mark(nil) -> active(nil) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) cons(mark(X1), X2) -> cons(X1, X2) cons(X1, mark(X2)) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U11(mark(X)) -> U11(X) U11(active(X)) -> U11(X) U21(mark(X)) -> U21(X) U21(active(X)) -> U21(X) U31(mark(X)) -> U31(X) U31(active(X)) -> U31(X) U41(mark(X1), X2) -> U41(X1, X2) U41(X1, mark(X2)) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U42(mark(X)) -> U42(X) U42(active(X)) -> U42(X) isNatIList(mark(X)) -> isNatIList(X) isNatIList(active(X)) -> isNatIList(X) U51(mark(X1), X2) -> U51(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U52(mark(X)) -> U52(X) U52(active(X)) -> U52(X) isNatList(mark(X)) -> isNatList(X) isNatList(active(X)) -> isNatList(X) U61(mark(X1), X2) -> U61(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U62(mark(X)) -> U62(X) U62(active(X)) -> U62(X) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U72(mark(X1), X2) -> U72(X1, X2) U72(X1, mark(X2)) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) isNat(mark(X)) -> isNat(X) isNat(active(X)) -> isNat(X) s(mark(X)) -> s(X) s(active(X)) -> s(X) length(mark(X)) -> length(X) length(active(X)) -> length(X) U81(mark(X)) -> U81(X) U81(active(X)) -> U81(X) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) take(mark(X1), X2) -> take(X1, X2) take(X1, mark(X2)) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (62) UsableRulesProof (EQUIVALENT) 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. ---------------------------------------- (63) Obligation: Q DP problem: The TRS P consists of the following rules: U72^1(X1, mark(X2)) -> U72^1(X1, X2) U72^1(mark(X1), X2) -> U72^1(X1, X2) U72^1(active(X1), X2) -> U72^1(X1, X2) U72^1(X1, active(X2)) -> U72^1(X1, X2) R is empty. The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (64) QReductionProof (EQUIVALENT) We deleted the following terms from Q as each root-symbol of these terms does neither occur in P nor in R.[THIEMANN]. cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) ---------------------------------------- (65) Obligation: Q DP problem: The TRS P consists of the following rules: U72^1(X1, mark(X2)) -> U72^1(X1, X2) U72^1(mark(X1), X2) -> U72^1(X1, X2) U72^1(active(X1), X2) -> U72^1(X1, X2) U72^1(X1, active(X2)) -> U72^1(X1, X2) R is empty. The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (66) QDPSizeChangeProof (EQUIVALENT) 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. From the DPs we obtained the following set of size-change graphs: *U72^1(X1, mark(X2)) -> U72^1(X1, X2) The graph contains the following edges 1 >= 1, 2 > 2 *U72^1(mark(X1), X2) -> U72^1(X1, X2) The graph contains the following edges 1 > 1, 2 >= 2 *U72^1(active(X1), X2) -> U72^1(X1, X2) The graph contains the following edges 1 > 1, 2 >= 2 *U72^1(X1, active(X2)) -> U72^1(X1, X2) The graph contains the following edges 1 >= 1, 2 > 2 ---------------------------------------- (67) YES ---------------------------------------- (68) Obligation: Q DP problem: The TRS P consists of the following rules: U71^1(X1, mark(X2), X3) -> U71^1(X1, X2, X3) U71^1(mark(X1), X2, X3) -> U71^1(X1, X2, X3) U71^1(X1, X2, mark(X3)) -> U71^1(X1, X2, X3) U71^1(active(X1), X2, X3) -> U71^1(X1, X2, X3) U71^1(X1, active(X2), X3) -> U71^1(X1, X2, X3) U71^1(X1, X2, active(X3)) -> U71^1(X1, X2, X3) The TRS R consists of the following rules: active(zeros) -> mark(cons(0, zeros)) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) active(U42(tt)) -> mark(tt) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) active(U52(tt)) -> mark(tt) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) active(U62(tt)) -> mark(tt) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) active(U72(tt, L)) -> mark(s(length(L))) active(U81(tt)) -> mark(nil) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(0)) -> mark(tt) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) active(isNatIList(V)) -> mark(U31(isNatList(V))) active(isNatIList(zeros)) -> mark(tt) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) active(isNatList(nil)) -> mark(tt) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) active(length(nil)) -> mark(0) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) active(take(0, IL)) -> mark(U81(isNatIList(IL))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) mark(0) -> active(0) mark(U11(X)) -> active(U11(mark(X))) mark(tt) -> active(tt) mark(U21(X)) -> active(U21(mark(X))) mark(U31(X)) -> active(U31(mark(X))) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) mark(U42(X)) -> active(U42(mark(X))) mark(isNatIList(X)) -> active(isNatIList(X)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) mark(U52(X)) -> active(U52(mark(X))) mark(isNatList(X)) -> active(isNatList(X)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) mark(U62(X)) -> active(U62(mark(X))) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) mark(isNat(X)) -> active(isNat(X)) mark(s(X)) -> active(s(mark(X))) mark(length(X)) -> active(length(mark(X))) mark(U81(X)) -> active(U81(mark(X))) mark(nil) -> active(nil) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) cons(mark(X1), X2) -> cons(X1, X2) cons(X1, mark(X2)) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U11(mark(X)) -> U11(X) U11(active(X)) -> U11(X) U21(mark(X)) -> U21(X) U21(active(X)) -> U21(X) U31(mark(X)) -> U31(X) U31(active(X)) -> U31(X) U41(mark(X1), X2) -> U41(X1, X2) U41(X1, mark(X2)) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U42(mark(X)) -> U42(X) U42(active(X)) -> U42(X) isNatIList(mark(X)) -> isNatIList(X) isNatIList(active(X)) -> isNatIList(X) U51(mark(X1), X2) -> U51(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U52(mark(X)) -> U52(X) U52(active(X)) -> U52(X) isNatList(mark(X)) -> isNatList(X) isNatList(active(X)) -> isNatList(X) U61(mark(X1), X2) -> U61(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U62(mark(X)) -> U62(X) U62(active(X)) -> U62(X) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U72(mark(X1), X2) -> U72(X1, X2) U72(X1, mark(X2)) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) isNat(mark(X)) -> isNat(X) isNat(active(X)) -> isNat(X) s(mark(X)) -> s(X) s(active(X)) -> s(X) length(mark(X)) -> length(X) length(active(X)) -> length(X) U81(mark(X)) -> U81(X) U81(active(X)) -> U81(X) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) take(mark(X1), X2) -> take(X1, X2) take(X1, mark(X2)) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (69) UsableRulesProof (EQUIVALENT) 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. ---------------------------------------- (70) Obligation: Q DP problem: The TRS P consists of the following rules: U71^1(X1, mark(X2), X3) -> U71^1(X1, X2, X3) U71^1(mark(X1), X2, X3) -> U71^1(X1, X2, X3) U71^1(X1, X2, mark(X3)) -> U71^1(X1, X2, X3) U71^1(active(X1), X2, X3) -> U71^1(X1, X2, X3) U71^1(X1, active(X2), X3) -> U71^1(X1, X2, X3) U71^1(X1, X2, active(X3)) -> U71^1(X1, X2, X3) R is empty. The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (71) QReductionProof (EQUIVALENT) We deleted the following terms from Q as each root-symbol of these terms does neither occur in P nor in R.[THIEMANN]. cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) ---------------------------------------- (72) Obligation: Q DP problem: The TRS P consists of the following rules: U71^1(X1, mark(X2), X3) -> U71^1(X1, X2, X3) U71^1(mark(X1), X2, X3) -> U71^1(X1, X2, X3) U71^1(X1, X2, mark(X3)) -> U71^1(X1, X2, X3) U71^1(active(X1), X2, X3) -> U71^1(X1, X2, X3) U71^1(X1, active(X2), X3) -> U71^1(X1, X2, X3) U71^1(X1, X2, active(X3)) -> U71^1(X1, X2, X3) R is empty. The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (73) QDPSizeChangeProof (EQUIVALENT) 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. From the DPs we obtained the following set of size-change graphs: *U71^1(X1, mark(X2), X3) -> U71^1(X1, X2, X3) The graph contains the following edges 1 >= 1, 2 > 2, 3 >= 3 *U71^1(mark(X1), X2, X3) -> U71^1(X1, X2, X3) The graph contains the following edges 1 > 1, 2 >= 2, 3 >= 3 *U71^1(X1, X2, mark(X3)) -> U71^1(X1, X2, X3) The graph contains the following edges 1 >= 1, 2 >= 2, 3 > 3 *U71^1(active(X1), X2, X3) -> U71^1(X1, X2, X3) The graph contains the following edges 1 > 1, 2 >= 2, 3 >= 3 *U71^1(X1, active(X2), X3) -> U71^1(X1, X2, X3) The graph contains the following edges 1 >= 1, 2 > 2, 3 >= 3 *U71^1(X1, X2, active(X3)) -> U71^1(X1, X2, X3) The graph contains the following edges 1 >= 1, 2 >= 2, 3 > 3 ---------------------------------------- (74) YES ---------------------------------------- (75) Obligation: Q DP problem: The TRS P consists of the following rules: U62^1(active(X)) -> U62^1(X) U62^1(mark(X)) -> U62^1(X) The TRS R consists of the following rules: active(zeros) -> mark(cons(0, zeros)) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) active(U42(tt)) -> mark(tt) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) active(U52(tt)) -> mark(tt) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) active(U62(tt)) -> mark(tt) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) active(U72(tt, L)) -> mark(s(length(L))) active(U81(tt)) -> mark(nil) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(0)) -> mark(tt) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) active(isNatIList(V)) -> mark(U31(isNatList(V))) active(isNatIList(zeros)) -> mark(tt) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) active(isNatList(nil)) -> mark(tt) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) active(length(nil)) -> mark(0) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) active(take(0, IL)) -> mark(U81(isNatIList(IL))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) mark(0) -> active(0) mark(U11(X)) -> active(U11(mark(X))) mark(tt) -> active(tt) mark(U21(X)) -> active(U21(mark(X))) mark(U31(X)) -> active(U31(mark(X))) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) mark(U42(X)) -> active(U42(mark(X))) mark(isNatIList(X)) -> active(isNatIList(X)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) mark(U52(X)) -> active(U52(mark(X))) mark(isNatList(X)) -> active(isNatList(X)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) mark(U62(X)) -> active(U62(mark(X))) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) mark(isNat(X)) -> active(isNat(X)) mark(s(X)) -> active(s(mark(X))) mark(length(X)) -> active(length(mark(X))) mark(U81(X)) -> active(U81(mark(X))) mark(nil) -> active(nil) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) cons(mark(X1), X2) -> cons(X1, X2) cons(X1, mark(X2)) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U11(mark(X)) -> U11(X) U11(active(X)) -> U11(X) U21(mark(X)) -> U21(X) U21(active(X)) -> U21(X) U31(mark(X)) -> U31(X) U31(active(X)) -> U31(X) U41(mark(X1), X2) -> U41(X1, X2) U41(X1, mark(X2)) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U42(mark(X)) -> U42(X) U42(active(X)) -> U42(X) isNatIList(mark(X)) -> isNatIList(X) isNatIList(active(X)) -> isNatIList(X) U51(mark(X1), X2) -> U51(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U52(mark(X)) -> U52(X) U52(active(X)) -> U52(X) isNatList(mark(X)) -> isNatList(X) isNatList(active(X)) -> isNatList(X) U61(mark(X1), X2) -> U61(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U62(mark(X)) -> U62(X) U62(active(X)) -> U62(X) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U72(mark(X1), X2) -> U72(X1, X2) U72(X1, mark(X2)) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) isNat(mark(X)) -> isNat(X) isNat(active(X)) -> isNat(X) s(mark(X)) -> s(X) s(active(X)) -> s(X) length(mark(X)) -> length(X) length(active(X)) -> length(X) U81(mark(X)) -> U81(X) U81(active(X)) -> U81(X) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) take(mark(X1), X2) -> take(X1, X2) take(X1, mark(X2)) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (76) UsableRulesProof (EQUIVALENT) 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. ---------------------------------------- (77) Obligation: Q DP problem: The TRS P consists of the following rules: U62^1(active(X)) -> U62^1(X) U62^1(mark(X)) -> U62^1(X) R is empty. The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (78) QReductionProof (EQUIVALENT) We deleted the following terms from Q as each root-symbol of these terms does neither occur in P nor in R.[THIEMANN]. cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) ---------------------------------------- (79) Obligation: Q DP problem: The TRS P consists of the following rules: U62^1(active(X)) -> U62^1(X) U62^1(mark(X)) -> U62^1(X) R is empty. The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (80) QDPSizeChangeProof (EQUIVALENT) 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. From the DPs we obtained the following set of size-change graphs: *U62^1(active(X)) -> U62^1(X) The graph contains the following edges 1 > 1 *U62^1(mark(X)) -> U62^1(X) The graph contains the following edges 1 > 1 ---------------------------------------- (81) YES ---------------------------------------- (82) Obligation: Q DP problem: The TRS P consists of the following rules: U61^1(X1, mark(X2)) -> U61^1(X1, X2) U61^1(mark(X1), X2) -> U61^1(X1, X2) U61^1(active(X1), X2) -> U61^1(X1, X2) U61^1(X1, active(X2)) -> U61^1(X1, X2) The TRS R consists of the following rules: active(zeros) -> mark(cons(0, zeros)) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) active(U42(tt)) -> mark(tt) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) active(U52(tt)) -> mark(tt) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) active(U62(tt)) -> mark(tt) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) active(U72(tt, L)) -> mark(s(length(L))) active(U81(tt)) -> mark(nil) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(0)) -> mark(tt) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) active(isNatIList(V)) -> mark(U31(isNatList(V))) active(isNatIList(zeros)) -> mark(tt) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) active(isNatList(nil)) -> mark(tt) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) active(length(nil)) -> mark(0) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) active(take(0, IL)) -> mark(U81(isNatIList(IL))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) mark(0) -> active(0) mark(U11(X)) -> active(U11(mark(X))) mark(tt) -> active(tt) mark(U21(X)) -> active(U21(mark(X))) mark(U31(X)) -> active(U31(mark(X))) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) mark(U42(X)) -> active(U42(mark(X))) mark(isNatIList(X)) -> active(isNatIList(X)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) mark(U52(X)) -> active(U52(mark(X))) mark(isNatList(X)) -> active(isNatList(X)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) mark(U62(X)) -> active(U62(mark(X))) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) mark(isNat(X)) -> active(isNat(X)) mark(s(X)) -> active(s(mark(X))) mark(length(X)) -> active(length(mark(X))) mark(U81(X)) -> active(U81(mark(X))) mark(nil) -> active(nil) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) cons(mark(X1), X2) -> cons(X1, X2) cons(X1, mark(X2)) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U11(mark(X)) -> U11(X) U11(active(X)) -> U11(X) U21(mark(X)) -> U21(X) U21(active(X)) -> U21(X) U31(mark(X)) -> U31(X) U31(active(X)) -> U31(X) U41(mark(X1), X2) -> U41(X1, X2) U41(X1, mark(X2)) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U42(mark(X)) -> U42(X) U42(active(X)) -> U42(X) isNatIList(mark(X)) -> isNatIList(X) isNatIList(active(X)) -> isNatIList(X) U51(mark(X1), X2) -> U51(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U52(mark(X)) -> U52(X) U52(active(X)) -> U52(X) isNatList(mark(X)) -> isNatList(X) isNatList(active(X)) -> isNatList(X) U61(mark(X1), X2) -> U61(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U62(mark(X)) -> U62(X) U62(active(X)) -> U62(X) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U72(mark(X1), X2) -> U72(X1, X2) U72(X1, mark(X2)) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) isNat(mark(X)) -> isNat(X) isNat(active(X)) -> isNat(X) s(mark(X)) -> s(X) s(active(X)) -> s(X) length(mark(X)) -> length(X) length(active(X)) -> length(X) U81(mark(X)) -> U81(X) U81(active(X)) -> U81(X) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) take(mark(X1), X2) -> take(X1, X2) take(X1, mark(X2)) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (83) UsableRulesProof (EQUIVALENT) 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. ---------------------------------------- (84) Obligation: Q DP problem: The TRS P consists of the following rules: U61^1(X1, mark(X2)) -> U61^1(X1, X2) U61^1(mark(X1), X2) -> U61^1(X1, X2) U61^1(active(X1), X2) -> U61^1(X1, X2) U61^1(X1, active(X2)) -> U61^1(X1, X2) R is empty. The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (85) QReductionProof (EQUIVALENT) We deleted the following terms from Q as each root-symbol of these terms does neither occur in P nor in R.[THIEMANN]. cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) ---------------------------------------- (86) Obligation: Q DP problem: The TRS P consists of the following rules: U61^1(X1, mark(X2)) -> U61^1(X1, X2) U61^1(mark(X1), X2) -> U61^1(X1, X2) U61^1(active(X1), X2) -> U61^1(X1, X2) U61^1(X1, active(X2)) -> U61^1(X1, X2) R is empty. The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (87) QDPSizeChangeProof (EQUIVALENT) 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. From the DPs we obtained the following set of size-change graphs: *U61^1(X1, mark(X2)) -> U61^1(X1, X2) The graph contains the following edges 1 >= 1, 2 > 2 *U61^1(mark(X1), X2) -> U61^1(X1, X2) The graph contains the following edges 1 > 1, 2 >= 2 *U61^1(active(X1), X2) -> U61^1(X1, X2) The graph contains the following edges 1 > 1, 2 >= 2 *U61^1(X1, active(X2)) -> U61^1(X1, X2) The graph contains the following edges 1 >= 1, 2 > 2 ---------------------------------------- (88) YES ---------------------------------------- (89) Obligation: Q DP problem: The TRS P consists of the following rules: ISNATLIST(active(X)) -> ISNATLIST(X) ISNATLIST(mark(X)) -> ISNATLIST(X) The TRS R consists of the following rules: active(zeros) -> mark(cons(0, zeros)) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) active(U42(tt)) -> mark(tt) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) active(U52(tt)) -> mark(tt) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) active(U62(tt)) -> mark(tt) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) active(U72(tt, L)) -> mark(s(length(L))) active(U81(tt)) -> mark(nil) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(0)) -> mark(tt) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) active(isNatIList(V)) -> mark(U31(isNatList(V))) active(isNatIList(zeros)) -> mark(tt) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) active(isNatList(nil)) -> mark(tt) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) active(length(nil)) -> mark(0) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) active(take(0, IL)) -> mark(U81(isNatIList(IL))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) mark(0) -> active(0) mark(U11(X)) -> active(U11(mark(X))) mark(tt) -> active(tt) mark(U21(X)) -> active(U21(mark(X))) mark(U31(X)) -> active(U31(mark(X))) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) mark(U42(X)) -> active(U42(mark(X))) mark(isNatIList(X)) -> active(isNatIList(X)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) mark(U52(X)) -> active(U52(mark(X))) mark(isNatList(X)) -> active(isNatList(X)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) mark(U62(X)) -> active(U62(mark(X))) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) mark(isNat(X)) -> active(isNat(X)) mark(s(X)) -> active(s(mark(X))) mark(length(X)) -> active(length(mark(X))) mark(U81(X)) -> active(U81(mark(X))) mark(nil) -> active(nil) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) cons(mark(X1), X2) -> cons(X1, X2) cons(X1, mark(X2)) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U11(mark(X)) -> U11(X) U11(active(X)) -> U11(X) U21(mark(X)) -> U21(X) U21(active(X)) -> U21(X) U31(mark(X)) -> U31(X) U31(active(X)) -> U31(X) U41(mark(X1), X2) -> U41(X1, X2) U41(X1, mark(X2)) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U42(mark(X)) -> U42(X) U42(active(X)) -> U42(X) isNatIList(mark(X)) -> isNatIList(X) isNatIList(active(X)) -> isNatIList(X) U51(mark(X1), X2) -> U51(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U52(mark(X)) -> U52(X) U52(active(X)) -> U52(X) isNatList(mark(X)) -> isNatList(X) isNatList(active(X)) -> isNatList(X) U61(mark(X1), X2) -> U61(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U62(mark(X)) -> U62(X) U62(active(X)) -> U62(X) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U72(mark(X1), X2) -> U72(X1, X2) U72(X1, mark(X2)) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) isNat(mark(X)) -> isNat(X) isNat(active(X)) -> isNat(X) s(mark(X)) -> s(X) s(active(X)) -> s(X) length(mark(X)) -> length(X) length(active(X)) -> length(X) U81(mark(X)) -> U81(X) U81(active(X)) -> U81(X) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) take(mark(X1), X2) -> take(X1, X2) take(X1, mark(X2)) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (90) UsableRulesProof (EQUIVALENT) 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. ---------------------------------------- (91) Obligation: Q DP problem: The TRS P consists of the following rules: ISNATLIST(active(X)) -> ISNATLIST(X) ISNATLIST(mark(X)) -> ISNATLIST(X) R is empty. The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (92) QReductionProof (EQUIVALENT) We deleted the following terms from Q as each root-symbol of these terms does neither occur in P nor in R.[THIEMANN]. cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) ---------------------------------------- (93) Obligation: Q DP problem: The TRS P consists of the following rules: ISNATLIST(active(X)) -> ISNATLIST(X) ISNATLIST(mark(X)) -> ISNATLIST(X) R is empty. The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (94) QDPSizeChangeProof (EQUIVALENT) 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. From the DPs we obtained the following set of size-change graphs: *ISNATLIST(active(X)) -> ISNATLIST(X) The graph contains the following edges 1 > 1 *ISNATLIST(mark(X)) -> ISNATLIST(X) The graph contains the following edges 1 > 1 ---------------------------------------- (95) YES ---------------------------------------- (96) Obligation: Q DP problem: The TRS P consists of the following rules: U52^1(active(X)) -> U52^1(X) U52^1(mark(X)) -> U52^1(X) The TRS R consists of the following rules: active(zeros) -> mark(cons(0, zeros)) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) active(U42(tt)) -> mark(tt) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) active(U52(tt)) -> mark(tt) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) active(U62(tt)) -> mark(tt) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) active(U72(tt, L)) -> mark(s(length(L))) active(U81(tt)) -> mark(nil) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(0)) -> mark(tt) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) active(isNatIList(V)) -> mark(U31(isNatList(V))) active(isNatIList(zeros)) -> mark(tt) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) active(isNatList(nil)) -> mark(tt) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) active(length(nil)) -> mark(0) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) active(take(0, IL)) -> mark(U81(isNatIList(IL))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) mark(0) -> active(0) mark(U11(X)) -> active(U11(mark(X))) mark(tt) -> active(tt) mark(U21(X)) -> active(U21(mark(X))) mark(U31(X)) -> active(U31(mark(X))) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) mark(U42(X)) -> active(U42(mark(X))) mark(isNatIList(X)) -> active(isNatIList(X)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) mark(U52(X)) -> active(U52(mark(X))) mark(isNatList(X)) -> active(isNatList(X)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) mark(U62(X)) -> active(U62(mark(X))) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) mark(isNat(X)) -> active(isNat(X)) mark(s(X)) -> active(s(mark(X))) mark(length(X)) -> active(length(mark(X))) mark(U81(X)) -> active(U81(mark(X))) mark(nil) -> active(nil) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) cons(mark(X1), X2) -> cons(X1, X2) cons(X1, mark(X2)) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U11(mark(X)) -> U11(X) U11(active(X)) -> U11(X) U21(mark(X)) -> U21(X) U21(active(X)) -> U21(X) U31(mark(X)) -> U31(X) U31(active(X)) -> U31(X) U41(mark(X1), X2) -> U41(X1, X2) U41(X1, mark(X2)) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U42(mark(X)) -> U42(X) U42(active(X)) -> U42(X) isNatIList(mark(X)) -> isNatIList(X) isNatIList(active(X)) -> isNatIList(X) U51(mark(X1), X2) -> U51(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U52(mark(X)) -> U52(X) U52(active(X)) -> U52(X) isNatList(mark(X)) -> isNatList(X) isNatList(active(X)) -> isNatList(X) U61(mark(X1), X2) -> U61(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U62(mark(X)) -> U62(X) U62(active(X)) -> U62(X) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U72(mark(X1), X2) -> U72(X1, X2) U72(X1, mark(X2)) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) isNat(mark(X)) -> isNat(X) isNat(active(X)) -> isNat(X) s(mark(X)) -> s(X) s(active(X)) -> s(X) length(mark(X)) -> length(X) length(active(X)) -> length(X) U81(mark(X)) -> U81(X) U81(active(X)) -> U81(X) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) take(mark(X1), X2) -> take(X1, X2) take(X1, mark(X2)) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (97) UsableRulesProof (EQUIVALENT) 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. ---------------------------------------- (98) Obligation: Q DP problem: The TRS P consists of the following rules: U52^1(active(X)) -> U52^1(X) U52^1(mark(X)) -> U52^1(X) R is empty. The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (99) QReductionProof (EQUIVALENT) We deleted the following terms from Q as each root-symbol of these terms does neither occur in P nor in R.[THIEMANN]. cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) ---------------------------------------- (100) Obligation: Q DP problem: The TRS P consists of the following rules: U52^1(active(X)) -> U52^1(X) U52^1(mark(X)) -> U52^1(X) R is empty. The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (101) QDPSizeChangeProof (EQUIVALENT) 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. From the DPs we obtained the following set of size-change graphs: *U52^1(active(X)) -> U52^1(X) The graph contains the following edges 1 > 1 *U52^1(mark(X)) -> U52^1(X) The graph contains the following edges 1 > 1 ---------------------------------------- (102) YES ---------------------------------------- (103) Obligation: Q DP problem: The TRS P consists of the following rules: U51^1(X1, mark(X2)) -> U51^1(X1, X2) U51^1(mark(X1), X2) -> U51^1(X1, X2) U51^1(active(X1), X2) -> U51^1(X1, X2) U51^1(X1, active(X2)) -> U51^1(X1, X2) The TRS R consists of the following rules: active(zeros) -> mark(cons(0, zeros)) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) active(U42(tt)) -> mark(tt) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) active(U52(tt)) -> mark(tt) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) active(U62(tt)) -> mark(tt) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) active(U72(tt, L)) -> mark(s(length(L))) active(U81(tt)) -> mark(nil) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(0)) -> mark(tt) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) active(isNatIList(V)) -> mark(U31(isNatList(V))) active(isNatIList(zeros)) -> mark(tt) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) active(isNatList(nil)) -> mark(tt) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) active(length(nil)) -> mark(0) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) active(take(0, IL)) -> mark(U81(isNatIList(IL))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) mark(0) -> active(0) mark(U11(X)) -> active(U11(mark(X))) mark(tt) -> active(tt) mark(U21(X)) -> active(U21(mark(X))) mark(U31(X)) -> active(U31(mark(X))) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) mark(U42(X)) -> active(U42(mark(X))) mark(isNatIList(X)) -> active(isNatIList(X)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) mark(U52(X)) -> active(U52(mark(X))) mark(isNatList(X)) -> active(isNatList(X)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) mark(U62(X)) -> active(U62(mark(X))) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) mark(isNat(X)) -> active(isNat(X)) mark(s(X)) -> active(s(mark(X))) mark(length(X)) -> active(length(mark(X))) mark(U81(X)) -> active(U81(mark(X))) mark(nil) -> active(nil) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) cons(mark(X1), X2) -> cons(X1, X2) cons(X1, mark(X2)) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U11(mark(X)) -> U11(X) U11(active(X)) -> U11(X) U21(mark(X)) -> U21(X) U21(active(X)) -> U21(X) U31(mark(X)) -> U31(X) U31(active(X)) -> U31(X) U41(mark(X1), X2) -> U41(X1, X2) U41(X1, mark(X2)) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U42(mark(X)) -> U42(X) U42(active(X)) -> U42(X) isNatIList(mark(X)) -> isNatIList(X) isNatIList(active(X)) -> isNatIList(X) U51(mark(X1), X2) -> U51(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U52(mark(X)) -> U52(X) U52(active(X)) -> U52(X) isNatList(mark(X)) -> isNatList(X) isNatList(active(X)) -> isNatList(X) U61(mark(X1), X2) -> U61(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U62(mark(X)) -> U62(X) U62(active(X)) -> U62(X) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U72(mark(X1), X2) -> U72(X1, X2) U72(X1, mark(X2)) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) isNat(mark(X)) -> isNat(X) isNat(active(X)) -> isNat(X) s(mark(X)) -> s(X) s(active(X)) -> s(X) length(mark(X)) -> length(X) length(active(X)) -> length(X) U81(mark(X)) -> U81(X) U81(active(X)) -> U81(X) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) take(mark(X1), X2) -> take(X1, X2) take(X1, mark(X2)) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (104) UsableRulesProof (EQUIVALENT) 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. ---------------------------------------- (105) Obligation: Q DP problem: The TRS P consists of the following rules: U51^1(X1, mark(X2)) -> U51^1(X1, X2) U51^1(mark(X1), X2) -> U51^1(X1, X2) U51^1(active(X1), X2) -> U51^1(X1, X2) U51^1(X1, active(X2)) -> U51^1(X1, X2) R is empty. The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (106) QReductionProof (EQUIVALENT) We deleted the following terms from Q as each root-symbol of these terms does neither occur in P nor in R.[THIEMANN]. cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) ---------------------------------------- (107) Obligation: Q DP problem: The TRS P consists of the following rules: U51^1(X1, mark(X2)) -> U51^1(X1, X2) U51^1(mark(X1), X2) -> U51^1(X1, X2) U51^1(active(X1), X2) -> U51^1(X1, X2) U51^1(X1, active(X2)) -> U51^1(X1, X2) R is empty. The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (108) QDPSizeChangeProof (EQUIVALENT) 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. From the DPs we obtained the following set of size-change graphs: *U51^1(X1, mark(X2)) -> U51^1(X1, X2) The graph contains the following edges 1 >= 1, 2 > 2 *U51^1(mark(X1), X2) -> U51^1(X1, X2) The graph contains the following edges 1 > 1, 2 >= 2 *U51^1(active(X1), X2) -> U51^1(X1, X2) The graph contains the following edges 1 > 1, 2 >= 2 *U51^1(X1, active(X2)) -> U51^1(X1, X2) The graph contains the following edges 1 >= 1, 2 > 2 ---------------------------------------- (109) YES ---------------------------------------- (110) Obligation: Q DP problem: The TRS P consists of the following rules: ISNATILIST(active(X)) -> ISNATILIST(X) ISNATILIST(mark(X)) -> ISNATILIST(X) The TRS R consists of the following rules: active(zeros) -> mark(cons(0, zeros)) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) active(U42(tt)) -> mark(tt) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) active(U52(tt)) -> mark(tt) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) active(U62(tt)) -> mark(tt) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) active(U72(tt, L)) -> mark(s(length(L))) active(U81(tt)) -> mark(nil) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(0)) -> mark(tt) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) active(isNatIList(V)) -> mark(U31(isNatList(V))) active(isNatIList(zeros)) -> mark(tt) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) active(isNatList(nil)) -> mark(tt) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) active(length(nil)) -> mark(0) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) active(take(0, IL)) -> mark(U81(isNatIList(IL))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) mark(0) -> active(0) mark(U11(X)) -> active(U11(mark(X))) mark(tt) -> active(tt) mark(U21(X)) -> active(U21(mark(X))) mark(U31(X)) -> active(U31(mark(X))) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) mark(U42(X)) -> active(U42(mark(X))) mark(isNatIList(X)) -> active(isNatIList(X)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) mark(U52(X)) -> active(U52(mark(X))) mark(isNatList(X)) -> active(isNatList(X)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) mark(U62(X)) -> active(U62(mark(X))) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) mark(isNat(X)) -> active(isNat(X)) mark(s(X)) -> active(s(mark(X))) mark(length(X)) -> active(length(mark(X))) mark(U81(X)) -> active(U81(mark(X))) mark(nil) -> active(nil) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) cons(mark(X1), X2) -> cons(X1, X2) cons(X1, mark(X2)) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U11(mark(X)) -> U11(X) U11(active(X)) -> U11(X) U21(mark(X)) -> U21(X) U21(active(X)) -> U21(X) U31(mark(X)) -> U31(X) U31(active(X)) -> U31(X) U41(mark(X1), X2) -> U41(X1, X2) U41(X1, mark(X2)) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U42(mark(X)) -> U42(X) U42(active(X)) -> U42(X) isNatIList(mark(X)) -> isNatIList(X) isNatIList(active(X)) -> isNatIList(X) U51(mark(X1), X2) -> U51(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U52(mark(X)) -> U52(X) U52(active(X)) -> U52(X) isNatList(mark(X)) -> isNatList(X) isNatList(active(X)) -> isNatList(X) U61(mark(X1), X2) -> U61(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U62(mark(X)) -> U62(X) U62(active(X)) -> U62(X) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U72(mark(X1), X2) -> U72(X1, X2) U72(X1, mark(X2)) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) isNat(mark(X)) -> isNat(X) isNat(active(X)) -> isNat(X) s(mark(X)) -> s(X) s(active(X)) -> s(X) length(mark(X)) -> length(X) length(active(X)) -> length(X) U81(mark(X)) -> U81(X) U81(active(X)) -> U81(X) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) take(mark(X1), X2) -> take(X1, X2) take(X1, mark(X2)) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (111) UsableRulesProof (EQUIVALENT) 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. ---------------------------------------- (112) Obligation: Q DP problem: The TRS P consists of the following rules: ISNATILIST(active(X)) -> ISNATILIST(X) ISNATILIST(mark(X)) -> ISNATILIST(X) R is empty. The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (113) QReductionProof (EQUIVALENT) We deleted the following terms from Q as each root-symbol of these terms does neither occur in P nor in R.[THIEMANN]. cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) ---------------------------------------- (114) Obligation: Q DP problem: The TRS P consists of the following rules: ISNATILIST(active(X)) -> ISNATILIST(X) ISNATILIST(mark(X)) -> ISNATILIST(X) R is empty. The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (115) QDPSizeChangeProof (EQUIVALENT) 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. From the DPs we obtained the following set of size-change graphs: *ISNATILIST(active(X)) -> ISNATILIST(X) The graph contains the following edges 1 > 1 *ISNATILIST(mark(X)) -> ISNATILIST(X) The graph contains the following edges 1 > 1 ---------------------------------------- (116) YES ---------------------------------------- (117) Obligation: Q DP problem: The TRS P consists of the following rules: U42^1(active(X)) -> U42^1(X) U42^1(mark(X)) -> U42^1(X) The TRS R consists of the following rules: active(zeros) -> mark(cons(0, zeros)) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) active(U42(tt)) -> mark(tt) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) active(U52(tt)) -> mark(tt) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) active(U62(tt)) -> mark(tt) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) active(U72(tt, L)) -> mark(s(length(L))) active(U81(tt)) -> mark(nil) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(0)) -> mark(tt) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) active(isNatIList(V)) -> mark(U31(isNatList(V))) active(isNatIList(zeros)) -> mark(tt) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) active(isNatList(nil)) -> mark(tt) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) active(length(nil)) -> mark(0) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) active(take(0, IL)) -> mark(U81(isNatIList(IL))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) mark(0) -> active(0) mark(U11(X)) -> active(U11(mark(X))) mark(tt) -> active(tt) mark(U21(X)) -> active(U21(mark(X))) mark(U31(X)) -> active(U31(mark(X))) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) mark(U42(X)) -> active(U42(mark(X))) mark(isNatIList(X)) -> active(isNatIList(X)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) mark(U52(X)) -> active(U52(mark(X))) mark(isNatList(X)) -> active(isNatList(X)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) mark(U62(X)) -> active(U62(mark(X))) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) mark(isNat(X)) -> active(isNat(X)) mark(s(X)) -> active(s(mark(X))) mark(length(X)) -> active(length(mark(X))) mark(U81(X)) -> active(U81(mark(X))) mark(nil) -> active(nil) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) cons(mark(X1), X2) -> cons(X1, X2) cons(X1, mark(X2)) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U11(mark(X)) -> U11(X) U11(active(X)) -> U11(X) U21(mark(X)) -> U21(X) U21(active(X)) -> U21(X) U31(mark(X)) -> U31(X) U31(active(X)) -> U31(X) U41(mark(X1), X2) -> U41(X1, X2) U41(X1, mark(X2)) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U42(mark(X)) -> U42(X) U42(active(X)) -> U42(X) isNatIList(mark(X)) -> isNatIList(X) isNatIList(active(X)) -> isNatIList(X) U51(mark(X1), X2) -> U51(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U52(mark(X)) -> U52(X) U52(active(X)) -> U52(X) isNatList(mark(X)) -> isNatList(X) isNatList(active(X)) -> isNatList(X) U61(mark(X1), X2) -> U61(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U62(mark(X)) -> U62(X) U62(active(X)) -> U62(X) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U72(mark(X1), X2) -> U72(X1, X2) U72(X1, mark(X2)) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) isNat(mark(X)) -> isNat(X) isNat(active(X)) -> isNat(X) s(mark(X)) -> s(X) s(active(X)) -> s(X) length(mark(X)) -> length(X) length(active(X)) -> length(X) U81(mark(X)) -> U81(X) U81(active(X)) -> U81(X) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) take(mark(X1), X2) -> take(X1, X2) take(X1, mark(X2)) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (118) UsableRulesProof (EQUIVALENT) 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. ---------------------------------------- (119) Obligation: Q DP problem: The TRS P consists of the following rules: U42^1(active(X)) -> U42^1(X) U42^1(mark(X)) -> U42^1(X) R is empty. The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (120) QReductionProof (EQUIVALENT) We deleted the following terms from Q as each root-symbol of these terms does neither occur in P nor in R.[THIEMANN]. cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) ---------------------------------------- (121) Obligation: Q DP problem: The TRS P consists of the following rules: U42^1(active(X)) -> U42^1(X) U42^1(mark(X)) -> U42^1(X) R is empty. The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (122) QDPSizeChangeProof (EQUIVALENT) 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. From the DPs we obtained the following set of size-change graphs: *U42^1(active(X)) -> U42^1(X) The graph contains the following edges 1 > 1 *U42^1(mark(X)) -> U42^1(X) The graph contains the following edges 1 > 1 ---------------------------------------- (123) YES ---------------------------------------- (124) Obligation: Q DP problem: The TRS P consists of the following rules: U41^1(X1, mark(X2)) -> U41^1(X1, X2) U41^1(mark(X1), X2) -> U41^1(X1, X2) U41^1(active(X1), X2) -> U41^1(X1, X2) U41^1(X1, active(X2)) -> U41^1(X1, X2) The TRS R consists of the following rules: active(zeros) -> mark(cons(0, zeros)) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) active(U42(tt)) -> mark(tt) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) active(U52(tt)) -> mark(tt) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) active(U62(tt)) -> mark(tt) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) active(U72(tt, L)) -> mark(s(length(L))) active(U81(tt)) -> mark(nil) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(0)) -> mark(tt) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) active(isNatIList(V)) -> mark(U31(isNatList(V))) active(isNatIList(zeros)) -> mark(tt) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) active(isNatList(nil)) -> mark(tt) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) active(length(nil)) -> mark(0) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) active(take(0, IL)) -> mark(U81(isNatIList(IL))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) mark(0) -> active(0) mark(U11(X)) -> active(U11(mark(X))) mark(tt) -> active(tt) mark(U21(X)) -> active(U21(mark(X))) mark(U31(X)) -> active(U31(mark(X))) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) mark(U42(X)) -> active(U42(mark(X))) mark(isNatIList(X)) -> active(isNatIList(X)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) mark(U52(X)) -> active(U52(mark(X))) mark(isNatList(X)) -> active(isNatList(X)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) mark(U62(X)) -> active(U62(mark(X))) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) mark(isNat(X)) -> active(isNat(X)) mark(s(X)) -> active(s(mark(X))) mark(length(X)) -> active(length(mark(X))) mark(U81(X)) -> active(U81(mark(X))) mark(nil) -> active(nil) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) cons(mark(X1), X2) -> cons(X1, X2) cons(X1, mark(X2)) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U11(mark(X)) -> U11(X) U11(active(X)) -> U11(X) U21(mark(X)) -> U21(X) U21(active(X)) -> U21(X) U31(mark(X)) -> U31(X) U31(active(X)) -> U31(X) U41(mark(X1), X2) -> U41(X1, X2) U41(X1, mark(X2)) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U42(mark(X)) -> U42(X) U42(active(X)) -> U42(X) isNatIList(mark(X)) -> isNatIList(X) isNatIList(active(X)) -> isNatIList(X) U51(mark(X1), X2) -> U51(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U52(mark(X)) -> U52(X) U52(active(X)) -> U52(X) isNatList(mark(X)) -> isNatList(X) isNatList(active(X)) -> isNatList(X) U61(mark(X1), X2) -> U61(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U62(mark(X)) -> U62(X) U62(active(X)) -> U62(X) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U72(mark(X1), X2) -> U72(X1, X2) U72(X1, mark(X2)) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) isNat(mark(X)) -> isNat(X) isNat(active(X)) -> isNat(X) s(mark(X)) -> s(X) s(active(X)) -> s(X) length(mark(X)) -> length(X) length(active(X)) -> length(X) U81(mark(X)) -> U81(X) U81(active(X)) -> U81(X) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) take(mark(X1), X2) -> take(X1, X2) take(X1, mark(X2)) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (125) UsableRulesProof (EQUIVALENT) 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. ---------------------------------------- (126) Obligation: Q DP problem: The TRS P consists of the following rules: U41^1(X1, mark(X2)) -> U41^1(X1, X2) U41^1(mark(X1), X2) -> U41^1(X1, X2) U41^1(active(X1), X2) -> U41^1(X1, X2) U41^1(X1, active(X2)) -> U41^1(X1, X2) R is empty. The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (127) QReductionProof (EQUIVALENT) We deleted the following terms from Q as each root-symbol of these terms does neither occur in P nor in R.[THIEMANN]. cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) ---------------------------------------- (128) Obligation: Q DP problem: The TRS P consists of the following rules: U41^1(X1, mark(X2)) -> U41^1(X1, X2) U41^1(mark(X1), X2) -> U41^1(X1, X2) U41^1(active(X1), X2) -> U41^1(X1, X2) U41^1(X1, active(X2)) -> U41^1(X1, X2) R is empty. The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (129) QDPSizeChangeProof (EQUIVALENT) 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. From the DPs we obtained the following set of size-change graphs: *U41^1(X1, mark(X2)) -> U41^1(X1, X2) The graph contains the following edges 1 >= 1, 2 > 2 *U41^1(mark(X1), X2) -> U41^1(X1, X2) The graph contains the following edges 1 > 1, 2 >= 2 *U41^1(active(X1), X2) -> U41^1(X1, X2) The graph contains the following edges 1 > 1, 2 >= 2 *U41^1(X1, active(X2)) -> U41^1(X1, X2) The graph contains the following edges 1 >= 1, 2 > 2 ---------------------------------------- (130) YES ---------------------------------------- (131) Obligation: Q DP problem: The TRS P consists of the following rules: U31^1(active(X)) -> U31^1(X) U31^1(mark(X)) -> U31^1(X) The TRS R consists of the following rules: active(zeros) -> mark(cons(0, zeros)) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) active(U42(tt)) -> mark(tt) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) active(U52(tt)) -> mark(tt) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) active(U62(tt)) -> mark(tt) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) active(U72(tt, L)) -> mark(s(length(L))) active(U81(tt)) -> mark(nil) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(0)) -> mark(tt) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) active(isNatIList(V)) -> mark(U31(isNatList(V))) active(isNatIList(zeros)) -> mark(tt) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) active(isNatList(nil)) -> mark(tt) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) active(length(nil)) -> mark(0) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) active(take(0, IL)) -> mark(U81(isNatIList(IL))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) mark(0) -> active(0) mark(U11(X)) -> active(U11(mark(X))) mark(tt) -> active(tt) mark(U21(X)) -> active(U21(mark(X))) mark(U31(X)) -> active(U31(mark(X))) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) mark(U42(X)) -> active(U42(mark(X))) mark(isNatIList(X)) -> active(isNatIList(X)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) mark(U52(X)) -> active(U52(mark(X))) mark(isNatList(X)) -> active(isNatList(X)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) mark(U62(X)) -> active(U62(mark(X))) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) mark(isNat(X)) -> active(isNat(X)) mark(s(X)) -> active(s(mark(X))) mark(length(X)) -> active(length(mark(X))) mark(U81(X)) -> active(U81(mark(X))) mark(nil) -> active(nil) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) cons(mark(X1), X2) -> cons(X1, X2) cons(X1, mark(X2)) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U11(mark(X)) -> U11(X) U11(active(X)) -> U11(X) U21(mark(X)) -> U21(X) U21(active(X)) -> U21(X) U31(mark(X)) -> U31(X) U31(active(X)) -> U31(X) U41(mark(X1), X2) -> U41(X1, X2) U41(X1, mark(X2)) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U42(mark(X)) -> U42(X) U42(active(X)) -> U42(X) isNatIList(mark(X)) -> isNatIList(X) isNatIList(active(X)) -> isNatIList(X) U51(mark(X1), X2) -> U51(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U52(mark(X)) -> U52(X) U52(active(X)) -> U52(X) isNatList(mark(X)) -> isNatList(X) isNatList(active(X)) -> isNatList(X) U61(mark(X1), X2) -> U61(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U62(mark(X)) -> U62(X) U62(active(X)) -> U62(X) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U72(mark(X1), X2) -> U72(X1, X2) U72(X1, mark(X2)) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) isNat(mark(X)) -> isNat(X) isNat(active(X)) -> isNat(X) s(mark(X)) -> s(X) s(active(X)) -> s(X) length(mark(X)) -> length(X) length(active(X)) -> length(X) U81(mark(X)) -> U81(X) U81(active(X)) -> U81(X) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) take(mark(X1), X2) -> take(X1, X2) take(X1, mark(X2)) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (132) UsableRulesProof (EQUIVALENT) 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. ---------------------------------------- (133) Obligation: Q DP problem: The TRS P consists of the following rules: U31^1(active(X)) -> U31^1(X) U31^1(mark(X)) -> U31^1(X) R is empty. The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (134) QReductionProof (EQUIVALENT) We deleted the following terms from Q as each root-symbol of these terms does neither occur in P nor in R.[THIEMANN]. cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) ---------------------------------------- (135) Obligation: Q DP problem: The TRS P consists of the following rules: U31^1(active(X)) -> U31^1(X) U31^1(mark(X)) -> U31^1(X) R is empty. The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (136) QDPSizeChangeProof (EQUIVALENT) 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. From the DPs we obtained the following set of size-change graphs: *U31^1(active(X)) -> U31^1(X) The graph contains the following edges 1 > 1 *U31^1(mark(X)) -> U31^1(X) The graph contains the following edges 1 > 1 ---------------------------------------- (137) YES ---------------------------------------- (138) Obligation: Q DP problem: The TRS P consists of the following rules: U21^1(active(X)) -> U21^1(X) U21^1(mark(X)) -> U21^1(X) The TRS R consists of the following rules: active(zeros) -> mark(cons(0, zeros)) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) active(U42(tt)) -> mark(tt) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) active(U52(tt)) -> mark(tt) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) active(U62(tt)) -> mark(tt) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) active(U72(tt, L)) -> mark(s(length(L))) active(U81(tt)) -> mark(nil) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(0)) -> mark(tt) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) active(isNatIList(V)) -> mark(U31(isNatList(V))) active(isNatIList(zeros)) -> mark(tt) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) active(isNatList(nil)) -> mark(tt) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) active(length(nil)) -> mark(0) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) active(take(0, IL)) -> mark(U81(isNatIList(IL))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) mark(0) -> active(0) mark(U11(X)) -> active(U11(mark(X))) mark(tt) -> active(tt) mark(U21(X)) -> active(U21(mark(X))) mark(U31(X)) -> active(U31(mark(X))) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) mark(U42(X)) -> active(U42(mark(X))) mark(isNatIList(X)) -> active(isNatIList(X)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) mark(U52(X)) -> active(U52(mark(X))) mark(isNatList(X)) -> active(isNatList(X)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) mark(U62(X)) -> active(U62(mark(X))) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) mark(isNat(X)) -> active(isNat(X)) mark(s(X)) -> active(s(mark(X))) mark(length(X)) -> active(length(mark(X))) mark(U81(X)) -> active(U81(mark(X))) mark(nil) -> active(nil) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) cons(mark(X1), X2) -> cons(X1, X2) cons(X1, mark(X2)) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U11(mark(X)) -> U11(X) U11(active(X)) -> U11(X) U21(mark(X)) -> U21(X) U21(active(X)) -> U21(X) U31(mark(X)) -> U31(X) U31(active(X)) -> U31(X) U41(mark(X1), X2) -> U41(X1, X2) U41(X1, mark(X2)) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U42(mark(X)) -> U42(X) U42(active(X)) -> U42(X) isNatIList(mark(X)) -> isNatIList(X) isNatIList(active(X)) -> isNatIList(X) U51(mark(X1), X2) -> U51(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U52(mark(X)) -> U52(X) U52(active(X)) -> U52(X) isNatList(mark(X)) -> isNatList(X) isNatList(active(X)) -> isNatList(X) U61(mark(X1), X2) -> U61(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U62(mark(X)) -> U62(X) U62(active(X)) -> U62(X) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U72(mark(X1), X2) -> U72(X1, X2) U72(X1, mark(X2)) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) isNat(mark(X)) -> isNat(X) isNat(active(X)) -> isNat(X) s(mark(X)) -> s(X) s(active(X)) -> s(X) length(mark(X)) -> length(X) length(active(X)) -> length(X) U81(mark(X)) -> U81(X) U81(active(X)) -> U81(X) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) take(mark(X1), X2) -> take(X1, X2) take(X1, mark(X2)) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (139) UsableRulesProof (EQUIVALENT) 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. ---------------------------------------- (140) Obligation: Q DP problem: The TRS P consists of the following rules: U21^1(active(X)) -> U21^1(X) U21^1(mark(X)) -> U21^1(X) R is empty. The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (141) QReductionProof (EQUIVALENT) We deleted the following terms from Q as each root-symbol of these terms does neither occur in P nor in R.[THIEMANN]. cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) ---------------------------------------- (142) Obligation: Q DP problem: The TRS P consists of the following rules: U21^1(active(X)) -> U21^1(X) U21^1(mark(X)) -> U21^1(X) R is empty. The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (143) QDPSizeChangeProof (EQUIVALENT) 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. From the DPs we obtained the following set of size-change graphs: *U21^1(active(X)) -> U21^1(X) The graph contains the following edges 1 > 1 *U21^1(mark(X)) -> U21^1(X) The graph contains the following edges 1 > 1 ---------------------------------------- (144) YES ---------------------------------------- (145) Obligation: Q DP problem: The TRS P consists of the following rules: U11^1(active(X)) -> U11^1(X) U11^1(mark(X)) -> U11^1(X) The TRS R consists of the following rules: active(zeros) -> mark(cons(0, zeros)) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) active(U42(tt)) -> mark(tt) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) active(U52(tt)) -> mark(tt) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) active(U62(tt)) -> mark(tt) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) active(U72(tt, L)) -> mark(s(length(L))) active(U81(tt)) -> mark(nil) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(0)) -> mark(tt) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) active(isNatIList(V)) -> mark(U31(isNatList(V))) active(isNatIList(zeros)) -> mark(tt) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) active(isNatList(nil)) -> mark(tt) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) active(length(nil)) -> mark(0) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) active(take(0, IL)) -> mark(U81(isNatIList(IL))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) mark(0) -> active(0) mark(U11(X)) -> active(U11(mark(X))) mark(tt) -> active(tt) mark(U21(X)) -> active(U21(mark(X))) mark(U31(X)) -> active(U31(mark(X))) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) mark(U42(X)) -> active(U42(mark(X))) mark(isNatIList(X)) -> active(isNatIList(X)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) mark(U52(X)) -> active(U52(mark(X))) mark(isNatList(X)) -> active(isNatList(X)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) mark(U62(X)) -> active(U62(mark(X))) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) mark(isNat(X)) -> active(isNat(X)) mark(s(X)) -> active(s(mark(X))) mark(length(X)) -> active(length(mark(X))) mark(U81(X)) -> active(U81(mark(X))) mark(nil) -> active(nil) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) cons(mark(X1), X2) -> cons(X1, X2) cons(X1, mark(X2)) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U11(mark(X)) -> U11(X) U11(active(X)) -> U11(X) U21(mark(X)) -> U21(X) U21(active(X)) -> U21(X) U31(mark(X)) -> U31(X) U31(active(X)) -> U31(X) U41(mark(X1), X2) -> U41(X1, X2) U41(X1, mark(X2)) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U42(mark(X)) -> U42(X) U42(active(X)) -> U42(X) isNatIList(mark(X)) -> isNatIList(X) isNatIList(active(X)) -> isNatIList(X) U51(mark(X1), X2) -> U51(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U52(mark(X)) -> U52(X) U52(active(X)) -> U52(X) isNatList(mark(X)) -> isNatList(X) isNatList(active(X)) -> isNatList(X) U61(mark(X1), X2) -> U61(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U62(mark(X)) -> U62(X) U62(active(X)) -> U62(X) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U72(mark(X1), X2) -> U72(X1, X2) U72(X1, mark(X2)) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) isNat(mark(X)) -> isNat(X) isNat(active(X)) -> isNat(X) s(mark(X)) -> s(X) s(active(X)) -> s(X) length(mark(X)) -> length(X) length(active(X)) -> length(X) U81(mark(X)) -> U81(X) U81(active(X)) -> U81(X) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) take(mark(X1), X2) -> take(X1, X2) take(X1, mark(X2)) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (146) UsableRulesProof (EQUIVALENT) 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. ---------------------------------------- (147) Obligation: Q DP problem: The TRS P consists of the following rules: U11^1(active(X)) -> U11^1(X) U11^1(mark(X)) -> U11^1(X) R is empty. The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (148) QReductionProof (EQUIVALENT) We deleted the following terms from Q as each root-symbol of these terms does neither occur in P nor in R.[THIEMANN]. cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) ---------------------------------------- (149) Obligation: Q DP problem: The TRS P consists of the following rules: U11^1(active(X)) -> U11^1(X) U11^1(mark(X)) -> U11^1(X) R is empty. The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (150) QDPSizeChangeProof (EQUIVALENT) 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. From the DPs we obtained the following set of size-change graphs: *U11^1(active(X)) -> U11^1(X) The graph contains the following edges 1 > 1 *U11^1(mark(X)) -> U11^1(X) The graph contains the following edges 1 > 1 ---------------------------------------- (151) YES ---------------------------------------- (152) Obligation: Q DP problem: The TRS P consists of the following rules: CONS(X1, mark(X2)) -> CONS(X1, X2) CONS(mark(X1), X2) -> CONS(X1, X2) CONS(active(X1), X2) -> CONS(X1, X2) CONS(X1, active(X2)) -> CONS(X1, X2) The TRS R consists of the following rules: active(zeros) -> mark(cons(0, zeros)) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) active(U42(tt)) -> mark(tt) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) active(U52(tt)) -> mark(tt) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) active(U62(tt)) -> mark(tt) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) active(U72(tt, L)) -> mark(s(length(L))) active(U81(tt)) -> mark(nil) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(0)) -> mark(tt) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) active(isNatIList(V)) -> mark(U31(isNatList(V))) active(isNatIList(zeros)) -> mark(tt) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) active(isNatList(nil)) -> mark(tt) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) active(length(nil)) -> mark(0) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) active(take(0, IL)) -> mark(U81(isNatIList(IL))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) mark(0) -> active(0) mark(U11(X)) -> active(U11(mark(X))) mark(tt) -> active(tt) mark(U21(X)) -> active(U21(mark(X))) mark(U31(X)) -> active(U31(mark(X))) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) mark(U42(X)) -> active(U42(mark(X))) mark(isNatIList(X)) -> active(isNatIList(X)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) mark(U52(X)) -> active(U52(mark(X))) mark(isNatList(X)) -> active(isNatList(X)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) mark(U62(X)) -> active(U62(mark(X))) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) mark(isNat(X)) -> active(isNat(X)) mark(s(X)) -> active(s(mark(X))) mark(length(X)) -> active(length(mark(X))) mark(U81(X)) -> active(U81(mark(X))) mark(nil) -> active(nil) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) cons(mark(X1), X2) -> cons(X1, X2) cons(X1, mark(X2)) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U11(mark(X)) -> U11(X) U11(active(X)) -> U11(X) U21(mark(X)) -> U21(X) U21(active(X)) -> U21(X) U31(mark(X)) -> U31(X) U31(active(X)) -> U31(X) U41(mark(X1), X2) -> U41(X1, X2) U41(X1, mark(X2)) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U42(mark(X)) -> U42(X) U42(active(X)) -> U42(X) isNatIList(mark(X)) -> isNatIList(X) isNatIList(active(X)) -> isNatIList(X) U51(mark(X1), X2) -> U51(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U52(mark(X)) -> U52(X) U52(active(X)) -> U52(X) isNatList(mark(X)) -> isNatList(X) isNatList(active(X)) -> isNatList(X) U61(mark(X1), X2) -> U61(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U62(mark(X)) -> U62(X) U62(active(X)) -> U62(X) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U72(mark(X1), X2) -> U72(X1, X2) U72(X1, mark(X2)) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) isNat(mark(X)) -> isNat(X) isNat(active(X)) -> isNat(X) s(mark(X)) -> s(X) s(active(X)) -> s(X) length(mark(X)) -> length(X) length(active(X)) -> length(X) U81(mark(X)) -> U81(X) U81(active(X)) -> U81(X) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) take(mark(X1), X2) -> take(X1, X2) take(X1, mark(X2)) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (153) UsableRulesProof (EQUIVALENT) 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. ---------------------------------------- (154) Obligation: Q DP problem: The TRS P consists of the following rules: CONS(X1, mark(X2)) -> CONS(X1, X2) CONS(mark(X1), X2) -> CONS(X1, X2) CONS(active(X1), X2) -> CONS(X1, X2) CONS(X1, active(X2)) -> CONS(X1, X2) R is empty. The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (155) QReductionProof (EQUIVALENT) We deleted the following terms from Q as each root-symbol of these terms does neither occur in P nor in R.[THIEMANN]. cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) ---------------------------------------- (156) Obligation: Q DP problem: The TRS P consists of the following rules: CONS(X1, mark(X2)) -> CONS(X1, X2) CONS(mark(X1), X2) -> CONS(X1, X2) CONS(active(X1), X2) -> CONS(X1, X2) CONS(X1, active(X2)) -> CONS(X1, X2) R is empty. The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (157) QDPSizeChangeProof (EQUIVALENT) 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. From the DPs we obtained the following set of size-change graphs: *CONS(X1, mark(X2)) -> CONS(X1, X2) The graph contains the following edges 1 >= 1, 2 > 2 *CONS(mark(X1), X2) -> CONS(X1, X2) The graph contains the following edges 1 > 1, 2 >= 2 *CONS(active(X1), X2) -> CONS(X1, X2) The graph contains the following edges 1 > 1, 2 >= 2 *CONS(X1, active(X2)) -> CONS(X1, X2) The graph contains the following edges 1 >= 1, 2 > 2 ---------------------------------------- (158) YES ---------------------------------------- (159) Obligation: Q DP problem: The TRS P consists of the following rules: MARK(cons(X1, X2)) -> ACTIVE(cons(mark(X1), X2)) ACTIVE(U41(tt, V2)) -> MARK(U42(isNatIList(V2))) MARK(U42(X)) -> ACTIVE(U42(mark(X))) ACTIVE(U51(tt, V2)) -> MARK(U52(isNatList(V2))) MARK(U52(X)) -> ACTIVE(U52(mark(X))) ACTIVE(U61(tt, V2)) -> MARK(U62(isNatIList(V2))) MARK(U62(X)) -> ACTIVE(U62(mark(X))) ACTIVE(U71(tt, L, N)) -> MARK(U72(isNat(N), L)) MARK(U72(X1, X2)) -> ACTIVE(U72(mark(X1), X2)) ACTIVE(U72(tt, L)) -> MARK(s(length(L))) MARK(s(X)) -> ACTIVE(s(mark(X))) ACTIVE(U91(tt, IL, M, N)) -> MARK(U92(isNat(M), IL, M, N)) MARK(U92(X1, X2, X3, X4)) -> ACTIVE(U92(mark(X1), X2, X3, X4)) ACTIVE(U92(tt, IL, M, N)) -> MARK(U93(isNat(N), IL, M, N)) MARK(U93(X1, X2, X3, X4)) -> ACTIVE(U93(mark(X1), X2, X3, X4)) ACTIVE(U93(tt, IL, M, N)) -> MARK(cons(N, take(M, IL))) MARK(cons(X1, X2)) -> MARK(X1) MARK(zeros) -> ACTIVE(zeros) ACTIVE(zeros) -> MARK(cons(0, zeros)) MARK(U11(X)) -> ACTIVE(U11(mark(X))) ACTIVE(length(cons(N, L))) -> MARK(U71(isNatList(L), L, N)) MARK(U71(X1, X2, X3)) -> ACTIVE(U71(mark(X1), X2, X3)) ACTIVE(take(0, IL)) -> MARK(U81(isNatIList(IL))) MARK(U81(X)) -> ACTIVE(U81(mark(X))) ACTIVE(take(s(M), cons(N, IL))) -> MARK(U91(isNatIList(IL), IL, M, N)) MARK(U91(X1, X2, X3, X4)) -> ACTIVE(U91(mark(X1), X2, X3, X4)) MARK(U91(X1, X2, X3, X4)) -> MARK(X1) MARK(U11(X)) -> MARK(X) MARK(U21(X)) -> ACTIVE(U21(mark(X))) MARK(U21(X)) -> MARK(X) MARK(U31(X)) -> ACTIVE(U31(mark(X))) MARK(U31(X)) -> MARK(X) MARK(U41(X1, X2)) -> ACTIVE(U41(mark(X1), X2)) MARK(U41(X1, X2)) -> MARK(X1) MARK(U42(X)) -> MARK(X) MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) ACTIVE(isNatIList(V)) -> MARK(U31(isNatList(V))) ACTIVE(isNatIList(cons(V1, V2))) -> MARK(U41(isNat(V1), V2)) MARK(U51(X1, X2)) -> ACTIVE(U51(mark(X1), X2)) MARK(U51(X1, X2)) -> MARK(X1) MARK(U52(X)) -> MARK(X) MARK(isNatList(X)) -> ACTIVE(isNatList(X)) ACTIVE(isNatList(cons(V1, V2))) -> MARK(U51(isNat(V1), V2)) ACTIVE(isNatList(take(V1, V2))) -> MARK(U61(isNat(V1), V2)) MARK(U61(X1, X2)) -> ACTIVE(U61(mark(X1), X2)) MARK(U61(X1, X2)) -> MARK(X1) MARK(U62(X)) -> MARK(X) MARK(U71(X1, X2, X3)) -> MARK(X1) MARK(U72(X1, X2)) -> MARK(X1) MARK(isNat(X)) -> ACTIVE(isNat(X)) ACTIVE(isNat(length(V1))) -> MARK(U11(isNatList(V1))) ACTIVE(isNat(s(V1))) -> MARK(U21(isNat(V1))) MARK(s(X)) -> MARK(X) MARK(length(X)) -> ACTIVE(length(mark(X))) MARK(length(X)) -> MARK(X) MARK(U81(X)) -> MARK(X) MARK(U92(X1, X2, X3, X4)) -> MARK(X1) MARK(U93(X1, X2, X3, X4)) -> MARK(X1) MARK(take(X1, X2)) -> ACTIVE(take(mark(X1), mark(X2))) MARK(take(X1, X2)) -> MARK(X1) MARK(take(X1, X2)) -> MARK(X2) The TRS R consists of the following rules: active(zeros) -> mark(cons(0, zeros)) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) active(U42(tt)) -> mark(tt) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) active(U52(tt)) -> mark(tt) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) active(U62(tt)) -> mark(tt) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) active(U72(tt, L)) -> mark(s(length(L))) active(U81(tt)) -> mark(nil) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(0)) -> mark(tt) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) active(isNatIList(V)) -> mark(U31(isNatList(V))) active(isNatIList(zeros)) -> mark(tt) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) active(isNatList(nil)) -> mark(tt) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) active(length(nil)) -> mark(0) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) active(take(0, IL)) -> mark(U81(isNatIList(IL))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) mark(0) -> active(0) mark(U11(X)) -> active(U11(mark(X))) mark(tt) -> active(tt) mark(U21(X)) -> active(U21(mark(X))) mark(U31(X)) -> active(U31(mark(X))) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) mark(U42(X)) -> active(U42(mark(X))) mark(isNatIList(X)) -> active(isNatIList(X)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) mark(U52(X)) -> active(U52(mark(X))) mark(isNatList(X)) -> active(isNatList(X)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) mark(U62(X)) -> active(U62(mark(X))) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) mark(isNat(X)) -> active(isNat(X)) mark(s(X)) -> active(s(mark(X))) mark(length(X)) -> active(length(mark(X))) mark(U81(X)) -> active(U81(mark(X))) mark(nil) -> active(nil) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) cons(mark(X1), X2) -> cons(X1, X2) cons(X1, mark(X2)) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U11(mark(X)) -> U11(X) U11(active(X)) -> U11(X) U21(mark(X)) -> U21(X) U21(active(X)) -> U21(X) U31(mark(X)) -> U31(X) U31(active(X)) -> U31(X) U41(mark(X1), X2) -> U41(X1, X2) U41(X1, mark(X2)) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U42(mark(X)) -> U42(X) U42(active(X)) -> U42(X) isNatIList(mark(X)) -> isNatIList(X) isNatIList(active(X)) -> isNatIList(X) U51(mark(X1), X2) -> U51(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U52(mark(X)) -> U52(X) U52(active(X)) -> U52(X) isNatList(mark(X)) -> isNatList(X) isNatList(active(X)) -> isNatList(X) U61(mark(X1), X2) -> U61(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U62(mark(X)) -> U62(X) U62(active(X)) -> U62(X) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U72(mark(X1), X2) -> U72(X1, X2) U72(X1, mark(X2)) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) isNat(mark(X)) -> isNat(X) isNat(active(X)) -> isNat(X) s(mark(X)) -> s(X) s(active(X)) -> s(X) length(mark(X)) -> length(X) length(active(X)) -> length(X) U81(mark(X)) -> U81(X) U81(active(X)) -> U81(X) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) take(mark(X1), X2) -> take(X1, X2) take(X1, mark(X2)) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (160) UsableRulesProof (EQUIVALENT) 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. ---------------------------------------- (161) Obligation: Q DP problem: The TRS P consists of the following rules: MARK(cons(X1, X2)) -> ACTIVE(cons(mark(X1), X2)) ACTIVE(U41(tt, V2)) -> MARK(U42(isNatIList(V2))) MARK(U42(X)) -> ACTIVE(U42(mark(X))) ACTIVE(U51(tt, V2)) -> MARK(U52(isNatList(V2))) MARK(U52(X)) -> ACTIVE(U52(mark(X))) ACTIVE(U61(tt, V2)) -> MARK(U62(isNatIList(V2))) MARK(U62(X)) -> ACTIVE(U62(mark(X))) ACTIVE(U71(tt, L, N)) -> MARK(U72(isNat(N), L)) MARK(U72(X1, X2)) -> ACTIVE(U72(mark(X1), X2)) ACTIVE(U72(tt, L)) -> MARK(s(length(L))) MARK(s(X)) -> ACTIVE(s(mark(X))) ACTIVE(U91(tt, IL, M, N)) -> MARK(U92(isNat(M), IL, M, N)) MARK(U92(X1, X2, X3, X4)) -> ACTIVE(U92(mark(X1), X2, X3, X4)) ACTIVE(U92(tt, IL, M, N)) -> MARK(U93(isNat(N), IL, M, N)) MARK(U93(X1, X2, X3, X4)) -> ACTIVE(U93(mark(X1), X2, X3, X4)) ACTIVE(U93(tt, IL, M, N)) -> MARK(cons(N, take(M, IL))) MARK(cons(X1, X2)) -> MARK(X1) MARK(zeros) -> ACTIVE(zeros) ACTIVE(zeros) -> MARK(cons(0, zeros)) MARK(U11(X)) -> ACTIVE(U11(mark(X))) ACTIVE(length(cons(N, L))) -> MARK(U71(isNatList(L), L, N)) MARK(U71(X1, X2, X3)) -> ACTIVE(U71(mark(X1), X2, X3)) ACTIVE(take(0, IL)) -> MARK(U81(isNatIList(IL))) MARK(U81(X)) -> ACTIVE(U81(mark(X))) ACTIVE(take(s(M), cons(N, IL))) -> MARK(U91(isNatIList(IL), IL, M, N)) MARK(U91(X1, X2, X3, X4)) -> ACTIVE(U91(mark(X1), X2, X3, X4)) MARK(U91(X1, X2, X3, X4)) -> MARK(X1) MARK(U11(X)) -> MARK(X) MARK(U21(X)) -> ACTIVE(U21(mark(X))) MARK(U21(X)) -> MARK(X) MARK(U31(X)) -> ACTIVE(U31(mark(X))) MARK(U31(X)) -> MARK(X) MARK(U41(X1, X2)) -> ACTIVE(U41(mark(X1), X2)) MARK(U41(X1, X2)) -> MARK(X1) MARK(U42(X)) -> MARK(X) MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) ACTIVE(isNatIList(V)) -> MARK(U31(isNatList(V))) ACTIVE(isNatIList(cons(V1, V2))) -> MARK(U41(isNat(V1), V2)) MARK(U51(X1, X2)) -> ACTIVE(U51(mark(X1), X2)) MARK(U51(X1, X2)) -> MARK(X1) MARK(U52(X)) -> MARK(X) MARK(isNatList(X)) -> ACTIVE(isNatList(X)) ACTIVE(isNatList(cons(V1, V2))) -> MARK(U51(isNat(V1), V2)) ACTIVE(isNatList(take(V1, V2))) -> MARK(U61(isNat(V1), V2)) MARK(U61(X1, X2)) -> ACTIVE(U61(mark(X1), X2)) MARK(U61(X1, X2)) -> MARK(X1) MARK(U62(X)) -> MARK(X) MARK(U71(X1, X2, X3)) -> MARK(X1) MARK(U72(X1, X2)) -> MARK(X1) MARK(isNat(X)) -> ACTIVE(isNat(X)) ACTIVE(isNat(length(V1))) -> MARK(U11(isNatList(V1))) ACTIVE(isNat(s(V1))) -> MARK(U21(isNat(V1))) MARK(s(X)) -> MARK(X) MARK(length(X)) -> ACTIVE(length(mark(X))) MARK(length(X)) -> MARK(X) MARK(U81(X)) -> MARK(X) MARK(U92(X1, X2, X3, X4)) -> MARK(X1) MARK(U93(X1, X2, X3, X4)) -> MARK(X1) MARK(take(X1, X2)) -> ACTIVE(take(mark(X1), mark(X2))) MARK(take(X1, X2)) -> MARK(X1) MARK(take(X1, X2)) -> MARK(X2) The TRS R consists of the following rules: mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) active(zeros) -> mark(cons(0, zeros)) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) mark(U42(X)) -> active(U42(mark(X))) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) mark(U52(X)) -> active(U52(mark(X))) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) mark(U62(X)) -> active(U62(mark(X))) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) active(U72(tt, L)) -> mark(s(length(L))) mark(s(X)) -> active(s(mark(X))) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) mark(U11(X)) -> active(U11(mark(X))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) mark(U21(X)) -> active(U21(mark(X))) active(isNatIList(V)) -> mark(U31(isNatList(V))) mark(U31(X)) -> active(U31(mark(X))) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) active(take(0, IL)) -> mark(U81(isNatIList(IL))) mark(U81(X)) -> active(U81(mark(X))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(0) -> active(0) mark(tt) -> active(tt) mark(isNatIList(X)) -> active(isNatIList(X)) mark(isNatList(X)) -> active(isNatList(X)) mark(isNat(X)) -> active(isNat(X)) mark(length(X)) -> active(length(mark(X))) mark(nil) -> active(nil) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) take(X1, mark(X2)) -> take(X1, X2) take(mark(X1), X2) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U42(tt)) -> mark(tt) active(U52(tt)) -> mark(tt) active(U62(tt)) -> mark(tt) active(U81(tt)) -> mark(nil) active(isNat(0)) -> mark(tt) active(isNatIList(zeros)) -> mark(tt) active(isNatList(nil)) -> mark(tt) active(length(nil)) -> mark(0) length(active(X)) -> length(X) length(mark(X)) -> length(X) cons(X1, mark(X2)) -> cons(X1, X2) cons(mark(X1), X2) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U42(active(X)) -> U42(X) U42(mark(X)) -> U42(X) U52(active(X)) -> U52(X) U52(mark(X)) -> U52(X) U62(active(X)) -> U62(X) U62(mark(X)) -> U62(X) U72(X1, mark(X2)) -> U72(X1, X2) U72(mark(X1), X2) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) s(active(X)) -> s(X) s(mark(X)) -> s(X) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) U11(active(X)) -> U11(X) U11(mark(X)) -> U11(X) U21(active(X)) -> U21(X) U21(mark(X)) -> U21(X) U31(active(X)) -> U31(X) U31(mark(X)) -> U31(X) U41(X1, mark(X2)) -> U41(X1, X2) U41(mark(X1), X2) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(mark(X1), X2) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(mark(X1), X2) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U81(active(X)) -> U81(X) U81(mark(X)) -> U81(X) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (162) QDPOrderProof (EQUIVALENT) We use the reduction pair processor [LPAR04,JAR06]. The following pairs can be oriented strictly and are deleted. MARK(cons(X1, X2)) -> ACTIVE(cons(mark(X1), X2)) MARK(U42(X)) -> ACTIVE(U42(mark(X))) MARK(U52(X)) -> ACTIVE(U52(mark(X))) MARK(U62(X)) -> ACTIVE(U62(mark(X))) MARK(s(X)) -> ACTIVE(s(mark(X))) MARK(U11(X)) -> ACTIVE(U11(mark(X))) MARK(U81(X)) -> ACTIVE(U81(mark(X))) MARK(U21(X)) -> ACTIVE(U21(mark(X))) MARK(U31(X)) -> ACTIVE(U31(mark(X))) The remaining pairs can at least be oriented weakly. Used ordering: Polynomial Order [NEGPOLO,POLO] with Interpretation: POL( ACTIVE_1(x_1) ) = max{0, x_1 - 1} POL( U11_1(x_1) ) = max{0, -2} POL( U21_1(x_1) ) = max{0, -2} POL( U31_1(x_1) ) = max{0, -2} POL( U41_2(x_1, x_2) ) = 2 POL( U42_1(x_1) ) = 0 POL( U51_2(x_1, x_2) ) = 2 POL( U52_1(x_1) ) = 0 POL( U61_2(x_1, x_2) ) = 2 POL( U62_1(x_1) ) = max{0, -2} POL( U71_3(x_1, ..., x_3) ) = 2 POL( U72_2(x_1, x_2) ) = 2 POL( U81_1(x_1) ) = max{0, -2} POL( U91_4(x_1, ..., x_4) ) = 2 POL( U92_4(x_1, ..., x_4) ) = 2 POL( U93_4(x_1, ..., x_4) ) = 2 POL( cons_2(x_1, x_2) ) = max{0, -2} POL( length_1(x_1) ) = 2 POL( s_1(x_1) ) = max{0, -2} POL( take_2(x_1, x_2) ) = 2 POL( mark_1(x_1) ) = 2 POL( zeros ) = 2 POL( active_1(x_1) ) = max{0, -2} POL( 0 ) = 0 POL( tt ) = 0 POL( isNatIList_1(x_1) ) = 2 POL( isNatList_1(x_1) ) = 2 POL( isNat_1(x_1) ) = 2 POL( nil ) = 0 POL( MARK_1(x_1) ) = 1 The following usable rules [FROCOS05] with respect to the argument filtering of the ordering [JAR06] were oriented: cons(X1, mark(X2)) -> cons(X1, X2) cons(mark(X1), X2) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U42(active(X)) -> U42(X) U42(mark(X)) -> U42(X) U52(active(X)) -> U52(X) U52(mark(X)) -> U52(X) U62(active(X)) -> U62(X) U62(mark(X)) -> U62(X) U72(X1, mark(X2)) -> U72(X1, X2) U72(mark(X1), X2) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) s(active(X)) -> s(X) s(mark(X)) -> s(X) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) U11(active(X)) -> U11(X) U11(mark(X)) -> U11(X) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U81(active(X)) -> U81(X) U81(mark(X)) -> U81(X) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) U21(active(X)) -> U21(X) U21(mark(X)) -> U21(X) U31(active(X)) -> U31(X) U31(mark(X)) -> U31(X) U41(X1, mark(X2)) -> U41(X1, X2) U41(mark(X1), X2) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(mark(X1), X2) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(mark(X1), X2) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) length(active(X)) -> length(X) length(mark(X)) -> length(X) take(X1, mark(X2)) -> take(X1, X2) take(mark(X1), X2) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) ---------------------------------------- (163) Obligation: Q DP problem: The TRS P consists of the following rules: ACTIVE(U41(tt, V2)) -> MARK(U42(isNatIList(V2))) ACTIVE(U51(tt, V2)) -> MARK(U52(isNatList(V2))) ACTIVE(U61(tt, V2)) -> MARK(U62(isNatIList(V2))) ACTIVE(U71(tt, L, N)) -> MARK(U72(isNat(N), L)) MARK(U72(X1, X2)) -> ACTIVE(U72(mark(X1), X2)) ACTIVE(U72(tt, L)) -> MARK(s(length(L))) ACTIVE(U91(tt, IL, M, N)) -> MARK(U92(isNat(M), IL, M, N)) MARK(U92(X1, X2, X3, X4)) -> ACTIVE(U92(mark(X1), X2, X3, X4)) ACTIVE(U92(tt, IL, M, N)) -> MARK(U93(isNat(N), IL, M, N)) MARK(U93(X1, X2, X3, X4)) -> ACTIVE(U93(mark(X1), X2, X3, X4)) ACTIVE(U93(tt, IL, M, N)) -> MARK(cons(N, take(M, IL))) MARK(cons(X1, X2)) -> MARK(X1) MARK(zeros) -> ACTIVE(zeros) ACTIVE(zeros) -> MARK(cons(0, zeros)) ACTIVE(length(cons(N, L))) -> MARK(U71(isNatList(L), L, N)) MARK(U71(X1, X2, X3)) -> ACTIVE(U71(mark(X1), X2, X3)) ACTIVE(take(0, IL)) -> MARK(U81(isNatIList(IL))) ACTIVE(take(s(M), cons(N, IL))) -> MARK(U91(isNatIList(IL), IL, M, N)) MARK(U91(X1, X2, X3, X4)) -> ACTIVE(U91(mark(X1), X2, X3, X4)) MARK(U91(X1, X2, X3, X4)) -> MARK(X1) MARK(U11(X)) -> MARK(X) MARK(U21(X)) -> MARK(X) MARK(U31(X)) -> MARK(X) MARK(U41(X1, X2)) -> ACTIVE(U41(mark(X1), X2)) MARK(U41(X1, X2)) -> MARK(X1) MARK(U42(X)) -> MARK(X) MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) ACTIVE(isNatIList(V)) -> MARK(U31(isNatList(V))) ACTIVE(isNatIList(cons(V1, V2))) -> MARK(U41(isNat(V1), V2)) MARK(U51(X1, X2)) -> ACTIVE(U51(mark(X1), X2)) MARK(U51(X1, X2)) -> MARK(X1) MARK(U52(X)) -> MARK(X) MARK(isNatList(X)) -> ACTIVE(isNatList(X)) ACTIVE(isNatList(cons(V1, V2))) -> MARK(U51(isNat(V1), V2)) ACTIVE(isNatList(take(V1, V2))) -> MARK(U61(isNat(V1), V2)) MARK(U61(X1, X2)) -> ACTIVE(U61(mark(X1), X2)) MARK(U61(X1, X2)) -> MARK(X1) MARK(U62(X)) -> MARK(X) MARK(U71(X1, X2, X3)) -> MARK(X1) MARK(U72(X1, X2)) -> MARK(X1) MARK(isNat(X)) -> ACTIVE(isNat(X)) ACTIVE(isNat(length(V1))) -> MARK(U11(isNatList(V1))) ACTIVE(isNat(s(V1))) -> MARK(U21(isNat(V1))) MARK(s(X)) -> MARK(X) MARK(length(X)) -> ACTIVE(length(mark(X))) MARK(length(X)) -> MARK(X) MARK(U81(X)) -> MARK(X) MARK(U92(X1, X2, X3, X4)) -> MARK(X1) MARK(U93(X1, X2, X3, X4)) -> MARK(X1) MARK(take(X1, X2)) -> ACTIVE(take(mark(X1), mark(X2))) MARK(take(X1, X2)) -> MARK(X1) MARK(take(X1, X2)) -> MARK(X2) The TRS R consists of the following rules: mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) active(zeros) -> mark(cons(0, zeros)) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) mark(U42(X)) -> active(U42(mark(X))) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) mark(U52(X)) -> active(U52(mark(X))) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) mark(U62(X)) -> active(U62(mark(X))) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) active(U72(tt, L)) -> mark(s(length(L))) mark(s(X)) -> active(s(mark(X))) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) mark(U11(X)) -> active(U11(mark(X))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) mark(U21(X)) -> active(U21(mark(X))) active(isNatIList(V)) -> mark(U31(isNatList(V))) mark(U31(X)) -> active(U31(mark(X))) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) active(take(0, IL)) -> mark(U81(isNatIList(IL))) mark(U81(X)) -> active(U81(mark(X))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(0) -> active(0) mark(tt) -> active(tt) mark(isNatIList(X)) -> active(isNatIList(X)) mark(isNatList(X)) -> active(isNatList(X)) mark(isNat(X)) -> active(isNat(X)) mark(length(X)) -> active(length(mark(X))) mark(nil) -> active(nil) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) take(X1, mark(X2)) -> take(X1, X2) take(mark(X1), X2) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U42(tt)) -> mark(tt) active(U52(tt)) -> mark(tt) active(U62(tt)) -> mark(tt) active(U81(tt)) -> mark(nil) active(isNat(0)) -> mark(tt) active(isNatIList(zeros)) -> mark(tt) active(isNatList(nil)) -> mark(tt) active(length(nil)) -> mark(0) length(active(X)) -> length(X) length(mark(X)) -> length(X) cons(X1, mark(X2)) -> cons(X1, X2) cons(mark(X1), X2) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U42(active(X)) -> U42(X) U42(mark(X)) -> U42(X) U52(active(X)) -> U52(X) U52(mark(X)) -> U52(X) U62(active(X)) -> U62(X) U62(mark(X)) -> U62(X) U72(X1, mark(X2)) -> U72(X1, X2) U72(mark(X1), X2) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) s(active(X)) -> s(X) s(mark(X)) -> s(X) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) U11(active(X)) -> U11(X) U11(mark(X)) -> U11(X) U21(active(X)) -> U21(X) U21(mark(X)) -> U21(X) U31(active(X)) -> U31(X) U31(mark(X)) -> U31(X) U41(X1, mark(X2)) -> U41(X1, X2) U41(mark(X1), X2) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(mark(X1), X2) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(mark(X1), X2) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U81(active(X)) -> U81(X) U81(mark(X)) -> U81(X) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (164) QDPOrderProof (EQUIVALENT) We use the reduction pair processor [LPAR04,JAR06]. The following pairs can be oriented strictly and are deleted. MARK(U71(X1, X2, X3)) -> MARK(X1) MARK(U72(X1, X2)) -> MARK(X1) MARK(length(X)) -> MARK(X) The remaining pairs can at least be oriented weakly. Used ordering: Polynomial interpretation [POLO]: POL(0) = 0 POL(ACTIVE(x_1)) = x_1 POL(MARK(x_1)) = x_1 POL(U11(x_1)) = x_1 POL(U21(x_1)) = x_1 POL(U31(x_1)) = x_1 POL(U41(x_1, x_2)) = x_1 POL(U42(x_1)) = x_1 POL(U51(x_1, x_2)) = x_1 POL(U52(x_1)) = x_1 POL(U61(x_1, x_2)) = x_1 POL(U62(x_1)) = x_1 POL(U71(x_1, x_2, x_3)) = 1 + x_1 + x_2 POL(U72(x_1, x_2)) = 1 + x_1 + x_2 POL(U81(x_1)) = x_1 POL(U91(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(U92(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(U93(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(active(x_1)) = x_1 POL(cons(x_1, x_2)) = x_1 + x_2 POL(isNat(x_1)) = 0 POL(isNatIList(x_1)) = 0 POL(isNatList(x_1)) = 0 POL(length(x_1)) = 1 + x_1 POL(mark(x_1)) = x_1 POL(nil) = 0 POL(s(x_1)) = x_1 POL(take(x_1, x_2)) = x_1 + x_2 POL(tt) = 0 POL(zeros) = 0 The following usable rules [FROCOS05] with respect to the argument filtering of the ordering [JAR06] were oriented: mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) active(zeros) -> mark(cons(0, zeros)) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) mark(U42(X)) -> active(U42(mark(X))) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) mark(U52(X)) -> active(U52(mark(X))) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) mark(U62(X)) -> active(U62(mark(X))) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) active(U72(tt, L)) -> mark(s(length(L))) mark(s(X)) -> active(s(mark(X))) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) mark(U11(X)) -> active(U11(mark(X))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) mark(U21(X)) -> active(U21(mark(X))) active(isNatIList(V)) -> mark(U31(isNatList(V))) mark(U31(X)) -> active(U31(mark(X))) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) active(take(0, IL)) -> mark(U81(isNatIList(IL))) mark(U81(X)) -> active(U81(mark(X))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(0) -> active(0) mark(tt) -> active(tt) mark(isNatIList(X)) -> active(isNatIList(X)) mark(isNatList(X)) -> active(isNatList(X)) mark(isNat(X)) -> active(isNat(X)) mark(length(X)) -> active(length(mark(X))) mark(nil) -> active(nil) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) U72(X1, mark(X2)) -> U72(X1, X2) U72(mark(X1), X2) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) U41(X1, mark(X2)) -> U41(X1, X2) U41(mark(X1), X2) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(mark(X1), X2) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(mark(X1), X2) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) length(active(X)) -> length(X) length(mark(X)) -> length(X) take(X1, mark(X2)) -> take(X1, X2) take(mark(X1), X2) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U42(tt)) -> mark(tt) active(U52(tt)) -> mark(tt) active(U62(tt)) -> mark(tt) active(U81(tt)) -> mark(nil) active(isNat(0)) -> mark(tt) active(isNatIList(zeros)) -> mark(tt) active(isNatList(nil)) -> mark(tt) active(length(nil)) -> mark(0) cons(X1, mark(X2)) -> cons(X1, X2) cons(mark(X1), X2) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U42(active(X)) -> U42(X) U42(mark(X)) -> U42(X) U52(active(X)) -> U52(X) U52(mark(X)) -> U52(X) U62(active(X)) -> U62(X) U62(mark(X)) -> U62(X) s(active(X)) -> s(X) s(mark(X)) -> s(X) U11(active(X)) -> U11(X) U11(mark(X)) -> U11(X) U21(active(X)) -> U21(X) U21(mark(X)) -> U21(X) U31(active(X)) -> U31(X) U31(mark(X)) -> U31(X) U81(active(X)) -> U81(X) U81(mark(X)) -> U81(X) ---------------------------------------- (165) Obligation: Q DP problem: The TRS P consists of the following rules: ACTIVE(U41(tt, V2)) -> MARK(U42(isNatIList(V2))) ACTIVE(U51(tt, V2)) -> MARK(U52(isNatList(V2))) ACTIVE(U61(tt, V2)) -> MARK(U62(isNatIList(V2))) ACTIVE(U71(tt, L, N)) -> MARK(U72(isNat(N), L)) MARK(U72(X1, X2)) -> ACTIVE(U72(mark(X1), X2)) ACTIVE(U72(tt, L)) -> MARK(s(length(L))) ACTIVE(U91(tt, IL, M, N)) -> MARK(U92(isNat(M), IL, M, N)) MARK(U92(X1, X2, X3, X4)) -> ACTIVE(U92(mark(X1), X2, X3, X4)) ACTIVE(U92(tt, IL, M, N)) -> MARK(U93(isNat(N), IL, M, N)) MARK(U93(X1, X2, X3, X4)) -> ACTIVE(U93(mark(X1), X2, X3, X4)) ACTIVE(U93(tt, IL, M, N)) -> MARK(cons(N, take(M, IL))) MARK(cons(X1, X2)) -> MARK(X1) MARK(zeros) -> ACTIVE(zeros) ACTIVE(zeros) -> MARK(cons(0, zeros)) ACTIVE(length(cons(N, L))) -> MARK(U71(isNatList(L), L, N)) MARK(U71(X1, X2, X3)) -> ACTIVE(U71(mark(X1), X2, X3)) ACTIVE(take(0, IL)) -> MARK(U81(isNatIList(IL))) ACTIVE(take(s(M), cons(N, IL))) -> MARK(U91(isNatIList(IL), IL, M, N)) MARK(U91(X1, X2, X3, X4)) -> ACTIVE(U91(mark(X1), X2, X3, X4)) MARK(U91(X1, X2, X3, X4)) -> MARK(X1) MARK(U11(X)) -> MARK(X) MARK(U21(X)) -> MARK(X) MARK(U31(X)) -> MARK(X) MARK(U41(X1, X2)) -> ACTIVE(U41(mark(X1), X2)) MARK(U41(X1, X2)) -> MARK(X1) MARK(U42(X)) -> MARK(X) MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) ACTIVE(isNatIList(V)) -> MARK(U31(isNatList(V))) ACTIVE(isNatIList(cons(V1, V2))) -> MARK(U41(isNat(V1), V2)) MARK(U51(X1, X2)) -> ACTIVE(U51(mark(X1), X2)) MARK(U51(X1, X2)) -> MARK(X1) MARK(U52(X)) -> MARK(X) MARK(isNatList(X)) -> ACTIVE(isNatList(X)) ACTIVE(isNatList(cons(V1, V2))) -> MARK(U51(isNat(V1), V2)) ACTIVE(isNatList(take(V1, V2))) -> MARK(U61(isNat(V1), V2)) MARK(U61(X1, X2)) -> ACTIVE(U61(mark(X1), X2)) MARK(U61(X1, X2)) -> MARK(X1) MARK(U62(X)) -> MARK(X) MARK(isNat(X)) -> ACTIVE(isNat(X)) ACTIVE(isNat(length(V1))) -> MARK(U11(isNatList(V1))) ACTIVE(isNat(s(V1))) -> MARK(U21(isNat(V1))) MARK(s(X)) -> MARK(X) MARK(length(X)) -> ACTIVE(length(mark(X))) MARK(U81(X)) -> MARK(X) MARK(U92(X1, X2, X3, X4)) -> MARK(X1) MARK(U93(X1, X2, X3, X4)) -> MARK(X1) MARK(take(X1, X2)) -> ACTIVE(take(mark(X1), mark(X2))) MARK(take(X1, X2)) -> MARK(X1) MARK(take(X1, X2)) -> MARK(X2) The TRS R consists of the following rules: mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) active(zeros) -> mark(cons(0, zeros)) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) mark(U42(X)) -> active(U42(mark(X))) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) mark(U52(X)) -> active(U52(mark(X))) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) mark(U62(X)) -> active(U62(mark(X))) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) active(U72(tt, L)) -> mark(s(length(L))) mark(s(X)) -> active(s(mark(X))) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) mark(U11(X)) -> active(U11(mark(X))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) mark(U21(X)) -> active(U21(mark(X))) active(isNatIList(V)) -> mark(U31(isNatList(V))) mark(U31(X)) -> active(U31(mark(X))) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) active(take(0, IL)) -> mark(U81(isNatIList(IL))) mark(U81(X)) -> active(U81(mark(X))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(0) -> active(0) mark(tt) -> active(tt) mark(isNatIList(X)) -> active(isNatIList(X)) mark(isNatList(X)) -> active(isNatList(X)) mark(isNat(X)) -> active(isNat(X)) mark(length(X)) -> active(length(mark(X))) mark(nil) -> active(nil) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) take(X1, mark(X2)) -> take(X1, X2) take(mark(X1), X2) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U42(tt)) -> mark(tt) active(U52(tt)) -> mark(tt) active(U62(tt)) -> mark(tt) active(U81(tt)) -> mark(nil) active(isNat(0)) -> mark(tt) active(isNatIList(zeros)) -> mark(tt) active(isNatList(nil)) -> mark(tt) active(length(nil)) -> mark(0) length(active(X)) -> length(X) length(mark(X)) -> length(X) cons(X1, mark(X2)) -> cons(X1, X2) cons(mark(X1), X2) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U42(active(X)) -> U42(X) U42(mark(X)) -> U42(X) U52(active(X)) -> U52(X) U52(mark(X)) -> U52(X) U62(active(X)) -> U62(X) U62(mark(X)) -> U62(X) U72(X1, mark(X2)) -> U72(X1, X2) U72(mark(X1), X2) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) s(active(X)) -> s(X) s(mark(X)) -> s(X) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) U11(active(X)) -> U11(X) U11(mark(X)) -> U11(X) U21(active(X)) -> U21(X) U21(mark(X)) -> U21(X) U31(active(X)) -> U31(X) U31(mark(X)) -> U31(X) U41(X1, mark(X2)) -> U41(X1, X2) U41(mark(X1), X2) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(mark(X1), X2) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(mark(X1), X2) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U81(active(X)) -> U81(X) U81(mark(X)) -> U81(X) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (166) QDPOrderProof (EQUIVALENT) We use the reduction pair processor [LPAR04,JAR06]. The following pairs can be oriented strictly and are deleted. ACTIVE(take(0, IL)) -> MARK(U81(isNatIList(IL))) ACTIVE(take(s(M), cons(N, IL))) -> MARK(U91(isNatIList(IL), IL, M, N)) MARK(U81(X)) -> MARK(X) MARK(take(X1, X2)) -> MARK(X1) MARK(take(X1, X2)) -> MARK(X2) The remaining pairs can at least be oriented weakly. Used ordering: Polynomial Order [NEGPOLO,POLO] with Interpretation: POL( ACTIVE_1(x_1) ) = 2x_1 POL( U41_2(x_1, x_2) ) = x_1 POL( U51_2(x_1, x_2) ) = x_1 POL( U61_2(x_1, x_2) ) = 2x_1 POL( U71_3(x_1, ..., x_3) ) = max{0, -2} POL( U72_2(x_1, x_2) ) = max{0, -2} POL( U91_4(x_1, ..., x_4) ) = x_1 + x_3 + x_4 POL( U92_4(x_1, ..., x_4) ) = 2x_1 + x_4 POL( U93_4(x_1, ..., x_4) ) = 2x_1 + x_4 POL( length_1(x_1) ) = max{0, -2} POL( take_2(x_1, x_2) ) = 2x_1 + 2x_2 + 2 POL( mark_1(x_1) ) = x_1 POL( zeros ) = 0 POL( active_1(x_1) ) = x_1 POL( cons_2(x_1, x_2) ) = x_1 POL( 0 ) = 0 POL( tt ) = 0 POL( U42_1(x_1) ) = 2x_1 POL( isNatIList_1(x_1) ) = 0 POL( U52_1(x_1) ) = 2x_1 POL( isNatList_1(x_1) ) = 0 POL( U62_1(x_1) ) = x_1 POL( isNat_1(x_1) ) = 0 POL( s_1(x_1) ) = x_1 POL( U11_1(x_1) ) = 2x_1 POL( U21_1(x_1) ) = 2x_1 POL( U31_1(x_1) ) = 2x_1 POL( U81_1(x_1) ) = 2x_1 + 1 POL( nil ) = 0 POL( MARK_1(x_1) ) = 2x_1 The following usable rules [FROCOS05] with respect to the argument filtering of the ordering [JAR06] were oriented: mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) active(zeros) -> mark(cons(0, zeros)) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) mark(U42(X)) -> active(U42(mark(X))) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) mark(U52(X)) -> active(U52(mark(X))) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) mark(U62(X)) -> active(U62(mark(X))) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) active(U72(tt, L)) -> mark(s(length(L))) mark(s(X)) -> active(s(mark(X))) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) mark(U11(X)) -> active(U11(mark(X))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) mark(U21(X)) -> active(U21(mark(X))) active(isNatIList(V)) -> mark(U31(isNatList(V))) mark(U31(X)) -> active(U31(mark(X))) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) active(take(0, IL)) -> mark(U81(isNatIList(IL))) mark(U81(X)) -> active(U81(mark(X))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(0) -> active(0) mark(tt) -> active(tt) mark(isNatIList(X)) -> active(isNatIList(X)) mark(isNatList(X)) -> active(isNatList(X)) mark(isNat(X)) -> active(isNat(X)) mark(length(X)) -> active(length(mark(X))) mark(nil) -> active(nil) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) U72(X1, mark(X2)) -> U72(X1, X2) U72(mark(X1), X2) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) U41(X1, mark(X2)) -> U41(X1, X2) U41(mark(X1), X2) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(mark(X1), X2) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(mark(X1), X2) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) length(active(X)) -> length(X) length(mark(X)) -> length(X) take(X1, mark(X2)) -> take(X1, X2) take(mark(X1), X2) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U42(tt)) -> mark(tt) active(U52(tt)) -> mark(tt) active(U62(tt)) -> mark(tt) active(U81(tt)) -> mark(nil) active(isNat(0)) -> mark(tt) active(isNatIList(zeros)) -> mark(tt) active(isNatList(nil)) -> mark(tt) active(length(nil)) -> mark(0) cons(X1, mark(X2)) -> cons(X1, X2) cons(mark(X1), X2) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U42(active(X)) -> U42(X) U42(mark(X)) -> U42(X) U52(active(X)) -> U52(X) U52(mark(X)) -> U52(X) U62(active(X)) -> U62(X) U62(mark(X)) -> U62(X) s(active(X)) -> s(X) s(mark(X)) -> s(X) U11(active(X)) -> U11(X) U11(mark(X)) -> U11(X) U21(active(X)) -> U21(X) U21(mark(X)) -> U21(X) U31(active(X)) -> U31(X) U31(mark(X)) -> U31(X) U81(active(X)) -> U81(X) U81(mark(X)) -> U81(X) ---------------------------------------- (167) Obligation: Q DP problem: The TRS P consists of the following rules: ACTIVE(U41(tt, V2)) -> MARK(U42(isNatIList(V2))) ACTIVE(U51(tt, V2)) -> MARK(U52(isNatList(V2))) ACTIVE(U61(tt, V2)) -> MARK(U62(isNatIList(V2))) ACTIVE(U71(tt, L, N)) -> MARK(U72(isNat(N), L)) MARK(U72(X1, X2)) -> ACTIVE(U72(mark(X1), X2)) ACTIVE(U72(tt, L)) -> MARK(s(length(L))) ACTIVE(U91(tt, IL, M, N)) -> MARK(U92(isNat(M), IL, M, N)) MARK(U92(X1, X2, X3, X4)) -> ACTIVE(U92(mark(X1), X2, X3, X4)) ACTIVE(U92(tt, IL, M, N)) -> MARK(U93(isNat(N), IL, M, N)) MARK(U93(X1, X2, X3, X4)) -> ACTIVE(U93(mark(X1), X2, X3, X4)) ACTIVE(U93(tt, IL, M, N)) -> MARK(cons(N, take(M, IL))) MARK(cons(X1, X2)) -> MARK(X1) MARK(zeros) -> ACTIVE(zeros) ACTIVE(zeros) -> MARK(cons(0, zeros)) ACTIVE(length(cons(N, L))) -> MARK(U71(isNatList(L), L, N)) MARK(U71(X1, X2, X3)) -> ACTIVE(U71(mark(X1), X2, X3)) MARK(U91(X1, X2, X3, X4)) -> ACTIVE(U91(mark(X1), X2, X3, X4)) MARK(U91(X1, X2, X3, X4)) -> MARK(X1) MARK(U11(X)) -> MARK(X) MARK(U21(X)) -> MARK(X) MARK(U31(X)) -> MARK(X) MARK(U41(X1, X2)) -> ACTIVE(U41(mark(X1), X2)) MARK(U41(X1, X2)) -> MARK(X1) MARK(U42(X)) -> MARK(X) MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) ACTIVE(isNatIList(V)) -> MARK(U31(isNatList(V))) ACTIVE(isNatIList(cons(V1, V2))) -> MARK(U41(isNat(V1), V2)) MARK(U51(X1, X2)) -> ACTIVE(U51(mark(X1), X2)) MARK(U51(X1, X2)) -> MARK(X1) MARK(U52(X)) -> MARK(X) MARK(isNatList(X)) -> ACTIVE(isNatList(X)) ACTIVE(isNatList(cons(V1, V2))) -> MARK(U51(isNat(V1), V2)) ACTIVE(isNatList(take(V1, V2))) -> MARK(U61(isNat(V1), V2)) MARK(U61(X1, X2)) -> ACTIVE(U61(mark(X1), X2)) MARK(U61(X1, X2)) -> MARK(X1) MARK(U62(X)) -> MARK(X) MARK(isNat(X)) -> ACTIVE(isNat(X)) ACTIVE(isNat(length(V1))) -> MARK(U11(isNatList(V1))) ACTIVE(isNat(s(V1))) -> MARK(U21(isNat(V1))) MARK(s(X)) -> MARK(X) MARK(length(X)) -> ACTIVE(length(mark(X))) MARK(U92(X1, X2, X3, X4)) -> MARK(X1) MARK(U93(X1, X2, X3, X4)) -> MARK(X1) MARK(take(X1, X2)) -> ACTIVE(take(mark(X1), mark(X2))) The TRS R consists of the following rules: mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) active(zeros) -> mark(cons(0, zeros)) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) mark(U42(X)) -> active(U42(mark(X))) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) mark(U52(X)) -> active(U52(mark(X))) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) mark(U62(X)) -> active(U62(mark(X))) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) active(U72(tt, L)) -> mark(s(length(L))) mark(s(X)) -> active(s(mark(X))) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) mark(U11(X)) -> active(U11(mark(X))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) mark(U21(X)) -> active(U21(mark(X))) active(isNatIList(V)) -> mark(U31(isNatList(V))) mark(U31(X)) -> active(U31(mark(X))) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) active(take(0, IL)) -> mark(U81(isNatIList(IL))) mark(U81(X)) -> active(U81(mark(X))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(0) -> active(0) mark(tt) -> active(tt) mark(isNatIList(X)) -> active(isNatIList(X)) mark(isNatList(X)) -> active(isNatList(X)) mark(isNat(X)) -> active(isNat(X)) mark(length(X)) -> active(length(mark(X))) mark(nil) -> active(nil) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) take(X1, mark(X2)) -> take(X1, X2) take(mark(X1), X2) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U42(tt)) -> mark(tt) active(U52(tt)) -> mark(tt) active(U62(tt)) -> mark(tt) active(U81(tt)) -> mark(nil) active(isNat(0)) -> mark(tt) active(isNatIList(zeros)) -> mark(tt) active(isNatList(nil)) -> mark(tt) active(length(nil)) -> mark(0) length(active(X)) -> length(X) length(mark(X)) -> length(X) cons(X1, mark(X2)) -> cons(X1, X2) cons(mark(X1), X2) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U42(active(X)) -> U42(X) U42(mark(X)) -> U42(X) U52(active(X)) -> U52(X) U52(mark(X)) -> U52(X) U62(active(X)) -> U62(X) U62(mark(X)) -> U62(X) U72(X1, mark(X2)) -> U72(X1, X2) U72(mark(X1), X2) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) s(active(X)) -> s(X) s(mark(X)) -> s(X) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) U11(active(X)) -> U11(X) U11(mark(X)) -> U11(X) U21(active(X)) -> U21(X) U21(mark(X)) -> U21(X) U31(active(X)) -> U31(X) U31(mark(X)) -> U31(X) U41(X1, mark(X2)) -> U41(X1, X2) U41(mark(X1), X2) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(mark(X1), X2) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(mark(X1), X2) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U81(active(X)) -> U81(X) U81(mark(X)) -> U81(X) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (168) QDPQMonotonicMRRProof (EQUIVALENT) 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. Strictly oriented dependency pairs: MARK(take(X1, X2)) -> ACTIVE(take(mark(X1), mark(X2))) Used ordering: Polynomial interpretation [POLO]: POL(0) = 0 POL(ACTIVE(x_1)) = x_1 POL(MARK(x_1)) = 1 POL(U11(x_1)) = 0 POL(U21(x_1)) = 0 POL(U31(x_1)) = 0 POL(U41(x_1, x_2)) = 1 POL(U42(x_1)) = 0 POL(U51(x_1, x_2)) = 1 POL(U52(x_1)) = 0 POL(U61(x_1, x_2)) = 1 POL(U62(x_1)) = 0 POL(U71(x_1, x_2, x_3)) = 1 POL(U72(x_1, x_2)) = 1 POL(U81(x_1)) = 0 POL(U91(x_1, x_2, x_3, x_4)) = 1 POL(U92(x_1, x_2, x_3, x_4)) = 1 POL(U93(x_1, x_2, x_3, x_4)) = 1 POL(active(x_1)) = 0 POL(cons(x_1, x_2)) = 0 POL(isNat(x_1)) = 1 POL(isNatIList(x_1)) = 1 POL(isNatList(x_1)) = 1 POL(length(x_1)) = 1 POL(mark(x_1)) = 0 POL(nil) = 0 POL(s(x_1)) = 0 POL(take(x_1, x_2)) = 0 POL(tt) = 0 POL(zeros) = 1 ---------------------------------------- (169) Obligation: Q DP problem: The TRS P consists of the following rules: ACTIVE(U41(tt, V2)) -> MARK(U42(isNatIList(V2))) ACTIVE(U51(tt, V2)) -> MARK(U52(isNatList(V2))) ACTIVE(U61(tt, V2)) -> MARK(U62(isNatIList(V2))) ACTIVE(U71(tt, L, N)) -> MARK(U72(isNat(N), L)) MARK(U72(X1, X2)) -> ACTIVE(U72(mark(X1), X2)) ACTIVE(U72(tt, L)) -> MARK(s(length(L))) ACTIVE(U91(tt, IL, M, N)) -> MARK(U92(isNat(M), IL, M, N)) MARK(U92(X1, X2, X3, X4)) -> ACTIVE(U92(mark(X1), X2, X3, X4)) ACTIVE(U92(tt, IL, M, N)) -> MARK(U93(isNat(N), IL, M, N)) MARK(U93(X1, X2, X3, X4)) -> ACTIVE(U93(mark(X1), X2, X3, X4)) ACTIVE(U93(tt, IL, M, N)) -> MARK(cons(N, take(M, IL))) MARK(cons(X1, X2)) -> MARK(X1) MARK(zeros) -> ACTIVE(zeros) ACTIVE(zeros) -> MARK(cons(0, zeros)) ACTIVE(length(cons(N, L))) -> MARK(U71(isNatList(L), L, N)) MARK(U71(X1, X2, X3)) -> ACTIVE(U71(mark(X1), X2, X3)) MARK(U91(X1, X2, X3, X4)) -> ACTIVE(U91(mark(X1), X2, X3, X4)) MARK(U91(X1, X2, X3, X4)) -> MARK(X1) MARK(U11(X)) -> MARK(X) MARK(U21(X)) -> MARK(X) MARK(U31(X)) -> MARK(X) MARK(U41(X1, X2)) -> ACTIVE(U41(mark(X1), X2)) MARK(U41(X1, X2)) -> MARK(X1) MARK(U42(X)) -> MARK(X) MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) ACTIVE(isNatIList(V)) -> MARK(U31(isNatList(V))) ACTIVE(isNatIList(cons(V1, V2))) -> MARK(U41(isNat(V1), V2)) MARK(U51(X1, X2)) -> ACTIVE(U51(mark(X1), X2)) MARK(U51(X1, X2)) -> MARK(X1) MARK(U52(X)) -> MARK(X) MARK(isNatList(X)) -> ACTIVE(isNatList(X)) ACTIVE(isNatList(cons(V1, V2))) -> MARK(U51(isNat(V1), V2)) ACTIVE(isNatList(take(V1, V2))) -> MARK(U61(isNat(V1), V2)) MARK(U61(X1, X2)) -> ACTIVE(U61(mark(X1), X2)) MARK(U61(X1, X2)) -> MARK(X1) MARK(U62(X)) -> MARK(X) MARK(isNat(X)) -> ACTIVE(isNat(X)) ACTIVE(isNat(length(V1))) -> MARK(U11(isNatList(V1))) ACTIVE(isNat(s(V1))) -> MARK(U21(isNat(V1))) MARK(s(X)) -> MARK(X) MARK(length(X)) -> ACTIVE(length(mark(X))) MARK(U92(X1, X2, X3, X4)) -> MARK(X1) MARK(U93(X1, X2, X3, X4)) -> MARK(X1) The TRS R consists of the following rules: mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) active(zeros) -> mark(cons(0, zeros)) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) mark(U42(X)) -> active(U42(mark(X))) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) mark(U52(X)) -> active(U52(mark(X))) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) mark(U62(X)) -> active(U62(mark(X))) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) active(U72(tt, L)) -> mark(s(length(L))) mark(s(X)) -> active(s(mark(X))) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) mark(U11(X)) -> active(U11(mark(X))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) mark(U21(X)) -> active(U21(mark(X))) active(isNatIList(V)) -> mark(U31(isNatList(V))) mark(U31(X)) -> active(U31(mark(X))) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) active(take(0, IL)) -> mark(U81(isNatIList(IL))) mark(U81(X)) -> active(U81(mark(X))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(0) -> active(0) mark(tt) -> active(tt) mark(isNatIList(X)) -> active(isNatIList(X)) mark(isNatList(X)) -> active(isNatList(X)) mark(isNat(X)) -> active(isNat(X)) mark(length(X)) -> active(length(mark(X))) mark(nil) -> active(nil) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) take(X1, mark(X2)) -> take(X1, X2) take(mark(X1), X2) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U42(tt)) -> mark(tt) active(U52(tt)) -> mark(tt) active(U62(tt)) -> mark(tt) active(U81(tt)) -> mark(nil) active(isNat(0)) -> mark(tt) active(isNatIList(zeros)) -> mark(tt) active(isNatList(nil)) -> mark(tt) active(length(nil)) -> mark(0) length(active(X)) -> length(X) length(mark(X)) -> length(X) cons(X1, mark(X2)) -> cons(X1, X2) cons(mark(X1), X2) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U42(active(X)) -> U42(X) U42(mark(X)) -> U42(X) U52(active(X)) -> U52(X) U52(mark(X)) -> U52(X) U62(active(X)) -> U62(X) U62(mark(X)) -> U62(X) U72(X1, mark(X2)) -> U72(X1, X2) U72(mark(X1), X2) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) s(active(X)) -> s(X) s(mark(X)) -> s(X) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) U11(active(X)) -> U11(X) U11(mark(X)) -> U11(X) U21(active(X)) -> U21(X) U21(mark(X)) -> U21(X) U31(active(X)) -> U31(X) U31(mark(X)) -> U31(X) U41(X1, mark(X2)) -> U41(X1, X2) U41(mark(X1), X2) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(mark(X1), X2) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(mark(X1), X2) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U81(active(X)) -> U81(X) U81(mark(X)) -> U81(X) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (170) QDPQMonotonicMRRProof (EQUIVALENT) 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. Strictly oriented dependency pairs: ACTIVE(zeros) -> MARK(cons(0, zeros)) Used ordering: Polynomial interpretation [POLO]: POL(0) = 0 POL(ACTIVE(x_1)) = 2*x_1 POL(MARK(x_1)) = 2*x_1 POL(U11(x_1)) = 2*x_1 POL(U21(x_1)) = x_1 POL(U31(x_1)) = x_1 POL(U41(x_1, x_2)) = 2*x_1 POL(U42(x_1)) = x_1 POL(U51(x_1, x_2)) = 2*x_1 POL(U52(x_1)) = 2*x_1 POL(U61(x_1, x_2)) = 2*x_1 POL(U62(x_1)) = x_1 POL(U71(x_1, x_2, x_3)) = 0 POL(U72(x_1, x_2)) = 0 POL(U81(x_1)) = 0 POL(U91(x_1, x_2, x_3, x_4)) = 2*x_1 + x_4 POL(U92(x_1, x_2, x_3, x_4)) = 2*x_1 + x_4 POL(U93(x_1, x_2, x_3, x_4)) = 2*x_1 + x_4 POL(active(x_1)) = x_1 POL(cons(x_1, x_2)) = x_1 POL(isNat(x_1)) = 0 POL(isNatIList(x_1)) = 0 POL(isNatList(x_1)) = 0 POL(length(x_1)) = 0 POL(mark(x_1)) = x_1 POL(nil) = 0 POL(s(x_1)) = x_1 POL(take(x_1, x_2)) = 2 + 2*x_2 POL(tt) = 0 POL(zeros) = 2 ---------------------------------------- (171) Obligation: Q DP problem: The TRS P consists of the following rules: ACTIVE(U41(tt, V2)) -> MARK(U42(isNatIList(V2))) ACTIVE(U51(tt, V2)) -> MARK(U52(isNatList(V2))) ACTIVE(U61(tt, V2)) -> MARK(U62(isNatIList(V2))) ACTIVE(U71(tt, L, N)) -> MARK(U72(isNat(N), L)) MARK(U72(X1, X2)) -> ACTIVE(U72(mark(X1), X2)) ACTIVE(U72(tt, L)) -> MARK(s(length(L))) ACTIVE(U91(tt, IL, M, N)) -> MARK(U92(isNat(M), IL, M, N)) MARK(U92(X1, X2, X3, X4)) -> ACTIVE(U92(mark(X1), X2, X3, X4)) ACTIVE(U92(tt, IL, M, N)) -> MARK(U93(isNat(N), IL, M, N)) MARK(U93(X1, X2, X3, X4)) -> ACTIVE(U93(mark(X1), X2, X3, X4)) ACTIVE(U93(tt, IL, M, N)) -> MARK(cons(N, take(M, IL))) MARK(cons(X1, X2)) -> MARK(X1) MARK(zeros) -> ACTIVE(zeros) ACTIVE(length(cons(N, L))) -> MARK(U71(isNatList(L), L, N)) MARK(U71(X1, X2, X3)) -> ACTIVE(U71(mark(X1), X2, X3)) MARK(U91(X1, X2, X3, X4)) -> ACTIVE(U91(mark(X1), X2, X3, X4)) MARK(U91(X1, X2, X3, X4)) -> MARK(X1) MARK(U11(X)) -> MARK(X) MARK(U21(X)) -> MARK(X) MARK(U31(X)) -> MARK(X) MARK(U41(X1, X2)) -> ACTIVE(U41(mark(X1), X2)) MARK(U41(X1, X2)) -> MARK(X1) MARK(U42(X)) -> MARK(X) MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) ACTIVE(isNatIList(V)) -> MARK(U31(isNatList(V))) ACTIVE(isNatIList(cons(V1, V2))) -> MARK(U41(isNat(V1), V2)) MARK(U51(X1, X2)) -> ACTIVE(U51(mark(X1), X2)) MARK(U51(X1, X2)) -> MARK(X1) MARK(U52(X)) -> MARK(X) MARK(isNatList(X)) -> ACTIVE(isNatList(X)) ACTIVE(isNatList(cons(V1, V2))) -> MARK(U51(isNat(V1), V2)) ACTIVE(isNatList(take(V1, V2))) -> MARK(U61(isNat(V1), V2)) MARK(U61(X1, X2)) -> ACTIVE(U61(mark(X1), X2)) MARK(U61(X1, X2)) -> MARK(X1) MARK(U62(X)) -> MARK(X) MARK(isNat(X)) -> ACTIVE(isNat(X)) ACTIVE(isNat(length(V1))) -> MARK(U11(isNatList(V1))) ACTIVE(isNat(s(V1))) -> MARK(U21(isNat(V1))) MARK(s(X)) -> MARK(X) MARK(length(X)) -> ACTIVE(length(mark(X))) MARK(U92(X1, X2, X3, X4)) -> MARK(X1) MARK(U93(X1, X2, X3, X4)) -> MARK(X1) The TRS R consists of the following rules: mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) active(zeros) -> mark(cons(0, zeros)) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) mark(U42(X)) -> active(U42(mark(X))) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) mark(U52(X)) -> active(U52(mark(X))) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) mark(U62(X)) -> active(U62(mark(X))) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) active(U72(tt, L)) -> mark(s(length(L))) mark(s(X)) -> active(s(mark(X))) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) mark(U11(X)) -> active(U11(mark(X))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) mark(U21(X)) -> active(U21(mark(X))) active(isNatIList(V)) -> mark(U31(isNatList(V))) mark(U31(X)) -> active(U31(mark(X))) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) active(take(0, IL)) -> mark(U81(isNatIList(IL))) mark(U81(X)) -> active(U81(mark(X))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(0) -> active(0) mark(tt) -> active(tt) mark(isNatIList(X)) -> active(isNatIList(X)) mark(isNatList(X)) -> active(isNatList(X)) mark(isNat(X)) -> active(isNat(X)) mark(length(X)) -> active(length(mark(X))) mark(nil) -> active(nil) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) take(X1, mark(X2)) -> take(X1, X2) take(mark(X1), X2) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U42(tt)) -> mark(tt) active(U52(tt)) -> mark(tt) active(U62(tt)) -> mark(tt) active(U81(tt)) -> mark(nil) active(isNat(0)) -> mark(tt) active(isNatIList(zeros)) -> mark(tt) active(isNatList(nil)) -> mark(tt) active(length(nil)) -> mark(0) length(active(X)) -> length(X) length(mark(X)) -> length(X) cons(X1, mark(X2)) -> cons(X1, X2) cons(mark(X1), X2) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U42(active(X)) -> U42(X) U42(mark(X)) -> U42(X) U52(active(X)) -> U52(X) U52(mark(X)) -> U52(X) U62(active(X)) -> U62(X) U62(mark(X)) -> U62(X) U72(X1, mark(X2)) -> U72(X1, X2) U72(mark(X1), X2) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) s(active(X)) -> s(X) s(mark(X)) -> s(X) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) U11(active(X)) -> U11(X) U11(mark(X)) -> U11(X) U21(active(X)) -> U21(X) U21(mark(X)) -> U21(X) U31(active(X)) -> U31(X) U31(mark(X)) -> U31(X) U41(X1, mark(X2)) -> U41(X1, X2) U41(mark(X1), X2) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(mark(X1), X2) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(mark(X1), X2) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U81(active(X)) -> U81(X) U81(mark(X)) -> U81(X) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (172) DependencyGraphProof (EQUIVALENT) The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 1 SCC with 1 less node. ---------------------------------------- (173) Obligation: Q DP problem: The TRS P consists of the following rules: MARK(U42(X)) -> MARK(X) MARK(cons(X1, X2)) -> MARK(X1) MARK(U11(X)) -> MARK(X) MARK(U21(X)) -> MARK(X) MARK(U31(X)) -> MARK(X) MARK(U41(X1, X2)) -> ACTIVE(U41(mark(X1), X2)) ACTIVE(U41(tt, V2)) -> MARK(U42(isNatIList(V2))) ACTIVE(U51(tt, V2)) -> MARK(U52(isNatList(V2))) MARK(U52(X)) -> MARK(X) MARK(U41(X1, X2)) -> MARK(X1) MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) ACTIVE(isNatIList(V)) -> MARK(U31(isNatList(V))) ACTIVE(isNatIList(cons(V1, V2))) -> MARK(U41(isNat(V1), V2)) MARK(U51(X1, X2)) -> ACTIVE(U51(mark(X1), X2)) ACTIVE(U61(tt, V2)) -> MARK(U62(isNatIList(V2))) MARK(U62(X)) -> MARK(X) MARK(U51(X1, X2)) -> MARK(X1) MARK(isNatList(X)) -> ACTIVE(isNatList(X)) ACTIVE(isNatList(cons(V1, V2))) -> MARK(U51(isNat(V1), V2)) ACTIVE(isNatList(take(V1, V2))) -> MARK(U61(isNat(V1), V2)) MARK(U61(X1, X2)) -> ACTIVE(U61(mark(X1), X2)) ACTIVE(U71(tt, L, N)) -> MARK(U72(isNat(N), L)) MARK(U72(X1, X2)) -> ACTIVE(U72(mark(X1), X2)) ACTIVE(U72(tt, L)) -> MARK(s(length(L))) MARK(s(X)) -> MARK(X) MARK(U61(X1, X2)) -> MARK(X1) MARK(U71(X1, X2, X3)) -> ACTIVE(U71(mark(X1), X2, X3)) ACTIVE(U91(tt, IL, M, N)) -> MARK(U92(isNat(M), IL, M, N)) MARK(U92(X1, X2, X3, X4)) -> ACTIVE(U92(mark(X1), X2, X3, X4)) ACTIVE(U92(tt, IL, M, N)) -> MARK(U93(isNat(N), IL, M, N)) MARK(U93(X1, X2, X3, X4)) -> ACTIVE(U93(mark(X1), X2, X3, X4)) ACTIVE(U93(tt, IL, M, N)) -> MARK(cons(N, take(M, IL))) ACTIVE(length(cons(N, L))) -> MARK(U71(isNatList(L), L, N)) MARK(U93(X1, X2, X3, X4)) -> MARK(X1) MARK(isNat(X)) -> ACTIVE(isNat(X)) ACTIVE(isNat(length(V1))) -> MARK(U11(isNatList(V1))) ACTIVE(isNat(s(V1))) -> MARK(U21(isNat(V1))) MARK(length(X)) -> ACTIVE(length(mark(X))) MARK(U91(X1, X2, X3, X4)) -> ACTIVE(U91(mark(X1), X2, X3, X4)) MARK(U91(X1, X2, X3, X4)) -> MARK(X1) MARK(U92(X1, X2, X3, X4)) -> MARK(X1) The TRS R consists of the following rules: mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) active(zeros) -> mark(cons(0, zeros)) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) mark(U42(X)) -> active(U42(mark(X))) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) mark(U52(X)) -> active(U52(mark(X))) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) mark(U62(X)) -> active(U62(mark(X))) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) active(U72(tt, L)) -> mark(s(length(L))) mark(s(X)) -> active(s(mark(X))) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) mark(U11(X)) -> active(U11(mark(X))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) mark(U21(X)) -> active(U21(mark(X))) active(isNatIList(V)) -> mark(U31(isNatList(V))) mark(U31(X)) -> active(U31(mark(X))) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) active(take(0, IL)) -> mark(U81(isNatIList(IL))) mark(U81(X)) -> active(U81(mark(X))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(0) -> active(0) mark(tt) -> active(tt) mark(isNatIList(X)) -> active(isNatIList(X)) mark(isNatList(X)) -> active(isNatList(X)) mark(isNat(X)) -> active(isNat(X)) mark(length(X)) -> active(length(mark(X))) mark(nil) -> active(nil) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) take(X1, mark(X2)) -> take(X1, X2) take(mark(X1), X2) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U42(tt)) -> mark(tt) active(U52(tt)) -> mark(tt) active(U62(tt)) -> mark(tt) active(U81(tt)) -> mark(nil) active(isNat(0)) -> mark(tt) active(isNatIList(zeros)) -> mark(tt) active(isNatList(nil)) -> mark(tt) active(length(nil)) -> mark(0) length(active(X)) -> length(X) length(mark(X)) -> length(X) cons(X1, mark(X2)) -> cons(X1, X2) cons(mark(X1), X2) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U42(active(X)) -> U42(X) U42(mark(X)) -> U42(X) U52(active(X)) -> U52(X) U52(mark(X)) -> U52(X) U62(active(X)) -> U62(X) U62(mark(X)) -> U62(X) U72(X1, mark(X2)) -> U72(X1, X2) U72(mark(X1), X2) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) s(active(X)) -> s(X) s(mark(X)) -> s(X) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) U11(active(X)) -> U11(X) U11(mark(X)) -> U11(X) U21(active(X)) -> U21(X) U21(mark(X)) -> U21(X) U31(active(X)) -> U31(X) U31(mark(X)) -> U31(X) U41(X1, mark(X2)) -> U41(X1, X2) U41(mark(X1), X2) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(mark(X1), X2) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(mark(X1), X2) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U81(active(X)) -> U81(X) U81(mark(X)) -> U81(X) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (174) QDPOrderProof (EQUIVALENT) We use the reduction pair processor [LPAR04,JAR06]. The following pairs can be oriented strictly and are deleted. MARK(cons(X1, X2)) -> MARK(X1) MARK(U93(X1, X2, X3, X4)) -> MARK(X1) MARK(U91(X1, X2, X3, X4)) -> MARK(X1) MARK(U92(X1, X2, X3, X4)) -> MARK(X1) The remaining pairs can at least be oriented weakly. Used ordering: Polynomial Order [NEGPOLO,POLO] with Interpretation: POL( ACTIVE_1(x_1) ) = x_1 + 2 POL( U41_2(x_1, x_2) ) = 2x_1 POL( U51_2(x_1, x_2) ) = 2x_1 POL( U61_2(x_1, x_2) ) = 2x_1 POL( U71_3(x_1, ..., x_3) ) = max{0, -2} POL( U72_2(x_1, x_2) ) = max{0, -2} POL( U91_4(x_1, ..., x_4) ) = 2x_1 + 2x_4 + 2 POL( U92_4(x_1, ..., x_4) ) = x_1 + 2x_4 + 2 POL( U93_4(x_1, ..., x_4) ) = 2x_1 + 2x_4 + 2 POL( length_1(x_1) ) = max{0, -2} POL( mark_1(x_1) ) = x_1 POL( zeros ) = 2 POL( active_1(x_1) ) = x_1 POL( cons_2(x_1, x_2) ) = x_1 + 2 POL( 0 ) = 0 POL( tt ) = 0 POL( U42_1(x_1) ) = 2x_1 POL( isNatIList_1(x_1) ) = 0 POL( U52_1(x_1) ) = 2x_1 POL( isNatList_1(x_1) ) = 0 POL( U62_1(x_1) ) = x_1 POL( isNat_1(x_1) ) = 0 POL( s_1(x_1) ) = x_1 POL( take_2(x_1, x_2) ) = 2x_2 POL( U11_1(x_1) ) = x_1 POL( U21_1(x_1) ) = 2x_1 POL( U31_1(x_1) ) = x_1 POL( U81_1(x_1) ) = max{0, -2} POL( nil ) = 0 POL( MARK_1(x_1) ) = x_1 + 2 The following usable rules [FROCOS05] with respect to the argument filtering of the ordering [JAR06] were oriented: mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) active(zeros) -> mark(cons(0, zeros)) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) mark(U42(X)) -> active(U42(mark(X))) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) mark(U52(X)) -> active(U52(mark(X))) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) mark(U62(X)) -> active(U62(mark(X))) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) active(U72(tt, L)) -> mark(s(length(L))) mark(s(X)) -> active(s(mark(X))) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) mark(U11(X)) -> active(U11(mark(X))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) mark(U21(X)) -> active(U21(mark(X))) active(isNatIList(V)) -> mark(U31(isNatList(V))) mark(U31(X)) -> active(U31(mark(X))) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) active(take(0, IL)) -> mark(U81(isNatIList(IL))) mark(U81(X)) -> active(U81(mark(X))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(0) -> active(0) mark(tt) -> active(tt) mark(isNatIList(X)) -> active(isNatIList(X)) mark(isNatList(X)) -> active(isNatList(X)) mark(isNat(X)) -> active(isNat(X)) mark(length(X)) -> active(length(mark(X))) mark(nil) -> active(nil) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) U41(X1, mark(X2)) -> U41(X1, X2) U41(mark(X1), X2) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(mark(X1), X2) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(mark(X1), X2) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U72(X1, mark(X2)) -> U72(X1, X2) U72(mark(X1), X2) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) length(active(X)) -> length(X) length(mark(X)) -> length(X) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U42(tt)) -> mark(tt) active(U52(tt)) -> mark(tt) active(U62(tt)) -> mark(tt) active(U81(tt)) -> mark(nil) active(isNat(0)) -> mark(tt) active(isNatIList(zeros)) -> mark(tt) active(isNatList(nil)) -> mark(tt) active(length(nil)) -> mark(0) cons(X1, mark(X2)) -> cons(X1, X2) cons(mark(X1), X2) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U42(active(X)) -> U42(X) U42(mark(X)) -> U42(X) U52(active(X)) -> U52(X) U52(mark(X)) -> U52(X) U62(active(X)) -> U62(X) U62(mark(X)) -> U62(X) s(active(X)) -> s(X) s(mark(X)) -> s(X) U11(active(X)) -> U11(X) U11(mark(X)) -> U11(X) U21(active(X)) -> U21(X) U21(mark(X)) -> U21(X) U31(active(X)) -> U31(X) U31(mark(X)) -> U31(X) U81(active(X)) -> U81(X) U81(mark(X)) -> U81(X) take(X1, mark(X2)) -> take(X1, X2) take(mark(X1), X2) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) ---------------------------------------- (175) Obligation: Q DP problem: The TRS P consists of the following rules: MARK(U42(X)) -> MARK(X) MARK(U11(X)) -> MARK(X) MARK(U21(X)) -> MARK(X) MARK(U31(X)) -> MARK(X) MARK(U41(X1, X2)) -> ACTIVE(U41(mark(X1), X2)) ACTIVE(U41(tt, V2)) -> MARK(U42(isNatIList(V2))) ACTIVE(U51(tt, V2)) -> MARK(U52(isNatList(V2))) MARK(U52(X)) -> MARK(X) MARK(U41(X1, X2)) -> MARK(X1) MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) ACTIVE(isNatIList(V)) -> MARK(U31(isNatList(V))) ACTIVE(isNatIList(cons(V1, V2))) -> MARK(U41(isNat(V1), V2)) MARK(U51(X1, X2)) -> ACTIVE(U51(mark(X1), X2)) ACTIVE(U61(tt, V2)) -> MARK(U62(isNatIList(V2))) MARK(U62(X)) -> MARK(X) MARK(U51(X1, X2)) -> MARK(X1) MARK(isNatList(X)) -> ACTIVE(isNatList(X)) ACTIVE(isNatList(cons(V1, V2))) -> MARK(U51(isNat(V1), V2)) ACTIVE(isNatList(take(V1, V2))) -> MARK(U61(isNat(V1), V2)) MARK(U61(X1, X2)) -> ACTIVE(U61(mark(X1), X2)) ACTIVE(U71(tt, L, N)) -> MARK(U72(isNat(N), L)) MARK(U72(X1, X2)) -> ACTIVE(U72(mark(X1), X2)) ACTIVE(U72(tt, L)) -> MARK(s(length(L))) MARK(s(X)) -> MARK(X) MARK(U61(X1, X2)) -> MARK(X1) MARK(U71(X1, X2, X3)) -> ACTIVE(U71(mark(X1), X2, X3)) ACTIVE(U91(tt, IL, M, N)) -> MARK(U92(isNat(M), IL, M, N)) MARK(U92(X1, X2, X3, X4)) -> ACTIVE(U92(mark(X1), X2, X3, X4)) ACTIVE(U92(tt, IL, M, N)) -> MARK(U93(isNat(N), IL, M, N)) MARK(U93(X1, X2, X3, X4)) -> ACTIVE(U93(mark(X1), X2, X3, X4)) ACTIVE(U93(tt, IL, M, N)) -> MARK(cons(N, take(M, IL))) ACTIVE(length(cons(N, L))) -> MARK(U71(isNatList(L), L, N)) MARK(isNat(X)) -> ACTIVE(isNat(X)) ACTIVE(isNat(length(V1))) -> MARK(U11(isNatList(V1))) ACTIVE(isNat(s(V1))) -> MARK(U21(isNat(V1))) MARK(length(X)) -> ACTIVE(length(mark(X))) MARK(U91(X1, X2, X3, X4)) -> ACTIVE(U91(mark(X1), X2, X3, X4)) The TRS R consists of the following rules: mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) active(zeros) -> mark(cons(0, zeros)) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) mark(U42(X)) -> active(U42(mark(X))) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) mark(U52(X)) -> active(U52(mark(X))) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) mark(U62(X)) -> active(U62(mark(X))) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) active(U72(tt, L)) -> mark(s(length(L))) mark(s(X)) -> active(s(mark(X))) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) mark(U11(X)) -> active(U11(mark(X))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) mark(U21(X)) -> active(U21(mark(X))) active(isNatIList(V)) -> mark(U31(isNatList(V))) mark(U31(X)) -> active(U31(mark(X))) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) active(take(0, IL)) -> mark(U81(isNatIList(IL))) mark(U81(X)) -> active(U81(mark(X))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(0) -> active(0) mark(tt) -> active(tt) mark(isNatIList(X)) -> active(isNatIList(X)) mark(isNatList(X)) -> active(isNatList(X)) mark(isNat(X)) -> active(isNat(X)) mark(length(X)) -> active(length(mark(X))) mark(nil) -> active(nil) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) take(X1, mark(X2)) -> take(X1, X2) take(mark(X1), X2) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U42(tt)) -> mark(tt) active(U52(tt)) -> mark(tt) active(U62(tt)) -> mark(tt) active(U81(tt)) -> mark(nil) active(isNat(0)) -> mark(tt) active(isNatIList(zeros)) -> mark(tt) active(isNatList(nil)) -> mark(tt) active(length(nil)) -> mark(0) length(active(X)) -> length(X) length(mark(X)) -> length(X) cons(X1, mark(X2)) -> cons(X1, X2) cons(mark(X1), X2) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U42(active(X)) -> U42(X) U42(mark(X)) -> U42(X) U52(active(X)) -> U52(X) U52(mark(X)) -> U52(X) U62(active(X)) -> U62(X) U62(mark(X)) -> U62(X) U72(X1, mark(X2)) -> U72(X1, X2) U72(mark(X1), X2) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) s(active(X)) -> s(X) s(mark(X)) -> s(X) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) U11(active(X)) -> U11(X) U11(mark(X)) -> U11(X) U21(active(X)) -> U21(X) U21(mark(X)) -> U21(X) U31(active(X)) -> U31(X) U31(mark(X)) -> U31(X) U41(X1, mark(X2)) -> U41(X1, X2) U41(mark(X1), X2) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(mark(X1), X2) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(mark(X1), X2) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U81(active(X)) -> U81(X) U81(mark(X)) -> U81(X) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (176) DependencyGraphProof (EQUIVALENT) The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 1 SCC with 1 less node. ---------------------------------------- (177) Obligation: Q DP problem: The TRS P consists of the following rules: MARK(U11(X)) -> MARK(X) MARK(U21(X)) -> MARK(X) MARK(U31(X)) -> MARK(X) MARK(U41(X1, X2)) -> ACTIVE(U41(mark(X1), X2)) ACTIVE(U41(tt, V2)) -> MARK(U42(isNatIList(V2))) MARK(U42(X)) -> MARK(X) MARK(U41(X1, X2)) -> MARK(X1) MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) ACTIVE(isNatIList(V)) -> MARK(U31(isNatList(V))) ACTIVE(isNatIList(cons(V1, V2))) -> MARK(U41(isNat(V1), V2)) MARK(U51(X1, X2)) -> ACTIVE(U51(mark(X1), X2)) ACTIVE(U51(tt, V2)) -> MARK(U52(isNatList(V2))) MARK(U52(X)) -> MARK(X) MARK(U51(X1, X2)) -> MARK(X1) MARK(isNatList(X)) -> ACTIVE(isNatList(X)) ACTIVE(isNatList(cons(V1, V2))) -> MARK(U51(isNat(V1), V2)) ACTIVE(isNatList(take(V1, V2))) -> MARK(U61(isNat(V1), V2)) MARK(U61(X1, X2)) -> ACTIVE(U61(mark(X1), X2)) ACTIVE(U61(tt, V2)) -> MARK(U62(isNatIList(V2))) MARK(U62(X)) -> MARK(X) MARK(U61(X1, X2)) -> MARK(X1) MARK(U71(X1, X2, X3)) -> ACTIVE(U71(mark(X1), X2, X3)) ACTIVE(U71(tt, L, N)) -> MARK(U72(isNat(N), L)) MARK(U72(X1, X2)) -> ACTIVE(U72(mark(X1), X2)) ACTIVE(U72(tt, L)) -> MARK(s(length(L))) MARK(s(X)) -> MARK(X) MARK(isNat(X)) -> ACTIVE(isNat(X)) ACTIVE(isNat(length(V1))) -> MARK(U11(isNatList(V1))) ACTIVE(isNat(s(V1))) -> MARK(U21(isNat(V1))) MARK(length(X)) -> ACTIVE(length(mark(X))) ACTIVE(U91(tt, IL, M, N)) -> MARK(U92(isNat(M), IL, M, N)) MARK(U92(X1, X2, X3, X4)) -> ACTIVE(U92(mark(X1), X2, X3, X4)) ACTIVE(U92(tt, IL, M, N)) -> MARK(U93(isNat(N), IL, M, N)) MARK(U93(X1, X2, X3, X4)) -> ACTIVE(U93(mark(X1), X2, X3, X4)) ACTIVE(length(cons(N, L))) -> MARK(U71(isNatList(L), L, N)) MARK(U91(X1, X2, X3, X4)) -> ACTIVE(U91(mark(X1), X2, X3, X4)) The TRS R consists of the following rules: mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) active(zeros) -> mark(cons(0, zeros)) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) mark(U42(X)) -> active(U42(mark(X))) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) mark(U52(X)) -> active(U52(mark(X))) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) mark(U62(X)) -> active(U62(mark(X))) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) active(U72(tt, L)) -> mark(s(length(L))) mark(s(X)) -> active(s(mark(X))) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) mark(U11(X)) -> active(U11(mark(X))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) mark(U21(X)) -> active(U21(mark(X))) active(isNatIList(V)) -> mark(U31(isNatList(V))) mark(U31(X)) -> active(U31(mark(X))) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) active(take(0, IL)) -> mark(U81(isNatIList(IL))) mark(U81(X)) -> active(U81(mark(X))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(0) -> active(0) mark(tt) -> active(tt) mark(isNatIList(X)) -> active(isNatIList(X)) mark(isNatList(X)) -> active(isNatList(X)) mark(isNat(X)) -> active(isNat(X)) mark(length(X)) -> active(length(mark(X))) mark(nil) -> active(nil) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) take(X1, mark(X2)) -> take(X1, X2) take(mark(X1), X2) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U42(tt)) -> mark(tt) active(U52(tt)) -> mark(tt) active(U62(tt)) -> mark(tt) active(U81(tt)) -> mark(nil) active(isNat(0)) -> mark(tt) active(isNatIList(zeros)) -> mark(tt) active(isNatList(nil)) -> mark(tt) active(length(nil)) -> mark(0) length(active(X)) -> length(X) length(mark(X)) -> length(X) cons(X1, mark(X2)) -> cons(X1, X2) cons(mark(X1), X2) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U42(active(X)) -> U42(X) U42(mark(X)) -> U42(X) U52(active(X)) -> U52(X) U52(mark(X)) -> U52(X) U62(active(X)) -> U62(X) U62(mark(X)) -> U62(X) U72(X1, mark(X2)) -> U72(X1, X2) U72(mark(X1), X2) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) s(active(X)) -> s(X) s(mark(X)) -> s(X) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) U11(active(X)) -> U11(X) U11(mark(X)) -> U11(X) U21(active(X)) -> U21(X) U21(mark(X)) -> U21(X) U31(active(X)) -> U31(X) U31(mark(X)) -> U31(X) U41(X1, mark(X2)) -> U41(X1, X2) U41(mark(X1), X2) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(mark(X1), X2) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(mark(X1), X2) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U81(active(X)) -> U81(X) U81(mark(X)) -> U81(X) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (178) QDPOrderProof (EQUIVALENT) We use the reduction pair processor [LPAR04,JAR06]. The following pairs can be oriented strictly and are deleted. MARK(U93(X1, X2, X3, X4)) -> ACTIVE(U93(mark(X1), X2, X3, X4)) The remaining pairs can at least be oriented weakly. Used ordering: Polynomial Order [NEGPOLO,POLO] with Interpretation: POL( ACTIVE_1(x_1) ) = max{0, 2x_1 - 1} POL( U41_2(x_1, x_2) ) = 1 POL( U51_2(x_1, x_2) ) = 1 POL( U61_2(x_1, x_2) ) = 1 POL( U71_3(x_1, ..., x_3) ) = 1 POL( U72_2(x_1, x_2) ) = 1 POL( U91_4(x_1, ..., x_4) ) = 1 POL( U92_4(x_1, ..., x_4) ) = 1 POL( U93_4(x_1, ..., x_4) ) = max{0, -2} POL( length_1(x_1) ) = 1 POL( mark_1(x_1) ) = 2 POL( zeros ) = 0 POL( active_1(x_1) ) = max{0, -2} POL( cons_2(x_1, x_2) ) = max{0, 2x_1 - 2} POL( 0 ) = 0 POL( tt ) = 0 POL( U42_1(x_1) ) = max{0, x_1 - 2} POL( isNatIList_1(x_1) ) = 1 POL( U52_1(x_1) ) = max{0, x_1 - 2} POL( isNatList_1(x_1) ) = 1 POL( U62_1(x_1) ) = max{0, x_1 - 2} POL( isNat_1(x_1) ) = 1 POL( s_1(x_1) ) = max{0, x_1 - 2} POL( take_2(x_1, x_2) ) = max{0, 2x_1 + 2x_2 - 2} POL( U11_1(x_1) ) = max{0, -2} POL( U21_1(x_1) ) = max{0, 2x_1 - 2} POL( U31_1(x_1) ) = max{0, x_1 - 2} POL( U81_1(x_1) ) = max{0, x_1 - 2} POL( nil ) = 0 POL( MARK_1(x_1) ) = 1 The following usable rules [FROCOS05] with respect to the argument filtering of the ordering [JAR06] were oriented: U41(X1, mark(X2)) -> U41(X1, X2) U41(mark(X1), X2) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(mark(X1), X2) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(mark(X1), X2) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U72(X1, mark(X2)) -> U72(X1, X2) U72(mark(X1), X2) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) length(active(X)) -> length(X) length(mark(X)) -> length(X) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) ---------------------------------------- (179) Obligation: Q DP problem: The TRS P consists of the following rules: MARK(U11(X)) -> MARK(X) MARK(U21(X)) -> MARK(X) MARK(U31(X)) -> MARK(X) MARK(U41(X1, X2)) -> ACTIVE(U41(mark(X1), X2)) ACTIVE(U41(tt, V2)) -> MARK(U42(isNatIList(V2))) MARK(U42(X)) -> MARK(X) MARK(U41(X1, X2)) -> MARK(X1) MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) ACTIVE(isNatIList(V)) -> MARK(U31(isNatList(V))) ACTIVE(isNatIList(cons(V1, V2))) -> MARK(U41(isNat(V1), V2)) MARK(U51(X1, X2)) -> ACTIVE(U51(mark(X1), X2)) ACTIVE(U51(tt, V2)) -> MARK(U52(isNatList(V2))) MARK(U52(X)) -> MARK(X) MARK(U51(X1, X2)) -> MARK(X1) MARK(isNatList(X)) -> ACTIVE(isNatList(X)) ACTIVE(isNatList(cons(V1, V2))) -> MARK(U51(isNat(V1), V2)) ACTIVE(isNatList(take(V1, V2))) -> MARK(U61(isNat(V1), V2)) MARK(U61(X1, X2)) -> ACTIVE(U61(mark(X1), X2)) ACTIVE(U61(tt, V2)) -> MARK(U62(isNatIList(V2))) MARK(U62(X)) -> MARK(X) MARK(U61(X1, X2)) -> MARK(X1) MARK(U71(X1, X2, X3)) -> ACTIVE(U71(mark(X1), X2, X3)) ACTIVE(U71(tt, L, N)) -> MARK(U72(isNat(N), L)) MARK(U72(X1, X2)) -> ACTIVE(U72(mark(X1), X2)) ACTIVE(U72(tt, L)) -> MARK(s(length(L))) MARK(s(X)) -> MARK(X) MARK(isNat(X)) -> ACTIVE(isNat(X)) ACTIVE(isNat(length(V1))) -> MARK(U11(isNatList(V1))) ACTIVE(isNat(s(V1))) -> MARK(U21(isNat(V1))) MARK(length(X)) -> ACTIVE(length(mark(X))) ACTIVE(U91(tt, IL, M, N)) -> MARK(U92(isNat(M), IL, M, N)) MARK(U92(X1, X2, X3, X4)) -> ACTIVE(U92(mark(X1), X2, X3, X4)) ACTIVE(U92(tt, IL, M, N)) -> MARK(U93(isNat(N), IL, M, N)) ACTIVE(length(cons(N, L))) -> MARK(U71(isNatList(L), L, N)) MARK(U91(X1, X2, X3, X4)) -> ACTIVE(U91(mark(X1), X2, X3, X4)) The TRS R consists of the following rules: mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) active(zeros) -> mark(cons(0, zeros)) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) mark(U42(X)) -> active(U42(mark(X))) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) mark(U52(X)) -> active(U52(mark(X))) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) mark(U62(X)) -> active(U62(mark(X))) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) active(U72(tt, L)) -> mark(s(length(L))) mark(s(X)) -> active(s(mark(X))) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) mark(U11(X)) -> active(U11(mark(X))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) mark(U21(X)) -> active(U21(mark(X))) active(isNatIList(V)) -> mark(U31(isNatList(V))) mark(U31(X)) -> active(U31(mark(X))) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) active(take(0, IL)) -> mark(U81(isNatIList(IL))) mark(U81(X)) -> active(U81(mark(X))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(0) -> active(0) mark(tt) -> active(tt) mark(isNatIList(X)) -> active(isNatIList(X)) mark(isNatList(X)) -> active(isNatList(X)) mark(isNat(X)) -> active(isNat(X)) mark(length(X)) -> active(length(mark(X))) mark(nil) -> active(nil) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) take(X1, mark(X2)) -> take(X1, X2) take(mark(X1), X2) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U42(tt)) -> mark(tt) active(U52(tt)) -> mark(tt) active(U62(tt)) -> mark(tt) active(U81(tt)) -> mark(nil) active(isNat(0)) -> mark(tt) active(isNatIList(zeros)) -> mark(tt) active(isNatList(nil)) -> mark(tt) active(length(nil)) -> mark(0) length(active(X)) -> length(X) length(mark(X)) -> length(X) cons(X1, mark(X2)) -> cons(X1, X2) cons(mark(X1), X2) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U42(active(X)) -> U42(X) U42(mark(X)) -> U42(X) U52(active(X)) -> U52(X) U52(mark(X)) -> U52(X) U62(active(X)) -> U62(X) U62(mark(X)) -> U62(X) U72(X1, mark(X2)) -> U72(X1, X2) U72(mark(X1), X2) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) s(active(X)) -> s(X) s(mark(X)) -> s(X) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) U11(active(X)) -> U11(X) U11(mark(X)) -> U11(X) U21(active(X)) -> U21(X) U21(mark(X)) -> U21(X) U31(active(X)) -> U31(X) U31(mark(X)) -> U31(X) U41(X1, mark(X2)) -> U41(X1, X2) U41(mark(X1), X2) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(mark(X1), X2) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(mark(X1), X2) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U81(active(X)) -> U81(X) U81(mark(X)) -> U81(X) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (180) DependencyGraphProof (EQUIVALENT) The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 1 SCC with 1 less node. ---------------------------------------- (181) Obligation: Q DP problem: The TRS P consists of the following rules: MARK(U21(X)) -> MARK(X) MARK(U11(X)) -> MARK(X) MARK(U31(X)) -> MARK(X) MARK(U41(X1, X2)) -> ACTIVE(U41(mark(X1), X2)) ACTIVE(U41(tt, V2)) -> MARK(U42(isNatIList(V2))) MARK(U42(X)) -> MARK(X) MARK(U41(X1, X2)) -> MARK(X1) MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) ACTIVE(isNatIList(V)) -> MARK(U31(isNatList(V))) ACTIVE(isNatIList(cons(V1, V2))) -> MARK(U41(isNat(V1), V2)) MARK(U51(X1, X2)) -> ACTIVE(U51(mark(X1), X2)) ACTIVE(U51(tt, V2)) -> MARK(U52(isNatList(V2))) MARK(U52(X)) -> MARK(X) MARK(U51(X1, X2)) -> MARK(X1) MARK(isNatList(X)) -> ACTIVE(isNatList(X)) ACTIVE(isNatList(cons(V1, V2))) -> MARK(U51(isNat(V1), V2)) ACTIVE(isNatList(take(V1, V2))) -> MARK(U61(isNat(V1), V2)) MARK(U61(X1, X2)) -> ACTIVE(U61(mark(X1), X2)) ACTIVE(U61(tt, V2)) -> MARK(U62(isNatIList(V2))) MARK(U62(X)) -> MARK(X) MARK(U61(X1, X2)) -> MARK(X1) MARK(U71(X1, X2, X3)) -> ACTIVE(U71(mark(X1), X2, X3)) ACTIVE(U71(tt, L, N)) -> MARK(U72(isNat(N), L)) MARK(U72(X1, X2)) -> ACTIVE(U72(mark(X1), X2)) ACTIVE(U72(tt, L)) -> MARK(s(length(L))) MARK(s(X)) -> MARK(X) MARK(isNat(X)) -> ACTIVE(isNat(X)) ACTIVE(isNat(length(V1))) -> MARK(U11(isNatList(V1))) ACTIVE(isNat(s(V1))) -> MARK(U21(isNat(V1))) MARK(length(X)) -> ACTIVE(length(mark(X))) ACTIVE(U91(tt, IL, M, N)) -> MARK(U92(isNat(M), IL, M, N)) MARK(U92(X1, X2, X3, X4)) -> ACTIVE(U92(mark(X1), X2, X3, X4)) ACTIVE(length(cons(N, L))) -> MARK(U71(isNatList(L), L, N)) MARK(U91(X1, X2, X3, X4)) -> ACTIVE(U91(mark(X1), X2, X3, X4)) The TRS R consists of the following rules: mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) active(zeros) -> mark(cons(0, zeros)) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) mark(U42(X)) -> active(U42(mark(X))) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) mark(U52(X)) -> active(U52(mark(X))) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) mark(U62(X)) -> active(U62(mark(X))) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) active(U72(tt, L)) -> mark(s(length(L))) mark(s(X)) -> active(s(mark(X))) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) mark(U11(X)) -> active(U11(mark(X))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) mark(U21(X)) -> active(U21(mark(X))) active(isNatIList(V)) -> mark(U31(isNatList(V))) mark(U31(X)) -> active(U31(mark(X))) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) active(take(0, IL)) -> mark(U81(isNatIList(IL))) mark(U81(X)) -> active(U81(mark(X))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(0) -> active(0) mark(tt) -> active(tt) mark(isNatIList(X)) -> active(isNatIList(X)) mark(isNatList(X)) -> active(isNatList(X)) mark(isNat(X)) -> active(isNat(X)) mark(length(X)) -> active(length(mark(X))) mark(nil) -> active(nil) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) take(X1, mark(X2)) -> take(X1, X2) take(mark(X1), X2) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U42(tt)) -> mark(tt) active(U52(tt)) -> mark(tt) active(U62(tt)) -> mark(tt) active(U81(tt)) -> mark(nil) active(isNat(0)) -> mark(tt) active(isNatIList(zeros)) -> mark(tt) active(isNatList(nil)) -> mark(tt) active(length(nil)) -> mark(0) length(active(X)) -> length(X) length(mark(X)) -> length(X) cons(X1, mark(X2)) -> cons(X1, X2) cons(mark(X1), X2) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U42(active(X)) -> U42(X) U42(mark(X)) -> U42(X) U52(active(X)) -> U52(X) U52(mark(X)) -> U52(X) U62(active(X)) -> U62(X) U62(mark(X)) -> U62(X) U72(X1, mark(X2)) -> U72(X1, X2) U72(mark(X1), X2) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) s(active(X)) -> s(X) s(mark(X)) -> s(X) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) U11(active(X)) -> U11(X) U11(mark(X)) -> U11(X) U21(active(X)) -> U21(X) U21(mark(X)) -> U21(X) U31(active(X)) -> U31(X) U31(mark(X)) -> U31(X) U41(X1, mark(X2)) -> U41(X1, X2) U41(mark(X1), X2) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(mark(X1), X2) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(mark(X1), X2) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U81(active(X)) -> U81(X) U81(mark(X)) -> U81(X) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (182) QDPOrderProof (EQUIVALENT) We use the reduction pair processor [LPAR04,JAR06]. The following pairs can be oriented strictly and are deleted. MARK(U92(X1, X2, X3, X4)) -> ACTIVE(U92(mark(X1), X2, X3, X4)) The remaining pairs can at least be oriented weakly. Used ordering: Polynomial Order [NEGPOLO,POLO] with Interpretation: POL( ACTIVE_1(x_1) ) = x_1 POL( U41_2(x_1, x_2) ) = 2 POL( U51_2(x_1, x_2) ) = 2 POL( U61_2(x_1, x_2) ) = 2 POL( U71_3(x_1, ..., x_3) ) = 2 POL( U72_2(x_1, x_2) ) = 2 POL( U91_4(x_1, ..., x_4) ) = 2 POL( U92_4(x_1, ..., x_4) ) = max{0, -2} POL( length_1(x_1) ) = 2 POL( mark_1(x_1) ) = 2 POL( zeros ) = 0 POL( active_1(x_1) ) = 2 POL( cons_2(x_1, x_2) ) = 2 POL( 0 ) = 0 POL( tt ) = 0 POL( U42_1(x_1) ) = max{0, x_1 - 2} POL( isNatIList_1(x_1) ) = 2 POL( U52_1(x_1) ) = max{0, x_1 - 2} POL( isNatList_1(x_1) ) = 2 POL( U62_1(x_1) ) = max{0, -2} POL( isNat_1(x_1) ) = 2 POL( s_1(x_1) ) = max{0, -2} POL( U93_4(x_1, ..., x_4) ) = max{0, 2x_2 - 2} POL( take_2(x_1, x_2) ) = 2 POL( U11_1(x_1) ) = max{0, -2} POL( U21_1(x_1) ) = max{0, -2} POL( U31_1(x_1) ) = max{0, -2} POL( U81_1(x_1) ) = max{0, -2} POL( nil ) = 0 POL( MARK_1(x_1) ) = 2 The following usable rules [FROCOS05] with respect to the argument filtering of the ordering [JAR06] were oriented: U41(X1, mark(X2)) -> U41(X1, X2) U41(mark(X1), X2) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(mark(X1), X2) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(mark(X1), X2) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U72(X1, mark(X2)) -> U72(X1, X2) U72(mark(X1), X2) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) length(active(X)) -> length(X) length(mark(X)) -> length(X) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) ---------------------------------------- (183) Obligation: Q DP problem: The TRS P consists of the following rules: MARK(U21(X)) -> MARK(X) MARK(U11(X)) -> MARK(X) MARK(U31(X)) -> MARK(X) MARK(U41(X1, X2)) -> ACTIVE(U41(mark(X1), X2)) ACTIVE(U41(tt, V2)) -> MARK(U42(isNatIList(V2))) MARK(U42(X)) -> MARK(X) MARK(U41(X1, X2)) -> MARK(X1) MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) ACTIVE(isNatIList(V)) -> MARK(U31(isNatList(V))) ACTIVE(isNatIList(cons(V1, V2))) -> MARK(U41(isNat(V1), V2)) MARK(U51(X1, X2)) -> ACTIVE(U51(mark(X1), X2)) ACTIVE(U51(tt, V2)) -> MARK(U52(isNatList(V2))) MARK(U52(X)) -> MARK(X) MARK(U51(X1, X2)) -> MARK(X1) MARK(isNatList(X)) -> ACTIVE(isNatList(X)) ACTIVE(isNatList(cons(V1, V2))) -> MARK(U51(isNat(V1), V2)) ACTIVE(isNatList(take(V1, V2))) -> MARK(U61(isNat(V1), V2)) MARK(U61(X1, X2)) -> ACTIVE(U61(mark(X1), X2)) ACTIVE(U61(tt, V2)) -> MARK(U62(isNatIList(V2))) MARK(U62(X)) -> MARK(X) MARK(U61(X1, X2)) -> MARK(X1) MARK(U71(X1, X2, X3)) -> ACTIVE(U71(mark(X1), X2, X3)) ACTIVE(U71(tt, L, N)) -> MARK(U72(isNat(N), L)) MARK(U72(X1, X2)) -> ACTIVE(U72(mark(X1), X2)) ACTIVE(U72(tt, L)) -> MARK(s(length(L))) MARK(s(X)) -> MARK(X) MARK(isNat(X)) -> ACTIVE(isNat(X)) ACTIVE(isNat(length(V1))) -> MARK(U11(isNatList(V1))) ACTIVE(isNat(s(V1))) -> MARK(U21(isNat(V1))) MARK(length(X)) -> ACTIVE(length(mark(X))) ACTIVE(U91(tt, IL, M, N)) -> MARK(U92(isNat(M), IL, M, N)) ACTIVE(length(cons(N, L))) -> MARK(U71(isNatList(L), L, N)) MARK(U91(X1, X2, X3, X4)) -> ACTIVE(U91(mark(X1), X2, X3, X4)) The TRS R consists of the following rules: mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) active(zeros) -> mark(cons(0, zeros)) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) mark(U42(X)) -> active(U42(mark(X))) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) mark(U52(X)) -> active(U52(mark(X))) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) mark(U62(X)) -> active(U62(mark(X))) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) active(U72(tt, L)) -> mark(s(length(L))) mark(s(X)) -> active(s(mark(X))) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) mark(U11(X)) -> active(U11(mark(X))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) mark(U21(X)) -> active(U21(mark(X))) active(isNatIList(V)) -> mark(U31(isNatList(V))) mark(U31(X)) -> active(U31(mark(X))) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) active(take(0, IL)) -> mark(U81(isNatIList(IL))) mark(U81(X)) -> active(U81(mark(X))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(0) -> active(0) mark(tt) -> active(tt) mark(isNatIList(X)) -> active(isNatIList(X)) mark(isNatList(X)) -> active(isNatList(X)) mark(isNat(X)) -> active(isNat(X)) mark(length(X)) -> active(length(mark(X))) mark(nil) -> active(nil) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) take(X1, mark(X2)) -> take(X1, X2) take(mark(X1), X2) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U42(tt)) -> mark(tt) active(U52(tt)) -> mark(tt) active(U62(tt)) -> mark(tt) active(U81(tt)) -> mark(nil) active(isNat(0)) -> mark(tt) active(isNatIList(zeros)) -> mark(tt) active(isNatList(nil)) -> mark(tt) active(length(nil)) -> mark(0) length(active(X)) -> length(X) length(mark(X)) -> length(X) cons(X1, mark(X2)) -> cons(X1, X2) cons(mark(X1), X2) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U42(active(X)) -> U42(X) U42(mark(X)) -> U42(X) U52(active(X)) -> U52(X) U52(mark(X)) -> U52(X) U62(active(X)) -> U62(X) U62(mark(X)) -> U62(X) U72(X1, mark(X2)) -> U72(X1, X2) U72(mark(X1), X2) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) s(active(X)) -> s(X) s(mark(X)) -> s(X) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) U11(active(X)) -> U11(X) U11(mark(X)) -> U11(X) U21(active(X)) -> U21(X) U21(mark(X)) -> U21(X) U31(active(X)) -> U31(X) U31(mark(X)) -> U31(X) U41(X1, mark(X2)) -> U41(X1, X2) U41(mark(X1), X2) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(mark(X1), X2) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(mark(X1), X2) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U81(active(X)) -> U81(X) U81(mark(X)) -> U81(X) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (184) DependencyGraphProof (EQUIVALENT) The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 1 SCC with 1 less node. ---------------------------------------- (185) Obligation: Q DP problem: The TRS P consists of the following rules: MARK(U11(X)) -> MARK(X) MARK(U21(X)) -> MARK(X) MARK(U31(X)) -> MARK(X) MARK(U41(X1, X2)) -> ACTIVE(U41(mark(X1), X2)) ACTIVE(U41(tt, V2)) -> MARK(U42(isNatIList(V2))) MARK(U42(X)) -> MARK(X) MARK(U41(X1, X2)) -> MARK(X1) MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) ACTIVE(isNatIList(V)) -> MARK(U31(isNatList(V))) ACTIVE(isNatIList(cons(V1, V2))) -> MARK(U41(isNat(V1), V2)) MARK(U51(X1, X2)) -> ACTIVE(U51(mark(X1), X2)) ACTIVE(U51(tt, V2)) -> MARK(U52(isNatList(V2))) MARK(U52(X)) -> MARK(X) MARK(U51(X1, X2)) -> MARK(X1) MARK(isNatList(X)) -> ACTIVE(isNatList(X)) ACTIVE(isNatList(cons(V1, V2))) -> MARK(U51(isNat(V1), V2)) ACTIVE(isNatList(take(V1, V2))) -> MARK(U61(isNat(V1), V2)) MARK(U61(X1, X2)) -> ACTIVE(U61(mark(X1), X2)) ACTIVE(U61(tt, V2)) -> MARK(U62(isNatIList(V2))) MARK(U62(X)) -> MARK(X) MARK(U61(X1, X2)) -> MARK(X1) MARK(U71(X1, X2, X3)) -> ACTIVE(U71(mark(X1), X2, X3)) ACTIVE(U71(tt, L, N)) -> MARK(U72(isNat(N), L)) MARK(U72(X1, X2)) -> ACTIVE(U72(mark(X1), X2)) ACTIVE(U72(tt, L)) -> MARK(s(length(L))) MARK(s(X)) -> MARK(X) MARK(isNat(X)) -> ACTIVE(isNat(X)) ACTIVE(isNat(length(V1))) -> MARK(U11(isNatList(V1))) ACTIVE(isNat(s(V1))) -> MARK(U21(isNat(V1))) MARK(length(X)) -> ACTIVE(length(mark(X))) ACTIVE(length(cons(N, L))) -> MARK(U71(isNatList(L), L, N)) MARK(U91(X1, X2, X3, X4)) -> ACTIVE(U91(mark(X1), X2, X3, X4)) The TRS R consists of the following rules: mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) active(zeros) -> mark(cons(0, zeros)) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) mark(U42(X)) -> active(U42(mark(X))) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) mark(U52(X)) -> active(U52(mark(X))) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) mark(U62(X)) -> active(U62(mark(X))) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) active(U72(tt, L)) -> mark(s(length(L))) mark(s(X)) -> active(s(mark(X))) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) mark(U11(X)) -> active(U11(mark(X))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) mark(U21(X)) -> active(U21(mark(X))) active(isNatIList(V)) -> mark(U31(isNatList(V))) mark(U31(X)) -> active(U31(mark(X))) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) active(take(0, IL)) -> mark(U81(isNatIList(IL))) mark(U81(X)) -> active(U81(mark(X))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(0) -> active(0) mark(tt) -> active(tt) mark(isNatIList(X)) -> active(isNatIList(X)) mark(isNatList(X)) -> active(isNatList(X)) mark(isNat(X)) -> active(isNat(X)) mark(length(X)) -> active(length(mark(X))) mark(nil) -> active(nil) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) take(X1, mark(X2)) -> take(X1, X2) take(mark(X1), X2) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U42(tt)) -> mark(tt) active(U52(tt)) -> mark(tt) active(U62(tt)) -> mark(tt) active(U81(tt)) -> mark(nil) active(isNat(0)) -> mark(tt) active(isNatIList(zeros)) -> mark(tt) active(isNatList(nil)) -> mark(tt) active(length(nil)) -> mark(0) length(active(X)) -> length(X) length(mark(X)) -> length(X) cons(X1, mark(X2)) -> cons(X1, X2) cons(mark(X1), X2) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U42(active(X)) -> U42(X) U42(mark(X)) -> U42(X) U52(active(X)) -> U52(X) U52(mark(X)) -> U52(X) U62(active(X)) -> U62(X) U62(mark(X)) -> U62(X) U72(X1, mark(X2)) -> U72(X1, X2) U72(mark(X1), X2) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) s(active(X)) -> s(X) s(mark(X)) -> s(X) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) U11(active(X)) -> U11(X) U11(mark(X)) -> U11(X) U21(active(X)) -> U21(X) U21(mark(X)) -> U21(X) U31(active(X)) -> U31(X) U31(mark(X)) -> U31(X) U41(X1, mark(X2)) -> U41(X1, X2) U41(mark(X1), X2) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(mark(X1), X2) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(mark(X1), X2) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U81(active(X)) -> U81(X) U81(mark(X)) -> U81(X) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (186) QDPOrderProof (EQUIVALENT) We use the reduction pair processor [LPAR04,JAR06]. The following pairs can be oriented strictly and are deleted. MARK(U91(X1, X2, X3, X4)) -> ACTIVE(U91(mark(X1), X2, X3, X4)) The remaining pairs can at least be oriented weakly. Used ordering: Polynomial Order [NEGPOLO,POLO] with Interpretation: POL( ACTIVE_1(x_1) ) = max{0, -2} POL( U41_2(x_1, x_2) ) = x_1 + 1 POL( U51_2(x_1, x_2) ) = x_1 + 1 POL( U61_2(x_1, x_2) ) = x_1 + 1 POL( U71_3(x_1, ..., x_3) ) = max{0, -2} POL( U72_2(x_1, x_2) ) = max{0, -2} POL( U91_4(x_1, ..., x_4) ) = 2 POL( length_1(x_1) ) = 0 POL( mark_1(x_1) ) = 2x_1 + 2 POL( zeros ) = 0 POL( active_1(x_1) ) = 2 POL( cons_2(x_1, x_2) ) = 2x_1 + 2 POL( 0 ) = 0 POL( tt ) = 0 POL( U42_1(x_1) ) = 2x_1 + 1 POL( isNatIList_1(x_1) ) = 0 POL( U52_1(x_1) ) = x_1 + 1 POL( isNatList_1(x_1) ) = 0 POL( U62_1(x_1) ) = x_1 + 1 POL( isNat_1(x_1) ) = 0 POL( s_1(x_1) ) = 2x_1 + 1 POL( U92_4(x_1, ..., x_4) ) = 2 POL( U93_4(x_1, ..., x_4) ) = 2 POL( take_2(x_1, x_2) ) = max{0, 2x_1 + 2x_2 - 2} POL( U11_1(x_1) ) = 2x_1 + 1 POL( U21_1(x_1) ) = x_1 + 1 POL( U31_1(x_1) ) = x_1 + 1 POL( U81_1(x_1) ) = x_1 + 1 POL( nil ) = 0 POL( MARK_1(x_1) ) = max{0, x_1 - 1} The following usable rules [FROCOS05] with respect to the argument filtering of the ordering [JAR06] were oriented: none ---------------------------------------- (187) Obligation: Q DP problem: The TRS P consists of the following rules: MARK(U11(X)) -> MARK(X) MARK(U21(X)) -> MARK(X) MARK(U31(X)) -> MARK(X) MARK(U41(X1, X2)) -> ACTIVE(U41(mark(X1), X2)) ACTIVE(U41(tt, V2)) -> MARK(U42(isNatIList(V2))) MARK(U42(X)) -> MARK(X) MARK(U41(X1, X2)) -> MARK(X1) MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) ACTIVE(isNatIList(V)) -> MARK(U31(isNatList(V))) ACTIVE(isNatIList(cons(V1, V2))) -> MARK(U41(isNat(V1), V2)) MARK(U51(X1, X2)) -> ACTIVE(U51(mark(X1), X2)) ACTIVE(U51(tt, V2)) -> MARK(U52(isNatList(V2))) MARK(U52(X)) -> MARK(X) MARK(U51(X1, X2)) -> MARK(X1) MARK(isNatList(X)) -> ACTIVE(isNatList(X)) ACTIVE(isNatList(cons(V1, V2))) -> MARK(U51(isNat(V1), V2)) ACTIVE(isNatList(take(V1, V2))) -> MARK(U61(isNat(V1), V2)) MARK(U61(X1, X2)) -> ACTIVE(U61(mark(X1), X2)) ACTIVE(U61(tt, V2)) -> MARK(U62(isNatIList(V2))) MARK(U62(X)) -> MARK(X) MARK(U61(X1, X2)) -> MARK(X1) MARK(U71(X1, X2, X3)) -> ACTIVE(U71(mark(X1), X2, X3)) ACTIVE(U71(tt, L, N)) -> MARK(U72(isNat(N), L)) MARK(U72(X1, X2)) -> ACTIVE(U72(mark(X1), X2)) ACTIVE(U72(tt, L)) -> MARK(s(length(L))) MARK(s(X)) -> MARK(X) MARK(isNat(X)) -> ACTIVE(isNat(X)) ACTIVE(isNat(length(V1))) -> MARK(U11(isNatList(V1))) ACTIVE(isNat(s(V1))) -> MARK(U21(isNat(V1))) MARK(length(X)) -> ACTIVE(length(mark(X))) ACTIVE(length(cons(N, L))) -> MARK(U71(isNatList(L), L, N)) The TRS R consists of the following rules: mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) active(zeros) -> mark(cons(0, zeros)) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) mark(U42(X)) -> active(U42(mark(X))) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) mark(U52(X)) -> active(U52(mark(X))) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) mark(U62(X)) -> active(U62(mark(X))) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) active(U72(tt, L)) -> mark(s(length(L))) mark(s(X)) -> active(s(mark(X))) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) mark(U11(X)) -> active(U11(mark(X))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) mark(U21(X)) -> active(U21(mark(X))) active(isNatIList(V)) -> mark(U31(isNatList(V))) mark(U31(X)) -> active(U31(mark(X))) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) active(take(0, IL)) -> mark(U81(isNatIList(IL))) mark(U81(X)) -> active(U81(mark(X))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(0) -> active(0) mark(tt) -> active(tt) mark(isNatIList(X)) -> active(isNatIList(X)) mark(isNatList(X)) -> active(isNatList(X)) mark(isNat(X)) -> active(isNat(X)) mark(length(X)) -> active(length(mark(X))) mark(nil) -> active(nil) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) take(X1, mark(X2)) -> take(X1, X2) take(mark(X1), X2) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U42(tt)) -> mark(tt) active(U52(tt)) -> mark(tt) active(U62(tt)) -> mark(tt) active(U81(tt)) -> mark(nil) active(isNat(0)) -> mark(tt) active(isNatIList(zeros)) -> mark(tt) active(isNatList(nil)) -> mark(tt) active(length(nil)) -> mark(0) length(active(X)) -> length(X) length(mark(X)) -> length(X) cons(X1, mark(X2)) -> cons(X1, X2) cons(mark(X1), X2) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U42(active(X)) -> U42(X) U42(mark(X)) -> U42(X) U52(active(X)) -> U52(X) U52(mark(X)) -> U52(X) U62(active(X)) -> U62(X) U62(mark(X)) -> U62(X) U72(X1, mark(X2)) -> U72(X1, X2) U72(mark(X1), X2) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) s(active(X)) -> s(X) s(mark(X)) -> s(X) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) U11(active(X)) -> U11(X) U11(mark(X)) -> U11(X) U21(active(X)) -> U21(X) U21(mark(X)) -> U21(X) U31(active(X)) -> U31(X) U31(mark(X)) -> U31(X) U41(X1, mark(X2)) -> U41(X1, X2) U41(mark(X1), X2) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(mark(X1), X2) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(mark(X1), X2) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U81(active(X)) -> U81(X) U81(mark(X)) -> U81(X) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (188) QDPOrderProof (EQUIVALENT) We use the reduction pair processor [LPAR04,JAR06]. The following pairs can be oriented strictly and are deleted. MARK(U11(X)) -> MARK(X) MARK(U31(X)) -> MARK(X) MARK(U41(X1, X2)) -> MARK(X1) MARK(U61(X1, X2)) -> MARK(X1) ACTIVE(isNat(length(V1))) -> MARK(U11(isNatList(V1))) The remaining pairs can at least be oriented weakly. Used ordering: Polynomial Order [NEGPOLO,POLO] with Interpretation: POL( ACTIVE_1(x_1) ) = x_1 POL( U41_2(x_1, x_2) ) = 2x_1 + 2x_2 + 2 POL( U51_2(x_1, x_2) ) = x_1 + x_2 POL( U61_2(x_1, x_2) ) = x_1 + 2x_2 + 2 POL( U71_3(x_1, ..., x_3) ) = 2x_2 + x_3 + 2 POL( U72_2(x_1, x_2) ) = 2x_2 + 2 POL( length_1(x_1) ) = 2x_1 + 2 POL( mark_1(x_1) ) = x_1 POL( zeros ) = 0 POL( active_1(x_1) ) = x_1 POL( cons_2(x_1, x_2) ) = 2x_1 + x_2 POL( 0 ) = 0 POL( tt ) = 0 POL( U42_1(x_1) ) = x_1 POL( isNatIList_1(x_1) ) = 2x_1 + 2 POL( U52_1(x_1) ) = x_1 POL( isNatList_1(x_1) ) = x_1 POL( U62_1(x_1) ) = x_1 POL( isNat_1(x_1) ) = 2x_1 POL( s_1(x_1) ) = x_1 POL( U91_4(x_1, ..., x_4) ) = 2x_2 + 2x_3 + 2x_4 + 2 POL( U92_4(x_1, ..., x_4) ) = 2x_2 + 2x_3 + 2x_4 + 2 POL( U93_4(x_1, ..., x_4) ) = 2x_2 + 2x_3 + 2x_4 + 2 POL( take_2(x_1, x_2) ) = 2x_1 + 2x_2 + 2 POL( U11_1(x_1) ) = x_1 + 2 POL( U21_1(x_1) ) = x_1 POL( U31_1(x_1) ) = 2x_1 + 2 POL( U81_1(x_1) ) = max{0, -2} POL( nil ) = 0 POL( MARK_1(x_1) ) = x_1 The following usable rules [FROCOS05] with respect to the argument filtering of the ordering [JAR06] were oriented: mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) active(zeros) -> mark(cons(0, zeros)) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) mark(U42(X)) -> active(U42(mark(X))) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) mark(U52(X)) -> active(U52(mark(X))) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) mark(U62(X)) -> active(U62(mark(X))) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) active(U72(tt, L)) -> mark(s(length(L))) mark(s(X)) -> active(s(mark(X))) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) mark(U11(X)) -> active(U11(mark(X))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) mark(U21(X)) -> active(U21(mark(X))) active(isNatIList(V)) -> mark(U31(isNatList(V))) mark(U31(X)) -> active(U31(mark(X))) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) active(take(0, IL)) -> mark(U81(isNatIList(IL))) mark(U81(X)) -> active(U81(mark(X))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(0) -> active(0) mark(tt) -> active(tt) mark(isNatIList(X)) -> active(isNatIList(X)) mark(isNatList(X)) -> active(isNatList(X)) mark(isNat(X)) -> active(isNat(X)) mark(length(X)) -> active(length(mark(X))) mark(nil) -> active(nil) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) U41(X1, mark(X2)) -> U41(X1, X2) U41(mark(X1), X2) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(mark(X1), X2) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(mark(X1), X2) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U72(X1, mark(X2)) -> U72(X1, X2) U72(mark(X1), X2) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) length(active(X)) -> length(X) length(mark(X)) -> length(X) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U42(tt)) -> mark(tt) active(U52(tt)) -> mark(tt) active(U62(tt)) -> mark(tt) active(U81(tt)) -> mark(nil) active(isNat(0)) -> mark(tt) active(isNatIList(zeros)) -> mark(tt) active(isNatList(nil)) -> mark(tt) active(length(nil)) -> mark(0) cons(X1, mark(X2)) -> cons(X1, X2) cons(mark(X1), X2) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U42(active(X)) -> U42(X) U42(mark(X)) -> U42(X) U52(active(X)) -> U52(X) U52(mark(X)) -> U52(X) U62(active(X)) -> U62(X) U62(mark(X)) -> U62(X) s(active(X)) -> s(X) s(mark(X)) -> s(X) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) U11(active(X)) -> U11(X) U11(mark(X)) -> U11(X) U21(active(X)) -> U21(X) U21(mark(X)) -> U21(X) U31(active(X)) -> U31(X) U31(mark(X)) -> U31(X) U81(active(X)) -> U81(X) U81(mark(X)) -> U81(X) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) take(X1, mark(X2)) -> take(X1, X2) take(mark(X1), X2) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) ---------------------------------------- (189) Obligation: Q DP problem: The TRS P consists of the following rules: MARK(U21(X)) -> MARK(X) MARK(U41(X1, X2)) -> ACTIVE(U41(mark(X1), X2)) ACTIVE(U41(tt, V2)) -> MARK(U42(isNatIList(V2))) MARK(U42(X)) -> MARK(X) MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) ACTIVE(isNatIList(V)) -> MARK(U31(isNatList(V))) ACTIVE(isNatIList(cons(V1, V2))) -> MARK(U41(isNat(V1), V2)) MARK(U51(X1, X2)) -> ACTIVE(U51(mark(X1), X2)) ACTIVE(U51(tt, V2)) -> MARK(U52(isNatList(V2))) MARK(U52(X)) -> MARK(X) MARK(U51(X1, X2)) -> MARK(X1) MARK(isNatList(X)) -> ACTIVE(isNatList(X)) ACTIVE(isNatList(cons(V1, V2))) -> MARK(U51(isNat(V1), V2)) ACTIVE(isNatList(take(V1, V2))) -> MARK(U61(isNat(V1), V2)) MARK(U61(X1, X2)) -> ACTIVE(U61(mark(X1), X2)) ACTIVE(U61(tt, V2)) -> MARK(U62(isNatIList(V2))) MARK(U62(X)) -> MARK(X) MARK(U71(X1, X2, X3)) -> ACTIVE(U71(mark(X1), X2, X3)) ACTIVE(U71(tt, L, N)) -> MARK(U72(isNat(N), L)) MARK(U72(X1, X2)) -> ACTIVE(U72(mark(X1), X2)) ACTIVE(U72(tt, L)) -> MARK(s(length(L))) MARK(s(X)) -> MARK(X) MARK(isNat(X)) -> ACTIVE(isNat(X)) ACTIVE(isNat(s(V1))) -> MARK(U21(isNat(V1))) MARK(length(X)) -> ACTIVE(length(mark(X))) ACTIVE(length(cons(N, L))) -> MARK(U71(isNatList(L), L, N)) The TRS R consists of the following rules: mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) active(zeros) -> mark(cons(0, zeros)) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) mark(U42(X)) -> active(U42(mark(X))) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) mark(U52(X)) -> active(U52(mark(X))) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) mark(U62(X)) -> active(U62(mark(X))) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) active(U72(tt, L)) -> mark(s(length(L))) mark(s(X)) -> active(s(mark(X))) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) mark(U11(X)) -> active(U11(mark(X))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) mark(U21(X)) -> active(U21(mark(X))) active(isNatIList(V)) -> mark(U31(isNatList(V))) mark(U31(X)) -> active(U31(mark(X))) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) active(take(0, IL)) -> mark(U81(isNatIList(IL))) mark(U81(X)) -> active(U81(mark(X))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(0) -> active(0) mark(tt) -> active(tt) mark(isNatIList(X)) -> active(isNatIList(X)) mark(isNatList(X)) -> active(isNatList(X)) mark(isNat(X)) -> active(isNat(X)) mark(length(X)) -> active(length(mark(X))) mark(nil) -> active(nil) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) take(X1, mark(X2)) -> take(X1, X2) take(mark(X1), X2) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U42(tt)) -> mark(tt) active(U52(tt)) -> mark(tt) active(U62(tt)) -> mark(tt) active(U81(tt)) -> mark(nil) active(isNat(0)) -> mark(tt) active(isNatIList(zeros)) -> mark(tt) active(isNatList(nil)) -> mark(tt) active(length(nil)) -> mark(0) length(active(X)) -> length(X) length(mark(X)) -> length(X) cons(X1, mark(X2)) -> cons(X1, X2) cons(mark(X1), X2) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U42(active(X)) -> U42(X) U42(mark(X)) -> U42(X) U52(active(X)) -> U52(X) U52(mark(X)) -> U52(X) U62(active(X)) -> U62(X) U62(mark(X)) -> U62(X) U72(X1, mark(X2)) -> U72(X1, X2) U72(mark(X1), X2) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) s(active(X)) -> s(X) s(mark(X)) -> s(X) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) U11(active(X)) -> U11(X) U11(mark(X)) -> U11(X) U21(active(X)) -> U21(X) U21(mark(X)) -> U21(X) U31(active(X)) -> U31(X) U31(mark(X)) -> U31(X) U41(X1, mark(X2)) -> U41(X1, X2) U41(mark(X1), X2) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(mark(X1), X2) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(mark(X1), X2) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U81(active(X)) -> U81(X) U81(mark(X)) -> U81(X) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (190) DependencyGraphProof (EQUIVALENT) The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 1 SCC with 1 less node. ---------------------------------------- (191) Obligation: Q DP problem: The TRS P consists of the following rules: MARK(U41(X1, X2)) -> ACTIVE(U41(mark(X1), X2)) ACTIVE(U41(tt, V2)) -> MARK(U42(isNatIList(V2))) MARK(U42(X)) -> MARK(X) MARK(U21(X)) -> MARK(X) MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) ACTIVE(isNatIList(cons(V1, V2))) -> MARK(U41(isNat(V1), V2)) MARK(U51(X1, X2)) -> ACTIVE(U51(mark(X1), X2)) ACTIVE(U51(tt, V2)) -> MARK(U52(isNatList(V2))) MARK(U52(X)) -> MARK(X) MARK(U51(X1, X2)) -> MARK(X1) MARK(isNatList(X)) -> ACTIVE(isNatList(X)) ACTIVE(isNatList(cons(V1, V2))) -> MARK(U51(isNat(V1), V2)) ACTIVE(isNatList(take(V1, V2))) -> MARK(U61(isNat(V1), V2)) MARK(U61(X1, X2)) -> ACTIVE(U61(mark(X1), X2)) ACTIVE(U61(tt, V2)) -> MARK(U62(isNatIList(V2))) MARK(U62(X)) -> MARK(X) MARK(U71(X1, X2, X3)) -> ACTIVE(U71(mark(X1), X2, X3)) ACTIVE(U71(tt, L, N)) -> MARK(U72(isNat(N), L)) MARK(U72(X1, X2)) -> ACTIVE(U72(mark(X1), X2)) ACTIVE(U72(tt, L)) -> MARK(s(length(L))) MARK(s(X)) -> MARK(X) MARK(isNat(X)) -> ACTIVE(isNat(X)) ACTIVE(isNat(s(V1))) -> MARK(U21(isNat(V1))) MARK(length(X)) -> ACTIVE(length(mark(X))) ACTIVE(length(cons(N, L))) -> MARK(U71(isNatList(L), L, N)) The TRS R consists of the following rules: mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) active(zeros) -> mark(cons(0, zeros)) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) mark(U42(X)) -> active(U42(mark(X))) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) mark(U52(X)) -> active(U52(mark(X))) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) mark(U62(X)) -> active(U62(mark(X))) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) active(U72(tt, L)) -> mark(s(length(L))) mark(s(X)) -> active(s(mark(X))) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) mark(U11(X)) -> active(U11(mark(X))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) mark(U21(X)) -> active(U21(mark(X))) active(isNatIList(V)) -> mark(U31(isNatList(V))) mark(U31(X)) -> active(U31(mark(X))) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) active(take(0, IL)) -> mark(U81(isNatIList(IL))) mark(U81(X)) -> active(U81(mark(X))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(0) -> active(0) mark(tt) -> active(tt) mark(isNatIList(X)) -> active(isNatIList(X)) mark(isNatList(X)) -> active(isNatList(X)) mark(isNat(X)) -> active(isNat(X)) mark(length(X)) -> active(length(mark(X))) mark(nil) -> active(nil) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) take(X1, mark(X2)) -> take(X1, X2) take(mark(X1), X2) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U42(tt)) -> mark(tt) active(U52(tt)) -> mark(tt) active(U62(tt)) -> mark(tt) active(U81(tt)) -> mark(nil) active(isNat(0)) -> mark(tt) active(isNatIList(zeros)) -> mark(tt) active(isNatList(nil)) -> mark(tt) active(length(nil)) -> mark(0) length(active(X)) -> length(X) length(mark(X)) -> length(X) cons(X1, mark(X2)) -> cons(X1, X2) cons(mark(X1), X2) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U42(active(X)) -> U42(X) U42(mark(X)) -> U42(X) U52(active(X)) -> U52(X) U52(mark(X)) -> U52(X) U62(active(X)) -> U62(X) U62(mark(X)) -> U62(X) U72(X1, mark(X2)) -> U72(X1, X2) U72(mark(X1), X2) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) s(active(X)) -> s(X) s(mark(X)) -> s(X) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) U11(active(X)) -> U11(X) U11(mark(X)) -> U11(X) U21(active(X)) -> U21(X) U21(mark(X)) -> U21(X) U31(active(X)) -> U31(X) U31(mark(X)) -> U31(X) U41(X1, mark(X2)) -> U41(X1, X2) U41(mark(X1), X2) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(mark(X1), X2) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(mark(X1), X2) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U81(active(X)) -> U81(X) U81(mark(X)) -> U81(X) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (192) QDPOrderProof (EQUIVALENT) We use the reduction pair processor [LPAR04,JAR06]. The following pairs can be oriented strictly and are deleted. MARK(U51(X1, X2)) -> MARK(X1) The remaining pairs can at least be oriented weakly. Used ordering: Polynomial Order [NEGPOLO,POLO] with Interpretation: POL( ACTIVE_1(x_1) ) = x_1 + 2 POL( U41_2(x_1, x_2) ) = 2 POL( U51_2(x_1, x_2) ) = x_1 + 2 POL( U61_2(x_1, x_2) ) = 2 POL( U71_3(x_1, ..., x_3) ) = max{0, -2} POL( U72_2(x_1, x_2) ) = max{0, -2} POL( length_1(x_1) ) = max{0, -2} POL( mark_1(x_1) ) = x_1 POL( zeros ) = 2 POL( active_1(x_1) ) = x_1 POL( cons_2(x_1, x_2) ) = x_1 + 2 POL( 0 ) = 0 POL( tt ) = 0 POL( U42_1(x_1) ) = x_1 POL( isNatIList_1(x_1) ) = 2 POL( U52_1(x_1) ) = x_1 POL( isNatList_1(x_1) ) = 2 POL( U62_1(x_1) ) = x_1 POL( isNat_1(x_1) ) = 0 POL( s_1(x_1) ) = x_1 POL( U91_4(x_1, ..., x_4) ) = 2x_1 + x_4 + 2 POL( U92_4(x_1, ..., x_4) ) = x_4 + 2 POL( U93_4(x_1, ..., x_4) ) = x_4 + 2 POL( take_2(x_1, x_2) ) = 2x_2 + 2 POL( U11_1(x_1) ) = max{0, -2} POL( U21_1(x_1) ) = x_1 POL( U31_1(x_1) ) = max{0, -2} POL( U81_1(x_1) ) = max{0, -2} POL( nil ) = 0 POL( MARK_1(x_1) ) = x_1 + 2 The following usable rules [FROCOS05] with respect to the argument filtering of the ordering [JAR06] were oriented: mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) active(zeros) -> mark(cons(0, zeros)) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) mark(U42(X)) -> active(U42(mark(X))) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) mark(U52(X)) -> active(U52(mark(X))) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) mark(U62(X)) -> active(U62(mark(X))) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) active(U72(tt, L)) -> mark(s(length(L))) mark(s(X)) -> active(s(mark(X))) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) mark(U11(X)) -> active(U11(mark(X))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) mark(U21(X)) -> active(U21(mark(X))) active(isNatIList(V)) -> mark(U31(isNatList(V))) mark(U31(X)) -> active(U31(mark(X))) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) active(take(0, IL)) -> mark(U81(isNatIList(IL))) mark(U81(X)) -> active(U81(mark(X))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(0) -> active(0) mark(tt) -> active(tt) mark(isNatIList(X)) -> active(isNatIList(X)) mark(isNatList(X)) -> active(isNatList(X)) mark(isNat(X)) -> active(isNat(X)) mark(length(X)) -> active(length(mark(X))) mark(nil) -> active(nil) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) U41(X1, mark(X2)) -> U41(X1, X2) U41(mark(X1), X2) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(mark(X1), X2) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(mark(X1), X2) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U72(X1, mark(X2)) -> U72(X1, X2) U72(mark(X1), X2) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) length(active(X)) -> length(X) length(mark(X)) -> length(X) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U42(tt)) -> mark(tt) active(U52(tt)) -> mark(tt) active(U62(tt)) -> mark(tt) active(U81(tt)) -> mark(nil) active(isNat(0)) -> mark(tt) active(isNatIList(zeros)) -> mark(tt) active(isNatList(nil)) -> mark(tt) active(length(nil)) -> mark(0) cons(X1, mark(X2)) -> cons(X1, X2) cons(mark(X1), X2) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U42(active(X)) -> U42(X) U42(mark(X)) -> U42(X) U52(active(X)) -> U52(X) U52(mark(X)) -> U52(X) U62(active(X)) -> U62(X) U62(mark(X)) -> U62(X) s(active(X)) -> s(X) s(mark(X)) -> s(X) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) U11(active(X)) -> U11(X) U11(mark(X)) -> U11(X) U21(active(X)) -> U21(X) U21(mark(X)) -> U21(X) U31(active(X)) -> U31(X) U31(mark(X)) -> U31(X) U81(active(X)) -> U81(X) U81(mark(X)) -> U81(X) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) take(X1, mark(X2)) -> take(X1, X2) take(mark(X1), X2) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) ---------------------------------------- (193) Obligation: Q DP problem: The TRS P consists of the following rules: MARK(U41(X1, X2)) -> ACTIVE(U41(mark(X1), X2)) ACTIVE(U41(tt, V2)) -> MARK(U42(isNatIList(V2))) MARK(U42(X)) -> MARK(X) MARK(U21(X)) -> MARK(X) MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) ACTIVE(isNatIList(cons(V1, V2))) -> MARK(U41(isNat(V1), V2)) MARK(U51(X1, X2)) -> ACTIVE(U51(mark(X1), X2)) ACTIVE(U51(tt, V2)) -> MARK(U52(isNatList(V2))) MARK(U52(X)) -> MARK(X) MARK(isNatList(X)) -> ACTIVE(isNatList(X)) ACTIVE(isNatList(cons(V1, V2))) -> MARK(U51(isNat(V1), V2)) ACTIVE(isNatList(take(V1, V2))) -> MARK(U61(isNat(V1), V2)) MARK(U61(X1, X2)) -> ACTIVE(U61(mark(X1), X2)) ACTIVE(U61(tt, V2)) -> MARK(U62(isNatIList(V2))) MARK(U62(X)) -> MARK(X) MARK(U71(X1, X2, X3)) -> ACTIVE(U71(mark(X1), X2, X3)) ACTIVE(U71(tt, L, N)) -> MARK(U72(isNat(N), L)) MARK(U72(X1, X2)) -> ACTIVE(U72(mark(X1), X2)) ACTIVE(U72(tt, L)) -> MARK(s(length(L))) MARK(s(X)) -> MARK(X) MARK(isNat(X)) -> ACTIVE(isNat(X)) ACTIVE(isNat(s(V1))) -> MARK(U21(isNat(V1))) MARK(length(X)) -> ACTIVE(length(mark(X))) ACTIVE(length(cons(N, L))) -> MARK(U71(isNatList(L), L, N)) The TRS R consists of the following rules: mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) active(zeros) -> mark(cons(0, zeros)) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) mark(U42(X)) -> active(U42(mark(X))) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) mark(U52(X)) -> active(U52(mark(X))) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) mark(U62(X)) -> active(U62(mark(X))) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) active(U72(tt, L)) -> mark(s(length(L))) mark(s(X)) -> active(s(mark(X))) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) mark(U11(X)) -> active(U11(mark(X))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) mark(U21(X)) -> active(U21(mark(X))) active(isNatIList(V)) -> mark(U31(isNatList(V))) mark(U31(X)) -> active(U31(mark(X))) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) active(take(0, IL)) -> mark(U81(isNatIList(IL))) mark(U81(X)) -> active(U81(mark(X))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(0) -> active(0) mark(tt) -> active(tt) mark(isNatIList(X)) -> active(isNatIList(X)) mark(isNatList(X)) -> active(isNatList(X)) mark(isNat(X)) -> active(isNat(X)) mark(length(X)) -> active(length(mark(X))) mark(nil) -> active(nil) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) take(X1, mark(X2)) -> take(X1, X2) take(mark(X1), X2) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U42(tt)) -> mark(tt) active(U52(tt)) -> mark(tt) active(U62(tt)) -> mark(tt) active(U81(tt)) -> mark(nil) active(isNat(0)) -> mark(tt) active(isNatIList(zeros)) -> mark(tt) active(isNatList(nil)) -> mark(tt) active(length(nil)) -> mark(0) length(active(X)) -> length(X) length(mark(X)) -> length(X) cons(X1, mark(X2)) -> cons(X1, X2) cons(mark(X1), X2) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U42(active(X)) -> U42(X) U42(mark(X)) -> U42(X) U52(active(X)) -> U52(X) U52(mark(X)) -> U52(X) U62(active(X)) -> U62(X) U62(mark(X)) -> U62(X) U72(X1, mark(X2)) -> U72(X1, X2) U72(mark(X1), X2) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) s(active(X)) -> s(X) s(mark(X)) -> s(X) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) U11(active(X)) -> U11(X) U11(mark(X)) -> U11(X) U21(active(X)) -> U21(X) U21(mark(X)) -> U21(X) U31(active(X)) -> U31(X) U31(mark(X)) -> U31(X) U41(X1, mark(X2)) -> U41(X1, X2) U41(mark(X1), X2) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(mark(X1), X2) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(mark(X1), X2) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U81(active(X)) -> U81(X) U81(mark(X)) -> U81(X) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (194) QDPOrderProof (EQUIVALENT) We use the reduction pair processor [LPAR04,JAR06]. The following pairs can be oriented strictly and are deleted. ACTIVE(isNat(s(V1))) -> MARK(U21(isNat(V1))) The remaining pairs can at least be oriented weakly. Used ordering: Polynomial Order [NEGPOLO,POLO] with Interpretation: POL( ACTIVE_1(x_1) ) = max{0, x_1 - 2} POL( U41_2(x_1, x_2) ) = max{0, -2} POL( U51_2(x_1, x_2) ) = max{0, -2} POL( U61_2(x_1, x_2) ) = 2 POL( U71_3(x_1, ..., x_3) ) = 2 POL( U72_2(x_1, x_2) ) = max{0, -2} POL( length_1(x_1) ) = max{0, -2} POL( mark_1(x_1) ) = max{0, 2x_1 - 2} POL( zeros ) = 0 POL( active_1(x_1) ) = max{0, -2} POL( cons_2(x_1, x_2) ) = max{0, x_2 - 2} POL( 0 ) = 0 POL( tt ) = 0 POL( U42_1(x_1) ) = x_1 + 2 POL( isNatIList_1(x_1) ) = 0 POL( U52_1(x_1) ) = x_1 + 2 POL( isNatList_1(x_1) ) = 0 POL( U62_1(x_1) ) = 2x_1 + 2 POL( isNat_1(x_1) ) = 2x_1 + 2 POL( s_1(x_1) ) = x_1 + 2 POL( U91_4(x_1, ..., x_4) ) = 2x_1 + 2x_2 + x_3 + x_4 + 2 POL( U92_4(x_1, ..., x_4) ) = max{0, 2x_2 + 2x_4 - 2} POL( U93_4(x_1, ..., x_4) ) = max{0, 2x_2 + 2x_4 - 2} POL( take_2(x_1, x_2) ) = x_2 + 2 POL( U11_1(x_1) ) = 2 POL( U21_1(x_1) ) = x_1 + 2 POL( U31_1(x_1) ) = 0 POL( U81_1(x_1) ) = 2 POL( nil ) = 0 POL( MARK_1(x_1) ) = max{0, x_1 - 2} The following usable rules [FROCOS05] with respect to the argument filtering of the ordering [JAR06] were oriented: U41(X1, mark(X2)) -> U41(X1, X2) U41(mark(X1), X2) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(mark(X1), X2) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(mark(X1), X2) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U72(X1, mark(X2)) -> U72(X1, X2) U72(mark(X1), X2) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) length(active(X)) -> length(X) length(mark(X)) -> length(X) ---------------------------------------- (195) Obligation: Q DP problem: The TRS P consists of the following rules: MARK(U41(X1, X2)) -> ACTIVE(U41(mark(X1), X2)) ACTIVE(U41(tt, V2)) -> MARK(U42(isNatIList(V2))) MARK(U42(X)) -> MARK(X) MARK(U21(X)) -> MARK(X) MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) ACTIVE(isNatIList(cons(V1, V2))) -> MARK(U41(isNat(V1), V2)) MARK(U51(X1, X2)) -> ACTIVE(U51(mark(X1), X2)) ACTIVE(U51(tt, V2)) -> MARK(U52(isNatList(V2))) MARK(U52(X)) -> MARK(X) MARK(isNatList(X)) -> ACTIVE(isNatList(X)) ACTIVE(isNatList(cons(V1, V2))) -> MARK(U51(isNat(V1), V2)) ACTIVE(isNatList(take(V1, V2))) -> MARK(U61(isNat(V1), V2)) MARK(U61(X1, X2)) -> ACTIVE(U61(mark(X1), X2)) ACTIVE(U61(tt, V2)) -> MARK(U62(isNatIList(V2))) MARK(U62(X)) -> MARK(X) MARK(U71(X1, X2, X3)) -> ACTIVE(U71(mark(X1), X2, X3)) ACTIVE(U71(tt, L, N)) -> MARK(U72(isNat(N), L)) MARK(U72(X1, X2)) -> ACTIVE(U72(mark(X1), X2)) ACTIVE(U72(tt, L)) -> MARK(s(length(L))) MARK(s(X)) -> MARK(X) MARK(isNat(X)) -> ACTIVE(isNat(X)) MARK(length(X)) -> ACTIVE(length(mark(X))) ACTIVE(length(cons(N, L))) -> MARK(U71(isNatList(L), L, N)) The TRS R consists of the following rules: mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) active(zeros) -> mark(cons(0, zeros)) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) mark(U42(X)) -> active(U42(mark(X))) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) mark(U52(X)) -> active(U52(mark(X))) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) mark(U62(X)) -> active(U62(mark(X))) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) active(U72(tt, L)) -> mark(s(length(L))) mark(s(X)) -> active(s(mark(X))) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) mark(U11(X)) -> active(U11(mark(X))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) mark(U21(X)) -> active(U21(mark(X))) active(isNatIList(V)) -> mark(U31(isNatList(V))) mark(U31(X)) -> active(U31(mark(X))) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) active(take(0, IL)) -> mark(U81(isNatIList(IL))) mark(U81(X)) -> active(U81(mark(X))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(0) -> active(0) mark(tt) -> active(tt) mark(isNatIList(X)) -> active(isNatIList(X)) mark(isNatList(X)) -> active(isNatList(X)) mark(isNat(X)) -> active(isNat(X)) mark(length(X)) -> active(length(mark(X))) mark(nil) -> active(nil) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) take(X1, mark(X2)) -> take(X1, X2) take(mark(X1), X2) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U42(tt)) -> mark(tt) active(U52(tt)) -> mark(tt) active(U62(tt)) -> mark(tt) active(U81(tt)) -> mark(nil) active(isNat(0)) -> mark(tt) active(isNatIList(zeros)) -> mark(tt) active(isNatList(nil)) -> mark(tt) active(length(nil)) -> mark(0) length(active(X)) -> length(X) length(mark(X)) -> length(X) cons(X1, mark(X2)) -> cons(X1, X2) cons(mark(X1), X2) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U42(active(X)) -> U42(X) U42(mark(X)) -> U42(X) U52(active(X)) -> U52(X) U52(mark(X)) -> U52(X) U62(active(X)) -> U62(X) U62(mark(X)) -> U62(X) U72(X1, mark(X2)) -> U72(X1, X2) U72(mark(X1), X2) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) s(active(X)) -> s(X) s(mark(X)) -> s(X) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) U11(active(X)) -> U11(X) U11(mark(X)) -> U11(X) U21(active(X)) -> U21(X) U21(mark(X)) -> U21(X) U31(active(X)) -> U31(X) U31(mark(X)) -> U31(X) U41(X1, mark(X2)) -> U41(X1, X2) U41(mark(X1), X2) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(mark(X1), X2) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(mark(X1), X2) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U81(active(X)) -> U81(X) U81(mark(X)) -> U81(X) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (196) DependencyGraphProof (EQUIVALENT) The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 1 SCC with 1 less node. ---------------------------------------- (197) Obligation: Q DP problem: The TRS P consists of the following rules: ACTIVE(U41(tt, V2)) -> MARK(U42(isNatIList(V2))) MARK(U42(X)) -> MARK(X) MARK(U21(X)) -> MARK(X) MARK(U41(X1, X2)) -> ACTIVE(U41(mark(X1), X2)) ACTIVE(U51(tt, V2)) -> MARK(U52(isNatList(V2))) MARK(U52(X)) -> MARK(X) MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) ACTIVE(isNatIList(cons(V1, V2))) -> MARK(U41(isNat(V1), V2)) MARK(U51(X1, X2)) -> ACTIVE(U51(mark(X1), X2)) ACTIVE(U61(tt, V2)) -> MARK(U62(isNatIList(V2))) MARK(U62(X)) -> MARK(X) MARK(isNatList(X)) -> ACTIVE(isNatList(X)) ACTIVE(isNatList(cons(V1, V2))) -> MARK(U51(isNat(V1), V2)) ACTIVE(isNatList(take(V1, V2))) -> MARK(U61(isNat(V1), V2)) MARK(U61(X1, X2)) -> ACTIVE(U61(mark(X1), X2)) ACTIVE(U71(tt, L, N)) -> MARK(U72(isNat(N), L)) MARK(U72(X1, X2)) -> ACTIVE(U72(mark(X1), X2)) ACTIVE(U72(tt, L)) -> MARK(s(length(L))) MARK(s(X)) -> MARK(X) MARK(U71(X1, X2, X3)) -> ACTIVE(U71(mark(X1), X2, X3)) ACTIVE(length(cons(N, L))) -> MARK(U71(isNatList(L), L, N)) MARK(length(X)) -> ACTIVE(length(mark(X))) The TRS R consists of the following rules: mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) active(zeros) -> mark(cons(0, zeros)) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) mark(U42(X)) -> active(U42(mark(X))) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) mark(U52(X)) -> active(U52(mark(X))) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) mark(U62(X)) -> active(U62(mark(X))) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) active(U72(tt, L)) -> mark(s(length(L))) mark(s(X)) -> active(s(mark(X))) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) mark(U11(X)) -> active(U11(mark(X))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) mark(U21(X)) -> active(U21(mark(X))) active(isNatIList(V)) -> mark(U31(isNatList(V))) mark(U31(X)) -> active(U31(mark(X))) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) active(take(0, IL)) -> mark(U81(isNatIList(IL))) mark(U81(X)) -> active(U81(mark(X))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(0) -> active(0) mark(tt) -> active(tt) mark(isNatIList(X)) -> active(isNatIList(X)) mark(isNatList(X)) -> active(isNatList(X)) mark(isNat(X)) -> active(isNat(X)) mark(length(X)) -> active(length(mark(X))) mark(nil) -> active(nil) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) take(X1, mark(X2)) -> take(X1, X2) take(mark(X1), X2) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U42(tt)) -> mark(tt) active(U52(tt)) -> mark(tt) active(U62(tt)) -> mark(tt) active(U81(tt)) -> mark(nil) active(isNat(0)) -> mark(tt) active(isNatIList(zeros)) -> mark(tt) active(isNatList(nil)) -> mark(tt) active(length(nil)) -> mark(0) length(active(X)) -> length(X) length(mark(X)) -> length(X) cons(X1, mark(X2)) -> cons(X1, X2) cons(mark(X1), X2) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U42(active(X)) -> U42(X) U42(mark(X)) -> U42(X) U52(active(X)) -> U52(X) U52(mark(X)) -> U52(X) U62(active(X)) -> U62(X) U62(mark(X)) -> U62(X) U72(X1, mark(X2)) -> U72(X1, X2) U72(mark(X1), X2) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) s(active(X)) -> s(X) s(mark(X)) -> s(X) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) U11(active(X)) -> U11(X) U11(mark(X)) -> U11(X) U21(active(X)) -> U21(X) U21(mark(X)) -> U21(X) U31(active(X)) -> U31(X) U31(mark(X)) -> U31(X) U41(X1, mark(X2)) -> U41(X1, X2) U41(mark(X1), X2) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(mark(X1), X2) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(mark(X1), X2) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U81(active(X)) -> U81(X) U81(mark(X)) -> U81(X) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (198) QDPQMonotonicMRRProof (EQUIVALENT) 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. Strictly oriented dependency pairs: ACTIVE(isNatList(take(V1, V2))) -> MARK(U61(isNat(V1), V2)) Used ordering: Polynomial interpretation [POLO]: POL(0) = 0 POL(ACTIVE(x_1)) = 2*x_1 POL(MARK(x_1)) = 2*x_1 POL(U11(x_1)) = 0 POL(U21(x_1)) = x_1 POL(U31(x_1)) = 0 POL(U41(x_1, x_2)) = 0 POL(U42(x_1)) = 2*x_1 POL(U51(x_1, x_2)) = 1 POL(U52(x_1)) = x_1 POL(U61(x_1, x_2)) = 0 POL(U62(x_1)) = 2*x_1 POL(U71(x_1, x_2, x_3)) = 0 POL(U72(x_1, x_2)) = 0 POL(U81(x_1)) = 0 POL(U91(x_1, x_2, x_3, x_4)) = 0 POL(U92(x_1, x_2, x_3, x_4)) = 0 POL(U93(x_1, x_2, x_3, x_4)) = 0 POL(active(x_1)) = x_1 POL(cons(x_1, x_2)) = 0 POL(isNat(x_1)) = 0 POL(isNatIList(x_1)) = 0 POL(isNatList(x_1)) = 1 POL(length(x_1)) = 0 POL(mark(x_1)) = x_1 POL(nil) = 0 POL(s(x_1)) = 2*x_1 POL(take(x_1, x_2)) = 0 POL(tt) = 0 POL(zeros) = 0 ---------------------------------------- (199) Obligation: Q DP problem: The TRS P consists of the following rules: ACTIVE(U41(tt, V2)) -> MARK(U42(isNatIList(V2))) MARK(U42(X)) -> MARK(X) MARK(U21(X)) -> MARK(X) MARK(U41(X1, X2)) -> ACTIVE(U41(mark(X1), X2)) ACTIVE(U51(tt, V2)) -> MARK(U52(isNatList(V2))) MARK(U52(X)) -> MARK(X) MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) ACTIVE(isNatIList(cons(V1, V2))) -> MARK(U41(isNat(V1), V2)) MARK(U51(X1, X2)) -> ACTIVE(U51(mark(X1), X2)) ACTIVE(U61(tt, V2)) -> MARK(U62(isNatIList(V2))) MARK(U62(X)) -> MARK(X) MARK(isNatList(X)) -> ACTIVE(isNatList(X)) ACTIVE(isNatList(cons(V1, V2))) -> MARK(U51(isNat(V1), V2)) MARK(U61(X1, X2)) -> ACTIVE(U61(mark(X1), X2)) ACTIVE(U71(tt, L, N)) -> MARK(U72(isNat(N), L)) MARK(U72(X1, X2)) -> ACTIVE(U72(mark(X1), X2)) ACTIVE(U72(tt, L)) -> MARK(s(length(L))) MARK(s(X)) -> MARK(X) MARK(U71(X1, X2, X3)) -> ACTIVE(U71(mark(X1), X2, X3)) ACTIVE(length(cons(N, L))) -> MARK(U71(isNatList(L), L, N)) MARK(length(X)) -> ACTIVE(length(mark(X))) The TRS R consists of the following rules: mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) active(zeros) -> mark(cons(0, zeros)) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) mark(U42(X)) -> active(U42(mark(X))) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) mark(U52(X)) -> active(U52(mark(X))) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) mark(U62(X)) -> active(U62(mark(X))) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) active(U72(tt, L)) -> mark(s(length(L))) mark(s(X)) -> active(s(mark(X))) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) mark(U11(X)) -> active(U11(mark(X))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) mark(U21(X)) -> active(U21(mark(X))) active(isNatIList(V)) -> mark(U31(isNatList(V))) mark(U31(X)) -> active(U31(mark(X))) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) active(take(0, IL)) -> mark(U81(isNatIList(IL))) mark(U81(X)) -> active(U81(mark(X))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(0) -> active(0) mark(tt) -> active(tt) mark(isNatIList(X)) -> active(isNatIList(X)) mark(isNatList(X)) -> active(isNatList(X)) mark(isNat(X)) -> active(isNat(X)) mark(length(X)) -> active(length(mark(X))) mark(nil) -> active(nil) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) take(X1, mark(X2)) -> take(X1, X2) take(mark(X1), X2) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U42(tt)) -> mark(tt) active(U52(tt)) -> mark(tt) active(U62(tt)) -> mark(tt) active(U81(tt)) -> mark(nil) active(isNat(0)) -> mark(tt) active(isNatIList(zeros)) -> mark(tt) active(isNatList(nil)) -> mark(tt) active(length(nil)) -> mark(0) length(active(X)) -> length(X) length(mark(X)) -> length(X) cons(X1, mark(X2)) -> cons(X1, X2) cons(mark(X1), X2) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U42(active(X)) -> U42(X) U42(mark(X)) -> U42(X) U52(active(X)) -> U52(X) U52(mark(X)) -> U52(X) U62(active(X)) -> U62(X) U62(mark(X)) -> U62(X) U72(X1, mark(X2)) -> U72(X1, X2) U72(mark(X1), X2) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) s(active(X)) -> s(X) s(mark(X)) -> s(X) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) U11(active(X)) -> U11(X) U11(mark(X)) -> U11(X) U21(active(X)) -> U21(X) U21(mark(X)) -> U21(X) U31(active(X)) -> U31(X) U31(mark(X)) -> U31(X) U41(X1, mark(X2)) -> U41(X1, X2) U41(mark(X1), X2) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(mark(X1), X2) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(mark(X1), X2) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U81(active(X)) -> U81(X) U81(mark(X)) -> U81(X) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (200) QDPQMonotonicMRRProof (EQUIVALENT) 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. Strictly oriented rules of the TRS R: active(length(nil)) -> mark(0) Used ordering: Polynomial interpretation [POLO]: POL(0) = 0 POL(ACTIVE(x_1)) = 2*x_1 POL(MARK(x_1)) = 2*x_1 POL(U11(x_1)) = x_1 POL(U21(x_1)) = x_1 POL(U31(x_1)) = 2*x_1 POL(U41(x_1, x_2)) = 2*x_1 POL(U42(x_1)) = x_1 POL(U51(x_1, x_2)) = 2*x_1 POL(U52(x_1)) = 2*x_1 POL(U61(x_1, x_2)) = 2*x_1 POL(U62(x_1)) = 2*x_1 POL(U71(x_1, x_2, x_3)) = x_1 + 2*x_2 POL(U72(x_1, x_2)) = x_1 + 2*x_2 POL(U81(x_1)) = 2 + x_1 POL(U91(x_1, x_2, x_3, x_4)) = 2 + 2*x_1 + x_2 + x_3 + x_4 POL(U92(x_1, x_2, x_3, x_4)) = 2 + 2*x_1 + x_2 + x_3 + x_4 POL(U93(x_1, x_2, x_3, x_4)) = 2 + x_1 + x_2 + x_3 + x_4 POL(active(x_1)) = x_1 POL(cons(x_1, x_2)) = x_1 + x_2 POL(isNat(x_1)) = 0 POL(isNatIList(x_1)) = 0 POL(isNatList(x_1)) = 0 POL(length(x_1)) = 2*x_1 POL(mark(x_1)) = x_1 POL(nil) = 2 POL(s(x_1)) = x_1 POL(take(x_1, x_2)) = 2 + x_1 + x_2 POL(tt) = 0 POL(zeros) = 0 ---------------------------------------- (201) Obligation: Q DP problem: The TRS P consists of the following rules: ACTIVE(U41(tt, V2)) -> MARK(U42(isNatIList(V2))) MARK(U42(X)) -> MARK(X) MARK(U21(X)) -> MARK(X) MARK(U41(X1, X2)) -> ACTIVE(U41(mark(X1), X2)) ACTIVE(U51(tt, V2)) -> MARK(U52(isNatList(V2))) MARK(U52(X)) -> MARK(X) MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) ACTIVE(isNatIList(cons(V1, V2))) -> MARK(U41(isNat(V1), V2)) MARK(U51(X1, X2)) -> ACTIVE(U51(mark(X1), X2)) ACTIVE(U61(tt, V2)) -> MARK(U62(isNatIList(V2))) MARK(U62(X)) -> MARK(X) MARK(isNatList(X)) -> ACTIVE(isNatList(X)) ACTIVE(isNatList(cons(V1, V2))) -> MARK(U51(isNat(V1), V2)) MARK(U61(X1, X2)) -> ACTIVE(U61(mark(X1), X2)) ACTIVE(U71(tt, L, N)) -> MARK(U72(isNat(N), L)) MARK(U72(X1, X2)) -> ACTIVE(U72(mark(X1), X2)) ACTIVE(U72(tt, L)) -> MARK(s(length(L))) MARK(s(X)) -> MARK(X) MARK(U71(X1, X2, X3)) -> ACTIVE(U71(mark(X1), X2, X3)) ACTIVE(length(cons(N, L))) -> MARK(U71(isNatList(L), L, N)) MARK(length(X)) -> ACTIVE(length(mark(X))) The TRS R consists of the following rules: mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) active(zeros) -> mark(cons(0, zeros)) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) mark(U42(X)) -> active(U42(mark(X))) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) mark(U52(X)) -> active(U52(mark(X))) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) mark(U62(X)) -> active(U62(mark(X))) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) active(U72(tt, L)) -> mark(s(length(L))) mark(s(X)) -> active(s(mark(X))) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) mark(U11(X)) -> active(U11(mark(X))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) mark(U21(X)) -> active(U21(mark(X))) active(isNatIList(V)) -> mark(U31(isNatList(V))) mark(U31(X)) -> active(U31(mark(X))) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) active(take(0, IL)) -> mark(U81(isNatIList(IL))) mark(U81(X)) -> active(U81(mark(X))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(0) -> active(0) mark(tt) -> active(tt) mark(isNatIList(X)) -> active(isNatIList(X)) mark(isNatList(X)) -> active(isNatList(X)) mark(isNat(X)) -> active(isNat(X)) mark(length(X)) -> active(length(mark(X))) mark(nil) -> active(nil) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) take(X1, mark(X2)) -> take(X1, X2) take(mark(X1), X2) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U42(tt)) -> mark(tt) active(U52(tt)) -> mark(tt) active(U62(tt)) -> mark(tt) active(U81(tt)) -> mark(nil) active(isNat(0)) -> mark(tt) active(isNatIList(zeros)) -> mark(tt) active(isNatList(nil)) -> mark(tt) length(active(X)) -> length(X) length(mark(X)) -> length(X) cons(X1, mark(X2)) -> cons(X1, X2) cons(mark(X1), X2) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U42(active(X)) -> U42(X) U42(mark(X)) -> U42(X) U52(active(X)) -> U52(X) U52(mark(X)) -> U52(X) U62(active(X)) -> U62(X) U62(mark(X)) -> U62(X) U72(X1, mark(X2)) -> U72(X1, X2) U72(mark(X1), X2) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) s(active(X)) -> s(X) s(mark(X)) -> s(X) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) U11(active(X)) -> U11(X) U11(mark(X)) -> U11(X) U21(active(X)) -> U21(X) U21(mark(X)) -> U21(X) U31(active(X)) -> U31(X) U31(mark(X)) -> U31(X) U41(X1, mark(X2)) -> U41(X1, X2) U41(mark(X1), X2) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(mark(X1), X2) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(mark(X1), X2) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U81(active(X)) -> U81(X) U81(mark(X)) -> U81(X) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (202) QDPQMonotonicMRRProof (EQUIVALENT) 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. Strictly oriented dependency pairs: ACTIVE(U61(tt, V2)) -> MARK(U62(isNatIList(V2))) Used ordering: Polynomial interpretation [POLO]: POL(0) = 0 POL(ACTIVE(x_1)) = 2*x_1 POL(MARK(x_1)) = 2*x_1 POL(U11(x_1)) = 0 POL(U21(x_1)) = x_1 POL(U31(x_1)) = 0 POL(U41(x_1, x_2)) = 0 POL(U42(x_1)) = 2*x_1 POL(U51(x_1, x_2)) = 2*x_2 POL(U52(x_1)) = x_1 POL(U61(x_1, x_2)) = 1 POL(U62(x_1)) = x_1 POL(U71(x_1, x_2, x_3)) = 0 POL(U72(x_1, x_2)) = 0 POL(U81(x_1)) = 0 POL(U91(x_1, x_2, x_3, x_4)) = 2 + x_2 POL(U92(x_1, x_2, x_3, x_4)) = 2 + x_2 POL(U93(x_1, x_2, x_3, x_4)) = 2 + x_2 POL(active(x_1)) = x_1 POL(cons(x_1, x_2)) = x_2 POL(isNat(x_1)) = 0 POL(isNatIList(x_1)) = 0 POL(isNatList(x_1)) = 2*x_1 POL(length(x_1)) = 0 POL(mark(x_1)) = x_1 POL(nil) = 0 POL(s(x_1)) = x_1 POL(take(x_1, x_2)) = 2 + x_2 POL(tt) = 0 POL(zeros) = 0 ---------------------------------------- (203) Obligation: Q DP problem: The TRS P consists of the following rules: ACTIVE(U41(tt, V2)) -> MARK(U42(isNatIList(V2))) MARK(U42(X)) -> MARK(X) MARK(U21(X)) -> MARK(X) MARK(U41(X1, X2)) -> ACTIVE(U41(mark(X1), X2)) ACTIVE(U51(tt, V2)) -> MARK(U52(isNatList(V2))) MARK(U52(X)) -> MARK(X) MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) ACTIVE(isNatIList(cons(V1, V2))) -> MARK(U41(isNat(V1), V2)) MARK(U51(X1, X2)) -> ACTIVE(U51(mark(X1), X2)) MARK(U62(X)) -> MARK(X) MARK(isNatList(X)) -> ACTIVE(isNatList(X)) ACTIVE(isNatList(cons(V1, V2))) -> MARK(U51(isNat(V1), V2)) MARK(U61(X1, X2)) -> ACTIVE(U61(mark(X1), X2)) ACTIVE(U71(tt, L, N)) -> MARK(U72(isNat(N), L)) MARK(U72(X1, X2)) -> ACTIVE(U72(mark(X1), X2)) ACTIVE(U72(tt, L)) -> MARK(s(length(L))) MARK(s(X)) -> MARK(X) MARK(U71(X1, X2, X3)) -> ACTIVE(U71(mark(X1), X2, X3)) ACTIVE(length(cons(N, L))) -> MARK(U71(isNatList(L), L, N)) MARK(length(X)) -> ACTIVE(length(mark(X))) The TRS R consists of the following rules: mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) active(zeros) -> mark(cons(0, zeros)) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) mark(U42(X)) -> active(U42(mark(X))) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) mark(U52(X)) -> active(U52(mark(X))) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) mark(U62(X)) -> active(U62(mark(X))) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) active(U72(tt, L)) -> mark(s(length(L))) mark(s(X)) -> active(s(mark(X))) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) mark(U11(X)) -> active(U11(mark(X))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) mark(U21(X)) -> active(U21(mark(X))) active(isNatIList(V)) -> mark(U31(isNatList(V))) mark(U31(X)) -> active(U31(mark(X))) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) active(take(0, IL)) -> mark(U81(isNatIList(IL))) mark(U81(X)) -> active(U81(mark(X))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(0) -> active(0) mark(tt) -> active(tt) mark(isNatIList(X)) -> active(isNatIList(X)) mark(isNatList(X)) -> active(isNatList(X)) mark(isNat(X)) -> active(isNat(X)) mark(length(X)) -> active(length(mark(X))) mark(nil) -> active(nil) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) take(X1, mark(X2)) -> take(X1, X2) take(mark(X1), X2) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U42(tt)) -> mark(tt) active(U52(tt)) -> mark(tt) active(U62(tt)) -> mark(tt) active(U81(tt)) -> mark(nil) active(isNat(0)) -> mark(tt) active(isNatIList(zeros)) -> mark(tt) active(isNatList(nil)) -> mark(tt) length(active(X)) -> length(X) length(mark(X)) -> length(X) cons(X1, mark(X2)) -> cons(X1, X2) cons(mark(X1), X2) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U42(active(X)) -> U42(X) U42(mark(X)) -> U42(X) U52(active(X)) -> U52(X) U52(mark(X)) -> U52(X) U62(active(X)) -> U62(X) U62(mark(X)) -> U62(X) U72(X1, mark(X2)) -> U72(X1, X2) U72(mark(X1), X2) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) s(active(X)) -> s(X) s(mark(X)) -> s(X) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) U11(active(X)) -> U11(X) U11(mark(X)) -> U11(X) U21(active(X)) -> U21(X) U21(mark(X)) -> U21(X) U31(active(X)) -> U31(X) U31(mark(X)) -> U31(X) U41(X1, mark(X2)) -> U41(X1, X2) U41(mark(X1), X2) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(mark(X1), X2) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(mark(X1), X2) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U81(active(X)) -> U81(X) U81(mark(X)) -> U81(X) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (204) QDPQMonotonicMRRProof (EQUIVALENT) 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. Strictly oriented dependency pairs: MARK(U61(X1, X2)) -> ACTIVE(U61(mark(X1), X2)) Used ordering: Polynomial interpretation [POLO]: POL(0) = 0 POL(ACTIVE(x_1)) = 2*x_1 POL(MARK(x_1)) = 2 POL(U11(x_1)) = 0 POL(U21(x_1)) = 0 POL(U31(x_1)) = 0 POL(U41(x_1, x_2)) = 1 POL(U42(x_1)) = 0 POL(U51(x_1, x_2)) = 1 POL(U52(x_1)) = 0 POL(U61(x_1, x_2)) = 0 POL(U62(x_1)) = 0 POL(U71(x_1, x_2, x_3)) = 1 POL(U72(x_1, x_2)) = 1 POL(U81(x_1)) = 0 POL(U91(x_1, x_2, x_3, x_4)) = 0 POL(U92(x_1, x_2, x_3, x_4)) = 0 POL(U93(x_1, x_2, x_3, x_4)) = 0 POL(active(x_1)) = 0 POL(cons(x_1, x_2)) = 0 POL(isNat(x_1)) = 0 POL(isNatIList(x_1)) = 1 POL(isNatList(x_1)) = 1 POL(length(x_1)) = 1 POL(mark(x_1)) = 0 POL(nil) = 0 POL(s(x_1)) = 0 POL(take(x_1, x_2)) = 0 POL(tt) = 0 POL(zeros) = 0 ---------------------------------------- (205) Obligation: Q DP problem: The TRS P consists of the following rules: ACTIVE(U41(tt, V2)) -> MARK(U42(isNatIList(V2))) MARK(U42(X)) -> MARK(X) MARK(U21(X)) -> MARK(X) MARK(U41(X1, X2)) -> ACTIVE(U41(mark(X1), X2)) ACTIVE(U51(tt, V2)) -> MARK(U52(isNatList(V2))) MARK(U52(X)) -> MARK(X) MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) ACTIVE(isNatIList(cons(V1, V2))) -> MARK(U41(isNat(V1), V2)) MARK(U51(X1, X2)) -> ACTIVE(U51(mark(X1), X2)) MARK(U62(X)) -> MARK(X) MARK(isNatList(X)) -> ACTIVE(isNatList(X)) ACTIVE(isNatList(cons(V1, V2))) -> MARK(U51(isNat(V1), V2)) ACTIVE(U71(tt, L, N)) -> MARK(U72(isNat(N), L)) MARK(U72(X1, X2)) -> ACTIVE(U72(mark(X1), X2)) ACTIVE(U72(tt, L)) -> MARK(s(length(L))) MARK(s(X)) -> MARK(X) MARK(U71(X1, X2, X3)) -> ACTIVE(U71(mark(X1), X2, X3)) ACTIVE(length(cons(N, L))) -> MARK(U71(isNatList(L), L, N)) MARK(length(X)) -> ACTIVE(length(mark(X))) The TRS R consists of the following rules: mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) active(zeros) -> mark(cons(0, zeros)) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) mark(U42(X)) -> active(U42(mark(X))) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) mark(U52(X)) -> active(U52(mark(X))) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) mark(U62(X)) -> active(U62(mark(X))) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) active(U72(tt, L)) -> mark(s(length(L))) mark(s(X)) -> active(s(mark(X))) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) mark(U11(X)) -> active(U11(mark(X))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) mark(U21(X)) -> active(U21(mark(X))) active(isNatIList(V)) -> mark(U31(isNatList(V))) mark(U31(X)) -> active(U31(mark(X))) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) active(take(0, IL)) -> mark(U81(isNatIList(IL))) mark(U81(X)) -> active(U81(mark(X))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(0) -> active(0) mark(tt) -> active(tt) mark(isNatIList(X)) -> active(isNatIList(X)) mark(isNatList(X)) -> active(isNatList(X)) mark(isNat(X)) -> active(isNat(X)) mark(length(X)) -> active(length(mark(X))) mark(nil) -> active(nil) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) take(X1, mark(X2)) -> take(X1, X2) take(mark(X1), X2) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U42(tt)) -> mark(tt) active(U52(tt)) -> mark(tt) active(U62(tt)) -> mark(tt) active(U81(tt)) -> mark(nil) active(isNat(0)) -> mark(tt) active(isNatIList(zeros)) -> mark(tt) active(isNatList(nil)) -> mark(tt) length(active(X)) -> length(X) length(mark(X)) -> length(X) cons(X1, mark(X2)) -> cons(X1, X2) cons(mark(X1), X2) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U42(active(X)) -> U42(X) U42(mark(X)) -> U42(X) U52(active(X)) -> U52(X) U52(mark(X)) -> U52(X) U62(active(X)) -> U62(X) U62(mark(X)) -> U62(X) U72(X1, mark(X2)) -> U72(X1, X2) U72(mark(X1), X2) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) s(active(X)) -> s(X) s(mark(X)) -> s(X) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) U11(active(X)) -> U11(X) U11(mark(X)) -> U11(X) U21(active(X)) -> U21(X) U21(mark(X)) -> U21(X) U31(active(X)) -> U31(X) U31(mark(X)) -> U31(X) U41(X1, mark(X2)) -> U41(X1, X2) U41(mark(X1), X2) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(mark(X1), X2) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(mark(X1), X2) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U81(active(X)) -> U81(X) U81(mark(X)) -> U81(X) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (206) QDPQMonotonicMRRProof (EQUIVALENT) 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. Strictly oriented dependency pairs: MARK(U62(X)) -> MARK(X) Used ordering: Polynomial interpretation [POLO]: POL(0) = 0 POL(ACTIVE(x_1)) = 2*x_1 POL(MARK(x_1)) = 2*x_1 POL(U11(x_1)) = 0 POL(U21(x_1)) = 2*x_1 POL(U31(x_1)) = 0 POL(U41(x_1, x_2)) = 0 POL(U42(x_1)) = 2*x_1 POL(U51(x_1, x_2)) = 1 POL(U52(x_1)) = x_1 POL(U61(x_1, x_2)) = 1 POL(U62(x_1)) = 1 + 2*x_1 POL(U71(x_1, x_2, x_3)) = 0 POL(U72(x_1, x_2)) = 0 POL(U81(x_1)) = 0 POL(U91(x_1, x_2, x_3, x_4)) = 0 POL(U92(x_1, x_2, x_3, x_4)) = 0 POL(U93(x_1, x_2, x_3, x_4)) = 0 POL(active(x_1)) = x_1 POL(cons(x_1, x_2)) = 0 POL(isNat(x_1)) = 0 POL(isNatIList(x_1)) = 0 POL(isNatList(x_1)) = 1 POL(length(x_1)) = 0 POL(mark(x_1)) = x_1 POL(nil) = 0 POL(s(x_1)) = 2*x_1 POL(take(x_1, x_2)) = 0 POL(tt) = 0 POL(zeros) = 0 ---------------------------------------- (207) Obligation: Q DP problem: The TRS P consists of the following rules: ACTIVE(U41(tt, V2)) -> MARK(U42(isNatIList(V2))) MARK(U42(X)) -> MARK(X) MARK(U21(X)) -> MARK(X) MARK(U41(X1, X2)) -> ACTIVE(U41(mark(X1), X2)) ACTIVE(U51(tt, V2)) -> MARK(U52(isNatList(V2))) MARK(U52(X)) -> MARK(X) MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) ACTIVE(isNatIList(cons(V1, V2))) -> MARK(U41(isNat(V1), V2)) MARK(U51(X1, X2)) -> ACTIVE(U51(mark(X1), X2)) MARK(isNatList(X)) -> ACTIVE(isNatList(X)) ACTIVE(isNatList(cons(V1, V2))) -> MARK(U51(isNat(V1), V2)) ACTIVE(U71(tt, L, N)) -> MARK(U72(isNat(N), L)) MARK(U72(X1, X2)) -> ACTIVE(U72(mark(X1), X2)) ACTIVE(U72(tt, L)) -> MARK(s(length(L))) MARK(s(X)) -> MARK(X) MARK(U71(X1, X2, X3)) -> ACTIVE(U71(mark(X1), X2, X3)) ACTIVE(length(cons(N, L))) -> MARK(U71(isNatList(L), L, N)) MARK(length(X)) -> ACTIVE(length(mark(X))) The TRS R consists of the following rules: mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) active(zeros) -> mark(cons(0, zeros)) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) mark(U42(X)) -> active(U42(mark(X))) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) mark(U52(X)) -> active(U52(mark(X))) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) mark(U62(X)) -> active(U62(mark(X))) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) active(U72(tt, L)) -> mark(s(length(L))) mark(s(X)) -> active(s(mark(X))) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) mark(U11(X)) -> active(U11(mark(X))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) mark(U21(X)) -> active(U21(mark(X))) active(isNatIList(V)) -> mark(U31(isNatList(V))) mark(U31(X)) -> active(U31(mark(X))) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) active(take(0, IL)) -> mark(U81(isNatIList(IL))) mark(U81(X)) -> active(U81(mark(X))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(0) -> active(0) mark(tt) -> active(tt) mark(isNatIList(X)) -> active(isNatIList(X)) mark(isNatList(X)) -> active(isNatList(X)) mark(isNat(X)) -> active(isNat(X)) mark(length(X)) -> active(length(mark(X))) mark(nil) -> active(nil) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) take(X1, mark(X2)) -> take(X1, X2) take(mark(X1), X2) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U42(tt)) -> mark(tt) active(U52(tt)) -> mark(tt) active(U62(tt)) -> mark(tt) active(U81(tt)) -> mark(nil) active(isNat(0)) -> mark(tt) active(isNatIList(zeros)) -> mark(tt) active(isNatList(nil)) -> mark(tt) length(active(X)) -> length(X) length(mark(X)) -> length(X) cons(X1, mark(X2)) -> cons(X1, X2) cons(mark(X1), X2) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U42(active(X)) -> U42(X) U42(mark(X)) -> U42(X) U52(active(X)) -> U52(X) U52(mark(X)) -> U52(X) U62(active(X)) -> U62(X) U62(mark(X)) -> U62(X) U72(X1, mark(X2)) -> U72(X1, X2) U72(mark(X1), X2) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) s(active(X)) -> s(X) s(mark(X)) -> s(X) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) U11(active(X)) -> U11(X) U11(mark(X)) -> U11(X) U21(active(X)) -> U21(X) U21(mark(X)) -> U21(X) U31(active(X)) -> U31(X) U31(mark(X)) -> U31(X) U41(X1, mark(X2)) -> U41(X1, X2) U41(mark(X1), X2) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(mark(X1), X2) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(mark(X1), X2) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U81(active(X)) -> U81(X) U81(mark(X)) -> U81(X) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (208) QDPOrderProof (EQUIVALENT) We use the reduction pair processor [LPAR04,JAR06]. The following pairs can be oriented strictly and are deleted. MARK(U21(X)) -> MARK(X) The remaining pairs can at least be oriented weakly. Used ordering: Polynomial Order [NEGPOLO,POLO] with Interpretation: POL( ACTIVE_1(x_1) ) = max{0, -2} POL( U41_2(x_1, x_2) ) = max{0, -2} POL( U51_2(x_1, x_2) ) = 1 POL( U71_3(x_1, ..., x_3) ) = max{0, -2} POL( U72_2(x_1, x_2) ) = max{0, -2} POL( length_1(x_1) ) = 0 POL( mark_1(x_1) ) = max{0, 2x_1 - 1} POL( zeros ) = 0 POL( active_1(x_1) ) = 2 POL( cons_2(x_1, x_2) ) = max{0, 2x_1 - 1} POL( 0 ) = 1 POL( tt ) = 0 POL( U42_1(x_1) ) = 2x_1 + 1 POL( isNatIList_1(x_1) ) = 0 POL( U52_1(x_1) ) = 2x_1 + 1 POL( isNatList_1(x_1) ) = 0 POL( U61_2(x_1, x_2) ) = max{0, x_2 - 2} POL( U62_1(x_1) ) = 1 POL( isNat_1(x_1) ) = x_1 POL( s_1(x_1) ) = x_1 + 1 POL( U91_4(x_1, ..., x_4) ) = max{0, 2x_1 + 2x_4 - 2} POL( U92_4(x_1, ..., x_4) ) = max{0, 2x_2 + 2x_3 - 2} POL( U93_4(x_1, ..., x_4) ) = x_1 + x_2 + x_3 POL( take_2(x_1, x_2) ) = max{0, x_2 - 1} POL( U11_1(x_1) ) = max{0, 2x_1 - 2} POL( U21_1(x_1) ) = x_1 + 2 POL( U31_1(x_1) ) = 2 POL( U81_1(x_1) ) = max{0, 2x_1 - 2} POL( nil ) = 1 POL( MARK_1(x_1) ) = max{0, x_1 - 1} The following usable rules [FROCOS05] with respect to the argument filtering of the ordering [JAR06] were oriented: none ---------------------------------------- (209) Obligation: Q DP problem: The TRS P consists of the following rules: ACTIVE(U41(tt, V2)) -> MARK(U42(isNatIList(V2))) MARK(U42(X)) -> MARK(X) MARK(U41(X1, X2)) -> ACTIVE(U41(mark(X1), X2)) ACTIVE(U51(tt, V2)) -> MARK(U52(isNatList(V2))) MARK(U52(X)) -> MARK(X) MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) ACTIVE(isNatIList(cons(V1, V2))) -> MARK(U41(isNat(V1), V2)) MARK(U51(X1, X2)) -> ACTIVE(U51(mark(X1), X2)) MARK(isNatList(X)) -> ACTIVE(isNatList(X)) ACTIVE(isNatList(cons(V1, V2))) -> MARK(U51(isNat(V1), V2)) ACTIVE(U71(tt, L, N)) -> MARK(U72(isNat(N), L)) MARK(U72(X1, X2)) -> ACTIVE(U72(mark(X1), X2)) ACTIVE(U72(tt, L)) -> MARK(s(length(L))) MARK(s(X)) -> MARK(X) MARK(U71(X1, X2, X3)) -> ACTIVE(U71(mark(X1), X2, X3)) ACTIVE(length(cons(N, L))) -> MARK(U71(isNatList(L), L, N)) MARK(length(X)) -> ACTIVE(length(mark(X))) The TRS R consists of the following rules: mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) active(zeros) -> mark(cons(0, zeros)) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) mark(U42(X)) -> active(U42(mark(X))) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) mark(U52(X)) -> active(U52(mark(X))) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) mark(U62(X)) -> active(U62(mark(X))) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) active(U72(tt, L)) -> mark(s(length(L))) mark(s(X)) -> active(s(mark(X))) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) mark(U11(X)) -> active(U11(mark(X))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) mark(U21(X)) -> active(U21(mark(X))) active(isNatIList(V)) -> mark(U31(isNatList(V))) mark(U31(X)) -> active(U31(mark(X))) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) active(take(0, IL)) -> mark(U81(isNatIList(IL))) mark(U81(X)) -> active(U81(mark(X))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(0) -> active(0) mark(tt) -> active(tt) mark(isNatIList(X)) -> active(isNatIList(X)) mark(isNatList(X)) -> active(isNatList(X)) mark(isNat(X)) -> active(isNat(X)) mark(length(X)) -> active(length(mark(X))) mark(nil) -> active(nil) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) take(X1, mark(X2)) -> take(X1, X2) take(mark(X1), X2) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U42(tt)) -> mark(tt) active(U52(tt)) -> mark(tt) active(U62(tt)) -> mark(tt) active(U81(tt)) -> mark(nil) active(isNat(0)) -> mark(tt) active(isNatIList(zeros)) -> mark(tt) active(isNatList(nil)) -> mark(tt) length(active(X)) -> length(X) length(mark(X)) -> length(X) cons(X1, mark(X2)) -> cons(X1, X2) cons(mark(X1), X2) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U42(active(X)) -> U42(X) U42(mark(X)) -> U42(X) U52(active(X)) -> U52(X) U52(mark(X)) -> U52(X) U62(active(X)) -> U62(X) U62(mark(X)) -> U62(X) U72(X1, mark(X2)) -> U72(X1, X2) U72(mark(X1), X2) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) s(active(X)) -> s(X) s(mark(X)) -> s(X) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) U11(active(X)) -> U11(X) U11(mark(X)) -> U11(X) U21(active(X)) -> U21(X) U21(mark(X)) -> U21(X) U31(active(X)) -> U31(X) U31(mark(X)) -> U31(X) U41(X1, mark(X2)) -> U41(X1, X2) U41(mark(X1), X2) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(mark(X1), X2) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(mark(X1), X2) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U81(active(X)) -> U81(X) U81(mark(X)) -> U81(X) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (210) QDPOrderProof (EQUIVALENT) We use the reduction pair processor [LPAR04,JAR06]. The following pairs can be oriented strictly and are deleted. ACTIVE(isNatList(cons(V1, V2))) -> MARK(U51(isNat(V1), V2)) The remaining pairs can at least be oriented weakly. Used ordering: Polynomial Order [NEGPOLO,POLO] with Interpretation: POL( ACTIVE_1(x_1) ) = max{0, x_1 - 1} POL( U41_2(x_1, x_2) ) = max{0, -2} POL( U51_2(x_1, x_2) ) = 2x_2 + 2 POL( U71_3(x_1, ..., x_3) ) = max{0, -2} POL( U72_2(x_1, x_2) ) = max{0, -2} POL( length_1(x_1) ) = max{0, -2} POL( mark_1(x_1) ) = 2x_1 + 2 POL( zeros ) = 2 POL( active_1(x_1) ) = x_1 POL( cons_2(x_1, x_2) ) = 2x_1 + x_2 + 2 POL( 0 ) = 1 POL( tt ) = 0 POL( U42_1(x_1) ) = 2x_1 + 1 POL( isNatIList_1(x_1) ) = 0 POL( U52_1(x_1) ) = x_1 + 1 POL( isNatList_1(x_1) ) = 2x_1 + 1 POL( U61_2(x_1, x_2) ) = max{0, x_2 - 2} POL( U62_1(x_1) ) = max{0, -2} POL( isNat_1(x_1) ) = x_1 POL( s_1(x_1) ) = x_1 + 1 POL( U91_4(x_1, ..., x_4) ) = 2x_1 + x_4 + 2 POL( U92_4(x_1, ..., x_4) ) = x_1 + 2 POL( U93_4(x_1, ..., x_4) ) = max{0, x_1 + x_2 + 2x_4 - 2} POL( take_2(x_1, x_2) ) = 2 POL( U11_1(x_1) ) = max{0, -2} POL( U21_1(x_1) ) = 2x_1 + 2 POL( U31_1(x_1) ) = 2 POL( U81_1(x_1) ) = max{0, x_1 - 1} POL( nil ) = 0 POL( MARK_1(x_1) ) = max{0, x_1 - 1} The following usable rules [FROCOS05] with respect to the argument filtering of the ordering [JAR06] were oriented: U41(mark(X1), X2) -> U41(X1, X2) U41(X1, mark(X2)) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U51(mark(X1), X2) -> U51(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U72(mark(X1), X2) -> U72(X1, X2) U72(X1, mark(X2)) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) length(mark(X)) -> length(X) length(active(X)) -> length(X) ---------------------------------------- (211) Obligation: Q DP problem: The TRS P consists of the following rules: ACTIVE(U41(tt, V2)) -> MARK(U42(isNatIList(V2))) MARK(U42(X)) -> MARK(X) MARK(U41(X1, X2)) -> ACTIVE(U41(mark(X1), X2)) ACTIVE(U51(tt, V2)) -> MARK(U52(isNatList(V2))) MARK(U52(X)) -> MARK(X) MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) ACTIVE(isNatIList(cons(V1, V2))) -> MARK(U41(isNat(V1), V2)) MARK(U51(X1, X2)) -> ACTIVE(U51(mark(X1), X2)) MARK(isNatList(X)) -> ACTIVE(isNatList(X)) ACTIVE(U71(tt, L, N)) -> MARK(U72(isNat(N), L)) MARK(U72(X1, X2)) -> ACTIVE(U72(mark(X1), X2)) ACTIVE(U72(tt, L)) -> MARK(s(length(L))) MARK(s(X)) -> MARK(X) MARK(U71(X1, X2, X3)) -> ACTIVE(U71(mark(X1), X2, X3)) ACTIVE(length(cons(N, L))) -> MARK(U71(isNatList(L), L, N)) MARK(length(X)) -> ACTIVE(length(mark(X))) The TRS R consists of the following rules: mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) active(zeros) -> mark(cons(0, zeros)) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) mark(U42(X)) -> active(U42(mark(X))) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) mark(U52(X)) -> active(U52(mark(X))) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) mark(U62(X)) -> active(U62(mark(X))) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) active(U72(tt, L)) -> mark(s(length(L))) mark(s(X)) -> active(s(mark(X))) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) mark(U11(X)) -> active(U11(mark(X))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) mark(U21(X)) -> active(U21(mark(X))) active(isNatIList(V)) -> mark(U31(isNatList(V))) mark(U31(X)) -> active(U31(mark(X))) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) active(take(0, IL)) -> mark(U81(isNatIList(IL))) mark(U81(X)) -> active(U81(mark(X))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(0) -> active(0) mark(tt) -> active(tt) mark(isNatIList(X)) -> active(isNatIList(X)) mark(isNatList(X)) -> active(isNatList(X)) mark(isNat(X)) -> active(isNat(X)) mark(length(X)) -> active(length(mark(X))) mark(nil) -> active(nil) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) take(X1, mark(X2)) -> take(X1, X2) take(mark(X1), X2) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U42(tt)) -> mark(tt) active(U52(tt)) -> mark(tt) active(U62(tt)) -> mark(tt) active(U81(tt)) -> mark(nil) active(isNat(0)) -> mark(tt) active(isNatIList(zeros)) -> mark(tt) active(isNatList(nil)) -> mark(tt) length(active(X)) -> length(X) length(mark(X)) -> length(X) cons(X1, mark(X2)) -> cons(X1, X2) cons(mark(X1), X2) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U42(active(X)) -> U42(X) U42(mark(X)) -> U42(X) U52(active(X)) -> U52(X) U52(mark(X)) -> U52(X) U62(active(X)) -> U62(X) U62(mark(X)) -> U62(X) U72(X1, mark(X2)) -> U72(X1, X2) U72(mark(X1), X2) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) s(active(X)) -> s(X) s(mark(X)) -> s(X) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) U11(active(X)) -> U11(X) U11(mark(X)) -> U11(X) U21(active(X)) -> U21(X) U21(mark(X)) -> U21(X) U31(active(X)) -> U31(X) U31(mark(X)) -> U31(X) U41(X1, mark(X2)) -> U41(X1, X2) U41(mark(X1), X2) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(mark(X1), X2) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(mark(X1), X2) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U81(active(X)) -> U81(X) U81(mark(X)) -> U81(X) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (212) DependencyGraphProof (EQUIVALENT) The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 1 SCC with 1 less node. ---------------------------------------- (213) Obligation: Q DP problem: The TRS P consists of the following rules: MARK(U42(X)) -> MARK(X) MARK(U41(X1, X2)) -> ACTIVE(U41(mark(X1), X2)) ACTIVE(U41(tt, V2)) -> MARK(U42(isNatIList(V2))) ACTIVE(U51(tt, V2)) -> MARK(U52(isNatList(V2))) MARK(U52(X)) -> MARK(X) MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) ACTIVE(isNatIList(cons(V1, V2))) -> MARK(U41(isNat(V1), V2)) MARK(U51(X1, X2)) -> ACTIVE(U51(mark(X1), X2)) ACTIVE(U71(tt, L, N)) -> MARK(U72(isNat(N), L)) MARK(U72(X1, X2)) -> ACTIVE(U72(mark(X1), X2)) ACTIVE(U72(tt, L)) -> MARK(s(length(L))) MARK(s(X)) -> MARK(X) MARK(U71(X1, X2, X3)) -> ACTIVE(U71(mark(X1), X2, X3)) ACTIVE(length(cons(N, L))) -> MARK(U71(isNatList(L), L, N)) MARK(length(X)) -> ACTIVE(length(mark(X))) The TRS R consists of the following rules: mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) active(zeros) -> mark(cons(0, zeros)) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) mark(U42(X)) -> active(U42(mark(X))) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) mark(U52(X)) -> active(U52(mark(X))) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) mark(U62(X)) -> active(U62(mark(X))) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) active(U72(tt, L)) -> mark(s(length(L))) mark(s(X)) -> active(s(mark(X))) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) mark(U11(X)) -> active(U11(mark(X))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) mark(U21(X)) -> active(U21(mark(X))) active(isNatIList(V)) -> mark(U31(isNatList(V))) mark(U31(X)) -> active(U31(mark(X))) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) active(take(0, IL)) -> mark(U81(isNatIList(IL))) mark(U81(X)) -> active(U81(mark(X))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(0) -> active(0) mark(tt) -> active(tt) mark(isNatIList(X)) -> active(isNatIList(X)) mark(isNatList(X)) -> active(isNatList(X)) mark(isNat(X)) -> active(isNat(X)) mark(length(X)) -> active(length(mark(X))) mark(nil) -> active(nil) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) take(X1, mark(X2)) -> take(X1, X2) take(mark(X1), X2) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U42(tt)) -> mark(tt) active(U52(tt)) -> mark(tt) active(U62(tt)) -> mark(tt) active(U81(tt)) -> mark(nil) active(isNat(0)) -> mark(tt) active(isNatIList(zeros)) -> mark(tt) active(isNatList(nil)) -> mark(tt) length(active(X)) -> length(X) length(mark(X)) -> length(X) cons(X1, mark(X2)) -> cons(X1, X2) cons(mark(X1), X2) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U42(active(X)) -> U42(X) U42(mark(X)) -> U42(X) U52(active(X)) -> U52(X) U52(mark(X)) -> U52(X) U62(active(X)) -> U62(X) U62(mark(X)) -> U62(X) U72(X1, mark(X2)) -> U72(X1, X2) U72(mark(X1), X2) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) s(active(X)) -> s(X) s(mark(X)) -> s(X) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) U11(active(X)) -> U11(X) U11(mark(X)) -> U11(X) U21(active(X)) -> U21(X) U21(mark(X)) -> U21(X) U31(active(X)) -> U31(X) U31(mark(X)) -> U31(X) U41(X1, mark(X2)) -> U41(X1, X2) U41(mark(X1), X2) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(mark(X1), X2) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(mark(X1), X2) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U81(active(X)) -> U81(X) U81(mark(X)) -> U81(X) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (214) QDPOrderProof (EQUIVALENT) We use the reduction pair processor [LPAR04,JAR06]. The following pairs can be oriented strictly and are deleted. MARK(U51(X1, X2)) -> ACTIVE(U51(mark(X1), X2)) The remaining pairs can at least be oriented weakly. Used ordering: Polynomial Order [NEGPOLO,POLO] with Interpretation: POL( ACTIVE_1(x_1) ) = max{0, -2} POL( U41_2(x_1, x_2) ) = 1 POL( U51_2(x_1, x_2) ) = 2x_2 + 2 POL( U71_3(x_1, ..., x_3) ) = max{0, -2} POL( U72_2(x_1, x_2) ) = 1 POL( length_1(x_1) ) = 0 POL( mark_1(x_1) ) = 2 POL( zeros ) = 0 POL( active_1(x_1) ) = max{0, -2} POL( cons_2(x_1, x_2) ) = max{0, -2} POL( 0 ) = 0 POL( tt ) = 2 POL( U42_1(x_1) ) = 2x_1 + 1 POL( isNatIList_1(x_1) ) = 0 POL( U52_1(x_1) ) = x_1 + 1 POL( isNatList_1(x_1) ) = 0 POL( U61_2(x_1, x_2) ) = max{0, 2x_1 - 2} POL( U62_1(x_1) ) = 2 POL( isNat_1(x_1) ) = 0 POL( s_1(x_1) ) = 2x_1 + 1 POL( U91_4(x_1, ..., x_4) ) = x_2 + x_3 + x_4 + 2 POL( U92_4(x_1, ..., x_4) ) = 2x_2 + 2x_3 + x_4 + 2 POL( U93_4(x_1, ..., x_4) ) = 2 POL( take_2(x_1, x_2) ) = max{0, -2} POL( U11_1(x_1) ) = max{0, -2} POL( U21_1(x_1) ) = 2 POL( U31_1(x_1) ) = 0 POL( U81_1(x_1) ) = max{0, -2} POL( nil ) = 0 POL( MARK_1(x_1) ) = max{0, 2x_1 - 2} The following usable rules [FROCOS05] with respect to the argument filtering of the ordering [JAR06] were oriented: none ---------------------------------------- (215) Obligation: Q DP problem: The TRS P consists of the following rules: MARK(U42(X)) -> MARK(X) MARK(U41(X1, X2)) -> ACTIVE(U41(mark(X1), X2)) ACTIVE(U41(tt, V2)) -> MARK(U42(isNatIList(V2))) ACTIVE(U51(tt, V2)) -> MARK(U52(isNatList(V2))) MARK(U52(X)) -> MARK(X) MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) ACTIVE(isNatIList(cons(V1, V2))) -> MARK(U41(isNat(V1), V2)) ACTIVE(U71(tt, L, N)) -> MARK(U72(isNat(N), L)) MARK(U72(X1, X2)) -> ACTIVE(U72(mark(X1), X2)) ACTIVE(U72(tt, L)) -> MARK(s(length(L))) MARK(s(X)) -> MARK(X) MARK(U71(X1, X2, X3)) -> ACTIVE(U71(mark(X1), X2, X3)) ACTIVE(length(cons(N, L))) -> MARK(U71(isNatList(L), L, N)) MARK(length(X)) -> ACTIVE(length(mark(X))) The TRS R consists of the following rules: mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) active(zeros) -> mark(cons(0, zeros)) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) mark(U42(X)) -> active(U42(mark(X))) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) mark(U52(X)) -> active(U52(mark(X))) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) mark(U62(X)) -> active(U62(mark(X))) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) active(U72(tt, L)) -> mark(s(length(L))) mark(s(X)) -> active(s(mark(X))) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) mark(U11(X)) -> active(U11(mark(X))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) mark(U21(X)) -> active(U21(mark(X))) active(isNatIList(V)) -> mark(U31(isNatList(V))) mark(U31(X)) -> active(U31(mark(X))) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) active(take(0, IL)) -> mark(U81(isNatIList(IL))) mark(U81(X)) -> active(U81(mark(X))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(0) -> active(0) mark(tt) -> active(tt) mark(isNatIList(X)) -> active(isNatIList(X)) mark(isNatList(X)) -> active(isNatList(X)) mark(isNat(X)) -> active(isNat(X)) mark(length(X)) -> active(length(mark(X))) mark(nil) -> active(nil) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) take(X1, mark(X2)) -> take(X1, X2) take(mark(X1), X2) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U42(tt)) -> mark(tt) active(U52(tt)) -> mark(tt) active(U62(tt)) -> mark(tt) active(U81(tt)) -> mark(nil) active(isNat(0)) -> mark(tt) active(isNatIList(zeros)) -> mark(tt) active(isNatList(nil)) -> mark(tt) length(active(X)) -> length(X) length(mark(X)) -> length(X) cons(X1, mark(X2)) -> cons(X1, X2) cons(mark(X1), X2) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U42(active(X)) -> U42(X) U42(mark(X)) -> U42(X) U52(active(X)) -> U52(X) U52(mark(X)) -> U52(X) U62(active(X)) -> U62(X) U62(mark(X)) -> U62(X) U72(X1, mark(X2)) -> U72(X1, X2) U72(mark(X1), X2) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) s(active(X)) -> s(X) s(mark(X)) -> s(X) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) U11(active(X)) -> U11(X) U11(mark(X)) -> U11(X) U21(active(X)) -> U21(X) U21(mark(X)) -> U21(X) U31(active(X)) -> U31(X) U31(mark(X)) -> U31(X) U41(X1, mark(X2)) -> U41(X1, X2) U41(mark(X1), X2) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(mark(X1), X2) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(mark(X1), X2) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U81(active(X)) -> U81(X) U81(mark(X)) -> U81(X) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (216) QDPOrderProof (EQUIVALENT) We use the reduction pair processor [LPAR04,JAR06]. The following pairs can be oriented strictly and are deleted. ACTIVE(U51(tt, V2)) -> MARK(U52(isNatList(V2))) The remaining pairs can at least be oriented weakly. Used ordering: Polynomial Order [NEGPOLO,POLO] with Interpretation: POL( ACTIVE_1(x_1) ) = max{0, x_1 - 2} POL( U41_2(x_1, x_2) ) = 2 POL( U71_3(x_1, ..., x_3) ) = 2 POL( U72_2(x_1, x_2) ) = max{0, -2} POL( length_1(x_1) ) = 2 POL( mark_1(x_1) ) = max{0, -2} POL( zeros ) = 0 POL( active_1(x_1) ) = max{0, x_1 - 1} POL( cons_2(x_1, x_2) ) = max{0, x_2 - 1} POL( 0 ) = 0 POL( tt ) = 2 POL( U42_1(x_1) ) = max{0, -2} POL( isNatIList_1(x_1) ) = 2 POL( U51_2(x_1, x_2) ) = 2x_1 + x_2 + 1 POL( U52_1(x_1) ) = 2x_1 + 2 POL( isNatList_1(x_1) ) = 2 POL( U61_2(x_1, x_2) ) = 2x_1 + x_2 + 2 POL( U62_1(x_1) ) = 2 POL( isNat_1(x_1) ) = 0 POL( s_1(x_1) ) = max{0, -2} POL( U91_4(x_1, ..., x_4) ) = max{0, x_2 + x_4 - 2} POL( U92_4(x_1, ..., x_4) ) = max{0, 2x_2 - 2} POL( U93_4(x_1, ..., x_4) ) = max{0, x_2 + 2x_3 - 2} POL( take_2(x_1, x_2) ) = max{0, x_2 - 2} POL( U11_1(x_1) ) = 2 POL( U21_1(x_1) ) = max{0, 2x_1 - 2} POL( U31_1(x_1) ) = 2 POL( U81_1(x_1) ) = x_1 + 2 POL( nil ) = 0 POL( MARK_1(x_1) ) = max{0, -2} The following usable rules [FROCOS05] with respect to the argument filtering of the ordering [JAR06] were oriented: U41(mark(X1), X2) -> U41(X1, X2) U41(X1, mark(X2)) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U72(mark(X1), X2) -> U72(X1, X2) U72(X1, mark(X2)) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) length(mark(X)) -> length(X) length(active(X)) -> length(X) ---------------------------------------- (217) Obligation: Q DP problem: The TRS P consists of the following rules: MARK(U42(X)) -> MARK(X) MARK(U41(X1, X2)) -> ACTIVE(U41(mark(X1), X2)) ACTIVE(U41(tt, V2)) -> MARK(U42(isNatIList(V2))) MARK(U52(X)) -> MARK(X) MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) ACTIVE(isNatIList(cons(V1, V2))) -> MARK(U41(isNat(V1), V2)) ACTIVE(U71(tt, L, N)) -> MARK(U72(isNat(N), L)) MARK(U72(X1, X2)) -> ACTIVE(U72(mark(X1), X2)) ACTIVE(U72(tt, L)) -> MARK(s(length(L))) MARK(s(X)) -> MARK(X) MARK(U71(X1, X2, X3)) -> ACTIVE(U71(mark(X1), X2, X3)) ACTIVE(length(cons(N, L))) -> MARK(U71(isNatList(L), L, N)) MARK(length(X)) -> ACTIVE(length(mark(X))) The TRS R consists of the following rules: mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) active(zeros) -> mark(cons(0, zeros)) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) mark(U42(X)) -> active(U42(mark(X))) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) mark(U52(X)) -> active(U52(mark(X))) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) mark(U62(X)) -> active(U62(mark(X))) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) active(U72(tt, L)) -> mark(s(length(L))) mark(s(X)) -> active(s(mark(X))) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) mark(U11(X)) -> active(U11(mark(X))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) mark(U21(X)) -> active(U21(mark(X))) active(isNatIList(V)) -> mark(U31(isNatList(V))) mark(U31(X)) -> active(U31(mark(X))) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) active(take(0, IL)) -> mark(U81(isNatIList(IL))) mark(U81(X)) -> active(U81(mark(X))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(0) -> active(0) mark(tt) -> active(tt) mark(isNatIList(X)) -> active(isNatIList(X)) mark(isNatList(X)) -> active(isNatList(X)) mark(isNat(X)) -> active(isNat(X)) mark(length(X)) -> active(length(mark(X))) mark(nil) -> active(nil) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) take(X1, mark(X2)) -> take(X1, X2) take(mark(X1), X2) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U42(tt)) -> mark(tt) active(U52(tt)) -> mark(tt) active(U62(tt)) -> mark(tt) active(U81(tt)) -> mark(nil) active(isNat(0)) -> mark(tt) active(isNatIList(zeros)) -> mark(tt) active(isNatList(nil)) -> mark(tt) length(active(X)) -> length(X) length(mark(X)) -> length(X) cons(X1, mark(X2)) -> cons(X1, X2) cons(mark(X1), X2) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U42(active(X)) -> U42(X) U42(mark(X)) -> U42(X) U52(active(X)) -> U52(X) U52(mark(X)) -> U52(X) U62(active(X)) -> U62(X) U62(mark(X)) -> U62(X) U72(X1, mark(X2)) -> U72(X1, X2) U72(mark(X1), X2) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) s(active(X)) -> s(X) s(mark(X)) -> s(X) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) U11(active(X)) -> U11(X) U11(mark(X)) -> U11(X) U21(active(X)) -> U21(X) U21(mark(X)) -> U21(X) U31(active(X)) -> U31(X) U31(mark(X)) -> U31(X) U41(X1, mark(X2)) -> U41(X1, X2) U41(mark(X1), X2) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(mark(X1), X2) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(mark(X1), X2) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U81(active(X)) -> U81(X) U81(mark(X)) -> U81(X) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (218) QDPQMonotonicMRRProof (EQUIVALENT) 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. Strictly oriented rules of the TRS R: active(U81(tt)) -> mark(nil) Used ordering: Polynomial interpretation [POLO]: POL(0) = 0 POL(ACTIVE(x_1)) = 2*x_1 POL(MARK(x_1)) = 2*x_1 POL(U11(x_1)) = 2*x_1 POL(U21(x_1)) = x_1 POL(U31(x_1)) = 2*x_1 POL(U41(x_1, x_2)) = 2*x_1 POL(U42(x_1)) = 2*x_1 POL(U51(x_1, x_2)) = 2*x_1 POL(U52(x_1)) = x_1 POL(U61(x_1, x_2)) = x_1 POL(U62(x_1)) = x_1 POL(U71(x_1, x_2, x_3)) = 2*x_1 + x_2 POL(U72(x_1, x_2)) = 2*x_1 + x_2 POL(U81(x_1)) = 1 + 2*x_1 POL(U91(x_1, x_2, x_3, x_4)) = 1 + 2*x_1 + x_2 + 2*x_3 + x_4 POL(U92(x_1, x_2, x_3, x_4)) = 1 + x_1 + x_2 + 2*x_3 + x_4 POL(U93(x_1, x_2, x_3, x_4)) = 1 + 2*x_1 + x_2 + 2*x_3 + x_4 POL(active(x_1)) = x_1 POL(cons(x_1, x_2)) = x_1 + x_2 POL(isNat(x_1)) = 0 POL(isNatIList(x_1)) = 0 POL(isNatList(x_1)) = 0 POL(length(x_1)) = x_1 POL(mark(x_1)) = x_1 POL(nil) = 0 POL(s(x_1)) = x_1 POL(take(x_1, x_2)) = 1 + 2*x_1 + x_2 POL(tt) = 0 POL(zeros) = 0 ---------------------------------------- (219) Obligation: Q DP problem: The TRS P consists of the following rules: MARK(U42(X)) -> MARK(X) MARK(U41(X1, X2)) -> ACTIVE(U41(mark(X1), X2)) ACTIVE(U41(tt, V2)) -> MARK(U42(isNatIList(V2))) MARK(U52(X)) -> MARK(X) MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) ACTIVE(isNatIList(cons(V1, V2))) -> MARK(U41(isNat(V1), V2)) ACTIVE(U71(tt, L, N)) -> MARK(U72(isNat(N), L)) MARK(U72(X1, X2)) -> ACTIVE(U72(mark(X1), X2)) ACTIVE(U72(tt, L)) -> MARK(s(length(L))) MARK(s(X)) -> MARK(X) MARK(U71(X1, X2, X3)) -> ACTIVE(U71(mark(X1), X2, X3)) ACTIVE(length(cons(N, L))) -> MARK(U71(isNatList(L), L, N)) MARK(length(X)) -> ACTIVE(length(mark(X))) The TRS R consists of the following rules: mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) active(zeros) -> mark(cons(0, zeros)) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) mark(U42(X)) -> active(U42(mark(X))) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) mark(U52(X)) -> active(U52(mark(X))) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) mark(U62(X)) -> active(U62(mark(X))) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) active(U72(tt, L)) -> mark(s(length(L))) mark(s(X)) -> active(s(mark(X))) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) mark(U11(X)) -> active(U11(mark(X))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) mark(U21(X)) -> active(U21(mark(X))) active(isNatIList(V)) -> mark(U31(isNatList(V))) mark(U31(X)) -> active(U31(mark(X))) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) active(take(0, IL)) -> mark(U81(isNatIList(IL))) mark(U81(X)) -> active(U81(mark(X))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(0) -> active(0) mark(tt) -> active(tt) mark(isNatIList(X)) -> active(isNatIList(X)) mark(isNatList(X)) -> active(isNatList(X)) mark(isNat(X)) -> active(isNat(X)) mark(length(X)) -> active(length(mark(X))) mark(nil) -> active(nil) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) take(X1, mark(X2)) -> take(X1, X2) take(mark(X1), X2) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U42(tt)) -> mark(tt) active(U52(tt)) -> mark(tt) active(U62(tt)) -> mark(tt) active(isNat(0)) -> mark(tt) active(isNatIList(zeros)) -> mark(tt) active(isNatList(nil)) -> mark(tt) length(active(X)) -> length(X) length(mark(X)) -> length(X) cons(X1, mark(X2)) -> cons(X1, X2) cons(mark(X1), X2) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U42(active(X)) -> U42(X) U42(mark(X)) -> U42(X) U52(active(X)) -> U52(X) U52(mark(X)) -> U52(X) U62(active(X)) -> U62(X) U62(mark(X)) -> U62(X) U72(X1, mark(X2)) -> U72(X1, X2) U72(mark(X1), X2) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) s(active(X)) -> s(X) s(mark(X)) -> s(X) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) U11(active(X)) -> U11(X) U11(mark(X)) -> U11(X) U21(active(X)) -> U21(X) U21(mark(X)) -> U21(X) U31(active(X)) -> U31(X) U31(mark(X)) -> U31(X) U41(X1, mark(X2)) -> U41(X1, X2) U41(mark(X1), X2) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(mark(X1), X2) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(mark(X1), X2) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U81(active(X)) -> U81(X) U81(mark(X)) -> U81(X) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (220) QDPQMonotonicMRRProof (EQUIVALENT) 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. Strictly oriented rules of the TRS R: active(take(0, IL)) -> mark(U81(isNatIList(IL))) Used ordering: Polynomial interpretation [POLO]: POL(0) = 0 POL(ACTIVE(x_1)) = 2*x_1 POL(MARK(x_1)) = 2*x_1 POL(U11(x_1)) = x_1 POL(U21(x_1)) = 2*x_1 POL(U31(x_1)) = 2*x_1 POL(U41(x_1, x_2)) = x_1 POL(U42(x_1)) = 2*x_1 POL(U51(x_1, x_2)) = x_1 POL(U52(x_1)) = 2*x_1 POL(U61(x_1, x_2)) = 2*x_1 POL(U62(x_1)) = 2*x_1 POL(U71(x_1, x_2, x_3)) = 2*x_1 + 2*x_2 POL(U72(x_1, x_2)) = x_1 + 2*x_2 POL(U81(x_1)) = x_1 POL(U91(x_1, x_2, x_3, x_4)) = 2 + 2*x_1 + x_2 + x_3 + x_4 POL(U92(x_1, x_2, x_3, x_4)) = 2 + 2*x_1 + x_2 + x_3 + x_4 POL(U93(x_1, x_2, x_3, x_4)) = 2 + 2*x_1 + x_2 + x_3 + x_4 POL(active(x_1)) = x_1 POL(cons(x_1, x_2)) = x_1 + x_2 POL(isNat(x_1)) = 0 POL(isNatIList(x_1)) = 0 POL(isNatList(x_1)) = 0 POL(length(x_1)) = 2*x_1 POL(mark(x_1)) = x_1 POL(nil) = 0 POL(s(x_1)) = x_1 POL(take(x_1, x_2)) = 2 + x_1 + x_2 POL(tt) = 0 POL(zeros) = 0 ---------------------------------------- (221) Obligation: Q DP problem: The TRS P consists of the following rules: MARK(U42(X)) -> MARK(X) MARK(U41(X1, X2)) -> ACTIVE(U41(mark(X1), X2)) ACTIVE(U41(tt, V2)) -> MARK(U42(isNatIList(V2))) MARK(U52(X)) -> MARK(X) MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) ACTIVE(isNatIList(cons(V1, V2))) -> MARK(U41(isNat(V1), V2)) ACTIVE(U71(tt, L, N)) -> MARK(U72(isNat(N), L)) MARK(U72(X1, X2)) -> ACTIVE(U72(mark(X1), X2)) ACTIVE(U72(tt, L)) -> MARK(s(length(L))) MARK(s(X)) -> MARK(X) MARK(U71(X1, X2, X3)) -> ACTIVE(U71(mark(X1), X2, X3)) ACTIVE(length(cons(N, L))) -> MARK(U71(isNatList(L), L, N)) MARK(length(X)) -> ACTIVE(length(mark(X))) The TRS R consists of the following rules: mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) active(zeros) -> mark(cons(0, zeros)) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) mark(U42(X)) -> active(U42(mark(X))) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) mark(U52(X)) -> active(U52(mark(X))) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) mark(U62(X)) -> active(U62(mark(X))) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) active(U72(tt, L)) -> mark(s(length(L))) mark(s(X)) -> active(s(mark(X))) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) mark(U11(X)) -> active(U11(mark(X))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) mark(U21(X)) -> active(U21(mark(X))) active(isNatIList(V)) -> mark(U31(isNatList(V))) mark(U31(X)) -> active(U31(mark(X))) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) mark(U81(X)) -> active(U81(mark(X))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(0) -> active(0) mark(tt) -> active(tt) mark(isNatIList(X)) -> active(isNatIList(X)) mark(isNatList(X)) -> active(isNatList(X)) mark(isNat(X)) -> active(isNat(X)) mark(length(X)) -> active(length(mark(X))) mark(nil) -> active(nil) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) take(X1, mark(X2)) -> take(X1, X2) take(mark(X1), X2) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U42(tt)) -> mark(tt) active(U52(tt)) -> mark(tt) active(U62(tt)) -> mark(tt) active(isNat(0)) -> mark(tt) active(isNatIList(zeros)) -> mark(tt) active(isNatList(nil)) -> mark(tt) length(active(X)) -> length(X) length(mark(X)) -> length(X) cons(X1, mark(X2)) -> cons(X1, X2) cons(mark(X1), X2) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U42(active(X)) -> U42(X) U42(mark(X)) -> U42(X) U52(active(X)) -> U52(X) U52(mark(X)) -> U52(X) U62(active(X)) -> U62(X) U62(mark(X)) -> U62(X) U72(X1, mark(X2)) -> U72(X1, X2) U72(mark(X1), X2) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) s(active(X)) -> s(X) s(mark(X)) -> s(X) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) U11(active(X)) -> U11(X) U11(mark(X)) -> U11(X) U21(active(X)) -> U21(X) U21(mark(X)) -> U21(X) U31(active(X)) -> U31(X) U31(mark(X)) -> U31(X) U41(X1, mark(X2)) -> U41(X1, X2) U41(mark(X1), X2) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(mark(X1), X2) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(mark(X1), X2) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U81(active(X)) -> U81(X) U81(mark(X)) -> U81(X) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (222) QDPOrderProof (EQUIVALENT) We use the reduction pair processor [LPAR04,JAR06]. The following pairs can be oriented strictly and are deleted. MARK(U52(X)) -> MARK(X) The remaining pairs can at least be oriented weakly. Used ordering: Polynomial Order [NEGPOLO,POLO] with Interpretation: POL( ACTIVE_1(x_1) ) = max{0, -2} POL( U41_2(x_1, x_2) ) = max{0, -2} POL( U71_3(x_1, ..., x_3) ) = max{0, -2} POL( U72_2(x_1, x_2) ) = 2x_1 + 1 POL( length_1(x_1) ) = max{0, -2} POL( mark_1(x_1) ) = max{0, -2} POL( zeros ) = 0 POL( active_1(x_1) ) = 2 POL( cons_2(x_1, x_2) ) = max{0, x_1 - 2} POL( 0 ) = 0 POL( tt ) = 0 POL( U42_1(x_1) ) = 2x_1 + 1 POL( isNatIList_1(x_1) ) = 0 POL( U51_2(x_1, x_2) ) = x_2 + 2 POL( U52_1(x_1) ) = x_1 + 2 POL( isNatList_1(x_1) ) = 0 POL( U61_2(x_1, x_2) ) = x_1 + x_2 POL( U62_1(x_1) ) = max{0, 2x_1 - 2} POL( isNat_1(x_1) ) = 0 POL( s_1(x_1) ) = 2x_1 + 1 POL( U91_4(x_1, ..., x_4) ) = max{0, x_2 + 2x_4 - 2} POL( U92_4(x_1, ..., x_4) ) = max{0, x_1 + 2x_2 + x_4 - 2} POL( U93_4(x_1, ..., x_4) ) = max{0, 2x_3 - 2} POL( take_2(x_1, x_2) ) = 0 POL( U11_1(x_1) ) = 2 POL( U21_1(x_1) ) = 0 POL( U31_1(x_1) ) = max{0, x_1 - 2} POL( U81_1(x_1) ) = x_1 + 2 POL( nil ) = 0 POL( MARK_1(x_1) ) = max{0, x_1 - 1} The following usable rules [FROCOS05] with respect to the argument filtering of the ordering [JAR06] were oriented: none ---------------------------------------- (223) Obligation: Q DP problem: The TRS P consists of the following rules: MARK(U42(X)) -> MARK(X) MARK(U41(X1, X2)) -> ACTIVE(U41(mark(X1), X2)) ACTIVE(U41(tt, V2)) -> MARK(U42(isNatIList(V2))) MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) ACTIVE(isNatIList(cons(V1, V2))) -> MARK(U41(isNat(V1), V2)) ACTIVE(U71(tt, L, N)) -> MARK(U72(isNat(N), L)) MARK(U72(X1, X2)) -> ACTIVE(U72(mark(X1), X2)) ACTIVE(U72(tt, L)) -> MARK(s(length(L))) MARK(s(X)) -> MARK(X) MARK(U71(X1, X2, X3)) -> ACTIVE(U71(mark(X1), X2, X3)) ACTIVE(length(cons(N, L))) -> MARK(U71(isNatList(L), L, N)) MARK(length(X)) -> ACTIVE(length(mark(X))) The TRS R consists of the following rules: mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) active(zeros) -> mark(cons(0, zeros)) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) mark(U42(X)) -> active(U42(mark(X))) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) mark(U52(X)) -> active(U52(mark(X))) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) mark(U62(X)) -> active(U62(mark(X))) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) active(U72(tt, L)) -> mark(s(length(L))) mark(s(X)) -> active(s(mark(X))) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) mark(U11(X)) -> active(U11(mark(X))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) mark(U21(X)) -> active(U21(mark(X))) active(isNatIList(V)) -> mark(U31(isNatList(V))) mark(U31(X)) -> active(U31(mark(X))) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) mark(U81(X)) -> active(U81(mark(X))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(0) -> active(0) mark(tt) -> active(tt) mark(isNatIList(X)) -> active(isNatIList(X)) mark(isNatList(X)) -> active(isNatList(X)) mark(isNat(X)) -> active(isNat(X)) mark(length(X)) -> active(length(mark(X))) mark(nil) -> active(nil) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) take(X1, mark(X2)) -> take(X1, X2) take(mark(X1), X2) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U42(tt)) -> mark(tt) active(U52(tt)) -> mark(tt) active(U62(tt)) -> mark(tt) active(isNat(0)) -> mark(tt) active(isNatIList(zeros)) -> mark(tt) active(isNatList(nil)) -> mark(tt) length(active(X)) -> length(X) length(mark(X)) -> length(X) cons(X1, mark(X2)) -> cons(X1, X2) cons(mark(X1), X2) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U42(active(X)) -> U42(X) U42(mark(X)) -> U42(X) U52(active(X)) -> U52(X) U52(mark(X)) -> U52(X) U62(active(X)) -> U62(X) U62(mark(X)) -> U62(X) U72(X1, mark(X2)) -> U72(X1, X2) U72(mark(X1), X2) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) s(active(X)) -> s(X) s(mark(X)) -> s(X) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) U11(active(X)) -> U11(X) U11(mark(X)) -> U11(X) U21(active(X)) -> U21(X) U21(mark(X)) -> U21(X) U31(active(X)) -> U31(X) U31(mark(X)) -> U31(X) U41(X1, mark(X2)) -> U41(X1, X2) U41(mark(X1), X2) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(mark(X1), X2) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(mark(X1), X2) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U81(active(X)) -> U81(X) U81(mark(X)) -> U81(X) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (224) QDPOrderProof (EQUIVALENT) We use the reduction pair processor [LPAR04,JAR06]. The following pairs can be oriented strictly and are deleted. ACTIVE(isNatIList(cons(V1, V2))) -> MARK(U41(isNat(V1), V2)) The remaining pairs can at least be oriented weakly. Used ordering: Polynomial Order [NEGPOLO,POLO] with Interpretation: POL( ACTIVE_1(x_1) ) = max{0, 2x_1 - 2} POL( U41_2(x_1, x_2) ) = x_2 + 2 POL( U71_3(x_1, ..., x_3) ) = 1 POL( U72_2(x_1, x_2) ) = 1 POL( length_1(x_1) ) = max{0, -2} POL( mark_1(x_1) ) = 2x_1 POL( zeros ) = 0 POL( active_1(x_1) ) = 2x_1 POL( cons_2(x_1, x_2) ) = 2x_2 + 2 POL( 0 ) = 0 POL( tt ) = 0 POL( U42_1(x_1) ) = x_1 + 1 POL( isNatIList_1(x_1) ) = x_1 + 1 POL( U51_2(x_1, x_2) ) = x_1 + 2 POL( U52_1(x_1) ) = max{0, 2x_1 - 1} POL( isNatList_1(x_1) ) = 2 POL( U61_2(x_1, x_2) ) = 2 POL( U62_1(x_1) ) = 2 POL( isNat_1(x_1) ) = 0 POL( s_1(x_1) ) = 2x_1 + 1 POL( U91_4(x_1, ..., x_4) ) = max{0, x_2 + x_3 + x_4 - 2} POL( U92_4(x_1, ..., x_4) ) = max{0, 2x_3 - 2} POL( U93_4(x_1, ..., x_4) ) = max{0, x_4 - 2} POL( take_2(x_1, x_2) ) = max{0, x_2 - 2} POL( U11_1(x_1) ) = x_1 + 2 POL( U21_1(x_1) ) = x_1 + 1 POL( U31_1(x_1) ) = max{0, x_1 - 1} POL( U81_1(x_1) ) = 2 POL( nil ) = 0 POL( MARK_1(x_1) ) = max{0, 2x_1 - 2} The following usable rules [FROCOS05] with respect to the argument filtering of the ordering [JAR06] were oriented: U41(mark(X1), X2) -> U41(X1, X2) U41(X1, mark(X2)) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U72(mark(X1), X2) -> U72(X1, X2) U72(X1, mark(X2)) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) length(mark(X)) -> length(X) length(active(X)) -> length(X) ---------------------------------------- (225) Obligation: Q DP problem: The TRS P consists of the following rules: MARK(U42(X)) -> MARK(X) MARK(U41(X1, X2)) -> ACTIVE(U41(mark(X1), X2)) ACTIVE(U41(tt, V2)) -> MARK(U42(isNatIList(V2))) MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) ACTIVE(U71(tt, L, N)) -> MARK(U72(isNat(N), L)) MARK(U72(X1, X2)) -> ACTIVE(U72(mark(X1), X2)) ACTIVE(U72(tt, L)) -> MARK(s(length(L))) MARK(s(X)) -> MARK(X) MARK(U71(X1, X2, X3)) -> ACTIVE(U71(mark(X1), X2, X3)) ACTIVE(length(cons(N, L))) -> MARK(U71(isNatList(L), L, N)) MARK(length(X)) -> ACTIVE(length(mark(X))) The TRS R consists of the following rules: mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) active(zeros) -> mark(cons(0, zeros)) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) mark(U42(X)) -> active(U42(mark(X))) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) mark(U52(X)) -> active(U52(mark(X))) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) mark(U62(X)) -> active(U62(mark(X))) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) active(U72(tt, L)) -> mark(s(length(L))) mark(s(X)) -> active(s(mark(X))) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) mark(U11(X)) -> active(U11(mark(X))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) mark(U21(X)) -> active(U21(mark(X))) active(isNatIList(V)) -> mark(U31(isNatList(V))) mark(U31(X)) -> active(U31(mark(X))) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) mark(U81(X)) -> active(U81(mark(X))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(0) -> active(0) mark(tt) -> active(tt) mark(isNatIList(X)) -> active(isNatIList(X)) mark(isNatList(X)) -> active(isNatList(X)) mark(isNat(X)) -> active(isNat(X)) mark(length(X)) -> active(length(mark(X))) mark(nil) -> active(nil) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) take(X1, mark(X2)) -> take(X1, X2) take(mark(X1), X2) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U42(tt)) -> mark(tt) active(U52(tt)) -> mark(tt) active(U62(tt)) -> mark(tt) active(isNat(0)) -> mark(tt) active(isNatIList(zeros)) -> mark(tt) active(isNatList(nil)) -> mark(tt) length(active(X)) -> length(X) length(mark(X)) -> length(X) cons(X1, mark(X2)) -> cons(X1, X2) cons(mark(X1), X2) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U42(active(X)) -> U42(X) U42(mark(X)) -> U42(X) U52(active(X)) -> U52(X) U52(mark(X)) -> U52(X) U62(active(X)) -> U62(X) U62(mark(X)) -> U62(X) U72(X1, mark(X2)) -> U72(X1, X2) U72(mark(X1), X2) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) s(active(X)) -> s(X) s(mark(X)) -> s(X) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) U11(active(X)) -> U11(X) U11(mark(X)) -> U11(X) U21(active(X)) -> U21(X) U21(mark(X)) -> U21(X) U31(active(X)) -> U31(X) U31(mark(X)) -> U31(X) U41(X1, mark(X2)) -> U41(X1, X2) U41(mark(X1), X2) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(mark(X1), X2) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(mark(X1), X2) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U81(active(X)) -> U81(X) U81(mark(X)) -> U81(X) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (226) DependencyGraphProof (EQUIVALENT) The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 1 SCC with 1 less node. ---------------------------------------- (227) Obligation: Q DP problem: The TRS P consists of the following rules: MARK(U41(X1, X2)) -> ACTIVE(U41(mark(X1), X2)) ACTIVE(U41(tt, V2)) -> MARK(U42(isNatIList(V2))) MARK(U42(X)) -> MARK(X) MARK(U71(X1, X2, X3)) -> ACTIVE(U71(mark(X1), X2, X3)) ACTIVE(U71(tt, L, N)) -> MARK(U72(isNat(N), L)) MARK(U72(X1, X2)) -> ACTIVE(U72(mark(X1), X2)) ACTIVE(U72(tt, L)) -> MARK(s(length(L))) MARK(s(X)) -> MARK(X) MARK(length(X)) -> ACTIVE(length(mark(X))) ACTIVE(length(cons(N, L))) -> MARK(U71(isNatList(L), L, N)) The TRS R consists of the following rules: mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) active(zeros) -> mark(cons(0, zeros)) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) mark(U42(X)) -> active(U42(mark(X))) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) mark(U52(X)) -> active(U52(mark(X))) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) mark(U62(X)) -> active(U62(mark(X))) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) active(U72(tt, L)) -> mark(s(length(L))) mark(s(X)) -> active(s(mark(X))) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) mark(U11(X)) -> active(U11(mark(X))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) mark(U21(X)) -> active(U21(mark(X))) active(isNatIList(V)) -> mark(U31(isNatList(V))) mark(U31(X)) -> active(U31(mark(X))) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) mark(U81(X)) -> active(U81(mark(X))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(0) -> active(0) mark(tt) -> active(tt) mark(isNatIList(X)) -> active(isNatIList(X)) mark(isNatList(X)) -> active(isNatList(X)) mark(isNat(X)) -> active(isNat(X)) mark(length(X)) -> active(length(mark(X))) mark(nil) -> active(nil) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) take(X1, mark(X2)) -> take(X1, X2) take(mark(X1), X2) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U42(tt)) -> mark(tt) active(U52(tt)) -> mark(tt) active(U62(tt)) -> mark(tt) active(isNat(0)) -> mark(tt) active(isNatIList(zeros)) -> mark(tt) active(isNatList(nil)) -> mark(tt) length(active(X)) -> length(X) length(mark(X)) -> length(X) cons(X1, mark(X2)) -> cons(X1, X2) cons(mark(X1), X2) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U42(active(X)) -> U42(X) U42(mark(X)) -> U42(X) U52(active(X)) -> U52(X) U52(mark(X)) -> U52(X) U62(active(X)) -> U62(X) U62(mark(X)) -> U62(X) U72(X1, mark(X2)) -> U72(X1, X2) U72(mark(X1), X2) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) s(active(X)) -> s(X) s(mark(X)) -> s(X) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) U11(active(X)) -> U11(X) U11(mark(X)) -> U11(X) U21(active(X)) -> U21(X) U21(mark(X)) -> U21(X) U31(active(X)) -> U31(X) U31(mark(X)) -> U31(X) U41(X1, mark(X2)) -> U41(X1, X2) U41(mark(X1), X2) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(mark(X1), X2) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(mark(X1), X2) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U81(active(X)) -> U81(X) U81(mark(X)) -> U81(X) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (228) QDPOrderProof (EQUIVALENT) We use the reduction pair processor [LPAR04,JAR06]. The following pairs can be oriented strictly and are deleted. MARK(U41(X1, X2)) -> ACTIVE(U41(mark(X1), X2)) The remaining pairs can at least be oriented weakly. Used ordering: Polynomial Order [NEGPOLO,POLO] with Interpretation: POL( ACTIVE_1(x_1) ) = max{0, -2} POL( U41_2(x_1, x_2) ) = 2x_1 + x_2 + 2 POL( U71_3(x_1, ..., x_3) ) = 1 POL( U72_2(x_1, x_2) ) = max{0, -2} POL( length_1(x_1) ) = 0 POL( mark_1(x_1) ) = 1 POL( zeros ) = 0 POL( active_1(x_1) ) = 1 POL( cons_2(x_1, x_2) ) = max{0, x_1 - 2} POL( 0 ) = 0 POL( tt ) = 0 POL( U42_1(x_1) ) = 2x_1 + 1 POL( isNatIList_1(x_1) ) = 0 POL( U51_2(x_1, x_2) ) = max{0, x_1 - 2} POL( U52_1(x_1) ) = 2x_1 + 1 POL( isNatList_1(x_1) ) = 0 POL( U61_2(x_1, x_2) ) = max{0, x_1 - 2} POL( U62_1(x_1) ) = max{0, -2} POL( isNat_1(x_1) ) = 2 POL( s_1(x_1) ) = x_1 + 1 POL( U91_4(x_1, ..., x_4) ) = x_1 + 2 POL( U92_4(x_1, ..., x_4) ) = max{0, x_2 - 2} POL( U93_4(x_1, ..., x_4) ) = x_3 + 2 POL( take_2(x_1, x_2) ) = max{0, x_1 - 2} POL( U11_1(x_1) ) = 1 POL( U21_1(x_1) ) = 2x_1 + 1 POL( U31_1(x_1) ) = 2 POL( U81_1(x_1) ) = max{0, -2} POL( nil ) = 0 POL( MARK_1(x_1) ) = max{0, 2x_1 - 2} The following usable rules [FROCOS05] with respect to the argument filtering of the ordering [JAR06] were oriented: none ---------------------------------------- (229) Obligation: Q DP problem: The TRS P consists of the following rules: ACTIVE(U41(tt, V2)) -> MARK(U42(isNatIList(V2))) MARK(U42(X)) -> MARK(X) MARK(U71(X1, X2, X3)) -> ACTIVE(U71(mark(X1), X2, X3)) ACTIVE(U71(tt, L, N)) -> MARK(U72(isNat(N), L)) MARK(U72(X1, X2)) -> ACTIVE(U72(mark(X1), X2)) ACTIVE(U72(tt, L)) -> MARK(s(length(L))) MARK(s(X)) -> MARK(X) MARK(length(X)) -> ACTIVE(length(mark(X))) ACTIVE(length(cons(N, L))) -> MARK(U71(isNatList(L), L, N)) The TRS R consists of the following rules: mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) active(zeros) -> mark(cons(0, zeros)) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) mark(U42(X)) -> active(U42(mark(X))) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) mark(U52(X)) -> active(U52(mark(X))) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) mark(U62(X)) -> active(U62(mark(X))) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) active(U72(tt, L)) -> mark(s(length(L))) mark(s(X)) -> active(s(mark(X))) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) mark(U11(X)) -> active(U11(mark(X))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) mark(U21(X)) -> active(U21(mark(X))) active(isNatIList(V)) -> mark(U31(isNatList(V))) mark(U31(X)) -> active(U31(mark(X))) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) mark(U81(X)) -> active(U81(mark(X))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(0) -> active(0) mark(tt) -> active(tt) mark(isNatIList(X)) -> active(isNatIList(X)) mark(isNatList(X)) -> active(isNatList(X)) mark(isNat(X)) -> active(isNat(X)) mark(length(X)) -> active(length(mark(X))) mark(nil) -> active(nil) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) take(X1, mark(X2)) -> take(X1, X2) take(mark(X1), X2) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U42(tt)) -> mark(tt) active(U52(tt)) -> mark(tt) active(U62(tt)) -> mark(tt) active(isNat(0)) -> mark(tt) active(isNatIList(zeros)) -> mark(tt) active(isNatList(nil)) -> mark(tt) length(active(X)) -> length(X) length(mark(X)) -> length(X) cons(X1, mark(X2)) -> cons(X1, X2) cons(mark(X1), X2) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U42(active(X)) -> U42(X) U42(mark(X)) -> U42(X) U52(active(X)) -> U52(X) U52(mark(X)) -> U52(X) U62(active(X)) -> U62(X) U62(mark(X)) -> U62(X) U72(X1, mark(X2)) -> U72(X1, X2) U72(mark(X1), X2) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) s(active(X)) -> s(X) s(mark(X)) -> s(X) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) U11(active(X)) -> U11(X) U11(mark(X)) -> U11(X) U21(active(X)) -> U21(X) U21(mark(X)) -> U21(X) U31(active(X)) -> U31(X) U31(mark(X)) -> U31(X) U41(X1, mark(X2)) -> U41(X1, X2) U41(mark(X1), X2) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(mark(X1), X2) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(mark(X1), X2) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U81(active(X)) -> U81(X) U81(mark(X)) -> U81(X) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (230) QDPOrderProof (EQUIVALENT) We use the reduction pair processor [LPAR04,JAR06]. The following pairs can be oriented strictly and are deleted. ACTIVE(U41(tt, V2)) -> MARK(U42(isNatIList(V2))) The remaining pairs can at least be oriented weakly. Used ordering: Polynomial Order [NEGPOLO,POLO] with Interpretation: POL( ACTIVE_1(x_1) ) = max{0, 2x_1 - 2} POL( U71_3(x_1, ..., x_3) ) = max{0, -2} POL( U72_2(x_1, x_2) ) = 1 POL( length_1(x_1) ) = 0 POL( mark_1(x_1) ) = max{0, -2} POL( zeros ) = 2 POL( active_1(x_1) ) = max{0, 2x_1 - 1} POL( cons_2(x_1, x_2) ) = max{0, 2x_1 - 2} POL( 0 ) = 2 POL( U41_2(x_1, x_2) ) = 2x_1 + 2 POL( tt ) = 2 POL( U42_1(x_1) ) = max{0, x_1 - 2} POL( isNatIList_1(x_1) ) = 2x_1 + 2 POL( U51_2(x_1, x_2) ) = 2 POL( U52_1(x_1) ) = 2x_1 + 2 POL( isNatList_1(x_1) ) = x_1 POL( U61_2(x_1, x_2) ) = max{0, x_1 - 1} POL( U62_1(x_1) ) = x_1 + 2 POL( isNat_1(x_1) ) = 2x_1 + 2 POL( s_1(x_1) ) = max{0, -2} POL( U91_4(x_1, ..., x_4) ) = 2x_3 + 2 POL( U92_4(x_1, ..., x_4) ) = 2x_1 + 2x_2 + 2x_4 + 2 POL( U93_4(x_1, ..., x_4) ) = 2x_1 + 2x_2 + 2x_3 + 2x_4 + 2 POL( take_2(x_1, x_2) ) = 2x_2 + 2 POL( U11_1(x_1) ) = x_1 + 2 POL( U21_1(x_1) ) = x_1 + 2 POL( U31_1(x_1) ) = max{0, x_1 - 2} POL( U81_1(x_1) ) = x_1 + 2 POL( nil ) = 2 POL( MARK_1(x_1) ) = max{0, -2} The following usable rules [FROCOS05] with respect to the argument filtering of the ordering [JAR06] were oriented: U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U72(mark(X1), X2) -> U72(X1, X2) U72(X1, mark(X2)) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) length(mark(X)) -> length(X) length(active(X)) -> length(X) ---------------------------------------- (231) Obligation: Q DP problem: The TRS P consists of the following rules: MARK(U42(X)) -> MARK(X) MARK(U71(X1, X2, X3)) -> ACTIVE(U71(mark(X1), X2, X3)) ACTIVE(U71(tt, L, N)) -> MARK(U72(isNat(N), L)) MARK(U72(X1, X2)) -> ACTIVE(U72(mark(X1), X2)) ACTIVE(U72(tt, L)) -> MARK(s(length(L))) MARK(s(X)) -> MARK(X) MARK(length(X)) -> ACTIVE(length(mark(X))) ACTIVE(length(cons(N, L))) -> MARK(U71(isNatList(L), L, N)) The TRS R consists of the following rules: mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) active(zeros) -> mark(cons(0, zeros)) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) mark(U42(X)) -> active(U42(mark(X))) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) mark(U52(X)) -> active(U52(mark(X))) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) mark(U62(X)) -> active(U62(mark(X))) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) active(U72(tt, L)) -> mark(s(length(L))) mark(s(X)) -> active(s(mark(X))) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) mark(U11(X)) -> active(U11(mark(X))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) mark(U21(X)) -> active(U21(mark(X))) active(isNatIList(V)) -> mark(U31(isNatList(V))) mark(U31(X)) -> active(U31(mark(X))) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) mark(U81(X)) -> active(U81(mark(X))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(0) -> active(0) mark(tt) -> active(tt) mark(isNatIList(X)) -> active(isNatIList(X)) mark(isNatList(X)) -> active(isNatList(X)) mark(isNat(X)) -> active(isNat(X)) mark(length(X)) -> active(length(mark(X))) mark(nil) -> active(nil) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) take(X1, mark(X2)) -> take(X1, X2) take(mark(X1), X2) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U42(tt)) -> mark(tt) active(U52(tt)) -> mark(tt) active(U62(tt)) -> mark(tt) active(isNat(0)) -> mark(tt) active(isNatIList(zeros)) -> mark(tt) active(isNatList(nil)) -> mark(tt) length(active(X)) -> length(X) length(mark(X)) -> length(X) cons(X1, mark(X2)) -> cons(X1, X2) cons(mark(X1), X2) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U42(active(X)) -> U42(X) U42(mark(X)) -> U42(X) U52(active(X)) -> U52(X) U52(mark(X)) -> U52(X) U62(active(X)) -> U62(X) U62(mark(X)) -> U62(X) U72(X1, mark(X2)) -> U72(X1, X2) U72(mark(X1), X2) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) s(active(X)) -> s(X) s(mark(X)) -> s(X) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) U11(active(X)) -> U11(X) U11(mark(X)) -> U11(X) U21(active(X)) -> U21(X) U21(mark(X)) -> U21(X) U31(active(X)) -> U31(X) U31(mark(X)) -> U31(X) U41(X1, mark(X2)) -> U41(X1, X2) U41(mark(X1), X2) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(mark(X1), X2) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(mark(X1), X2) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U81(active(X)) -> U81(X) U81(mark(X)) -> U81(X) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (232) QDPOrderProof (EQUIVALENT) We use the reduction pair processor [LPAR04,JAR06]. The following pairs can be oriented strictly and are deleted. MARK(U42(X)) -> MARK(X) The remaining pairs can at least be oriented weakly. Used ordering: Combined order from the following AFS and order. MARK(x1) = x1 U42(x1) = U42(x1) U71(x1, x2, x3) = U71 ACTIVE(x1) = ACTIVE mark(x1) = mark tt = tt U72(x1, x2) = U72 isNat(x1) = isNat(x1) s(x1) = x1 length(x1) = length cons(x1, x2) = cons isNatList(x1) = isNatList zeros = zeros active(x1) = active 0 = 0 U41(x1, x2) = U41(x1, x2) isNatIList(x1) = x1 U51(x1, x2) = U51(x1, x2) U52(x1) = U52(x1) U61(x1, x2) = x2 U62(x1) = U62(x1) U91(x1, x2, x3, x4) = U91(x2, x3) U92(x1, x2, x3, x4) = U92(x1, x2, x3, x4) U93(x1, x2, x3, x4) = x2 take(x1, x2) = x2 U11(x1) = U11(x1) U21(x1) = U21(x1) U31(x1) = U31 U81(x1) = U81(x1) nil = nil Recursive path order with status [RPO]. Quasi-Precedence: [isNatList, zeros, active] > [U71, ACTIVE, U72, length] > [mark, U41_2, U31, U81_1] > [isNat_1, cons, U92_4, U21_1] > U51_2 > U11_1 [isNatList, zeros, active] > 0 > [mark, U41_2, U31, U81_1] > [isNat_1, cons, U92_4, U21_1] > U51_2 > U11_1 [isNatList, zeros, active] > U52_1 > [U42_1, tt] > [mark, U41_2, U31, U81_1] > [isNat_1, cons, U92_4, U21_1] > U51_2 > U11_1 [isNatList, zeros, active] > U62_1 > [U42_1, tt] > [mark, U41_2, U31, U81_1] > [isNat_1, cons, U92_4, U21_1] > U51_2 > U11_1 [isNatList, zeros, active] > U91_2 > [mark, U41_2, U31, U81_1] > [isNat_1, cons, U92_4, U21_1] > U51_2 > U11_1 nil > [mark, U41_2, U31, U81_1] > [isNat_1, cons, U92_4, U21_1] > U51_2 > U11_1 Status: U42_1: multiset status U71: multiset status ACTIVE: multiset status mark: [] tt: multiset status U72: multiset status isNat_1: multiset status length: multiset status cons: multiset status isNatList: multiset status zeros: multiset status active: [] 0: multiset status U41_2: multiset status U51_2: multiset status U52_1: multiset status U62_1: multiset status U91_2: multiset status U92_4: multiset status U11_1: multiset status U21_1: multiset status U31: multiset status U81_1: multiset status nil: multiset status The following usable rules [FROCOS05] with respect to the argument filtering of the ordering [JAR06] were oriented: none ---------------------------------------- (233) Obligation: Q DP problem: The TRS P consists of the following rules: MARK(U71(X1, X2, X3)) -> ACTIVE(U71(mark(X1), X2, X3)) ACTIVE(U71(tt, L, N)) -> MARK(U72(isNat(N), L)) MARK(U72(X1, X2)) -> ACTIVE(U72(mark(X1), X2)) ACTIVE(U72(tt, L)) -> MARK(s(length(L))) MARK(s(X)) -> MARK(X) MARK(length(X)) -> ACTIVE(length(mark(X))) ACTIVE(length(cons(N, L))) -> MARK(U71(isNatList(L), L, N)) The TRS R consists of the following rules: mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) active(zeros) -> mark(cons(0, zeros)) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) mark(U42(X)) -> active(U42(mark(X))) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) mark(U52(X)) -> active(U52(mark(X))) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) mark(U62(X)) -> active(U62(mark(X))) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) active(U72(tt, L)) -> mark(s(length(L))) mark(s(X)) -> active(s(mark(X))) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) mark(U11(X)) -> active(U11(mark(X))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) mark(U21(X)) -> active(U21(mark(X))) active(isNatIList(V)) -> mark(U31(isNatList(V))) mark(U31(X)) -> active(U31(mark(X))) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) mark(U81(X)) -> active(U81(mark(X))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(0) -> active(0) mark(tt) -> active(tt) mark(isNatIList(X)) -> active(isNatIList(X)) mark(isNatList(X)) -> active(isNatList(X)) mark(isNat(X)) -> active(isNat(X)) mark(length(X)) -> active(length(mark(X))) mark(nil) -> active(nil) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) take(X1, mark(X2)) -> take(X1, X2) take(mark(X1), X2) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U42(tt)) -> mark(tt) active(U52(tt)) -> mark(tt) active(U62(tt)) -> mark(tt) active(isNat(0)) -> mark(tt) active(isNatIList(zeros)) -> mark(tt) active(isNatList(nil)) -> mark(tt) length(active(X)) -> length(X) length(mark(X)) -> length(X) cons(X1, mark(X2)) -> cons(X1, X2) cons(mark(X1), X2) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U42(active(X)) -> U42(X) U42(mark(X)) -> U42(X) U52(active(X)) -> U52(X) U52(mark(X)) -> U52(X) U62(active(X)) -> U62(X) U62(mark(X)) -> U62(X) U72(X1, mark(X2)) -> U72(X1, X2) U72(mark(X1), X2) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) s(active(X)) -> s(X) s(mark(X)) -> s(X) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) U11(active(X)) -> U11(X) U11(mark(X)) -> U11(X) U21(active(X)) -> U21(X) U21(mark(X)) -> U21(X) U31(active(X)) -> U31(X) U31(mark(X)) -> U31(X) U41(X1, mark(X2)) -> U41(X1, X2) U41(mark(X1), X2) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(mark(X1), X2) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(mark(X1), X2) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U81(active(X)) -> U81(X) U81(mark(X)) -> U81(X) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (234) QDPOrderProof (EQUIVALENT) We use the reduction pair processor [LPAR04,JAR06]. The following pairs can be oriented strictly and are deleted. MARK(s(X)) -> MARK(X) The remaining pairs can at least be oriented weakly. Used ordering: Matrix interpretation [MATRO] with arctic natural numbers [ARCTIC]: <<< POL(MARK(x_1)) = [[1A]] + [[0A]] * x_1 >>> <<< POL(U71(x_1, x_2, x_3)) = [[-I]] + [[0A]] * x_1 + [[1A]] * x_2 + [[0A]] * x_3 >>> <<< POL(ACTIVE(x_1)) = [[-I]] + [[0A]] * x_1 >>> <<< POL(mark(x_1)) = [[1A]] + [[0A]] * x_1 >>> <<< POL(tt) = [[2A]] >>> <<< POL(U72(x_1, x_2)) = [[0A]] + [[0A]] * x_1 + [[1A]] * x_2 >>> <<< POL(isNat(x_1)) = [[2A]] + [[0A]] * x_1 >>> <<< POL(s(x_1)) = [[2A]] + [[1A]] * x_1 >>> <<< POL(length(x_1)) = [[1A]] + [[0A]] * x_1 >>> <<< POL(cons(x_1, x_2)) = [[-I]] + [[0A]] * x_1 + [[1A]] * x_2 >>> <<< POL(isNatList(x_1)) = [[-I]] + [[1A]] * x_1 >>> <<< POL(zeros) = [[0A]] >>> <<< POL(active(x_1)) = [[1A]] + [[0A]] * x_1 >>> <<< POL(0) = [[0A]] >>> <<< POL(U41(x_1, x_2)) = [[0A]] + [[-I]] * x_1 + [[2A]] * x_2 >>> <<< POL(U42(x_1)) = [[-I]] + [[0A]] * x_1 >>> <<< POL(isNatIList(x_1)) = [[0A]] + [[2A]] * x_1 >>> <<< POL(U51(x_1, x_2)) = [[-I]] + [[-I]] * x_1 + [[2A]] * x_2 >>> <<< POL(U52(x_1)) = [[-I]] + [[0A]] * x_1 >>> <<< POL(U61(x_1, x_2)) = [[2A]] + [[-I]] * x_1 + [[0A]] * x_2 >>> <<< POL(U62(x_1)) = [[2A]] + [[-I]] * x_1 >>> <<< POL(U91(x_1, x_2, x_3, x_4)) = [[2A]] + [[-I]] * x_1 + [[1A]] * x_2 + [[1A]] * x_3 + [[0A]] * x_4 >>> <<< POL(U92(x_1, x_2, x_3, x_4)) = [[2A]] + [[-I]] * x_1 + [[1A]] * x_2 + [[1A]] * x_3 + [[0A]] * x_4 >>> <<< POL(U93(x_1, x_2, x_3, x_4)) = [[-I]] + [[0A]] * x_1 + [[1A]] * x_2 + [[1A]] * x_3 + [[0A]] * x_4 >>> <<< POL(take(x_1, x_2)) = [[1A]] + [[0A]] * x_1 + [[0A]] * x_2 >>> <<< POL(U11(x_1)) = [[2A]] + [[-I]] * x_1 >>> <<< POL(U21(x_1)) = [[-I]] + [[0A]] * x_1 >>> <<< POL(U31(x_1)) = [[0A]] + [[0A]] * x_1 >>> <<< POL(U81(x_1)) = [[0A]] + [[0A]] * x_1 >>> <<< POL(nil) = [[1A]] >>> The following usable rules [FROCOS05] with respect to the argument filtering of the ordering [JAR06] were oriented: mark(zeros) -> active(zeros) active(zeros) -> mark(cons(0, zeros)) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) mark(U42(X)) -> active(U42(mark(X))) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) mark(U52(X)) -> active(U52(mark(X))) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) mark(U62(X)) -> active(U62(mark(X))) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) active(U72(tt, L)) -> mark(s(length(L))) mark(s(X)) -> active(s(mark(X))) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) mark(U11(X)) -> active(U11(mark(X))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) mark(U21(X)) -> active(U21(mark(X))) active(isNatIList(V)) -> mark(U31(isNatList(V))) mark(U31(X)) -> active(U31(mark(X))) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(U81(X)) -> active(U81(mark(X))) mark(0) -> active(0) mark(tt) -> active(tt) mark(isNatIList(X)) -> active(isNatIList(X)) mark(isNatList(X)) -> active(isNatList(X)) mark(isNat(X)) -> active(isNat(X)) mark(length(X)) -> active(length(mark(X))) mark(nil) -> active(nil) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U72(mark(X1), X2) -> U72(X1, X2) U72(X1, mark(X2)) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) length(mark(X)) -> length(X) length(active(X)) -> length(X) cons(mark(X1), X2) -> cons(X1, X2) cons(X1, mark(X2)) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U42(tt)) -> mark(tt) active(U52(tt)) -> mark(tt) active(U62(tt)) -> mark(tt) active(isNat(0)) -> mark(tt) active(isNatIList(zeros)) -> mark(tt) active(isNatList(nil)) -> mark(tt) U42(mark(X)) -> U42(X) U42(active(X)) -> U42(X) U52(mark(X)) -> U52(X) U52(active(X)) -> U52(X) U62(mark(X)) -> U62(X) U62(active(X)) -> U62(X) s(mark(X)) -> s(X) s(active(X)) -> s(X) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) U11(mark(X)) -> U11(X) U11(active(X)) -> U11(X) U21(mark(X)) -> U21(X) U21(active(X)) -> U21(X) U31(mark(X)) -> U31(X) U31(active(X)) -> U31(X) U41(mark(X1), X2) -> U41(X1, X2) U41(X1, mark(X2)) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U51(mark(X1), X2) -> U51(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U61(mark(X1), X2) -> U61(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) U81(mark(X)) -> U81(X) U81(active(X)) -> U81(X) take(mark(X1), X2) -> take(X1, X2) take(X1, mark(X2)) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) ---------------------------------------- (235) Obligation: Q DP problem: The TRS P consists of the following rules: MARK(U71(X1, X2, X3)) -> ACTIVE(U71(mark(X1), X2, X3)) ACTIVE(U71(tt, L, N)) -> MARK(U72(isNat(N), L)) MARK(U72(X1, X2)) -> ACTIVE(U72(mark(X1), X2)) ACTIVE(U72(tt, L)) -> MARK(s(length(L))) MARK(length(X)) -> ACTIVE(length(mark(X))) ACTIVE(length(cons(N, L))) -> MARK(U71(isNatList(L), L, N)) The TRS R consists of the following rules: mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) active(zeros) -> mark(cons(0, zeros)) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) mark(U42(X)) -> active(U42(mark(X))) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) mark(U52(X)) -> active(U52(mark(X))) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) mark(U62(X)) -> active(U62(mark(X))) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) active(U72(tt, L)) -> mark(s(length(L))) mark(s(X)) -> active(s(mark(X))) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) mark(U11(X)) -> active(U11(mark(X))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) mark(U21(X)) -> active(U21(mark(X))) active(isNatIList(V)) -> mark(U31(isNatList(V))) mark(U31(X)) -> active(U31(mark(X))) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) mark(U81(X)) -> active(U81(mark(X))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(0) -> active(0) mark(tt) -> active(tt) mark(isNatIList(X)) -> active(isNatIList(X)) mark(isNatList(X)) -> active(isNatList(X)) mark(isNat(X)) -> active(isNat(X)) mark(length(X)) -> active(length(mark(X))) mark(nil) -> active(nil) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) take(X1, mark(X2)) -> take(X1, X2) take(mark(X1), X2) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U42(tt)) -> mark(tt) active(U52(tt)) -> mark(tt) active(U62(tt)) -> mark(tt) active(isNat(0)) -> mark(tt) active(isNatIList(zeros)) -> mark(tt) active(isNatList(nil)) -> mark(tt) length(active(X)) -> length(X) length(mark(X)) -> length(X) cons(X1, mark(X2)) -> cons(X1, X2) cons(mark(X1), X2) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U42(active(X)) -> U42(X) U42(mark(X)) -> U42(X) U52(active(X)) -> U52(X) U52(mark(X)) -> U52(X) U62(active(X)) -> U62(X) U62(mark(X)) -> U62(X) U72(X1, mark(X2)) -> U72(X1, X2) U72(mark(X1), X2) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) s(active(X)) -> s(X) s(mark(X)) -> s(X) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) U11(active(X)) -> U11(X) U11(mark(X)) -> U11(X) U21(active(X)) -> U21(X) U21(mark(X)) -> U21(X) U31(active(X)) -> U31(X) U31(mark(X)) -> U31(X) U41(X1, mark(X2)) -> U41(X1, X2) U41(mark(X1), X2) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(mark(X1), X2) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(mark(X1), X2) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U81(active(X)) -> U81(X) U81(mark(X)) -> U81(X) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (236) DependencyGraphProof (EQUIVALENT) The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 1 SCC with 2 less nodes. ---------------------------------------- (237) Obligation: Q DP problem: The TRS P consists of the following rules: ACTIVE(U71(tt, L, N)) -> MARK(U72(isNat(N), L)) MARK(U72(X1, X2)) -> ACTIVE(U72(mark(X1), X2)) ACTIVE(length(cons(N, L))) -> MARK(U71(isNatList(L), L, N)) MARK(U71(X1, X2, X3)) -> ACTIVE(U71(mark(X1), X2, X3)) The TRS R consists of the following rules: mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) active(zeros) -> mark(cons(0, zeros)) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) mark(U42(X)) -> active(U42(mark(X))) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) mark(U52(X)) -> active(U52(mark(X))) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) mark(U62(X)) -> active(U62(mark(X))) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) active(U72(tt, L)) -> mark(s(length(L))) mark(s(X)) -> active(s(mark(X))) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) mark(U11(X)) -> active(U11(mark(X))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) mark(U21(X)) -> active(U21(mark(X))) active(isNatIList(V)) -> mark(U31(isNatList(V))) mark(U31(X)) -> active(U31(mark(X))) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) mark(U81(X)) -> active(U81(mark(X))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(0) -> active(0) mark(tt) -> active(tt) mark(isNatIList(X)) -> active(isNatIList(X)) mark(isNatList(X)) -> active(isNatList(X)) mark(isNat(X)) -> active(isNat(X)) mark(length(X)) -> active(length(mark(X))) mark(nil) -> active(nil) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) take(X1, mark(X2)) -> take(X1, X2) take(mark(X1), X2) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U42(tt)) -> mark(tt) active(U52(tt)) -> mark(tt) active(U62(tt)) -> mark(tt) active(isNat(0)) -> mark(tt) active(isNatIList(zeros)) -> mark(tt) active(isNatList(nil)) -> mark(tt) length(active(X)) -> length(X) length(mark(X)) -> length(X) cons(X1, mark(X2)) -> cons(X1, X2) cons(mark(X1), X2) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U42(active(X)) -> U42(X) U42(mark(X)) -> U42(X) U52(active(X)) -> U52(X) U52(mark(X)) -> U52(X) U62(active(X)) -> U62(X) U62(mark(X)) -> U62(X) U72(X1, mark(X2)) -> U72(X1, X2) U72(mark(X1), X2) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) s(active(X)) -> s(X) s(mark(X)) -> s(X) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) U11(active(X)) -> U11(X) U11(mark(X)) -> U11(X) U21(active(X)) -> U21(X) U21(mark(X)) -> U21(X) U31(active(X)) -> U31(X) U31(mark(X)) -> U31(X) U41(X1, mark(X2)) -> U41(X1, X2) U41(mark(X1), X2) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(mark(X1), X2) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(mark(X1), X2) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U81(active(X)) -> U81(X) U81(mark(X)) -> U81(X) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (238) TransformationProof (EQUIVALENT) By instantiating [LPAR04] the rule MARK(U71(X1, X2, X3)) -> ACTIVE(U71(mark(X1), X2, X3)) we obtained the following new rules [LPAR04]: (MARK(U71(isNatList(z1), z1, z0)) -> ACTIVE(U71(mark(isNatList(z1)), z1, z0)),MARK(U71(isNatList(z1), z1, z0)) -> ACTIVE(U71(mark(isNatList(z1)), z1, z0))) ---------------------------------------- (239) Obligation: Q DP problem: The TRS P consists of the following rules: ACTIVE(U71(tt, L, N)) -> MARK(U72(isNat(N), L)) MARK(U72(X1, X2)) -> ACTIVE(U72(mark(X1), X2)) ACTIVE(length(cons(N, L))) -> MARK(U71(isNatList(L), L, N)) MARK(U71(isNatList(z1), z1, z0)) -> ACTIVE(U71(mark(isNatList(z1)), z1, z0)) The TRS R consists of the following rules: mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) active(zeros) -> mark(cons(0, zeros)) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) mark(U42(X)) -> active(U42(mark(X))) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) mark(U52(X)) -> active(U52(mark(X))) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) mark(U62(X)) -> active(U62(mark(X))) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) active(U72(tt, L)) -> mark(s(length(L))) mark(s(X)) -> active(s(mark(X))) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) mark(U11(X)) -> active(U11(mark(X))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) mark(U21(X)) -> active(U21(mark(X))) active(isNatIList(V)) -> mark(U31(isNatList(V))) mark(U31(X)) -> active(U31(mark(X))) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) mark(U81(X)) -> active(U81(mark(X))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(0) -> active(0) mark(tt) -> active(tt) mark(isNatIList(X)) -> active(isNatIList(X)) mark(isNatList(X)) -> active(isNatList(X)) mark(isNat(X)) -> active(isNat(X)) mark(length(X)) -> active(length(mark(X))) mark(nil) -> active(nil) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) take(X1, mark(X2)) -> take(X1, X2) take(mark(X1), X2) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U42(tt)) -> mark(tt) active(U52(tt)) -> mark(tt) active(U62(tt)) -> mark(tt) active(isNat(0)) -> mark(tt) active(isNatIList(zeros)) -> mark(tt) active(isNatList(nil)) -> mark(tt) length(active(X)) -> length(X) length(mark(X)) -> length(X) cons(X1, mark(X2)) -> cons(X1, X2) cons(mark(X1), X2) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U42(active(X)) -> U42(X) U42(mark(X)) -> U42(X) U52(active(X)) -> U52(X) U52(mark(X)) -> U52(X) U62(active(X)) -> U62(X) U62(mark(X)) -> U62(X) U72(X1, mark(X2)) -> U72(X1, X2) U72(mark(X1), X2) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) s(active(X)) -> s(X) s(mark(X)) -> s(X) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) U11(active(X)) -> U11(X) U11(mark(X)) -> U11(X) U21(active(X)) -> U21(X) U21(mark(X)) -> U21(X) U31(active(X)) -> U31(X) U31(mark(X)) -> U31(X) U41(X1, mark(X2)) -> U41(X1, X2) U41(mark(X1), X2) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(mark(X1), X2) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(mark(X1), X2) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U81(active(X)) -> U81(X) U81(mark(X)) -> U81(X) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (240) QDPOrderProof (EQUIVALENT) We use the reduction pair processor [LPAR04,JAR06]. The following pairs can be oriented strictly and are deleted. ACTIVE(U71(tt, L, N)) -> MARK(U72(isNat(N), L)) ACTIVE(length(cons(N, L))) -> MARK(U71(isNatList(L), L, N)) The remaining pairs can at least be oriented weakly. Used ordering: Combined order from the following AFS and order. ACTIVE(x1) = x1 U71(x1, x2, x3) = U71 MARK(x1) = x1 U72(x1, x2) = U72 length(x1) = length Knuth-Bendix order [KBO] with precedence:trivial and weight map: length=3 U71=2 U72=1 The following usable rules [FROCOS05] with respect to the argument filtering of the ordering [JAR06] were oriented: U72(mark(X1), X2) -> U72(X1, X2) U72(X1, mark(X2)) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) ---------------------------------------- (241) Obligation: Q DP problem: The TRS P consists of the following rules: MARK(U72(X1, X2)) -> ACTIVE(U72(mark(X1), X2)) MARK(U71(isNatList(z1), z1, z0)) -> ACTIVE(U71(mark(isNatList(z1)), z1, z0)) The TRS R consists of the following rules: mark(zeros) -> active(zeros) mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) active(zeros) -> mark(cons(0, zeros)) active(U41(tt, V2)) -> mark(U42(isNatIList(V2))) mark(U42(X)) -> active(U42(mark(X))) active(U51(tt, V2)) -> mark(U52(isNatList(V2))) mark(U52(X)) -> active(U52(mark(X))) active(U61(tt, V2)) -> mark(U62(isNatIList(V2))) mark(U62(X)) -> active(U62(mark(X))) active(U71(tt, L, N)) -> mark(U72(isNat(N), L)) mark(U72(X1, X2)) -> active(U72(mark(X1), X2)) active(U72(tt, L)) -> mark(s(length(L))) mark(s(X)) -> active(s(mark(X))) active(U91(tt, IL, M, N)) -> mark(U92(isNat(M), IL, M, N)) mark(U92(X1, X2, X3, X4)) -> active(U92(mark(X1), X2, X3, X4)) active(U92(tt, IL, M, N)) -> mark(U93(isNat(N), IL, M, N)) mark(U93(X1, X2, X3, X4)) -> active(U93(mark(X1), X2, X3, X4)) active(U93(tt, IL, M, N)) -> mark(cons(N, take(M, IL))) active(isNat(length(V1))) -> mark(U11(isNatList(V1))) mark(U11(X)) -> active(U11(mark(X))) active(isNat(s(V1))) -> mark(U21(isNat(V1))) mark(U21(X)) -> active(U21(mark(X))) active(isNatIList(V)) -> mark(U31(isNatList(V))) mark(U31(X)) -> active(U31(mark(X))) active(isNatIList(cons(V1, V2))) -> mark(U41(isNat(V1), V2)) mark(U41(X1, X2)) -> active(U41(mark(X1), X2)) active(isNatList(cons(V1, V2))) -> mark(U51(isNat(V1), V2)) mark(U51(X1, X2)) -> active(U51(mark(X1), X2)) active(isNatList(take(V1, V2))) -> mark(U61(isNat(V1), V2)) mark(U61(X1, X2)) -> active(U61(mark(X1), X2)) active(length(cons(N, L))) -> mark(U71(isNatList(L), L, N)) mark(U71(X1, X2, X3)) -> active(U71(mark(X1), X2, X3)) mark(U81(X)) -> active(U81(mark(X))) active(take(s(M), cons(N, IL))) -> mark(U91(isNatIList(IL), IL, M, N)) mark(U91(X1, X2, X3, X4)) -> active(U91(mark(X1), X2, X3, X4)) mark(0) -> active(0) mark(tt) -> active(tt) mark(isNatIList(X)) -> active(isNatIList(X)) mark(isNatList(X)) -> active(isNatList(X)) mark(isNat(X)) -> active(isNat(X)) mark(length(X)) -> active(length(mark(X))) mark(nil) -> active(nil) mark(take(X1, X2)) -> active(take(mark(X1), mark(X2))) take(X1, mark(X2)) -> take(X1, X2) take(mark(X1), X2) -> take(X1, X2) take(active(X1), X2) -> take(X1, X2) take(X1, active(X2)) -> take(X1, X2) active(U11(tt)) -> mark(tt) active(U21(tt)) -> mark(tt) active(U31(tt)) -> mark(tt) active(U42(tt)) -> mark(tt) active(U52(tt)) -> mark(tt) active(U62(tt)) -> mark(tt) active(isNat(0)) -> mark(tt) active(isNatIList(zeros)) -> mark(tt) active(isNatList(nil)) -> mark(tt) length(active(X)) -> length(X) length(mark(X)) -> length(X) cons(X1, mark(X2)) -> cons(X1, X2) cons(mark(X1), X2) -> cons(X1, X2) cons(active(X1), X2) -> cons(X1, X2) cons(X1, active(X2)) -> cons(X1, X2) U42(active(X)) -> U42(X) U42(mark(X)) -> U42(X) U52(active(X)) -> U52(X) U52(mark(X)) -> U52(X) U62(active(X)) -> U62(X) U62(mark(X)) -> U62(X) U72(X1, mark(X2)) -> U72(X1, X2) U72(mark(X1), X2) -> U72(X1, X2) U72(active(X1), X2) -> U72(X1, X2) U72(X1, active(X2)) -> U72(X1, X2) s(active(X)) -> s(X) s(mark(X)) -> s(X) U92(X1, mark(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(mark(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, mark(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, mark(X4)) -> U92(X1, X2, X3, X4) U92(active(X1), X2, X3, X4) -> U92(X1, X2, X3, X4) U92(X1, active(X2), X3, X4) -> U92(X1, X2, X3, X4) U92(X1, X2, active(X3), X4) -> U92(X1, X2, X3, X4) U92(X1, X2, X3, active(X4)) -> U92(X1, X2, X3, X4) U93(X1, mark(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(mark(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, mark(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, mark(X4)) -> U93(X1, X2, X3, X4) U93(active(X1), X2, X3, X4) -> U93(X1, X2, X3, X4) U93(X1, active(X2), X3, X4) -> U93(X1, X2, X3, X4) U93(X1, X2, active(X3), X4) -> U93(X1, X2, X3, X4) U93(X1, X2, X3, active(X4)) -> U93(X1, X2, X3, X4) U11(active(X)) -> U11(X) U11(mark(X)) -> U11(X) U21(active(X)) -> U21(X) U21(mark(X)) -> U21(X) U31(active(X)) -> U31(X) U31(mark(X)) -> U31(X) U41(X1, mark(X2)) -> U41(X1, X2) U41(mark(X1), X2) -> U41(X1, X2) U41(active(X1), X2) -> U41(X1, X2) U41(X1, active(X2)) -> U41(X1, X2) U51(X1, mark(X2)) -> U51(X1, X2) U51(mark(X1), X2) -> U51(X1, X2) U51(active(X1), X2) -> U51(X1, X2) U51(X1, active(X2)) -> U51(X1, X2) U61(X1, mark(X2)) -> U61(X1, X2) U61(mark(X1), X2) -> U61(X1, X2) U61(active(X1), X2) -> U61(X1, X2) U61(X1, active(X2)) -> U61(X1, X2) U71(X1, mark(X2), X3) -> U71(X1, X2, X3) U71(mark(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, X2, mark(X3)) -> U71(X1, X2, X3) U71(active(X1), X2, X3) -> U71(X1, X2, X3) U71(X1, active(X2), X3) -> U71(X1, X2, X3) U71(X1, X2, active(X3)) -> U71(X1, X2, X3) U81(active(X)) -> U81(X) U81(mark(X)) -> U81(X) U91(X1, mark(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(mark(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, mark(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, mark(X4)) -> U91(X1, X2, X3, X4) U91(active(X1), X2, X3, X4) -> U91(X1, X2, X3, X4) U91(X1, active(X2), X3, X4) -> U91(X1, X2, X3, X4) U91(X1, X2, active(X3), X4) -> U91(X1, X2, X3, X4) U91(X1, X2, X3, active(X4)) -> U91(X1, X2, X3, X4) The set Q consists of the following terms: active(zeros) active(U11(tt)) active(U21(tt)) active(U31(tt)) active(U41(tt, x0)) active(U42(tt)) active(U51(tt, x0)) active(U52(tt)) active(U61(tt, x0)) active(U62(tt)) active(U71(tt, x0, x1)) active(U72(tt, x0)) active(U81(tt)) active(U91(tt, x0, x1, x2)) active(U92(tt, x0, x1, x2)) active(U93(tt, x0, x1, x2)) active(isNat(0)) active(isNat(length(x0))) active(isNat(s(x0))) active(isNatIList(x0)) active(isNatList(nil)) active(isNatList(cons(x0, x1))) active(isNatList(take(x0, x1))) active(length(nil)) active(length(cons(x0, x1))) active(take(0, x0)) active(take(s(x0), cons(x1, x2))) mark(zeros) mark(cons(x0, x1)) mark(0) mark(U11(x0)) mark(tt) mark(U21(x0)) mark(U31(x0)) mark(U41(x0, x1)) mark(U42(x0)) mark(isNatIList(x0)) mark(U51(x0, x1)) mark(U52(x0)) mark(isNatList(x0)) mark(U61(x0, x1)) mark(U62(x0)) mark(U71(x0, x1, x2)) mark(U72(x0, x1)) mark(isNat(x0)) mark(s(x0)) mark(length(x0)) mark(U81(x0)) mark(nil) mark(U91(x0, x1, x2, x3)) mark(U92(x0, x1, x2, x3)) mark(U93(x0, x1, x2, x3)) mark(take(x0, x1)) cons(mark(x0), x1) cons(x0, mark(x1)) cons(active(x0), x1) cons(x0, active(x1)) U11(mark(x0)) U11(active(x0)) U21(mark(x0)) U21(active(x0)) U31(mark(x0)) U31(active(x0)) U41(mark(x0), x1) U41(x0, mark(x1)) U41(active(x0), x1) U41(x0, active(x1)) U42(mark(x0)) U42(active(x0)) isNatIList(mark(x0)) isNatIList(active(x0)) U51(mark(x0), x1) U51(x0, mark(x1)) U51(active(x0), x1) U51(x0, active(x1)) U52(mark(x0)) U52(active(x0)) isNatList(mark(x0)) isNatList(active(x0)) U61(mark(x0), x1) U61(x0, mark(x1)) U61(active(x0), x1) U61(x0, active(x1)) U62(mark(x0)) U62(active(x0)) U71(mark(x0), x1, x2) U71(x0, mark(x1), x2) U71(x0, x1, mark(x2)) U71(active(x0), x1, x2) U71(x0, active(x1), x2) U71(x0, x1, active(x2)) U72(mark(x0), x1) U72(x0, mark(x1)) U72(active(x0), x1) U72(x0, active(x1)) isNat(mark(x0)) isNat(active(x0)) s(mark(x0)) s(active(x0)) length(mark(x0)) length(active(x0)) U81(mark(x0)) U81(active(x0)) U91(mark(x0), x1, x2, x3) U91(x0, mark(x1), x2, x3) U91(x0, x1, mark(x2), x3) U91(x0, x1, x2, mark(x3)) U91(active(x0), x1, x2, x3) U91(x0, active(x1), x2, x3) U91(x0, x1, active(x2), x3) U91(x0, x1, x2, active(x3)) U92(mark(x0), x1, x2, x3) U92(x0, mark(x1), x2, x3) U92(x0, x1, mark(x2), x3) U92(x0, x1, x2, mark(x3)) U92(active(x0), x1, x2, x3) U92(x0, active(x1), x2, x3) U92(x0, x1, active(x2), x3) U92(x0, x1, x2, active(x3)) U93(mark(x0), x1, x2, x3) U93(x0, mark(x1), x2, x3) U93(x0, x1, mark(x2), x3) U93(x0, x1, x2, mark(x3)) U93(active(x0), x1, x2, x3) U93(x0, active(x1), x2, x3) U93(x0, x1, active(x2), x3) U93(x0, x1, x2, active(x3)) take(mark(x0), x1) take(x0, mark(x1)) take(active(x0), x1) take(x0, active(x1)) We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (242) DependencyGraphProof (EQUIVALENT) The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 0 SCCs with 2 less nodes. ---------------------------------------- (243) TRUE