104.59/43.14 YES 104.94/43.15 proof of /export/starexec/sandbox2/benchmark/theBenchmark.xml 104.94/43.15 # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty 104.94/43.15 104.94/43.15 104.94/43.15 Termination w.r.t. Q of the given QTRS could be proven: 104.94/43.15 104.94/43.15 (0) QTRS 104.94/43.15 (1) QTRSRRRProof [EQUIVALENT, 176 ms] 104.94/43.15 (2) QTRS 104.94/43.15 (3) QTRSRRRProof [EQUIVALENT, 50 ms] 104.94/43.15 (4) QTRS 104.94/43.15 (5) QTRSRRRProof [EQUIVALENT, 70 ms] 104.94/43.15 (6) QTRS 104.94/43.15 (7) DependencyPairsProof [EQUIVALENT, 71 ms] 104.94/43.15 (8) QDP 104.94/43.15 (9) DependencyGraphProof [EQUIVALENT, 0 ms] 104.94/43.15 (10) AND 104.94/43.15 (11) QDP 104.94/43.15 (12) UsableRulesProof [EQUIVALENT, 0 ms] 104.94/43.15 (13) QDP 104.94/43.15 (14) QReductionProof [EQUIVALENT, 0 ms] 104.94/43.15 (15) QDP 104.94/43.15 (16) QDPSizeChangeProof [EQUIVALENT, 0 ms] 104.94/43.15 (17) YES 104.94/43.15 (18) QDP 104.94/43.15 (19) UsableRulesProof [EQUIVALENT, 0 ms] 104.94/43.15 (20) QDP 104.94/43.15 (21) QReductionProof [EQUIVALENT, 0 ms] 104.94/43.15 (22) QDP 104.94/43.15 (23) QDPSizeChangeProof [EQUIVALENT, 0 ms] 104.94/43.15 (24) YES 104.94/43.15 (25) QDP 104.94/43.15 (26) UsableRulesProof [EQUIVALENT, 0 ms] 104.94/43.15 (27) QDP 104.94/43.15 (28) QReductionProof [EQUIVALENT, 0 ms] 104.94/43.15 (29) QDP 104.94/43.15 (30) QDPSizeChangeProof [EQUIVALENT, 0 ms] 104.94/43.15 (31) YES 104.94/43.15 (32) QDP 104.94/43.15 (33) UsableRulesProof [EQUIVALENT, 0 ms] 104.94/43.15 (34) QDP 104.94/43.15 (35) QReductionProof [EQUIVALENT, 0 ms] 104.94/43.15 (36) QDP 104.94/43.15 (37) QDPSizeChangeProof [EQUIVALENT, 0 ms] 104.94/43.15 (38) YES 104.94/43.15 (39) QDP 104.94/43.15 (40) UsableRulesProof [EQUIVALENT, 0 ms] 104.94/43.15 (41) QDP 104.94/43.15 (42) QReductionProof [EQUIVALENT, 0 ms] 104.94/43.15 (43) QDP 104.94/43.15 (44) QDPSizeChangeProof [EQUIVALENT, 0 ms] 104.94/43.15 (45) YES 104.94/43.15 (46) QDP 104.94/43.15 (47) UsableRulesProof [EQUIVALENT, 0 ms] 104.94/43.15 (48) QDP 104.94/43.15 (49) QReductionProof [EQUIVALENT, 0 ms] 104.94/43.15 (50) QDP 104.94/43.15 (51) QDPSizeChangeProof [EQUIVALENT, 0 ms] 104.94/43.15 (52) YES 104.94/43.15 (53) QDP 104.94/43.15 (54) UsableRulesProof [EQUIVALENT, 0 ms] 104.94/43.15 (55) QDP 104.94/43.15 (56) QReductionProof [EQUIVALENT, 0 ms] 104.94/43.15 (57) QDP 104.94/43.15 (58) QDPSizeChangeProof [EQUIVALENT, 0 ms] 104.94/43.15 (59) YES 104.94/43.15 (60) QDP 104.94/43.15 (61) UsableRulesProof [EQUIVALENT, 0 ms] 104.94/43.15 (62) QDP 104.94/43.15 (63) QReductionProof [EQUIVALENT, 0 ms] 104.94/43.16 (64) QDP 104.94/43.16 (65) QDPSizeChangeProof [EQUIVALENT, 0 ms] 104.94/43.16 (66) YES 104.94/43.16 (67) QDP 104.94/43.16 (68) UsableRulesProof [EQUIVALENT, 0 ms] 104.94/43.16 (69) QDP 104.94/43.16 (70) QReductionProof [EQUIVALENT, 0 ms] 104.94/43.16 (71) QDP 104.94/43.16 (72) UsableRulesReductionPairsProof [EQUIVALENT, 0 ms] 104.94/43.16 (73) QDP 104.94/43.16 (74) DependencyGraphProof [EQUIVALENT, 0 ms] 104.94/43.16 (75) TRUE 104.94/43.16 (76) QDP 104.94/43.16 (77) UsableRulesProof [EQUIVALENT, 0 ms] 104.94/43.16 (78) QDP 104.94/43.16 (79) MRRProof [EQUIVALENT, 82 ms] 104.94/43.16 (80) QDP 104.94/43.16 (81) QDPQMonotonicMRRProof [EQUIVALENT, 108 ms] 104.94/43.16 (82) QDP 104.94/43.16 (83) QDPQMonotonicMRRProof [EQUIVALENT, 82 ms] 104.94/43.16 (84) QDP 104.94/43.16 (85) DependencyGraphProof [EQUIVALENT, 0 ms] 104.94/43.16 (86) QDP 104.94/43.16 (87) QDPQMonotonicMRRProof [EQUIVALENT, 64 ms] 104.94/43.16 (88) QDP 104.94/43.16 (89) QDPOrderProof [EQUIVALENT, 302 ms] 104.94/43.16 (90) QDP 104.94/43.16 (91) QDPOrderProof [EQUIVALENT, 154 ms] 104.94/43.16 (92) QDP 104.94/43.16 (93) DependencyGraphProof [EQUIVALENT, 0 ms] 104.94/43.16 (94) QDP 104.94/43.16 (95) QDPOrderProof [EQUIVALENT, 227 ms] 104.94/43.16 (96) QDP 104.94/43.16 (97) TransformationProof [SOUND, 0 ms] 104.94/43.16 (98) QDP 104.94/43.16 (99) DependencyGraphProof [EQUIVALENT, 0 ms] 104.94/43.16 (100) QDP 104.94/43.16 (101) QDPQMonotonicMRRProof [EQUIVALENT, 65 ms] 104.94/43.16 (102) QDP 104.94/43.16 (103) TransformationProof [SOUND, 0 ms] 104.94/43.16 (104) QDP 104.94/43.16 (105) TransformationProof [SOUND, 0 ms] 104.94/43.16 (106) QDP 104.94/43.16 (107) TransformationProof [EQUIVALENT, 43 ms] 104.94/43.16 (108) QDP 104.94/43.16 (109) DependencyGraphProof [EQUIVALENT, 0 ms] 104.94/43.16 (110) QDP 104.94/43.16 (111) TransformationProof [EQUIVALENT, 94 ms] 104.94/43.16 (112) QDP 104.94/43.16 (113) DependencyGraphProof [EQUIVALENT, 0 ms] 104.94/43.16 (114) QDP 104.94/43.16 (115) TransformationProof [EQUIVALENT, 62 ms] 104.94/43.16 (116) QDP 104.94/43.16 (117) DependencyGraphProof [EQUIVALENT, 0 ms] 104.94/43.16 (118) QDP 104.94/43.16 (119) TransformationProof [EQUIVALENT, 0 ms] 104.94/43.16 (120) QDP 104.94/43.16 (121) DependencyGraphProof [EQUIVALENT, 0 ms] 104.94/43.16 (122) QDP 104.94/43.16 (123) TransformationProof [EQUIVALENT, 5 ms] 104.94/43.16 (124) QDP 104.94/43.16 (125) DependencyGraphProof [EQUIVALENT, 0 ms] 104.94/43.16 (126) QDP 104.94/43.16 (127) TransformationProof [EQUIVALENT, 0 ms] 104.94/43.16 (128) QDP 104.94/43.16 (129) DependencyGraphProof [EQUIVALENT, 0 ms] 104.94/43.16 (130) AND 104.94/43.16 (131) QDP 104.94/43.16 (132) TransformationProof [EQUIVALENT, 0 ms] 104.94/43.16 (133) QDP 104.94/43.16 (134) DependencyGraphProof [EQUIVALENT, 0 ms] 104.94/43.16 (135) QDP 104.94/43.16 (136) TransformationProof [EQUIVALENT, 0 ms] 104.94/43.16 (137) QDP 104.94/43.16 (138) TransformationProof [EQUIVALENT, 0 ms] 104.94/43.16 (139) QDP 104.94/43.16 (140) TransformationProof [EQUIVALENT, 0 ms] 104.94/43.16 (141) QDP 104.94/43.16 (142) TransformationProof [EQUIVALENT, 0 ms] 104.94/43.16 (143) QDP 104.94/43.16 (144) QDPQMonotonicMRRProof [EQUIVALENT, 242 ms] 104.94/43.16 (145) QDP 104.94/43.16 (146) DependencyGraphProof [EQUIVALENT, 0 ms] 104.94/43.16 (147) QDP 104.94/43.16 (148) QDPQMonotonicMRRProof [EQUIVALENT, 242 ms] 104.94/43.16 (149) QDP 104.94/43.16 (150) DependencyGraphProof [EQUIVALENT, 0 ms] 104.94/43.16 (151) QDP 104.94/43.16 (152) QDPQMonotonicMRRProof [EQUIVALENT, 274 ms] 104.94/43.16 (153) QDP 104.94/43.16 (154) DependencyGraphProof [EQUIVALENT, 0 ms] 104.94/43.16 (155) QDP 104.94/43.16 (156) QDPQMonotonicMRRProof [EQUIVALENT, 236 ms] 104.94/43.16 (157) QDP 104.94/43.16 (158) DependencyGraphProof [EQUIVALENT, 0 ms] 104.94/43.16 (159) QDP 104.94/43.16 (160) QDPOrderProof [EQUIVALENT, 580 ms] 104.94/43.16 (161) QDP 104.94/43.16 (162) DependencyGraphProof [EQUIVALENT, 0 ms] 104.94/43.16 (163) QDP 104.94/43.16 (164) QDPOrderProof [EQUIVALENT, 374 ms] 104.94/43.16 (165) QDP 104.94/43.16 (166) DependencyGraphProof [EQUIVALENT, 0 ms] 104.94/43.16 (167) QDP 104.94/43.16 (168) QDPQMonotonicMRRProof [EQUIVALENT, 81 ms] 104.94/43.16 (169) QDP 104.94/43.16 (170) DependencyGraphProof [EQUIVALENT, 0 ms] 104.94/43.16 (171) QDP 104.94/43.16 (172) NonMonReductionPairProof [EQUIVALENT, 4087 ms] 104.94/43.16 (173) QDP 104.94/43.16 (174) DependencyGraphProof [EQUIVALENT, 0 ms] 104.94/43.16 (175) QDP 104.94/43.16 (176) QDPOrderProof [EQUIVALENT, 0 ms] 104.94/43.16 (177) QDP 104.94/43.16 (178) PisEmptyProof [EQUIVALENT, 0 ms] 104.94/43.16 (179) YES 104.94/43.16 (180) QDP 104.94/43.16 (181) UsableRulesProof [EQUIVALENT, 0 ms] 104.94/43.16 (182) QDP 104.94/43.16 (183) QReductionProof [EQUIVALENT, 0 ms] 104.94/43.16 (184) QDP 104.94/43.16 (185) QDPSizeChangeProof [EQUIVALENT, 0 ms] 104.94/43.16 (186) YES 104.94/43.16 104.94/43.16 104.94/43.16 ---------------------------------------- 104.94/43.16 104.94/43.16 (0) 104.94/43.16 Obligation: 104.94/43.16 Q restricted rewrite system: 104.94/43.16 The TRS R consists of the following rules: 104.94/43.16 104.94/43.16 active(zeros) -> mark(cons(0, zeros)) 104.94/43.16 active(U11(tt, L)) -> mark(s(length(L))) 104.94/43.16 active(and(tt, X)) -> mark(X) 104.94/43.16 active(isNat(0)) -> mark(tt) 104.94/43.16 active(isNat(length(V1))) -> mark(isNatList(V1)) 104.94/43.16 active(isNat(s(V1))) -> mark(isNat(V1)) 104.94/43.16 active(isNatIList(V)) -> mark(isNatList(V)) 104.94/43.16 active(isNatIList(zeros)) -> mark(tt) 104.94/43.16 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 104.94/43.16 active(isNatList(nil)) -> mark(tt) 104.94/43.16 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 104.94/43.16 active(length(nil)) -> mark(0) 104.94/43.16 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 104.94/43.16 mark(zeros) -> active(zeros) 104.94/43.16 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 104.94/43.16 mark(0) -> active(0) 104.94/43.16 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 104.94/43.16 mark(tt) -> active(tt) 104.94/43.16 mark(s(X)) -> active(s(mark(X))) 104.94/43.16 mark(length(X)) -> active(length(mark(X))) 104.94/43.16 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 104.94/43.16 mark(isNat(X)) -> active(isNat(X)) 104.94/43.16 mark(isNatList(X)) -> active(isNatList(X)) 104.94/43.16 mark(isNatIList(X)) -> active(isNatIList(X)) 104.94/43.16 mark(nil) -> active(nil) 104.94/43.16 cons(mark(X1), X2) -> cons(X1, X2) 104.94/43.16 cons(X1, mark(X2)) -> cons(X1, X2) 104.94/43.16 cons(active(X1), X2) -> cons(X1, X2) 104.94/43.16 cons(X1, active(X2)) -> cons(X1, X2) 104.94/43.16 U11(mark(X1), X2) -> U11(X1, X2) 104.94/43.16 U11(X1, mark(X2)) -> U11(X1, X2) 104.94/43.17 U11(active(X1), X2) -> U11(X1, X2) 104.94/43.17 U11(X1, active(X2)) -> U11(X1, X2) 104.94/43.17 s(mark(X)) -> s(X) 104.94/43.17 s(active(X)) -> s(X) 104.94/43.17 length(mark(X)) -> length(X) 104.94/43.17 length(active(X)) -> length(X) 104.94/43.17 and(mark(X1), X2) -> and(X1, X2) 104.94/43.17 and(X1, mark(X2)) -> and(X1, X2) 104.94/43.17 and(active(X1), X2) -> and(X1, X2) 104.94/43.17 and(X1, active(X2)) -> and(X1, X2) 104.94/43.17 isNat(mark(X)) -> isNat(X) 104.94/43.17 isNat(active(X)) -> isNat(X) 104.94/43.17 isNatList(mark(X)) -> isNatList(X) 104.94/43.17 isNatList(active(X)) -> isNatList(X) 104.94/43.17 isNatIList(mark(X)) -> isNatIList(X) 104.94/43.17 isNatIList(active(X)) -> isNatIList(X) 104.94/43.17 104.94/43.17 The set Q consists of the following terms: 104.94/43.17 104.94/43.17 active(zeros) 104.94/43.17 active(U11(tt, x0)) 104.94/43.17 active(and(tt, x0)) 104.94/43.17 active(isNat(0)) 104.94/43.17 active(isNat(length(x0))) 104.94/43.17 active(isNat(s(x0))) 104.94/43.17 active(isNatIList(x0)) 104.94/43.17 active(isNatList(nil)) 104.94/43.17 active(isNatList(cons(x0, x1))) 104.94/43.17 active(length(nil)) 104.94/43.17 active(length(cons(x0, x1))) 104.94/43.17 mark(zeros) 104.94/43.17 mark(cons(x0, x1)) 104.94/43.17 mark(0) 104.94/43.17 mark(U11(x0, x1)) 104.94/43.17 mark(tt) 104.94/43.17 mark(s(x0)) 104.94/43.17 mark(length(x0)) 104.94/43.17 mark(and(x0, x1)) 104.94/43.17 mark(isNat(x0)) 104.94/43.17 mark(isNatList(x0)) 104.94/43.17 mark(isNatIList(x0)) 104.94/43.17 mark(nil) 104.94/43.17 cons(mark(x0), x1) 104.94/43.17 cons(x0, mark(x1)) 104.94/43.17 cons(active(x0), x1) 104.94/43.17 cons(x0, active(x1)) 104.94/43.17 U11(mark(x0), x1) 104.94/43.17 U11(x0, mark(x1)) 104.94/43.17 U11(active(x0), x1) 104.94/43.17 U11(x0, active(x1)) 104.94/43.17 s(mark(x0)) 104.94/43.17 s(active(x0)) 104.94/43.17 length(mark(x0)) 104.94/43.17 length(active(x0)) 104.94/43.17 and(mark(x0), x1) 104.94/43.17 and(x0, mark(x1)) 104.94/43.17 and(active(x0), x1) 104.94/43.17 and(x0, active(x1)) 104.94/43.17 isNat(mark(x0)) 104.94/43.17 isNat(active(x0)) 104.94/43.17 isNatList(mark(x0)) 104.94/43.17 isNatList(active(x0)) 104.94/43.17 isNatIList(mark(x0)) 104.94/43.17 isNatIList(active(x0)) 104.94/43.17 104.94/43.17 104.94/43.17 ---------------------------------------- 104.94/43.17 104.94/43.17 (1) QTRSRRRProof (EQUIVALENT) 104.94/43.17 Used ordering: 104.94/43.17 Polynomial interpretation [POLO]: 104.94/43.17 104.94/43.17 POL(0) = 0 104.94/43.17 POL(U11(x_1, x_2)) = x_1 + 2*x_2 104.94/43.17 POL(active(x_1)) = x_1 104.94/43.17 POL(and(x_1, x_2)) = 2*x_1 + 2*x_2 104.94/43.17 POL(cons(x_1, x_2)) = 2*x_1 + 2*x_2 104.94/43.17 POL(isNat(x_1)) = x_1 104.94/43.17 POL(isNatIList(x_1)) = 2*x_1 104.94/43.17 POL(isNatList(x_1)) = x_1 104.94/43.17 POL(length(x_1)) = 2*x_1 104.94/43.17 POL(mark(x_1)) = x_1 104.94/43.17 POL(nil) = 1 104.94/43.17 POL(s(x_1)) = x_1 104.94/43.17 POL(tt) = 0 104.94/43.17 POL(zeros) = 0 104.94/43.17 With this ordering the following rules can be removed by the rule removal processor [LPAR04] because they are oriented strictly: 104.94/43.17 104.94/43.17 active(isNatList(nil)) -> mark(tt) 104.94/43.17 active(length(nil)) -> mark(0) 104.94/43.17 104.94/43.17 104.94/43.17 104.94/43.17 104.94/43.17 ---------------------------------------- 104.94/43.17 104.94/43.17 (2) 104.94/43.17 Obligation: 104.94/43.17 Q restricted rewrite system: 104.94/43.17 The TRS R consists of the following rules: 104.94/43.17 104.94/43.17 active(zeros) -> mark(cons(0, zeros)) 104.94/43.17 active(U11(tt, L)) -> mark(s(length(L))) 104.94/43.17 active(and(tt, X)) -> mark(X) 104.94/43.17 active(isNat(0)) -> mark(tt) 104.94/43.17 active(isNat(length(V1))) -> mark(isNatList(V1)) 104.94/43.17 active(isNat(s(V1))) -> mark(isNat(V1)) 104.94/43.17 active(isNatIList(V)) -> mark(isNatList(V)) 104.94/43.17 active(isNatIList(zeros)) -> mark(tt) 104.94/43.17 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 104.94/43.17 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 104.94/43.17 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 104.94/43.17 mark(zeros) -> active(zeros) 104.94/43.17 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 104.94/43.17 mark(0) -> active(0) 104.94/43.17 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 104.94/43.17 mark(tt) -> active(tt) 104.94/43.17 mark(s(X)) -> active(s(mark(X))) 104.94/43.17 mark(length(X)) -> active(length(mark(X))) 104.94/43.17 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 104.94/43.17 mark(isNat(X)) -> active(isNat(X)) 104.94/43.17 mark(isNatList(X)) -> active(isNatList(X)) 104.94/43.17 mark(isNatIList(X)) -> active(isNatIList(X)) 104.94/43.17 mark(nil) -> active(nil) 104.94/43.17 cons(mark(X1), X2) -> cons(X1, X2) 104.94/43.17 cons(X1, mark(X2)) -> cons(X1, X2) 104.94/43.17 cons(active(X1), X2) -> cons(X1, X2) 104.94/43.17 cons(X1, active(X2)) -> cons(X1, X2) 104.94/43.17 U11(mark(X1), X2) -> U11(X1, X2) 104.94/43.17 U11(X1, mark(X2)) -> U11(X1, X2) 104.94/43.17 U11(active(X1), X2) -> U11(X1, X2) 104.94/43.17 U11(X1, active(X2)) -> U11(X1, X2) 104.94/43.17 s(mark(X)) -> s(X) 104.94/43.17 s(active(X)) -> s(X) 104.94/43.17 length(mark(X)) -> length(X) 104.94/43.17 length(active(X)) -> length(X) 104.94/43.17 and(mark(X1), X2) -> and(X1, X2) 104.94/43.17 and(X1, mark(X2)) -> and(X1, X2) 104.94/43.17 and(active(X1), X2) -> and(X1, X2) 104.94/43.17 and(X1, active(X2)) -> and(X1, X2) 104.94/43.17 isNat(mark(X)) -> isNat(X) 104.94/43.17 isNat(active(X)) -> isNat(X) 104.94/43.17 isNatList(mark(X)) -> isNatList(X) 104.94/43.17 isNatList(active(X)) -> isNatList(X) 104.94/43.17 isNatIList(mark(X)) -> isNatIList(X) 104.94/43.17 isNatIList(active(X)) -> isNatIList(X) 104.94/43.17 104.94/43.17 The set Q consists of the following terms: 104.94/43.17 104.94/43.17 active(zeros) 104.94/43.17 active(U11(tt, x0)) 104.94/43.17 active(and(tt, x0)) 104.94/43.17 active(isNat(0)) 104.94/43.17 active(isNat(length(x0))) 104.94/43.17 active(isNat(s(x0))) 104.94/43.17 active(isNatIList(x0)) 104.94/43.17 active(isNatList(nil)) 104.94/43.17 active(isNatList(cons(x0, x1))) 104.94/43.17 active(length(nil)) 104.94/43.17 active(length(cons(x0, x1))) 104.94/43.17 mark(zeros) 104.94/43.17 mark(cons(x0, x1)) 104.94/43.17 mark(0) 104.94/43.17 mark(U11(x0, x1)) 104.94/43.17 mark(tt) 104.94/43.17 mark(s(x0)) 104.94/43.17 mark(length(x0)) 104.94/43.17 mark(and(x0, x1)) 104.94/43.17 mark(isNat(x0)) 104.94/43.17 mark(isNatList(x0)) 104.94/43.17 mark(isNatIList(x0)) 104.94/43.17 mark(nil) 104.94/43.17 cons(mark(x0), x1) 104.94/43.17 cons(x0, mark(x1)) 104.94/43.17 cons(active(x0), x1) 104.94/43.17 cons(x0, active(x1)) 104.94/43.17 U11(mark(x0), x1) 104.94/43.17 U11(x0, mark(x1)) 104.94/43.17 U11(active(x0), x1) 104.94/43.17 U11(x0, active(x1)) 104.94/43.17 s(mark(x0)) 104.94/43.17 s(active(x0)) 104.94/43.17 length(mark(x0)) 104.94/43.17 length(active(x0)) 104.94/43.17 and(mark(x0), x1) 104.94/43.17 and(x0, mark(x1)) 104.94/43.17 and(active(x0), x1) 104.94/43.17 and(x0, active(x1)) 104.94/43.17 isNat(mark(x0)) 104.94/43.17 isNat(active(x0)) 104.94/43.17 isNatList(mark(x0)) 104.94/43.17 isNatList(active(x0)) 104.94/43.17 isNatIList(mark(x0)) 104.94/43.17 isNatIList(active(x0)) 104.94/43.17 104.94/43.17 104.94/43.17 ---------------------------------------- 104.94/43.17 104.94/43.17 (3) QTRSRRRProof (EQUIVALENT) 104.94/43.17 Used ordering: 104.94/43.17 Polynomial interpretation [POLO]: 104.94/43.17 104.94/43.17 POL(0) = 0 104.94/43.17 POL(U11(x_1, x_2)) = x_1 + 2*x_2 104.94/43.17 POL(active(x_1)) = x_1 104.94/43.17 POL(and(x_1, x_2)) = x_1 + x_2 104.94/43.17 POL(cons(x_1, x_2)) = 2*x_1 + 2*x_2 104.94/43.17 POL(isNat(x_1)) = x_1 104.94/43.17 POL(isNatIList(x_1)) = 1 + x_1 104.94/43.17 POL(isNatList(x_1)) = x_1 104.94/43.17 POL(length(x_1)) = 2*x_1 104.94/43.17 POL(mark(x_1)) = x_1 104.94/43.17 POL(nil) = 0 104.94/43.17 POL(s(x_1)) = x_1 104.94/43.17 POL(tt) = 0 104.94/43.17 POL(zeros) = 0 104.94/43.17 With this ordering the following rules can be removed by the rule removal processor [LPAR04] because they are oriented strictly: 104.94/43.17 104.94/43.17 active(isNatIList(V)) -> mark(isNatList(V)) 104.94/43.17 active(isNatIList(zeros)) -> mark(tt) 104.94/43.17 104.94/43.17 104.94/43.17 104.94/43.17 104.94/43.17 ---------------------------------------- 104.94/43.17 104.94/43.17 (4) 104.94/43.17 Obligation: 104.94/43.17 Q restricted rewrite system: 104.94/43.17 The TRS R consists of the following rules: 104.94/43.17 104.94/43.17 active(zeros) -> mark(cons(0, zeros)) 104.94/43.17 active(U11(tt, L)) -> mark(s(length(L))) 104.94/43.17 active(and(tt, X)) -> mark(X) 104.94/43.17 active(isNat(0)) -> mark(tt) 104.94/43.17 active(isNat(length(V1))) -> mark(isNatList(V1)) 104.94/43.17 active(isNat(s(V1))) -> mark(isNat(V1)) 104.94/43.17 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 104.94/43.17 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 104.94/43.17 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 104.94/43.17 mark(zeros) -> active(zeros) 104.94/43.17 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 104.94/43.17 mark(0) -> active(0) 104.94/43.17 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 104.94/43.17 mark(tt) -> active(tt) 104.94/43.17 mark(s(X)) -> active(s(mark(X))) 104.94/43.17 mark(length(X)) -> active(length(mark(X))) 104.94/43.17 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 104.94/43.17 mark(isNat(X)) -> active(isNat(X)) 104.94/43.17 mark(isNatList(X)) -> active(isNatList(X)) 104.94/43.17 mark(isNatIList(X)) -> active(isNatIList(X)) 104.94/43.17 mark(nil) -> active(nil) 104.94/43.17 cons(mark(X1), X2) -> cons(X1, X2) 104.94/43.17 cons(X1, mark(X2)) -> cons(X1, X2) 104.94/43.17 cons(active(X1), X2) -> cons(X1, X2) 104.94/43.17 cons(X1, active(X2)) -> cons(X1, X2) 104.94/43.17 U11(mark(X1), X2) -> U11(X1, X2) 104.94/43.17 U11(X1, mark(X2)) -> U11(X1, X2) 104.94/43.17 U11(active(X1), X2) -> U11(X1, X2) 104.94/43.17 U11(X1, active(X2)) -> U11(X1, X2) 104.94/43.17 s(mark(X)) -> s(X) 104.94/43.17 s(active(X)) -> s(X) 104.94/43.17 length(mark(X)) -> length(X) 104.94/43.17 length(active(X)) -> length(X) 104.94/43.17 and(mark(X1), X2) -> and(X1, X2) 104.94/43.17 and(X1, mark(X2)) -> and(X1, X2) 104.94/43.17 and(active(X1), X2) -> and(X1, X2) 104.94/43.17 and(X1, active(X2)) -> and(X1, X2) 104.94/43.17 isNat(mark(X)) -> isNat(X) 104.94/43.17 isNat(active(X)) -> isNat(X) 104.94/43.17 isNatList(mark(X)) -> isNatList(X) 104.94/43.17 isNatList(active(X)) -> isNatList(X) 104.94/43.17 isNatIList(mark(X)) -> isNatIList(X) 104.94/43.17 isNatIList(active(X)) -> isNatIList(X) 104.94/43.17 104.94/43.17 The set Q consists of the following terms: 104.94/43.17 104.94/43.17 active(zeros) 104.94/43.17 active(U11(tt, x0)) 104.94/43.17 active(and(tt, x0)) 104.94/43.17 active(isNat(0)) 104.94/43.17 active(isNat(length(x0))) 104.94/43.17 active(isNat(s(x0))) 104.94/43.17 active(isNatIList(x0)) 104.94/43.17 active(isNatList(nil)) 104.94/43.17 active(isNatList(cons(x0, x1))) 104.94/43.17 active(length(nil)) 104.94/43.17 active(length(cons(x0, x1))) 104.94/43.17 mark(zeros) 104.94/43.17 mark(cons(x0, x1)) 104.94/43.17 mark(0) 104.94/43.17 mark(U11(x0, x1)) 104.94/43.17 mark(tt) 104.94/43.17 mark(s(x0)) 104.94/43.17 mark(length(x0)) 104.94/43.17 mark(and(x0, x1)) 104.94/43.17 mark(isNat(x0)) 104.94/43.17 mark(isNatList(x0)) 104.94/43.17 mark(isNatIList(x0)) 104.94/43.17 mark(nil) 104.94/43.17 cons(mark(x0), x1) 104.94/43.17 cons(x0, mark(x1)) 104.94/43.17 cons(active(x0), x1) 104.94/43.17 cons(x0, active(x1)) 104.94/43.17 U11(mark(x0), x1) 104.94/43.17 U11(x0, mark(x1)) 104.94/43.17 U11(active(x0), x1) 104.94/43.17 U11(x0, active(x1)) 104.94/43.17 s(mark(x0)) 104.94/43.17 s(active(x0)) 104.94/43.17 length(mark(x0)) 104.94/43.17 length(active(x0)) 104.94/43.17 and(mark(x0), x1) 104.94/43.17 and(x0, mark(x1)) 104.94/43.17 and(active(x0), x1) 104.94/43.17 and(x0, active(x1)) 104.94/43.17 isNat(mark(x0)) 104.94/43.17 isNat(active(x0)) 104.94/43.17 isNatList(mark(x0)) 104.94/43.17 isNatList(active(x0)) 104.94/43.17 isNatIList(mark(x0)) 104.94/43.17 isNatIList(active(x0)) 104.94/43.17 104.94/43.17 104.94/43.17 ---------------------------------------- 104.94/43.17 104.94/43.17 (5) QTRSRRRProof (EQUIVALENT) 104.94/43.17 Used ordering: 104.94/43.17 Polynomial interpretation [POLO]: 104.94/43.17 104.94/43.17 POL(0) = 0 104.94/43.17 POL(U11(x_1, x_2)) = 2 + x_1 + 2*x_2 104.94/43.17 POL(active(x_1)) = x_1 104.94/43.17 POL(and(x_1, x_2)) = x_1 + x_2 104.94/43.17 POL(cons(x_1, x_2)) = 2*x_1 + 2*x_2 104.94/43.17 POL(isNat(x_1)) = 2*x_1 104.94/43.17 POL(isNatIList(x_1)) = x_1 104.94/43.17 POL(isNatList(x_1)) = x_1 104.94/43.17 POL(length(x_1)) = 2 + 2*x_1 104.94/43.17 POL(mark(x_1)) = x_1 104.94/43.17 POL(nil) = 0 104.94/43.17 POL(s(x_1)) = x_1 104.94/43.17 POL(tt) = 0 104.94/43.17 POL(zeros) = 0 104.94/43.17 With this ordering the following rules can be removed by the rule removal processor [LPAR04] because they are oriented strictly: 104.94/43.17 104.94/43.17 active(isNat(length(V1))) -> mark(isNatList(V1)) 104.94/43.17 104.94/43.17 104.94/43.17 104.94/43.17 104.94/43.17 ---------------------------------------- 104.94/43.17 104.94/43.17 (6) 104.94/43.17 Obligation: 104.94/43.17 Q restricted rewrite system: 104.94/43.17 The TRS R consists of the following rules: 104.94/43.17 104.94/43.17 active(zeros) -> mark(cons(0, zeros)) 104.94/43.17 active(U11(tt, L)) -> mark(s(length(L))) 104.94/43.17 active(and(tt, X)) -> mark(X) 104.94/43.17 active(isNat(0)) -> mark(tt) 104.94/43.17 active(isNat(s(V1))) -> mark(isNat(V1)) 104.94/43.17 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 104.94/43.17 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 104.94/43.17 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 104.94/43.17 mark(zeros) -> active(zeros) 104.94/43.17 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 104.94/43.17 mark(0) -> active(0) 104.94/43.17 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 104.94/43.17 mark(tt) -> active(tt) 104.94/43.17 mark(s(X)) -> active(s(mark(X))) 104.94/43.17 mark(length(X)) -> active(length(mark(X))) 104.94/43.17 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 104.94/43.17 mark(isNat(X)) -> active(isNat(X)) 104.94/43.17 mark(isNatList(X)) -> active(isNatList(X)) 104.94/43.17 mark(isNatIList(X)) -> active(isNatIList(X)) 104.94/43.17 mark(nil) -> active(nil) 104.94/43.17 cons(mark(X1), X2) -> cons(X1, X2) 104.94/43.17 cons(X1, mark(X2)) -> cons(X1, X2) 104.94/43.17 cons(active(X1), X2) -> cons(X1, X2) 104.94/43.17 cons(X1, active(X2)) -> cons(X1, X2) 104.94/43.17 U11(mark(X1), X2) -> U11(X1, X2) 104.94/43.17 U11(X1, mark(X2)) -> U11(X1, X2) 104.94/43.17 U11(active(X1), X2) -> U11(X1, X2) 104.94/43.17 U11(X1, active(X2)) -> U11(X1, X2) 104.94/43.17 s(mark(X)) -> s(X) 104.94/43.17 s(active(X)) -> s(X) 104.94/43.17 length(mark(X)) -> length(X) 104.94/43.17 length(active(X)) -> length(X) 104.94/43.17 and(mark(X1), X2) -> and(X1, X2) 104.94/43.17 and(X1, mark(X2)) -> and(X1, X2) 104.94/43.17 and(active(X1), X2) -> and(X1, X2) 104.94/43.17 and(X1, active(X2)) -> and(X1, X2) 104.94/43.17 isNat(mark(X)) -> isNat(X) 104.94/43.17 isNat(active(X)) -> isNat(X) 104.94/43.17 isNatList(mark(X)) -> isNatList(X) 104.94/43.17 isNatList(active(X)) -> isNatList(X) 104.94/43.17 isNatIList(mark(X)) -> isNatIList(X) 104.94/43.17 isNatIList(active(X)) -> isNatIList(X) 104.94/43.17 104.94/43.17 The set Q consists of the following terms: 104.94/43.17 104.94/43.17 active(zeros) 104.94/43.17 active(U11(tt, x0)) 104.94/43.17 active(and(tt, x0)) 104.94/43.17 active(isNat(0)) 104.94/43.17 active(isNat(length(x0))) 104.94/43.17 active(isNat(s(x0))) 104.94/43.17 active(isNatIList(x0)) 104.94/43.17 active(isNatList(nil)) 104.94/43.17 active(isNatList(cons(x0, x1))) 104.94/43.17 active(length(nil)) 104.94/43.17 active(length(cons(x0, x1))) 104.94/43.17 mark(zeros) 104.94/43.17 mark(cons(x0, x1)) 104.94/43.17 mark(0) 104.94/43.17 mark(U11(x0, x1)) 104.94/43.17 mark(tt) 104.94/43.17 mark(s(x0)) 104.94/43.17 mark(length(x0)) 104.94/43.17 mark(and(x0, x1)) 104.94/43.17 mark(isNat(x0)) 104.94/43.17 mark(isNatList(x0)) 104.94/43.17 mark(isNatIList(x0)) 104.94/43.17 mark(nil) 104.94/43.17 cons(mark(x0), x1) 104.94/43.17 cons(x0, mark(x1)) 104.94/43.17 cons(active(x0), x1) 104.94/43.17 cons(x0, active(x1)) 104.94/43.17 U11(mark(x0), x1) 104.94/43.17 U11(x0, mark(x1)) 104.94/43.17 U11(active(x0), x1) 104.94/43.17 U11(x0, active(x1)) 104.94/43.17 s(mark(x0)) 104.94/43.17 s(active(x0)) 104.94/43.17 length(mark(x0)) 104.94/43.17 length(active(x0)) 104.94/43.17 and(mark(x0), x1) 104.94/43.17 and(x0, mark(x1)) 104.94/43.17 and(active(x0), x1) 104.94/43.17 and(x0, active(x1)) 104.94/43.17 isNat(mark(x0)) 104.94/43.17 isNat(active(x0)) 104.94/43.17 isNatList(mark(x0)) 104.94/43.17 isNatList(active(x0)) 104.94/43.17 isNatIList(mark(x0)) 104.94/43.17 isNatIList(active(x0)) 104.94/43.17 104.94/43.17 104.94/43.17 ---------------------------------------- 104.94/43.17 104.94/43.17 (7) DependencyPairsProof (EQUIVALENT) 104.94/43.17 Using Dependency Pairs [AG00,LPAR04] we result in the following initial DP problem. 104.94/43.17 ---------------------------------------- 104.94/43.17 104.94/43.17 (8) 104.94/43.17 Obligation: 104.94/43.17 Q DP problem: 104.94/43.17 The TRS P consists of the following rules: 104.94/43.17 104.94/43.17 ACTIVE(zeros) -> MARK(cons(0, zeros)) 104.94/43.17 ACTIVE(zeros) -> CONS(0, zeros) 104.94/43.17 ACTIVE(U11(tt, L)) -> MARK(s(length(L))) 104.94/43.17 ACTIVE(U11(tt, L)) -> S(length(L)) 104.94/43.17 ACTIVE(U11(tt, L)) -> LENGTH(L) 104.94/43.17 ACTIVE(and(tt, X)) -> MARK(X) 104.94/43.17 ACTIVE(isNat(0)) -> MARK(tt) 104.94/43.17 ACTIVE(isNat(s(V1))) -> MARK(isNat(V1)) 104.94/43.17 ACTIVE(isNat(s(V1))) -> ISNAT(V1) 104.94/43.17 ACTIVE(isNatIList(cons(V1, V2))) -> MARK(and(isNat(V1), isNatIList(V2))) 104.94/43.17 ACTIVE(isNatIList(cons(V1, V2))) -> AND(isNat(V1), isNatIList(V2)) 104.94/43.17 ACTIVE(isNatIList(cons(V1, V2))) -> ISNAT(V1) 104.94/43.17 ACTIVE(isNatIList(cons(V1, V2))) -> ISNATILIST(V2) 104.94/43.17 ACTIVE(isNatList(cons(V1, V2))) -> MARK(and(isNat(V1), isNatList(V2))) 104.94/43.17 ACTIVE(isNatList(cons(V1, V2))) -> AND(isNat(V1), isNatList(V2)) 104.94/43.17 ACTIVE(isNatList(cons(V1, V2))) -> ISNAT(V1) 104.94/43.17 ACTIVE(isNatList(cons(V1, V2))) -> ISNATLIST(V2) 104.94/43.17 ACTIVE(length(cons(N, L))) -> MARK(U11(and(isNatList(L), isNat(N)), L)) 104.94/43.17 ACTIVE(length(cons(N, L))) -> U11^1(and(isNatList(L), isNat(N)), L) 104.94/43.17 ACTIVE(length(cons(N, L))) -> AND(isNatList(L), isNat(N)) 104.94/43.17 ACTIVE(length(cons(N, L))) -> ISNATLIST(L) 104.94/43.17 ACTIVE(length(cons(N, L))) -> ISNAT(N) 104.94/43.17 MARK(zeros) -> ACTIVE(zeros) 104.94/43.17 MARK(cons(X1, X2)) -> ACTIVE(cons(mark(X1), X2)) 104.94/43.17 MARK(cons(X1, X2)) -> CONS(mark(X1), X2) 104.94/43.17 MARK(cons(X1, X2)) -> MARK(X1) 104.94/43.17 MARK(0) -> ACTIVE(0) 104.94/43.17 MARK(U11(X1, X2)) -> ACTIVE(U11(mark(X1), X2)) 104.94/43.17 MARK(U11(X1, X2)) -> U11^1(mark(X1), X2) 104.94/43.17 MARK(U11(X1, X2)) -> MARK(X1) 104.94/43.17 MARK(tt) -> ACTIVE(tt) 104.94/43.17 MARK(s(X)) -> ACTIVE(s(mark(X))) 104.94/43.17 MARK(s(X)) -> S(mark(X)) 104.94/43.17 MARK(s(X)) -> MARK(X) 104.94/43.17 MARK(length(X)) -> ACTIVE(length(mark(X))) 104.94/43.17 MARK(length(X)) -> LENGTH(mark(X)) 104.94/43.17 MARK(length(X)) -> MARK(X) 104.94/43.17 MARK(and(X1, X2)) -> ACTIVE(and(mark(X1), X2)) 104.94/43.17 MARK(and(X1, X2)) -> AND(mark(X1), X2) 104.94/43.17 MARK(and(X1, X2)) -> MARK(X1) 104.94/43.17 MARK(isNat(X)) -> ACTIVE(isNat(X)) 104.94/43.17 MARK(isNatList(X)) -> ACTIVE(isNatList(X)) 104.94/43.17 MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) 104.94/43.17 MARK(nil) -> ACTIVE(nil) 104.94/43.17 CONS(mark(X1), X2) -> CONS(X1, X2) 104.94/43.17 CONS(X1, mark(X2)) -> CONS(X1, X2) 104.94/43.17 CONS(active(X1), X2) -> CONS(X1, X2) 104.94/43.17 CONS(X1, active(X2)) -> CONS(X1, X2) 104.94/43.17 U11^1(mark(X1), X2) -> U11^1(X1, X2) 104.94/43.17 U11^1(X1, mark(X2)) -> U11^1(X1, X2) 104.94/43.17 U11^1(active(X1), X2) -> U11^1(X1, X2) 104.94/43.17 U11^1(X1, active(X2)) -> U11^1(X1, X2) 104.94/43.17 S(mark(X)) -> S(X) 104.94/43.17 S(active(X)) -> S(X) 104.94/43.17 LENGTH(mark(X)) -> LENGTH(X) 104.94/43.17 LENGTH(active(X)) -> LENGTH(X) 104.94/43.17 AND(mark(X1), X2) -> AND(X1, X2) 104.94/43.17 AND(X1, mark(X2)) -> AND(X1, X2) 104.94/43.17 AND(active(X1), X2) -> AND(X1, X2) 104.94/43.17 AND(X1, active(X2)) -> AND(X1, X2) 104.94/43.17 ISNAT(mark(X)) -> ISNAT(X) 104.94/43.17 ISNAT(active(X)) -> ISNAT(X) 104.94/43.17 ISNATLIST(mark(X)) -> ISNATLIST(X) 104.94/43.17 ISNATLIST(active(X)) -> ISNATLIST(X) 104.94/43.17 ISNATILIST(mark(X)) -> ISNATILIST(X) 104.94/43.17 ISNATILIST(active(X)) -> ISNATILIST(X) 104.94/43.17 104.94/43.17 The TRS R consists of the following rules: 104.94/43.17 104.94/43.17 active(zeros) -> mark(cons(0, zeros)) 104.94/43.17 active(U11(tt, L)) -> mark(s(length(L))) 104.94/43.17 active(and(tt, X)) -> mark(X) 104.94/43.17 active(isNat(0)) -> mark(tt) 104.94/43.17 active(isNat(s(V1))) -> mark(isNat(V1)) 104.94/43.17 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 104.94/43.17 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 104.94/43.17 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 104.94/43.17 mark(zeros) -> active(zeros) 104.94/43.17 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 104.94/43.17 mark(0) -> active(0) 104.94/43.17 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 104.94/43.17 mark(tt) -> active(tt) 104.94/43.17 mark(s(X)) -> active(s(mark(X))) 104.94/43.17 mark(length(X)) -> active(length(mark(X))) 104.94/43.17 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 104.94/43.17 mark(isNat(X)) -> active(isNat(X)) 104.94/43.17 mark(isNatList(X)) -> active(isNatList(X)) 104.94/43.17 mark(isNatIList(X)) -> active(isNatIList(X)) 104.94/43.17 mark(nil) -> active(nil) 104.94/43.17 cons(mark(X1), X2) -> cons(X1, X2) 104.94/43.17 cons(X1, mark(X2)) -> cons(X1, X2) 104.94/43.17 cons(active(X1), X2) -> cons(X1, X2) 104.94/43.17 cons(X1, active(X2)) -> cons(X1, X2) 104.94/43.17 U11(mark(X1), X2) -> U11(X1, X2) 104.94/43.17 U11(X1, mark(X2)) -> U11(X1, X2) 104.94/43.17 U11(active(X1), X2) -> U11(X1, X2) 104.94/43.17 U11(X1, active(X2)) -> U11(X1, X2) 104.94/43.17 s(mark(X)) -> s(X) 104.94/43.17 s(active(X)) -> s(X) 104.94/43.17 length(mark(X)) -> length(X) 104.94/43.17 length(active(X)) -> length(X) 104.94/43.17 and(mark(X1), X2) -> and(X1, X2) 104.94/43.17 and(X1, mark(X2)) -> and(X1, X2) 104.94/43.17 and(active(X1), X2) -> and(X1, X2) 104.94/43.17 and(X1, active(X2)) -> and(X1, X2) 104.94/43.17 isNat(mark(X)) -> isNat(X) 104.94/43.17 isNat(active(X)) -> isNat(X) 104.94/43.17 isNatList(mark(X)) -> isNatList(X) 104.94/43.17 isNatList(active(X)) -> isNatList(X) 104.94/43.17 isNatIList(mark(X)) -> isNatIList(X) 104.94/43.17 isNatIList(active(X)) -> isNatIList(X) 104.94/43.17 104.94/43.17 The set Q consists of the following terms: 104.94/43.17 104.94/43.17 active(zeros) 104.94/43.17 active(U11(tt, x0)) 104.94/43.17 active(and(tt, x0)) 104.94/43.17 active(isNat(0)) 104.94/43.17 active(isNat(length(x0))) 104.94/43.17 active(isNat(s(x0))) 104.94/43.17 active(isNatIList(x0)) 104.94/43.17 active(isNatList(nil)) 104.94/43.17 active(isNatList(cons(x0, x1))) 104.94/43.17 active(length(nil)) 104.94/43.17 active(length(cons(x0, x1))) 104.94/43.17 mark(zeros) 104.94/43.17 mark(cons(x0, x1)) 104.94/43.17 mark(0) 104.94/43.17 mark(U11(x0, x1)) 104.94/43.17 mark(tt) 104.94/43.17 mark(s(x0)) 104.94/43.17 mark(length(x0)) 104.94/43.17 mark(and(x0, x1)) 104.94/43.17 mark(isNat(x0)) 104.94/43.17 mark(isNatList(x0)) 104.94/43.17 mark(isNatIList(x0)) 104.94/43.17 mark(nil) 104.94/43.17 cons(mark(x0), x1) 104.94/43.17 cons(x0, mark(x1)) 104.94/43.17 cons(active(x0), x1) 104.94/43.17 cons(x0, active(x1)) 104.94/43.17 U11(mark(x0), x1) 104.94/43.17 U11(x0, mark(x1)) 104.94/43.17 U11(active(x0), x1) 104.94/43.17 U11(x0, active(x1)) 104.94/43.17 s(mark(x0)) 104.94/43.17 s(active(x0)) 104.94/43.17 length(mark(x0)) 104.94/43.17 length(active(x0)) 104.94/43.17 and(mark(x0), x1) 104.94/43.17 and(x0, mark(x1)) 104.94/43.17 and(active(x0), x1) 104.94/43.17 and(x0, active(x1)) 104.94/43.17 isNat(mark(x0)) 104.94/43.17 isNat(active(x0)) 104.94/43.17 isNatList(mark(x0)) 104.94/43.17 isNatList(active(x0)) 104.94/43.17 isNatIList(mark(x0)) 104.94/43.17 isNatIList(active(x0)) 104.94/43.17 104.94/43.17 We have to consider all minimal (P,Q,R)-chains. 104.94/43.17 ---------------------------------------- 104.94/43.17 104.94/43.17 (9) DependencyGraphProof (EQUIVALENT) 104.94/43.17 The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 10 SCCs with 23 less nodes. 104.94/43.17 ---------------------------------------- 104.94/43.17 104.94/43.17 (10) 104.94/43.17 Complex Obligation (AND) 104.94/43.17 104.94/43.17 ---------------------------------------- 104.94/43.17 104.94/43.17 (11) 104.94/43.17 Obligation: 104.94/43.17 Q DP problem: 104.94/43.17 The TRS P consists of the following rules: 104.94/43.17 104.94/43.17 ISNATILIST(active(X)) -> ISNATILIST(X) 104.94/43.17 ISNATILIST(mark(X)) -> ISNATILIST(X) 104.94/43.17 104.94/43.17 The TRS R consists of the following rules: 104.94/43.17 104.94/43.17 active(zeros) -> mark(cons(0, zeros)) 104.94/43.17 active(U11(tt, L)) -> mark(s(length(L))) 104.94/43.17 active(and(tt, X)) -> mark(X) 104.94/43.17 active(isNat(0)) -> mark(tt) 104.94/43.17 active(isNat(s(V1))) -> mark(isNat(V1)) 104.94/43.17 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 104.94/43.17 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 104.94/43.17 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 104.94/43.17 mark(zeros) -> active(zeros) 104.94/43.17 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 104.94/43.17 mark(0) -> active(0) 104.94/43.17 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 104.94/43.17 mark(tt) -> active(tt) 104.94/43.17 mark(s(X)) -> active(s(mark(X))) 104.94/43.17 mark(length(X)) -> active(length(mark(X))) 104.94/43.17 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 104.94/43.17 mark(isNat(X)) -> active(isNat(X)) 104.94/43.17 mark(isNatList(X)) -> active(isNatList(X)) 104.94/43.17 mark(isNatIList(X)) -> active(isNatIList(X)) 104.94/43.17 mark(nil) -> active(nil) 104.94/43.17 cons(mark(X1), X2) -> cons(X1, X2) 104.94/43.17 cons(X1, mark(X2)) -> cons(X1, X2) 104.94/43.17 cons(active(X1), X2) -> cons(X1, X2) 104.94/43.17 cons(X1, active(X2)) -> cons(X1, X2) 104.94/43.17 U11(mark(X1), X2) -> U11(X1, X2) 104.94/43.17 U11(X1, mark(X2)) -> U11(X1, X2) 104.94/43.17 U11(active(X1), X2) -> U11(X1, X2) 104.94/43.17 U11(X1, active(X2)) -> U11(X1, X2) 104.94/43.17 s(mark(X)) -> s(X) 104.94/43.17 s(active(X)) -> s(X) 104.94/43.17 length(mark(X)) -> length(X) 104.94/43.17 length(active(X)) -> length(X) 104.94/43.17 and(mark(X1), X2) -> and(X1, X2) 104.94/43.17 and(X1, mark(X2)) -> and(X1, X2) 104.94/43.17 and(active(X1), X2) -> and(X1, X2) 104.94/43.17 and(X1, active(X2)) -> and(X1, X2) 104.94/43.17 isNat(mark(X)) -> isNat(X) 104.94/43.17 isNat(active(X)) -> isNat(X) 104.94/43.17 isNatList(mark(X)) -> isNatList(X) 104.94/43.17 isNatList(active(X)) -> isNatList(X) 104.94/43.17 isNatIList(mark(X)) -> isNatIList(X) 104.94/43.17 isNatIList(active(X)) -> isNatIList(X) 104.94/43.17 104.94/43.17 The set Q consists of the following terms: 104.94/43.17 104.94/43.17 active(zeros) 104.94/43.17 active(U11(tt, x0)) 104.94/43.17 active(and(tt, x0)) 104.94/43.17 active(isNat(0)) 104.94/43.17 active(isNat(length(x0))) 104.94/43.17 active(isNat(s(x0))) 104.94/43.17 active(isNatIList(x0)) 104.94/43.17 active(isNatList(nil)) 104.94/43.17 active(isNatList(cons(x0, x1))) 104.94/43.17 active(length(nil)) 104.94/43.17 active(length(cons(x0, x1))) 104.94/43.17 mark(zeros) 104.94/43.17 mark(cons(x0, x1)) 104.94/43.17 mark(0) 104.94/43.17 mark(U11(x0, x1)) 104.94/43.17 mark(tt) 104.94/43.17 mark(s(x0)) 104.94/43.17 mark(length(x0)) 104.94/43.17 mark(and(x0, x1)) 104.94/43.17 mark(isNat(x0)) 104.94/43.17 mark(isNatList(x0)) 104.94/43.17 mark(isNatIList(x0)) 104.94/43.17 mark(nil) 104.94/43.17 cons(mark(x0), x1) 104.94/43.17 cons(x0, mark(x1)) 104.94/43.17 cons(active(x0), x1) 104.94/43.17 cons(x0, active(x1)) 104.94/43.17 U11(mark(x0), x1) 104.94/43.17 U11(x0, mark(x1)) 104.94/43.17 U11(active(x0), x1) 104.94/43.17 U11(x0, active(x1)) 104.94/43.17 s(mark(x0)) 104.94/43.17 s(active(x0)) 104.94/43.17 length(mark(x0)) 104.94/43.17 length(active(x0)) 104.94/43.17 and(mark(x0), x1) 104.94/43.17 and(x0, mark(x1)) 104.94/43.17 and(active(x0), x1) 104.94/43.17 and(x0, active(x1)) 104.94/43.17 isNat(mark(x0)) 104.94/43.17 isNat(active(x0)) 104.94/43.17 isNatList(mark(x0)) 104.94/43.17 isNatList(active(x0)) 104.94/43.17 isNatIList(mark(x0)) 104.94/43.17 isNatIList(active(x0)) 104.94/43.17 104.94/43.17 We have to consider all minimal (P,Q,R)-chains. 104.94/43.17 ---------------------------------------- 104.94/43.17 104.94/43.17 (12) UsableRulesProof (EQUIVALENT) 104.94/43.17 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. 104.94/43.17 ---------------------------------------- 104.94/43.17 104.94/43.17 (13) 104.94/43.17 Obligation: 104.94/43.17 Q DP problem: 104.94/43.17 The TRS P consists of the following rules: 104.94/43.17 104.94/43.17 ISNATILIST(active(X)) -> ISNATILIST(X) 104.94/43.17 ISNATILIST(mark(X)) -> ISNATILIST(X) 104.94/43.17 104.94/43.17 R is empty. 104.94/43.17 The set Q consists of the following terms: 104.94/43.17 104.94/43.17 active(zeros) 104.94/43.17 active(U11(tt, x0)) 104.94/43.17 active(and(tt, x0)) 104.94/43.17 active(isNat(0)) 104.94/43.17 active(isNat(length(x0))) 104.94/43.17 active(isNat(s(x0))) 104.94/43.17 active(isNatIList(x0)) 104.94/43.17 active(isNatList(nil)) 104.94/43.17 active(isNatList(cons(x0, x1))) 104.94/43.17 active(length(nil)) 104.94/43.17 active(length(cons(x0, x1))) 104.94/43.17 mark(zeros) 104.94/43.17 mark(cons(x0, x1)) 104.94/43.17 mark(0) 104.94/43.17 mark(U11(x0, x1)) 104.94/43.17 mark(tt) 104.94/43.17 mark(s(x0)) 104.94/43.17 mark(length(x0)) 104.94/43.17 mark(and(x0, x1)) 104.94/43.17 mark(isNat(x0)) 104.94/43.17 mark(isNatList(x0)) 104.94/43.17 mark(isNatIList(x0)) 104.94/43.17 mark(nil) 104.94/43.17 cons(mark(x0), x1) 104.94/43.17 cons(x0, mark(x1)) 104.94/43.17 cons(active(x0), x1) 104.94/43.17 cons(x0, active(x1)) 104.94/43.17 U11(mark(x0), x1) 104.94/43.17 U11(x0, mark(x1)) 104.94/43.17 U11(active(x0), x1) 104.94/43.17 U11(x0, active(x1)) 104.94/43.17 s(mark(x0)) 104.94/43.17 s(active(x0)) 104.94/43.17 length(mark(x0)) 104.94/43.17 length(active(x0)) 104.94/43.17 and(mark(x0), x1) 104.94/43.17 and(x0, mark(x1)) 104.94/43.17 and(active(x0), x1) 104.94/43.17 and(x0, active(x1)) 104.94/43.17 isNat(mark(x0)) 104.94/43.17 isNat(active(x0)) 104.94/43.17 isNatList(mark(x0)) 104.94/43.17 isNatList(active(x0)) 104.94/43.17 isNatIList(mark(x0)) 104.94/43.17 isNatIList(active(x0)) 104.94/43.17 104.94/43.17 We have to consider all minimal (P,Q,R)-chains. 104.94/43.17 ---------------------------------------- 104.94/43.17 104.94/43.17 (14) QReductionProof (EQUIVALENT) 104.94/43.17 We deleted the following terms from Q as each root-symbol of these terms does neither occur in P nor in R.[THIEMANN]. 104.94/43.17 104.94/43.17 cons(mark(x0), x1) 104.94/43.17 cons(x0, mark(x1)) 104.94/43.17 cons(active(x0), x1) 104.94/43.17 cons(x0, active(x1)) 104.94/43.17 U11(mark(x0), x1) 104.94/43.17 U11(x0, mark(x1)) 104.94/43.17 U11(active(x0), x1) 104.94/43.17 U11(x0, active(x1)) 104.94/43.17 s(mark(x0)) 104.94/43.17 s(active(x0)) 104.94/43.17 length(mark(x0)) 104.94/43.17 length(active(x0)) 104.94/43.17 and(mark(x0), x1) 104.94/43.17 and(x0, mark(x1)) 104.94/43.17 and(active(x0), x1) 104.94/43.17 and(x0, active(x1)) 104.94/43.17 isNat(mark(x0)) 104.94/43.17 isNat(active(x0)) 104.94/43.17 isNatList(mark(x0)) 104.94/43.17 isNatList(active(x0)) 104.94/43.17 isNatIList(mark(x0)) 104.94/43.17 isNatIList(active(x0)) 104.94/43.17 104.94/43.17 104.94/43.17 ---------------------------------------- 104.94/43.17 104.94/43.17 (15) 104.94/43.17 Obligation: 104.94/43.17 Q DP problem: 104.94/43.17 The TRS P consists of the following rules: 104.94/43.17 104.94/43.17 ISNATILIST(active(X)) -> ISNATILIST(X) 104.94/43.17 ISNATILIST(mark(X)) -> ISNATILIST(X) 104.94/43.17 104.94/43.17 R is empty. 104.94/43.17 The set Q consists of the following terms: 104.94/43.17 104.94/43.17 active(zeros) 104.94/43.17 active(U11(tt, x0)) 104.94/43.17 active(and(tt, x0)) 104.94/43.17 active(isNat(0)) 104.94/43.17 active(isNat(length(x0))) 104.94/43.17 active(isNat(s(x0))) 104.94/43.17 active(isNatIList(x0)) 104.94/43.17 active(isNatList(nil)) 104.94/43.17 active(isNatList(cons(x0, x1))) 104.94/43.17 active(length(nil)) 104.94/43.17 active(length(cons(x0, x1))) 104.94/43.17 mark(zeros) 104.94/43.17 mark(cons(x0, x1)) 104.94/43.17 mark(0) 104.94/43.17 mark(U11(x0, x1)) 104.94/43.17 mark(tt) 104.94/43.17 mark(s(x0)) 104.94/43.17 mark(length(x0)) 104.94/43.17 mark(and(x0, x1)) 104.94/43.17 mark(isNat(x0)) 104.94/43.17 mark(isNatList(x0)) 104.94/43.17 mark(isNatIList(x0)) 104.94/43.17 mark(nil) 104.94/43.17 104.94/43.17 We have to consider all minimal (P,Q,R)-chains. 104.94/43.17 ---------------------------------------- 104.94/43.17 104.94/43.17 (16) QDPSizeChangeProof (EQUIVALENT) 104.94/43.17 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. 104.94/43.17 104.94/43.17 From the DPs we obtained the following set of size-change graphs: 104.94/43.17 *ISNATILIST(active(X)) -> ISNATILIST(X) 104.94/43.17 The graph contains the following edges 1 > 1 104.94/43.17 104.94/43.17 104.94/43.17 *ISNATILIST(mark(X)) -> ISNATILIST(X) 104.94/43.17 The graph contains the following edges 1 > 1 104.94/43.17 104.94/43.17 104.94/43.17 ---------------------------------------- 104.94/43.17 104.94/43.17 (17) 104.94/43.17 YES 104.94/43.17 104.94/43.17 ---------------------------------------- 104.94/43.17 104.94/43.17 (18) 104.94/43.17 Obligation: 104.94/43.17 Q DP problem: 104.94/43.17 The TRS P consists of the following rules: 104.94/43.17 104.94/43.17 ISNATLIST(active(X)) -> ISNATLIST(X) 104.94/43.17 ISNATLIST(mark(X)) -> ISNATLIST(X) 104.94/43.17 104.94/43.17 The TRS R consists of the following rules: 104.94/43.17 104.94/43.17 active(zeros) -> mark(cons(0, zeros)) 104.94/43.17 active(U11(tt, L)) -> mark(s(length(L))) 104.94/43.17 active(and(tt, X)) -> mark(X) 104.94/43.17 active(isNat(0)) -> mark(tt) 104.94/43.17 active(isNat(s(V1))) -> mark(isNat(V1)) 104.94/43.17 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 104.94/43.17 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 104.94/43.17 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 104.94/43.17 mark(zeros) -> active(zeros) 104.94/43.17 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 104.94/43.17 mark(0) -> active(0) 104.94/43.17 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 104.94/43.17 mark(tt) -> active(tt) 104.94/43.17 mark(s(X)) -> active(s(mark(X))) 104.94/43.17 mark(length(X)) -> active(length(mark(X))) 104.94/43.17 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 104.94/43.17 mark(isNat(X)) -> active(isNat(X)) 104.94/43.17 mark(isNatList(X)) -> active(isNatList(X)) 104.94/43.17 mark(isNatIList(X)) -> active(isNatIList(X)) 104.94/43.17 mark(nil) -> active(nil) 104.94/43.17 cons(mark(X1), X2) -> cons(X1, X2) 104.94/43.17 cons(X1, mark(X2)) -> cons(X1, X2) 104.94/43.17 cons(active(X1), X2) -> cons(X1, X2) 104.94/43.17 cons(X1, active(X2)) -> cons(X1, X2) 104.94/43.17 U11(mark(X1), X2) -> U11(X1, X2) 104.94/43.17 U11(X1, mark(X2)) -> U11(X1, X2) 104.94/43.17 U11(active(X1), X2) -> U11(X1, X2) 104.94/43.17 U11(X1, active(X2)) -> U11(X1, X2) 104.94/43.17 s(mark(X)) -> s(X) 104.94/43.17 s(active(X)) -> s(X) 104.94/43.17 length(mark(X)) -> length(X) 104.94/43.17 length(active(X)) -> length(X) 104.94/43.17 and(mark(X1), X2) -> and(X1, X2) 104.94/43.17 and(X1, mark(X2)) -> and(X1, X2) 104.94/43.17 and(active(X1), X2) -> and(X1, X2) 104.94/43.17 and(X1, active(X2)) -> and(X1, X2) 104.94/43.17 isNat(mark(X)) -> isNat(X) 104.94/43.17 isNat(active(X)) -> isNat(X) 104.94/43.17 isNatList(mark(X)) -> isNatList(X) 104.94/43.17 isNatList(active(X)) -> isNatList(X) 104.94/43.17 isNatIList(mark(X)) -> isNatIList(X) 104.94/43.17 isNatIList(active(X)) -> isNatIList(X) 104.94/43.17 104.94/43.17 The set Q consists of the following terms: 104.94/43.17 104.94/43.17 active(zeros) 104.94/43.17 active(U11(tt, x0)) 104.94/43.17 active(and(tt, x0)) 104.94/43.17 active(isNat(0)) 104.94/43.17 active(isNat(length(x0))) 104.94/43.17 active(isNat(s(x0))) 104.94/43.17 active(isNatIList(x0)) 104.94/43.17 active(isNatList(nil)) 104.94/43.17 active(isNatList(cons(x0, x1))) 104.94/43.17 active(length(nil)) 104.94/43.17 active(length(cons(x0, x1))) 104.94/43.17 mark(zeros) 104.94/43.17 mark(cons(x0, x1)) 104.94/43.17 mark(0) 104.94/43.17 mark(U11(x0, x1)) 104.94/43.17 mark(tt) 104.94/43.17 mark(s(x0)) 104.94/43.17 mark(length(x0)) 104.94/43.17 mark(and(x0, x1)) 104.94/43.17 mark(isNat(x0)) 104.94/43.17 mark(isNatList(x0)) 104.94/43.17 mark(isNatIList(x0)) 104.94/43.17 mark(nil) 104.94/43.17 cons(mark(x0), x1) 104.94/43.17 cons(x0, mark(x1)) 104.94/43.17 cons(active(x0), x1) 104.94/43.17 cons(x0, active(x1)) 104.94/43.17 U11(mark(x0), x1) 104.94/43.17 U11(x0, mark(x1)) 104.94/43.17 U11(active(x0), x1) 104.94/43.17 U11(x0, active(x1)) 104.94/43.17 s(mark(x0)) 104.94/43.17 s(active(x0)) 104.94/43.17 length(mark(x0)) 104.94/43.17 length(active(x0)) 104.94/43.17 and(mark(x0), x1) 104.94/43.17 and(x0, mark(x1)) 104.94/43.17 and(active(x0), x1) 104.94/43.17 and(x0, active(x1)) 104.94/43.17 isNat(mark(x0)) 104.94/43.17 isNat(active(x0)) 104.94/43.17 isNatList(mark(x0)) 104.94/43.17 isNatList(active(x0)) 104.94/43.17 isNatIList(mark(x0)) 104.94/43.17 isNatIList(active(x0)) 104.94/43.17 104.94/43.17 We have to consider all minimal (P,Q,R)-chains. 104.94/43.17 ---------------------------------------- 104.94/43.17 104.94/43.17 (19) UsableRulesProof (EQUIVALENT) 104.94/43.17 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. 104.94/43.17 ---------------------------------------- 104.94/43.17 104.94/43.17 (20) 104.94/43.17 Obligation: 104.94/43.17 Q DP problem: 104.94/43.17 The TRS P consists of the following rules: 104.94/43.17 104.94/43.17 ISNATLIST(active(X)) -> ISNATLIST(X) 104.94/43.17 ISNATLIST(mark(X)) -> ISNATLIST(X) 104.94/43.17 104.94/43.17 R is empty. 104.94/43.17 The set Q consists of the following terms: 104.94/43.17 104.94/43.17 active(zeros) 104.94/43.17 active(U11(tt, x0)) 104.94/43.17 active(and(tt, x0)) 104.94/43.17 active(isNat(0)) 104.94/43.17 active(isNat(length(x0))) 104.94/43.17 active(isNat(s(x0))) 104.94/43.17 active(isNatIList(x0)) 104.94/43.17 active(isNatList(nil)) 104.94/43.17 active(isNatList(cons(x0, x1))) 104.94/43.17 active(length(nil)) 104.94/43.17 active(length(cons(x0, x1))) 104.94/43.17 mark(zeros) 104.94/43.17 mark(cons(x0, x1)) 104.94/43.17 mark(0) 104.94/43.17 mark(U11(x0, x1)) 104.94/43.17 mark(tt) 104.94/43.17 mark(s(x0)) 104.94/43.17 mark(length(x0)) 104.94/43.17 mark(and(x0, x1)) 104.94/43.17 mark(isNat(x0)) 104.94/43.17 mark(isNatList(x0)) 104.94/43.17 mark(isNatIList(x0)) 104.94/43.17 mark(nil) 104.94/43.17 cons(mark(x0), x1) 104.94/43.17 cons(x0, mark(x1)) 104.94/43.17 cons(active(x0), x1) 104.94/43.17 cons(x0, active(x1)) 104.94/43.17 U11(mark(x0), x1) 104.94/43.17 U11(x0, mark(x1)) 104.94/43.17 U11(active(x0), x1) 104.94/43.17 U11(x0, active(x1)) 104.94/43.17 s(mark(x0)) 104.94/43.17 s(active(x0)) 104.94/43.17 length(mark(x0)) 104.94/43.17 length(active(x0)) 104.94/43.17 and(mark(x0), x1) 104.94/43.17 and(x0, mark(x1)) 104.94/43.17 and(active(x0), x1) 104.94/43.17 and(x0, active(x1)) 104.94/43.17 isNat(mark(x0)) 104.94/43.17 isNat(active(x0)) 104.94/43.17 isNatList(mark(x0)) 104.94/43.17 isNatList(active(x0)) 104.94/43.17 isNatIList(mark(x0)) 104.94/43.17 isNatIList(active(x0)) 104.94/43.17 104.94/43.17 We have to consider all minimal (P,Q,R)-chains. 104.94/43.17 ---------------------------------------- 104.94/43.17 104.94/43.17 (21) QReductionProof (EQUIVALENT) 104.94/43.17 We deleted the following terms from Q as each root-symbol of these terms does neither occur in P nor in R.[THIEMANN]. 104.94/43.17 104.94/43.17 cons(mark(x0), x1) 104.94/43.17 cons(x0, mark(x1)) 104.94/43.17 cons(active(x0), x1) 104.94/43.17 cons(x0, active(x1)) 104.94/43.17 U11(mark(x0), x1) 104.94/43.17 U11(x0, mark(x1)) 104.94/43.17 U11(active(x0), x1) 104.94/43.17 U11(x0, active(x1)) 104.94/43.17 s(mark(x0)) 104.94/43.17 s(active(x0)) 104.94/43.17 length(mark(x0)) 104.94/43.17 length(active(x0)) 104.94/43.17 and(mark(x0), x1) 104.94/43.17 and(x0, mark(x1)) 104.94/43.17 and(active(x0), x1) 104.94/43.17 and(x0, active(x1)) 104.94/43.17 isNat(mark(x0)) 104.94/43.17 isNat(active(x0)) 104.94/43.17 isNatList(mark(x0)) 104.94/43.17 isNatList(active(x0)) 104.94/43.17 isNatIList(mark(x0)) 104.94/43.17 isNatIList(active(x0)) 104.94/43.17 104.94/43.17 104.94/43.17 ---------------------------------------- 104.94/43.17 104.94/43.17 (22) 104.94/43.17 Obligation: 104.94/43.17 Q DP problem: 104.94/43.17 The TRS P consists of the following rules: 104.94/43.17 104.94/43.17 ISNATLIST(active(X)) -> ISNATLIST(X) 104.94/43.17 ISNATLIST(mark(X)) -> ISNATLIST(X) 104.94/43.17 104.94/43.17 R is empty. 104.94/43.17 The set Q consists of the following terms: 104.94/43.17 104.94/43.17 active(zeros) 104.94/43.17 active(U11(tt, x0)) 104.94/43.17 active(and(tt, x0)) 104.94/43.17 active(isNat(0)) 104.94/43.17 active(isNat(length(x0))) 104.94/43.17 active(isNat(s(x0))) 104.94/43.17 active(isNatIList(x0)) 104.94/43.17 active(isNatList(nil)) 104.94/43.17 active(isNatList(cons(x0, x1))) 104.94/43.17 active(length(nil)) 104.94/43.17 active(length(cons(x0, x1))) 104.94/43.17 mark(zeros) 104.94/43.17 mark(cons(x0, x1)) 104.94/43.17 mark(0) 104.94/43.17 mark(U11(x0, x1)) 104.94/43.17 mark(tt) 104.94/43.17 mark(s(x0)) 104.94/43.17 mark(length(x0)) 104.94/43.17 mark(and(x0, x1)) 104.94/43.17 mark(isNat(x0)) 104.94/43.17 mark(isNatList(x0)) 104.94/43.17 mark(isNatIList(x0)) 104.94/43.17 mark(nil) 104.94/43.17 104.94/43.17 We have to consider all minimal (P,Q,R)-chains. 104.94/43.17 ---------------------------------------- 104.94/43.17 104.94/43.17 (23) QDPSizeChangeProof (EQUIVALENT) 104.94/43.17 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. 104.94/43.17 104.94/43.17 From the DPs we obtained the following set of size-change graphs: 104.94/43.17 *ISNATLIST(active(X)) -> ISNATLIST(X) 104.94/43.17 The graph contains the following edges 1 > 1 104.94/43.17 104.94/43.17 104.94/43.17 *ISNATLIST(mark(X)) -> ISNATLIST(X) 104.94/43.17 The graph contains the following edges 1 > 1 104.94/43.17 104.94/43.17 104.94/43.17 ---------------------------------------- 104.94/43.17 104.94/43.17 (24) 104.94/43.17 YES 104.94/43.17 104.94/43.17 ---------------------------------------- 104.94/43.17 104.94/43.17 (25) 104.94/43.17 Obligation: 104.94/43.17 Q DP problem: 104.94/43.17 The TRS P consists of the following rules: 104.94/43.17 104.94/43.17 ISNAT(active(X)) -> ISNAT(X) 104.94/43.17 ISNAT(mark(X)) -> ISNAT(X) 104.94/43.17 104.94/43.17 The TRS R consists of the following rules: 104.94/43.17 104.94/43.17 active(zeros) -> mark(cons(0, zeros)) 104.94/43.17 active(U11(tt, L)) -> mark(s(length(L))) 104.94/43.17 active(and(tt, X)) -> mark(X) 104.94/43.17 active(isNat(0)) -> mark(tt) 104.94/43.17 active(isNat(s(V1))) -> mark(isNat(V1)) 104.94/43.17 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 104.94/43.17 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 104.94/43.17 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 104.94/43.17 mark(zeros) -> active(zeros) 104.94/43.17 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 104.94/43.17 mark(0) -> active(0) 104.94/43.17 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 104.94/43.17 mark(tt) -> active(tt) 104.94/43.17 mark(s(X)) -> active(s(mark(X))) 104.94/43.17 mark(length(X)) -> active(length(mark(X))) 104.94/43.17 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 104.94/43.17 mark(isNat(X)) -> active(isNat(X)) 104.94/43.17 mark(isNatList(X)) -> active(isNatList(X)) 104.94/43.17 mark(isNatIList(X)) -> active(isNatIList(X)) 104.94/43.17 mark(nil) -> active(nil) 104.94/43.17 cons(mark(X1), X2) -> cons(X1, X2) 104.94/43.17 cons(X1, mark(X2)) -> cons(X1, X2) 104.94/43.17 cons(active(X1), X2) -> cons(X1, X2) 104.94/43.17 cons(X1, active(X2)) -> cons(X1, X2) 104.94/43.17 U11(mark(X1), X2) -> U11(X1, X2) 104.94/43.17 U11(X1, mark(X2)) -> U11(X1, X2) 104.94/43.17 U11(active(X1), X2) -> U11(X1, X2) 104.94/43.17 U11(X1, active(X2)) -> U11(X1, X2) 104.94/43.17 s(mark(X)) -> s(X) 104.94/43.17 s(active(X)) -> s(X) 104.94/43.17 length(mark(X)) -> length(X) 104.94/43.17 length(active(X)) -> length(X) 104.94/43.17 and(mark(X1), X2) -> and(X1, X2) 104.94/43.17 and(X1, mark(X2)) -> and(X1, X2) 104.94/43.17 and(active(X1), X2) -> and(X1, X2) 104.94/43.17 and(X1, active(X2)) -> and(X1, X2) 104.94/43.17 isNat(mark(X)) -> isNat(X) 104.94/43.17 isNat(active(X)) -> isNat(X) 104.94/43.17 isNatList(mark(X)) -> isNatList(X) 104.94/43.17 isNatList(active(X)) -> isNatList(X) 104.94/43.17 isNatIList(mark(X)) -> isNatIList(X) 104.94/43.17 isNatIList(active(X)) -> isNatIList(X) 104.94/43.17 104.94/43.17 The set Q consists of the following terms: 104.94/43.17 104.94/43.17 active(zeros) 104.94/43.17 active(U11(tt, x0)) 104.94/43.17 active(and(tt, x0)) 104.94/43.17 active(isNat(0)) 104.94/43.17 active(isNat(length(x0))) 104.94/43.17 active(isNat(s(x0))) 104.94/43.17 active(isNatIList(x0)) 104.94/43.17 active(isNatList(nil)) 104.94/43.17 active(isNatList(cons(x0, x1))) 104.94/43.17 active(length(nil)) 104.94/43.17 active(length(cons(x0, x1))) 104.94/43.17 mark(zeros) 104.94/43.17 mark(cons(x0, x1)) 104.94/43.17 mark(0) 104.94/43.17 mark(U11(x0, x1)) 104.94/43.17 mark(tt) 104.94/43.17 mark(s(x0)) 104.94/43.17 mark(length(x0)) 104.94/43.17 mark(and(x0, x1)) 104.94/43.17 mark(isNat(x0)) 104.94/43.17 mark(isNatList(x0)) 104.94/43.17 mark(isNatIList(x0)) 104.94/43.17 mark(nil) 104.94/43.17 cons(mark(x0), x1) 104.94/43.17 cons(x0, mark(x1)) 104.94/43.17 cons(active(x0), x1) 104.94/43.17 cons(x0, active(x1)) 104.94/43.17 U11(mark(x0), x1) 104.94/43.17 U11(x0, mark(x1)) 104.94/43.17 U11(active(x0), x1) 104.94/43.17 U11(x0, active(x1)) 104.94/43.17 s(mark(x0)) 104.94/43.17 s(active(x0)) 104.94/43.17 length(mark(x0)) 104.94/43.17 length(active(x0)) 104.94/43.17 and(mark(x0), x1) 104.94/43.17 and(x0, mark(x1)) 104.94/43.17 and(active(x0), x1) 104.94/43.17 and(x0, active(x1)) 104.94/43.17 isNat(mark(x0)) 104.94/43.17 isNat(active(x0)) 104.94/43.17 isNatList(mark(x0)) 104.94/43.17 isNatList(active(x0)) 104.94/43.17 isNatIList(mark(x0)) 104.94/43.17 isNatIList(active(x0)) 104.94/43.17 104.94/43.17 We have to consider all minimal (P,Q,R)-chains. 104.94/43.17 ---------------------------------------- 104.94/43.17 104.94/43.17 (26) UsableRulesProof (EQUIVALENT) 104.94/43.17 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. 104.94/43.17 ---------------------------------------- 104.94/43.17 104.94/43.17 (27) 104.94/43.17 Obligation: 104.94/43.17 Q DP problem: 104.94/43.17 The TRS P consists of the following rules: 104.94/43.17 104.94/43.17 ISNAT(active(X)) -> ISNAT(X) 104.94/43.17 ISNAT(mark(X)) -> ISNAT(X) 104.94/43.17 104.94/43.17 R is empty. 104.94/43.17 The set Q consists of the following terms: 104.94/43.17 104.94/43.17 active(zeros) 104.94/43.17 active(U11(tt, x0)) 104.94/43.17 active(and(tt, x0)) 104.94/43.17 active(isNat(0)) 104.94/43.17 active(isNat(length(x0))) 104.94/43.17 active(isNat(s(x0))) 104.94/43.17 active(isNatIList(x0)) 104.94/43.17 active(isNatList(nil)) 104.94/43.17 active(isNatList(cons(x0, x1))) 104.94/43.17 active(length(nil)) 104.94/43.17 active(length(cons(x0, x1))) 104.94/43.17 mark(zeros) 104.94/43.17 mark(cons(x0, x1)) 104.94/43.17 mark(0) 104.94/43.17 mark(U11(x0, x1)) 104.94/43.17 mark(tt) 104.94/43.17 mark(s(x0)) 104.94/43.17 mark(length(x0)) 104.94/43.17 mark(and(x0, x1)) 104.94/43.17 mark(isNat(x0)) 104.94/43.17 mark(isNatList(x0)) 104.94/43.17 mark(isNatIList(x0)) 104.94/43.17 mark(nil) 104.94/43.17 cons(mark(x0), x1) 104.94/43.17 cons(x0, mark(x1)) 104.94/43.17 cons(active(x0), x1) 104.94/43.17 cons(x0, active(x1)) 104.94/43.17 U11(mark(x0), x1) 104.94/43.17 U11(x0, mark(x1)) 104.94/43.17 U11(active(x0), x1) 104.94/43.17 U11(x0, active(x1)) 104.94/43.17 s(mark(x0)) 104.94/43.17 s(active(x0)) 104.94/43.17 length(mark(x0)) 104.94/43.17 length(active(x0)) 104.94/43.17 and(mark(x0), x1) 104.94/43.17 and(x0, mark(x1)) 104.94/43.17 and(active(x0), x1) 104.94/43.17 and(x0, active(x1)) 104.94/43.17 isNat(mark(x0)) 104.94/43.17 isNat(active(x0)) 104.94/43.17 isNatList(mark(x0)) 104.94/43.18 isNatList(active(x0)) 104.94/43.18 isNatIList(mark(x0)) 104.94/43.18 isNatIList(active(x0)) 104.94/43.18 104.94/43.18 We have to consider all minimal (P,Q,R)-chains. 104.94/43.18 ---------------------------------------- 104.94/43.18 104.94/43.18 (28) QReductionProof (EQUIVALENT) 104.94/43.18 We deleted the following terms from Q as each root-symbol of these terms does neither occur in P nor in R.[THIEMANN]. 104.94/43.18 104.94/43.18 cons(mark(x0), x1) 104.94/43.18 cons(x0, mark(x1)) 104.94/43.18 cons(active(x0), x1) 104.94/43.18 cons(x0, active(x1)) 104.94/43.18 U11(mark(x0), x1) 104.94/43.18 U11(x0, mark(x1)) 104.94/43.18 U11(active(x0), x1) 104.94/43.18 U11(x0, active(x1)) 104.94/43.18 s(mark(x0)) 104.94/43.18 s(active(x0)) 104.94/43.18 length(mark(x0)) 104.94/43.18 length(active(x0)) 104.94/43.18 and(mark(x0), x1) 104.94/43.18 and(x0, mark(x1)) 104.94/43.18 and(active(x0), x1) 104.94/43.18 and(x0, active(x1)) 104.94/43.18 isNat(mark(x0)) 104.94/43.18 isNat(active(x0)) 104.94/43.18 isNatList(mark(x0)) 104.94/43.18 isNatList(active(x0)) 104.94/43.18 isNatIList(mark(x0)) 104.94/43.18 isNatIList(active(x0)) 104.94/43.18 104.94/43.18 104.94/43.18 ---------------------------------------- 104.94/43.18 104.94/43.18 (29) 104.94/43.18 Obligation: 104.94/43.18 Q DP problem: 104.94/43.18 The TRS P consists of the following rules: 104.94/43.18 104.94/43.18 ISNAT(active(X)) -> ISNAT(X) 104.94/43.18 ISNAT(mark(X)) -> ISNAT(X) 104.94/43.18 104.94/43.18 R is empty. 104.94/43.18 The set Q consists of the following terms: 104.94/43.18 104.94/43.18 active(zeros) 104.94/43.18 active(U11(tt, x0)) 104.94/43.18 active(and(tt, x0)) 104.94/43.18 active(isNat(0)) 104.94/43.18 active(isNat(length(x0))) 104.94/43.18 active(isNat(s(x0))) 104.94/43.18 active(isNatIList(x0)) 104.94/43.18 active(isNatList(nil)) 104.94/43.18 active(isNatList(cons(x0, x1))) 104.94/43.18 active(length(nil)) 104.94/43.18 active(length(cons(x0, x1))) 104.94/43.18 mark(zeros) 104.94/43.18 mark(cons(x0, x1)) 104.94/43.18 mark(0) 104.94/43.18 mark(U11(x0, x1)) 104.94/43.18 mark(tt) 104.94/43.18 mark(s(x0)) 104.94/43.18 mark(length(x0)) 104.94/43.18 mark(and(x0, x1)) 104.94/43.18 mark(isNat(x0)) 104.94/43.18 mark(isNatList(x0)) 104.94/43.18 mark(isNatIList(x0)) 104.94/43.18 mark(nil) 104.94/43.18 104.94/43.18 We have to consider all minimal (P,Q,R)-chains. 104.94/43.18 ---------------------------------------- 104.94/43.18 104.94/43.18 (30) QDPSizeChangeProof (EQUIVALENT) 104.94/43.18 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. 104.94/43.18 104.94/43.18 From the DPs we obtained the following set of size-change graphs: 104.94/43.18 *ISNAT(active(X)) -> ISNAT(X) 104.94/43.18 The graph contains the following edges 1 > 1 104.94/43.18 104.94/43.18 104.94/43.18 *ISNAT(mark(X)) -> ISNAT(X) 104.94/43.18 The graph contains the following edges 1 > 1 104.94/43.18 104.94/43.18 104.94/43.18 ---------------------------------------- 104.94/43.18 104.94/43.18 (31) 104.94/43.18 YES 104.94/43.18 104.94/43.18 ---------------------------------------- 104.94/43.18 104.94/43.18 (32) 104.94/43.18 Obligation: 104.94/43.18 Q DP problem: 104.94/43.18 The TRS P consists of the following rules: 104.94/43.18 104.94/43.18 AND(X1, mark(X2)) -> AND(X1, X2) 104.94/43.18 AND(mark(X1), X2) -> AND(X1, X2) 104.94/43.18 AND(active(X1), X2) -> AND(X1, X2) 104.94/43.18 AND(X1, active(X2)) -> AND(X1, X2) 104.94/43.18 104.94/43.18 The TRS R consists of the following rules: 104.94/43.18 104.94/43.18 active(zeros) -> mark(cons(0, zeros)) 104.94/43.18 active(U11(tt, L)) -> mark(s(length(L))) 104.94/43.18 active(and(tt, X)) -> mark(X) 104.94/43.18 active(isNat(0)) -> mark(tt) 104.94/43.18 active(isNat(s(V1))) -> mark(isNat(V1)) 104.94/43.18 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 104.94/43.18 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 104.94/43.18 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 104.94/43.18 mark(zeros) -> active(zeros) 104.94/43.18 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 104.94/43.18 mark(0) -> active(0) 104.94/43.18 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 104.94/43.18 mark(tt) -> active(tt) 104.94/43.18 mark(s(X)) -> active(s(mark(X))) 104.94/43.18 mark(length(X)) -> active(length(mark(X))) 104.94/43.18 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 104.94/43.18 mark(isNat(X)) -> active(isNat(X)) 104.94/43.18 mark(isNatList(X)) -> active(isNatList(X)) 104.94/43.18 mark(isNatIList(X)) -> active(isNatIList(X)) 104.94/43.18 mark(nil) -> active(nil) 104.94/43.18 cons(mark(X1), X2) -> cons(X1, X2) 104.94/43.18 cons(X1, mark(X2)) -> cons(X1, X2) 104.94/43.18 cons(active(X1), X2) -> cons(X1, X2) 104.94/43.18 cons(X1, active(X2)) -> cons(X1, X2) 104.94/43.18 U11(mark(X1), X2) -> U11(X1, X2) 104.94/43.18 U11(X1, mark(X2)) -> U11(X1, X2) 104.94/43.18 U11(active(X1), X2) -> U11(X1, X2) 104.94/43.18 U11(X1, active(X2)) -> U11(X1, X2) 104.94/43.18 s(mark(X)) -> s(X) 104.94/43.18 s(active(X)) -> s(X) 104.94/43.18 length(mark(X)) -> length(X) 104.94/43.18 length(active(X)) -> length(X) 104.94/43.18 and(mark(X1), X2) -> and(X1, X2) 104.94/43.18 and(X1, mark(X2)) -> and(X1, X2) 104.94/43.18 and(active(X1), X2) -> and(X1, X2) 104.94/43.18 and(X1, active(X2)) -> and(X1, X2) 104.94/43.18 isNat(mark(X)) -> isNat(X) 104.94/43.18 isNat(active(X)) -> isNat(X) 104.94/43.18 isNatList(mark(X)) -> isNatList(X) 104.94/43.18 isNatList(active(X)) -> isNatList(X) 104.94/43.18 isNatIList(mark(X)) -> isNatIList(X) 104.94/43.18 isNatIList(active(X)) -> isNatIList(X) 104.94/43.18 104.94/43.18 The set Q consists of the following terms: 104.94/43.18 104.94/43.18 active(zeros) 104.94/43.18 active(U11(tt, x0)) 104.94/43.18 active(and(tt, x0)) 104.94/43.18 active(isNat(0)) 104.94/43.18 active(isNat(length(x0))) 104.94/43.18 active(isNat(s(x0))) 104.94/43.18 active(isNatIList(x0)) 104.94/43.18 active(isNatList(nil)) 104.94/43.18 active(isNatList(cons(x0, x1))) 104.94/43.18 active(length(nil)) 104.94/43.18 active(length(cons(x0, x1))) 104.94/43.18 mark(zeros) 104.94/43.18 mark(cons(x0, x1)) 104.94/43.18 mark(0) 104.94/43.18 mark(U11(x0, x1)) 104.94/43.18 mark(tt) 104.94/43.18 mark(s(x0)) 104.94/43.18 mark(length(x0)) 104.94/43.18 mark(and(x0, x1)) 104.94/43.18 mark(isNat(x0)) 104.94/43.18 mark(isNatList(x0)) 104.94/43.18 mark(isNatIList(x0)) 104.94/43.18 mark(nil) 104.94/43.18 cons(mark(x0), x1) 104.94/43.18 cons(x0, mark(x1)) 104.94/43.18 cons(active(x0), x1) 104.94/43.18 cons(x0, active(x1)) 104.94/43.18 U11(mark(x0), x1) 104.94/43.18 U11(x0, mark(x1)) 104.94/43.18 U11(active(x0), x1) 104.94/43.18 U11(x0, active(x1)) 104.94/43.18 s(mark(x0)) 104.94/43.18 s(active(x0)) 104.94/43.18 length(mark(x0)) 104.94/43.18 length(active(x0)) 104.94/43.18 and(mark(x0), x1) 104.94/43.18 and(x0, mark(x1)) 104.94/43.18 and(active(x0), x1) 104.94/43.18 and(x0, active(x1)) 104.94/43.18 isNat(mark(x0)) 104.94/43.18 isNat(active(x0)) 104.94/43.18 isNatList(mark(x0)) 104.94/43.18 isNatList(active(x0)) 104.94/43.18 isNatIList(mark(x0)) 104.94/43.18 isNatIList(active(x0)) 104.94/43.18 104.94/43.18 We have to consider all minimal (P,Q,R)-chains. 104.94/43.18 ---------------------------------------- 104.94/43.18 104.94/43.18 (33) UsableRulesProof (EQUIVALENT) 104.94/43.18 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. 104.94/43.18 ---------------------------------------- 104.94/43.18 104.94/43.18 (34) 104.94/43.18 Obligation: 104.94/43.18 Q DP problem: 104.94/43.18 The TRS P consists of the following rules: 104.94/43.18 104.94/43.18 AND(X1, mark(X2)) -> AND(X1, X2) 104.94/43.18 AND(mark(X1), X2) -> AND(X1, X2) 104.94/43.18 AND(active(X1), X2) -> AND(X1, X2) 104.94/43.18 AND(X1, active(X2)) -> AND(X1, X2) 104.94/43.18 104.94/43.18 R is empty. 104.94/43.18 The set Q consists of the following terms: 104.94/43.18 104.94/43.18 active(zeros) 104.94/43.18 active(U11(tt, x0)) 104.94/43.18 active(and(tt, x0)) 104.94/43.18 active(isNat(0)) 104.94/43.18 active(isNat(length(x0))) 104.94/43.18 active(isNat(s(x0))) 104.94/43.18 active(isNatIList(x0)) 104.94/43.18 active(isNatList(nil)) 104.94/43.18 active(isNatList(cons(x0, x1))) 104.94/43.18 active(length(nil)) 104.94/43.18 active(length(cons(x0, x1))) 104.94/43.18 mark(zeros) 104.94/43.18 mark(cons(x0, x1)) 104.94/43.18 mark(0) 104.94/43.18 mark(U11(x0, x1)) 104.94/43.18 mark(tt) 104.94/43.18 mark(s(x0)) 104.94/43.18 mark(length(x0)) 104.94/43.18 mark(and(x0, x1)) 104.94/43.18 mark(isNat(x0)) 104.94/43.18 mark(isNatList(x0)) 104.94/43.18 mark(isNatIList(x0)) 104.94/43.18 mark(nil) 104.94/43.18 cons(mark(x0), x1) 104.94/43.18 cons(x0, mark(x1)) 104.94/43.18 cons(active(x0), x1) 104.94/43.18 cons(x0, active(x1)) 104.94/43.18 U11(mark(x0), x1) 104.94/43.18 U11(x0, mark(x1)) 104.94/43.18 U11(active(x0), x1) 104.94/43.18 U11(x0, active(x1)) 104.94/43.18 s(mark(x0)) 104.94/43.18 s(active(x0)) 104.94/43.18 length(mark(x0)) 104.94/43.18 length(active(x0)) 104.94/43.18 and(mark(x0), x1) 104.94/43.18 and(x0, mark(x1)) 104.94/43.18 and(active(x0), x1) 104.94/43.18 and(x0, active(x1)) 104.94/43.18 isNat(mark(x0)) 104.94/43.18 isNat(active(x0)) 104.94/43.18 isNatList(mark(x0)) 104.94/43.18 isNatList(active(x0)) 104.94/43.18 isNatIList(mark(x0)) 104.94/43.18 isNatIList(active(x0)) 104.94/43.18 104.94/43.18 We have to consider all minimal (P,Q,R)-chains. 104.94/43.18 ---------------------------------------- 104.94/43.18 104.94/43.18 (35) QReductionProof (EQUIVALENT) 104.94/43.18 We deleted the following terms from Q as each root-symbol of these terms does neither occur in P nor in R.[THIEMANN]. 104.94/43.18 104.94/43.18 cons(mark(x0), x1) 104.94/43.18 cons(x0, mark(x1)) 104.94/43.18 cons(active(x0), x1) 104.94/43.18 cons(x0, active(x1)) 104.94/43.18 U11(mark(x0), x1) 104.94/43.18 U11(x0, mark(x1)) 104.94/43.18 U11(active(x0), x1) 104.94/43.18 U11(x0, active(x1)) 104.94/43.18 s(mark(x0)) 104.94/43.18 s(active(x0)) 104.94/43.18 length(mark(x0)) 104.94/43.18 length(active(x0)) 104.94/43.18 and(mark(x0), x1) 104.94/43.18 and(x0, mark(x1)) 104.94/43.18 and(active(x0), x1) 104.94/43.18 and(x0, active(x1)) 104.94/43.18 isNat(mark(x0)) 104.94/43.18 isNat(active(x0)) 104.94/43.18 isNatList(mark(x0)) 104.94/43.18 isNatList(active(x0)) 104.94/43.18 isNatIList(mark(x0)) 104.94/43.18 isNatIList(active(x0)) 104.94/43.18 104.94/43.18 104.94/43.18 ---------------------------------------- 104.94/43.18 104.94/43.18 (36) 104.94/43.18 Obligation: 104.94/43.18 Q DP problem: 104.94/43.18 The TRS P consists of the following rules: 104.94/43.18 104.94/43.18 AND(X1, mark(X2)) -> AND(X1, X2) 104.94/43.18 AND(mark(X1), X2) -> AND(X1, X2) 104.94/43.18 AND(active(X1), X2) -> AND(X1, X2) 104.94/43.18 AND(X1, active(X2)) -> AND(X1, X2) 104.94/43.18 104.94/43.18 R is empty. 104.94/43.18 The set Q consists of the following terms: 104.94/43.18 104.94/43.18 active(zeros) 104.94/43.18 active(U11(tt, x0)) 104.94/43.18 active(and(tt, x0)) 104.94/43.18 active(isNat(0)) 104.94/43.18 active(isNat(length(x0))) 104.94/43.18 active(isNat(s(x0))) 104.94/43.18 active(isNatIList(x0)) 104.94/43.18 active(isNatList(nil)) 104.94/43.18 active(isNatList(cons(x0, x1))) 104.94/43.18 active(length(nil)) 104.94/43.18 active(length(cons(x0, x1))) 104.94/43.18 mark(zeros) 104.94/43.18 mark(cons(x0, x1)) 104.94/43.18 mark(0) 104.94/43.18 mark(U11(x0, x1)) 104.94/43.18 mark(tt) 104.94/43.18 mark(s(x0)) 104.94/43.18 mark(length(x0)) 104.94/43.18 mark(and(x0, x1)) 104.94/43.18 mark(isNat(x0)) 104.94/43.18 mark(isNatList(x0)) 104.94/43.18 mark(isNatIList(x0)) 104.94/43.18 mark(nil) 104.94/43.18 104.94/43.18 We have to consider all minimal (P,Q,R)-chains. 104.94/43.18 ---------------------------------------- 104.94/43.18 104.94/43.18 (37) QDPSizeChangeProof (EQUIVALENT) 104.94/43.18 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. 104.94/43.18 104.94/43.18 From the DPs we obtained the following set of size-change graphs: 104.94/43.18 *AND(X1, mark(X2)) -> AND(X1, X2) 104.94/43.18 The graph contains the following edges 1 >= 1, 2 > 2 104.94/43.18 104.94/43.18 104.94/43.18 *AND(mark(X1), X2) -> AND(X1, X2) 104.94/43.18 The graph contains the following edges 1 > 1, 2 >= 2 104.94/43.18 104.94/43.18 104.94/43.18 *AND(active(X1), X2) -> AND(X1, X2) 104.94/43.18 The graph contains the following edges 1 > 1, 2 >= 2 104.94/43.18 104.94/43.18 104.94/43.18 *AND(X1, active(X2)) -> AND(X1, X2) 104.94/43.18 The graph contains the following edges 1 >= 1, 2 > 2 104.94/43.18 104.94/43.18 104.94/43.18 ---------------------------------------- 104.94/43.18 104.94/43.18 (38) 104.94/43.18 YES 104.94/43.18 104.94/43.18 ---------------------------------------- 104.94/43.18 104.94/43.18 (39) 104.94/43.18 Obligation: 104.94/43.18 Q DP problem: 104.94/43.18 The TRS P consists of the following rules: 104.94/43.18 104.94/43.18 LENGTH(active(X)) -> LENGTH(X) 104.94/43.18 LENGTH(mark(X)) -> LENGTH(X) 104.94/43.18 104.94/43.18 The TRS R consists of the following rules: 104.94/43.18 104.94/43.18 active(zeros) -> mark(cons(0, zeros)) 104.94/43.18 active(U11(tt, L)) -> mark(s(length(L))) 104.94/43.18 active(and(tt, X)) -> mark(X) 104.94/43.18 active(isNat(0)) -> mark(tt) 104.94/43.18 active(isNat(s(V1))) -> mark(isNat(V1)) 104.94/43.18 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 104.94/43.18 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 104.94/43.18 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 104.94/43.18 mark(zeros) -> active(zeros) 104.94/43.18 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 104.94/43.18 mark(0) -> active(0) 104.94/43.18 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 104.94/43.18 mark(tt) -> active(tt) 104.94/43.18 mark(s(X)) -> active(s(mark(X))) 104.94/43.18 mark(length(X)) -> active(length(mark(X))) 104.94/43.18 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 104.94/43.18 mark(isNat(X)) -> active(isNat(X)) 104.94/43.18 mark(isNatList(X)) -> active(isNatList(X)) 104.94/43.18 mark(isNatIList(X)) -> active(isNatIList(X)) 104.94/43.18 mark(nil) -> active(nil) 104.94/43.18 cons(mark(X1), X2) -> cons(X1, X2) 104.94/43.18 cons(X1, mark(X2)) -> cons(X1, X2) 104.94/43.18 cons(active(X1), X2) -> cons(X1, X2) 104.94/43.18 cons(X1, active(X2)) -> cons(X1, X2) 104.94/43.18 U11(mark(X1), X2) -> U11(X1, X2) 104.94/43.18 U11(X1, mark(X2)) -> U11(X1, X2) 104.94/43.18 U11(active(X1), X2) -> U11(X1, X2) 104.94/43.18 U11(X1, active(X2)) -> U11(X1, X2) 104.94/43.18 s(mark(X)) -> s(X) 104.94/43.18 s(active(X)) -> s(X) 104.94/43.18 length(mark(X)) -> length(X) 104.94/43.18 length(active(X)) -> length(X) 104.94/43.18 and(mark(X1), X2) -> and(X1, X2) 104.94/43.18 and(X1, mark(X2)) -> and(X1, X2) 104.94/43.18 and(active(X1), X2) -> and(X1, X2) 104.94/43.18 and(X1, active(X2)) -> and(X1, X2) 104.94/43.18 isNat(mark(X)) -> isNat(X) 104.94/43.18 isNat(active(X)) -> isNat(X) 104.94/43.18 isNatList(mark(X)) -> isNatList(X) 104.94/43.18 isNatList(active(X)) -> isNatList(X) 104.94/43.18 isNatIList(mark(X)) -> isNatIList(X) 104.94/43.18 isNatIList(active(X)) -> isNatIList(X) 104.94/43.18 104.94/43.18 The set Q consists of the following terms: 104.94/43.18 104.94/43.18 active(zeros) 104.94/43.18 active(U11(tt, x0)) 104.94/43.18 active(and(tt, x0)) 104.94/43.18 active(isNat(0)) 104.94/43.18 active(isNat(length(x0))) 104.94/43.18 active(isNat(s(x0))) 104.94/43.18 active(isNatIList(x0)) 104.94/43.18 active(isNatList(nil)) 104.94/43.18 active(isNatList(cons(x0, x1))) 104.94/43.18 active(length(nil)) 104.94/43.18 active(length(cons(x0, x1))) 104.94/43.18 mark(zeros) 104.94/43.18 mark(cons(x0, x1)) 104.94/43.18 mark(0) 104.94/43.18 mark(U11(x0, x1)) 104.94/43.18 mark(tt) 104.94/43.18 mark(s(x0)) 104.94/43.18 mark(length(x0)) 104.94/43.18 mark(and(x0, x1)) 104.94/43.18 mark(isNat(x0)) 104.94/43.18 mark(isNatList(x0)) 104.94/43.18 mark(isNatIList(x0)) 104.94/43.18 mark(nil) 104.94/43.18 cons(mark(x0), x1) 104.94/43.18 cons(x0, mark(x1)) 104.94/43.18 cons(active(x0), x1) 104.94/43.18 cons(x0, active(x1)) 104.94/43.18 U11(mark(x0), x1) 104.94/43.18 U11(x0, mark(x1)) 104.94/43.18 U11(active(x0), x1) 104.94/43.18 U11(x0, active(x1)) 104.94/43.18 s(mark(x0)) 104.94/43.18 s(active(x0)) 104.94/43.18 length(mark(x0)) 104.94/43.18 length(active(x0)) 104.94/43.18 and(mark(x0), x1) 104.94/43.18 and(x0, mark(x1)) 104.94/43.18 and(active(x0), x1) 104.94/43.18 and(x0, active(x1)) 104.94/43.18 isNat(mark(x0)) 104.94/43.18 isNat(active(x0)) 104.94/43.18 isNatList(mark(x0)) 104.94/43.18 isNatList(active(x0)) 104.94/43.18 isNatIList(mark(x0)) 104.94/43.18 isNatIList(active(x0)) 104.94/43.18 104.94/43.18 We have to consider all minimal (P,Q,R)-chains. 104.94/43.18 ---------------------------------------- 104.94/43.18 104.94/43.18 (40) UsableRulesProof (EQUIVALENT) 104.94/43.18 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. 104.94/43.18 ---------------------------------------- 104.94/43.18 104.94/43.18 (41) 104.94/43.18 Obligation: 104.94/43.18 Q DP problem: 104.94/43.18 The TRS P consists of the following rules: 104.94/43.18 104.94/43.18 LENGTH(active(X)) -> LENGTH(X) 104.94/43.18 LENGTH(mark(X)) -> LENGTH(X) 104.94/43.18 104.94/43.18 R is empty. 104.94/43.18 The set Q consists of the following terms: 104.94/43.18 104.94/43.18 active(zeros) 104.94/43.18 active(U11(tt, x0)) 104.94/43.18 active(and(tt, x0)) 104.94/43.18 active(isNat(0)) 104.94/43.18 active(isNat(length(x0))) 104.94/43.18 active(isNat(s(x0))) 104.94/43.18 active(isNatIList(x0)) 104.94/43.18 active(isNatList(nil)) 104.94/43.18 active(isNatList(cons(x0, x1))) 104.94/43.18 active(length(nil)) 104.94/43.18 active(length(cons(x0, x1))) 104.94/43.18 mark(zeros) 104.94/43.18 mark(cons(x0, x1)) 104.94/43.18 mark(0) 104.94/43.18 mark(U11(x0, x1)) 104.94/43.18 mark(tt) 104.94/43.18 mark(s(x0)) 104.94/43.18 mark(length(x0)) 104.94/43.18 mark(and(x0, x1)) 104.94/43.18 mark(isNat(x0)) 104.94/43.18 mark(isNatList(x0)) 104.94/43.18 mark(isNatIList(x0)) 104.94/43.18 mark(nil) 104.94/43.18 cons(mark(x0), x1) 104.94/43.18 cons(x0, mark(x1)) 104.94/43.18 cons(active(x0), x1) 104.94/43.18 cons(x0, active(x1)) 104.94/43.18 U11(mark(x0), x1) 104.94/43.18 U11(x0, mark(x1)) 104.94/43.18 U11(active(x0), x1) 104.94/43.18 U11(x0, active(x1)) 104.94/43.18 s(mark(x0)) 104.94/43.18 s(active(x0)) 104.94/43.18 length(mark(x0)) 104.94/43.18 length(active(x0)) 104.94/43.18 and(mark(x0), x1) 104.94/43.18 and(x0, mark(x1)) 104.94/43.18 and(active(x0), x1) 104.94/43.18 and(x0, active(x1)) 104.94/43.18 isNat(mark(x0)) 104.94/43.18 isNat(active(x0)) 104.94/43.18 isNatList(mark(x0)) 104.94/43.18 isNatList(active(x0)) 104.94/43.18 isNatIList(mark(x0)) 104.94/43.18 isNatIList(active(x0)) 104.94/43.18 104.94/43.18 We have to consider all minimal (P,Q,R)-chains. 104.94/43.18 ---------------------------------------- 104.94/43.18 104.94/43.18 (42) QReductionProof (EQUIVALENT) 104.94/43.18 We deleted the following terms from Q as each root-symbol of these terms does neither occur in P nor in R.[THIEMANN]. 104.94/43.18 104.94/43.18 cons(mark(x0), x1) 104.94/43.18 cons(x0, mark(x1)) 104.94/43.18 cons(active(x0), x1) 104.94/43.18 cons(x0, active(x1)) 104.94/43.18 U11(mark(x0), x1) 104.94/43.18 U11(x0, mark(x1)) 104.94/43.18 U11(active(x0), x1) 104.94/43.18 U11(x0, active(x1)) 104.94/43.18 s(mark(x0)) 104.94/43.18 s(active(x0)) 104.94/43.18 length(mark(x0)) 104.94/43.18 length(active(x0)) 104.94/43.18 and(mark(x0), x1) 104.94/43.18 and(x0, mark(x1)) 104.94/43.18 and(active(x0), x1) 104.94/43.18 and(x0, active(x1)) 104.94/43.18 isNat(mark(x0)) 104.94/43.18 isNat(active(x0)) 104.94/43.18 isNatList(mark(x0)) 104.94/43.18 isNatList(active(x0)) 104.94/43.18 isNatIList(mark(x0)) 104.94/43.18 isNatIList(active(x0)) 104.94/43.18 104.94/43.18 104.94/43.18 ---------------------------------------- 104.94/43.18 104.94/43.18 (43) 104.94/43.18 Obligation: 104.94/43.18 Q DP problem: 104.94/43.18 The TRS P consists of the following rules: 104.94/43.18 104.94/43.18 LENGTH(active(X)) -> LENGTH(X) 104.94/43.18 LENGTH(mark(X)) -> LENGTH(X) 104.94/43.18 104.94/43.18 R is empty. 104.94/43.18 The set Q consists of the following terms: 104.94/43.18 104.94/43.18 active(zeros) 104.94/43.18 active(U11(tt, x0)) 104.94/43.18 active(and(tt, x0)) 104.94/43.18 active(isNat(0)) 104.94/43.18 active(isNat(length(x0))) 104.94/43.18 active(isNat(s(x0))) 104.94/43.18 active(isNatIList(x0)) 104.94/43.18 active(isNatList(nil)) 104.94/43.18 active(isNatList(cons(x0, x1))) 104.94/43.18 active(length(nil)) 104.94/43.18 active(length(cons(x0, x1))) 104.94/43.18 mark(zeros) 104.94/43.18 mark(cons(x0, x1)) 104.94/43.18 mark(0) 104.94/43.18 mark(U11(x0, x1)) 104.94/43.18 mark(tt) 104.94/43.18 mark(s(x0)) 104.94/43.18 mark(length(x0)) 104.94/43.18 mark(and(x0, x1)) 104.94/43.18 mark(isNat(x0)) 104.94/43.18 mark(isNatList(x0)) 104.94/43.18 mark(isNatIList(x0)) 104.94/43.18 mark(nil) 104.94/43.18 104.94/43.18 We have to consider all minimal (P,Q,R)-chains. 104.94/43.18 ---------------------------------------- 104.94/43.18 104.94/43.18 (44) QDPSizeChangeProof (EQUIVALENT) 104.94/43.18 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. 104.94/43.18 104.94/43.18 From the DPs we obtained the following set of size-change graphs: 104.94/43.18 *LENGTH(active(X)) -> LENGTH(X) 104.94/43.18 The graph contains the following edges 1 > 1 104.94/43.18 104.94/43.18 104.94/43.18 *LENGTH(mark(X)) -> LENGTH(X) 104.94/43.18 The graph contains the following edges 1 > 1 104.94/43.18 104.94/43.18 104.94/43.18 ---------------------------------------- 104.94/43.18 104.94/43.18 (45) 104.94/43.18 YES 104.94/43.18 104.94/43.18 ---------------------------------------- 104.94/43.18 104.94/43.18 (46) 104.94/43.18 Obligation: 104.94/43.18 Q DP problem: 104.94/43.18 The TRS P consists of the following rules: 104.94/43.18 104.94/43.18 S(active(X)) -> S(X) 104.94/43.18 S(mark(X)) -> S(X) 104.94/43.18 104.94/43.18 The TRS R consists of the following rules: 104.94/43.18 104.94/43.18 active(zeros) -> mark(cons(0, zeros)) 104.94/43.18 active(U11(tt, L)) -> mark(s(length(L))) 104.94/43.18 active(and(tt, X)) -> mark(X) 104.94/43.18 active(isNat(0)) -> mark(tt) 104.94/43.18 active(isNat(s(V1))) -> mark(isNat(V1)) 104.94/43.18 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 104.94/43.18 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 104.94/43.18 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 104.94/43.18 mark(zeros) -> active(zeros) 104.94/43.18 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 104.94/43.18 mark(0) -> active(0) 104.94/43.18 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 104.94/43.18 mark(tt) -> active(tt) 104.94/43.18 mark(s(X)) -> active(s(mark(X))) 104.94/43.18 mark(length(X)) -> active(length(mark(X))) 104.94/43.18 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 104.94/43.18 mark(isNat(X)) -> active(isNat(X)) 104.94/43.18 mark(isNatList(X)) -> active(isNatList(X)) 104.94/43.18 mark(isNatIList(X)) -> active(isNatIList(X)) 104.94/43.18 mark(nil) -> active(nil) 104.94/43.18 cons(mark(X1), X2) -> cons(X1, X2) 104.94/43.18 cons(X1, mark(X2)) -> cons(X1, X2) 104.94/43.18 cons(active(X1), X2) -> cons(X1, X2) 104.94/43.18 cons(X1, active(X2)) -> cons(X1, X2) 104.94/43.18 U11(mark(X1), X2) -> U11(X1, X2) 104.94/43.18 U11(X1, mark(X2)) -> U11(X1, X2) 104.94/43.18 U11(active(X1), X2) -> U11(X1, X2) 104.94/43.18 U11(X1, active(X2)) -> U11(X1, X2) 104.94/43.18 s(mark(X)) -> s(X) 104.94/43.18 s(active(X)) -> s(X) 104.94/43.18 length(mark(X)) -> length(X) 104.94/43.18 length(active(X)) -> length(X) 104.94/43.18 and(mark(X1), X2) -> and(X1, X2) 104.94/43.18 and(X1, mark(X2)) -> and(X1, X2) 104.94/43.18 and(active(X1), X2) -> and(X1, X2) 104.94/43.18 and(X1, active(X2)) -> and(X1, X2) 104.94/43.18 isNat(mark(X)) -> isNat(X) 104.94/43.18 isNat(active(X)) -> isNat(X) 104.94/43.18 isNatList(mark(X)) -> isNatList(X) 104.94/43.18 isNatList(active(X)) -> isNatList(X) 104.94/43.18 isNatIList(mark(X)) -> isNatIList(X) 104.94/43.18 isNatIList(active(X)) -> isNatIList(X) 104.94/43.18 104.94/43.18 The set Q consists of the following terms: 104.94/43.18 104.94/43.18 active(zeros) 104.94/43.18 active(U11(tt, x0)) 104.94/43.18 active(and(tt, x0)) 104.94/43.18 active(isNat(0)) 104.94/43.18 active(isNat(length(x0))) 104.94/43.18 active(isNat(s(x0))) 104.94/43.18 active(isNatIList(x0)) 104.94/43.18 active(isNatList(nil)) 104.94/43.18 active(isNatList(cons(x0, x1))) 104.94/43.18 active(length(nil)) 104.94/43.18 active(length(cons(x0, x1))) 104.94/43.18 mark(zeros) 104.94/43.18 mark(cons(x0, x1)) 104.94/43.18 mark(0) 104.94/43.18 mark(U11(x0, x1)) 104.94/43.18 mark(tt) 104.94/43.18 mark(s(x0)) 104.94/43.18 mark(length(x0)) 104.94/43.18 mark(and(x0, x1)) 104.94/43.18 mark(isNat(x0)) 104.94/43.18 mark(isNatList(x0)) 104.94/43.18 mark(isNatIList(x0)) 104.94/43.18 mark(nil) 104.94/43.18 cons(mark(x0), x1) 104.94/43.18 cons(x0, mark(x1)) 104.94/43.18 cons(active(x0), x1) 104.94/43.18 cons(x0, active(x1)) 104.94/43.18 U11(mark(x0), x1) 104.94/43.18 U11(x0, mark(x1)) 104.94/43.18 U11(active(x0), x1) 104.94/43.18 U11(x0, active(x1)) 104.94/43.18 s(mark(x0)) 104.94/43.18 s(active(x0)) 104.94/43.18 length(mark(x0)) 104.94/43.18 length(active(x0)) 104.94/43.18 and(mark(x0), x1) 104.94/43.18 and(x0, mark(x1)) 104.94/43.18 and(active(x0), x1) 104.94/43.18 and(x0, active(x1)) 104.94/43.18 isNat(mark(x0)) 104.94/43.18 isNat(active(x0)) 104.94/43.18 isNatList(mark(x0)) 104.94/43.18 isNatList(active(x0)) 104.94/43.18 isNatIList(mark(x0)) 104.94/43.18 isNatIList(active(x0)) 104.94/43.18 104.94/43.18 We have to consider all minimal (P,Q,R)-chains. 104.94/43.18 ---------------------------------------- 104.94/43.18 104.94/43.18 (47) UsableRulesProof (EQUIVALENT) 104.94/43.18 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. 104.94/43.18 ---------------------------------------- 104.94/43.18 104.94/43.18 (48) 104.94/43.18 Obligation: 104.94/43.18 Q DP problem: 104.94/43.18 The TRS P consists of the following rules: 104.94/43.18 104.94/43.18 S(active(X)) -> S(X) 104.94/43.18 S(mark(X)) -> S(X) 104.94/43.18 104.94/43.18 R is empty. 104.94/43.18 The set Q consists of the following terms: 104.94/43.18 104.94/43.18 active(zeros) 104.94/43.18 active(U11(tt, x0)) 104.94/43.18 active(and(tt, x0)) 104.94/43.18 active(isNat(0)) 104.94/43.18 active(isNat(length(x0))) 104.94/43.18 active(isNat(s(x0))) 104.94/43.18 active(isNatIList(x0)) 104.94/43.18 active(isNatList(nil)) 104.94/43.18 active(isNatList(cons(x0, x1))) 104.94/43.18 active(length(nil)) 104.94/43.18 active(length(cons(x0, x1))) 104.94/43.18 mark(zeros) 104.94/43.18 mark(cons(x0, x1)) 104.94/43.18 mark(0) 104.94/43.18 mark(U11(x0, x1)) 104.94/43.18 mark(tt) 104.94/43.18 mark(s(x0)) 104.94/43.18 mark(length(x0)) 104.94/43.18 mark(and(x0, x1)) 104.94/43.18 mark(isNat(x0)) 104.94/43.18 mark(isNatList(x0)) 104.94/43.18 mark(isNatIList(x0)) 104.94/43.18 mark(nil) 104.94/43.18 cons(mark(x0), x1) 104.94/43.18 cons(x0, mark(x1)) 104.94/43.18 cons(active(x0), x1) 104.94/43.18 cons(x0, active(x1)) 104.94/43.18 U11(mark(x0), x1) 104.94/43.18 U11(x0, mark(x1)) 104.94/43.18 U11(active(x0), x1) 104.94/43.18 U11(x0, active(x1)) 104.94/43.18 s(mark(x0)) 104.94/43.18 s(active(x0)) 104.94/43.18 length(mark(x0)) 104.94/43.18 length(active(x0)) 104.94/43.18 and(mark(x0), x1) 104.94/43.18 and(x0, mark(x1)) 104.94/43.18 and(active(x0), x1) 104.94/43.18 and(x0, active(x1)) 104.94/43.18 isNat(mark(x0)) 104.94/43.18 isNat(active(x0)) 104.94/43.18 isNatList(mark(x0)) 104.94/43.18 isNatList(active(x0)) 104.94/43.18 isNatIList(mark(x0)) 104.94/43.18 isNatIList(active(x0)) 104.94/43.18 104.94/43.18 We have to consider all minimal (P,Q,R)-chains. 104.94/43.18 ---------------------------------------- 104.94/43.18 104.94/43.18 (49) QReductionProof (EQUIVALENT) 104.94/43.18 We deleted the following terms from Q as each root-symbol of these terms does neither occur in P nor in R.[THIEMANN]. 104.94/43.18 104.94/43.18 cons(mark(x0), x1) 104.94/43.18 cons(x0, mark(x1)) 104.94/43.18 cons(active(x0), x1) 104.94/43.18 cons(x0, active(x1)) 104.94/43.18 U11(mark(x0), x1) 104.94/43.18 U11(x0, mark(x1)) 104.94/43.18 U11(active(x0), x1) 104.94/43.18 U11(x0, active(x1)) 104.94/43.18 s(mark(x0)) 104.94/43.18 s(active(x0)) 104.94/43.18 length(mark(x0)) 104.94/43.18 length(active(x0)) 104.94/43.18 and(mark(x0), x1) 104.94/43.18 and(x0, mark(x1)) 104.94/43.18 and(active(x0), x1) 104.94/43.18 and(x0, active(x1)) 104.94/43.18 isNat(mark(x0)) 104.94/43.18 isNat(active(x0)) 104.94/43.18 isNatList(mark(x0)) 104.94/43.18 isNatList(active(x0)) 104.94/43.18 isNatIList(mark(x0)) 104.94/43.18 isNatIList(active(x0)) 104.94/43.18 104.94/43.18 104.94/43.18 ---------------------------------------- 104.94/43.18 104.94/43.18 (50) 104.94/43.18 Obligation: 104.94/43.18 Q DP problem: 104.94/43.18 The TRS P consists of the following rules: 104.94/43.18 104.94/43.18 S(active(X)) -> S(X) 104.94/43.18 S(mark(X)) -> S(X) 104.94/43.18 104.94/43.18 R is empty. 104.94/43.18 The set Q consists of the following terms: 104.94/43.18 104.94/43.18 active(zeros) 104.94/43.18 active(U11(tt, x0)) 104.94/43.18 active(and(tt, x0)) 104.94/43.18 active(isNat(0)) 104.94/43.18 active(isNat(length(x0))) 104.94/43.18 active(isNat(s(x0))) 104.94/43.18 active(isNatIList(x0)) 104.94/43.18 active(isNatList(nil)) 104.94/43.18 active(isNatList(cons(x0, x1))) 104.94/43.18 active(length(nil)) 104.94/43.18 active(length(cons(x0, x1))) 104.94/43.18 mark(zeros) 104.94/43.18 mark(cons(x0, x1)) 104.94/43.18 mark(0) 104.94/43.18 mark(U11(x0, x1)) 104.94/43.18 mark(tt) 104.94/43.18 mark(s(x0)) 104.94/43.18 mark(length(x0)) 104.94/43.18 mark(and(x0, x1)) 104.94/43.18 mark(isNat(x0)) 104.94/43.18 mark(isNatList(x0)) 104.94/43.18 mark(isNatIList(x0)) 104.94/43.18 mark(nil) 104.94/43.18 104.94/43.18 We have to consider all minimal (P,Q,R)-chains. 104.94/43.18 ---------------------------------------- 104.94/43.18 104.94/43.18 (51) QDPSizeChangeProof (EQUIVALENT) 104.94/43.18 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. 104.94/43.18 104.94/43.18 From the DPs we obtained the following set of size-change graphs: 104.94/43.18 *S(active(X)) -> S(X) 104.94/43.18 The graph contains the following edges 1 > 1 104.94/43.18 104.94/43.18 104.94/43.18 *S(mark(X)) -> S(X) 104.94/43.18 The graph contains the following edges 1 > 1 104.94/43.18 104.94/43.18 104.94/43.18 ---------------------------------------- 104.94/43.18 104.94/43.18 (52) 104.94/43.18 YES 104.94/43.18 104.94/43.18 ---------------------------------------- 104.94/43.18 104.94/43.18 (53) 104.94/43.18 Obligation: 104.94/43.18 Q DP problem: 104.94/43.18 The TRS P consists of the following rules: 104.94/43.18 104.94/43.18 U11^1(X1, mark(X2)) -> U11^1(X1, X2) 104.94/43.18 U11^1(mark(X1), X2) -> U11^1(X1, X2) 104.94/43.18 U11^1(active(X1), X2) -> U11^1(X1, X2) 104.94/43.18 U11^1(X1, active(X2)) -> U11^1(X1, X2) 104.94/43.18 104.94/43.18 The TRS R consists of the following rules: 104.94/43.18 104.94/43.18 active(zeros) -> mark(cons(0, zeros)) 104.94/43.18 active(U11(tt, L)) -> mark(s(length(L))) 104.94/43.18 active(and(tt, X)) -> mark(X) 104.94/43.18 active(isNat(0)) -> mark(tt) 104.94/43.18 active(isNat(s(V1))) -> mark(isNat(V1)) 104.94/43.18 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 104.94/43.18 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 104.94/43.18 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 104.94/43.18 mark(zeros) -> active(zeros) 104.94/43.18 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 104.94/43.18 mark(0) -> active(0) 104.94/43.18 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 104.94/43.18 mark(tt) -> active(tt) 104.94/43.18 mark(s(X)) -> active(s(mark(X))) 104.94/43.18 mark(length(X)) -> active(length(mark(X))) 104.94/43.18 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 104.94/43.18 mark(isNat(X)) -> active(isNat(X)) 104.94/43.18 mark(isNatList(X)) -> active(isNatList(X)) 104.94/43.18 mark(isNatIList(X)) -> active(isNatIList(X)) 104.94/43.18 mark(nil) -> active(nil) 104.94/43.18 cons(mark(X1), X2) -> cons(X1, X2) 104.94/43.18 cons(X1, mark(X2)) -> cons(X1, X2) 104.94/43.18 cons(active(X1), X2) -> cons(X1, X2) 104.94/43.18 cons(X1, active(X2)) -> cons(X1, X2) 104.94/43.18 U11(mark(X1), X2) -> U11(X1, X2) 104.94/43.18 U11(X1, mark(X2)) -> U11(X1, X2) 104.94/43.18 U11(active(X1), X2) -> U11(X1, X2) 104.94/43.18 U11(X1, active(X2)) -> U11(X1, X2) 104.94/43.18 s(mark(X)) -> s(X) 104.94/43.18 s(active(X)) -> s(X) 104.94/43.18 length(mark(X)) -> length(X) 104.94/43.18 length(active(X)) -> length(X) 104.94/43.18 and(mark(X1), X2) -> and(X1, X2) 104.94/43.18 and(X1, mark(X2)) -> and(X1, X2) 104.94/43.18 and(active(X1), X2) -> and(X1, X2) 104.94/43.18 and(X1, active(X2)) -> and(X1, X2) 104.94/43.18 isNat(mark(X)) -> isNat(X) 104.94/43.18 isNat(active(X)) -> isNat(X) 104.94/43.18 isNatList(mark(X)) -> isNatList(X) 104.94/43.18 isNatList(active(X)) -> isNatList(X) 104.94/43.18 isNatIList(mark(X)) -> isNatIList(X) 104.94/43.18 isNatIList(active(X)) -> isNatIList(X) 104.94/43.18 104.94/43.18 The set Q consists of the following terms: 104.94/43.18 104.94/43.18 active(zeros) 104.94/43.18 active(U11(tt, x0)) 104.94/43.18 active(and(tt, x0)) 104.94/43.18 active(isNat(0)) 104.94/43.18 active(isNat(length(x0))) 104.94/43.18 active(isNat(s(x0))) 104.94/43.18 active(isNatIList(x0)) 104.94/43.18 active(isNatList(nil)) 104.94/43.18 active(isNatList(cons(x0, x1))) 104.94/43.18 active(length(nil)) 104.94/43.18 active(length(cons(x0, x1))) 104.94/43.18 mark(zeros) 104.94/43.18 mark(cons(x0, x1)) 104.94/43.18 mark(0) 104.94/43.18 mark(U11(x0, x1)) 104.94/43.18 mark(tt) 104.94/43.18 mark(s(x0)) 104.94/43.18 mark(length(x0)) 104.94/43.18 mark(and(x0, x1)) 104.94/43.18 mark(isNat(x0)) 104.94/43.18 mark(isNatList(x0)) 104.94/43.18 mark(isNatIList(x0)) 104.94/43.18 mark(nil) 104.94/43.18 cons(mark(x0), x1) 104.94/43.18 cons(x0, mark(x1)) 104.94/43.18 cons(active(x0), x1) 104.94/43.18 cons(x0, active(x1)) 104.94/43.18 U11(mark(x0), x1) 104.94/43.18 U11(x0, mark(x1)) 104.94/43.18 U11(active(x0), x1) 104.94/43.18 U11(x0, active(x1)) 104.94/43.18 s(mark(x0)) 104.94/43.18 s(active(x0)) 104.94/43.18 length(mark(x0)) 104.94/43.18 length(active(x0)) 104.94/43.18 and(mark(x0), x1) 104.94/43.18 and(x0, mark(x1)) 104.94/43.18 and(active(x0), x1) 104.94/43.18 and(x0, active(x1)) 104.94/43.18 isNat(mark(x0)) 104.94/43.18 isNat(active(x0)) 104.94/43.18 isNatList(mark(x0)) 104.94/43.18 isNatList(active(x0)) 104.94/43.18 isNatIList(mark(x0)) 104.94/43.18 isNatIList(active(x0)) 104.94/43.18 104.94/43.18 We have to consider all minimal (P,Q,R)-chains. 104.94/43.18 ---------------------------------------- 104.94/43.18 104.94/43.18 (54) UsableRulesProof (EQUIVALENT) 104.94/43.18 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. 104.94/43.18 ---------------------------------------- 104.94/43.18 104.94/43.18 (55) 104.94/43.18 Obligation: 104.94/43.18 Q DP problem: 104.94/43.18 The TRS P consists of the following rules: 104.94/43.18 104.94/43.18 U11^1(X1, mark(X2)) -> U11^1(X1, X2) 104.94/43.18 U11^1(mark(X1), X2) -> U11^1(X1, X2) 104.94/43.18 U11^1(active(X1), X2) -> U11^1(X1, X2) 104.94/43.18 U11^1(X1, active(X2)) -> U11^1(X1, X2) 104.94/43.18 104.94/43.18 R is empty. 104.94/43.18 The set Q consists of the following terms: 104.94/43.18 104.94/43.18 active(zeros) 104.94/43.18 active(U11(tt, x0)) 104.94/43.18 active(and(tt, x0)) 104.94/43.18 active(isNat(0)) 104.94/43.18 active(isNat(length(x0))) 104.94/43.18 active(isNat(s(x0))) 104.94/43.18 active(isNatIList(x0)) 104.94/43.18 active(isNatList(nil)) 104.94/43.18 active(isNatList(cons(x0, x1))) 104.94/43.18 active(length(nil)) 104.94/43.18 active(length(cons(x0, x1))) 104.94/43.18 mark(zeros) 104.94/43.18 mark(cons(x0, x1)) 104.94/43.18 mark(0) 104.94/43.18 mark(U11(x0, x1)) 104.94/43.18 mark(tt) 104.94/43.18 mark(s(x0)) 104.94/43.18 mark(length(x0)) 104.94/43.18 mark(and(x0, x1)) 104.94/43.18 mark(isNat(x0)) 104.94/43.18 mark(isNatList(x0)) 104.94/43.18 mark(isNatIList(x0)) 104.94/43.18 mark(nil) 104.94/43.18 cons(mark(x0), x1) 104.94/43.18 cons(x0, mark(x1)) 104.94/43.18 cons(active(x0), x1) 104.94/43.18 cons(x0, active(x1)) 104.94/43.18 U11(mark(x0), x1) 104.94/43.18 U11(x0, mark(x1)) 104.94/43.18 U11(active(x0), x1) 104.94/43.18 U11(x0, active(x1)) 104.94/43.18 s(mark(x0)) 104.94/43.18 s(active(x0)) 104.94/43.18 length(mark(x0)) 104.94/43.18 length(active(x0)) 104.94/43.18 and(mark(x0), x1) 104.94/43.18 and(x0, mark(x1)) 104.94/43.18 and(active(x0), x1) 104.94/43.18 and(x0, active(x1)) 104.94/43.18 isNat(mark(x0)) 104.94/43.18 isNat(active(x0)) 104.94/43.18 isNatList(mark(x0)) 104.94/43.18 isNatList(active(x0)) 104.94/43.18 isNatIList(mark(x0)) 104.94/43.18 isNatIList(active(x0)) 104.94/43.18 104.94/43.18 We have to consider all minimal (P,Q,R)-chains. 104.94/43.18 ---------------------------------------- 104.94/43.18 104.94/43.18 (56) QReductionProof (EQUIVALENT) 104.94/43.18 We deleted the following terms from Q as each root-symbol of these terms does neither occur in P nor in R.[THIEMANN]. 104.94/43.18 104.94/43.18 cons(mark(x0), x1) 104.94/43.18 cons(x0, mark(x1)) 104.94/43.18 cons(active(x0), x1) 104.94/43.18 cons(x0, active(x1)) 104.94/43.18 U11(mark(x0), x1) 104.94/43.18 U11(x0, mark(x1)) 104.94/43.18 U11(active(x0), x1) 104.94/43.18 U11(x0, active(x1)) 104.94/43.18 s(mark(x0)) 104.94/43.18 s(active(x0)) 104.94/43.18 length(mark(x0)) 104.94/43.18 length(active(x0)) 104.94/43.18 and(mark(x0), x1) 104.94/43.18 and(x0, mark(x1)) 104.94/43.18 and(active(x0), x1) 104.94/43.18 and(x0, active(x1)) 104.94/43.18 isNat(mark(x0)) 104.94/43.18 isNat(active(x0)) 104.94/43.18 isNatList(mark(x0)) 104.94/43.18 isNatList(active(x0)) 104.94/43.18 isNatIList(mark(x0)) 104.94/43.18 isNatIList(active(x0)) 104.94/43.18 104.94/43.18 104.94/43.18 ---------------------------------------- 104.94/43.18 104.94/43.18 (57) 104.94/43.18 Obligation: 104.94/43.18 Q DP problem: 104.94/43.18 The TRS P consists of the following rules: 104.94/43.18 104.94/43.18 U11^1(X1, mark(X2)) -> U11^1(X1, X2) 104.94/43.18 U11^1(mark(X1), X2) -> U11^1(X1, X2) 104.94/43.18 U11^1(active(X1), X2) -> U11^1(X1, X2) 104.94/43.18 U11^1(X1, active(X2)) -> U11^1(X1, X2) 104.94/43.18 104.94/43.18 R is empty. 104.94/43.18 The set Q consists of the following terms: 104.94/43.18 104.94/43.18 active(zeros) 104.94/43.18 active(U11(tt, x0)) 104.94/43.18 active(and(tt, x0)) 104.94/43.18 active(isNat(0)) 104.94/43.18 active(isNat(length(x0))) 104.94/43.18 active(isNat(s(x0))) 104.94/43.18 active(isNatIList(x0)) 104.94/43.18 active(isNatList(nil)) 104.94/43.18 active(isNatList(cons(x0, x1))) 104.94/43.18 active(length(nil)) 104.94/43.18 active(length(cons(x0, x1))) 104.94/43.18 mark(zeros) 104.94/43.18 mark(cons(x0, x1)) 104.94/43.18 mark(0) 104.94/43.18 mark(U11(x0, x1)) 104.94/43.18 mark(tt) 104.94/43.18 mark(s(x0)) 104.94/43.18 mark(length(x0)) 104.94/43.18 mark(and(x0, x1)) 104.94/43.18 mark(isNat(x0)) 104.94/43.18 mark(isNatList(x0)) 104.94/43.18 mark(isNatIList(x0)) 104.94/43.18 mark(nil) 104.94/43.18 104.94/43.18 We have to consider all minimal (P,Q,R)-chains. 104.94/43.18 ---------------------------------------- 104.94/43.18 104.94/43.18 (58) QDPSizeChangeProof (EQUIVALENT) 104.94/43.18 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. 104.94/43.18 104.94/43.18 From the DPs we obtained the following set of size-change graphs: 104.94/43.18 *U11^1(X1, mark(X2)) -> U11^1(X1, X2) 104.94/43.18 The graph contains the following edges 1 >= 1, 2 > 2 104.94/43.18 104.94/43.18 104.94/43.18 *U11^1(mark(X1), X2) -> U11^1(X1, X2) 104.94/43.18 The graph contains the following edges 1 > 1, 2 >= 2 104.94/43.18 104.94/43.18 104.94/43.18 *U11^1(active(X1), X2) -> U11^1(X1, X2) 104.94/43.18 The graph contains the following edges 1 > 1, 2 >= 2 104.94/43.18 104.94/43.18 104.94/43.18 *U11^1(X1, active(X2)) -> U11^1(X1, X2) 104.94/43.18 The graph contains the following edges 1 >= 1, 2 > 2 104.94/43.18 104.94/43.18 104.94/43.18 ---------------------------------------- 104.94/43.18 104.94/43.18 (59) 104.94/43.18 YES 104.94/43.18 104.94/43.18 ---------------------------------------- 104.94/43.18 104.94/43.18 (60) 104.94/43.18 Obligation: 104.94/43.18 Q DP problem: 104.94/43.18 The TRS P consists of the following rules: 104.94/43.18 104.94/43.18 CONS(X1, mark(X2)) -> CONS(X1, X2) 104.94/43.18 CONS(mark(X1), X2) -> CONS(X1, X2) 104.94/43.18 CONS(active(X1), X2) -> CONS(X1, X2) 104.94/43.18 CONS(X1, active(X2)) -> CONS(X1, X2) 104.94/43.18 104.94/43.18 The TRS R consists of the following rules: 104.94/43.18 104.94/43.18 active(zeros) -> mark(cons(0, zeros)) 104.94/43.18 active(U11(tt, L)) -> mark(s(length(L))) 104.94/43.18 active(and(tt, X)) -> mark(X) 104.94/43.18 active(isNat(0)) -> mark(tt) 104.94/43.18 active(isNat(s(V1))) -> mark(isNat(V1)) 104.94/43.18 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 104.94/43.18 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 104.94/43.18 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 104.94/43.18 mark(zeros) -> active(zeros) 104.94/43.18 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 105.09/43.19 mark(0) -> active(0) 105.09/43.19 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 105.09/43.19 mark(tt) -> active(tt) 105.09/43.19 mark(s(X)) -> active(s(mark(X))) 105.09/43.19 mark(length(X)) -> active(length(mark(X))) 105.09/43.19 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 105.09/43.19 mark(isNat(X)) -> active(isNat(X)) 105.09/43.19 mark(isNatList(X)) -> active(isNatList(X)) 105.09/43.19 mark(isNatIList(X)) -> active(isNatIList(X)) 105.09/43.19 mark(nil) -> active(nil) 105.09/43.19 cons(mark(X1), X2) -> cons(X1, X2) 105.09/43.19 cons(X1, mark(X2)) -> cons(X1, X2) 105.09/43.19 cons(active(X1), X2) -> cons(X1, X2) 105.09/43.19 cons(X1, active(X2)) -> cons(X1, X2) 105.09/43.19 U11(mark(X1), X2) -> U11(X1, X2) 105.09/43.19 U11(X1, mark(X2)) -> U11(X1, X2) 105.09/43.19 U11(active(X1), X2) -> U11(X1, X2) 105.09/43.19 U11(X1, active(X2)) -> U11(X1, X2) 105.09/43.19 s(mark(X)) -> s(X) 105.09/43.19 s(active(X)) -> s(X) 105.09/43.19 length(mark(X)) -> length(X) 105.09/43.19 length(active(X)) -> length(X) 105.09/43.19 and(mark(X1), X2) -> and(X1, X2) 105.09/43.19 and(X1, mark(X2)) -> and(X1, X2) 105.09/43.19 and(active(X1), X2) -> and(X1, X2) 105.09/43.19 and(X1, active(X2)) -> and(X1, X2) 105.09/43.19 isNat(mark(X)) -> isNat(X) 105.09/43.19 isNat(active(X)) -> isNat(X) 105.09/43.19 isNatList(mark(X)) -> isNatList(X) 105.09/43.19 isNatList(active(X)) -> isNatList(X) 105.09/43.19 isNatIList(mark(X)) -> isNatIList(X) 105.09/43.19 isNatIList(active(X)) -> isNatIList(X) 105.09/43.19 105.09/43.19 The set Q consists of the following terms: 105.09/43.19 105.09/43.19 active(zeros) 105.09/43.19 active(U11(tt, x0)) 105.09/43.19 active(and(tt, x0)) 105.09/43.19 active(isNat(0)) 105.09/43.19 active(isNat(length(x0))) 105.09/43.19 active(isNat(s(x0))) 105.09/43.19 active(isNatIList(x0)) 105.09/43.19 active(isNatList(nil)) 105.09/43.19 active(isNatList(cons(x0, x1))) 105.09/43.19 active(length(nil)) 105.09/43.19 active(length(cons(x0, x1))) 105.09/43.19 mark(zeros) 105.09/43.19 mark(cons(x0, x1)) 105.09/43.19 mark(0) 105.09/43.19 mark(U11(x0, x1)) 105.09/43.19 mark(tt) 105.09/43.19 mark(s(x0)) 105.09/43.19 mark(length(x0)) 105.09/43.19 mark(and(x0, x1)) 105.09/43.19 mark(isNat(x0)) 105.09/43.19 mark(isNatList(x0)) 105.09/43.19 mark(isNatIList(x0)) 105.09/43.19 mark(nil) 105.09/43.19 cons(mark(x0), x1) 105.09/43.19 cons(x0, mark(x1)) 105.09/43.19 cons(active(x0), x1) 105.09/43.19 cons(x0, active(x1)) 105.09/43.19 U11(mark(x0), x1) 105.09/43.19 U11(x0, mark(x1)) 105.09/43.19 U11(active(x0), x1) 105.09/43.19 U11(x0, active(x1)) 105.09/43.19 s(mark(x0)) 105.09/43.19 s(active(x0)) 105.09/43.19 length(mark(x0)) 105.09/43.19 length(active(x0)) 105.09/43.19 and(mark(x0), x1) 105.09/43.19 and(x0, mark(x1)) 105.09/43.19 and(active(x0), x1) 105.09/43.19 and(x0, active(x1)) 105.09/43.19 isNat(mark(x0)) 105.09/43.19 isNat(active(x0)) 105.09/43.19 isNatList(mark(x0)) 105.09/43.19 isNatList(active(x0)) 105.09/43.19 isNatIList(mark(x0)) 105.09/43.19 isNatIList(active(x0)) 105.09/43.19 105.09/43.19 We have to consider all minimal (P,Q,R)-chains. 105.09/43.19 ---------------------------------------- 105.09/43.19 105.09/43.19 (61) UsableRulesProof (EQUIVALENT) 105.09/43.19 As all Q-normal forms are R-normal forms we are in the innermost case. Hence, by the usable rules processor [LPAR04] we can delete all non-usable rules [FROCOS05] from R. 105.09/43.19 ---------------------------------------- 105.09/43.19 105.09/43.19 (62) 105.09/43.19 Obligation: 105.09/43.19 Q DP problem: 105.09/43.19 The TRS P consists of the following rules: 105.09/43.19 105.09/43.19 CONS(X1, mark(X2)) -> CONS(X1, X2) 105.09/43.19 CONS(mark(X1), X2) -> CONS(X1, X2) 105.09/43.19 CONS(active(X1), X2) -> CONS(X1, X2) 105.09/43.19 CONS(X1, active(X2)) -> CONS(X1, X2) 105.09/43.19 105.09/43.19 R is empty. 105.09/43.19 The set Q consists of the following terms: 105.09/43.19 105.09/43.19 active(zeros) 105.09/43.19 active(U11(tt, x0)) 105.09/43.19 active(and(tt, x0)) 105.09/43.19 active(isNat(0)) 105.09/43.19 active(isNat(length(x0))) 105.09/43.19 active(isNat(s(x0))) 105.09/43.19 active(isNatIList(x0)) 105.09/43.19 active(isNatList(nil)) 105.09/43.19 active(isNatList(cons(x0, x1))) 105.09/43.19 active(length(nil)) 105.09/43.19 active(length(cons(x0, x1))) 105.09/43.19 mark(zeros) 105.09/43.19 mark(cons(x0, x1)) 105.09/43.19 mark(0) 105.09/43.19 mark(U11(x0, x1)) 105.09/43.19 mark(tt) 105.09/43.19 mark(s(x0)) 105.09/43.19 mark(length(x0)) 105.09/43.19 mark(and(x0, x1)) 105.09/43.19 mark(isNat(x0)) 105.09/43.19 mark(isNatList(x0)) 105.09/43.19 mark(isNatIList(x0)) 105.09/43.19 mark(nil) 105.09/43.19 cons(mark(x0), x1) 105.09/43.19 cons(x0, mark(x1)) 105.09/43.19 cons(active(x0), x1) 105.09/43.19 cons(x0, active(x1)) 105.09/43.19 U11(mark(x0), x1) 105.09/43.19 U11(x0, mark(x1)) 105.09/43.19 U11(active(x0), x1) 105.09/43.19 U11(x0, active(x1)) 105.09/43.19 s(mark(x0)) 105.09/43.19 s(active(x0)) 105.09/43.19 length(mark(x0)) 105.09/43.19 length(active(x0)) 105.09/43.19 and(mark(x0), x1) 105.09/43.19 and(x0, mark(x1)) 105.09/43.19 and(active(x0), x1) 105.09/43.19 and(x0, active(x1)) 105.09/43.19 isNat(mark(x0)) 105.09/43.19 isNat(active(x0)) 105.09/43.19 isNatList(mark(x0)) 105.09/43.19 isNatList(active(x0)) 105.09/43.19 isNatIList(mark(x0)) 105.09/43.19 isNatIList(active(x0)) 105.09/43.19 105.09/43.19 We have to consider all minimal (P,Q,R)-chains. 105.09/43.19 ---------------------------------------- 105.09/43.19 105.09/43.19 (63) QReductionProof (EQUIVALENT) 105.09/43.19 We deleted the following terms from Q as each root-symbol of these terms does neither occur in P nor in R.[THIEMANN]. 105.09/43.19 105.09/43.19 cons(mark(x0), x1) 105.09/43.19 cons(x0, mark(x1)) 105.09/43.19 cons(active(x0), x1) 105.09/43.19 cons(x0, active(x1)) 105.09/43.19 U11(mark(x0), x1) 105.09/43.19 U11(x0, mark(x1)) 105.09/43.19 U11(active(x0), x1) 105.09/43.19 U11(x0, active(x1)) 105.09/43.19 s(mark(x0)) 105.09/43.19 s(active(x0)) 105.09/43.19 length(mark(x0)) 105.09/43.19 length(active(x0)) 105.09/43.19 and(mark(x0), x1) 105.09/43.19 and(x0, mark(x1)) 105.09/43.19 and(active(x0), x1) 105.09/43.19 and(x0, active(x1)) 105.09/43.19 isNat(mark(x0)) 105.09/43.19 isNat(active(x0)) 105.09/43.19 isNatList(mark(x0)) 105.09/43.19 isNatList(active(x0)) 105.09/43.19 isNatIList(mark(x0)) 105.09/43.19 isNatIList(active(x0)) 105.09/43.19 105.09/43.19 105.09/43.19 ---------------------------------------- 105.09/43.19 105.09/43.19 (64) 105.09/43.19 Obligation: 105.09/43.19 Q DP problem: 105.09/43.19 The TRS P consists of the following rules: 105.09/43.19 105.09/43.19 CONS(X1, mark(X2)) -> CONS(X1, X2) 105.09/43.19 CONS(mark(X1), X2) -> CONS(X1, X2) 105.09/43.19 CONS(active(X1), X2) -> CONS(X1, X2) 105.09/43.19 CONS(X1, active(X2)) -> CONS(X1, X2) 105.09/43.19 105.09/43.19 R is empty. 105.09/43.19 The set Q consists of the following terms: 105.09/43.19 105.09/43.19 active(zeros) 105.09/43.19 active(U11(tt, x0)) 105.09/43.19 active(and(tt, x0)) 105.09/43.19 active(isNat(0)) 105.09/43.19 active(isNat(length(x0))) 105.09/43.19 active(isNat(s(x0))) 105.09/43.19 active(isNatIList(x0)) 105.09/43.19 active(isNatList(nil)) 105.09/43.19 active(isNatList(cons(x0, x1))) 105.09/43.19 active(length(nil)) 105.09/43.19 active(length(cons(x0, x1))) 105.09/43.19 mark(zeros) 105.09/43.19 mark(cons(x0, x1)) 105.09/43.19 mark(0) 105.09/43.19 mark(U11(x0, x1)) 105.09/43.19 mark(tt) 105.09/43.19 mark(s(x0)) 105.09/43.19 mark(length(x0)) 105.09/43.19 mark(and(x0, x1)) 105.09/43.19 mark(isNat(x0)) 105.09/43.19 mark(isNatList(x0)) 105.09/43.19 mark(isNatIList(x0)) 105.09/43.19 mark(nil) 105.09/43.19 105.09/43.19 We have to consider all minimal (P,Q,R)-chains. 105.09/43.19 ---------------------------------------- 105.09/43.19 105.09/43.19 (65) QDPSizeChangeProof (EQUIVALENT) 105.09/43.19 By using the subterm criterion [SUBTERM_CRITERION] together with the size-change analysis [AAECC05] we have proven that there are no infinite chains for this DP problem. 105.09/43.19 105.09/43.19 From the DPs we obtained the following set of size-change graphs: 105.09/43.19 *CONS(X1, mark(X2)) -> CONS(X1, X2) 105.09/43.19 The graph contains the following edges 1 >= 1, 2 > 2 105.09/43.19 105.09/43.19 105.09/43.19 *CONS(mark(X1), X2) -> CONS(X1, X2) 105.09/43.19 The graph contains the following edges 1 > 1, 2 >= 2 105.09/43.19 105.09/43.19 105.09/43.19 *CONS(active(X1), X2) -> CONS(X1, X2) 105.09/43.19 The graph contains the following edges 1 > 1, 2 >= 2 105.09/43.19 105.09/43.19 105.09/43.19 *CONS(X1, active(X2)) -> CONS(X1, X2) 105.09/43.19 The graph contains the following edges 1 >= 1, 2 > 2 105.09/43.19 105.09/43.19 105.09/43.19 ---------------------------------------- 105.09/43.19 105.09/43.19 (66) 105.09/43.19 YES 105.09/43.19 105.09/43.19 ---------------------------------------- 105.09/43.19 105.09/43.19 (67) 105.09/43.19 Obligation: 105.09/43.19 Q DP problem: 105.09/43.19 The TRS P consists of the following rules: 105.09/43.19 105.09/43.19 ACTIVE(isNat(s(V1))) -> MARK(isNat(V1)) 105.09/43.19 MARK(isNat(X)) -> ACTIVE(isNat(X)) 105.09/43.19 105.09/43.19 The TRS R consists of the following rules: 105.09/43.19 105.09/43.19 active(zeros) -> mark(cons(0, zeros)) 105.09/43.19 active(U11(tt, L)) -> mark(s(length(L))) 105.09/43.19 active(and(tt, X)) -> mark(X) 105.09/43.19 active(isNat(0)) -> mark(tt) 105.09/43.19 active(isNat(s(V1))) -> mark(isNat(V1)) 105.09/43.19 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 105.09/43.19 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 105.09/43.19 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.19 mark(zeros) -> active(zeros) 105.09/43.19 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 105.09/43.19 mark(0) -> active(0) 105.09/43.19 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 105.09/43.19 mark(tt) -> active(tt) 105.09/43.19 mark(s(X)) -> active(s(mark(X))) 105.09/43.19 mark(length(X)) -> active(length(mark(X))) 105.09/43.19 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 105.09/43.19 mark(isNat(X)) -> active(isNat(X)) 105.09/43.19 mark(isNatList(X)) -> active(isNatList(X)) 105.09/43.19 mark(isNatIList(X)) -> active(isNatIList(X)) 105.09/43.19 mark(nil) -> active(nil) 105.09/43.19 cons(mark(X1), X2) -> cons(X1, X2) 105.09/43.19 cons(X1, mark(X2)) -> cons(X1, X2) 105.09/43.19 cons(active(X1), X2) -> cons(X1, X2) 105.09/43.19 cons(X1, active(X2)) -> cons(X1, X2) 105.09/43.19 U11(mark(X1), X2) -> U11(X1, X2) 105.09/43.19 U11(X1, mark(X2)) -> U11(X1, X2) 105.09/43.19 U11(active(X1), X2) -> U11(X1, X2) 105.09/43.19 U11(X1, active(X2)) -> U11(X1, X2) 105.09/43.19 s(mark(X)) -> s(X) 105.09/43.19 s(active(X)) -> s(X) 105.09/43.19 length(mark(X)) -> length(X) 105.09/43.19 length(active(X)) -> length(X) 105.09/43.19 and(mark(X1), X2) -> and(X1, X2) 105.09/43.19 and(X1, mark(X2)) -> and(X1, X2) 105.09/43.19 and(active(X1), X2) -> and(X1, X2) 105.09/43.19 and(X1, active(X2)) -> and(X1, X2) 105.09/43.19 isNat(mark(X)) -> isNat(X) 105.09/43.19 isNat(active(X)) -> isNat(X) 105.09/43.19 isNatList(mark(X)) -> isNatList(X) 105.09/43.19 isNatList(active(X)) -> isNatList(X) 105.09/43.19 isNatIList(mark(X)) -> isNatIList(X) 105.09/43.19 isNatIList(active(X)) -> isNatIList(X) 105.09/43.19 105.09/43.19 The set Q consists of the following terms: 105.09/43.19 105.09/43.19 active(zeros) 105.09/43.19 active(U11(tt, x0)) 105.09/43.19 active(and(tt, x0)) 105.09/43.19 active(isNat(0)) 105.09/43.19 active(isNat(length(x0))) 105.09/43.19 active(isNat(s(x0))) 105.09/43.19 active(isNatIList(x0)) 105.09/43.19 active(isNatList(nil)) 105.09/43.19 active(isNatList(cons(x0, x1))) 105.09/43.19 active(length(nil)) 105.09/43.19 active(length(cons(x0, x1))) 105.09/43.19 mark(zeros) 105.09/43.19 mark(cons(x0, x1)) 105.09/43.19 mark(0) 105.09/43.19 mark(U11(x0, x1)) 105.09/43.19 mark(tt) 105.09/43.19 mark(s(x0)) 105.09/43.19 mark(length(x0)) 105.09/43.19 mark(and(x0, x1)) 105.09/43.19 mark(isNat(x0)) 105.09/43.19 mark(isNatList(x0)) 105.09/43.19 mark(isNatIList(x0)) 105.09/43.19 mark(nil) 105.09/43.19 cons(mark(x0), x1) 105.09/43.19 cons(x0, mark(x1)) 105.09/43.19 cons(active(x0), x1) 105.09/43.19 cons(x0, active(x1)) 105.09/43.19 U11(mark(x0), x1) 105.09/43.19 U11(x0, mark(x1)) 105.09/43.19 U11(active(x0), x1) 105.09/43.19 U11(x0, active(x1)) 105.09/43.19 s(mark(x0)) 105.09/43.19 s(active(x0)) 105.09/43.19 length(mark(x0)) 105.09/43.19 length(active(x0)) 105.09/43.19 and(mark(x0), x1) 105.09/43.19 and(x0, mark(x1)) 105.09/43.19 and(active(x0), x1) 105.09/43.19 and(x0, active(x1)) 105.09/43.19 isNat(mark(x0)) 105.09/43.19 isNat(active(x0)) 105.09/43.19 isNatList(mark(x0)) 105.09/43.19 isNatList(active(x0)) 105.09/43.19 isNatIList(mark(x0)) 105.09/43.19 isNatIList(active(x0)) 105.09/43.19 105.09/43.19 We have to consider all minimal (P,Q,R)-chains. 105.09/43.19 ---------------------------------------- 105.09/43.19 105.09/43.19 (68) UsableRulesProof (EQUIVALENT) 105.09/43.19 As all Q-normal forms are R-normal forms we are in the innermost case. Hence, by the usable rules processor [LPAR04] we can delete all non-usable rules [FROCOS05] from R. 105.09/43.19 ---------------------------------------- 105.09/43.19 105.09/43.19 (69) 105.09/43.19 Obligation: 105.09/43.19 Q DP problem: 105.09/43.19 The TRS P consists of the following rules: 105.09/43.19 105.09/43.19 ACTIVE(isNat(s(V1))) -> MARK(isNat(V1)) 105.09/43.19 MARK(isNat(X)) -> ACTIVE(isNat(X)) 105.09/43.19 105.09/43.19 R is empty. 105.09/43.19 The set Q consists of the following terms: 105.09/43.19 105.09/43.19 active(zeros) 105.09/43.19 active(U11(tt, x0)) 105.09/43.19 active(and(tt, x0)) 105.09/43.19 active(isNat(0)) 105.09/43.19 active(isNat(length(x0))) 105.09/43.19 active(isNat(s(x0))) 105.09/43.19 active(isNatIList(x0)) 105.09/43.19 active(isNatList(nil)) 105.09/43.19 active(isNatList(cons(x0, x1))) 105.09/43.19 active(length(nil)) 105.09/43.19 active(length(cons(x0, x1))) 105.09/43.19 mark(zeros) 105.09/43.19 mark(cons(x0, x1)) 105.09/43.19 mark(0) 105.09/43.19 mark(U11(x0, x1)) 105.09/43.19 mark(tt) 105.09/43.19 mark(s(x0)) 105.09/43.19 mark(length(x0)) 105.09/43.19 mark(and(x0, x1)) 105.09/43.19 mark(isNat(x0)) 105.09/43.19 mark(isNatList(x0)) 105.09/43.19 mark(isNatIList(x0)) 105.09/43.19 mark(nil) 105.09/43.19 cons(mark(x0), x1) 105.09/43.19 cons(x0, mark(x1)) 105.09/43.19 cons(active(x0), x1) 105.09/43.19 cons(x0, active(x1)) 105.09/43.19 U11(mark(x0), x1) 105.09/43.19 U11(x0, mark(x1)) 105.09/43.19 U11(active(x0), x1) 105.09/43.19 U11(x0, active(x1)) 105.09/43.19 s(mark(x0)) 105.09/43.19 s(active(x0)) 105.09/43.19 length(mark(x0)) 105.09/43.19 length(active(x0)) 105.09/43.19 and(mark(x0), x1) 105.09/43.19 and(x0, mark(x1)) 105.09/43.19 and(active(x0), x1) 105.09/43.19 and(x0, active(x1)) 105.09/43.19 isNat(mark(x0)) 105.09/43.19 isNat(active(x0)) 105.09/43.19 isNatList(mark(x0)) 105.09/43.19 isNatList(active(x0)) 105.09/43.19 isNatIList(mark(x0)) 105.09/43.19 isNatIList(active(x0)) 105.09/43.19 105.09/43.19 We have to consider all minimal (P,Q,R)-chains. 105.09/43.19 ---------------------------------------- 105.09/43.19 105.09/43.19 (70) QReductionProof (EQUIVALENT) 105.09/43.19 We deleted the following terms from Q as each root-symbol of these terms does neither occur in P nor in R.[THIEMANN]. 105.09/43.19 105.09/43.19 active(zeros) 105.09/43.19 active(U11(tt, x0)) 105.09/43.19 active(and(tt, x0)) 105.09/43.19 active(isNat(0)) 105.09/43.19 active(isNat(length(x0))) 105.09/43.19 active(isNat(s(x0))) 105.09/43.19 active(isNatIList(x0)) 105.09/43.19 active(isNatList(nil)) 105.09/43.19 active(isNatList(cons(x0, x1))) 105.09/43.19 active(length(nil)) 105.09/43.19 active(length(cons(x0, x1))) 105.09/43.19 mark(zeros) 105.09/43.19 mark(cons(x0, x1)) 105.09/43.19 mark(0) 105.09/43.19 mark(U11(x0, x1)) 105.09/43.19 mark(tt) 105.09/43.19 mark(s(x0)) 105.09/43.19 mark(length(x0)) 105.09/43.19 mark(and(x0, x1)) 105.09/43.19 mark(isNat(x0)) 105.09/43.19 mark(isNatList(x0)) 105.09/43.19 mark(isNatIList(x0)) 105.09/43.19 mark(nil) 105.09/43.19 cons(mark(x0), x1) 105.09/43.19 cons(x0, mark(x1)) 105.09/43.19 cons(active(x0), x1) 105.09/43.19 cons(x0, active(x1)) 105.09/43.19 U11(mark(x0), x1) 105.09/43.19 U11(x0, mark(x1)) 105.09/43.19 U11(active(x0), x1) 105.09/43.19 U11(x0, active(x1)) 105.09/43.19 length(mark(x0)) 105.09/43.19 length(active(x0)) 105.09/43.19 and(mark(x0), x1) 105.09/43.19 and(x0, mark(x1)) 105.09/43.19 and(active(x0), x1) 105.09/43.19 and(x0, active(x1)) 105.09/43.19 isNatList(mark(x0)) 105.09/43.19 isNatList(active(x0)) 105.09/43.19 isNatIList(mark(x0)) 105.09/43.19 isNatIList(active(x0)) 105.09/43.19 105.09/43.19 105.09/43.19 ---------------------------------------- 105.09/43.19 105.09/43.19 (71) 105.09/43.19 Obligation: 105.09/43.19 Q DP problem: 105.09/43.19 The TRS P consists of the following rules: 105.09/43.19 105.09/43.19 ACTIVE(isNat(s(V1))) -> MARK(isNat(V1)) 105.09/43.19 MARK(isNat(X)) -> ACTIVE(isNat(X)) 105.09/43.19 105.09/43.19 R is empty. 105.09/43.19 The set Q consists of the following terms: 105.09/43.19 105.09/43.19 s(mark(x0)) 105.09/43.19 s(active(x0)) 105.09/43.19 isNat(mark(x0)) 105.09/43.19 isNat(active(x0)) 105.09/43.19 105.09/43.19 We have to consider all minimal (P,Q,R)-chains. 105.09/43.19 ---------------------------------------- 105.09/43.19 105.09/43.19 (72) UsableRulesReductionPairsProof (EQUIVALENT) 105.09/43.19 By using the usable rules with reduction pair processor [LPAR04] with a polynomial ordering [POLO], all dependency pairs and the corresponding usable rules [FROCOS05] can be oriented non-strictly. All non-usable rules are removed, and those dependency pairs and usable rules that have been oriented strictly or contain non-usable symbols in their left-hand side are removed as well. 105.09/43.19 105.09/43.19 The following dependency pairs can be deleted: 105.09/43.19 105.09/43.19 ACTIVE(isNat(s(V1))) -> MARK(isNat(V1)) 105.09/43.19 No rules are removed from R. 105.09/43.19 105.09/43.19 Used ordering: POLO with Polynomial interpretation [POLO]: 105.09/43.19 105.09/43.19 POL(ACTIVE(x_1)) = x_1 105.09/43.19 POL(MARK(x_1)) = 2*x_1 105.09/43.19 POL(isNat(x_1)) = 2*x_1 105.09/43.19 POL(s(x_1)) = 2*x_1 105.09/43.19 105.09/43.19 105.09/43.19 ---------------------------------------- 105.09/43.19 105.09/43.19 (73) 105.09/43.19 Obligation: 105.09/43.19 Q DP problem: 105.09/43.19 The TRS P consists of the following rules: 105.09/43.19 105.09/43.19 MARK(isNat(X)) -> ACTIVE(isNat(X)) 105.09/43.19 105.09/43.19 R is empty. 105.09/43.19 The set Q consists of the following terms: 105.09/43.19 105.09/43.19 s(mark(x0)) 105.09/43.19 s(active(x0)) 105.09/43.19 isNat(mark(x0)) 105.09/43.19 isNat(active(x0)) 105.09/43.19 105.09/43.19 We have to consider all minimal (P,Q,R)-chains. 105.09/43.19 ---------------------------------------- 105.09/43.19 105.09/43.19 (74) DependencyGraphProof (EQUIVALENT) 105.09/43.19 The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 0 SCCs with 1 less node. 105.09/43.19 ---------------------------------------- 105.09/43.19 105.09/43.19 (75) 105.09/43.19 TRUE 105.09/43.19 105.09/43.19 ---------------------------------------- 105.09/43.19 105.09/43.19 (76) 105.09/43.19 Obligation: 105.09/43.19 Q DP problem: 105.09/43.19 The TRS P consists of the following rules: 105.09/43.19 105.09/43.19 MARK(cons(X1, X2)) -> ACTIVE(cons(mark(X1), X2)) 105.09/43.19 ACTIVE(U11(tt, L)) -> MARK(s(length(L))) 105.09/43.19 MARK(s(X)) -> ACTIVE(s(mark(X))) 105.09/43.19 ACTIVE(and(tt, X)) -> MARK(X) 105.09/43.19 MARK(zeros) -> ACTIVE(zeros) 105.09/43.19 ACTIVE(zeros) -> MARK(cons(0, zeros)) 105.09/43.19 MARK(cons(X1, X2)) -> MARK(X1) 105.09/43.19 MARK(U11(X1, X2)) -> ACTIVE(U11(mark(X1), X2)) 105.09/43.19 ACTIVE(length(cons(N, L))) -> MARK(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.19 MARK(U11(X1, X2)) -> MARK(X1) 105.09/43.19 MARK(s(X)) -> MARK(X) 105.09/43.19 MARK(length(X)) -> ACTIVE(length(mark(X))) 105.09/43.19 MARK(length(X)) -> MARK(X) 105.09/43.19 MARK(and(X1, X2)) -> ACTIVE(and(mark(X1), X2)) 105.09/43.19 MARK(and(X1, X2)) -> MARK(X1) 105.09/43.19 MARK(isNatList(X)) -> ACTIVE(isNatList(X)) 105.09/43.19 ACTIVE(isNatList(cons(V1, V2))) -> MARK(and(isNat(V1), isNatList(V2))) 105.09/43.19 MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) 105.09/43.19 ACTIVE(isNatIList(cons(V1, V2))) -> MARK(and(isNat(V1), isNatIList(V2))) 105.09/43.19 105.09/43.19 The TRS R consists of the following rules: 105.09/43.19 105.09/43.19 active(zeros) -> mark(cons(0, zeros)) 105.09/43.19 active(U11(tt, L)) -> mark(s(length(L))) 105.09/43.19 active(and(tt, X)) -> mark(X) 105.09/43.19 active(isNat(0)) -> mark(tt) 105.09/43.19 active(isNat(s(V1))) -> mark(isNat(V1)) 105.09/43.19 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 105.09/43.19 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 105.09/43.19 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.19 mark(zeros) -> active(zeros) 105.09/43.19 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 105.09/43.19 mark(0) -> active(0) 105.09/43.19 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 105.09/43.19 mark(tt) -> active(tt) 105.09/43.19 mark(s(X)) -> active(s(mark(X))) 105.09/43.19 mark(length(X)) -> active(length(mark(X))) 105.09/43.19 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 105.09/43.19 mark(isNat(X)) -> active(isNat(X)) 105.09/43.19 mark(isNatList(X)) -> active(isNatList(X)) 105.09/43.19 mark(isNatIList(X)) -> active(isNatIList(X)) 105.09/43.19 mark(nil) -> active(nil) 105.09/43.19 cons(mark(X1), X2) -> cons(X1, X2) 105.09/43.19 cons(X1, mark(X2)) -> cons(X1, X2) 105.09/43.19 cons(active(X1), X2) -> cons(X1, X2) 105.09/43.19 cons(X1, active(X2)) -> cons(X1, X2) 105.09/43.19 U11(mark(X1), X2) -> U11(X1, X2) 105.09/43.19 U11(X1, mark(X2)) -> U11(X1, X2) 105.09/43.19 U11(active(X1), X2) -> U11(X1, X2) 105.09/43.19 U11(X1, active(X2)) -> U11(X1, X2) 105.09/43.19 s(mark(X)) -> s(X) 105.09/43.19 s(active(X)) -> s(X) 105.09/43.19 length(mark(X)) -> length(X) 105.09/43.19 length(active(X)) -> length(X) 105.09/43.19 and(mark(X1), X2) -> and(X1, X2) 105.09/43.19 and(X1, mark(X2)) -> and(X1, X2) 105.09/43.19 and(active(X1), X2) -> and(X1, X2) 105.09/43.19 and(X1, active(X2)) -> and(X1, X2) 105.09/43.19 isNat(mark(X)) -> isNat(X) 105.09/43.19 isNat(active(X)) -> isNat(X) 105.09/43.19 isNatList(mark(X)) -> isNatList(X) 105.09/43.19 isNatList(active(X)) -> isNatList(X) 105.09/43.19 isNatIList(mark(X)) -> isNatIList(X) 105.09/43.19 isNatIList(active(X)) -> isNatIList(X) 105.09/43.19 105.09/43.19 The set Q consists of the following terms: 105.09/43.19 105.09/43.19 active(zeros) 105.09/43.19 active(U11(tt, x0)) 105.09/43.19 active(and(tt, x0)) 105.09/43.19 active(isNat(0)) 105.09/43.19 active(isNat(length(x0))) 105.09/43.19 active(isNat(s(x0))) 105.09/43.19 active(isNatIList(x0)) 105.09/43.19 active(isNatList(nil)) 105.09/43.19 active(isNatList(cons(x0, x1))) 105.09/43.19 active(length(nil)) 105.09/43.19 active(length(cons(x0, x1))) 105.09/43.19 mark(zeros) 105.09/43.19 mark(cons(x0, x1)) 105.09/43.19 mark(0) 105.09/43.19 mark(U11(x0, x1)) 105.09/43.19 mark(tt) 105.09/43.19 mark(s(x0)) 105.09/43.19 mark(length(x0)) 105.09/43.19 mark(and(x0, x1)) 105.09/43.19 mark(isNat(x0)) 105.09/43.19 mark(isNatList(x0)) 105.09/43.19 mark(isNatIList(x0)) 105.09/43.19 mark(nil) 105.09/43.19 cons(mark(x0), x1) 105.09/43.19 cons(x0, mark(x1)) 105.09/43.19 cons(active(x0), x1) 105.09/43.19 cons(x0, active(x1)) 105.09/43.19 U11(mark(x0), x1) 105.09/43.19 U11(x0, mark(x1)) 105.09/43.19 U11(active(x0), x1) 105.09/43.19 U11(x0, active(x1)) 105.09/43.19 s(mark(x0)) 105.09/43.19 s(active(x0)) 105.09/43.19 length(mark(x0)) 105.09/43.19 length(active(x0)) 105.09/43.19 and(mark(x0), x1) 105.09/43.19 and(x0, mark(x1)) 105.09/43.19 and(active(x0), x1) 105.09/43.19 and(x0, active(x1)) 105.09/43.19 isNat(mark(x0)) 105.09/43.19 isNat(active(x0)) 105.09/43.19 isNatList(mark(x0)) 105.09/43.19 isNatList(active(x0)) 105.09/43.19 isNatIList(mark(x0)) 105.09/43.19 isNatIList(active(x0)) 105.09/43.19 105.09/43.19 We have to consider all minimal (P,Q,R)-chains. 105.09/43.19 ---------------------------------------- 105.09/43.19 105.09/43.19 (77) UsableRulesProof (EQUIVALENT) 105.09/43.19 As all Q-normal forms are R-normal forms we are in the innermost case. Hence, by the usable rules processor [LPAR04] we can delete all non-usable rules [FROCOS05] from R. 105.09/43.19 ---------------------------------------- 105.09/43.19 105.09/43.19 (78) 105.09/43.19 Obligation: 105.09/43.19 Q DP problem: 105.09/43.19 The TRS P consists of the following rules: 105.09/43.19 105.09/43.19 MARK(cons(X1, X2)) -> ACTIVE(cons(mark(X1), X2)) 105.09/43.19 ACTIVE(U11(tt, L)) -> MARK(s(length(L))) 105.09/43.19 MARK(s(X)) -> ACTIVE(s(mark(X))) 105.09/43.19 ACTIVE(and(tt, X)) -> MARK(X) 105.09/43.19 MARK(zeros) -> ACTIVE(zeros) 105.09/43.19 ACTIVE(zeros) -> MARK(cons(0, zeros)) 105.09/43.19 MARK(cons(X1, X2)) -> MARK(X1) 105.09/43.19 MARK(U11(X1, X2)) -> ACTIVE(U11(mark(X1), X2)) 105.09/43.19 ACTIVE(length(cons(N, L))) -> MARK(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.19 MARK(U11(X1, X2)) -> MARK(X1) 105.09/43.19 MARK(s(X)) -> MARK(X) 105.09/43.19 MARK(length(X)) -> ACTIVE(length(mark(X))) 105.09/43.19 MARK(length(X)) -> MARK(X) 105.09/43.19 MARK(and(X1, X2)) -> ACTIVE(and(mark(X1), X2)) 105.09/43.19 MARK(and(X1, X2)) -> MARK(X1) 105.09/43.19 MARK(isNatList(X)) -> ACTIVE(isNatList(X)) 105.09/43.19 ACTIVE(isNatList(cons(V1, V2))) -> MARK(and(isNat(V1), isNatList(V2))) 105.09/43.19 MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) 105.09/43.19 ACTIVE(isNatIList(cons(V1, V2))) -> MARK(and(isNat(V1), isNatIList(V2))) 105.09/43.19 105.09/43.19 The TRS R consists of the following rules: 105.09/43.19 105.09/43.19 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 105.09/43.19 active(zeros) -> mark(cons(0, zeros)) 105.09/43.19 active(U11(tt, L)) -> mark(s(length(L))) 105.09/43.19 mark(s(X)) -> active(s(mark(X))) 105.09/43.19 active(and(tt, X)) -> mark(X) 105.09/43.19 mark(zeros) -> active(zeros) 105.09/43.19 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 105.09/43.19 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 105.09/43.19 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 105.09/43.19 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 105.09/43.19 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.19 mark(length(X)) -> active(length(mark(X))) 105.09/43.19 mark(isNatList(X)) -> active(isNatList(X)) 105.09/43.19 mark(isNatIList(X)) -> active(isNatIList(X)) 105.09/43.19 mark(0) -> active(0) 105.09/43.19 mark(tt) -> active(tt) 105.09/43.19 active(isNat(s(V1))) -> mark(isNat(V1)) 105.09/43.19 mark(isNat(X)) -> active(isNat(X)) 105.09/43.19 mark(nil) -> active(nil) 105.09/43.19 and(X1, mark(X2)) -> and(X1, X2) 105.09/43.19 and(mark(X1), X2) -> and(X1, X2) 105.09/43.19 and(active(X1), X2) -> and(X1, X2) 105.09/43.19 and(X1, active(X2)) -> and(X1, X2) 105.09/43.19 active(isNat(0)) -> mark(tt) 105.09/43.19 cons(X1, mark(X2)) -> cons(X1, X2) 105.09/43.19 cons(mark(X1), X2) -> cons(X1, X2) 105.09/43.19 cons(active(X1), X2) -> cons(X1, X2) 105.09/43.19 cons(X1, active(X2)) -> cons(X1, X2) 105.09/43.19 s(active(X)) -> s(X) 105.09/43.19 s(mark(X)) -> s(X) 105.09/43.19 U11(X1, mark(X2)) -> U11(X1, X2) 105.09/43.19 U11(mark(X1), X2) -> U11(X1, X2) 105.09/43.19 U11(active(X1), X2) -> U11(X1, X2) 105.09/43.19 U11(X1, active(X2)) -> U11(X1, X2) 105.09/43.19 length(active(X)) -> length(X) 105.09/43.19 length(mark(X)) -> length(X) 105.09/43.19 105.09/43.19 The set Q consists of the following terms: 105.09/43.19 105.09/43.19 active(zeros) 105.09/43.19 active(U11(tt, x0)) 105.09/43.19 active(and(tt, x0)) 105.09/43.19 active(isNat(0)) 105.09/43.19 active(isNat(length(x0))) 105.09/43.19 active(isNat(s(x0))) 105.09/43.19 active(isNatIList(x0)) 105.09/43.19 active(isNatList(nil)) 105.09/43.19 active(isNatList(cons(x0, x1))) 105.09/43.19 active(length(nil)) 105.09/43.19 active(length(cons(x0, x1))) 105.09/43.19 mark(zeros) 105.09/43.19 mark(cons(x0, x1)) 105.09/43.19 mark(0) 105.09/43.19 mark(U11(x0, x1)) 105.09/43.19 mark(tt) 105.09/43.19 mark(s(x0)) 105.09/43.19 mark(length(x0)) 105.09/43.19 mark(and(x0, x1)) 105.09/43.19 mark(isNat(x0)) 105.09/43.19 mark(isNatList(x0)) 105.09/43.19 mark(isNatIList(x0)) 105.09/43.19 mark(nil) 105.09/43.19 cons(mark(x0), x1) 105.09/43.19 cons(x0, mark(x1)) 105.09/43.19 cons(active(x0), x1) 105.09/43.19 cons(x0, active(x1)) 105.09/43.19 U11(mark(x0), x1) 105.09/43.19 U11(x0, mark(x1)) 105.09/43.19 U11(active(x0), x1) 105.09/43.19 U11(x0, active(x1)) 105.09/43.19 s(mark(x0)) 105.09/43.19 s(active(x0)) 105.09/43.19 length(mark(x0)) 105.09/43.19 length(active(x0)) 105.09/43.19 and(mark(x0), x1) 105.09/43.19 and(x0, mark(x1)) 105.09/43.19 and(active(x0), x1) 105.09/43.19 and(x0, active(x1)) 105.09/43.19 isNat(mark(x0)) 105.09/43.19 isNat(active(x0)) 105.09/43.19 isNatList(mark(x0)) 105.09/43.19 isNatList(active(x0)) 105.09/43.19 isNatIList(mark(x0)) 105.09/43.19 isNatIList(active(x0)) 105.09/43.19 105.09/43.19 We have to consider all minimal (P,Q,R)-chains. 105.09/43.19 ---------------------------------------- 105.09/43.19 105.09/43.19 (79) MRRProof (EQUIVALENT) 105.09/43.19 By using the rule removal processor [LPAR04] with the following ordering, at least one Dependency Pair or term rewrite system rule of this QDP problem can be strictly oriented. 105.09/43.19 105.09/43.19 Strictly oriented dependency pairs: 105.09/43.19 105.09/43.19 MARK(U11(X1, X2)) -> MARK(X1) 105.09/43.19 MARK(length(X)) -> MARK(X) 105.09/43.19 105.09/43.19 105.09/43.19 Used ordering: Polynomial interpretation [POLO]: 105.09/43.19 105.09/43.19 POL(0) = 0 105.09/43.19 POL(ACTIVE(x_1)) = 2*x_1 105.09/43.19 POL(MARK(x_1)) = 2*x_1 105.09/43.19 POL(U11(x_1, x_2)) = 1 + x_1 + x_2 105.09/43.19 POL(active(x_1)) = x_1 105.09/43.19 POL(and(x_1, x_2)) = x_1 + x_2 105.09/43.19 POL(cons(x_1, x_2)) = x_1 + 2*x_2 105.09/43.19 POL(isNat(x_1)) = x_1 105.09/43.19 POL(isNatIList(x_1)) = x_1 105.09/43.19 POL(isNatList(x_1)) = x_1 105.09/43.19 POL(length(x_1)) = 1 + x_1 105.09/43.19 POL(mark(x_1)) = x_1 105.09/43.19 POL(nil) = 0 105.09/43.19 POL(s(x_1)) = x_1 105.09/43.19 POL(tt) = 0 105.09/43.19 POL(zeros) = 0 105.09/43.19 105.09/43.19 105.09/43.19 ---------------------------------------- 105.09/43.19 105.09/43.19 (80) 105.09/43.19 Obligation: 105.09/43.19 Q DP problem: 105.09/43.19 The TRS P consists of the following rules: 105.09/43.19 105.09/43.19 MARK(cons(X1, X2)) -> ACTIVE(cons(mark(X1), X2)) 105.09/43.19 ACTIVE(U11(tt, L)) -> MARK(s(length(L))) 105.09/43.19 MARK(s(X)) -> ACTIVE(s(mark(X))) 105.09/43.19 ACTIVE(and(tt, X)) -> MARK(X) 105.09/43.19 MARK(zeros) -> ACTIVE(zeros) 105.09/43.19 ACTIVE(zeros) -> MARK(cons(0, zeros)) 105.09/43.19 MARK(cons(X1, X2)) -> MARK(X1) 105.09/43.19 MARK(U11(X1, X2)) -> ACTIVE(U11(mark(X1), X2)) 105.09/43.19 ACTIVE(length(cons(N, L))) -> MARK(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.19 MARK(s(X)) -> MARK(X) 105.09/43.19 MARK(length(X)) -> ACTIVE(length(mark(X))) 105.09/43.19 MARK(and(X1, X2)) -> ACTIVE(and(mark(X1), X2)) 105.09/43.19 MARK(and(X1, X2)) -> MARK(X1) 105.09/43.19 MARK(isNatList(X)) -> ACTIVE(isNatList(X)) 105.09/43.19 ACTIVE(isNatList(cons(V1, V2))) -> MARK(and(isNat(V1), isNatList(V2))) 105.09/43.19 MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) 105.09/43.19 ACTIVE(isNatIList(cons(V1, V2))) -> MARK(and(isNat(V1), isNatIList(V2))) 105.09/43.19 105.09/43.19 The TRS R consists of the following rules: 105.09/43.19 105.09/43.19 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 105.09/43.19 active(zeros) -> mark(cons(0, zeros)) 105.09/43.19 active(U11(tt, L)) -> mark(s(length(L))) 105.09/43.19 mark(s(X)) -> active(s(mark(X))) 105.09/43.19 active(and(tt, X)) -> mark(X) 105.09/43.19 mark(zeros) -> active(zeros) 105.09/43.19 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 105.09/43.19 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 105.09/43.19 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 105.09/43.19 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 105.09/43.19 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.19 mark(length(X)) -> active(length(mark(X))) 105.09/43.19 mark(isNatList(X)) -> active(isNatList(X)) 105.09/43.19 mark(isNatIList(X)) -> active(isNatIList(X)) 105.09/43.19 mark(0) -> active(0) 105.09/43.19 mark(tt) -> active(tt) 105.09/43.19 active(isNat(s(V1))) -> mark(isNat(V1)) 105.09/43.19 mark(isNat(X)) -> active(isNat(X)) 105.09/43.19 mark(nil) -> active(nil) 105.09/43.19 and(X1, mark(X2)) -> and(X1, X2) 105.09/43.19 and(mark(X1), X2) -> and(X1, X2) 105.09/43.19 and(active(X1), X2) -> and(X1, X2) 105.09/43.19 and(X1, active(X2)) -> and(X1, X2) 105.09/43.19 active(isNat(0)) -> mark(tt) 105.09/43.19 cons(X1, mark(X2)) -> cons(X1, X2) 105.09/43.19 cons(mark(X1), X2) -> cons(X1, X2) 105.09/43.19 cons(active(X1), X2) -> cons(X1, X2) 105.09/43.19 cons(X1, active(X2)) -> cons(X1, X2) 105.09/43.19 s(active(X)) -> s(X) 105.09/43.19 s(mark(X)) -> s(X) 105.09/43.19 U11(X1, mark(X2)) -> U11(X1, X2) 105.09/43.19 U11(mark(X1), X2) -> U11(X1, X2) 105.09/43.19 U11(active(X1), X2) -> U11(X1, X2) 105.09/43.19 U11(X1, active(X2)) -> U11(X1, X2) 105.09/43.19 length(active(X)) -> length(X) 105.09/43.19 length(mark(X)) -> length(X) 105.09/43.19 105.09/43.19 The set Q consists of the following terms: 105.09/43.19 105.09/43.19 active(zeros) 105.09/43.19 active(U11(tt, x0)) 105.09/43.19 active(and(tt, x0)) 105.09/43.19 active(isNat(0)) 105.09/43.19 active(isNat(length(x0))) 105.09/43.19 active(isNat(s(x0))) 105.09/43.19 active(isNatIList(x0)) 105.09/43.19 active(isNatList(nil)) 105.09/43.19 active(isNatList(cons(x0, x1))) 105.09/43.19 active(length(nil)) 105.09/43.19 active(length(cons(x0, x1))) 105.09/43.19 mark(zeros) 105.09/43.19 mark(cons(x0, x1)) 105.09/43.19 mark(0) 105.09/43.19 mark(U11(x0, x1)) 105.09/43.19 mark(tt) 105.09/43.19 mark(s(x0)) 105.09/43.19 mark(length(x0)) 105.09/43.19 mark(and(x0, x1)) 105.09/43.19 mark(isNat(x0)) 105.09/43.19 mark(isNatList(x0)) 105.09/43.19 mark(isNatIList(x0)) 105.09/43.19 mark(nil) 105.09/43.19 cons(mark(x0), x1) 105.09/43.19 cons(x0, mark(x1)) 105.09/43.19 cons(active(x0), x1) 105.09/43.19 cons(x0, active(x1)) 105.09/43.19 U11(mark(x0), x1) 105.09/43.19 U11(x0, mark(x1)) 105.09/43.19 U11(active(x0), x1) 105.09/43.19 U11(x0, active(x1)) 105.09/43.19 s(mark(x0)) 105.09/43.19 s(active(x0)) 105.09/43.19 length(mark(x0)) 105.09/43.19 length(active(x0)) 105.09/43.19 and(mark(x0), x1) 105.09/43.19 and(x0, mark(x1)) 105.09/43.19 and(active(x0), x1) 105.09/43.19 and(x0, active(x1)) 105.09/43.19 isNat(mark(x0)) 105.09/43.19 isNat(active(x0)) 105.09/43.19 isNatList(mark(x0)) 105.09/43.19 isNatList(active(x0)) 105.09/43.19 isNatIList(mark(x0)) 105.09/43.19 isNatIList(active(x0)) 105.09/43.19 105.09/43.19 We have to consider all minimal (P,Q,R)-chains. 105.09/43.19 ---------------------------------------- 105.09/43.19 105.09/43.19 (81) QDPQMonotonicMRRProof (EQUIVALENT) 105.09/43.19 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. 105.09/43.19 105.09/43.19 Strictly oriented dependency pairs: 105.09/43.19 105.09/43.19 MARK(cons(X1, X2)) -> ACTIVE(cons(mark(X1), X2)) 105.09/43.19 MARK(s(X)) -> ACTIVE(s(mark(X))) 105.09/43.19 105.09/43.19 105.09/43.19 Used ordering: Polynomial interpretation [POLO]: 105.09/43.19 105.09/43.19 POL(0) = 0 105.09/43.19 POL(ACTIVE(x_1)) = x_1 105.09/43.19 POL(MARK(x_1)) = 1 105.09/43.19 POL(U11(x_1, x_2)) = 1 105.09/43.19 POL(active(x_1)) = 0 105.09/43.19 POL(and(x_1, x_2)) = 1 105.09/43.19 POL(cons(x_1, x_2)) = 0 105.09/43.19 POL(isNat(x_1)) = 0 105.09/43.19 POL(isNatIList(x_1)) = 1 105.09/43.19 POL(isNatList(x_1)) = 1 105.09/43.19 POL(length(x_1)) = 1 105.09/43.19 POL(mark(x_1)) = 0 105.09/43.19 POL(nil) = 0 105.09/43.19 POL(s(x_1)) = 0 105.09/43.19 POL(tt) = 0 105.09/43.19 POL(zeros) = 1 105.09/43.19 105.09/43.19 105.09/43.19 ---------------------------------------- 105.09/43.19 105.09/43.19 (82) 105.09/43.19 Obligation: 105.09/43.19 Q DP problem: 105.09/43.19 The TRS P consists of the following rules: 105.09/43.19 105.09/43.19 ACTIVE(U11(tt, L)) -> MARK(s(length(L))) 105.09/43.19 ACTIVE(and(tt, X)) -> MARK(X) 105.09/43.19 MARK(zeros) -> ACTIVE(zeros) 105.09/43.19 ACTIVE(zeros) -> MARK(cons(0, zeros)) 105.09/43.19 MARK(cons(X1, X2)) -> MARK(X1) 105.09/43.19 MARK(U11(X1, X2)) -> ACTIVE(U11(mark(X1), X2)) 105.09/43.19 ACTIVE(length(cons(N, L))) -> MARK(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.19 MARK(s(X)) -> MARK(X) 105.09/43.19 MARK(length(X)) -> ACTIVE(length(mark(X))) 105.09/43.19 MARK(and(X1, X2)) -> ACTIVE(and(mark(X1), X2)) 105.09/43.19 MARK(and(X1, X2)) -> MARK(X1) 105.09/43.19 MARK(isNatList(X)) -> ACTIVE(isNatList(X)) 105.09/43.19 ACTIVE(isNatList(cons(V1, V2))) -> MARK(and(isNat(V1), isNatList(V2))) 105.09/43.19 MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) 105.09/43.19 ACTIVE(isNatIList(cons(V1, V2))) -> MARK(and(isNat(V1), isNatIList(V2))) 105.09/43.19 105.09/43.19 The TRS R consists of the following rules: 105.09/43.19 105.09/43.19 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 105.09/43.19 active(zeros) -> mark(cons(0, zeros)) 105.09/43.19 active(U11(tt, L)) -> mark(s(length(L))) 105.09/43.19 mark(s(X)) -> active(s(mark(X))) 105.09/43.19 active(and(tt, X)) -> mark(X) 105.09/43.19 mark(zeros) -> active(zeros) 105.09/43.19 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 105.09/43.19 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 105.09/43.19 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 105.09/43.19 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 105.09/43.19 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.19 mark(length(X)) -> active(length(mark(X))) 105.09/43.19 mark(isNatList(X)) -> active(isNatList(X)) 105.09/43.19 mark(isNatIList(X)) -> active(isNatIList(X)) 105.09/43.19 mark(0) -> active(0) 105.09/43.19 mark(tt) -> active(tt) 105.09/43.19 active(isNat(s(V1))) -> mark(isNat(V1)) 105.09/43.19 mark(isNat(X)) -> active(isNat(X)) 105.09/43.19 mark(nil) -> active(nil) 105.09/43.19 and(X1, mark(X2)) -> and(X1, X2) 105.09/43.19 and(mark(X1), X2) -> and(X1, X2) 105.09/43.19 and(active(X1), X2) -> and(X1, X2) 105.09/43.19 and(X1, active(X2)) -> and(X1, X2) 105.09/43.19 active(isNat(0)) -> mark(tt) 105.09/43.19 cons(X1, mark(X2)) -> cons(X1, X2) 105.09/43.19 cons(mark(X1), X2) -> cons(X1, X2) 105.09/43.19 cons(active(X1), X2) -> cons(X1, X2) 105.09/43.19 cons(X1, active(X2)) -> cons(X1, X2) 105.09/43.19 s(active(X)) -> s(X) 105.09/43.19 s(mark(X)) -> s(X) 105.09/43.19 U11(X1, mark(X2)) -> U11(X1, X2) 105.09/43.19 U11(mark(X1), X2) -> U11(X1, X2) 105.09/43.19 U11(active(X1), X2) -> U11(X1, X2) 105.09/43.19 U11(X1, active(X2)) -> U11(X1, X2) 105.09/43.19 length(active(X)) -> length(X) 105.09/43.19 length(mark(X)) -> length(X) 105.09/43.19 105.09/43.19 The set Q consists of the following terms: 105.09/43.19 105.09/43.19 active(zeros) 105.09/43.19 active(U11(tt, x0)) 105.09/43.19 active(and(tt, x0)) 105.09/43.19 active(isNat(0)) 105.09/43.19 active(isNat(length(x0))) 105.09/43.19 active(isNat(s(x0))) 105.09/43.19 active(isNatIList(x0)) 105.09/43.19 active(isNatList(nil)) 105.09/43.19 active(isNatList(cons(x0, x1))) 105.09/43.19 active(length(nil)) 105.09/43.19 active(length(cons(x0, x1))) 105.09/43.19 mark(zeros) 105.09/43.19 mark(cons(x0, x1)) 105.09/43.19 mark(0) 105.09/43.19 mark(U11(x0, x1)) 105.09/43.19 mark(tt) 105.09/43.19 mark(s(x0)) 105.09/43.19 mark(length(x0)) 105.09/43.19 mark(and(x0, x1)) 105.09/43.19 mark(isNat(x0)) 105.09/43.19 mark(isNatList(x0)) 105.09/43.19 mark(isNatIList(x0)) 105.09/43.19 mark(nil) 105.09/43.19 cons(mark(x0), x1) 105.09/43.19 cons(x0, mark(x1)) 105.09/43.19 cons(active(x0), x1) 105.09/43.19 cons(x0, active(x1)) 105.09/43.19 U11(mark(x0), x1) 105.09/43.19 U11(x0, mark(x1)) 105.09/43.19 U11(active(x0), x1) 105.09/43.19 U11(x0, active(x1)) 105.09/43.19 s(mark(x0)) 105.09/43.19 s(active(x0)) 105.09/43.19 length(mark(x0)) 105.09/43.19 length(active(x0)) 105.09/43.19 and(mark(x0), x1) 105.09/43.19 and(x0, mark(x1)) 105.09/43.19 and(active(x0), x1) 105.09/43.19 and(x0, active(x1)) 105.09/43.19 isNat(mark(x0)) 105.09/43.19 isNat(active(x0)) 105.09/43.19 isNatList(mark(x0)) 105.09/43.19 isNatList(active(x0)) 105.09/43.19 isNatIList(mark(x0)) 105.09/43.19 isNatIList(active(x0)) 105.09/43.19 105.09/43.19 We have to consider all minimal (P,Q,R)-chains. 105.09/43.19 ---------------------------------------- 105.09/43.19 105.09/43.19 (83) QDPQMonotonicMRRProof (EQUIVALENT) 105.09/43.19 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. 105.09/43.19 105.09/43.19 Strictly oriented dependency pairs: 105.09/43.19 105.09/43.19 ACTIVE(zeros) -> MARK(cons(0, zeros)) 105.09/43.19 105.09/43.19 105.09/43.19 Used ordering: Polynomial interpretation [POLO]: 105.09/43.19 105.09/43.19 POL(0) = 0 105.09/43.19 POL(ACTIVE(x_1)) = 2*x_1 105.09/43.19 POL(MARK(x_1)) = 2*x_1 105.09/43.19 POL(U11(x_1, x_2)) = 0 105.09/43.19 POL(active(x_1)) = x_1 105.09/43.19 POL(and(x_1, x_2)) = 2*x_1 + x_2 105.09/43.19 POL(cons(x_1, x_2)) = 2*x_1 105.09/43.19 POL(isNat(x_1)) = 0 105.09/43.19 POL(isNatIList(x_1)) = 0 105.09/43.19 POL(isNatList(x_1)) = 0 105.09/43.19 POL(length(x_1)) = 0 105.09/43.19 POL(mark(x_1)) = x_1 105.09/43.19 POL(nil) = 0 105.09/43.19 POL(s(x_1)) = x_1 105.09/43.19 POL(tt) = 0 105.09/43.19 POL(zeros) = 2 105.09/43.19 105.09/43.19 105.09/43.19 ---------------------------------------- 105.09/43.19 105.09/43.19 (84) 105.09/43.19 Obligation: 105.09/43.19 Q DP problem: 105.09/43.19 The TRS P consists of the following rules: 105.09/43.19 105.09/43.19 ACTIVE(U11(tt, L)) -> MARK(s(length(L))) 105.09/43.19 ACTIVE(and(tt, X)) -> MARK(X) 105.09/43.19 MARK(zeros) -> ACTIVE(zeros) 105.09/43.19 MARK(cons(X1, X2)) -> MARK(X1) 105.09/43.19 MARK(U11(X1, X2)) -> ACTIVE(U11(mark(X1), X2)) 105.09/43.19 ACTIVE(length(cons(N, L))) -> MARK(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.19 MARK(s(X)) -> MARK(X) 105.09/43.19 MARK(length(X)) -> ACTIVE(length(mark(X))) 105.09/43.19 MARK(and(X1, X2)) -> ACTIVE(and(mark(X1), X2)) 105.09/43.19 MARK(and(X1, X2)) -> MARK(X1) 105.09/43.19 MARK(isNatList(X)) -> ACTIVE(isNatList(X)) 105.09/43.19 ACTIVE(isNatList(cons(V1, V2))) -> MARK(and(isNat(V1), isNatList(V2))) 105.09/43.19 MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) 105.09/43.19 ACTIVE(isNatIList(cons(V1, V2))) -> MARK(and(isNat(V1), isNatIList(V2))) 105.09/43.19 105.09/43.19 The TRS R consists of the following rules: 105.09/43.19 105.09/43.19 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 105.09/43.19 active(zeros) -> mark(cons(0, zeros)) 105.09/43.19 active(U11(tt, L)) -> mark(s(length(L))) 105.09/43.19 mark(s(X)) -> active(s(mark(X))) 105.09/43.19 active(and(tt, X)) -> mark(X) 105.09/43.19 mark(zeros) -> active(zeros) 105.09/43.19 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 105.09/43.19 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 105.09/43.19 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 105.09/43.19 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 105.09/43.19 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.19 mark(length(X)) -> active(length(mark(X))) 105.09/43.19 mark(isNatList(X)) -> active(isNatList(X)) 105.09/43.19 mark(isNatIList(X)) -> active(isNatIList(X)) 105.09/43.19 mark(0) -> active(0) 105.09/43.19 mark(tt) -> active(tt) 105.09/43.19 active(isNat(s(V1))) -> mark(isNat(V1)) 105.09/43.19 mark(isNat(X)) -> active(isNat(X)) 105.09/43.19 mark(nil) -> active(nil) 105.09/43.19 and(X1, mark(X2)) -> and(X1, X2) 105.09/43.19 and(mark(X1), X2) -> and(X1, X2) 105.09/43.19 and(active(X1), X2) -> and(X1, X2) 105.09/43.19 and(X1, active(X2)) -> and(X1, X2) 105.09/43.19 active(isNat(0)) -> mark(tt) 105.09/43.19 cons(X1, mark(X2)) -> cons(X1, X2) 105.09/43.19 cons(mark(X1), X2) -> cons(X1, X2) 105.09/43.19 cons(active(X1), X2) -> cons(X1, X2) 105.09/43.19 cons(X1, active(X2)) -> cons(X1, X2) 105.09/43.19 s(active(X)) -> s(X) 105.09/43.19 s(mark(X)) -> s(X) 105.09/43.19 U11(X1, mark(X2)) -> U11(X1, X2) 105.09/43.19 U11(mark(X1), X2) -> U11(X1, X2) 105.09/43.19 U11(active(X1), X2) -> U11(X1, X2) 105.09/43.19 U11(X1, active(X2)) -> U11(X1, X2) 105.09/43.19 length(active(X)) -> length(X) 105.09/43.19 length(mark(X)) -> length(X) 105.09/43.19 105.09/43.19 The set Q consists of the following terms: 105.09/43.19 105.09/43.19 active(zeros) 105.09/43.19 active(U11(tt, x0)) 105.09/43.19 active(and(tt, x0)) 105.09/43.19 active(isNat(0)) 105.09/43.19 active(isNat(length(x0))) 105.09/43.19 active(isNat(s(x0))) 105.09/43.19 active(isNatIList(x0)) 105.09/43.19 active(isNatList(nil)) 105.09/43.19 active(isNatList(cons(x0, x1))) 105.09/43.19 active(length(nil)) 105.09/43.19 active(length(cons(x0, x1))) 105.09/43.19 mark(zeros) 105.09/43.19 mark(cons(x0, x1)) 105.09/43.19 mark(0) 105.09/43.19 mark(U11(x0, x1)) 105.09/43.19 mark(tt) 105.09/43.19 mark(s(x0)) 105.09/43.19 mark(length(x0)) 105.09/43.19 mark(and(x0, x1)) 105.09/43.19 mark(isNat(x0)) 105.09/43.19 mark(isNatList(x0)) 105.09/43.19 mark(isNatIList(x0)) 105.09/43.19 mark(nil) 105.09/43.19 cons(mark(x0), x1) 105.09/43.19 cons(x0, mark(x1)) 105.09/43.19 cons(active(x0), x1) 105.09/43.19 cons(x0, active(x1)) 105.09/43.19 U11(mark(x0), x1) 105.09/43.19 U11(x0, mark(x1)) 105.09/43.19 U11(active(x0), x1) 105.09/43.19 U11(x0, active(x1)) 105.09/43.19 s(mark(x0)) 105.09/43.19 s(active(x0)) 105.09/43.19 length(mark(x0)) 105.09/43.19 length(active(x0)) 105.09/43.19 and(mark(x0), x1) 105.09/43.19 and(x0, mark(x1)) 105.09/43.19 and(active(x0), x1) 105.09/43.19 and(x0, active(x1)) 105.09/43.19 isNat(mark(x0)) 105.09/43.19 isNat(active(x0)) 105.09/43.19 isNatList(mark(x0)) 105.09/43.19 isNatList(active(x0)) 105.09/43.19 isNatIList(mark(x0)) 105.09/43.19 isNatIList(active(x0)) 105.09/43.19 105.09/43.19 We have to consider all minimal (P,Q,R)-chains. 105.09/43.20 ---------------------------------------- 105.09/43.20 105.09/43.20 (85) DependencyGraphProof (EQUIVALENT) 105.09/43.20 The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 1 SCC with 1 less node. 105.09/43.20 ---------------------------------------- 105.09/43.20 105.09/43.20 (86) 105.09/43.20 Obligation: 105.09/43.20 Q DP problem: 105.09/43.20 The TRS P consists of the following rules: 105.09/43.20 105.09/43.20 MARK(s(X)) -> MARK(X) 105.09/43.20 MARK(cons(X1, X2)) -> MARK(X1) 105.09/43.20 MARK(U11(X1, X2)) -> ACTIVE(U11(mark(X1), X2)) 105.09/43.20 ACTIVE(U11(tt, L)) -> MARK(s(length(L))) 105.09/43.20 ACTIVE(and(tt, X)) -> MARK(X) 105.09/43.20 MARK(length(X)) -> ACTIVE(length(mark(X))) 105.09/43.20 ACTIVE(length(cons(N, L))) -> MARK(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.20 MARK(and(X1, X2)) -> ACTIVE(and(mark(X1), X2)) 105.09/43.20 MARK(and(X1, X2)) -> MARK(X1) 105.09/43.20 MARK(isNatList(X)) -> ACTIVE(isNatList(X)) 105.09/43.20 ACTIVE(isNatList(cons(V1, V2))) -> MARK(and(isNat(V1), isNatList(V2))) 105.09/43.20 MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) 105.09/43.20 ACTIVE(isNatIList(cons(V1, V2))) -> MARK(and(isNat(V1), isNatIList(V2))) 105.09/43.20 105.09/43.20 The TRS R consists of the following rules: 105.09/43.20 105.09/43.20 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 105.09/43.20 active(zeros) -> mark(cons(0, zeros)) 105.09/43.20 active(U11(tt, L)) -> mark(s(length(L))) 105.09/43.20 mark(s(X)) -> active(s(mark(X))) 105.09/43.20 active(and(tt, X)) -> mark(X) 105.09/43.20 mark(zeros) -> active(zeros) 105.09/43.20 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 105.09/43.20 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 105.09/43.20 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 105.09/43.20 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 105.09/43.20 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.20 mark(length(X)) -> active(length(mark(X))) 105.09/43.20 mark(isNatList(X)) -> active(isNatList(X)) 105.09/43.20 mark(isNatIList(X)) -> active(isNatIList(X)) 105.09/43.20 mark(0) -> active(0) 105.09/43.20 mark(tt) -> active(tt) 105.09/43.20 active(isNat(s(V1))) -> mark(isNat(V1)) 105.09/43.20 mark(isNat(X)) -> active(isNat(X)) 105.09/43.20 mark(nil) -> active(nil) 105.09/43.20 and(X1, mark(X2)) -> and(X1, X2) 105.09/43.20 and(mark(X1), X2) -> and(X1, X2) 105.09/43.20 and(active(X1), X2) -> and(X1, X2) 105.09/43.20 and(X1, active(X2)) -> and(X1, X2) 105.09/43.20 active(isNat(0)) -> mark(tt) 105.09/43.20 cons(X1, mark(X2)) -> cons(X1, X2) 105.09/43.20 cons(mark(X1), X2) -> cons(X1, X2) 105.09/43.20 cons(active(X1), X2) -> cons(X1, X2) 105.09/43.20 cons(X1, active(X2)) -> cons(X1, X2) 105.09/43.20 s(active(X)) -> s(X) 105.09/43.20 s(mark(X)) -> s(X) 105.09/43.20 U11(X1, mark(X2)) -> U11(X1, X2) 105.09/43.20 U11(mark(X1), X2) -> U11(X1, X2) 105.09/43.20 U11(active(X1), X2) -> U11(X1, X2) 105.09/43.20 U11(X1, active(X2)) -> U11(X1, X2) 105.09/43.20 length(active(X)) -> length(X) 105.09/43.20 length(mark(X)) -> length(X) 105.09/43.20 105.09/43.20 The set Q consists of the following terms: 105.09/43.20 105.09/43.20 active(zeros) 105.09/43.20 active(U11(tt, x0)) 105.09/43.20 active(and(tt, x0)) 105.09/43.20 active(isNat(0)) 105.09/43.20 active(isNat(length(x0))) 105.09/43.20 active(isNat(s(x0))) 105.09/43.20 active(isNatIList(x0)) 105.09/43.20 active(isNatList(nil)) 105.09/43.20 active(isNatList(cons(x0, x1))) 105.09/43.20 active(length(nil)) 105.09/43.20 active(length(cons(x0, x1))) 105.09/43.20 mark(zeros) 105.09/43.20 mark(cons(x0, x1)) 105.09/43.20 mark(0) 105.09/43.20 mark(U11(x0, x1)) 105.09/43.20 mark(tt) 105.09/43.20 mark(s(x0)) 105.09/43.20 mark(length(x0)) 105.09/43.20 mark(and(x0, x1)) 105.09/43.20 mark(isNat(x0)) 105.09/43.20 mark(isNatList(x0)) 105.09/43.20 mark(isNatIList(x0)) 105.09/43.20 mark(nil) 105.09/43.20 cons(mark(x0), x1) 105.09/43.20 cons(x0, mark(x1)) 105.09/43.20 cons(active(x0), x1) 105.09/43.20 cons(x0, active(x1)) 105.09/43.20 U11(mark(x0), x1) 105.09/43.20 U11(x0, mark(x1)) 105.09/43.20 U11(active(x0), x1) 105.09/43.20 U11(x0, active(x1)) 105.09/43.20 s(mark(x0)) 105.09/43.20 s(active(x0)) 105.09/43.20 length(mark(x0)) 105.09/43.20 length(active(x0)) 105.09/43.20 and(mark(x0), x1) 105.09/43.20 and(x0, mark(x1)) 105.09/43.20 and(active(x0), x1) 105.09/43.20 and(x0, active(x1)) 105.09/43.20 isNat(mark(x0)) 105.09/43.20 isNat(active(x0)) 105.09/43.20 isNatList(mark(x0)) 105.09/43.20 isNatList(active(x0)) 105.09/43.20 isNatIList(mark(x0)) 105.09/43.20 isNatIList(active(x0)) 105.09/43.20 105.09/43.20 We have to consider all minimal (P,Q,R)-chains. 105.09/43.20 ---------------------------------------- 105.09/43.20 105.09/43.20 (87) QDPQMonotonicMRRProof (EQUIVALENT) 105.09/43.20 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. 105.09/43.20 105.09/43.20 Strictly oriented dependency pairs: 105.09/43.20 105.09/43.20 MARK(cons(X1, X2)) -> MARK(X1) 105.09/43.20 105.09/43.20 105.09/43.20 Used ordering: Polynomial interpretation [POLO]: 105.09/43.20 105.09/43.20 POL(0) = 0 105.09/43.20 POL(ACTIVE(x_1)) = x_1 105.09/43.20 POL(MARK(x_1)) = 2*x_1 105.09/43.20 POL(U11(x_1, x_2)) = 0 105.09/43.20 POL(active(x_1)) = x_1 105.09/43.20 POL(and(x_1, x_2)) = 2*x_1 + 2*x_2 105.09/43.20 POL(cons(x_1, x_2)) = 1 + x_1 105.09/43.20 POL(isNat(x_1)) = 0 105.09/43.20 POL(isNatIList(x_1)) = 0 105.09/43.20 POL(isNatList(x_1)) = 0 105.09/43.20 POL(length(x_1)) = 0 105.09/43.20 POL(mark(x_1)) = 2*x_1 105.09/43.20 POL(nil) = 2 105.09/43.20 POL(s(x_1)) = 2*x_1 105.09/43.20 POL(tt) = 0 105.09/43.20 POL(zeros) = 2 105.09/43.20 105.09/43.20 105.09/43.20 ---------------------------------------- 105.09/43.20 105.09/43.20 (88) 105.09/43.20 Obligation: 105.09/43.20 Q DP problem: 105.09/43.20 The TRS P consists of the following rules: 105.09/43.20 105.09/43.20 MARK(s(X)) -> MARK(X) 105.09/43.20 MARK(U11(X1, X2)) -> ACTIVE(U11(mark(X1), X2)) 105.09/43.20 ACTIVE(U11(tt, L)) -> MARK(s(length(L))) 105.09/43.20 ACTIVE(and(tt, X)) -> MARK(X) 105.09/43.20 MARK(length(X)) -> ACTIVE(length(mark(X))) 105.09/43.20 ACTIVE(length(cons(N, L))) -> MARK(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.20 MARK(and(X1, X2)) -> ACTIVE(and(mark(X1), X2)) 105.09/43.20 MARK(and(X1, X2)) -> MARK(X1) 105.09/43.20 MARK(isNatList(X)) -> ACTIVE(isNatList(X)) 105.09/43.20 ACTIVE(isNatList(cons(V1, V2))) -> MARK(and(isNat(V1), isNatList(V2))) 105.09/43.20 MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) 105.09/43.20 ACTIVE(isNatIList(cons(V1, V2))) -> MARK(and(isNat(V1), isNatIList(V2))) 105.09/43.20 105.09/43.20 The TRS R consists of the following rules: 105.09/43.20 105.09/43.20 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 105.09/43.20 active(zeros) -> mark(cons(0, zeros)) 105.09/43.20 active(U11(tt, L)) -> mark(s(length(L))) 105.09/43.20 mark(s(X)) -> active(s(mark(X))) 105.09/43.20 active(and(tt, X)) -> mark(X) 105.09/43.20 mark(zeros) -> active(zeros) 105.09/43.20 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 105.09/43.20 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 105.09/43.20 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 105.09/43.20 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 105.09/43.20 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.20 mark(length(X)) -> active(length(mark(X))) 105.09/43.20 mark(isNatList(X)) -> active(isNatList(X)) 105.09/43.20 mark(isNatIList(X)) -> active(isNatIList(X)) 105.09/43.20 mark(0) -> active(0) 105.09/43.20 mark(tt) -> active(tt) 105.09/43.20 active(isNat(s(V1))) -> mark(isNat(V1)) 105.09/43.20 mark(isNat(X)) -> active(isNat(X)) 105.09/43.20 mark(nil) -> active(nil) 105.09/43.20 and(X1, mark(X2)) -> and(X1, X2) 105.09/43.20 and(mark(X1), X2) -> and(X1, X2) 105.09/43.20 and(active(X1), X2) -> and(X1, X2) 105.09/43.20 and(X1, active(X2)) -> and(X1, X2) 105.09/43.20 active(isNat(0)) -> mark(tt) 105.09/43.20 cons(X1, mark(X2)) -> cons(X1, X2) 105.09/43.20 cons(mark(X1), X2) -> cons(X1, X2) 105.09/43.20 cons(active(X1), X2) -> cons(X1, X2) 105.09/43.20 cons(X1, active(X2)) -> cons(X1, X2) 105.09/43.20 s(active(X)) -> s(X) 105.09/43.20 s(mark(X)) -> s(X) 105.09/43.20 U11(X1, mark(X2)) -> U11(X1, X2) 105.09/43.20 U11(mark(X1), X2) -> U11(X1, X2) 105.09/43.20 U11(active(X1), X2) -> U11(X1, X2) 105.09/43.20 U11(X1, active(X2)) -> U11(X1, X2) 105.09/43.20 length(active(X)) -> length(X) 105.09/43.20 length(mark(X)) -> length(X) 105.09/43.20 105.09/43.20 The set Q consists of the following terms: 105.09/43.20 105.09/43.20 active(zeros) 105.09/43.20 active(U11(tt, x0)) 105.09/43.20 active(and(tt, x0)) 105.09/43.20 active(isNat(0)) 105.09/43.20 active(isNat(length(x0))) 105.09/43.20 active(isNat(s(x0))) 105.09/43.20 active(isNatIList(x0)) 105.09/43.20 active(isNatList(nil)) 105.09/43.20 active(isNatList(cons(x0, x1))) 105.09/43.20 active(length(nil)) 105.09/43.20 active(length(cons(x0, x1))) 105.09/43.20 mark(zeros) 105.09/43.20 mark(cons(x0, x1)) 105.09/43.20 mark(0) 105.09/43.20 mark(U11(x0, x1)) 105.09/43.20 mark(tt) 105.09/43.20 mark(s(x0)) 105.09/43.20 mark(length(x0)) 105.09/43.20 mark(and(x0, x1)) 105.09/43.20 mark(isNat(x0)) 105.09/43.20 mark(isNatList(x0)) 105.09/43.20 mark(isNatIList(x0)) 105.09/43.20 mark(nil) 105.09/43.20 cons(mark(x0), x1) 105.09/43.20 cons(x0, mark(x1)) 105.09/43.20 cons(active(x0), x1) 105.09/43.20 cons(x0, active(x1)) 105.09/43.20 U11(mark(x0), x1) 105.09/43.20 U11(x0, mark(x1)) 105.09/43.20 U11(active(x0), x1) 105.09/43.20 U11(x0, active(x1)) 105.09/43.20 s(mark(x0)) 105.09/43.20 s(active(x0)) 105.09/43.20 length(mark(x0)) 105.09/43.20 length(active(x0)) 105.09/43.20 and(mark(x0), x1) 105.09/43.20 and(x0, mark(x1)) 105.09/43.20 and(active(x0), x1) 105.09/43.20 and(x0, active(x1)) 105.09/43.20 isNat(mark(x0)) 105.09/43.20 isNat(active(x0)) 105.09/43.20 isNatList(mark(x0)) 105.09/43.20 isNatList(active(x0)) 105.09/43.20 isNatIList(mark(x0)) 105.09/43.20 isNatIList(active(x0)) 105.09/43.20 105.09/43.20 We have to consider all minimal (P,Q,R)-chains. 105.09/43.20 ---------------------------------------- 105.09/43.20 105.09/43.20 (89) QDPOrderProof (EQUIVALENT) 105.09/43.20 We use the reduction pair processor [LPAR04,JAR06]. 105.09/43.20 105.09/43.20 105.09/43.20 The following pairs can be oriented strictly and are deleted. 105.09/43.20 105.09/43.20 MARK(and(X1, X2)) -> MARK(X1) 105.09/43.20 The remaining pairs can at least be oriented weakly. 105.09/43.20 Used ordering: Matrix interpretation [MATRO] with arctic natural numbers [ARCTIC]: 105.09/43.20 105.09/43.20 <<< 105.09/43.20 POL(MARK(x_1)) = [[-I]] + [[0A]] * x_1 105.09/43.20 >>> 105.09/43.20 105.09/43.20 <<< 105.09/43.20 POL(s(x_1)) = [[-I]] + [[0A]] * x_1 105.09/43.20 >>> 105.09/43.20 105.09/43.20 <<< 105.09/43.20 POL(U11(x_1, x_2)) = [[0A]] + [[3A]] * x_1 + [[4A]] * x_2 105.09/43.20 >>> 105.09/43.20 105.09/43.20 <<< 105.09/43.20 POL(ACTIVE(x_1)) = [[-I]] + [[0A]] * x_1 105.09/43.20 >>> 105.09/43.20 105.09/43.20 <<< 105.09/43.20 POL(mark(x_1)) = [[-I]] + [[0A]] * x_1 105.09/43.20 >>> 105.09/43.20 105.09/43.20 <<< 105.09/43.20 POL(tt) = [[0A]] 105.09/43.20 >>> 105.09/43.20 105.09/43.20 <<< 105.09/43.20 POL(length(x_1)) = [[1A]] + [[4A]] * x_1 105.09/43.20 >>> 105.09/43.20 105.09/43.20 <<< 105.09/43.20 POL(and(x_1, x_2)) = [[-I]] + [[1A]] * x_1 + [[0A]] * x_2 105.09/43.20 >>> 105.09/43.20 105.09/43.20 <<< 105.09/43.20 POL(cons(x_1, x_2)) = [[-I]] + [[1A]] * x_1 + [[0A]] * x_2 105.09/43.20 >>> 105.09/43.20 105.09/43.20 <<< 105.09/43.20 POL(isNatList(x_1)) = [[-I]] + [[0A]] * x_1 105.09/43.20 >>> 105.09/43.20 105.09/43.20 <<< 105.09/43.20 POL(isNat(x_1)) = [[-I]] + [[0A]] * x_1 105.09/43.20 >>> 105.09/43.20 105.09/43.20 <<< 105.09/43.20 POL(isNatIList(x_1)) = [[-I]] + [[0A]] * x_1 105.09/43.20 >>> 105.09/43.20 105.09/43.20 <<< 105.09/43.20 POL(active(x_1)) = [[-I]] + [[0A]] * x_1 105.09/43.20 >>> 105.09/43.20 105.09/43.20 <<< 105.09/43.20 POL(zeros) = [[1A]] 105.09/43.20 >>> 105.09/43.20 105.09/43.20 <<< 105.09/43.20 POL(0) = [[0A]] 105.09/43.20 >>> 105.09/43.20 105.09/43.20 <<< 105.09/43.20 POL(nil) = [[0A]] 105.09/43.20 >>> 105.09/43.20 105.09/43.20 105.09/43.20 The following usable rules [FROCOS05] with respect to the argument filtering of the ordering [JAR06] were oriented: 105.09/43.20 105.09/43.20 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 105.09/43.20 active(zeros) -> mark(cons(0, zeros)) 105.09/43.20 active(U11(tt, L)) -> mark(s(length(L))) 105.09/43.20 mark(s(X)) -> active(s(mark(X))) 105.09/43.20 active(and(tt, X)) -> mark(X) 105.09/43.20 mark(zeros) -> active(zeros) 105.09/43.20 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 105.09/43.20 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 105.09/43.20 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 105.09/43.20 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 105.09/43.20 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.20 mark(length(X)) -> active(length(mark(X))) 105.09/43.20 mark(isNatList(X)) -> active(isNatList(X)) 105.09/43.20 mark(isNatIList(X)) -> active(isNatIList(X)) 105.09/43.20 mark(0) -> active(0) 105.09/43.20 mark(tt) -> active(tt) 105.09/43.20 active(isNat(s(V1))) -> mark(isNat(V1)) 105.09/43.20 mark(isNat(X)) -> active(isNat(X)) 105.09/43.20 mark(nil) -> active(nil) 105.09/43.20 U11(X1, mark(X2)) -> U11(X1, X2) 105.09/43.20 U11(mark(X1), X2) -> U11(X1, X2) 105.09/43.20 U11(active(X1), X2) -> U11(X1, X2) 105.09/43.20 U11(X1, active(X2)) -> U11(X1, X2) 105.09/43.20 length(active(X)) -> length(X) 105.09/43.20 length(mark(X)) -> length(X) 105.09/43.20 and(X1, mark(X2)) -> and(X1, X2) 105.09/43.20 and(mark(X1), X2) -> and(X1, X2) 105.09/43.20 and(active(X1), X2) -> and(X1, X2) 105.09/43.20 and(X1, active(X2)) -> and(X1, X2) 105.09/43.20 active(isNat(0)) -> mark(tt) 105.09/43.20 cons(X1, mark(X2)) -> cons(X1, X2) 105.09/43.20 cons(mark(X1), X2) -> cons(X1, X2) 105.09/43.20 cons(active(X1), X2) -> cons(X1, X2) 105.09/43.20 cons(X1, active(X2)) -> cons(X1, X2) 105.09/43.20 s(active(X)) -> s(X) 105.09/43.20 s(mark(X)) -> s(X) 105.09/43.20 105.09/43.20 105.09/43.20 ---------------------------------------- 105.09/43.20 105.09/43.20 (90) 105.09/43.20 Obligation: 105.09/43.20 Q DP problem: 105.09/43.20 The TRS P consists of the following rules: 105.09/43.20 105.09/43.20 MARK(s(X)) -> MARK(X) 105.09/43.20 MARK(U11(X1, X2)) -> ACTIVE(U11(mark(X1), X2)) 105.09/43.20 ACTIVE(U11(tt, L)) -> MARK(s(length(L))) 105.09/43.20 ACTIVE(and(tt, X)) -> MARK(X) 105.09/43.20 MARK(length(X)) -> ACTIVE(length(mark(X))) 105.09/43.20 ACTIVE(length(cons(N, L))) -> MARK(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.20 MARK(and(X1, X2)) -> ACTIVE(and(mark(X1), X2)) 105.09/43.20 MARK(isNatList(X)) -> ACTIVE(isNatList(X)) 105.09/43.20 ACTIVE(isNatList(cons(V1, V2))) -> MARK(and(isNat(V1), isNatList(V2))) 105.09/43.20 MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) 105.09/43.20 ACTIVE(isNatIList(cons(V1, V2))) -> MARK(and(isNat(V1), isNatIList(V2))) 105.09/43.20 105.09/43.20 The TRS R consists of the following rules: 105.09/43.20 105.09/43.20 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 105.09/43.20 active(zeros) -> mark(cons(0, zeros)) 105.09/43.20 active(U11(tt, L)) -> mark(s(length(L))) 105.09/43.20 mark(s(X)) -> active(s(mark(X))) 105.09/43.20 active(and(tt, X)) -> mark(X) 105.09/43.20 mark(zeros) -> active(zeros) 105.09/43.20 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 105.09/43.20 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 105.09/43.20 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 105.09/43.20 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 105.09/43.20 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.20 mark(length(X)) -> active(length(mark(X))) 105.09/43.20 mark(isNatList(X)) -> active(isNatList(X)) 105.09/43.20 mark(isNatIList(X)) -> active(isNatIList(X)) 105.09/43.20 mark(0) -> active(0) 105.09/43.20 mark(tt) -> active(tt) 105.09/43.20 active(isNat(s(V1))) -> mark(isNat(V1)) 105.09/43.20 mark(isNat(X)) -> active(isNat(X)) 105.09/43.20 mark(nil) -> active(nil) 105.09/43.20 and(X1, mark(X2)) -> and(X1, X2) 105.09/43.20 and(mark(X1), X2) -> and(X1, X2) 105.09/43.20 and(active(X1), X2) -> and(X1, X2) 105.09/43.20 and(X1, active(X2)) -> and(X1, X2) 105.09/43.20 active(isNat(0)) -> mark(tt) 105.09/43.20 cons(X1, mark(X2)) -> cons(X1, X2) 105.09/43.20 cons(mark(X1), X2) -> cons(X1, X2) 105.09/43.20 cons(active(X1), X2) -> cons(X1, X2) 105.09/43.20 cons(X1, active(X2)) -> cons(X1, X2) 105.09/43.20 s(active(X)) -> s(X) 105.09/43.20 s(mark(X)) -> s(X) 105.09/43.20 U11(X1, mark(X2)) -> U11(X1, X2) 105.09/43.20 U11(mark(X1), X2) -> U11(X1, X2) 105.09/43.20 U11(active(X1), X2) -> U11(X1, X2) 105.09/43.20 U11(X1, active(X2)) -> U11(X1, X2) 105.09/43.20 length(active(X)) -> length(X) 105.09/43.20 length(mark(X)) -> length(X) 105.09/43.20 105.09/43.20 The set Q consists of the following terms: 105.09/43.20 105.09/43.20 active(zeros) 105.09/43.20 active(U11(tt, x0)) 105.09/43.20 active(and(tt, x0)) 105.09/43.20 active(isNat(0)) 105.09/43.20 active(isNat(length(x0))) 105.09/43.20 active(isNat(s(x0))) 105.09/43.20 active(isNatIList(x0)) 105.09/43.20 active(isNatList(nil)) 105.09/43.20 active(isNatList(cons(x0, x1))) 105.09/43.20 active(length(nil)) 105.09/43.20 active(length(cons(x0, x1))) 105.09/43.20 mark(zeros) 105.09/43.20 mark(cons(x0, x1)) 105.09/43.20 mark(0) 105.09/43.20 mark(U11(x0, x1)) 105.09/43.20 mark(tt) 105.09/43.20 mark(s(x0)) 105.09/43.20 mark(length(x0)) 105.09/43.20 mark(and(x0, x1)) 105.09/43.20 mark(isNat(x0)) 105.09/43.20 mark(isNatList(x0)) 105.09/43.20 mark(isNatIList(x0)) 105.09/43.20 mark(nil) 105.09/43.20 cons(mark(x0), x1) 105.09/43.20 cons(x0, mark(x1)) 105.09/43.20 cons(active(x0), x1) 105.09/43.20 cons(x0, active(x1)) 105.09/43.20 U11(mark(x0), x1) 105.09/43.20 U11(x0, mark(x1)) 105.09/43.20 U11(active(x0), x1) 105.09/43.20 U11(x0, active(x1)) 105.09/43.20 s(mark(x0)) 105.09/43.20 s(active(x0)) 105.09/43.20 length(mark(x0)) 105.09/43.20 length(active(x0)) 105.09/43.20 and(mark(x0), x1) 105.09/43.20 and(x0, mark(x1)) 105.09/43.20 and(active(x0), x1) 105.09/43.20 and(x0, active(x1)) 105.09/43.20 isNat(mark(x0)) 105.09/43.20 isNat(active(x0)) 105.09/43.20 isNatList(mark(x0)) 105.09/43.20 isNatList(active(x0)) 105.09/43.20 isNatIList(mark(x0)) 105.09/43.20 isNatIList(active(x0)) 105.09/43.20 105.09/43.20 We have to consider all minimal (P,Q,R)-chains. 105.09/43.20 ---------------------------------------- 105.09/43.20 105.09/43.20 (91) QDPOrderProof (EQUIVALENT) 105.09/43.20 We use the reduction pair processor [LPAR04,JAR06]. 105.09/43.20 105.09/43.20 105.09/43.20 The following pairs can be oriented strictly and are deleted. 105.09/43.20 105.09/43.20 ACTIVE(isNatList(cons(V1, V2))) -> MARK(and(isNat(V1), isNatList(V2))) 105.09/43.20 The remaining pairs can at least be oriented weakly. 105.09/43.20 Used ordering: Polynomial Order [NEGPOLO,POLO] with Interpretation: 105.09/43.20 105.09/43.20 POL( ACTIVE_1(x_1) ) = max{0, x_1 - 2} 105.09/43.20 POL( U11_2(x_1, x_2) ) = 2 105.09/43.20 POL( and_2(x_1, x_2) ) = x_2 + 2 105.09/43.20 POL( length_1(x_1) ) = max{0, -2} 105.09/43.20 POL( mark_1(x_1) ) = 2x_1 105.09/43.20 POL( cons_2(x_1, x_2) ) = 2x_1 + 2x_2 + 2 105.09/43.20 POL( active_1(x_1) ) = x_1 105.09/43.20 POL( zeros ) = 1 105.09/43.20 POL( 0 ) = 1 105.09/43.20 POL( tt ) = 0 105.09/43.20 POL( s_1(x_1) ) = x_1 + 2 105.09/43.20 POL( isNatIList_1(x_1) ) = 0 105.09/43.20 POL( isNat_1(x_1) ) = 0 105.09/43.20 POL( isNatList_1(x_1) ) = 2x_1 + 2 105.09/43.20 POL( nil ) = 1 105.09/43.20 POL( MARK_1(x_1) ) = max{0, x_1 - 2} 105.09/43.20 105.09/43.20 The following usable rules [FROCOS05] with respect to the argument filtering of the ordering [JAR06] were oriented: 105.09/43.20 105.09/43.20 U11(X1, mark(X2)) -> U11(X1, X2) 105.09/43.20 U11(mark(X1), X2) -> U11(X1, X2) 105.09/43.20 U11(active(X1), X2) -> U11(X1, X2) 105.09/43.20 U11(X1, active(X2)) -> U11(X1, X2) 105.09/43.20 length(active(X)) -> length(X) 105.09/43.20 length(mark(X)) -> length(X) 105.09/43.20 and(X1, mark(X2)) -> and(X1, X2) 105.09/43.20 and(mark(X1), X2) -> and(X1, X2) 105.09/43.20 and(active(X1), X2) -> and(X1, X2) 105.09/43.20 and(X1, active(X2)) -> and(X1, X2) 105.09/43.20 105.09/43.20 105.09/43.20 ---------------------------------------- 105.09/43.20 105.09/43.20 (92) 105.09/43.20 Obligation: 105.09/43.20 Q DP problem: 105.09/43.20 The TRS P consists of the following rules: 105.09/43.20 105.09/43.20 MARK(s(X)) -> MARK(X) 105.09/43.20 MARK(U11(X1, X2)) -> ACTIVE(U11(mark(X1), X2)) 105.09/43.20 ACTIVE(U11(tt, L)) -> MARK(s(length(L))) 105.09/43.20 ACTIVE(and(tt, X)) -> MARK(X) 105.09/43.20 MARK(length(X)) -> ACTIVE(length(mark(X))) 105.09/43.20 ACTIVE(length(cons(N, L))) -> MARK(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.20 MARK(and(X1, X2)) -> ACTIVE(and(mark(X1), X2)) 105.09/43.20 MARK(isNatList(X)) -> ACTIVE(isNatList(X)) 105.09/43.20 MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) 105.09/43.20 ACTIVE(isNatIList(cons(V1, V2))) -> MARK(and(isNat(V1), isNatIList(V2))) 105.09/43.20 105.09/43.20 The TRS R consists of the following rules: 105.09/43.20 105.09/43.20 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 105.09/43.20 active(zeros) -> mark(cons(0, zeros)) 105.09/43.20 active(U11(tt, L)) -> mark(s(length(L))) 105.09/43.20 mark(s(X)) -> active(s(mark(X))) 105.09/43.20 active(and(tt, X)) -> mark(X) 105.09/43.20 mark(zeros) -> active(zeros) 105.09/43.20 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 105.09/43.20 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 105.09/43.20 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 105.09/43.20 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 105.09/43.20 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.20 mark(length(X)) -> active(length(mark(X))) 105.09/43.20 mark(isNatList(X)) -> active(isNatList(X)) 105.09/43.20 mark(isNatIList(X)) -> active(isNatIList(X)) 105.09/43.20 mark(0) -> active(0) 105.09/43.20 mark(tt) -> active(tt) 105.09/43.20 active(isNat(s(V1))) -> mark(isNat(V1)) 105.09/43.20 mark(isNat(X)) -> active(isNat(X)) 105.09/43.20 mark(nil) -> active(nil) 105.09/43.20 and(X1, mark(X2)) -> and(X1, X2) 105.09/43.20 and(mark(X1), X2) -> and(X1, X2) 105.09/43.20 and(active(X1), X2) -> and(X1, X2) 105.09/43.20 and(X1, active(X2)) -> and(X1, X2) 105.09/43.20 active(isNat(0)) -> mark(tt) 105.09/43.20 cons(X1, mark(X2)) -> cons(X1, X2) 105.09/43.20 cons(mark(X1), X2) -> cons(X1, X2) 105.09/43.20 cons(active(X1), X2) -> cons(X1, X2) 105.09/43.20 cons(X1, active(X2)) -> cons(X1, X2) 105.09/43.20 s(active(X)) -> s(X) 105.09/43.20 s(mark(X)) -> s(X) 105.09/43.20 U11(X1, mark(X2)) -> U11(X1, X2) 105.09/43.20 U11(mark(X1), X2) -> U11(X1, X2) 105.09/43.20 U11(active(X1), X2) -> U11(X1, X2) 105.09/43.20 U11(X1, active(X2)) -> U11(X1, X2) 105.09/43.20 length(active(X)) -> length(X) 105.09/43.20 length(mark(X)) -> length(X) 105.09/43.20 105.09/43.20 The set Q consists of the following terms: 105.09/43.20 105.09/43.20 active(zeros) 105.09/43.20 active(U11(tt, x0)) 105.09/43.20 active(and(tt, x0)) 105.09/43.20 active(isNat(0)) 105.09/43.20 active(isNat(length(x0))) 105.09/43.20 active(isNat(s(x0))) 105.09/43.20 active(isNatIList(x0)) 105.09/43.20 active(isNatList(nil)) 105.09/43.20 active(isNatList(cons(x0, x1))) 105.09/43.20 active(length(nil)) 105.09/43.20 active(length(cons(x0, x1))) 105.09/43.20 mark(zeros) 105.09/43.20 mark(cons(x0, x1)) 105.09/43.20 mark(0) 105.09/43.20 mark(U11(x0, x1)) 105.09/43.20 mark(tt) 105.09/43.20 mark(s(x0)) 105.09/43.20 mark(length(x0)) 105.09/43.20 mark(and(x0, x1)) 105.09/43.20 mark(isNat(x0)) 105.09/43.20 mark(isNatList(x0)) 105.09/43.20 mark(isNatIList(x0)) 105.09/43.20 mark(nil) 105.09/43.20 cons(mark(x0), x1) 105.09/43.20 cons(x0, mark(x1)) 105.09/43.20 cons(active(x0), x1) 105.09/43.20 cons(x0, active(x1)) 105.09/43.20 U11(mark(x0), x1) 105.09/43.20 U11(x0, mark(x1)) 105.09/43.20 U11(active(x0), x1) 105.09/43.20 U11(x0, active(x1)) 105.09/43.20 s(mark(x0)) 105.09/43.20 s(active(x0)) 105.09/43.20 length(mark(x0)) 105.09/43.20 length(active(x0)) 105.09/43.20 and(mark(x0), x1) 105.09/43.20 and(x0, mark(x1)) 105.09/43.20 and(active(x0), x1) 105.09/43.20 and(x0, active(x1)) 105.09/43.20 isNat(mark(x0)) 105.09/43.20 isNat(active(x0)) 105.09/43.20 isNatList(mark(x0)) 105.09/43.20 isNatList(active(x0)) 105.09/43.20 isNatIList(mark(x0)) 105.09/43.20 isNatIList(active(x0)) 105.09/43.20 105.09/43.20 We have to consider all minimal (P,Q,R)-chains. 105.09/43.20 ---------------------------------------- 105.09/43.20 105.09/43.20 (93) DependencyGraphProof (EQUIVALENT) 105.09/43.20 The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 1 SCC with 1 less node. 105.09/43.20 ---------------------------------------- 105.09/43.20 105.09/43.20 (94) 105.09/43.20 Obligation: 105.09/43.20 Q DP problem: 105.09/43.20 The TRS P consists of the following rules: 105.09/43.20 105.09/43.20 MARK(U11(X1, X2)) -> ACTIVE(U11(mark(X1), X2)) 105.09/43.20 ACTIVE(U11(tt, L)) -> MARK(s(length(L))) 105.09/43.20 MARK(s(X)) -> MARK(X) 105.09/43.20 MARK(length(X)) -> ACTIVE(length(mark(X))) 105.09/43.20 ACTIVE(and(tt, X)) -> MARK(X) 105.09/43.20 MARK(and(X1, X2)) -> ACTIVE(and(mark(X1), X2)) 105.09/43.20 ACTIVE(length(cons(N, L))) -> MARK(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.20 MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) 105.09/43.20 ACTIVE(isNatIList(cons(V1, V2))) -> MARK(and(isNat(V1), isNatIList(V2))) 105.09/43.20 105.09/43.20 The TRS R consists of the following rules: 105.09/43.20 105.09/43.20 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 105.09/43.20 active(zeros) -> mark(cons(0, zeros)) 105.09/43.20 active(U11(tt, L)) -> mark(s(length(L))) 105.09/43.20 mark(s(X)) -> active(s(mark(X))) 105.09/43.20 active(and(tt, X)) -> mark(X) 105.09/43.20 mark(zeros) -> active(zeros) 105.09/43.20 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 105.09/43.20 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 105.09/43.20 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 105.09/43.20 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 105.09/43.20 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.20 mark(length(X)) -> active(length(mark(X))) 105.09/43.20 mark(isNatList(X)) -> active(isNatList(X)) 105.09/43.20 mark(isNatIList(X)) -> active(isNatIList(X)) 105.09/43.20 mark(0) -> active(0) 105.09/43.20 mark(tt) -> active(tt) 105.09/43.20 active(isNat(s(V1))) -> mark(isNat(V1)) 105.09/43.20 mark(isNat(X)) -> active(isNat(X)) 105.09/43.20 mark(nil) -> active(nil) 105.09/43.20 and(X1, mark(X2)) -> and(X1, X2) 105.09/43.20 and(mark(X1), X2) -> and(X1, X2) 105.09/43.20 and(active(X1), X2) -> and(X1, X2) 105.09/43.20 and(X1, active(X2)) -> and(X1, X2) 105.09/43.20 active(isNat(0)) -> mark(tt) 105.09/43.20 cons(X1, mark(X2)) -> cons(X1, X2) 105.09/43.20 cons(mark(X1), X2) -> cons(X1, X2) 105.09/43.20 cons(active(X1), X2) -> cons(X1, X2) 105.09/43.20 cons(X1, active(X2)) -> cons(X1, X2) 105.09/43.20 s(active(X)) -> s(X) 105.09/43.20 s(mark(X)) -> s(X) 105.09/43.20 U11(X1, mark(X2)) -> U11(X1, X2) 105.09/43.20 U11(mark(X1), X2) -> U11(X1, X2) 105.09/43.20 U11(active(X1), X2) -> U11(X1, X2) 105.09/43.20 U11(X1, active(X2)) -> U11(X1, X2) 105.09/43.20 length(active(X)) -> length(X) 105.09/43.20 length(mark(X)) -> length(X) 105.09/43.20 105.09/43.20 The set Q consists of the following terms: 105.09/43.20 105.09/43.20 active(zeros) 105.09/43.20 active(U11(tt, x0)) 105.09/43.20 active(and(tt, x0)) 105.09/43.20 active(isNat(0)) 105.09/43.20 active(isNat(length(x0))) 105.09/43.20 active(isNat(s(x0))) 105.09/43.20 active(isNatIList(x0)) 105.09/43.20 active(isNatList(nil)) 105.09/43.20 active(isNatList(cons(x0, x1))) 105.09/43.20 active(length(nil)) 105.09/43.20 active(length(cons(x0, x1))) 105.09/43.20 mark(zeros) 105.09/43.20 mark(cons(x0, x1)) 105.09/43.20 mark(0) 105.09/43.20 mark(U11(x0, x1)) 105.09/43.20 mark(tt) 105.09/43.20 mark(s(x0)) 105.09/43.20 mark(length(x0)) 105.09/43.20 mark(and(x0, x1)) 105.09/43.20 mark(isNat(x0)) 105.09/43.20 mark(isNatList(x0)) 105.09/43.20 mark(isNatIList(x0)) 105.09/43.20 mark(nil) 105.09/43.20 cons(mark(x0), x1) 105.09/43.20 cons(x0, mark(x1)) 105.09/43.20 cons(active(x0), x1) 105.09/43.20 cons(x0, active(x1)) 105.09/43.20 U11(mark(x0), x1) 105.09/43.20 U11(x0, mark(x1)) 105.09/43.20 U11(active(x0), x1) 105.09/43.20 U11(x0, active(x1)) 105.09/43.20 s(mark(x0)) 105.09/43.20 s(active(x0)) 105.09/43.20 length(mark(x0)) 105.09/43.20 length(active(x0)) 105.09/43.20 and(mark(x0), x1) 105.09/43.20 and(x0, mark(x1)) 105.09/43.20 and(active(x0), x1) 105.09/43.20 and(x0, active(x1)) 105.09/43.20 isNat(mark(x0)) 105.09/43.20 isNat(active(x0)) 105.09/43.20 isNatList(mark(x0)) 105.09/43.20 isNatList(active(x0)) 105.09/43.20 isNatIList(mark(x0)) 105.09/43.20 isNatIList(active(x0)) 105.09/43.20 105.09/43.20 We have to consider all minimal (P,Q,R)-chains. 105.09/43.20 ---------------------------------------- 105.09/43.20 105.09/43.20 (95) QDPOrderProof (EQUIVALENT) 105.09/43.20 We use the reduction pair processor [LPAR04,JAR06]. 105.09/43.20 105.09/43.20 105.09/43.20 The following pairs can be oriented strictly and are deleted. 105.09/43.20 105.09/43.20 ACTIVE(and(tt, X)) -> MARK(X) 105.09/43.20 The remaining pairs can at least be oriented weakly. 105.09/43.20 Used ordering: Combined order from the following AFS and order. 105.09/43.20 MARK(x1) = MARK(x1) 105.09/43.20 105.09/43.20 U11(x1, x2) = U11 105.09/43.20 105.09/43.20 ACTIVE(x1) = ACTIVE(x1) 105.09/43.20 105.09/43.20 mark(x1) = x1 105.09/43.20 105.09/43.20 tt = tt 105.09/43.20 105.09/43.20 s(x1) = x1 105.09/43.20 105.09/43.20 length(x1) = length 105.09/43.20 105.09/43.20 and(x1, x2) = and(x2) 105.09/43.20 105.09/43.20 cons(x1, x2) = cons(x2) 105.09/43.20 105.09/43.20 isNatList(x1) = isNatList(x1) 105.09/43.20 105.09/43.20 isNat(x1) = isNat 105.09/43.20 105.09/43.20 isNatIList(x1) = isNatIList(x1) 105.09/43.20 105.09/43.20 active(x1) = active(x1) 105.09/43.20 105.09/43.20 zeros = zeros 105.09/43.20 105.09/43.20 0 = 0 105.09/43.20 105.09/43.20 nil = nil 105.09/43.20 105.09/43.20 105.09/43.20 Recursive path order with status [RPO]. 105.09/43.20 Quasi-Precedence: tt > [and_1, cons_1, isNatIList_1, active_1] > [MARK_1, ACTIVE_1] > [U11, length] > isNat 105.09/43.20 tt > [and_1, cons_1, isNatIList_1, active_1] > 0 > isNat 105.09/43.20 isNatList_1 > [and_1, cons_1, isNatIList_1, active_1] > [MARK_1, ACTIVE_1] > [U11, length] > isNat 105.09/43.20 isNatList_1 > [and_1, cons_1, isNatIList_1, active_1] > 0 > isNat 105.09/43.20 zeros > [and_1, cons_1, isNatIList_1, active_1] > [MARK_1, ACTIVE_1] > [U11, length] > isNat 105.09/43.20 zeros > [and_1, cons_1, isNatIList_1, active_1] > 0 > isNat 105.09/43.20 nil > [and_1, cons_1, isNatIList_1, active_1] > [MARK_1, ACTIVE_1] > [U11, length] > isNat 105.09/43.20 nil > [and_1, cons_1, isNatIList_1, active_1] > 0 > isNat 105.09/43.20 105.09/43.20 Status: MARK_1: [1] 105.09/43.20 U11: [] 105.09/43.20 ACTIVE_1: [1] 105.09/43.20 tt: multiset status 105.09/43.20 length: [] 105.09/43.20 and_1: [1] 105.09/43.20 cons_1: [1] 105.09/43.20 isNatList_1: multiset status 105.09/43.20 isNat: multiset status 105.09/43.20 isNatIList_1: [1] 105.09/43.20 active_1: multiset status 105.09/43.20 zeros: multiset status 105.09/43.20 0: multiset status 105.09/43.20 nil: multiset status 105.09/43.20 105.09/43.20 105.09/43.20 The following usable rules [FROCOS05] with respect to the argument filtering of the ordering [JAR06] were oriented: 105.09/43.20 105.09/43.20 U11(X1, mark(X2)) -> U11(X1, X2) 105.09/43.20 U11(mark(X1), X2) -> U11(X1, X2) 105.09/43.20 U11(active(X1), X2) -> U11(X1, X2) 105.09/43.20 U11(X1, active(X2)) -> U11(X1, X2) 105.09/43.20 length(active(X)) -> length(X) 105.09/43.20 length(mark(X)) -> length(X) 105.09/43.20 and(X1, mark(X2)) -> and(X1, X2) 105.09/43.20 and(mark(X1), X2) -> and(X1, X2) 105.09/43.20 and(active(X1), X2) -> and(X1, X2) 105.09/43.20 and(X1, active(X2)) -> and(X1, X2) 105.09/43.20 105.09/43.20 105.09/43.20 ---------------------------------------- 105.09/43.20 105.09/43.20 (96) 105.09/43.20 Obligation: 105.09/43.20 Q DP problem: 105.09/43.20 The TRS P consists of the following rules: 105.09/43.20 105.09/43.20 MARK(U11(X1, X2)) -> ACTIVE(U11(mark(X1), X2)) 105.09/43.20 ACTIVE(U11(tt, L)) -> MARK(s(length(L))) 105.09/43.20 MARK(s(X)) -> MARK(X) 105.09/43.20 MARK(length(X)) -> ACTIVE(length(mark(X))) 105.09/43.20 MARK(and(X1, X2)) -> ACTIVE(and(mark(X1), X2)) 105.09/43.20 ACTIVE(length(cons(N, L))) -> MARK(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.20 MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) 105.09/43.20 ACTIVE(isNatIList(cons(V1, V2))) -> MARK(and(isNat(V1), isNatIList(V2))) 105.09/43.20 105.09/43.20 The TRS R consists of the following rules: 105.09/43.20 105.09/43.20 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 105.09/43.20 active(zeros) -> mark(cons(0, zeros)) 105.09/43.20 active(U11(tt, L)) -> mark(s(length(L))) 105.09/43.20 mark(s(X)) -> active(s(mark(X))) 105.09/43.20 active(and(tt, X)) -> mark(X) 105.09/43.20 mark(zeros) -> active(zeros) 105.09/43.20 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 105.09/43.20 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 105.09/43.20 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 105.09/43.20 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 105.09/43.20 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.20 mark(length(X)) -> active(length(mark(X))) 105.09/43.20 mark(isNatList(X)) -> active(isNatList(X)) 105.09/43.20 mark(isNatIList(X)) -> active(isNatIList(X)) 105.09/43.20 mark(0) -> active(0) 105.09/43.20 mark(tt) -> active(tt) 105.09/43.20 active(isNat(s(V1))) -> mark(isNat(V1)) 105.09/43.20 mark(isNat(X)) -> active(isNat(X)) 105.09/43.20 mark(nil) -> active(nil) 105.09/43.20 and(X1, mark(X2)) -> and(X1, X2) 105.09/43.20 and(mark(X1), X2) -> and(X1, X2) 105.09/43.20 and(active(X1), X2) -> and(X1, X2) 105.09/43.20 and(X1, active(X2)) -> and(X1, X2) 105.09/43.20 active(isNat(0)) -> mark(tt) 105.09/43.20 cons(X1, mark(X2)) -> cons(X1, X2) 105.09/43.20 cons(mark(X1), X2) -> cons(X1, X2) 105.09/43.20 cons(active(X1), X2) -> cons(X1, X2) 105.09/43.20 cons(X1, active(X2)) -> cons(X1, X2) 105.09/43.20 s(active(X)) -> s(X) 105.09/43.20 s(mark(X)) -> s(X) 105.09/43.20 U11(X1, mark(X2)) -> U11(X1, X2) 105.09/43.20 U11(mark(X1), X2) -> U11(X1, X2) 105.09/43.20 U11(active(X1), X2) -> U11(X1, X2) 105.09/43.20 U11(X1, active(X2)) -> U11(X1, X2) 105.09/43.20 length(active(X)) -> length(X) 105.09/43.20 length(mark(X)) -> length(X) 105.09/43.20 105.09/43.20 The set Q consists of the following terms: 105.09/43.20 105.09/43.20 active(zeros) 105.09/43.20 active(U11(tt, x0)) 105.09/43.20 active(and(tt, x0)) 105.09/43.20 active(isNat(0)) 105.09/43.20 active(isNat(length(x0))) 105.09/43.20 active(isNat(s(x0))) 105.09/43.20 active(isNatIList(x0)) 105.09/43.20 active(isNatList(nil)) 105.09/43.20 active(isNatList(cons(x0, x1))) 105.09/43.20 active(length(nil)) 105.09/43.20 active(length(cons(x0, x1))) 105.09/43.20 mark(zeros) 105.09/43.20 mark(cons(x0, x1)) 105.09/43.20 mark(0) 105.09/43.20 mark(U11(x0, x1)) 105.09/43.20 mark(tt) 105.09/43.20 mark(s(x0)) 105.09/43.20 mark(length(x0)) 105.09/43.20 mark(and(x0, x1)) 105.09/43.20 mark(isNat(x0)) 105.09/43.20 mark(isNatList(x0)) 105.09/43.20 mark(isNatIList(x0)) 105.09/43.20 mark(nil) 105.09/43.20 cons(mark(x0), x1) 105.09/43.20 cons(x0, mark(x1)) 105.09/43.20 cons(active(x0), x1) 105.09/43.20 cons(x0, active(x1)) 105.09/43.20 U11(mark(x0), x1) 105.09/43.20 U11(x0, mark(x1)) 105.09/43.20 U11(active(x0), x1) 105.09/43.20 U11(x0, active(x1)) 105.09/43.20 s(mark(x0)) 105.09/43.20 s(active(x0)) 105.09/43.20 length(mark(x0)) 105.09/43.20 length(active(x0)) 105.09/43.20 and(mark(x0), x1) 105.09/43.20 and(x0, mark(x1)) 105.09/43.20 and(active(x0), x1) 105.09/43.20 and(x0, active(x1)) 105.09/43.20 isNat(mark(x0)) 105.09/43.20 isNat(active(x0)) 105.09/43.20 isNatList(mark(x0)) 105.09/43.20 isNatList(active(x0)) 105.09/43.20 isNatIList(mark(x0)) 105.09/43.20 isNatIList(active(x0)) 105.09/43.20 105.09/43.20 We have to consider all minimal (P,Q,R)-chains. 105.09/43.20 ---------------------------------------- 105.09/43.20 105.09/43.20 (97) TransformationProof (SOUND) 105.09/43.20 By narrowing [LPAR04] the rule MARK(and(X1, X2)) -> ACTIVE(and(mark(X1), X2)) at position [0] we obtained the following new rules [LPAR04]: 105.09/43.20 105.09/43.20 (MARK(and(x0, x1)) -> ACTIVE(and(x0, x1)),MARK(and(x0, x1)) -> ACTIVE(and(x0, x1))) 105.09/43.20 (MARK(and(cons(x0, x1), y1)) -> ACTIVE(and(active(cons(mark(x0), x1)), y1)),MARK(and(cons(x0, x1), y1)) -> ACTIVE(and(active(cons(mark(x0), x1)), y1))) 105.09/43.20 (MARK(and(s(x0), y1)) -> ACTIVE(and(active(s(mark(x0))), y1)),MARK(and(s(x0), y1)) -> ACTIVE(and(active(s(mark(x0))), y1))) 105.09/43.20 (MARK(and(zeros, y1)) -> ACTIVE(and(active(zeros), y1)),MARK(and(zeros, y1)) -> ACTIVE(and(active(zeros), y1))) 105.09/43.20 (MARK(and(U11(x0, x1), y1)) -> ACTIVE(and(active(U11(mark(x0), x1)), y1)),MARK(and(U11(x0, x1), y1)) -> ACTIVE(and(active(U11(mark(x0), x1)), y1))) 105.09/43.20 (MARK(and(and(x0, x1), y1)) -> ACTIVE(and(active(and(mark(x0), x1)), y1)),MARK(and(and(x0, x1), y1)) -> ACTIVE(and(active(and(mark(x0), x1)), y1))) 105.09/43.20 (MARK(and(length(x0), y1)) -> ACTIVE(and(active(length(mark(x0))), y1)),MARK(and(length(x0), y1)) -> ACTIVE(and(active(length(mark(x0))), y1))) 105.09/43.20 (MARK(and(isNatList(x0), y1)) -> ACTIVE(and(active(isNatList(x0)), y1)),MARK(and(isNatList(x0), y1)) -> ACTIVE(and(active(isNatList(x0)), y1))) 105.09/43.20 (MARK(and(isNatIList(x0), y1)) -> ACTIVE(and(active(isNatIList(x0)), y1)),MARK(and(isNatIList(x0), y1)) -> ACTIVE(and(active(isNatIList(x0)), y1))) 105.09/43.20 (MARK(and(0, y1)) -> ACTIVE(and(active(0), y1)),MARK(and(0, y1)) -> ACTIVE(and(active(0), y1))) 105.09/43.20 (MARK(and(tt, y1)) -> ACTIVE(and(active(tt), y1)),MARK(and(tt, y1)) -> ACTIVE(and(active(tt), y1))) 105.09/43.20 (MARK(and(isNat(x0), y1)) -> ACTIVE(and(active(isNat(x0)), y1)),MARK(and(isNat(x0), y1)) -> ACTIVE(and(active(isNat(x0)), y1))) 105.09/43.20 (MARK(and(nil, y1)) -> ACTIVE(and(active(nil), y1)),MARK(and(nil, y1)) -> ACTIVE(and(active(nil), y1))) 105.09/43.20 105.09/43.20 105.09/43.20 ---------------------------------------- 105.09/43.20 105.09/43.20 (98) 105.09/43.20 Obligation: 105.09/43.20 Q DP problem: 105.09/43.20 The TRS P consists of the following rules: 105.09/43.20 105.09/43.20 MARK(U11(X1, X2)) -> ACTIVE(U11(mark(X1), X2)) 105.09/43.20 ACTIVE(U11(tt, L)) -> MARK(s(length(L))) 105.09/43.20 MARK(s(X)) -> MARK(X) 105.09/43.20 MARK(length(X)) -> ACTIVE(length(mark(X))) 105.09/43.20 ACTIVE(length(cons(N, L))) -> MARK(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.20 MARK(isNatIList(X)) -> ACTIVE(isNatIList(X)) 105.09/43.20 ACTIVE(isNatIList(cons(V1, V2))) -> MARK(and(isNat(V1), isNatIList(V2))) 105.09/43.20 MARK(and(x0, x1)) -> ACTIVE(and(x0, x1)) 105.09/43.20 MARK(and(cons(x0, x1), y1)) -> ACTIVE(and(active(cons(mark(x0), x1)), y1)) 105.09/43.20 MARK(and(s(x0), y1)) -> ACTIVE(and(active(s(mark(x0))), y1)) 105.09/43.20 MARK(and(zeros, y1)) -> ACTIVE(and(active(zeros), y1)) 105.09/43.20 MARK(and(U11(x0, x1), y1)) -> ACTIVE(and(active(U11(mark(x0), x1)), y1)) 105.09/43.20 MARK(and(and(x0, x1), y1)) -> ACTIVE(and(active(and(mark(x0), x1)), y1)) 105.09/43.20 MARK(and(length(x0), y1)) -> ACTIVE(and(active(length(mark(x0))), y1)) 105.09/43.20 MARK(and(isNatList(x0), y1)) -> ACTIVE(and(active(isNatList(x0)), y1)) 105.09/43.20 MARK(and(isNatIList(x0), y1)) -> ACTIVE(and(active(isNatIList(x0)), y1)) 105.09/43.20 MARK(and(0, y1)) -> ACTIVE(and(active(0), y1)) 105.09/43.20 MARK(and(tt, y1)) -> ACTIVE(and(active(tt), y1)) 105.09/43.20 MARK(and(isNat(x0), y1)) -> ACTIVE(and(active(isNat(x0)), y1)) 105.09/43.20 MARK(and(nil, y1)) -> ACTIVE(and(active(nil), y1)) 105.09/43.20 105.09/43.20 The TRS R consists of the following rules: 105.09/43.20 105.09/43.20 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 105.09/43.20 active(zeros) -> mark(cons(0, zeros)) 105.09/43.20 active(U11(tt, L)) -> mark(s(length(L))) 105.09/43.20 mark(s(X)) -> active(s(mark(X))) 105.09/43.20 active(and(tt, X)) -> mark(X) 105.09/43.20 mark(zeros) -> active(zeros) 105.09/43.20 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 105.09/43.20 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 105.09/43.20 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 105.09/43.20 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 105.09/43.20 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.20 mark(length(X)) -> active(length(mark(X))) 105.09/43.20 mark(isNatList(X)) -> active(isNatList(X)) 105.09/43.20 mark(isNatIList(X)) -> active(isNatIList(X)) 105.09/43.20 mark(0) -> active(0) 105.09/43.20 mark(tt) -> active(tt) 105.09/43.20 active(isNat(s(V1))) -> mark(isNat(V1)) 105.09/43.20 mark(isNat(X)) -> active(isNat(X)) 105.09/43.20 mark(nil) -> active(nil) 105.09/43.20 and(X1, mark(X2)) -> and(X1, X2) 105.09/43.20 and(mark(X1), X2) -> and(X1, X2) 105.09/43.20 and(active(X1), X2) -> and(X1, X2) 105.09/43.20 and(X1, active(X2)) -> and(X1, X2) 105.09/43.20 active(isNat(0)) -> mark(tt) 105.09/43.20 cons(X1, mark(X2)) -> cons(X1, X2) 105.09/43.20 cons(mark(X1), X2) -> cons(X1, X2) 105.09/43.20 cons(active(X1), X2) -> cons(X1, X2) 105.09/43.20 cons(X1, active(X2)) -> cons(X1, X2) 105.09/43.20 s(active(X)) -> s(X) 105.09/43.20 s(mark(X)) -> s(X) 105.09/43.20 U11(X1, mark(X2)) -> U11(X1, X2) 105.09/43.20 U11(mark(X1), X2) -> U11(X1, X2) 105.09/43.20 U11(active(X1), X2) -> U11(X1, X2) 105.09/43.20 U11(X1, active(X2)) -> U11(X1, X2) 105.09/43.20 length(active(X)) -> length(X) 105.09/43.20 length(mark(X)) -> length(X) 105.09/43.20 105.09/43.20 The set Q consists of the following terms: 105.09/43.20 105.09/43.20 active(zeros) 105.09/43.20 active(U11(tt, x0)) 105.09/43.20 active(and(tt, x0)) 105.09/43.20 active(isNat(0)) 105.09/43.20 active(isNat(length(x0))) 105.09/43.20 active(isNat(s(x0))) 105.09/43.20 active(isNatIList(x0)) 105.09/43.20 active(isNatList(nil)) 105.09/43.20 active(isNatList(cons(x0, x1))) 105.09/43.20 active(length(nil)) 105.09/43.20 active(length(cons(x0, x1))) 105.09/43.20 mark(zeros) 105.09/43.20 mark(cons(x0, x1)) 105.09/43.20 mark(0) 105.09/43.20 mark(U11(x0, x1)) 105.09/43.20 mark(tt) 105.09/43.20 mark(s(x0)) 105.09/43.20 mark(length(x0)) 105.09/43.20 mark(and(x0, x1)) 105.09/43.20 mark(isNat(x0)) 105.09/43.20 mark(isNatList(x0)) 105.09/43.20 mark(isNatIList(x0)) 105.09/43.20 mark(nil) 105.09/43.20 cons(mark(x0), x1) 105.09/43.20 cons(x0, mark(x1)) 105.09/43.20 cons(active(x0), x1) 105.09/43.20 cons(x0, active(x1)) 105.09/43.20 U11(mark(x0), x1) 105.09/43.20 U11(x0, mark(x1)) 105.09/43.20 U11(active(x0), x1) 105.09/43.20 U11(x0, active(x1)) 105.09/43.20 s(mark(x0)) 105.09/43.20 s(active(x0)) 105.09/43.20 length(mark(x0)) 105.09/43.20 length(active(x0)) 105.09/43.20 and(mark(x0), x1) 105.09/43.20 and(x0, mark(x1)) 105.09/43.20 and(active(x0), x1) 105.09/43.20 and(x0, active(x1)) 105.09/43.20 isNat(mark(x0)) 105.09/43.20 isNat(active(x0)) 105.09/43.20 isNatList(mark(x0)) 105.09/43.20 isNatList(active(x0)) 105.09/43.20 isNatIList(mark(x0)) 105.09/43.20 isNatIList(active(x0)) 105.09/43.20 105.09/43.20 We have to consider all minimal (P,Q,R)-chains. 105.09/43.20 ---------------------------------------- 105.09/43.20 105.09/43.20 (99) DependencyGraphProof (EQUIVALENT) 105.09/43.20 The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 1 SCC with 7 less nodes. 105.09/43.20 ---------------------------------------- 105.09/43.20 105.09/43.20 (100) 105.09/43.20 Obligation: 105.09/43.20 Q DP problem: 105.09/43.20 The TRS P consists of the following rules: 105.09/43.20 105.09/43.20 ACTIVE(U11(tt, L)) -> MARK(s(length(L))) 105.09/43.20 MARK(s(X)) -> MARK(X) 105.09/43.20 MARK(U11(X1, X2)) -> ACTIVE(U11(mark(X1), X2)) 105.09/43.20 ACTIVE(length(cons(N, L))) -> MARK(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.20 MARK(length(X)) -> ACTIVE(length(mark(X))) 105.09/43.20 MARK(and(cons(x0, x1), y1)) -> ACTIVE(and(active(cons(mark(x0), x1)), y1)) 105.09/43.20 MARK(and(s(x0), y1)) -> ACTIVE(and(active(s(mark(x0))), y1)) 105.09/43.20 MARK(and(zeros, y1)) -> ACTIVE(and(active(zeros), y1)) 105.09/43.20 MARK(and(U11(x0, x1), y1)) -> ACTIVE(and(active(U11(mark(x0), x1)), y1)) 105.09/43.20 MARK(and(and(x0, x1), y1)) -> ACTIVE(and(active(and(mark(x0), x1)), y1)) 105.09/43.20 MARK(and(length(x0), y1)) -> ACTIVE(and(active(length(mark(x0))), y1)) 105.09/43.20 MARK(and(isNatList(x0), y1)) -> ACTIVE(and(active(isNatList(x0)), y1)) 105.09/43.20 MARK(and(isNatIList(x0), y1)) -> ACTIVE(and(active(isNatIList(x0)), y1)) 105.09/43.20 105.09/43.20 The TRS R consists of the following rules: 105.09/43.20 105.09/43.20 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 105.09/43.20 active(zeros) -> mark(cons(0, zeros)) 105.09/43.20 active(U11(tt, L)) -> mark(s(length(L))) 105.09/43.20 mark(s(X)) -> active(s(mark(X))) 105.09/43.20 active(and(tt, X)) -> mark(X) 105.09/43.20 mark(zeros) -> active(zeros) 105.09/43.20 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 105.09/43.20 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 105.09/43.20 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 105.09/43.20 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 105.09/43.20 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.20 mark(length(X)) -> active(length(mark(X))) 105.09/43.20 mark(isNatList(X)) -> active(isNatList(X)) 105.09/43.20 mark(isNatIList(X)) -> active(isNatIList(X)) 105.09/43.20 mark(0) -> active(0) 105.09/43.20 mark(tt) -> active(tt) 105.09/43.20 active(isNat(s(V1))) -> mark(isNat(V1)) 105.09/43.20 mark(isNat(X)) -> active(isNat(X)) 105.09/43.20 mark(nil) -> active(nil) 105.09/43.20 and(X1, mark(X2)) -> and(X1, X2) 105.09/43.20 and(mark(X1), X2) -> and(X1, X2) 105.09/43.20 and(active(X1), X2) -> and(X1, X2) 105.09/43.20 and(X1, active(X2)) -> and(X1, X2) 105.09/43.20 active(isNat(0)) -> mark(tt) 105.09/43.20 cons(X1, mark(X2)) -> cons(X1, X2) 105.09/43.20 cons(mark(X1), X2) -> cons(X1, X2) 105.09/43.20 cons(active(X1), X2) -> cons(X1, X2) 105.09/43.20 cons(X1, active(X2)) -> cons(X1, X2) 105.09/43.20 s(active(X)) -> s(X) 105.09/43.20 s(mark(X)) -> s(X) 105.09/43.20 U11(X1, mark(X2)) -> U11(X1, X2) 105.09/43.20 U11(mark(X1), X2) -> U11(X1, X2) 105.09/43.20 U11(active(X1), X2) -> U11(X1, X2) 105.09/43.20 U11(X1, active(X2)) -> U11(X1, X2) 105.09/43.20 length(active(X)) -> length(X) 105.09/43.20 length(mark(X)) -> length(X) 105.09/43.20 105.09/43.20 The set Q consists of the following terms: 105.09/43.20 105.09/43.20 active(zeros) 105.09/43.20 active(U11(tt, x0)) 105.09/43.20 active(and(tt, x0)) 105.09/43.20 active(isNat(0)) 105.09/43.20 active(isNat(length(x0))) 105.09/43.20 active(isNat(s(x0))) 105.09/43.20 active(isNatIList(x0)) 105.09/43.20 active(isNatList(nil)) 105.09/43.20 active(isNatList(cons(x0, x1))) 105.09/43.20 active(length(nil)) 105.09/43.20 active(length(cons(x0, x1))) 105.09/43.20 mark(zeros) 105.09/43.20 mark(cons(x0, x1)) 105.09/43.20 mark(0) 105.09/43.20 mark(U11(x0, x1)) 105.09/43.20 mark(tt) 105.09/43.20 mark(s(x0)) 105.09/43.20 mark(length(x0)) 105.09/43.20 mark(and(x0, x1)) 105.09/43.20 mark(isNat(x0)) 105.09/43.20 mark(isNatList(x0)) 105.09/43.20 mark(isNatIList(x0)) 105.09/43.20 mark(nil) 105.09/43.20 cons(mark(x0), x1) 105.09/43.20 cons(x0, mark(x1)) 105.09/43.20 cons(active(x0), x1) 105.09/43.20 cons(x0, active(x1)) 105.09/43.20 U11(mark(x0), x1) 105.09/43.20 U11(x0, mark(x1)) 105.09/43.20 U11(active(x0), x1) 105.09/43.20 U11(x0, active(x1)) 105.09/43.20 s(mark(x0)) 105.09/43.20 s(active(x0)) 105.09/43.20 length(mark(x0)) 105.09/43.20 length(active(x0)) 105.09/43.20 and(mark(x0), x1) 105.09/43.20 and(x0, mark(x1)) 105.09/43.20 and(active(x0), x1) 105.09/43.20 and(x0, active(x1)) 105.09/43.20 isNat(mark(x0)) 105.09/43.20 isNat(active(x0)) 105.09/43.20 isNatList(mark(x0)) 105.09/43.20 isNatList(active(x0)) 105.09/43.20 isNatIList(mark(x0)) 105.09/43.20 isNatIList(active(x0)) 105.09/43.20 105.09/43.20 We have to consider all minimal (P,Q,R)-chains. 105.09/43.20 ---------------------------------------- 105.09/43.20 105.09/43.20 (101) QDPQMonotonicMRRProof (EQUIVALENT) 105.09/43.20 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. 105.09/43.20 105.09/43.20 Strictly oriented dependency pairs: 105.09/43.20 105.09/43.20 MARK(and(cons(x0, x1), y1)) -> ACTIVE(and(active(cons(mark(x0), x1)), y1)) 105.09/43.20 MARK(and(s(x0), y1)) -> ACTIVE(and(active(s(mark(x0))), y1)) 105.09/43.20 MARK(and(zeros, y1)) -> ACTIVE(and(active(zeros), y1)) 105.09/43.20 MARK(and(U11(x0, x1), y1)) -> ACTIVE(and(active(U11(mark(x0), x1)), y1)) 105.09/43.20 MARK(and(and(x0, x1), y1)) -> ACTIVE(and(active(and(mark(x0), x1)), y1)) 105.09/43.20 MARK(and(length(x0), y1)) -> ACTIVE(and(active(length(mark(x0))), y1)) 105.09/43.20 MARK(and(isNatList(x0), y1)) -> ACTIVE(and(active(isNatList(x0)), y1)) 105.09/43.20 MARK(and(isNatIList(x0), y1)) -> ACTIVE(and(active(isNatIList(x0)), y1)) 105.09/43.20 105.09/43.20 105.09/43.20 Used ordering: Polynomial interpretation [POLO]: 105.09/43.20 105.09/43.20 POL(0) = 0 105.09/43.20 POL(ACTIVE(x_1)) = x_1 105.09/43.20 POL(MARK(x_1)) = 1 105.09/43.20 POL(U11(x_1, x_2)) = 1 105.09/43.20 POL(active(x_1)) = 0 105.09/43.20 POL(and(x_1, x_2)) = 0 105.09/43.20 POL(cons(x_1, x_2)) = 0 105.09/43.20 POL(isNat(x_1)) = 0 105.09/43.20 POL(isNatIList(x_1)) = 0 105.09/43.20 POL(isNatList(x_1)) = 0 105.09/43.20 POL(length(x_1)) = 1 105.09/43.20 POL(mark(x_1)) = 0 105.09/43.20 POL(nil) = 0 105.09/43.20 POL(s(x_1)) = 0 105.09/43.20 POL(tt) = 0 105.09/43.20 POL(zeros) = 0 105.09/43.20 105.09/43.20 105.09/43.20 ---------------------------------------- 105.09/43.20 105.09/43.20 (102) 105.09/43.20 Obligation: 105.09/43.20 Q DP problem: 105.09/43.20 The TRS P consists of the following rules: 105.09/43.20 105.09/43.20 ACTIVE(U11(tt, L)) -> MARK(s(length(L))) 105.09/43.20 MARK(s(X)) -> MARK(X) 105.09/43.20 MARK(U11(X1, X2)) -> ACTIVE(U11(mark(X1), X2)) 105.09/43.20 ACTIVE(length(cons(N, L))) -> MARK(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.20 MARK(length(X)) -> ACTIVE(length(mark(X))) 105.09/43.20 105.09/43.20 The TRS R consists of the following rules: 105.09/43.20 105.09/43.20 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 105.09/43.20 active(zeros) -> mark(cons(0, zeros)) 105.09/43.20 active(U11(tt, L)) -> mark(s(length(L))) 105.09/43.20 mark(s(X)) -> active(s(mark(X))) 105.09/43.20 active(and(tt, X)) -> mark(X) 105.09/43.20 mark(zeros) -> active(zeros) 105.09/43.20 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 105.09/43.20 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 105.09/43.20 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 105.09/43.20 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 105.09/43.20 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.20 mark(length(X)) -> active(length(mark(X))) 105.09/43.20 mark(isNatList(X)) -> active(isNatList(X)) 105.09/43.20 mark(isNatIList(X)) -> active(isNatIList(X)) 105.09/43.20 mark(0) -> active(0) 105.09/43.20 mark(tt) -> active(tt) 105.09/43.20 active(isNat(s(V1))) -> mark(isNat(V1)) 105.09/43.20 mark(isNat(X)) -> active(isNat(X)) 105.09/43.20 mark(nil) -> active(nil) 105.09/43.20 and(X1, mark(X2)) -> and(X1, X2) 105.09/43.20 and(mark(X1), X2) -> and(X1, X2) 105.09/43.20 and(active(X1), X2) -> and(X1, X2) 105.09/43.20 and(X1, active(X2)) -> and(X1, X2) 105.09/43.20 active(isNat(0)) -> mark(tt) 105.09/43.20 cons(X1, mark(X2)) -> cons(X1, X2) 105.09/43.20 cons(mark(X1), X2) -> cons(X1, X2) 105.09/43.20 cons(active(X1), X2) -> cons(X1, X2) 105.09/43.20 cons(X1, active(X2)) -> cons(X1, X2) 105.09/43.20 s(active(X)) -> s(X) 105.09/43.20 s(mark(X)) -> s(X) 105.09/43.20 U11(X1, mark(X2)) -> U11(X1, X2) 105.09/43.20 U11(mark(X1), X2) -> U11(X1, X2) 105.09/43.20 U11(active(X1), X2) -> U11(X1, X2) 105.09/43.20 U11(X1, active(X2)) -> U11(X1, X2) 105.09/43.20 length(active(X)) -> length(X) 105.09/43.20 length(mark(X)) -> length(X) 105.09/43.20 105.09/43.20 The set Q consists of the following terms: 105.09/43.20 105.09/43.20 active(zeros) 105.09/43.20 active(U11(tt, x0)) 105.09/43.20 active(and(tt, x0)) 105.09/43.20 active(isNat(0)) 105.09/43.20 active(isNat(length(x0))) 105.09/43.20 active(isNat(s(x0))) 105.09/43.20 active(isNatIList(x0)) 105.09/43.20 active(isNatList(nil)) 105.09/43.20 active(isNatList(cons(x0, x1))) 105.09/43.20 active(length(nil)) 105.09/43.20 active(length(cons(x0, x1))) 105.09/43.20 mark(zeros) 105.09/43.20 mark(cons(x0, x1)) 105.09/43.20 mark(0) 105.09/43.20 mark(U11(x0, x1)) 105.09/43.20 mark(tt) 105.09/43.20 mark(s(x0)) 105.09/43.20 mark(length(x0)) 105.09/43.20 mark(and(x0, x1)) 105.09/43.20 mark(isNat(x0)) 105.09/43.20 mark(isNatList(x0)) 105.09/43.20 mark(isNatIList(x0)) 105.09/43.20 mark(nil) 105.09/43.20 cons(mark(x0), x1) 105.09/43.20 cons(x0, mark(x1)) 105.09/43.20 cons(active(x0), x1) 105.09/43.20 cons(x0, active(x1)) 105.09/43.20 U11(mark(x0), x1) 105.09/43.20 U11(x0, mark(x1)) 105.09/43.20 U11(active(x0), x1) 105.09/43.20 U11(x0, active(x1)) 105.09/43.20 s(mark(x0)) 105.09/43.20 s(active(x0)) 105.09/43.20 length(mark(x0)) 105.09/43.20 length(active(x0)) 105.09/43.20 and(mark(x0), x1) 105.09/43.20 and(x0, mark(x1)) 105.09/43.20 and(active(x0), x1) 105.09/43.20 and(x0, active(x1)) 105.09/43.20 isNat(mark(x0)) 105.09/43.20 isNat(active(x0)) 105.09/43.20 isNatList(mark(x0)) 105.09/43.20 isNatList(active(x0)) 105.09/43.20 isNatIList(mark(x0)) 105.09/43.20 isNatIList(active(x0)) 105.09/43.20 105.09/43.20 We have to consider all minimal (P,Q,R)-chains. 105.09/43.20 ---------------------------------------- 105.09/43.20 105.09/43.20 (103) TransformationProof (SOUND) 105.09/43.20 By narrowing [LPAR04] the rule MARK(U11(X1, X2)) -> ACTIVE(U11(mark(X1), X2)) at position [0] we obtained the following new rules [LPAR04]: 105.09/43.20 105.09/43.20 (MARK(U11(x0, x1)) -> ACTIVE(U11(x0, x1)),MARK(U11(x0, x1)) -> ACTIVE(U11(x0, x1))) 105.09/43.20 (MARK(U11(cons(x0, x1), y1)) -> ACTIVE(U11(active(cons(mark(x0), x1)), y1)),MARK(U11(cons(x0, x1), y1)) -> ACTIVE(U11(active(cons(mark(x0), x1)), y1))) 105.09/43.20 (MARK(U11(s(x0), y1)) -> ACTIVE(U11(active(s(mark(x0))), y1)),MARK(U11(s(x0), y1)) -> ACTIVE(U11(active(s(mark(x0))), y1))) 105.09/43.20 (MARK(U11(zeros, y1)) -> ACTIVE(U11(active(zeros), y1)),MARK(U11(zeros, y1)) -> ACTIVE(U11(active(zeros), y1))) 105.09/43.20 (MARK(U11(U11(x0, x1), y1)) -> ACTIVE(U11(active(U11(mark(x0), x1)), y1)),MARK(U11(U11(x0, x1), y1)) -> ACTIVE(U11(active(U11(mark(x0), x1)), y1))) 105.09/43.20 (MARK(U11(and(x0, x1), y1)) -> ACTIVE(U11(active(and(mark(x0), x1)), y1)),MARK(U11(and(x0, x1), y1)) -> ACTIVE(U11(active(and(mark(x0), x1)), y1))) 105.09/43.20 (MARK(U11(length(x0), y1)) -> ACTIVE(U11(active(length(mark(x0))), y1)),MARK(U11(length(x0), y1)) -> ACTIVE(U11(active(length(mark(x0))), y1))) 105.09/43.20 (MARK(U11(isNatList(x0), y1)) -> ACTIVE(U11(active(isNatList(x0)), y1)),MARK(U11(isNatList(x0), y1)) -> ACTIVE(U11(active(isNatList(x0)), y1))) 105.09/43.20 (MARK(U11(isNatIList(x0), y1)) -> ACTIVE(U11(active(isNatIList(x0)), y1)),MARK(U11(isNatIList(x0), y1)) -> ACTIVE(U11(active(isNatIList(x0)), y1))) 105.09/43.20 (MARK(U11(0, y1)) -> ACTIVE(U11(active(0), y1)),MARK(U11(0, y1)) -> ACTIVE(U11(active(0), y1))) 105.09/43.20 (MARK(U11(tt, y1)) -> ACTIVE(U11(active(tt), y1)),MARK(U11(tt, y1)) -> ACTIVE(U11(active(tt), y1))) 105.09/43.20 (MARK(U11(isNat(x0), y1)) -> ACTIVE(U11(active(isNat(x0)), y1)),MARK(U11(isNat(x0), y1)) -> ACTIVE(U11(active(isNat(x0)), y1))) 105.09/43.20 (MARK(U11(nil, y1)) -> ACTIVE(U11(active(nil), y1)),MARK(U11(nil, y1)) -> ACTIVE(U11(active(nil), y1))) 105.09/43.20 105.09/43.20 105.09/43.20 ---------------------------------------- 105.09/43.20 105.09/43.20 (104) 105.09/43.20 Obligation: 105.09/43.20 Q DP problem: 105.09/43.20 The TRS P consists of the following rules: 105.09/43.20 105.09/43.20 ACTIVE(U11(tt, L)) -> MARK(s(length(L))) 105.09/43.20 MARK(s(X)) -> MARK(X) 105.09/43.20 ACTIVE(length(cons(N, L))) -> MARK(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.20 MARK(length(X)) -> ACTIVE(length(mark(X))) 105.09/43.20 MARK(U11(x0, x1)) -> ACTIVE(U11(x0, x1)) 105.09/43.20 MARK(U11(cons(x0, x1), y1)) -> ACTIVE(U11(active(cons(mark(x0), x1)), y1)) 105.09/43.20 MARK(U11(s(x0), y1)) -> ACTIVE(U11(active(s(mark(x0))), y1)) 105.09/43.20 MARK(U11(zeros, y1)) -> ACTIVE(U11(active(zeros), y1)) 105.09/43.20 MARK(U11(U11(x0, x1), y1)) -> ACTIVE(U11(active(U11(mark(x0), x1)), y1)) 105.09/43.20 MARK(U11(and(x0, x1), y1)) -> ACTIVE(U11(active(and(mark(x0), x1)), y1)) 105.09/43.20 MARK(U11(length(x0), y1)) -> ACTIVE(U11(active(length(mark(x0))), y1)) 105.09/43.20 MARK(U11(isNatList(x0), y1)) -> ACTIVE(U11(active(isNatList(x0)), y1)) 105.09/43.20 MARK(U11(isNatIList(x0), y1)) -> ACTIVE(U11(active(isNatIList(x0)), y1)) 105.09/43.20 MARK(U11(0, y1)) -> ACTIVE(U11(active(0), y1)) 105.09/43.20 MARK(U11(tt, y1)) -> ACTIVE(U11(active(tt), y1)) 105.09/43.20 MARK(U11(isNat(x0), y1)) -> ACTIVE(U11(active(isNat(x0)), y1)) 105.09/43.20 MARK(U11(nil, y1)) -> ACTIVE(U11(active(nil), y1)) 105.09/43.20 105.09/43.20 The TRS R consists of the following rules: 105.09/43.20 105.09/43.20 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 105.09/43.20 active(zeros) -> mark(cons(0, zeros)) 105.09/43.20 active(U11(tt, L)) -> mark(s(length(L))) 105.09/43.20 mark(s(X)) -> active(s(mark(X))) 105.09/43.20 active(and(tt, X)) -> mark(X) 105.09/43.20 mark(zeros) -> active(zeros) 105.09/43.20 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 105.09/43.20 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 105.09/43.20 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 105.09/43.20 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 105.09/43.20 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.20 mark(length(X)) -> active(length(mark(X))) 105.09/43.20 mark(isNatList(X)) -> active(isNatList(X)) 105.09/43.20 mark(isNatIList(X)) -> active(isNatIList(X)) 105.09/43.20 mark(0) -> active(0) 105.09/43.20 mark(tt) -> active(tt) 105.09/43.20 active(isNat(s(V1))) -> mark(isNat(V1)) 105.09/43.20 mark(isNat(X)) -> active(isNat(X)) 105.09/43.20 mark(nil) -> active(nil) 105.09/43.20 and(X1, mark(X2)) -> and(X1, X2) 105.09/43.20 and(mark(X1), X2) -> and(X1, X2) 105.09/43.20 and(active(X1), X2) -> and(X1, X2) 105.09/43.20 and(X1, active(X2)) -> and(X1, X2) 105.09/43.20 active(isNat(0)) -> mark(tt) 105.09/43.20 cons(X1, mark(X2)) -> cons(X1, X2) 105.09/43.20 cons(mark(X1), X2) -> cons(X1, X2) 105.09/43.20 cons(active(X1), X2) -> cons(X1, X2) 105.09/43.20 cons(X1, active(X2)) -> cons(X1, X2) 105.09/43.20 s(active(X)) -> s(X) 105.09/43.20 s(mark(X)) -> s(X) 105.09/43.20 U11(X1, mark(X2)) -> U11(X1, X2) 105.09/43.20 U11(mark(X1), X2) -> U11(X1, X2) 105.09/43.20 U11(active(X1), X2) -> U11(X1, X2) 105.09/43.20 U11(X1, active(X2)) -> U11(X1, X2) 105.09/43.20 length(active(X)) -> length(X) 105.09/43.20 length(mark(X)) -> length(X) 105.09/43.20 105.09/43.20 The set Q consists of the following terms: 105.09/43.20 105.09/43.20 active(zeros) 105.09/43.20 active(U11(tt, x0)) 105.09/43.20 active(and(tt, x0)) 105.09/43.20 active(isNat(0)) 105.09/43.20 active(isNat(length(x0))) 105.09/43.20 active(isNat(s(x0))) 105.09/43.20 active(isNatIList(x0)) 105.09/43.20 active(isNatList(nil)) 105.09/43.20 active(isNatList(cons(x0, x1))) 105.09/43.20 active(length(nil)) 105.09/43.20 active(length(cons(x0, x1))) 105.09/43.20 mark(zeros) 105.09/43.20 mark(cons(x0, x1)) 105.09/43.20 mark(0) 105.09/43.20 mark(U11(x0, x1)) 105.09/43.20 mark(tt) 105.09/43.20 mark(s(x0)) 105.09/43.20 mark(length(x0)) 105.09/43.20 mark(and(x0, x1)) 105.09/43.20 mark(isNat(x0)) 105.09/43.20 mark(isNatList(x0)) 105.09/43.20 mark(isNatIList(x0)) 105.09/43.20 mark(nil) 105.09/43.20 cons(mark(x0), x1) 105.09/43.20 cons(x0, mark(x1)) 105.09/43.20 cons(active(x0), x1) 105.09/43.20 cons(x0, active(x1)) 105.09/43.20 U11(mark(x0), x1) 105.09/43.20 U11(x0, mark(x1)) 105.09/43.20 U11(active(x0), x1) 105.09/43.20 U11(x0, active(x1)) 105.09/43.20 s(mark(x0)) 105.09/43.20 s(active(x0)) 105.09/43.20 length(mark(x0)) 105.09/43.20 length(active(x0)) 105.09/43.20 and(mark(x0), x1) 105.09/43.20 and(x0, mark(x1)) 105.09/43.20 and(active(x0), x1) 105.09/43.20 and(x0, active(x1)) 105.09/43.20 isNat(mark(x0)) 105.09/43.20 isNat(active(x0)) 105.09/43.20 isNatList(mark(x0)) 105.09/43.20 isNatList(active(x0)) 105.09/43.20 isNatIList(mark(x0)) 105.09/43.20 isNatIList(active(x0)) 105.09/43.20 105.09/43.20 We have to consider all minimal (P,Q,R)-chains. 105.09/43.20 ---------------------------------------- 105.09/43.20 105.09/43.20 (105) TransformationProof (SOUND) 105.09/43.20 By narrowing [LPAR04] the rule MARK(length(X)) -> ACTIVE(length(mark(X))) at position [0] we obtained the following new rules [LPAR04]: 105.09/43.20 105.09/43.20 (MARK(length(x0)) -> ACTIVE(length(x0)),MARK(length(x0)) -> ACTIVE(length(x0))) 105.09/43.20 (MARK(length(cons(x0, x1))) -> ACTIVE(length(active(cons(mark(x0), x1)))),MARK(length(cons(x0, x1))) -> ACTIVE(length(active(cons(mark(x0), x1))))) 105.09/43.20 (MARK(length(s(x0))) -> ACTIVE(length(active(s(mark(x0))))),MARK(length(s(x0))) -> ACTIVE(length(active(s(mark(x0)))))) 105.09/43.20 (MARK(length(zeros)) -> ACTIVE(length(active(zeros))),MARK(length(zeros)) -> ACTIVE(length(active(zeros)))) 105.09/43.20 (MARK(length(U11(x0, x1))) -> ACTIVE(length(active(U11(mark(x0), x1)))),MARK(length(U11(x0, x1))) -> ACTIVE(length(active(U11(mark(x0), x1))))) 105.09/43.20 (MARK(length(and(x0, x1))) -> ACTIVE(length(active(and(mark(x0), x1)))),MARK(length(and(x0, x1))) -> ACTIVE(length(active(and(mark(x0), x1))))) 105.09/43.20 (MARK(length(length(x0))) -> ACTIVE(length(active(length(mark(x0))))),MARK(length(length(x0))) -> ACTIVE(length(active(length(mark(x0)))))) 105.09/43.20 (MARK(length(isNatList(x0))) -> ACTIVE(length(active(isNatList(x0)))),MARK(length(isNatList(x0))) -> ACTIVE(length(active(isNatList(x0))))) 105.09/43.20 (MARK(length(isNatIList(x0))) -> ACTIVE(length(active(isNatIList(x0)))),MARK(length(isNatIList(x0))) -> ACTIVE(length(active(isNatIList(x0))))) 105.09/43.20 (MARK(length(0)) -> ACTIVE(length(active(0))),MARK(length(0)) -> ACTIVE(length(active(0)))) 105.09/43.20 (MARK(length(tt)) -> ACTIVE(length(active(tt))),MARK(length(tt)) -> ACTIVE(length(active(tt)))) 105.09/43.20 (MARK(length(isNat(x0))) -> ACTIVE(length(active(isNat(x0)))),MARK(length(isNat(x0))) -> ACTIVE(length(active(isNat(x0))))) 105.09/43.20 (MARK(length(nil)) -> ACTIVE(length(active(nil))),MARK(length(nil)) -> ACTIVE(length(active(nil)))) 105.09/43.20 105.09/43.20 105.09/43.20 ---------------------------------------- 105.09/43.20 105.09/43.20 (106) 105.09/43.20 Obligation: 105.09/43.20 Q DP problem: 105.09/43.20 The TRS P consists of the following rules: 105.09/43.20 105.09/43.20 ACTIVE(U11(tt, L)) -> MARK(s(length(L))) 105.09/43.20 MARK(s(X)) -> MARK(X) 105.09/43.20 ACTIVE(length(cons(N, L))) -> MARK(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.20 MARK(U11(x0, x1)) -> ACTIVE(U11(x0, x1)) 105.09/43.20 MARK(U11(cons(x0, x1), y1)) -> ACTIVE(U11(active(cons(mark(x0), x1)), y1)) 105.09/43.20 MARK(U11(s(x0), y1)) -> ACTIVE(U11(active(s(mark(x0))), y1)) 105.09/43.20 MARK(U11(zeros, y1)) -> ACTIVE(U11(active(zeros), y1)) 105.09/43.20 MARK(U11(U11(x0, x1), y1)) -> ACTIVE(U11(active(U11(mark(x0), x1)), y1)) 105.09/43.20 MARK(U11(and(x0, x1), y1)) -> ACTIVE(U11(active(and(mark(x0), x1)), y1)) 105.09/43.20 MARK(U11(length(x0), y1)) -> ACTIVE(U11(active(length(mark(x0))), y1)) 105.09/43.20 MARK(U11(isNatList(x0), y1)) -> ACTIVE(U11(active(isNatList(x0)), y1)) 105.09/43.20 MARK(U11(isNatIList(x0), y1)) -> ACTIVE(U11(active(isNatIList(x0)), y1)) 105.09/43.20 MARK(U11(0, y1)) -> ACTIVE(U11(active(0), y1)) 105.09/43.20 MARK(U11(tt, y1)) -> ACTIVE(U11(active(tt), y1)) 105.09/43.20 MARK(U11(isNat(x0), y1)) -> ACTIVE(U11(active(isNat(x0)), y1)) 105.09/43.20 MARK(U11(nil, y1)) -> ACTIVE(U11(active(nil), y1)) 105.09/43.20 MARK(length(x0)) -> ACTIVE(length(x0)) 105.09/43.20 MARK(length(cons(x0, x1))) -> ACTIVE(length(active(cons(mark(x0), x1)))) 105.09/43.20 MARK(length(s(x0))) -> ACTIVE(length(active(s(mark(x0))))) 105.09/43.20 MARK(length(zeros)) -> ACTIVE(length(active(zeros))) 105.09/43.20 MARK(length(U11(x0, x1))) -> ACTIVE(length(active(U11(mark(x0), x1)))) 105.09/43.20 MARK(length(and(x0, x1))) -> ACTIVE(length(active(and(mark(x0), x1)))) 105.09/43.20 MARK(length(length(x0))) -> ACTIVE(length(active(length(mark(x0))))) 105.09/43.20 MARK(length(isNatList(x0))) -> ACTIVE(length(active(isNatList(x0)))) 105.09/43.20 MARK(length(isNatIList(x0))) -> ACTIVE(length(active(isNatIList(x0)))) 105.09/43.20 MARK(length(0)) -> ACTIVE(length(active(0))) 105.09/43.20 MARK(length(tt)) -> ACTIVE(length(active(tt))) 105.09/43.20 MARK(length(isNat(x0))) -> ACTIVE(length(active(isNat(x0)))) 105.09/43.20 MARK(length(nil)) -> ACTIVE(length(active(nil))) 105.09/43.20 105.09/43.20 The TRS R consists of the following rules: 105.09/43.20 105.09/43.20 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 105.09/43.20 active(zeros) -> mark(cons(0, zeros)) 105.09/43.20 active(U11(tt, L)) -> mark(s(length(L))) 105.09/43.20 mark(s(X)) -> active(s(mark(X))) 105.09/43.20 active(and(tt, X)) -> mark(X) 105.09/43.20 mark(zeros) -> active(zeros) 105.09/43.20 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 105.09/43.20 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 105.09/43.20 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 105.09/43.20 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 105.09/43.20 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.20 mark(length(X)) -> active(length(mark(X))) 105.09/43.20 mark(isNatList(X)) -> active(isNatList(X)) 105.09/43.20 mark(isNatIList(X)) -> active(isNatIList(X)) 105.09/43.20 mark(0) -> active(0) 105.09/43.20 mark(tt) -> active(tt) 105.09/43.20 active(isNat(s(V1))) -> mark(isNat(V1)) 105.09/43.20 mark(isNat(X)) -> active(isNat(X)) 105.09/43.20 mark(nil) -> active(nil) 105.09/43.20 and(X1, mark(X2)) -> and(X1, X2) 105.09/43.20 and(mark(X1), X2) -> and(X1, X2) 105.09/43.20 and(active(X1), X2) -> and(X1, X2) 105.09/43.20 and(X1, active(X2)) -> and(X1, X2) 105.09/43.20 active(isNat(0)) -> mark(tt) 105.09/43.20 cons(X1, mark(X2)) -> cons(X1, X2) 105.09/43.20 cons(mark(X1), X2) -> cons(X1, X2) 105.09/43.20 cons(active(X1), X2) -> cons(X1, X2) 105.09/43.20 cons(X1, active(X2)) -> cons(X1, X2) 105.09/43.20 s(active(X)) -> s(X) 105.09/43.20 s(mark(X)) -> s(X) 105.09/43.20 U11(X1, mark(X2)) -> U11(X1, X2) 105.09/43.20 U11(mark(X1), X2) -> U11(X1, X2) 105.09/43.20 U11(active(X1), X2) -> U11(X1, X2) 105.09/43.20 U11(X1, active(X2)) -> U11(X1, X2) 105.09/43.20 length(active(X)) -> length(X) 105.09/43.20 length(mark(X)) -> length(X) 105.09/43.20 105.09/43.20 The set Q consists of the following terms: 105.09/43.20 105.09/43.20 active(zeros) 105.09/43.20 active(U11(tt, x0)) 105.09/43.20 active(and(tt, x0)) 105.09/43.20 active(isNat(0)) 105.09/43.20 active(isNat(length(x0))) 105.09/43.20 active(isNat(s(x0))) 105.09/43.20 active(isNatIList(x0)) 105.09/43.20 active(isNatList(nil)) 105.09/43.20 active(isNatList(cons(x0, x1))) 105.09/43.20 active(length(nil)) 105.09/43.20 active(length(cons(x0, x1))) 105.09/43.20 mark(zeros) 105.09/43.20 mark(cons(x0, x1)) 105.09/43.20 mark(0) 105.09/43.20 mark(U11(x0, x1)) 105.09/43.20 mark(tt) 105.09/43.20 mark(s(x0)) 105.09/43.20 mark(length(x0)) 105.09/43.20 mark(and(x0, x1)) 105.09/43.20 mark(isNat(x0)) 105.09/43.20 mark(isNatList(x0)) 105.09/43.20 mark(isNatIList(x0)) 105.09/43.20 mark(nil) 105.09/43.20 cons(mark(x0), x1) 105.09/43.20 cons(x0, mark(x1)) 105.09/43.20 cons(active(x0), x1) 105.09/43.20 cons(x0, active(x1)) 105.09/43.20 U11(mark(x0), x1) 105.09/43.20 U11(x0, mark(x1)) 105.09/43.20 U11(active(x0), x1) 105.09/43.20 U11(x0, active(x1)) 105.09/43.20 s(mark(x0)) 105.09/43.20 s(active(x0)) 105.09/43.20 length(mark(x0)) 105.09/43.20 length(active(x0)) 105.09/43.20 and(mark(x0), x1) 105.09/43.20 and(x0, mark(x1)) 105.09/43.20 and(active(x0), x1) 105.09/43.20 and(x0, active(x1)) 105.09/43.20 isNat(mark(x0)) 105.09/43.20 isNat(active(x0)) 105.09/43.20 isNatList(mark(x0)) 105.09/43.20 isNatList(active(x0)) 105.09/43.20 isNatIList(mark(x0)) 105.09/43.20 isNatIList(active(x0)) 105.09/43.20 105.09/43.20 We have to consider all minimal (P,Q,R)-chains. 105.09/43.20 ---------------------------------------- 105.09/43.20 105.09/43.20 (107) TransformationProof (EQUIVALENT) 105.09/43.20 By rewriting [LPAR04] the rule MARK(length(0)) -> ACTIVE(length(active(0))) at position [0] we obtained the following new rules [LPAR04]: 105.09/43.20 105.09/43.20 (MARK(length(0)) -> ACTIVE(length(0)),MARK(length(0)) -> ACTIVE(length(0))) 105.09/43.20 105.09/43.20 105.09/43.20 ---------------------------------------- 105.09/43.20 105.09/43.20 (108) 105.09/43.20 Obligation: 105.09/43.20 Q DP problem: 105.09/43.20 The TRS P consists of the following rules: 105.09/43.20 105.09/43.20 ACTIVE(U11(tt, L)) -> MARK(s(length(L))) 105.09/43.20 MARK(s(X)) -> MARK(X) 105.09/43.20 ACTIVE(length(cons(N, L))) -> MARK(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.20 MARK(U11(x0, x1)) -> ACTIVE(U11(x0, x1)) 105.09/43.20 MARK(U11(cons(x0, x1), y1)) -> ACTIVE(U11(active(cons(mark(x0), x1)), y1)) 105.09/43.20 MARK(U11(s(x0), y1)) -> ACTIVE(U11(active(s(mark(x0))), y1)) 105.09/43.20 MARK(U11(zeros, y1)) -> ACTIVE(U11(active(zeros), y1)) 105.09/43.20 MARK(U11(U11(x0, x1), y1)) -> ACTIVE(U11(active(U11(mark(x0), x1)), y1)) 105.09/43.20 MARK(U11(and(x0, x1), y1)) -> ACTIVE(U11(active(and(mark(x0), x1)), y1)) 105.09/43.20 MARK(U11(length(x0), y1)) -> ACTIVE(U11(active(length(mark(x0))), y1)) 105.09/43.20 MARK(U11(isNatList(x0), y1)) -> ACTIVE(U11(active(isNatList(x0)), y1)) 105.09/43.20 MARK(U11(isNatIList(x0), y1)) -> ACTIVE(U11(active(isNatIList(x0)), y1)) 105.09/43.20 MARK(U11(0, y1)) -> ACTIVE(U11(active(0), y1)) 105.09/43.20 MARK(U11(tt, y1)) -> ACTIVE(U11(active(tt), y1)) 105.09/43.20 MARK(U11(isNat(x0), y1)) -> ACTIVE(U11(active(isNat(x0)), y1)) 105.09/43.20 MARK(U11(nil, y1)) -> ACTIVE(U11(active(nil), y1)) 105.09/43.20 MARK(length(x0)) -> ACTIVE(length(x0)) 105.09/43.20 MARK(length(cons(x0, x1))) -> ACTIVE(length(active(cons(mark(x0), x1)))) 105.09/43.20 MARK(length(s(x0))) -> ACTIVE(length(active(s(mark(x0))))) 105.09/43.20 MARK(length(zeros)) -> ACTIVE(length(active(zeros))) 105.09/43.20 MARK(length(U11(x0, x1))) -> ACTIVE(length(active(U11(mark(x0), x1)))) 105.09/43.20 MARK(length(and(x0, x1))) -> ACTIVE(length(active(and(mark(x0), x1)))) 105.09/43.20 MARK(length(length(x0))) -> ACTIVE(length(active(length(mark(x0))))) 105.09/43.20 MARK(length(isNatList(x0))) -> ACTIVE(length(active(isNatList(x0)))) 105.09/43.20 MARK(length(isNatIList(x0))) -> ACTIVE(length(active(isNatIList(x0)))) 105.09/43.20 MARK(length(tt)) -> ACTIVE(length(active(tt))) 105.09/43.20 MARK(length(isNat(x0))) -> ACTIVE(length(active(isNat(x0)))) 105.09/43.20 MARK(length(nil)) -> ACTIVE(length(active(nil))) 105.09/43.20 MARK(length(0)) -> ACTIVE(length(0)) 105.09/43.20 105.09/43.20 The TRS R consists of the following rules: 105.09/43.20 105.09/43.20 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 105.09/43.20 active(zeros) -> mark(cons(0, zeros)) 105.09/43.20 active(U11(tt, L)) -> mark(s(length(L))) 105.09/43.20 mark(s(X)) -> active(s(mark(X))) 105.09/43.20 active(and(tt, X)) -> mark(X) 105.09/43.20 mark(zeros) -> active(zeros) 105.09/43.20 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 105.09/43.20 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 105.09/43.20 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 105.09/43.20 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 105.09/43.20 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.20 mark(length(X)) -> active(length(mark(X))) 105.09/43.20 mark(isNatList(X)) -> active(isNatList(X)) 105.09/43.20 mark(isNatIList(X)) -> active(isNatIList(X)) 105.09/43.20 mark(0) -> active(0) 105.09/43.20 mark(tt) -> active(tt) 105.09/43.20 active(isNat(s(V1))) -> mark(isNat(V1)) 105.09/43.20 mark(isNat(X)) -> active(isNat(X)) 105.09/43.20 mark(nil) -> active(nil) 105.09/43.20 and(X1, mark(X2)) -> and(X1, X2) 105.09/43.20 and(mark(X1), X2) -> and(X1, X2) 105.09/43.20 and(active(X1), X2) -> and(X1, X2) 105.09/43.20 and(X1, active(X2)) -> and(X1, X2) 105.09/43.20 active(isNat(0)) -> mark(tt) 105.09/43.20 cons(X1, mark(X2)) -> cons(X1, X2) 105.09/43.20 cons(mark(X1), X2) -> cons(X1, X2) 105.09/43.20 cons(active(X1), X2) -> cons(X1, X2) 105.09/43.20 cons(X1, active(X2)) -> cons(X1, X2) 105.09/43.20 s(active(X)) -> s(X) 105.09/43.20 s(mark(X)) -> s(X) 105.09/43.20 U11(X1, mark(X2)) -> U11(X1, X2) 105.09/43.20 U11(mark(X1), X2) -> U11(X1, X2) 105.09/43.20 U11(active(X1), X2) -> U11(X1, X2) 105.09/43.20 U11(X1, active(X2)) -> U11(X1, X2) 105.09/43.20 length(active(X)) -> length(X) 105.09/43.20 length(mark(X)) -> length(X) 105.09/43.20 105.09/43.20 The set Q consists of the following terms: 105.09/43.20 105.09/43.20 active(zeros) 105.09/43.20 active(U11(tt, x0)) 105.09/43.20 active(and(tt, x0)) 105.09/43.20 active(isNat(0)) 105.09/43.20 active(isNat(length(x0))) 105.09/43.20 active(isNat(s(x0))) 105.09/43.20 active(isNatIList(x0)) 105.09/43.20 active(isNatList(nil)) 105.09/43.20 active(isNatList(cons(x0, x1))) 105.09/43.20 active(length(nil)) 105.09/43.20 active(length(cons(x0, x1))) 105.09/43.20 mark(zeros) 105.09/43.20 mark(cons(x0, x1)) 105.09/43.20 mark(0) 105.09/43.20 mark(U11(x0, x1)) 105.09/43.20 mark(tt) 105.09/43.20 mark(s(x0)) 105.09/43.20 mark(length(x0)) 105.09/43.20 mark(and(x0, x1)) 105.09/43.20 mark(isNat(x0)) 105.09/43.20 mark(isNatList(x0)) 105.09/43.20 mark(isNatIList(x0)) 105.09/43.20 mark(nil) 105.09/43.20 cons(mark(x0), x1) 105.09/43.20 cons(x0, mark(x1)) 105.09/43.20 cons(active(x0), x1) 105.09/43.20 cons(x0, active(x1)) 105.09/43.20 U11(mark(x0), x1) 105.09/43.20 U11(x0, mark(x1)) 105.09/43.20 U11(active(x0), x1) 105.09/43.20 U11(x0, active(x1)) 105.09/43.20 s(mark(x0)) 105.09/43.20 s(active(x0)) 105.09/43.20 length(mark(x0)) 105.09/43.20 length(active(x0)) 105.09/43.20 and(mark(x0), x1) 105.09/43.20 and(x0, mark(x1)) 105.09/43.20 and(active(x0), x1) 105.09/43.20 and(x0, active(x1)) 105.09/43.20 isNat(mark(x0)) 105.09/43.20 isNat(active(x0)) 105.09/43.20 isNatList(mark(x0)) 105.09/43.20 isNatList(active(x0)) 105.09/43.20 isNatIList(mark(x0)) 105.09/43.20 isNatIList(active(x0)) 105.09/43.20 105.09/43.20 We have to consider all minimal (P,Q,R)-chains. 105.09/43.20 ---------------------------------------- 105.09/43.20 105.09/43.20 (109) DependencyGraphProof (EQUIVALENT) 105.09/43.20 The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 1 SCC with 1 less node. 105.09/43.20 ---------------------------------------- 105.09/43.20 105.09/43.20 (110) 105.09/43.20 Obligation: 105.09/43.20 Q DP problem: 105.09/43.20 The TRS P consists of the following rules: 105.09/43.20 105.09/43.20 MARK(s(X)) -> MARK(X) 105.09/43.20 MARK(U11(x0, x1)) -> ACTIVE(U11(x0, x1)) 105.09/43.20 ACTIVE(U11(tt, L)) -> MARK(s(length(L))) 105.09/43.20 MARK(U11(cons(x0, x1), y1)) -> ACTIVE(U11(active(cons(mark(x0), x1)), y1)) 105.09/43.20 ACTIVE(length(cons(N, L))) -> MARK(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.20 MARK(U11(and(x0, x1), y1)) -> ACTIVE(U11(active(and(mark(x0), x1)), y1)) 105.09/43.20 MARK(U11(s(x0), y1)) -> ACTIVE(U11(active(s(mark(x0))), y1)) 105.09/43.20 MARK(U11(zeros, y1)) -> ACTIVE(U11(active(zeros), y1)) 105.09/43.20 MARK(U11(U11(x0, x1), y1)) -> ACTIVE(U11(active(U11(mark(x0), x1)), y1)) 105.09/43.20 MARK(U11(length(x0), y1)) -> ACTIVE(U11(active(length(mark(x0))), y1)) 105.09/43.20 MARK(U11(isNatList(x0), y1)) -> ACTIVE(U11(active(isNatList(x0)), y1)) 105.09/43.20 MARK(U11(isNatIList(x0), y1)) -> ACTIVE(U11(active(isNatIList(x0)), y1)) 105.09/43.20 MARK(U11(0, y1)) -> ACTIVE(U11(active(0), y1)) 105.09/43.20 MARK(U11(tt, y1)) -> ACTIVE(U11(active(tt), y1)) 105.09/43.20 MARK(U11(isNat(x0), y1)) -> ACTIVE(U11(active(isNat(x0)), y1)) 105.09/43.20 MARK(U11(nil, y1)) -> ACTIVE(U11(active(nil), y1)) 105.09/43.20 MARK(length(x0)) -> ACTIVE(length(x0)) 105.09/43.20 MARK(length(cons(x0, x1))) -> ACTIVE(length(active(cons(mark(x0), x1)))) 105.09/43.20 MARK(length(s(x0))) -> ACTIVE(length(active(s(mark(x0))))) 105.09/43.20 MARK(length(zeros)) -> ACTIVE(length(active(zeros))) 105.09/43.20 MARK(length(U11(x0, x1))) -> ACTIVE(length(active(U11(mark(x0), x1)))) 105.09/43.20 MARK(length(and(x0, x1))) -> ACTIVE(length(active(and(mark(x0), x1)))) 105.09/43.20 MARK(length(length(x0))) -> ACTIVE(length(active(length(mark(x0))))) 105.09/43.20 MARK(length(isNatList(x0))) -> ACTIVE(length(active(isNatList(x0)))) 105.09/43.20 MARK(length(isNatIList(x0))) -> ACTIVE(length(active(isNatIList(x0)))) 105.09/43.20 MARK(length(tt)) -> ACTIVE(length(active(tt))) 105.09/43.20 MARK(length(isNat(x0))) -> ACTIVE(length(active(isNat(x0)))) 105.09/43.20 MARK(length(nil)) -> ACTIVE(length(active(nil))) 105.09/43.20 105.09/43.20 The TRS R consists of the following rules: 105.09/43.20 105.09/43.20 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 105.09/43.20 active(zeros) -> mark(cons(0, zeros)) 105.09/43.20 active(U11(tt, L)) -> mark(s(length(L))) 105.09/43.20 mark(s(X)) -> active(s(mark(X))) 105.09/43.20 active(and(tt, X)) -> mark(X) 105.09/43.20 mark(zeros) -> active(zeros) 105.09/43.20 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 105.09/43.20 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 105.09/43.20 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 105.09/43.20 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 105.09/43.20 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.20 mark(length(X)) -> active(length(mark(X))) 105.09/43.20 mark(isNatList(X)) -> active(isNatList(X)) 105.09/43.20 mark(isNatIList(X)) -> active(isNatIList(X)) 105.09/43.20 mark(0) -> active(0) 105.09/43.20 mark(tt) -> active(tt) 105.09/43.20 active(isNat(s(V1))) -> mark(isNat(V1)) 105.09/43.20 mark(isNat(X)) -> active(isNat(X)) 105.09/43.20 mark(nil) -> active(nil) 105.09/43.20 and(X1, mark(X2)) -> and(X1, X2) 105.09/43.20 and(mark(X1), X2) -> and(X1, X2) 105.09/43.20 and(active(X1), X2) -> and(X1, X2) 105.09/43.20 and(X1, active(X2)) -> and(X1, X2) 105.09/43.20 active(isNat(0)) -> mark(tt) 105.09/43.20 cons(X1, mark(X2)) -> cons(X1, X2) 105.09/43.20 cons(mark(X1), X2) -> cons(X1, X2) 105.09/43.20 cons(active(X1), X2) -> cons(X1, X2) 105.09/43.20 cons(X1, active(X2)) -> cons(X1, X2) 105.09/43.20 s(active(X)) -> s(X) 105.09/43.20 s(mark(X)) -> s(X) 105.09/43.20 U11(X1, mark(X2)) -> U11(X1, X2) 105.09/43.20 U11(mark(X1), X2) -> U11(X1, X2) 105.09/43.20 U11(active(X1), X2) -> U11(X1, X2) 105.09/43.20 U11(X1, active(X2)) -> U11(X1, X2) 105.09/43.20 length(active(X)) -> length(X) 105.09/43.20 length(mark(X)) -> length(X) 105.09/43.20 105.09/43.20 The set Q consists of the following terms: 105.09/43.20 105.09/43.20 active(zeros) 105.09/43.20 active(U11(tt, x0)) 105.09/43.20 active(and(tt, x0)) 105.09/43.20 active(isNat(0)) 105.09/43.20 active(isNat(length(x0))) 105.09/43.20 active(isNat(s(x0))) 105.09/43.20 active(isNatIList(x0)) 105.09/43.20 active(isNatList(nil)) 105.09/43.20 active(isNatList(cons(x0, x1))) 105.09/43.20 active(length(nil)) 105.09/43.20 active(length(cons(x0, x1))) 105.09/43.20 mark(zeros) 105.09/43.20 mark(cons(x0, x1)) 105.09/43.20 mark(0) 105.09/43.20 mark(U11(x0, x1)) 105.09/43.20 mark(tt) 105.09/43.20 mark(s(x0)) 105.09/43.20 mark(length(x0)) 105.09/43.20 mark(and(x0, x1)) 105.09/43.20 mark(isNat(x0)) 105.09/43.20 mark(isNatList(x0)) 105.09/43.20 mark(isNatIList(x0)) 105.09/43.20 mark(nil) 105.09/43.20 cons(mark(x0), x1) 105.09/43.20 cons(x0, mark(x1)) 105.09/43.20 cons(active(x0), x1) 105.09/43.20 cons(x0, active(x1)) 105.09/43.20 U11(mark(x0), x1) 105.09/43.20 U11(x0, mark(x1)) 105.09/43.20 U11(active(x0), x1) 105.09/43.20 U11(x0, active(x1)) 105.09/43.20 s(mark(x0)) 105.09/43.20 s(active(x0)) 105.09/43.20 length(mark(x0)) 105.09/43.20 length(active(x0)) 105.09/43.20 and(mark(x0), x1) 105.09/43.20 and(x0, mark(x1)) 105.09/43.20 and(active(x0), x1) 105.09/43.20 and(x0, active(x1)) 105.09/43.20 isNat(mark(x0)) 105.09/43.20 isNat(active(x0)) 105.09/43.20 isNatList(mark(x0)) 105.09/43.20 isNatList(active(x0)) 105.09/43.20 isNatIList(mark(x0)) 105.09/43.20 isNatIList(active(x0)) 105.09/43.20 105.09/43.20 We have to consider all minimal (P,Q,R)-chains. 105.09/43.20 ---------------------------------------- 105.09/43.20 105.09/43.20 (111) TransformationProof (EQUIVALENT) 105.09/43.20 By rewriting [LPAR04] the rule MARK(length(tt)) -> ACTIVE(length(active(tt))) at position [0] we obtained the following new rules [LPAR04]: 105.09/43.20 105.09/43.20 (MARK(length(tt)) -> ACTIVE(length(tt)),MARK(length(tt)) -> ACTIVE(length(tt))) 105.09/43.20 105.09/43.20 105.09/43.20 ---------------------------------------- 105.09/43.20 105.09/43.20 (112) 105.09/43.20 Obligation: 105.09/43.20 Q DP problem: 105.09/43.20 The TRS P consists of the following rules: 105.09/43.20 105.09/43.20 MARK(s(X)) -> MARK(X) 105.09/43.20 MARK(U11(x0, x1)) -> ACTIVE(U11(x0, x1)) 105.09/43.20 ACTIVE(U11(tt, L)) -> MARK(s(length(L))) 105.09/43.20 MARK(U11(cons(x0, x1), y1)) -> ACTIVE(U11(active(cons(mark(x0), x1)), y1)) 105.09/43.20 ACTIVE(length(cons(N, L))) -> MARK(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.20 MARK(U11(and(x0, x1), y1)) -> ACTIVE(U11(active(and(mark(x0), x1)), y1)) 105.09/43.20 MARK(U11(s(x0), y1)) -> ACTIVE(U11(active(s(mark(x0))), y1)) 105.09/43.20 MARK(U11(zeros, y1)) -> ACTIVE(U11(active(zeros), y1)) 105.09/43.20 MARK(U11(U11(x0, x1), y1)) -> ACTIVE(U11(active(U11(mark(x0), x1)), y1)) 105.09/43.20 MARK(U11(length(x0), y1)) -> ACTIVE(U11(active(length(mark(x0))), y1)) 105.09/43.20 MARK(U11(isNatList(x0), y1)) -> ACTIVE(U11(active(isNatList(x0)), y1)) 105.09/43.20 MARK(U11(isNatIList(x0), y1)) -> ACTIVE(U11(active(isNatIList(x0)), y1)) 105.09/43.20 MARK(U11(0, y1)) -> ACTIVE(U11(active(0), y1)) 105.09/43.20 MARK(U11(tt, y1)) -> ACTIVE(U11(active(tt), y1)) 105.09/43.20 MARK(U11(isNat(x0), y1)) -> ACTIVE(U11(active(isNat(x0)), y1)) 105.09/43.20 MARK(U11(nil, y1)) -> ACTIVE(U11(active(nil), y1)) 105.09/43.20 MARK(length(x0)) -> ACTIVE(length(x0)) 105.09/43.20 MARK(length(cons(x0, x1))) -> ACTIVE(length(active(cons(mark(x0), x1)))) 105.09/43.20 MARK(length(s(x0))) -> ACTIVE(length(active(s(mark(x0))))) 105.09/43.20 MARK(length(zeros)) -> ACTIVE(length(active(zeros))) 105.09/43.20 MARK(length(U11(x0, x1))) -> ACTIVE(length(active(U11(mark(x0), x1)))) 105.09/43.20 MARK(length(and(x0, x1))) -> ACTIVE(length(active(and(mark(x0), x1)))) 105.09/43.20 MARK(length(length(x0))) -> ACTIVE(length(active(length(mark(x0))))) 105.09/43.20 MARK(length(isNatList(x0))) -> ACTIVE(length(active(isNatList(x0)))) 105.09/43.20 MARK(length(isNatIList(x0))) -> ACTIVE(length(active(isNatIList(x0)))) 105.09/43.20 MARK(length(isNat(x0))) -> ACTIVE(length(active(isNat(x0)))) 105.09/43.20 MARK(length(nil)) -> ACTIVE(length(active(nil))) 105.09/43.20 MARK(length(tt)) -> ACTIVE(length(tt)) 105.09/43.20 105.09/43.20 The TRS R consists of the following rules: 105.09/43.20 105.09/43.20 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 105.09/43.20 active(zeros) -> mark(cons(0, zeros)) 105.09/43.20 active(U11(tt, L)) -> mark(s(length(L))) 105.09/43.20 mark(s(X)) -> active(s(mark(X))) 105.09/43.20 active(and(tt, X)) -> mark(X) 105.09/43.20 mark(zeros) -> active(zeros) 105.09/43.20 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 105.09/43.20 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 105.09/43.20 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 105.09/43.20 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 105.09/43.20 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.20 mark(length(X)) -> active(length(mark(X))) 105.09/43.20 mark(isNatList(X)) -> active(isNatList(X)) 105.09/43.20 mark(isNatIList(X)) -> active(isNatIList(X)) 105.09/43.20 mark(0) -> active(0) 105.09/43.20 mark(tt) -> active(tt) 105.09/43.20 active(isNat(s(V1))) -> mark(isNat(V1)) 105.09/43.20 mark(isNat(X)) -> active(isNat(X)) 105.09/43.20 mark(nil) -> active(nil) 105.09/43.20 and(X1, mark(X2)) -> and(X1, X2) 105.09/43.20 and(mark(X1), X2) -> and(X1, X2) 105.09/43.20 and(active(X1), X2) -> and(X1, X2) 105.09/43.20 and(X1, active(X2)) -> and(X1, X2) 105.09/43.20 active(isNat(0)) -> mark(tt) 105.09/43.20 cons(X1, mark(X2)) -> cons(X1, X2) 105.09/43.20 cons(mark(X1), X2) -> cons(X1, X2) 105.09/43.20 cons(active(X1), X2) -> cons(X1, X2) 105.09/43.20 cons(X1, active(X2)) -> cons(X1, X2) 105.09/43.20 s(active(X)) -> s(X) 105.09/43.20 s(mark(X)) -> s(X) 105.09/43.20 U11(X1, mark(X2)) -> U11(X1, X2) 105.09/43.20 U11(mark(X1), X2) -> U11(X1, X2) 105.09/43.20 U11(active(X1), X2) -> U11(X1, X2) 105.09/43.20 U11(X1, active(X2)) -> U11(X1, X2) 105.09/43.20 length(active(X)) -> length(X) 105.09/43.20 length(mark(X)) -> length(X) 105.09/43.20 105.09/43.20 The set Q consists of the following terms: 105.09/43.20 105.09/43.20 active(zeros) 105.09/43.20 active(U11(tt, x0)) 105.09/43.20 active(and(tt, x0)) 105.09/43.20 active(isNat(0)) 105.09/43.20 active(isNat(length(x0))) 105.09/43.20 active(isNat(s(x0))) 105.09/43.20 active(isNatIList(x0)) 105.09/43.20 active(isNatList(nil)) 105.09/43.20 active(isNatList(cons(x0, x1))) 105.09/43.20 active(length(nil)) 105.09/43.20 active(length(cons(x0, x1))) 105.09/43.20 mark(zeros) 105.09/43.20 mark(cons(x0, x1)) 105.09/43.20 mark(0) 105.09/43.20 mark(U11(x0, x1)) 105.09/43.20 mark(tt) 105.09/43.20 mark(s(x0)) 105.09/43.20 mark(length(x0)) 105.09/43.20 mark(and(x0, x1)) 105.09/43.20 mark(isNat(x0)) 105.09/43.20 mark(isNatList(x0)) 105.09/43.20 mark(isNatIList(x0)) 105.09/43.20 mark(nil) 105.09/43.20 cons(mark(x0), x1) 105.09/43.20 cons(x0, mark(x1)) 105.09/43.20 cons(active(x0), x1) 105.09/43.20 cons(x0, active(x1)) 105.09/43.20 U11(mark(x0), x1) 105.09/43.20 U11(x0, mark(x1)) 105.09/43.20 U11(active(x0), x1) 105.09/43.20 U11(x0, active(x1)) 105.09/43.20 s(mark(x0)) 105.09/43.20 s(active(x0)) 105.09/43.20 length(mark(x0)) 105.09/43.20 length(active(x0)) 105.09/43.20 and(mark(x0), x1) 105.09/43.20 and(x0, mark(x1)) 105.09/43.20 and(active(x0), x1) 105.09/43.20 and(x0, active(x1)) 105.09/43.20 isNat(mark(x0)) 105.09/43.20 isNat(active(x0)) 105.09/43.20 isNatList(mark(x0)) 105.09/43.20 isNatList(active(x0)) 105.09/43.20 isNatIList(mark(x0)) 105.09/43.20 isNatIList(active(x0)) 105.09/43.20 105.09/43.20 We have to consider all minimal (P,Q,R)-chains. 105.09/43.20 ---------------------------------------- 105.09/43.20 105.09/43.20 (113) DependencyGraphProof (EQUIVALENT) 105.09/43.20 The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 1 SCC with 1 less node. 105.09/43.20 ---------------------------------------- 105.09/43.20 105.09/43.20 (114) 105.09/43.20 Obligation: 105.09/43.20 Q DP problem: 105.09/43.20 The TRS P consists of the following rules: 105.09/43.20 105.09/43.20 MARK(s(X)) -> MARK(X) 105.09/43.20 MARK(U11(x0, x1)) -> ACTIVE(U11(x0, x1)) 105.09/43.20 ACTIVE(U11(tt, L)) -> MARK(s(length(L))) 105.09/43.20 MARK(U11(cons(x0, x1), y1)) -> ACTIVE(U11(active(cons(mark(x0), x1)), y1)) 105.09/43.20 ACTIVE(length(cons(N, L))) -> MARK(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.20 MARK(U11(and(x0, x1), y1)) -> ACTIVE(U11(active(and(mark(x0), x1)), y1)) 105.09/43.20 MARK(U11(s(x0), y1)) -> ACTIVE(U11(active(s(mark(x0))), y1)) 105.09/43.20 MARK(U11(zeros, y1)) -> ACTIVE(U11(active(zeros), y1)) 105.09/43.20 MARK(U11(U11(x0, x1), y1)) -> ACTIVE(U11(active(U11(mark(x0), x1)), y1)) 105.09/43.20 MARK(U11(length(x0), y1)) -> ACTIVE(U11(active(length(mark(x0))), y1)) 105.09/43.20 MARK(U11(isNatList(x0), y1)) -> ACTIVE(U11(active(isNatList(x0)), y1)) 105.09/43.20 MARK(U11(isNatIList(x0), y1)) -> ACTIVE(U11(active(isNatIList(x0)), y1)) 105.09/43.20 MARK(U11(0, y1)) -> ACTIVE(U11(active(0), y1)) 105.09/43.20 MARK(U11(tt, y1)) -> ACTIVE(U11(active(tt), y1)) 105.09/43.20 MARK(U11(isNat(x0), y1)) -> ACTIVE(U11(active(isNat(x0)), y1)) 105.09/43.20 MARK(U11(nil, y1)) -> ACTIVE(U11(active(nil), y1)) 105.09/43.20 MARK(length(x0)) -> ACTIVE(length(x0)) 105.09/43.20 MARK(length(cons(x0, x1))) -> ACTIVE(length(active(cons(mark(x0), x1)))) 105.09/43.20 MARK(length(s(x0))) -> ACTIVE(length(active(s(mark(x0))))) 105.09/43.20 MARK(length(zeros)) -> ACTIVE(length(active(zeros))) 105.09/43.20 MARK(length(U11(x0, x1))) -> ACTIVE(length(active(U11(mark(x0), x1)))) 105.09/43.20 MARK(length(and(x0, x1))) -> ACTIVE(length(active(and(mark(x0), x1)))) 105.09/43.20 MARK(length(length(x0))) -> ACTIVE(length(active(length(mark(x0))))) 105.09/43.20 MARK(length(isNatList(x0))) -> ACTIVE(length(active(isNatList(x0)))) 105.09/43.20 MARK(length(isNatIList(x0))) -> ACTIVE(length(active(isNatIList(x0)))) 105.09/43.20 MARK(length(isNat(x0))) -> ACTIVE(length(active(isNat(x0)))) 105.09/43.20 MARK(length(nil)) -> ACTIVE(length(active(nil))) 105.09/43.20 105.09/43.20 The TRS R consists of the following rules: 105.09/43.20 105.09/43.20 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 105.09/43.20 active(zeros) -> mark(cons(0, zeros)) 105.09/43.20 active(U11(tt, L)) -> mark(s(length(L))) 105.09/43.20 mark(s(X)) -> active(s(mark(X))) 105.09/43.20 active(and(tt, X)) -> mark(X) 105.09/43.20 mark(zeros) -> active(zeros) 105.09/43.20 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 105.09/43.20 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 105.09/43.20 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 105.09/43.20 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 105.09/43.20 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.20 mark(length(X)) -> active(length(mark(X))) 105.09/43.20 mark(isNatList(X)) -> active(isNatList(X)) 105.09/43.20 mark(isNatIList(X)) -> active(isNatIList(X)) 105.09/43.20 mark(0) -> active(0) 105.09/43.20 mark(tt) -> active(tt) 105.09/43.20 active(isNat(s(V1))) -> mark(isNat(V1)) 105.09/43.20 mark(isNat(X)) -> active(isNat(X)) 105.09/43.20 mark(nil) -> active(nil) 105.09/43.20 and(X1, mark(X2)) -> and(X1, X2) 105.09/43.20 and(mark(X1), X2) -> and(X1, X2) 105.09/43.20 and(active(X1), X2) -> and(X1, X2) 105.09/43.20 and(X1, active(X2)) -> and(X1, X2) 105.09/43.20 active(isNat(0)) -> mark(tt) 105.09/43.20 cons(X1, mark(X2)) -> cons(X1, X2) 105.09/43.20 cons(mark(X1), X2) -> cons(X1, X2) 105.09/43.20 cons(active(X1), X2) -> cons(X1, X2) 105.09/43.20 cons(X1, active(X2)) -> cons(X1, X2) 105.09/43.20 s(active(X)) -> s(X) 105.09/43.20 s(mark(X)) -> s(X) 105.09/43.20 U11(X1, mark(X2)) -> U11(X1, X2) 105.09/43.20 U11(mark(X1), X2) -> U11(X1, X2) 105.09/43.20 U11(active(X1), X2) -> U11(X1, X2) 105.09/43.20 U11(X1, active(X2)) -> U11(X1, X2) 105.09/43.20 length(active(X)) -> length(X) 105.09/43.20 length(mark(X)) -> length(X) 105.09/43.20 105.09/43.20 The set Q consists of the following terms: 105.09/43.20 105.09/43.20 active(zeros) 105.09/43.20 active(U11(tt, x0)) 105.09/43.20 active(and(tt, x0)) 105.09/43.20 active(isNat(0)) 105.09/43.20 active(isNat(length(x0))) 105.09/43.20 active(isNat(s(x0))) 105.09/43.20 active(isNatIList(x0)) 105.09/43.20 active(isNatList(nil)) 105.09/43.20 active(isNatList(cons(x0, x1))) 105.09/43.20 active(length(nil)) 105.09/43.20 active(length(cons(x0, x1))) 105.09/43.20 mark(zeros) 105.09/43.20 mark(cons(x0, x1)) 105.09/43.20 mark(0) 105.09/43.20 mark(U11(x0, x1)) 105.09/43.20 mark(tt) 105.09/43.20 mark(s(x0)) 105.09/43.20 mark(length(x0)) 105.09/43.20 mark(and(x0, x1)) 105.09/43.20 mark(isNat(x0)) 105.09/43.20 mark(isNatList(x0)) 105.09/43.21 mark(isNatIList(x0)) 105.09/43.21 mark(nil) 105.09/43.21 cons(mark(x0), x1) 105.09/43.21 cons(x0, mark(x1)) 105.09/43.21 cons(active(x0), x1) 105.09/43.21 cons(x0, active(x1)) 105.09/43.21 U11(mark(x0), x1) 105.09/43.21 U11(x0, mark(x1)) 105.09/43.21 U11(active(x0), x1) 105.09/43.21 U11(x0, active(x1)) 105.09/43.21 s(mark(x0)) 105.09/43.21 s(active(x0)) 105.09/43.21 length(mark(x0)) 105.09/43.21 length(active(x0)) 105.09/43.21 and(mark(x0), x1) 105.09/43.21 and(x0, mark(x1)) 105.09/43.21 and(active(x0), x1) 105.09/43.21 and(x0, active(x1)) 105.09/43.21 isNat(mark(x0)) 105.09/43.21 isNat(active(x0)) 105.09/43.21 isNatList(mark(x0)) 105.09/43.21 isNatList(active(x0)) 105.09/43.21 isNatIList(mark(x0)) 105.09/43.21 isNatIList(active(x0)) 105.09/43.21 105.09/43.21 We have to consider all minimal (P,Q,R)-chains. 105.09/43.21 ---------------------------------------- 105.09/43.21 105.09/43.21 (115) TransformationProof (EQUIVALENT) 105.09/43.21 By rewriting [LPAR04] the rule MARK(length(nil)) -> ACTIVE(length(active(nil))) at position [0] we obtained the following new rules [LPAR04]: 105.09/43.21 105.09/43.21 (MARK(length(nil)) -> ACTIVE(length(nil)),MARK(length(nil)) -> ACTIVE(length(nil))) 105.09/43.21 105.09/43.21 105.09/43.21 ---------------------------------------- 105.09/43.21 105.09/43.21 (116) 105.09/43.21 Obligation: 105.09/43.21 Q DP problem: 105.09/43.21 The TRS P consists of the following rules: 105.09/43.21 105.09/43.21 MARK(s(X)) -> MARK(X) 105.09/43.21 MARK(U11(x0, x1)) -> ACTIVE(U11(x0, x1)) 105.09/43.21 ACTIVE(U11(tt, L)) -> MARK(s(length(L))) 105.09/43.21 MARK(U11(cons(x0, x1), y1)) -> ACTIVE(U11(active(cons(mark(x0), x1)), y1)) 105.09/43.21 ACTIVE(length(cons(N, L))) -> MARK(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.21 MARK(U11(and(x0, x1), y1)) -> ACTIVE(U11(active(and(mark(x0), x1)), y1)) 105.09/43.21 MARK(U11(s(x0), y1)) -> ACTIVE(U11(active(s(mark(x0))), y1)) 105.09/43.21 MARK(U11(zeros, y1)) -> ACTIVE(U11(active(zeros), y1)) 105.09/43.21 MARK(U11(U11(x0, x1), y1)) -> ACTIVE(U11(active(U11(mark(x0), x1)), y1)) 105.09/43.21 MARK(U11(length(x0), y1)) -> ACTIVE(U11(active(length(mark(x0))), y1)) 105.09/43.21 MARK(U11(isNatList(x0), y1)) -> ACTIVE(U11(active(isNatList(x0)), y1)) 105.09/43.21 MARK(U11(isNatIList(x0), y1)) -> ACTIVE(U11(active(isNatIList(x0)), y1)) 105.09/43.21 MARK(U11(0, y1)) -> ACTIVE(U11(active(0), y1)) 105.09/43.21 MARK(U11(tt, y1)) -> ACTIVE(U11(active(tt), y1)) 105.09/43.21 MARK(U11(isNat(x0), y1)) -> ACTIVE(U11(active(isNat(x0)), y1)) 105.09/43.21 MARK(U11(nil, y1)) -> ACTIVE(U11(active(nil), y1)) 105.09/43.21 MARK(length(x0)) -> ACTIVE(length(x0)) 105.09/43.21 MARK(length(cons(x0, x1))) -> ACTIVE(length(active(cons(mark(x0), x1)))) 105.09/43.21 MARK(length(s(x0))) -> ACTIVE(length(active(s(mark(x0))))) 105.09/43.21 MARK(length(zeros)) -> ACTIVE(length(active(zeros))) 105.09/43.21 MARK(length(U11(x0, x1))) -> ACTIVE(length(active(U11(mark(x0), x1)))) 105.09/43.21 MARK(length(and(x0, x1))) -> ACTIVE(length(active(and(mark(x0), x1)))) 105.09/43.21 MARK(length(length(x0))) -> ACTIVE(length(active(length(mark(x0))))) 105.09/43.21 MARK(length(isNatList(x0))) -> ACTIVE(length(active(isNatList(x0)))) 105.09/43.21 MARK(length(isNatIList(x0))) -> ACTIVE(length(active(isNatIList(x0)))) 105.09/43.21 MARK(length(isNat(x0))) -> ACTIVE(length(active(isNat(x0)))) 105.09/43.21 MARK(length(nil)) -> ACTIVE(length(nil)) 105.09/43.21 105.09/43.21 The TRS R consists of the following rules: 105.09/43.21 105.09/43.21 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 105.09/43.21 active(zeros) -> mark(cons(0, zeros)) 105.09/43.21 active(U11(tt, L)) -> mark(s(length(L))) 105.09/43.21 mark(s(X)) -> active(s(mark(X))) 105.09/43.21 active(and(tt, X)) -> mark(X) 105.09/43.21 mark(zeros) -> active(zeros) 105.09/43.21 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 105.09/43.21 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 105.09/43.21 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 105.09/43.21 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 105.09/43.21 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.21 mark(length(X)) -> active(length(mark(X))) 105.09/43.21 mark(isNatList(X)) -> active(isNatList(X)) 105.09/43.21 mark(isNatIList(X)) -> active(isNatIList(X)) 105.09/43.21 mark(0) -> active(0) 105.09/43.21 mark(tt) -> active(tt) 105.09/43.21 active(isNat(s(V1))) -> mark(isNat(V1)) 105.09/43.21 mark(isNat(X)) -> active(isNat(X)) 105.09/43.21 mark(nil) -> active(nil) 105.09/43.21 and(X1, mark(X2)) -> and(X1, X2) 105.09/43.21 and(mark(X1), X2) -> and(X1, X2) 105.09/43.21 and(active(X1), X2) -> and(X1, X2) 105.09/43.21 and(X1, active(X2)) -> and(X1, X2) 105.09/43.21 active(isNat(0)) -> mark(tt) 105.09/43.21 cons(X1, mark(X2)) -> cons(X1, X2) 105.09/43.21 cons(mark(X1), X2) -> cons(X1, X2) 105.09/43.21 cons(active(X1), X2) -> cons(X1, X2) 105.09/43.21 cons(X1, active(X2)) -> cons(X1, X2) 105.09/43.21 s(active(X)) -> s(X) 105.09/43.21 s(mark(X)) -> s(X) 105.09/43.21 U11(X1, mark(X2)) -> U11(X1, X2) 105.09/43.21 U11(mark(X1), X2) -> U11(X1, X2) 105.09/43.21 U11(active(X1), X2) -> U11(X1, X2) 105.09/43.21 U11(X1, active(X2)) -> U11(X1, X2) 105.09/43.21 length(active(X)) -> length(X) 105.09/43.21 length(mark(X)) -> length(X) 105.09/43.21 105.09/43.21 The set Q consists of the following terms: 105.09/43.21 105.09/43.21 active(zeros) 105.09/43.21 active(U11(tt, x0)) 105.09/43.21 active(and(tt, x0)) 105.09/43.21 active(isNat(0)) 105.09/43.21 active(isNat(length(x0))) 105.09/43.21 active(isNat(s(x0))) 105.09/43.21 active(isNatIList(x0)) 105.09/43.21 active(isNatList(nil)) 105.09/43.21 active(isNatList(cons(x0, x1))) 105.09/43.21 active(length(nil)) 105.09/43.21 active(length(cons(x0, x1))) 105.09/43.21 mark(zeros) 105.09/43.21 mark(cons(x0, x1)) 105.09/43.21 mark(0) 105.09/43.21 mark(U11(x0, x1)) 105.09/43.21 mark(tt) 105.09/43.21 mark(s(x0)) 105.09/43.21 mark(length(x0)) 105.09/43.21 mark(and(x0, x1)) 105.09/43.21 mark(isNat(x0)) 105.09/43.21 mark(isNatList(x0)) 105.09/43.21 mark(isNatIList(x0)) 105.09/43.21 mark(nil) 105.09/43.21 cons(mark(x0), x1) 105.09/43.21 cons(x0, mark(x1)) 105.09/43.21 cons(active(x0), x1) 105.09/43.21 cons(x0, active(x1)) 105.09/43.21 U11(mark(x0), x1) 105.09/43.21 U11(x0, mark(x1)) 105.09/43.21 U11(active(x0), x1) 105.09/43.21 U11(x0, active(x1)) 105.09/43.21 s(mark(x0)) 105.09/43.21 s(active(x0)) 105.09/43.21 length(mark(x0)) 105.09/43.21 length(active(x0)) 105.09/43.21 and(mark(x0), x1) 105.09/43.21 and(x0, mark(x1)) 105.09/43.21 and(active(x0), x1) 105.09/43.21 and(x0, active(x1)) 105.09/43.21 isNat(mark(x0)) 105.09/43.21 isNat(active(x0)) 105.09/43.21 isNatList(mark(x0)) 105.09/43.21 isNatList(active(x0)) 105.09/43.21 isNatIList(mark(x0)) 105.09/43.21 isNatIList(active(x0)) 105.09/43.21 105.09/43.21 We have to consider all minimal (P,Q,R)-chains. 105.09/43.21 ---------------------------------------- 105.09/43.21 105.09/43.21 (117) DependencyGraphProof (EQUIVALENT) 105.09/43.21 The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 1 SCC with 1 less node. 105.09/43.21 ---------------------------------------- 105.09/43.21 105.09/43.21 (118) 105.09/43.21 Obligation: 105.09/43.21 Q DP problem: 105.09/43.21 The TRS P consists of the following rules: 105.09/43.21 105.09/43.21 MARK(s(X)) -> MARK(X) 105.09/43.21 MARK(U11(x0, x1)) -> ACTIVE(U11(x0, x1)) 105.09/43.21 ACTIVE(U11(tt, L)) -> MARK(s(length(L))) 105.09/43.21 MARK(U11(cons(x0, x1), y1)) -> ACTIVE(U11(active(cons(mark(x0), x1)), y1)) 105.09/43.21 ACTIVE(length(cons(N, L))) -> MARK(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.21 MARK(U11(and(x0, x1), y1)) -> ACTIVE(U11(active(and(mark(x0), x1)), y1)) 105.09/43.21 MARK(U11(s(x0), y1)) -> ACTIVE(U11(active(s(mark(x0))), y1)) 105.09/43.21 MARK(U11(zeros, y1)) -> ACTIVE(U11(active(zeros), y1)) 105.09/43.21 MARK(U11(U11(x0, x1), y1)) -> ACTIVE(U11(active(U11(mark(x0), x1)), y1)) 105.09/43.21 MARK(U11(length(x0), y1)) -> ACTIVE(U11(active(length(mark(x0))), y1)) 105.09/43.21 MARK(U11(isNatList(x0), y1)) -> ACTIVE(U11(active(isNatList(x0)), y1)) 105.09/43.21 MARK(U11(isNatIList(x0), y1)) -> ACTIVE(U11(active(isNatIList(x0)), y1)) 105.09/43.21 MARK(U11(0, y1)) -> ACTIVE(U11(active(0), y1)) 105.09/43.21 MARK(U11(tt, y1)) -> ACTIVE(U11(active(tt), y1)) 105.09/43.21 MARK(U11(isNat(x0), y1)) -> ACTIVE(U11(active(isNat(x0)), y1)) 105.09/43.21 MARK(U11(nil, y1)) -> ACTIVE(U11(active(nil), y1)) 105.09/43.21 MARK(length(x0)) -> ACTIVE(length(x0)) 105.09/43.21 MARK(length(cons(x0, x1))) -> ACTIVE(length(active(cons(mark(x0), x1)))) 105.09/43.21 MARK(length(s(x0))) -> ACTIVE(length(active(s(mark(x0))))) 105.09/43.21 MARK(length(zeros)) -> ACTIVE(length(active(zeros))) 105.09/43.21 MARK(length(U11(x0, x1))) -> ACTIVE(length(active(U11(mark(x0), x1)))) 105.09/43.21 MARK(length(and(x0, x1))) -> ACTIVE(length(active(and(mark(x0), x1)))) 105.09/43.21 MARK(length(length(x0))) -> ACTIVE(length(active(length(mark(x0))))) 105.09/43.21 MARK(length(isNatList(x0))) -> ACTIVE(length(active(isNatList(x0)))) 105.09/43.21 MARK(length(isNatIList(x0))) -> ACTIVE(length(active(isNatIList(x0)))) 105.09/43.21 MARK(length(isNat(x0))) -> ACTIVE(length(active(isNat(x0)))) 105.09/43.21 105.09/43.21 The TRS R consists of the following rules: 105.09/43.21 105.09/43.21 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 105.09/43.21 active(zeros) -> mark(cons(0, zeros)) 105.09/43.21 active(U11(tt, L)) -> mark(s(length(L))) 105.09/43.21 mark(s(X)) -> active(s(mark(X))) 105.09/43.21 active(and(tt, X)) -> mark(X) 105.09/43.21 mark(zeros) -> active(zeros) 105.09/43.21 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 105.09/43.21 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 105.09/43.21 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 105.09/43.21 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 105.09/43.21 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.21 mark(length(X)) -> active(length(mark(X))) 105.09/43.21 mark(isNatList(X)) -> active(isNatList(X)) 105.09/43.21 mark(isNatIList(X)) -> active(isNatIList(X)) 105.09/43.21 mark(0) -> active(0) 105.09/43.21 mark(tt) -> active(tt) 105.09/43.21 active(isNat(s(V1))) -> mark(isNat(V1)) 105.09/43.21 mark(isNat(X)) -> active(isNat(X)) 105.09/43.21 mark(nil) -> active(nil) 105.09/43.21 and(X1, mark(X2)) -> and(X1, X2) 105.09/43.21 and(mark(X1), X2) -> and(X1, X2) 105.09/43.21 and(active(X1), X2) -> and(X1, X2) 105.09/43.21 and(X1, active(X2)) -> and(X1, X2) 105.09/43.21 active(isNat(0)) -> mark(tt) 105.09/43.21 cons(X1, mark(X2)) -> cons(X1, X2) 105.09/43.21 cons(mark(X1), X2) -> cons(X1, X2) 105.09/43.21 cons(active(X1), X2) -> cons(X1, X2) 105.09/43.21 cons(X1, active(X2)) -> cons(X1, X2) 105.09/43.21 s(active(X)) -> s(X) 105.09/43.21 s(mark(X)) -> s(X) 105.09/43.21 U11(X1, mark(X2)) -> U11(X1, X2) 105.09/43.21 U11(mark(X1), X2) -> U11(X1, X2) 105.09/43.21 U11(active(X1), X2) -> U11(X1, X2) 105.09/43.21 U11(X1, active(X2)) -> U11(X1, X2) 105.09/43.21 length(active(X)) -> length(X) 105.09/43.21 length(mark(X)) -> length(X) 105.09/43.21 105.09/43.21 The set Q consists of the following terms: 105.09/43.21 105.09/43.21 active(zeros) 105.09/43.21 active(U11(tt, x0)) 105.09/43.21 active(and(tt, x0)) 105.09/43.21 active(isNat(0)) 105.09/43.21 active(isNat(length(x0))) 105.09/43.21 active(isNat(s(x0))) 105.09/43.21 active(isNatIList(x0)) 105.09/43.21 active(isNatList(nil)) 105.09/43.21 active(isNatList(cons(x0, x1))) 105.09/43.21 active(length(nil)) 105.09/43.21 active(length(cons(x0, x1))) 105.09/43.21 mark(zeros) 105.09/43.21 mark(cons(x0, x1)) 105.09/43.21 mark(0) 105.09/43.21 mark(U11(x0, x1)) 105.09/43.21 mark(tt) 105.09/43.21 mark(s(x0)) 105.09/43.21 mark(length(x0)) 105.09/43.21 mark(and(x0, x1)) 105.09/43.21 mark(isNat(x0)) 105.09/43.21 mark(isNatList(x0)) 105.09/43.21 mark(isNatIList(x0)) 105.09/43.21 mark(nil) 105.09/43.21 cons(mark(x0), x1) 105.09/43.21 cons(x0, mark(x1)) 105.09/43.21 cons(active(x0), x1) 105.09/43.21 cons(x0, active(x1)) 105.09/43.21 U11(mark(x0), x1) 105.09/43.21 U11(x0, mark(x1)) 105.09/43.21 U11(active(x0), x1) 105.09/43.21 U11(x0, active(x1)) 105.09/43.21 s(mark(x0)) 105.09/43.21 s(active(x0)) 105.09/43.21 length(mark(x0)) 105.09/43.21 length(active(x0)) 105.09/43.21 and(mark(x0), x1) 105.09/43.21 and(x0, mark(x1)) 105.09/43.21 and(active(x0), x1) 105.09/43.21 and(x0, active(x1)) 105.09/43.21 isNat(mark(x0)) 105.09/43.21 isNat(active(x0)) 105.09/43.21 isNatList(mark(x0)) 105.09/43.21 isNatList(active(x0)) 105.09/43.21 isNatIList(mark(x0)) 105.09/43.21 isNatIList(active(x0)) 105.09/43.21 105.09/43.21 We have to consider all minimal (P,Q,R)-chains. 105.09/43.21 ---------------------------------------- 105.09/43.21 105.09/43.21 (119) TransformationProof (EQUIVALENT) 105.09/43.21 By narrowing [LPAR04] the rule MARK(U11(0, y1)) -> ACTIVE(U11(active(0), y1)) at position [0] we obtained the following new rules [LPAR04]: 105.09/43.21 105.09/43.21 (MARK(U11(0, x1)) -> ACTIVE(U11(0, x1)),MARK(U11(0, x1)) -> ACTIVE(U11(0, x1))) 105.09/43.21 105.09/43.21 105.09/43.21 ---------------------------------------- 105.09/43.21 105.09/43.21 (120) 105.09/43.21 Obligation: 105.09/43.21 Q DP problem: 105.09/43.21 The TRS P consists of the following rules: 105.09/43.21 105.09/43.21 MARK(s(X)) -> MARK(X) 105.09/43.21 MARK(U11(x0, x1)) -> ACTIVE(U11(x0, x1)) 105.09/43.21 ACTIVE(U11(tt, L)) -> MARK(s(length(L))) 105.09/43.21 MARK(U11(cons(x0, x1), y1)) -> ACTIVE(U11(active(cons(mark(x0), x1)), y1)) 105.09/43.21 ACTIVE(length(cons(N, L))) -> MARK(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.21 MARK(U11(and(x0, x1), y1)) -> ACTIVE(U11(active(and(mark(x0), x1)), y1)) 105.09/43.21 MARK(U11(s(x0), y1)) -> ACTIVE(U11(active(s(mark(x0))), y1)) 105.09/43.21 MARK(U11(zeros, y1)) -> ACTIVE(U11(active(zeros), y1)) 105.09/43.21 MARK(U11(U11(x0, x1), y1)) -> ACTIVE(U11(active(U11(mark(x0), x1)), y1)) 105.09/43.21 MARK(U11(length(x0), y1)) -> ACTIVE(U11(active(length(mark(x0))), y1)) 105.09/43.21 MARK(U11(isNatList(x0), y1)) -> ACTIVE(U11(active(isNatList(x0)), y1)) 105.09/43.21 MARK(U11(isNatIList(x0), y1)) -> ACTIVE(U11(active(isNatIList(x0)), y1)) 105.09/43.21 MARK(U11(tt, y1)) -> ACTIVE(U11(active(tt), y1)) 105.09/43.21 MARK(U11(isNat(x0), y1)) -> ACTIVE(U11(active(isNat(x0)), y1)) 105.09/43.21 MARK(U11(nil, y1)) -> ACTIVE(U11(active(nil), y1)) 105.09/43.21 MARK(length(x0)) -> ACTIVE(length(x0)) 105.09/43.21 MARK(length(cons(x0, x1))) -> ACTIVE(length(active(cons(mark(x0), x1)))) 105.09/43.21 MARK(length(s(x0))) -> ACTIVE(length(active(s(mark(x0))))) 105.09/43.21 MARK(length(zeros)) -> ACTIVE(length(active(zeros))) 105.09/43.21 MARK(length(U11(x0, x1))) -> ACTIVE(length(active(U11(mark(x0), x1)))) 105.09/43.21 MARK(length(and(x0, x1))) -> ACTIVE(length(active(and(mark(x0), x1)))) 105.09/43.21 MARK(length(length(x0))) -> ACTIVE(length(active(length(mark(x0))))) 105.09/43.21 MARK(length(isNatList(x0))) -> ACTIVE(length(active(isNatList(x0)))) 105.09/43.21 MARK(length(isNatIList(x0))) -> ACTIVE(length(active(isNatIList(x0)))) 105.09/43.21 MARK(length(isNat(x0))) -> ACTIVE(length(active(isNat(x0)))) 105.09/43.21 MARK(U11(0, x1)) -> ACTIVE(U11(0, x1)) 105.09/43.21 105.09/43.21 The TRS R consists of the following rules: 105.09/43.21 105.09/43.21 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 105.09/43.21 active(zeros) -> mark(cons(0, zeros)) 105.09/43.21 active(U11(tt, L)) -> mark(s(length(L))) 105.09/43.21 mark(s(X)) -> active(s(mark(X))) 105.09/43.21 active(and(tt, X)) -> mark(X) 105.09/43.21 mark(zeros) -> active(zeros) 105.09/43.21 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 105.09/43.21 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 105.09/43.21 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 105.09/43.21 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 105.09/43.21 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.21 mark(length(X)) -> active(length(mark(X))) 105.09/43.21 mark(isNatList(X)) -> active(isNatList(X)) 105.09/43.21 mark(isNatIList(X)) -> active(isNatIList(X)) 105.09/43.21 mark(0) -> active(0) 105.09/43.21 mark(tt) -> active(tt) 105.09/43.21 active(isNat(s(V1))) -> mark(isNat(V1)) 105.09/43.21 mark(isNat(X)) -> active(isNat(X)) 105.09/43.21 mark(nil) -> active(nil) 105.09/43.21 and(X1, mark(X2)) -> and(X1, X2) 105.09/43.21 and(mark(X1), X2) -> and(X1, X2) 105.09/43.21 and(active(X1), X2) -> and(X1, X2) 105.09/43.21 and(X1, active(X2)) -> and(X1, X2) 105.09/43.21 active(isNat(0)) -> mark(tt) 105.09/43.21 cons(X1, mark(X2)) -> cons(X1, X2) 105.09/43.21 cons(mark(X1), X2) -> cons(X1, X2) 105.09/43.21 cons(active(X1), X2) -> cons(X1, X2) 105.09/43.21 cons(X1, active(X2)) -> cons(X1, X2) 105.09/43.21 s(active(X)) -> s(X) 105.09/43.21 s(mark(X)) -> s(X) 105.09/43.21 U11(X1, mark(X2)) -> U11(X1, X2) 105.09/43.21 U11(mark(X1), X2) -> U11(X1, X2) 105.09/43.21 U11(active(X1), X2) -> U11(X1, X2) 105.09/43.21 U11(X1, active(X2)) -> U11(X1, X2) 105.09/43.21 length(active(X)) -> length(X) 105.09/43.21 length(mark(X)) -> length(X) 105.09/43.21 105.09/43.21 The set Q consists of the following terms: 105.09/43.21 105.09/43.21 active(zeros) 105.09/43.21 active(U11(tt, x0)) 105.09/43.21 active(and(tt, x0)) 105.09/43.21 active(isNat(0)) 105.09/43.21 active(isNat(length(x0))) 105.09/43.21 active(isNat(s(x0))) 105.09/43.21 active(isNatIList(x0)) 105.09/43.21 active(isNatList(nil)) 105.09/43.21 active(isNatList(cons(x0, x1))) 105.09/43.21 active(length(nil)) 105.09/43.21 active(length(cons(x0, x1))) 105.09/43.21 mark(zeros) 105.09/43.21 mark(cons(x0, x1)) 105.09/43.21 mark(0) 105.09/43.21 mark(U11(x0, x1)) 105.09/43.21 mark(tt) 105.09/43.21 mark(s(x0)) 105.09/43.21 mark(length(x0)) 105.09/43.21 mark(and(x0, x1)) 105.09/43.21 mark(isNat(x0)) 105.09/43.21 mark(isNatList(x0)) 105.09/43.21 mark(isNatIList(x0)) 105.09/43.21 mark(nil) 105.09/43.21 cons(mark(x0), x1) 105.09/43.21 cons(x0, mark(x1)) 105.09/43.21 cons(active(x0), x1) 105.09/43.21 cons(x0, active(x1)) 105.09/43.21 U11(mark(x0), x1) 105.09/43.21 U11(x0, mark(x1)) 105.09/43.21 U11(active(x0), x1) 105.09/43.21 U11(x0, active(x1)) 105.09/43.21 s(mark(x0)) 105.09/43.21 s(active(x0)) 105.09/43.21 length(mark(x0)) 105.09/43.21 length(active(x0)) 105.09/43.21 and(mark(x0), x1) 105.09/43.21 and(x0, mark(x1)) 105.09/43.21 and(active(x0), x1) 105.09/43.21 and(x0, active(x1)) 105.09/43.21 isNat(mark(x0)) 105.09/43.21 isNat(active(x0)) 105.09/43.21 isNatList(mark(x0)) 105.09/43.21 isNatList(active(x0)) 105.09/43.21 isNatIList(mark(x0)) 105.09/43.21 isNatIList(active(x0)) 105.09/43.21 105.09/43.21 We have to consider all minimal (P,Q,R)-chains. 105.09/43.21 ---------------------------------------- 105.09/43.21 105.09/43.21 (121) DependencyGraphProof (EQUIVALENT) 105.09/43.21 The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 1 SCC with 1 less node. 105.09/43.21 ---------------------------------------- 105.09/43.21 105.09/43.21 (122) 105.09/43.21 Obligation: 105.09/43.21 Q DP problem: 105.09/43.21 The TRS P consists of the following rules: 105.09/43.21 105.09/43.21 MARK(s(X)) -> MARK(X) 105.09/43.21 MARK(U11(x0, x1)) -> ACTIVE(U11(x0, x1)) 105.09/43.21 ACTIVE(U11(tt, L)) -> MARK(s(length(L))) 105.09/43.21 MARK(U11(cons(x0, x1), y1)) -> ACTIVE(U11(active(cons(mark(x0), x1)), y1)) 105.09/43.21 ACTIVE(length(cons(N, L))) -> MARK(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.21 MARK(U11(and(x0, x1), y1)) -> ACTIVE(U11(active(and(mark(x0), x1)), y1)) 105.09/43.21 MARK(U11(s(x0), y1)) -> ACTIVE(U11(active(s(mark(x0))), y1)) 105.09/43.21 MARK(U11(zeros, y1)) -> ACTIVE(U11(active(zeros), y1)) 105.09/43.21 MARK(U11(U11(x0, x1), y1)) -> ACTIVE(U11(active(U11(mark(x0), x1)), y1)) 105.09/43.21 MARK(U11(length(x0), y1)) -> ACTIVE(U11(active(length(mark(x0))), y1)) 105.09/43.21 MARK(U11(isNatList(x0), y1)) -> ACTIVE(U11(active(isNatList(x0)), y1)) 105.09/43.21 MARK(U11(isNatIList(x0), y1)) -> ACTIVE(U11(active(isNatIList(x0)), y1)) 105.09/43.21 MARK(U11(tt, y1)) -> ACTIVE(U11(active(tt), y1)) 105.09/43.21 MARK(U11(isNat(x0), y1)) -> ACTIVE(U11(active(isNat(x0)), y1)) 105.09/43.21 MARK(U11(nil, y1)) -> ACTIVE(U11(active(nil), y1)) 105.09/43.21 MARK(length(x0)) -> ACTIVE(length(x0)) 105.09/43.21 MARK(length(cons(x0, x1))) -> ACTIVE(length(active(cons(mark(x0), x1)))) 105.09/43.21 MARK(length(s(x0))) -> ACTIVE(length(active(s(mark(x0))))) 105.09/43.21 MARK(length(zeros)) -> ACTIVE(length(active(zeros))) 105.09/43.21 MARK(length(U11(x0, x1))) -> ACTIVE(length(active(U11(mark(x0), x1)))) 105.09/43.21 MARK(length(and(x0, x1))) -> ACTIVE(length(active(and(mark(x0), x1)))) 105.09/43.21 MARK(length(length(x0))) -> ACTIVE(length(active(length(mark(x0))))) 105.09/43.21 MARK(length(isNatList(x0))) -> ACTIVE(length(active(isNatList(x0)))) 105.09/43.21 MARK(length(isNatIList(x0))) -> ACTIVE(length(active(isNatIList(x0)))) 105.09/43.21 MARK(length(isNat(x0))) -> ACTIVE(length(active(isNat(x0)))) 105.09/43.21 105.09/43.21 The TRS R consists of the following rules: 105.09/43.21 105.09/43.21 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 105.09/43.21 active(zeros) -> mark(cons(0, zeros)) 105.09/43.21 active(U11(tt, L)) -> mark(s(length(L))) 105.09/43.21 mark(s(X)) -> active(s(mark(X))) 105.09/43.21 active(and(tt, X)) -> mark(X) 105.09/43.21 mark(zeros) -> active(zeros) 105.09/43.21 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 105.09/43.21 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 105.09/43.21 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 105.09/43.21 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 105.09/43.21 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.21 mark(length(X)) -> active(length(mark(X))) 105.09/43.21 mark(isNatList(X)) -> active(isNatList(X)) 105.09/43.21 mark(isNatIList(X)) -> active(isNatIList(X)) 105.09/43.21 mark(0) -> active(0) 105.09/43.21 mark(tt) -> active(tt) 105.09/43.21 active(isNat(s(V1))) -> mark(isNat(V1)) 105.09/43.21 mark(isNat(X)) -> active(isNat(X)) 105.09/43.21 mark(nil) -> active(nil) 105.09/43.21 and(X1, mark(X2)) -> and(X1, X2) 105.09/43.21 and(mark(X1), X2) -> and(X1, X2) 105.09/43.21 and(active(X1), X2) -> and(X1, X2) 105.09/43.21 and(X1, active(X2)) -> and(X1, X2) 105.09/43.21 active(isNat(0)) -> mark(tt) 105.09/43.21 cons(X1, mark(X2)) -> cons(X1, X2) 105.09/43.21 cons(mark(X1), X2) -> cons(X1, X2) 105.09/43.21 cons(active(X1), X2) -> cons(X1, X2) 105.09/43.21 cons(X1, active(X2)) -> cons(X1, X2) 105.09/43.21 s(active(X)) -> s(X) 105.09/43.21 s(mark(X)) -> s(X) 105.09/43.21 U11(X1, mark(X2)) -> U11(X1, X2) 105.09/43.21 U11(mark(X1), X2) -> U11(X1, X2) 105.09/43.21 U11(active(X1), X2) -> U11(X1, X2) 105.09/43.21 U11(X1, active(X2)) -> U11(X1, X2) 105.09/43.21 length(active(X)) -> length(X) 105.09/43.21 length(mark(X)) -> length(X) 105.09/43.21 105.09/43.21 The set Q consists of the following terms: 105.09/43.21 105.09/43.21 active(zeros) 105.09/43.21 active(U11(tt, x0)) 105.09/43.21 active(and(tt, x0)) 105.09/43.21 active(isNat(0)) 105.09/43.21 active(isNat(length(x0))) 105.09/43.21 active(isNat(s(x0))) 105.09/43.21 active(isNatIList(x0)) 105.09/43.21 active(isNatList(nil)) 105.09/43.21 active(isNatList(cons(x0, x1))) 105.09/43.21 active(length(nil)) 105.09/43.21 active(length(cons(x0, x1))) 105.09/43.21 mark(zeros) 105.09/43.21 mark(cons(x0, x1)) 105.09/43.21 mark(0) 105.09/43.21 mark(U11(x0, x1)) 105.09/43.21 mark(tt) 105.09/43.21 mark(s(x0)) 105.09/43.21 mark(length(x0)) 105.09/43.21 mark(and(x0, x1)) 105.09/43.21 mark(isNat(x0)) 105.09/43.21 mark(isNatList(x0)) 105.09/43.21 mark(isNatIList(x0)) 105.09/43.21 mark(nil) 105.09/43.21 cons(mark(x0), x1) 105.09/43.21 cons(x0, mark(x1)) 105.09/43.21 cons(active(x0), x1) 105.09/43.21 cons(x0, active(x1)) 105.09/43.21 U11(mark(x0), x1) 105.09/43.21 U11(x0, mark(x1)) 105.09/43.21 U11(active(x0), x1) 105.09/43.21 U11(x0, active(x1)) 105.09/43.21 s(mark(x0)) 105.09/43.21 s(active(x0)) 105.09/43.21 length(mark(x0)) 105.09/43.21 length(active(x0)) 105.09/43.21 and(mark(x0), x1) 105.09/43.21 and(x0, mark(x1)) 105.09/43.21 and(active(x0), x1) 105.09/43.21 and(x0, active(x1)) 105.09/43.21 isNat(mark(x0)) 105.09/43.21 isNat(active(x0)) 105.09/43.21 isNatList(mark(x0)) 105.09/43.21 isNatList(active(x0)) 105.09/43.21 isNatIList(mark(x0)) 105.09/43.21 isNatIList(active(x0)) 105.09/43.21 105.09/43.21 We have to consider all minimal (P,Q,R)-chains. 105.09/43.21 ---------------------------------------- 105.09/43.21 105.09/43.21 (123) TransformationProof (EQUIVALENT) 105.09/43.21 By narrowing [LPAR04] the rule MARK(U11(nil, y1)) -> ACTIVE(U11(active(nil), y1)) at position [0] we obtained the following new rules [LPAR04]: 105.09/43.21 105.09/43.21 (MARK(U11(nil, x1)) -> ACTIVE(U11(nil, x1)),MARK(U11(nil, x1)) -> ACTIVE(U11(nil, x1))) 105.09/43.21 105.09/43.21 105.09/43.21 ---------------------------------------- 105.09/43.21 105.09/43.21 (124) 105.09/43.21 Obligation: 105.09/43.21 Q DP problem: 105.09/43.21 The TRS P consists of the following rules: 105.09/43.21 105.09/43.21 MARK(s(X)) -> MARK(X) 105.09/43.21 MARK(U11(x0, x1)) -> ACTIVE(U11(x0, x1)) 105.09/43.21 ACTIVE(U11(tt, L)) -> MARK(s(length(L))) 105.09/43.21 MARK(U11(cons(x0, x1), y1)) -> ACTIVE(U11(active(cons(mark(x0), x1)), y1)) 105.09/43.21 ACTIVE(length(cons(N, L))) -> MARK(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.21 MARK(U11(and(x0, x1), y1)) -> ACTIVE(U11(active(and(mark(x0), x1)), y1)) 105.09/43.21 MARK(U11(s(x0), y1)) -> ACTIVE(U11(active(s(mark(x0))), y1)) 105.09/43.21 MARK(U11(zeros, y1)) -> ACTIVE(U11(active(zeros), y1)) 105.09/43.21 MARK(U11(U11(x0, x1), y1)) -> ACTIVE(U11(active(U11(mark(x0), x1)), y1)) 105.09/43.21 MARK(U11(length(x0), y1)) -> ACTIVE(U11(active(length(mark(x0))), y1)) 105.09/43.21 MARK(U11(isNatList(x0), y1)) -> ACTIVE(U11(active(isNatList(x0)), y1)) 105.09/43.21 MARK(U11(isNatIList(x0), y1)) -> ACTIVE(U11(active(isNatIList(x0)), y1)) 105.09/43.21 MARK(U11(tt, y1)) -> ACTIVE(U11(active(tt), y1)) 105.09/43.21 MARK(U11(isNat(x0), y1)) -> ACTIVE(U11(active(isNat(x0)), y1)) 105.09/43.21 MARK(length(x0)) -> ACTIVE(length(x0)) 105.09/43.21 MARK(length(cons(x0, x1))) -> ACTIVE(length(active(cons(mark(x0), x1)))) 105.09/43.21 MARK(length(s(x0))) -> ACTIVE(length(active(s(mark(x0))))) 105.09/43.21 MARK(length(zeros)) -> ACTIVE(length(active(zeros))) 105.09/43.21 MARK(length(U11(x0, x1))) -> ACTIVE(length(active(U11(mark(x0), x1)))) 105.09/43.21 MARK(length(and(x0, x1))) -> ACTIVE(length(active(and(mark(x0), x1)))) 105.09/43.21 MARK(length(length(x0))) -> ACTIVE(length(active(length(mark(x0))))) 105.09/43.21 MARK(length(isNatList(x0))) -> ACTIVE(length(active(isNatList(x0)))) 105.09/43.21 MARK(length(isNatIList(x0))) -> ACTIVE(length(active(isNatIList(x0)))) 105.09/43.21 MARK(length(isNat(x0))) -> ACTIVE(length(active(isNat(x0)))) 105.09/43.21 MARK(U11(nil, x1)) -> ACTIVE(U11(nil, x1)) 105.09/43.21 105.09/43.21 The TRS R consists of the following rules: 105.09/43.21 105.09/43.21 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 105.09/43.21 active(zeros) -> mark(cons(0, zeros)) 105.09/43.21 active(U11(tt, L)) -> mark(s(length(L))) 105.09/43.21 mark(s(X)) -> active(s(mark(X))) 105.09/43.21 active(and(tt, X)) -> mark(X) 105.09/43.21 mark(zeros) -> active(zeros) 105.09/43.21 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 105.09/43.21 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 105.09/43.21 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 105.09/43.21 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 105.09/43.21 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.21 mark(length(X)) -> active(length(mark(X))) 105.09/43.21 mark(isNatList(X)) -> active(isNatList(X)) 105.09/43.21 mark(isNatIList(X)) -> active(isNatIList(X)) 105.09/43.21 mark(0) -> active(0) 105.09/43.21 mark(tt) -> active(tt) 105.09/43.21 active(isNat(s(V1))) -> mark(isNat(V1)) 105.09/43.21 mark(isNat(X)) -> active(isNat(X)) 105.09/43.21 mark(nil) -> active(nil) 105.09/43.21 and(X1, mark(X2)) -> and(X1, X2) 105.09/43.21 and(mark(X1), X2) -> and(X1, X2) 105.09/43.21 and(active(X1), X2) -> and(X1, X2) 105.09/43.21 and(X1, active(X2)) -> and(X1, X2) 105.09/43.21 active(isNat(0)) -> mark(tt) 105.09/43.21 cons(X1, mark(X2)) -> cons(X1, X2) 105.09/43.21 cons(mark(X1), X2) -> cons(X1, X2) 105.09/43.21 cons(active(X1), X2) -> cons(X1, X2) 105.09/43.21 cons(X1, active(X2)) -> cons(X1, X2) 105.09/43.21 s(active(X)) -> s(X) 105.09/43.21 s(mark(X)) -> s(X) 105.09/43.21 U11(X1, mark(X2)) -> U11(X1, X2) 105.09/43.21 U11(mark(X1), X2) -> U11(X1, X2) 105.09/43.21 U11(active(X1), X2) -> U11(X1, X2) 105.09/43.21 U11(X1, active(X2)) -> U11(X1, X2) 105.09/43.21 length(active(X)) -> length(X) 105.09/43.21 length(mark(X)) -> length(X) 105.09/43.21 105.09/43.21 The set Q consists of the following terms: 105.09/43.21 105.09/43.21 active(zeros) 105.09/43.21 active(U11(tt, x0)) 105.09/43.21 active(and(tt, x0)) 105.09/43.21 active(isNat(0)) 105.09/43.21 active(isNat(length(x0))) 105.09/43.21 active(isNat(s(x0))) 105.09/43.21 active(isNatIList(x0)) 105.09/43.21 active(isNatList(nil)) 105.09/43.21 active(isNatList(cons(x0, x1))) 105.09/43.21 active(length(nil)) 105.09/43.21 active(length(cons(x0, x1))) 105.09/43.21 mark(zeros) 105.09/43.21 mark(cons(x0, x1)) 105.09/43.21 mark(0) 105.09/43.21 mark(U11(x0, x1)) 105.09/43.21 mark(tt) 105.09/43.21 mark(s(x0)) 105.09/43.21 mark(length(x0)) 105.09/43.21 mark(and(x0, x1)) 105.09/43.21 mark(isNat(x0)) 105.09/43.21 mark(isNatList(x0)) 105.09/43.21 mark(isNatIList(x0)) 105.09/43.21 mark(nil) 105.09/43.21 cons(mark(x0), x1) 105.09/43.21 cons(x0, mark(x1)) 105.09/43.21 cons(active(x0), x1) 105.09/43.21 cons(x0, active(x1)) 105.09/43.21 U11(mark(x0), x1) 105.09/43.21 U11(x0, mark(x1)) 105.09/43.21 U11(active(x0), x1) 105.09/43.21 U11(x0, active(x1)) 105.09/43.21 s(mark(x0)) 105.09/43.21 s(active(x0)) 105.09/43.21 length(mark(x0)) 105.09/43.21 length(active(x0)) 105.09/43.21 and(mark(x0), x1) 105.09/43.21 and(x0, mark(x1)) 105.09/43.21 and(active(x0), x1) 105.09/43.21 and(x0, active(x1)) 105.09/43.21 isNat(mark(x0)) 105.09/43.21 isNat(active(x0)) 105.09/43.21 isNatList(mark(x0)) 105.09/43.21 isNatList(active(x0)) 105.09/43.21 isNatIList(mark(x0)) 105.09/43.21 isNatIList(active(x0)) 105.09/43.21 105.09/43.21 We have to consider all minimal (P,Q,R)-chains. 105.09/43.21 ---------------------------------------- 105.09/43.21 105.09/43.21 (125) DependencyGraphProof (EQUIVALENT) 105.09/43.21 The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 1 SCC with 1 less node. 105.09/43.21 ---------------------------------------- 105.09/43.21 105.09/43.21 (126) 105.09/43.21 Obligation: 105.09/43.21 Q DP problem: 105.09/43.21 The TRS P consists of the following rules: 105.09/43.21 105.09/43.21 MARK(s(X)) -> MARK(X) 105.09/43.21 MARK(U11(x0, x1)) -> ACTIVE(U11(x0, x1)) 105.09/43.21 ACTIVE(U11(tt, L)) -> MARK(s(length(L))) 105.09/43.21 MARK(U11(cons(x0, x1), y1)) -> ACTIVE(U11(active(cons(mark(x0), x1)), y1)) 105.09/43.21 ACTIVE(length(cons(N, L))) -> MARK(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.21 MARK(U11(and(x0, x1), y1)) -> ACTIVE(U11(active(and(mark(x0), x1)), y1)) 105.09/43.21 MARK(U11(s(x0), y1)) -> ACTIVE(U11(active(s(mark(x0))), y1)) 105.09/43.21 MARK(U11(zeros, y1)) -> ACTIVE(U11(active(zeros), y1)) 105.09/43.21 MARK(U11(U11(x0, x1), y1)) -> ACTIVE(U11(active(U11(mark(x0), x1)), y1)) 105.09/43.21 MARK(U11(length(x0), y1)) -> ACTIVE(U11(active(length(mark(x0))), y1)) 105.09/43.21 MARK(U11(isNatList(x0), y1)) -> ACTIVE(U11(active(isNatList(x0)), y1)) 105.09/43.21 MARK(U11(isNatIList(x0), y1)) -> ACTIVE(U11(active(isNatIList(x0)), y1)) 105.09/43.21 MARK(U11(tt, y1)) -> ACTIVE(U11(active(tt), y1)) 105.09/43.21 MARK(U11(isNat(x0), y1)) -> ACTIVE(U11(active(isNat(x0)), y1)) 105.09/43.21 MARK(length(x0)) -> ACTIVE(length(x0)) 105.09/43.21 MARK(length(cons(x0, x1))) -> ACTIVE(length(active(cons(mark(x0), x1)))) 105.09/43.21 MARK(length(s(x0))) -> ACTIVE(length(active(s(mark(x0))))) 105.09/43.21 MARK(length(zeros)) -> ACTIVE(length(active(zeros))) 105.09/43.21 MARK(length(U11(x0, x1))) -> ACTIVE(length(active(U11(mark(x0), x1)))) 105.09/43.21 MARK(length(and(x0, x1))) -> ACTIVE(length(active(and(mark(x0), x1)))) 105.09/43.21 MARK(length(length(x0))) -> ACTIVE(length(active(length(mark(x0))))) 105.09/43.21 MARK(length(isNatList(x0))) -> ACTIVE(length(active(isNatList(x0)))) 105.09/43.21 MARK(length(isNatIList(x0))) -> ACTIVE(length(active(isNatIList(x0)))) 105.09/43.21 MARK(length(isNat(x0))) -> ACTIVE(length(active(isNat(x0)))) 105.09/43.21 105.09/43.21 The TRS R consists of the following rules: 105.09/43.21 105.09/43.21 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 105.09/43.21 active(zeros) -> mark(cons(0, zeros)) 105.09/43.21 active(U11(tt, L)) -> mark(s(length(L))) 105.09/43.21 mark(s(X)) -> active(s(mark(X))) 105.09/43.21 active(and(tt, X)) -> mark(X) 105.09/43.21 mark(zeros) -> active(zeros) 105.09/43.21 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 105.09/43.21 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 105.09/43.21 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 105.09/43.21 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 105.09/43.21 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.21 mark(length(X)) -> active(length(mark(X))) 105.09/43.21 mark(isNatList(X)) -> active(isNatList(X)) 105.09/43.21 mark(isNatIList(X)) -> active(isNatIList(X)) 105.09/43.21 mark(0) -> active(0) 105.09/43.21 mark(tt) -> active(tt) 105.09/43.21 active(isNat(s(V1))) -> mark(isNat(V1)) 105.09/43.21 mark(isNat(X)) -> active(isNat(X)) 105.09/43.21 mark(nil) -> active(nil) 105.09/43.21 and(X1, mark(X2)) -> and(X1, X2) 105.09/43.21 and(mark(X1), X2) -> and(X1, X2) 105.09/43.21 and(active(X1), X2) -> and(X1, X2) 105.09/43.21 and(X1, active(X2)) -> and(X1, X2) 105.09/43.21 active(isNat(0)) -> mark(tt) 105.09/43.21 cons(X1, mark(X2)) -> cons(X1, X2) 105.09/43.21 cons(mark(X1), X2) -> cons(X1, X2) 105.09/43.21 cons(active(X1), X2) -> cons(X1, X2) 105.09/43.21 cons(X1, active(X2)) -> cons(X1, X2) 105.09/43.21 s(active(X)) -> s(X) 105.09/43.21 s(mark(X)) -> s(X) 105.09/43.21 U11(X1, mark(X2)) -> U11(X1, X2) 105.09/43.21 U11(mark(X1), X2) -> U11(X1, X2) 105.09/43.21 U11(active(X1), X2) -> U11(X1, X2) 105.09/43.21 U11(X1, active(X2)) -> U11(X1, X2) 105.09/43.21 length(active(X)) -> length(X) 105.09/43.21 length(mark(X)) -> length(X) 105.09/43.21 105.09/43.21 The set Q consists of the following terms: 105.09/43.21 105.09/43.21 active(zeros) 105.09/43.21 active(U11(tt, x0)) 105.09/43.21 active(and(tt, x0)) 105.09/43.21 active(isNat(0)) 105.09/43.21 active(isNat(length(x0))) 105.09/43.21 active(isNat(s(x0))) 105.09/43.21 active(isNatIList(x0)) 105.09/43.21 active(isNatList(nil)) 105.09/43.21 active(isNatList(cons(x0, x1))) 105.09/43.21 active(length(nil)) 105.09/43.21 active(length(cons(x0, x1))) 105.09/43.21 mark(zeros) 105.09/43.21 mark(cons(x0, x1)) 105.09/43.21 mark(0) 105.09/43.21 mark(U11(x0, x1)) 105.09/43.21 mark(tt) 105.09/43.21 mark(s(x0)) 105.09/43.21 mark(length(x0)) 105.09/43.21 mark(and(x0, x1)) 105.09/43.21 mark(isNat(x0)) 105.09/43.21 mark(isNatList(x0)) 105.09/43.21 mark(isNatIList(x0)) 105.09/43.21 mark(nil) 105.09/43.21 cons(mark(x0), x1) 105.09/43.21 cons(x0, mark(x1)) 105.09/43.21 cons(active(x0), x1) 105.09/43.21 cons(x0, active(x1)) 105.09/43.21 U11(mark(x0), x1) 105.09/43.21 U11(x0, mark(x1)) 105.09/43.21 U11(active(x0), x1) 105.09/43.21 U11(x0, active(x1)) 105.09/43.21 s(mark(x0)) 105.09/43.21 s(active(x0)) 105.09/43.21 length(mark(x0)) 105.09/43.21 length(active(x0)) 105.09/43.21 and(mark(x0), x1) 105.09/43.21 and(x0, mark(x1)) 105.09/43.21 and(active(x0), x1) 105.09/43.21 and(x0, active(x1)) 105.09/43.21 isNat(mark(x0)) 105.09/43.21 isNat(active(x0)) 105.09/43.21 isNatList(mark(x0)) 105.09/43.21 isNatList(active(x0)) 105.09/43.21 isNatIList(mark(x0)) 105.09/43.21 isNatIList(active(x0)) 105.09/43.21 105.09/43.21 We have to consider all minimal (P,Q,R)-chains. 105.09/43.21 ---------------------------------------- 105.09/43.21 105.09/43.21 (127) TransformationProof (EQUIVALENT) 105.09/43.21 By forward instantiating [JAR06] the rule MARK(s(X)) -> MARK(X) we obtained the following new rules [LPAR04]: 105.09/43.21 105.09/43.21 (MARK(s(s(y_0))) -> MARK(s(y_0)),MARK(s(s(y_0))) -> MARK(s(y_0))) 105.09/43.21 (MARK(s(U11(y_0, y_1))) -> MARK(U11(y_0, y_1)),MARK(s(U11(y_0, y_1))) -> MARK(U11(y_0, y_1))) 105.09/43.21 (MARK(s(U11(cons(y_0, y_1), y_2))) -> MARK(U11(cons(y_0, y_1), y_2)),MARK(s(U11(cons(y_0, y_1), y_2))) -> MARK(U11(cons(y_0, y_1), y_2))) 105.09/43.21 (MARK(s(U11(s(y_0), y_1))) -> MARK(U11(s(y_0), y_1)),MARK(s(U11(s(y_0), y_1))) -> MARK(U11(s(y_0), y_1))) 105.09/43.21 (MARK(s(U11(zeros, y_0))) -> MARK(U11(zeros, y_0)),MARK(s(U11(zeros, y_0))) -> MARK(U11(zeros, y_0))) 105.09/43.21 (MARK(s(U11(U11(y_0, y_1), y_2))) -> MARK(U11(U11(y_0, y_1), y_2)),MARK(s(U11(U11(y_0, y_1), y_2))) -> MARK(U11(U11(y_0, y_1), y_2))) 105.09/43.21 (MARK(s(U11(and(y_0, y_1), y_2))) -> MARK(U11(and(y_0, y_1), y_2)),MARK(s(U11(and(y_0, y_1), y_2))) -> MARK(U11(and(y_0, y_1), y_2))) 105.09/43.21 (MARK(s(U11(length(y_0), y_1))) -> MARK(U11(length(y_0), y_1)),MARK(s(U11(length(y_0), y_1))) -> MARK(U11(length(y_0), y_1))) 105.09/43.21 (MARK(s(U11(isNatList(y_0), y_1))) -> MARK(U11(isNatList(y_0), y_1)),MARK(s(U11(isNatList(y_0), y_1))) -> MARK(U11(isNatList(y_0), y_1))) 105.09/43.21 (MARK(s(U11(isNatIList(y_0), y_1))) -> MARK(U11(isNatIList(y_0), y_1)),MARK(s(U11(isNatIList(y_0), y_1))) -> MARK(U11(isNatIList(y_0), y_1))) 105.09/43.21 (MARK(s(U11(tt, y_0))) -> MARK(U11(tt, y_0)),MARK(s(U11(tt, y_0))) -> MARK(U11(tt, y_0))) 105.09/43.21 (MARK(s(U11(isNat(y_0), y_1))) -> MARK(U11(isNat(y_0), y_1)),MARK(s(U11(isNat(y_0), y_1))) -> MARK(U11(isNat(y_0), y_1))) 105.09/43.21 (MARK(s(length(y_0))) -> MARK(length(y_0)),MARK(s(length(y_0))) -> MARK(length(y_0))) 105.09/43.21 (MARK(s(length(cons(y_0, y_1)))) -> MARK(length(cons(y_0, y_1))),MARK(s(length(cons(y_0, y_1)))) -> MARK(length(cons(y_0, y_1)))) 105.09/43.21 (MARK(s(length(s(y_0)))) -> MARK(length(s(y_0))),MARK(s(length(s(y_0)))) -> MARK(length(s(y_0)))) 105.09/43.21 (MARK(s(length(zeros))) -> MARK(length(zeros)),MARK(s(length(zeros))) -> MARK(length(zeros))) 105.09/43.21 (MARK(s(length(U11(y_0, y_1)))) -> MARK(length(U11(y_0, y_1))),MARK(s(length(U11(y_0, y_1)))) -> MARK(length(U11(y_0, y_1)))) 105.09/43.21 (MARK(s(length(and(y_0, y_1)))) -> MARK(length(and(y_0, y_1))),MARK(s(length(and(y_0, y_1)))) -> MARK(length(and(y_0, y_1)))) 105.09/43.21 (MARK(s(length(length(y_0)))) -> MARK(length(length(y_0))),MARK(s(length(length(y_0)))) -> MARK(length(length(y_0)))) 105.09/43.21 (MARK(s(length(isNatList(y_0)))) -> MARK(length(isNatList(y_0))),MARK(s(length(isNatList(y_0)))) -> MARK(length(isNatList(y_0)))) 105.09/43.21 (MARK(s(length(isNatIList(y_0)))) -> MARK(length(isNatIList(y_0))),MARK(s(length(isNatIList(y_0)))) -> MARK(length(isNatIList(y_0)))) 105.09/43.21 (MARK(s(length(isNat(y_0)))) -> MARK(length(isNat(y_0))),MARK(s(length(isNat(y_0)))) -> MARK(length(isNat(y_0)))) 105.09/43.21 105.09/43.21 105.09/43.21 ---------------------------------------- 105.09/43.21 105.09/43.21 (128) 105.09/43.21 Obligation: 105.09/43.21 Q DP problem: 105.09/43.21 The TRS P consists of the following rules: 105.09/43.21 105.09/43.21 MARK(U11(x0, x1)) -> ACTIVE(U11(x0, x1)) 105.09/43.21 ACTIVE(U11(tt, L)) -> MARK(s(length(L))) 105.09/43.21 MARK(U11(cons(x0, x1), y1)) -> ACTIVE(U11(active(cons(mark(x0), x1)), y1)) 105.09/43.21 ACTIVE(length(cons(N, L))) -> MARK(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.21 MARK(U11(and(x0, x1), y1)) -> ACTIVE(U11(active(and(mark(x0), x1)), y1)) 105.09/43.21 MARK(U11(s(x0), y1)) -> ACTIVE(U11(active(s(mark(x0))), y1)) 105.09/43.21 MARK(U11(zeros, y1)) -> ACTIVE(U11(active(zeros), y1)) 105.09/43.21 MARK(U11(U11(x0, x1), y1)) -> ACTIVE(U11(active(U11(mark(x0), x1)), y1)) 105.09/43.21 MARK(U11(length(x0), y1)) -> ACTIVE(U11(active(length(mark(x0))), y1)) 105.09/43.21 MARK(U11(isNatList(x0), y1)) -> ACTIVE(U11(active(isNatList(x0)), y1)) 105.09/43.21 MARK(U11(isNatIList(x0), y1)) -> ACTIVE(U11(active(isNatIList(x0)), y1)) 105.09/43.21 MARK(U11(tt, y1)) -> ACTIVE(U11(active(tt), y1)) 105.09/43.21 MARK(U11(isNat(x0), y1)) -> ACTIVE(U11(active(isNat(x0)), y1)) 105.09/43.21 MARK(length(x0)) -> ACTIVE(length(x0)) 105.09/43.21 MARK(length(cons(x0, x1))) -> ACTIVE(length(active(cons(mark(x0), x1)))) 105.09/43.21 MARK(length(s(x0))) -> ACTIVE(length(active(s(mark(x0))))) 105.09/43.21 MARK(length(zeros)) -> ACTIVE(length(active(zeros))) 105.09/43.21 MARK(length(U11(x0, x1))) -> ACTIVE(length(active(U11(mark(x0), x1)))) 105.09/43.21 MARK(length(and(x0, x1))) -> ACTIVE(length(active(and(mark(x0), x1)))) 105.09/43.21 MARK(length(length(x0))) -> ACTIVE(length(active(length(mark(x0))))) 105.09/43.21 MARK(length(isNatList(x0))) -> ACTIVE(length(active(isNatList(x0)))) 105.09/43.21 MARK(length(isNatIList(x0))) -> ACTIVE(length(active(isNatIList(x0)))) 105.09/43.21 MARK(length(isNat(x0))) -> ACTIVE(length(active(isNat(x0)))) 105.09/43.21 MARK(s(s(y_0))) -> MARK(s(y_0)) 105.09/43.21 MARK(s(U11(y_0, y_1))) -> MARK(U11(y_0, y_1)) 105.09/43.21 MARK(s(U11(cons(y_0, y_1), y_2))) -> MARK(U11(cons(y_0, y_1), y_2)) 105.09/43.21 MARK(s(U11(s(y_0), y_1))) -> MARK(U11(s(y_0), y_1)) 105.09/43.21 MARK(s(U11(zeros, y_0))) -> MARK(U11(zeros, y_0)) 105.09/43.21 MARK(s(U11(U11(y_0, y_1), y_2))) -> MARK(U11(U11(y_0, y_1), y_2)) 105.09/43.21 MARK(s(U11(and(y_0, y_1), y_2))) -> MARK(U11(and(y_0, y_1), y_2)) 105.09/43.21 MARK(s(U11(length(y_0), y_1))) -> MARK(U11(length(y_0), y_1)) 105.09/43.21 MARK(s(U11(isNatList(y_0), y_1))) -> MARK(U11(isNatList(y_0), y_1)) 105.09/43.21 MARK(s(U11(isNatIList(y_0), y_1))) -> MARK(U11(isNatIList(y_0), y_1)) 105.09/43.21 MARK(s(U11(tt, y_0))) -> MARK(U11(tt, y_0)) 105.09/43.21 MARK(s(U11(isNat(y_0), y_1))) -> MARK(U11(isNat(y_0), y_1)) 105.09/43.21 MARK(s(length(y_0))) -> MARK(length(y_0)) 105.09/43.21 MARK(s(length(cons(y_0, y_1)))) -> MARK(length(cons(y_0, y_1))) 105.09/43.21 MARK(s(length(s(y_0)))) -> MARK(length(s(y_0))) 105.09/43.21 MARK(s(length(zeros))) -> MARK(length(zeros)) 105.09/43.21 MARK(s(length(U11(y_0, y_1)))) -> MARK(length(U11(y_0, y_1))) 105.09/43.21 MARK(s(length(and(y_0, y_1)))) -> MARK(length(and(y_0, y_1))) 105.09/43.21 MARK(s(length(length(y_0)))) -> MARK(length(length(y_0))) 105.09/43.21 MARK(s(length(isNatList(y_0)))) -> MARK(length(isNatList(y_0))) 105.09/43.21 MARK(s(length(isNatIList(y_0)))) -> MARK(length(isNatIList(y_0))) 105.09/43.21 MARK(s(length(isNat(y_0)))) -> MARK(length(isNat(y_0))) 105.09/43.21 105.09/43.21 The TRS R consists of the following rules: 105.09/43.21 105.09/43.21 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 105.09/43.21 active(zeros) -> mark(cons(0, zeros)) 105.09/43.21 active(U11(tt, L)) -> mark(s(length(L))) 105.09/43.21 mark(s(X)) -> active(s(mark(X))) 105.09/43.21 active(and(tt, X)) -> mark(X) 105.09/43.21 mark(zeros) -> active(zeros) 105.09/43.21 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 105.09/43.21 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 105.09/43.21 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 105.09/43.21 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 105.09/43.21 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.21 mark(length(X)) -> active(length(mark(X))) 105.09/43.21 mark(isNatList(X)) -> active(isNatList(X)) 105.09/43.21 mark(isNatIList(X)) -> active(isNatIList(X)) 105.09/43.21 mark(0) -> active(0) 105.09/43.21 mark(tt) -> active(tt) 105.09/43.21 active(isNat(s(V1))) -> mark(isNat(V1)) 105.09/43.21 mark(isNat(X)) -> active(isNat(X)) 105.09/43.21 mark(nil) -> active(nil) 105.09/43.21 and(X1, mark(X2)) -> and(X1, X2) 105.09/43.21 and(mark(X1), X2) -> and(X1, X2) 105.09/43.21 and(active(X1), X2) -> and(X1, X2) 105.09/43.21 and(X1, active(X2)) -> and(X1, X2) 105.09/43.21 active(isNat(0)) -> mark(tt) 105.09/43.21 cons(X1, mark(X2)) -> cons(X1, X2) 105.09/43.21 cons(mark(X1), X2) -> cons(X1, X2) 105.09/43.21 cons(active(X1), X2) -> cons(X1, X2) 105.09/43.21 cons(X1, active(X2)) -> cons(X1, X2) 105.09/43.21 s(active(X)) -> s(X) 105.09/43.21 s(mark(X)) -> s(X) 105.09/43.21 U11(X1, mark(X2)) -> U11(X1, X2) 105.09/43.21 U11(mark(X1), X2) -> U11(X1, X2) 105.09/43.21 U11(active(X1), X2) -> U11(X1, X2) 105.09/43.21 U11(X1, active(X2)) -> U11(X1, X2) 105.09/43.21 length(active(X)) -> length(X) 105.09/43.21 length(mark(X)) -> length(X) 105.09/43.21 105.09/43.21 The set Q consists of the following terms: 105.09/43.21 105.09/43.21 active(zeros) 105.09/43.21 active(U11(tt, x0)) 105.09/43.21 active(and(tt, x0)) 105.09/43.21 active(isNat(0)) 105.09/43.21 active(isNat(length(x0))) 105.09/43.21 active(isNat(s(x0))) 105.09/43.21 active(isNatIList(x0)) 105.09/43.21 active(isNatList(nil)) 105.09/43.21 active(isNatList(cons(x0, x1))) 105.09/43.21 active(length(nil)) 105.09/43.21 active(length(cons(x0, x1))) 105.09/43.21 mark(zeros) 105.09/43.21 mark(cons(x0, x1)) 105.09/43.21 mark(0) 105.09/43.21 mark(U11(x0, x1)) 105.09/43.21 mark(tt) 105.09/43.21 mark(s(x0)) 105.09/43.21 mark(length(x0)) 105.09/43.21 mark(and(x0, x1)) 105.09/43.21 mark(isNat(x0)) 105.09/43.21 mark(isNatList(x0)) 105.09/43.21 mark(isNatIList(x0)) 105.09/43.21 mark(nil) 105.09/43.21 cons(mark(x0), x1) 105.09/43.21 cons(x0, mark(x1)) 105.09/43.21 cons(active(x0), x1) 105.09/43.21 cons(x0, active(x1)) 105.09/43.21 U11(mark(x0), x1) 105.09/43.21 U11(x0, mark(x1)) 105.09/43.21 U11(active(x0), x1) 105.09/43.21 U11(x0, active(x1)) 105.09/43.21 s(mark(x0)) 105.09/43.21 s(active(x0)) 105.09/43.21 length(mark(x0)) 105.09/43.21 length(active(x0)) 105.09/43.21 and(mark(x0), x1) 105.09/43.21 and(x0, mark(x1)) 105.09/43.21 and(active(x0), x1) 105.09/43.21 and(x0, active(x1)) 105.09/43.21 isNat(mark(x0)) 105.09/43.21 isNat(active(x0)) 105.09/43.21 isNatList(mark(x0)) 105.09/43.21 isNatList(active(x0)) 105.09/43.21 isNatIList(mark(x0)) 105.09/43.21 isNatIList(active(x0)) 105.09/43.21 105.09/43.21 We have to consider all minimal (P,Q,R)-chains. 105.09/43.21 ---------------------------------------- 105.09/43.21 105.09/43.21 (129) DependencyGraphProof (EQUIVALENT) 105.09/43.21 The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 2 SCCs with 20 less nodes. 105.09/43.21 ---------------------------------------- 105.09/43.21 105.09/43.21 (130) 105.09/43.21 Complex Obligation (AND) 105.09/43.21 105.09/43.21 ---------------------------------------- 105.09/43.21 105.09/43.21 (131) 105.09/43.21 Obligation: 105.09/43.21 Q DP problem: 105.09/43.21 The TRS P consists of the following rules: 105.09/43.21 105.09/43.21 ACTIVE(U11(tt, L)) -> MARK(s(length(L))) 105.09/43.21 MARK(s(length(y_0))) -> MARK(length(y_0)) 105.09/43.21 MARK(length(x0)) -> ACTIVE(length(x0)) 105.09/43.21 ACTIVE(length(cons(N, L))) -> MARK(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.21 MARK(U11(x0, x1)) -> ACTIVE(U11(x0, x1)) 105.09/43.21 MARK(U11(and(x0, x1), y1)) -> ACTIVE(U11(active(and(mark(x0), x1)), y1)) 105.09/43.21 MARK(length(cons(x0, x1))) -> ACTIVE(length(active(cons(mark(x0), x1)))) 105.09/43.21 MARK(length(s(x0))) -> ACTIVE(length(active(s(mark(x0))))) 105.09/43.21 MARK(length(zeros)) -> ACTIVE(length(active(zeros))) 105.09/43.21 MARK(length(U11(x0, x1))) -> ACTIVE(length(active(U11(mark(x0), x1)))) 105.09/43.21 MARK(length(and(x0, x1))) -> ACTIVE(length(active(and(mark(x0), x1)))) 105.09/43.21 MARK(length(length(x0))) -> ACTIVE(length(active(length(mark(x0))))) 105.09/43.21 MARK(length(isNatList(x0))) -> ACTIVE(length(active(isNatList(x0)))) 105.09/43.21 MARK(length(isNatIList(x0))) -> ACTIVE(length(active(isNatIList(x0)))) 105.09/43.21 MARK(length(isNat(x0))) -> ACTIVE(length(active(isNat(x0)))) 105.09/43.21 MARK(s(length(cons(y_0, y_1)))) -> MARK(length(cons(y_0, y_1))) 105.09/43.21 MARK(s(length(s(y_0)))) -> MARK(length(s(y_0))) 105.09/43.21 MARK(s(length(zeros))) -> MARK(length(zeros)) 105.09/43.21 MARK(s(length(U11(y_0, y_1)))) -> MARK(length(U11(y_0, y_1))) 105.09/43.21 MARK(s(length(and(y_0, y_1)))) -> MARK(length(and(y_0, y_1))) 105.09/43.21 MARK(s(length(length(y_0)))) -> MARK(length(length(y_0))) 105.09/43.21 MARK(s(length(isNatList(y_0)))) -> MARK(length(isNatList(y_0))) 105.09/43.21 MARK(s(length(isNatIList(y_0)))) -> MARK(length(isNatIList(y_0))) 105.09/43.21 MARK(s(length(isNat(y_0)))) -> MARK(length(isNat(y_0))) 105.09/43.21 105.09/43.21 The TRS R consists of the following rules: 105.09/43.21 105.09/43.21 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 105.09/43.21 active(zeros) -> mark(cons(0, zeros)) 105.09/43.21 active(U11(tt, L)) -> mark(s(length(L))) 105.09/43.21 mark(s(X)) -> active(s(mark(X))) 105.09/43.21 active(and(tt, X)) -> mark(X) 105.09/43.21 mark(zeros) -> active(zeros) 105.09/43.21 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 105.09/43.21 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 105.09/43.21 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 105.09/43.21 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 105.09/43.21 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.21 mark(length(X)) -> active(length(mark(X))) 105.09/43.21 mark(isNatList(X)) -> active(isNatList(X)) 105.09/43.21 mark(isNatIList(X)) -> active(isNatIList(X)) 105.09/43.21 mark(0) -> active(0) 105.09/43.21 mark(tt) -> active(tt) 105.09/43.21 active(isNat(s(V1))) -> mark(isNat(V1)) 105.09/43.21 mark(isNat(X)) -> active(isNat(X)) 105.09/43.21 mark(nil) -> active(nil) 105.09/43.21 and(X1, mark(X2)) -> and(X1, X2) 105.09/43.21 and(mark(X1), X2) -> and(X1, X2) 105.09/43.21 and(active(X1), X2) -> and(X1, X2) 105.09/43.21 and(X1, active(X2)) -> and(X1, X2) 105.09/43.21 active(isNat(0)) -> mark(tt) 105.09/43.21 cons(X1, mark(X2)) -> cons(X1, X2) 105.09/43.21 cons(mark(X1), X2) -> cons(X1, X2) 105.09/43.21 cons(active(X1), X2) -> cons(X1, X2) 105.09/43.21 cons(X1, active(X2)) -> cons(X1, X2) 105.09/43.21 s(active(X)) -> s(X) 105.09/43.21 s(mark(X)) -> s(X) 105.09/43.21 U11(X1, mark(X2)) -> U11(X1, X2) 105.09/43.21 U11(mark(X1), X2) -> U11(X1, X2) 105.09/43.21 U11(active(X1), X2) -> U11(X1, X2) 105.09/43.21 U11(X1, active(X2)) -> U11(X1, X2) 105.09/43.21 length(active(X)) -> length(X) 105.09/43.21 length(mark(X)) -> length(X) 105.09/43.21 105.09/43.21 The set Q consists of the following terms: 105.09/43.21 105.09/43.21 active(zeros) 105.09/43.21 active(U11(tt, x0)) 105.09/43.21 active(and(tt, x0)) 105.09/43.21 active(isNat(0)) 105.09/43.21 active(isNat(length(x0))) 105.09/43.21 active(isNat(s(x0))) 105.09/43.21 active(isNatIList(x0)) 105.09/43.21 active(isNatList(nil)) 105.09/43.21 active(isNatList(cons(x0, x1))) 105.09/43.21 active(length(nil)) 105.09/43.21 active(length(cons(x0, x1))) 105.09/43.21 mark(zeros) 105.09/43.21 mark(cons(x0, x1)) 105.09/43.21 mark(0) 105.09/43.21 mark(U11(x0, x1)) 105.09/43.21 mark(tt) 105.09/43.21 mark(s(x0)) 105.09/43.21 mark(length(x0)) 105.09/43.21 mark(and(x0, x1)) 105.09/43.21 mark(isNat(x0)) 105.09/43.21 mark(isNatList(x0)) 105.09/43.21 mark(isNatIList(x0)) 105.09/43.21 mark(nil) 105.09/43.21 cons(mark(x0), x1) 105.09/43.21 cons(x0, mark(x1)) 105.09/43.21 cons(active(x0), x1) 105.09/43.21 cons(x0, active(x1)) 105.09/43.21 U11(mark(x0), x1) 105.09/43.21 U11(x0, mark(x1)) 105.09/43.21 U11(active(x0), x1) 105.09/43.21 U11(x0, active(x1)) 105.09/43.21 s(mark(x0)) 105.09/43.21 s(active(x0)) 105.09/43.21 length(mark(x0)) 105.09/43.21 length(active(x0)) 105.09/43.21 and(mark(x0), x1) 105.09/43.21 and(x0, mark(x1)) 105.09/43.21 and(active(x0), x1) 105.09/43.21 and(x0, active(x1)) 105.09/43.21 isNat(mark(x0)) 105.09/43.21 isNat(active(x0)) 105.09/43.21 isNatList(mark(x0)) 105.09/43.21 isNatList(active(x0)) 105.09/43.21 isNatIList(mark(x0)) 105.09/43.21 isNatIList(active(x0)) 105.09/43.21 105.09/43.21 We have to consider all minimal (P,Q,R)-chains. 105.09/43.21 ---------------------------------------- 105.09/43.21 105.09/43.21 (132) TransformationProof (EQUIVALENT) 105.09/43.21 By instantiating [LPAR04] the rule MARK(U11(x0, x1)) -> ACTIVE(U11(x0, x1)) we obtained the following new rules [LPAR04]: 105.09/43.21 105.09/43.21 (MARK(U11(and(isNatList(z1), isNat(z0)), z1)) -> ACTIVE(U11(and(isNatList(z1), isNat(z0)), z1)),MARK(U11(and(isNatList(z1), isNat(z0)), z1)) -> ACTIVE(U11(and(isNatList(z1), isNat(z0)), z1))) 105.09/43.21 105.09/43.21 105.09/43.21 ---------------------------------------- 105.09/43.21 105.09/43.21 (133) 105.09/43.21 Obligation: 105.09/43.21 Q DP problem: 105.09/43.21 The TRS P consists of the following rules: 105.09/43.21 105.09/43.21 ACTIVE(U11(tt, L)) -> MARK(s(length(L))) 105.09/43.21 MARK(s(length(y_0))) -> MARK(length(y_0)) 105.09/43.21 MARK(length(x0)) -> ACTIVE(length(x0)) 105.09/43.21 ACTIVE(length(cons(N, L))) -> MARK(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.21 MARK(U11(and(x0, x1), y1)) -> ACTIVE(U11(active(and(mark(x0), x1)), y1)) 105.09/43.21 MARK(length(cons(x0, x1))) -> ACTIVE(length(active(cons(mark(x0), x1)))) 105.09/43.21 MARK(length(s(x0))) -> ACTIVE(length(active(s(mark(x0))))) 105.09/43.21 MARK(length(zeros)) -> ACTIVE(length(active(zeros))) 105.09/43.21 MARK(length(U11(x0, x1))) -> ACTIVE(length(active(U11(mark(x0), x1)))) 105.09/43.21 MARK(length(and(x0, x1))) -> ACTIVE(length(active(and(mark(x0), x1)))) 105.09/43.21 MARK(length(length(x0))) -> ACTIVE(length(active(length(mark(x0))))) 105.09/43.21 MARK(length(isNatList(x0))) -> ACTIVE(length(active(isNatList(x0)))) 105.09/43.21 MARK(length(isNatIList(x0))) -> ACTIVE(length(active(isNatIList(x0)))) 105.09/43.21 MARK(length(isNat(x0))) -> ACTIVE(length(active(isNat(x0)))) 105.09/43.21 MARK(s(length(cons(y_0, y_1)))) -> MARK(length(cons(y_0, y_1))) 105.09/43.21 MARK(s(length(s(y_0)))) -> MARK(length(s(y_0))) 105.09/43.21 MARK(s(length(zeros))) -> MARK(length(zeros)) 105.09/43.21 MARK(s(length(U11(y_0, y_1)))) -> MARK(length(U11(y_0, y_1))) 105.09/43.21 MARK(s(length(and(y_0, y_1)))) -> MARK(length(and(y_0, y_1))) 105.09/43.21 MARK(s(length(length(y_0)))) -> MARK(length(length(y_0))) 105.09/43.21 MARK(s(length(isNatList(y_0)))) -> MARK(length(isNatList(y_0))) 105.09/43.21 MARK(s(length(isNatIList(y_0)))) -> MARK(length(isNatIList(y_0))) 105.09/43.21 MARK(s(length(isNat(y_0)))) -> MARK(length(isNat(y_0))) 105.09/43.21 MARK(U11(and(isNatList(z1), isNat(z0)), z1)) -> ACTIVE(U11(and(isNatList(z1), isNat(z0)), z1)) 105.09/43.21 105.09/43.21 The TRS R consists of the following rules: 105.09/43.21 105.09/43.21 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 105.09/43.21 active(zeros) -> mark(cons(0, zeros)) 105.09/43.21 active(U11(tt, L)) -> mark(s(length(L))) 105.09/43.21 mark(s(X)) -> active(s(mark(X))) 105.09/43.21 active(and(tt, X)) -> mark(X) 105.09/43.21 mark(zeros) -> active(zeros) 105.09/43.21 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 105.09/43.21 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 105.09/43.21 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 105.09/43.21 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 105.09/43.21 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.21 mark(length(X)) -> active(length(mark(X))) 105.09/43.21 mark(isNatList(X)) -> active(isNatList(X)) 105.09/43.21 mark(isNatIList(X)) -> active(isNatIList(X)) 105.09/43.21 mark(0) -> active(0) 105.09/43.21 mark(tt) -> active(tt) 105.09/43.21 active(isNat(s(V1))) -> mark(isNat(V1)) 105.09/43.21 mark(isNat(X)) -> active(isNat(X)) 105.09/43.21 mark(nil) -> active(nil) 105.09/43.21 and(X1, mark(X2)) -> and(X1, X2) 105.09/43.21 and(mark(X1), X2) -> and(X1, X2) 105.09/43.21 and(active(X1), X2) -> and(X1, X2) 105.09/43.21 and(X1, active(X2)) -> and(X1, X2) 105.09/43.21 active(isNat(0)) -> mark(tt) 105.09/43.21 cons(X1, mark(X2)) -> cons(X1, X2) 105.09/43.21 cons(mark(X1), X2) -> cons(X1, X2) 105.09/43.21 cons(active(X1), X2) -> cons(X1, X2) 105.09/43.21 cons(X1, active(X2)) -> cons(X1, X2) 105.09/43.21 s(active(X)) -> s(X) 105.09/43.21 s(mark(X)) -> s(X) 105.09/43.21 U11(X1, mark(X2)) -> U11(X1, X2) 105.09/43.21 U11(mark(X1), X2) -> U11(X1, X2) 105.09/43.21 U11(active(X1), X2) -> U11(X1, X2) 105.09/43.21 U11(X1, active(X2)) -> U11(X1, X2) 105.09/43.21 length(active(X)) -> length(X) 105.09/43.21 length(mark(X)) -> length(X) 105.09/43.21 105.09/43.21 The set Q consists of the following terms: 105.09/43.21 105.09/43.21 active(zeros) 105.09/43.21 active(U11(tt, x0)) 105.09/43.21 active(and(tt, x0)) 105.09/43.21 active(isNat(0)) 105.09/43.21 active(isNat(length(x0))) 105.09/43.21 active(isNat(s(x0))) 105.09/43.21 active(isNatIList(x0)) 105.09/43.21 active(isNatList(nil)) 105.09/43.21 active(isNatList(cons(x0, x1))) 105.09/43.21 active(length(nil)) 105.09/43.21 active(length(cons(x0, x1))) 105.09/43.21 mark(zeros) 105.09/43.21 mark(cons(x0, x1)) 105.09/43.21 mark(0) 105.09/43.21 mark(U11(x0, x1)) 105.09/43.21 mark(tt) 105.09/43.21 mark(s(x0)) 105.09/43.21 mark(length(x0)) 105.09/43.21 mark(and(x0, x1)) 105.09/43.21 mark(isNat(x0)) 105.09/43.21 mark(isNatList(x0)) 105.09/43.21 mark(isNatIList(x0)) 105.09/43.21 mark(nil) 105.09/43.21 cons(mark(x0), x1) 105.09/43.21 cons(x0, mark(x1)) 105.09/43.21 cons(active(x0), x1) 105.09/43.21 cons(x0, active(x1)) 105.09/43.21 U11(mark(x0), x1) 105.09/43.21 U11(x0, mark(x1)) 105.09/43.21 U11(active(x0), x1) 105.09/43.21 U11(x0, active(x1)) 105.09/43.21 s(mark(x0)) 105.09/43.21 s(active(x0)) 105.09/43.21 length(mark(x0)) 105.09/43.21 length(active(x0)) 105.09/43.21 and(mark(x0), x1) 105.09/43.21 and(x0, mark(x1)) 105.09/43.21 and(active(x0), x1) 105.09/43.21 and(x0, active(x1)) 105.09/43.21 isNat(mark(x0)) 105.09/43.21 isNat(active(x0)) 105.09/43.21 isNatList(mark(x0)) 105.09/43.21 isNatList(active(x0)) 105.09/43.21 isNatIList(mark(x0)) 105.09/43.21 isNatIList(active(x0)) 105.09/43.21 105.09/43.21 We have to consider all minimal (P,Q,R)-chains. 105.09/43.21 ---------------------------------------- 105.09/43.21 105.09/43.21 (134) DependencyGraphProof (EQUIVALENT) 105.09/43.21 The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 1 SCC with 1 less node. 105.09/43.21 ---------------------------------------- 105.09/43.21 105.09/43.21 (135) 105.09/43.21 Obligation: 105.09/43.21 Q DP problem: 105.09/43.21 The TRS P consists of the following rules: 105.09/43.21 105.09/43.21 MARK(s(length(y_0))) -> MARK(length(y_0)) 105.09/43.21 MARK(length(x0)) -> ACTIVE(length(x0)) 105.09/43.21 ACTIVE(length(cons(N, L))) -> MARK(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.21 MARK(U11(and(x0, x1), y1)) -> ACTIVE(U11(active(and(mark(x0), x1)), y1)) 105.09/43.21 ACTIVE(U11(tt, L)) -> MARK(s(length(L))) 105.09/43.21 MARK(s(length(cons(y_0, y_1)))) -> MARK(length(cons(y_0, y_1))) 105.09/43.21 MARK(length(cons(x0, x1))) -> ACTIVE(length(active(cons(mark(x0), x1)))) 105.09/43.21 MARK(s(length(s(y_0)))) -> MARK(length(s(y_0))) 105.09/43.21 MARK(length(s(x0))) -> ACTIVE(length(active(s(mark(x0))))) 105.09/43.21 MARK(s(length(zeros))) -> MARK(length(zeros)) 105.09/43.21 MARK(length(zeros)) -> ACTIVE(length(active(zeros))) 105.09/43.21 MARK(s(length(U11(y_0, y_1)))) -> MARK(length(U11(y_0, y_1))) 105.09/43.21 MARK(length(U11(x0, x1))) -> ACTIVE(length(active(U11(mark(x0), x1)))) 105.09/43.21 MARK(s(length(and(y_0, y_1)))) -> MARK(length(and(y_0, y_1))) 105.09/43.21 MARK(length(and(x0, x1))) -> ACTIVE(length(active(and(mark(x0), x1)))) 105.09/43.21 MARK(s(length(length(y_0)))) -> MARK(length(length(y_0))) 105.09/43.21 MARK(length(length(x0))) -> ACTIVE(length(active(length(mark(x0))))) 105.09/43.21 MARK(s(length(isNatList(y_0)))) -> MARK(length(isNatList(y_0))) 105.09/43.21 MARK(length(isNatList(x0))) -> ACTIVE(length(active(isNatList(x0)))) 105.09/43.21 MARK(s(length(isNatIList(y_0)))) -> MARK(length(isNatIList(y_0))) 105.09/43.21 MARK(length(isNatIList(x0))) -> ACTIVE(length(active(isNatIList(x0)))) 105.09/43.21 MARK(s(length(isNat(y_0)))) -> MARK(length(isNat(y_0))) 105.09/43.21 MARK(length(isNat(x0))) -> ACTIVE(length(active(isNat(x0)))) 105.09/43.21 105.09/43.21 The TRS R consists of the following rules: 105.09/43.21 105.09/43.21 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 105.09/43.21 active(zeros) -> mark(cons(0, zeros)) 105.09/43.21 active(U11(tt, L)) -> mark(s(length(L))) 105.09/43.21 mark(s(X)) -> active(s(mark(X))) 105.09/43.21 active(and(tt, X)) -> mark(X) 105.09/43.21 mark(zeros) -> active(zeros) 105.09/43.21 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 105.09/43.21 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 105.09/43.21 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 105.09/43.21 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 105.09/43.21 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.21 mark(length(X)) -> active(length(mark(X))) 105.09/43.21 mark(isNatList(X)) -> active(isNatList(X)) 105.09/43.21 mark(isNatIList(X)) -> active(isNatIList(X)) 105.09/43.21 mark(0) -> active(0) 105.09/43.21 mark(tt) -> active(tt) 105.09/43.21 active(isNat(s(V1))) -> mark(isNat(V1)) 105.09/43.21 mark(isNat(X)) -> active(isNat(X)) 105.09/43.21 mark(nil) -> active(nil) 105.09/43.21 and(X1, mark(X2)) -> and(X1, X2) 105.09/43.21 and(mark(X1), X2) -> and(X1, X2) 105.09/43.21 and(active(X1), X2) -> and(X1, X2) 105.09/43.21 and(X1, active(X2)) -> and(X1, X2) 105.09/43.21 active(isNat(0)) -> mark(tt) 105.09/43.21 cons(X1, mark(X2)) -> cons(X1, X2) 105.09/43.21 cons(mark(X1), X2) -> cons(X1, X2) 105.09/43.21 cons(active(X1), X2) -> cons(X1, X2) 105.09/43.21 cons(X1, active(X2)) -> cons(X1, X2) 105.09/43.21 s(active(X)) -> s(X) 105.09/43.21 s(mark(X)) -> s(X) 105.09/43.21 U11(X1, mark(X2)) -> U11(X1, X2) 105.09/43.21 U11(mark(X1), X2) -> U11(X1, X2) 105.09/43.21 U11(active(X1), X2) -> U11(X1, X2) 105.09/43.21 U11(X1, active(X2)) -> U11(X1, X2) 105.09/43.21 length(active(X)) -> length(X) 105.09/43.21 length(mark(X)) -> length(X) 105.09/43.21 105.09/43.21 The set Q consists of the following terms: 105.09/43.21 105.09/43.21 active(zeros) 105.09/43.21 active(U11(tt, x0)) 105.09/43.21 active(and(tt, x0)) 105.09/43.21 active(isNat(0)) 105.09/43.21 active(isNat(length(x0))) 105.09/43.21 active(isNat(s(x0))) 105.09/43.21 active(isNatIList(x0)) 105.09/43.21 active(isNatList(nil)) 105.09/43.21 active(isNatList(cons(x0, x1))) 105.09/43.21 active(length(nil)) 105.09/43.21 active(length(cons(x0, x1))) 105.09/43.21 mark(zeros) 105.09/43.21 mark(cons(x0, x1)) 105.09/43.21 mark(0) 105.09/43.21 mark(U11(x0, x1)) 105.09/43.21 mark(tt) 105.09/43.21 mark(s(x0)) 105.09/43.21 mark(length(x0)) 105.09/43.21 mark(and(x0, x1)) 105.09/43.21 mark(isNat(x0)) 105.09/43.21 mark(isNatList(x0)) 105.09/43.21 mark(isNatIList(x0)) 105.09/43.21 mark(nil) 105.09/43.21 cons(mark(x0), x1) 105.09/43.21 cons(x0, mark(x1)) 105.09/43.21 cons(active(x0), x1) 105.09/43.21 cons(x0, active(x1)) 105.09/43.21 U11(mark(x0), x1) 105.09/43.21 U11(x0, mark(x1)) 105.09/43.21 U11(active(x0), x1) 105.09/43.21 U11(x0, active(x1)) 105.09/43.21 s(mark(x0)) 105.09/43.21 s(active(x0)) 105.09/43.21 length(mark(x0)) 105.09/43.21 length(active(x0)) 105.09/43.21 and(mark(x0), x1) 105.09/43.21 and(x0, mark(x1)) 105.09/43.21 and(active(x0), x1) 105.09/43.21 and(x0, active(x1)) 105.09/43.21 isNat(mark(x0)) 105.09/43.21 isNat(active(x0)) 105.09/43.21 isNatList(mark(x0)) 105.09/43.21 isNatList(active(x0)) 105.09/43.21 isNatIList(mark(x0)) 105.09/43.21 isNatIList(active(x0)) 105.09/43.21 105.09/43.21 We have to consider all minimal (P,Q,R)-chains. 105.09/43.21 ---------------------------------------- 105.09/43.21 105.09/43.21 (136) TransformationProof (EQUIVALENT) 105.09/43.21 By instantiating [LPAR04] the rule MARK(U11(and(x0, x1), y1)) -> ACTIVE(U11(active(and(mark(x0), x1)), y1)) we obtained the following new rules [LPAR04]: 105.09/43.21 105.09/43.21 (MARK(U11(and(isNatList(z1), isNat(z0)), z1)) -> ACTIVE(U11(active(and(mark(isNatList(z1)), isNat(z0))), z1)),MARK(U11(and(isNatList(z1), isNat(z0)), z1)) -> ACTIVE(U11(active(and(mark(isNatList(z1)), isNat(z0))), z1))) 105.09/43.21 105.09/43.21 105.09/43.21 ---------------------------------------- 105.09/43.21 105.09/43.21 (137) 105.09/43.21 Obligation: 105.09/43.21 Q DP problem: 105.09/43.21 The TRS P consists of the following rules: 105.09/43.21 105.09/43.21 MARK(s(length(y_0))) -> MARK(length(y_0)) 105.09/43.21 MARK(length(x0)) -> ACTIVE(length(x0)) 105.09/43.21 ACTIVE(length(cons(N, L))) -> MARK(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.21 ACTIVE(U11(tt, L)) -> MARK(s(length(L))) 105.09/43.21 MARK(s(length(cons(y_0, y_1)))) -> MARK(length(cons(y_0, y_1))) 105.09/43.21 MARK(length(cons(x0, x1))) -> ACTIVE(length(active(cons(mark(x0), x1)))) 105.09/43.21 MARK(s(length(s(y_0)))) -> MARK(length(s(y_0))) 105.09/43.21 MARK(length(s(x0))) -> ACTIVE(length(active(s(mark(x0))))) 105.09/43.21 MARK(s(length(zeros))) -> MARK(length(zeros)) 105.09/43.21 MARK(length(zeros)) -> ACTIVE(length(active(zeros))) 105.09/43.21 MARK(s(length(U11(y_0, y_1)))) -> MARK(length(U11(y_0, y_1))) 105.09/43.21 MARK(length(U11(x0, x1))) -> ACTIVE(length(active(U11(mark(x0), x1)))) 105.09/43.21 MARK(s(length(and(y_0, y_1)))) -> MARK(length(and(y_0, y_1))) 105.09/43.21 MARK(length(and(x0, x1))) -> ACTIVE(length(active(and(mark(x0), x1)))) 105.09/43.21 MARK(s(length(length(y_0)))) -> MARK(length(length(y_0))) 105.09/43.21 MARK(length(length(x0))) -> ACTIVE(length(active(length(mark(x0))))) 105.09/43.21 MARK(s(length(isNatList(y_0)))) -> MARK(length(isNatList(y_0))) 105.09/43.21 MARK(length(isNatList(x0))) -> ACTIVE(length(active(isNatList(x0)))) 105.09/43.21 MARK(s(length(isNatIList(y_0)))) -> MARK(length(isNatIList(y_0))) 105.09/43.21 MARK(length(isNatIList(x0))) -> ACTIVE(length(active(isNatIList(x0)))) 105.09/43.21 MARK(s(length(isNat(y_0)))) -> MARK(length(isNat(y_0))) 105.09/43.21 MARK(length(isNat(x0))) -> ACTIVE(length(active(isNat(x0)))) 105.09/43.21 MARK(U11(and(isNatList(z1), isNat(z0)), z1)) -> ACTIVE(U11(active(and(mark(isNatList(z1)), isNat(z0))), z1)) 105.09/43.21 105.09/43.21 The TRS R consists of the following rules: 105.09/43.21 105.09/43.21 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 105.09/43.21 active(zeros) -> mark(cons(0, zeros)) 105.09/43.21 active(U11(tt, L)) -> mark(s(length(L))) 105.09/43.21 mark(s(X)) -> active(s(mark(X))) 105.09/43.21 active(and(tt, X)) -> mark(X) 105.09/43.21 mark(zeros) -> active(zeros) 105.09/43.21 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 105.09/43.21 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 105.09/43.21 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 105.09/43.21 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 105.09/43.21 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.21 mark(length(X)) -> active(length(mark(X))) 105.09/43.21 mark(isNatList(X)) -> active(isNatList(X)) 105.09/43.21 mark(isNatIList(X)) -> active(isNatIList(X)) 105.09/43.21 mark(0) -> active(0) 105.09/43.21 mark(tt) -> active(tt) 105.09/43.21 active(isNat(s(V1))) -> mark(isNat(V1)) 105.09/43.21 mark(isNat(X)) -> active(isNat(X)) 105.09/43.21 mark(nil) -> active(nil) 105.09/43.21 and(X1, mark(X2)) -> and(X1, X2) 105.09/43.21 and(mark(X1), X2) -> and(X1, X2) 105.09/43.21 and(active(X1), X2) -> and(X1, X2) 105.09/43.21 and(X1, active(X2)) -> and(X1, X2) 105.09/43.21 active(isNat(0)) -> mark(tt) 105.09/43.21 cons(X1, mark(X2)) -> cons(X1, X2) 105.09/43.21 cons(mark(X1), X2) -> cons(X1, X2) 105.09/43.21 cons(active(X1), X2) -> cons(X1, X2) 105.09/43.21 cons(X1, active(X2)) -> cons(X1, X2) 105.09/43.21 s(active(X)) -> s(X) 105.09/43.21 s(mark(X)) -> s(X) 105.09/43.21 U11(X1, mark(X2)) -> U11(X1, X2) 105.09/43.21 U11(mark(X1), X2) -> U11(X1, X2) 105.09/43.21 U11(active(X1), X2) -> U11(X1, X2) 105.09/43.21 U11(X1, active(X2)) -> U11(X1, X2) 105.09/43.21 length(active(X)) -> length(X) 105.09/43.21 length(mark(X)) -> length(X) 105.09/43.21 105.09/43.21 The set Q consists of the following terms: 105.09/43.21 105.09/43.21 active(zeros) 105.09/43.21 active(U11(tt, x0)) 105.09/43.21 active(and(tt, x0)) 105.09/43.21 active(isNat(0)) 105.09/43.21 active(isNat(length(x0))) 105.09/43.21 active(isNat(s(x0))) 105.09/43.21 active(isNatIList(x0)) 105.09/43.21 active(isNatList(nil)) 105.09/43.21 active(isNatList(cons(x0, x1))) 105.09/43.21 active(length(nil)) 105.09/43.21 active(length(cons(x0, x1))) 105.09/43.21 mark(zeros) 105.09/43.21 mark(cons(x0, x1)) 105.09/43.21 mark(0) 105.09/43.21 mark(U11(x0, x1)) 105.09/43.21 mark(tt) 105.09/43.21 mark(s(x0)) 105.09/43.21 mark(length(x0)) 105.09/43.21 mark(and(x0, x1)) 105.09/43.21 mark(isNat(x0)) 105.09/43.21 mark(isNatList(x0)) 105.09/43.21 mark(isNatIList(x0)) 105.09/43.21 mark(nil) 105.09/43.21 cons(mark(x0), x1) 105.09/43.21 cons(x0, mark(x1)) 105.09/43.21 cons(active(x0), x1) 105.09/43.21 cons(x0, active(x1)) 105.09/43.21 U11(mark(x0), x1) 105.09/43.21 U11(x0, mark(x1)) 105.09/43.21 U11(active(x0), x1) 105.09/43.21 U11(x0, active(x1)) 105.09/43.21 s(mark(x0)) 105.09/43.21 s(active(x0)) 105.09/43.21 length(mark(x0)) 105.09/43.21 length(active(x0)) 105.09/43.21 and(mark(x0), x1) 105.09/43.21 and(x0, mark(x1)) 105.09/43.21 and(active(x0), x1) 105.09/43.21 and(x0, active(x1)) 105.09/43.21 isNat(mark(x0)) 105.09/43.21 isNat(active(x0)) 105.09/43.21 isNatList(mark(x0)) 105.09/43.21 isNatList(active(x0)) 105.09/43.21 isNatIList(mark(x0)) 105.09/43.21 isNatIList(active(x0)) 105.09/43.21 105.09/43.21 We have to consider all minimal (P,Q,R)-chains. 105.09/43.21 ---------------------------------------- 105.09/43.21 105.09/43.21 (138) TransformationProof (EQUIVALENT) 105.09/43.21 By forward instantiating [JAR06] the rule MARK(length(x0)) -> ACTIVE(length(x0)) we obtained the following new rules [LPAR04]: 105.09/43.21 105.09/43.21 (MARK(length(cons(y_0, y_1))) -> ACTIVE(length(cons(y_0, y_1))),MARK(length(cons(y_0, y_1))) -> ACTIVE(length(cons(y_0, y_1)))) 105.09/43.21 105.09/43.21 105.09/43.21 ---------------------------------------- 105.09/43.21 105.09/43.21 (139) 105.09/43.21 Obligation: 105.09/43.21 Q DP problem: 105.09/43.21 The TRS P consists of the following rules: 105.09/43.21 105.09/43.21 MARK(s(length(y_0))) -> MARK(length(y_0)) 105.09/43.21 ACTIVE(length(cons(N, L))) -> MARK(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.21 ACTIVE(U11(tt, L)) -> MARK(s(length(L))) 105.09/43.21 MARK(s(length(cons(y_0, y_1)))) -> MARK(length(cons(y_0, y_1))) 105.09/43.21 MARK(length(cons(x0, x1))) -> ACTIVE(length(active(cons(mark(x0), x1)))) 105.09/43.21 MARK(s(length(s(y_0)))) -> MARK(length(s(y_0))) 105.09/43.21 MARK(length(s(x0))) -> ACTIVE(length(active(s(mark(x0))))) 105.09/43.21 MARK(s(length(zeros))) -> MARK(length(zeros)) 105.09/43.21 MARK(length(zeros)) -> ACTIVE(length(active(zeros))) 105.09/43.21 MARK(s(length(U11(y_0, y_1)))) -> MARK(length(U11(y_0, y_1))) 105.09/43.21 MARK(length(U11(x0, x1))) -> ACTIVE(length(active(U11(mark(x0), x1)))) 105.09/43.21 MARK(s(length(and(y_0, y_1)))) -> MARK(length(and(y_0, y_1))) 105.09/43.21 MARK(length(and(x0, x1))) -> ACTIVE(length(active(and(mark(x0), x1)))) 105.09/43.21 MARK(s(length(length(y_0)))) -> MARK(length(length(y_0))) 105.09/43.21 MARK(length(length(x0))) -> ACTIVE(length(active(length(mark(x0))))) 105.09/43.21 MARK(s(length(isNatList(y_0)))) -> MARK(length(isNatList(y_0))) 105.09/43.21 MARK(length(isNatList(x0))) -> ACTIVE(length(active(isNatList(x0)))) 105.09/43.21 MARK(s(length(isNatIList(y_0)))) -> MARK(length(isNatIList(y_0))) 105.09/43.21 MARK(length(isNatIList(x0))) -> ACTIVE(length(active(isNatIList(x0)))) 105.09/43.21 MARK(s(length(isNat(y_0)))) -> MARK(length(isNat(y_0))) 105.09/43.21 MARK(length(isNat(x0))) -> ACTIVE(length(active(isNat(x0)))) 105.09/43.21 MARK(U11(and(isNatList(z1), isNat(z0)), z1)) -> ACTIVE(U11(active(and(mark(isNatList(z1)), isNat(z0))), z1)) 105.09/43.21 MARK(length(cons(y_0, y_1))) -> ACTIVE(length(cons(y_0, y_1))) 105.09/43.21 105.09/43.21 The TRS R consists of the following rules: 105.09/43.21 105.09/43.21 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 105.09/43.21 active(zeros) -> mark(cons(0, zeros)) 105.09/43.21 active(U11(tt, L)) -> mark(s(length(L))) 105.09/43.21 mark(s(X)) -> active(s(mark(X))) 105.09/43.21 active(and(tt, X)) -> mark(X) 105.09/43.21 mark(zeros) -> active(zeros) 105.09/43.21 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 105.09/43.21 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 105.09/43.21 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 105.09/43.21 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 105.09/43.21 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.21 mark(length(X)) -> active(length(mark(X))) 105.09/43.21 mark(isNatList(X)) -> active(isNatList(X)) 105.09/43.21 mark(isNatIList(X)) -> active(isNatIList(X)) 105.09/43.21 mark(0) -> active(0) 105.09/43.21 mark(tt) -> active(tt) 105.09/43.21 active(isNat(s(V1))) -> mark(isNat(V1)) 105.09/43.21 mark(isNat(X)) -> active(isNat(X)) 105.09/43.21 mark(nil) -> active(nil) 105.09/43.21 and(X1, mark(X2)) -> and(X1, X2) 105.09/43.21 and(mark(X1), X2) -> and(X1, X2) 105.09/43.21 and(active(X1), X2) -> and(X1, X2) 105.09/43.21 and(X1, active(X2)) -> and(X1, X2) 105.09/43.21 active(isNat(0)) -> mark(tt) 105.09/43.21 cons(X1, mark(X2)) -> cons(X1, X2) 105.09/43.21 cons(mark(X1), X2) -> cons(X1, X2) 105.09/43.21 cons(active(X1), X2) -> cons(X1, X2) 105.09/43.21 cons(X1, active(X2)) -> cons(X1, X2) 105.09/43.21 s(active(X)) -> s(X) 105.09/43.21 s(mark(X)) -> s(X) 105.09/43.21 U11(X1, mark(X2)) -> U11(X1, X2) 105.09/43.21 U11(mark(X1), X2) -> U11(X1, X2) 105.09/43.21 U11(active(X1), X2) -> U11(X1, X2) 105.09/43.21 U11(X1, active(X2)) -> U11(X1, X2) 105.09/43.21 length(active(X)) -> length(X) 105.09/43.21 length(mark(X)) -> length(X) 105.09/43.21 105.09/43.21 The set Q consists of the following terms: 105.09/43.21 105.09/43.21 active(zeros) 105.09/43.21 active(U11(tt, x0)) 105.09/43.21 active(and(tt, x0)) 105.09/43.21 active(isNat(0)) 105.09/43.21 active(isNat(length(x0))) 105.09/43.21 active(isNat(s(x0))) 105.09/43.21 active(isNatIList(x0)) 105.09/43.21 active(isNatList(nil)) 105.09/43.21 active(isNatList(cons(x0, x1))) 105.09/43.21 active(length(nil)) 105.09/43.21 active(length(cons(x0, x1))) 105.09/43.21 mark(zeros) 105.09/43.21 mark(cons(x0, x1)) 105.09/43.21 mark(0) 105.09/43.21 mark(U11(x0, x1)) 105.09/43.21 mark(tt) 105.09/43.21 mark(s(x0)) 105.09/43.21 mark(length(x0)) 105.09/43.21 mark(and(x0, x1)) 105.09/43.21 mark(isNat(x0)) 105.09/43.21 mark(isNatList(x0)) 105.09/43.21 mark(isNatIList(x0)) 105.09/43.21 mark(nil) 105.09/43.21 cons(mark(x0), x1) 105.09/43.21 cons(x0, mark(x1)) 105.09/43.21 cons(active(x0), x1) 105.09/43.21 cons(x0, active(x1)) 105.09/43.21 U11(mark(x0), x1) 105.09/43.21 U11(x0, mark(x1)) 105.09/43.21 U11(active(x0), x1) 105.09/43.21 U11(x0, active(x1)) 105.09/43.21 s(mark(x0)) 105.09/43.21 s(active(x0)) 105.09/43.21 length(mark(x0)) 105.09/43.21 length(active(x0)) 105.09/43.21 and(mark(x0), x1) 105.09/43.21 and(x0, mark(x1)) 105.09/43.21 and(active(x0), x1) 105.09/43.21 and(x0, active(x1)) 105.09/43.21 isNat(mark(x0)) 105.09/43.21 isNat(active(x0)) 105.09/43.21 isNatList(mark(x0)) 105.09/43.21 isNatList(active(x0)) 105.09/43.21 isNatIList(mark(x0)) 105.09/43.21 isNatIList(active(x0)) 105.09/43.21 105.09/43.21 We have to consider all minimal (P,Q,R)-chains. 105.09/43.21 ---------------------------------------- 105.09/43.21 105.09/43.21 (140) TransformationProof (EQUIVALENT) 105.09/43.21 By forward instantiating [JAR06] the rule MARK(s(length(y_0))) -> MARK(length(y_0)) we obtained the following new rules [LPAR04]: 105.09/43.21 105.09/43.21 (MARK(s(length(cons(y_0, y_1)))) -> MARK(length(cons(y_0, y_1))),MARK(s(length(cons(y_0, y_1)))) -> MARK(length(cons(y_0, y_1)))) 105.09/43.21 (MARK(s(length(s(y_0)))) -> MARK(length(s(y_0))),MARK(s(length(s(y_0)))) -> MARK(length(s(y_0)))) 105.09/43.21 (MARK(s(length(zeros))) -> MARK(length(zeros)),MARK(s(length(zeros))) -> MARK(length(zeros))) 105.09/43.21 (MARK(s(length(U11(y_0, y_1)))) -> MARK(length(U11(y_0, y_1))),MARK(s(length(U11(y_0, y_1)))) -> MARK(length(U11(y_0, y_1)))) 105.09/43.21 (MARK(s(length(and(y_0, y_1)))) -> MARK(length(and(y_0, y_1))),MARK(s(length(and(y_0, y_1)))) -> MARK(length(and(y_0, y_1)))) 105.09/43.21 (MARK(s(length(length(y_0)))) -> MARK(length(length(y_0))),MARK(s(length(length(y_0)))) -> MARK(length(length(y_0)))) 105.09/43.21 (MARK(s(length(isNatList(y_0)))) -> MARK(length(isNatList(y_0))),MARK(s(length(isNatList(y_0)))) -> MARK(length(isNatList(y_0)))) 105.09/43.21 (MARK(s(length(isNatIList(y_0)))) -> MARK(length(isNatIList(y_0))),MARK(s(length(isNatIList(y_0)))) -> MARK(length(isNatIList(y_0)))) 105.09/43.21 (MARK(s(length(isNat(y_0)))) -> MARK(length(isNat(y_0))),MARK(s(length(isNat(y_0)))) -> MARK(length(isNat(y_0)))) 105.09/43.21 105.09/43.21 105.09/43.21 ---------------------------------------- 105.09/43.21 105.09/43.21 (141) 105.09/43.21 Obligation: 105.09/43.21 Q DP problem: 105.09/43.21 The TRS P consists of the following rules: 105.09/43.21 105.09/43.21 ACTIVE(length(cons(N, L))) -> MARK(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.21 ACTIVE(U11(tt, L)) -> MARK(s(length(L))) 105.09/43.21 MARK(s(length(cons(y_0, y_1)))) -> MARK(length(cons(y_0, y_1))) 105.09/43.21 MARK(length(cons(x0, x1))) -> ACTIVE(length(active(cons(mark(x0), x1)))) 105.09/43.21 MARK(s(length(s(y_0)))) -> MARK(length(s(y_0))) 105.09/43.21 MARK(length(s(x0))) -> ACTIVE(length(active(s(mark(x0))))) 105.09/43.21 MARK(s(length(zeros))) -> MARK(length(zeros)) 105.09/43.21 MARK(length(zeros)) -> ACTIVE(length(active(zeros))) 105.09/43.21 MARK(s(length(U11(y_0, y_1)))) -> MARK(length(U11(y_0, y_1))) 105.09/43.21 MARK(length(U11(x0, x1))) -> ACTIVE(length(active(U11(mark(x0), x1)))) 105.09/43.21 MARK(s(length(and(y_0, y_1)))) -> MARK(length(and(y_0, y_1))) 105.09/43.21 MARK(length(and(x0, x1))) -> ACTIVE(length(active(and(mark(x0), x1)))) 105.09/43.21 MARK(s(length(length(y_0)))) -> MARK(length(length(y_0))) 105.09/43.21 MARK(length(length(x0))) -> ACTIVE(length(active(length(mark(x0))))) 105.09/43.21 MARK(s(length(isNatList(y_0)))) -> MARK(length(isNatList(y_0))) 105.09/43.21 MARK(length(isNatList(x0))) -> ACTIVE(length(active(isNatList(x0)))) 105.09/43.21 MARK(s(length(isNatIList(y_0)))) -> MARK(length(isNatIList(y_0))) 105.09/43.21 MARK(length(isNatIList(x0))) -> ACTIVE(length(active(isNatIList(x0)))) 105.09/43.21 MARK(s(length(isNat(y_0)))) -> MARK(length(isNat(y_0))) 105.09/43.21 MARK(length(isNat(x0))) -> ACTIVE(length(active(isNat(x0)))) 105.09/43.21 MARK(U11(and(isNatList(z1), isNat(z0)), z1)) -> ACTIVE(U11(active(and(mark(isNatList(z1)), isNat(z0))), z1)) 105.09/43.21 MARK(length(cons(y_0, y_1))) -> ACTIVE(length(cons(y_0, y_1))) 105.09/43.21 105.09/43.21 The TRS R consists of the following rules: 105.09/43.21 105.09/43.21 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 105.09/43.21 active(zeros) -> mark(cons(0, zeros)) 105.09/43.21 active(U11(tt, L)) -> mark(s(length(L))) 105.09/43.21 mark(s(X)) -> active(s(mark(X))) 105.09/43.21 active(and(tt, X)) -> mark(X) 105.09/43.21 mark(zeros) -> active(zeros) 105.09/43.21 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 105.09/43.21 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 105.09/43.21 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 105.09/43.21 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 105.09/43.21 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.21 mark(length(X)) -> active(length(mark(X))) 105.09/43.21 mark(isNatList(X)) -> active(isNatList(X)) 105.09/43.21 mark(isNatIList(X)) -> active(isNatIList(X)) 105.09/43.21 mark(0) -> active(0) 105.09/43.21 mark(tt) -> active(tt) 105.09/43.21 active(isNat(s(V1))) -> mark(isNat(V1)) 105.09/43.21 mark(isNat(X)) -> active(isNat(X)) 105.09/43.21 mark(nil) -> active(nil) 105.09/43.21 and(X1, mark(X2)) -> and(X1, X2) 105.09/43.21 and(mark(X1), X2) -> and(X1, X2) 105.09/43.21 and(active(X1), X2) -> and(X1, X2) 105.09/43.21 and(X1, active(X2)) -> and(X1, X2) 105.09/43.21 active(isNat(0)) -> mark(tt) 105.09/43.21 cons(X1, mark(X2)) -> cons(X1, X2) 105.09/43.21 cons(mark(X1), X2) -> cons(X1, X2) 105.09/43.21 cons(active(X1), X2) -> cons(X1, X2) 105.09/43.21 cons(X1, active(X2)) -> cons(X1, X2) 105.09/43.21 s(active(X)) -> s(X) 105.09/43.21 s(mark(X)) -> s(X) 105.09/43.21 U11(X1, mark(X2)) -> U11(X1, X2) 105.09/43.21 U11(mark(X1), X2) -> U11(X1, X2) 105.09/43.21 U11(active(X1), X2) -> U11(X1, X2) 105.09/43.21 U11(X1, active(X2)) -> U11(X1, X2) 105.09/43.21 length(active(X)) -> length(X) 105.09/43.21 length(mark(X)) -> length(X) 105.09/43.21 105.09/43.21 The set Q consists of the following terms: 105.09/43.21 105.09/43.21 active(zeros) 105.09/43.21 active(U11(tt, x0)) 105.09/43.21 active(and(tt, x0)) 105.09/43.21 active(isNat(0)) 105.09/43.21 active(isNat(length(x0))) 105.09/43.21 active(isNat(s(x0))) 105.09/43.21 active(isNatIList(x0)) 105.09/43.21 active(isNatList(nil)) 105.09/43.21 active(isNatList(cons(x0, x1))) 105.09/43.21 active(length(nil)) 105.09/43.21 active(length(cons(x0, x1))) 105.09/43.21 mark(zeros) 105.09/43.21 mark(cons(x0, x1)) 105.09/43.21 mark(0) 105.09/43.21 mark(U11(x0, x1)) 105.09/43.21 mark(tt) 105.09/43.21 mark(s(x0)) 105.09/43.21 mark(length(x0)) 105.09/43.21 mark(and(x0, x1)) 105.09/43.21 mark(isNat(x0)) 105.09/43.21 mark(isNatList(x0)) 105.09/43.21 mark(isNatIList(x0)) 105.09/43.21 mark(nil) 105.09/43.21 cons(mark(x0), x1) 105.09/43.21 cons(x0, mark(x1)) 105.09/43.21 cons(active(x0), x1) 105.09/43.21 cons(x0, active(x1)) 105.09/43.21 U11(mark(x0), x1) 105.09/43.21 U11(x0, mark(x1)) 105.09/43.21 U11(active(x0), x1) 105.09/43.21 U11(x0, active(x1)) 105.09/43.21 s(mark(x0)) 105.09/43.21 s(active(x0)) 105.09/43.21 length(mark(x0)) 105.09/43.21 length(active(x0)) 105.09/43.21 and(mark(x0), x1) 105.09/43.21 and(x0, mark(x1)) 105.09/43.21 and(active(x0), x1) 105.09/43.21 and(x0, active(x1)) 105.09/43.21 isNat(mark(x0)) 105.09/43.21 isNat(active(x0)) 105.09/43.21 isNatList(mark(x0)) 105.09/43.21 isNatList(active(x0)) 105.09/43.21 isNatIList(mark(x0)) 105.09/43.21 isNatIList(active(x0)) 105.09/43.21 105.09/43.21 We have to consider all minimal (P,Q,R)-chains. 105.09/43.21 ---------------------------------------- 105.09/43.21 105.09/43.21 (142) TransformationProof (EQUIVALENT) 105.09/43.21 By forward instantiating [JAR06] the rule ACTIVE(U11(tt, L)) -> MARK(s(length(L))) we obtained the following new rules [LPAR04]: 105.09/43.21 105.09/43.21 (ACTIVE(U11(tt, cons(y_0, y_1))) -> MARK(s(length(cons(y_0, y_1)))),ACTIVE(U11(tt, cons(y_0, y_1))) -> MARK(s(length(cons(y_0, y_1))))) 105.09/43.21 (ACTIVE(U11(tt, s(y_0))) -> MARK(s(length(s(y_0)))),ACTIVE(U11(tt, s(y_0))) -> MARK(s(length(s(y_0))))) 105.09/43.21 (ACTIVE(U11(tt, zeros)) -> MARK(s(length(zeros))),ACTIVE(U11(tt, zeros)) -> MARK(s(length(zeros)))) 105.09/43.21 (ACTIVE(U11(tt, U11(y_0, y_1))) -> MARK(s(length(U11(y_0, y_1)))),ACTIVE(U11(tt, U11(y_0, y_1))) -> MARK(s(length(U11(y_0, y_1))))) 105.09/43.21 (ACTIVE(U11(tt, and(y_0, y_1))) -> MARK(s(length(and(y_0, y_1)))),ACTIVE(U11(tt, and(y_0, y_1))) -> MARK(s(length(and(y_0, y_1))))) 105.09/43.21 (ACTIVE(U11(tt, length(y_0))) -> MARK(s(length(length(y_0)))),ACTIVE(U11(tt, length(y_0))) -> MARK(s(length(length(y_0))))) 105.09/43.21 (ACTIVE(U11(tt, isNatList(y_0))) -> MARK(s(length(isNatList(y_0)))),ACTIVE(U11(tt, isNatList(y_0))) -> MARK(s(length(isNatList(y_0))))) 105.09/43.21 (ACTIVE(U11(tt, isNatIList(y_0))) -> MARK(s(length(isNatIList(y_0)))),ACTIVE(U11(tt, isNatIList(y_0))) -> MARK(s(length(isNatIList(y_0))))) 105.09/43.21 (ACTIVE(U11(tt, isNat(y_0))) -> MARK(s(length(isNat(y_0)))),ACTIVE(U11(tt, isNat(y_0))) -> MARK(s(length(isNat(y_0))))) 105.09/43.21 105.09/43.21 105.09/43.21 ---------------------------------------- 105.09/43.21 105.09/43.21 (143) 105.09/43.21 Obligation: 105.09/43.21 Q DP problem: 105.09/43.21 The TRS P consists of the following rules: 105.09/43.21 105.09/43.21 ACTIVE(length(cons(N, L))) -> MARK(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.21 MARK(s(length(cons(y_0, y_1)))) -> MARK(length(cons(y_0, y_1))) 105.09/43.21 MARK(length(cons(x0, x1))) -> ACTIVE(length(active(cons(mark(x0), x1)))) 105.09/43.21 MARK(s(length(s(y_0)))) -> MARK(length(s(y_0))) 105.09/43.21 MARK(length(s(x0))) -> ACTIVE(length(active(s(mark(x0))))) 105.09/43.21 MARK(s(length(zeros))) -> MARK(length(zeros)) 105.09/43.21 MARK(length(zeros)) -> ACTIVE(length(active(zeros))) 105.09/43.21 MARK(s(length(U11(y_0, y_1)))) -> MARK(length(U11(y_0, y_1))) 105.09/43.21 MARK(length(U11(x0, x1))) -> ACTIVE(length(active(U11(mark(x0), x1)))) 105.09/43.21 MARK(s(length(and(y_0, y_1)))) -> MARK(length(and(y_0, y_1))) 105.09/43.21 MARK(length(and(x0, x1))) -> ACTIVE(length(active(and(mark(x0), x1)))) 105.09/43.21 MARK(s(length(length(y_0)))) -> MARK(length(length(y_0))) 105.09/43.21 MARK(length(length(x0))) -> ACTIVE(length(active(length(mark(x0))))) 105.09/43.21 MARK(s(length(isNatList(y_0)))) -> MARK(length(isNatList(y_0))) 105.09/43.21 MARK(length(isNatList(x0))) -> ACTIVE(length(active(isNatList(x0)))) 105.09/43.21 MARK(s(length(isNatIList(y_0)))) -> MARK(length(isNatIList(y_0))) 105.09/43.21 MARK(length(isNatIList(x0))) -> ACTIVE(length(active(isNatIList(x0)))) 105.09/43.21 MARK(s(length(isNat(y_0)))) -> MARK(length(isNat(y_0))) 105.09/43.21 MARK(length(isNat(x0))) -> ACTIVE(length(active(isNat(x0)))) 105.09/43.21 MARK(U11(and(isNatList(z1), isNat(z0)), z1)) -> ACTIVE(U11(active(and(mark(isNatList(z1)), isNat(z0))), z1)) 105.09/43.21 MARK(length(cons(y_0, y_1))) -> ACTIVE(length(cons(y_0, y_1))) 105.09/43.21 ACTIVE(U11(tt, cons(y_0, y_1))) -> MARK(s(length(cons(y_0, y_1)))) 105.09/43.21 ACTIVE(U11(tt, s(y_0))) -> MARK(s(length(s(y_0)))) 105.09/43.21 ACTIVE(U11(tt, zeros)) -> MARK(s(length(zeros))) 105.09/43.21 ACTIVE(U11(tt, U11(y_0, y_1))) -> MARK(s(length(U11(y_0, y_1)))) 105.09/43.21 ACTIVE(U11(tt, and(y_0, y_1))) -> MARK(s(length(and(y_0, y_1)))) 105.09/43.21 ACTIVE(U11(tt, length(y_0))) -> MARK(s(length(length(y_0)))) 105.09/43.21 ACTIVE(U11(tt, isNatList(y_0))) -> MARK(s(length(isNatList(y_0)))) 105.09/43.21 ACTIVE(U11(tt, isNatIList(y_0))) -> MARK(s(length(isNatIList(y_0)))) 105.09/43.21 ACTIVE(U11(tt, isNat(y_0))) -> MARK(s(length(isNat(y_0)))) 105.09/43.21 105.09/43.21 The TRS R consists of the following rules: 105.09/43.21 105.09/43.21 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 105.09/43.21 active(zeros) -> mark(cons(0, zeros)) 105.09/43.21 active(U11(tt, L)) -> mark(s(length(L))) 105.09/43.21 mark(s(X)) -> active(s(mark(X))) 105.09/43.21 active(and(tt, X)) -> mark(X) 105.09/43.21 mark(zeros) -> active(zeros) 105.09/43.21 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 105.09/43.21 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 105.09/43.21 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 105.09/43.21 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 105.09/43.21 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.21 mark(length(X)) -> active(length(mark(X))) 105.09/43.21 mark(isNatList(X)) -> active(isNatList(X)) 105.09/43.21 mark(isNatIList(X)) -> active(isNatIList(X)) 105.09/43.21 mark(0) -> active(0) 105.09/43.21 mark(tt) -> active(tt) 105.09/43.21 active(isNat(s(V1))) -> mark(isNat(V1)) 105.09/43.21 mark(isNat(X)) -> active(isNat(X)) 105.09/43.21 mark(nil) -> active(nil) 105.09/43.21 and(X1, mark(X2)) -> and(X1, X2) 105.09/43.21 and(mark(X1), X2) -> and(X1, X2) 105.09/43.21 and(active(X1), X2) -> and(X1, X2) 105.09/43.21 and(X1, active(X2)) -> and(X1, X2) 105.09/43.21 active(isNat(0)) -> mark(tt) 105.09/43.21 cons(X1, mark(X2)) -> cons(X1, X2) 105.09/43.21 cons(mark(X1), X2) -> cons(X1, X2) 105.09/43.21 cons(active(X1), X2) -> cons(X1, X2) 105.09/43.21 cons(X1, active(X2)) -> cons(X1, X2) 105.09/43.21 s(active(X)) -> s(X) 105.09/43.21 s(mark(X)) -> s(X) 105.09/43.21 U11(X1, mark(X2)) -> U11(X1, X2) 105.09/43.21 U11(mark(X1), X2) -> U11(X1, X2) 105.09/43.21 U11(active(X1), X2) -> U11(X1, X2) 105.09/43.21 U11(X1, active(X2)) -> U11(X1, X2) 105.09/43.21 length(active(X)) -> length(X) 105.09/43.21 length(mark(X)) -> length(X) 105.09/43.21 105.09/43.21 The set Q consists of the following terms: 105.09/43.21 105.09/43.21 active(zeros) 105.09/43.21 active(U11(tt, x0)) 105.09/43.21 active(and(tt, x0)) 105.09/43.21 active(isNat(0)) 105.09/43.21 active(isNat(length(x0))) 105.09/43.21 active(isNat(s(x0))) 105.09/43.21 active(isNatIList(x0)) 105.09/43.21 active(isNatList(nil)) 105.09/43.21 active(isNatList(cons(x0, x1))) 105.09/43.21 active(length(nil)) 105.09/43.21 active(length(cons(x0, x1))) 105.09/43.21 mark(zeros) 105.09/43.21 mark(cons(x0, x1)) 105.09/43.21 mark(0) 105.09/43.21 mark(U11(x0, x1)) 105.09/43.21 mark(tt) 105.09/43.21 mark(s(x0)) 105.09/43.21 mark(length(x0)) 105.09/43.21 mark(and(x0, x1)) 105.09/43.21 mark(isNat(x0)) 105.09/43.21 mark(isNatList(x0)) 105.09/43.21 mark(isNatIList(x0)) 105.09/43.21 mark(nil) 105.09/43.21 cons(mark(x0), x1) 105.09/43.21 cons(x0, mark(x1)) 105.09/43.21 cons(active(x0), x1) 105.09/43.21 cons(x0, active(x1)) 105.09/43.21 U11(mark(x0), x1) 105.09/43.21 U11(x0, mark(x1)) 105.09/43.21 U11(active(x0), x1) 105.09/43.21 U11(x0, active(x1)) 105.09/43.21 s(mark(x0)) 105.09/43.21 s(active(x0)) 105.09/43.21 length(mark(x0)) 105.09/43.21 length(active(x0)) 105.09/43.21 and(mark(x0), x1) 105.09/43.21 and(x0, mark(x1)) 105.09/43.21 and(active(x0), x1) 105.09/43.21 and(x0, active(x1)) 105.09/43.21 isNat(mark(x0)) 105.09/43.21 isNat(active(x0)) 105.09/43.21 isNatList(mark(x0)) 105.09/43.21 isNatList(active(x0)) 105.09/43.21 isNatIList(mark(x0)) 105.09/43.21 isNatIList(active(x0)) 105.09/43.21 105.09/43.21 We have to consider all minimal (P,Q,R)-chains. 105.09/43.21 ---------------------------------------- 105.09/43.21 105.09/43.21 (144) QDPQMonotonicMRRProof (EQUIVALENT) 105.09/43.21 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. 105.09/43.21 105.09/43.21 Strictly oriented dependency pairs: 105.09/43.21 105.09/43.21 MARK(s(length(isNat(y_0)))) -> MARK(length(isNat(y_0))) 105.09/43.21 105.09/43.21 105.09/43.21 Used ordering: Polynomial interpretation [POLO]: 105.09/43.21 105.09/43.21 POL(0) = 0 105.09/43.21 POL(ACTIVE(x_1)) = 2*x_1 105.09/43.21 POL(MARK(x_1)) = 2*x_1 105.09/43.21 POL(U11(x_1, x_2)) = 2*x_2 105.09/43.21 POL(active(x_1)) = x_1 105.09/43.21 POL(and(x_1, x_2)) = 2*x_2 105.09/43.21 POL(cons(x_1, x_2)) = 2*x_2 105.09/43.21 POL(isNat(x_1)) = 2 105.09/43.21 POL(isNatIList(x_1)) = 0 105.09/43.21 POL(isNatList(x_1)) = 0 105.09/43.21 POL(length(x_1)) = x_1 105.09/43.21 POL(mark(x_1)) = x_1 105.09/43.21 POL(nil) = 0 105.09/43.21 POL(s(x_1)) = 2*x_1 105.09/43.21 POL(tt) = 0 105.09/43.21 POL(zeros) = 0 105.09/43.21 105.09/43.21 105.09/43.21 ---------------------------------------- 105.09/43.21 105.09/43.21 (145) 105.09/43.21 Obligation: 105.09/43.21 Q DP problem: 105.09/43.21 The TRS P consists of the following rules: 105.09/43.21 105.09/43.21 ACTIVE(length(cons(N, L))) -> MARK(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.21 MARK(s(length(cons(y_0, y_1)))) -> MARK(length(cons(y_0, y_1))) 105.09/43.21 MARK(length(cons(x0, x1))) -> ACTIVE(length(active(cons(mark(x0), x1)))) 105.09/43.21 MARK(s(length(s(y_0)))) -> MARK(length(s(y_0))) 105.09/43.21 MARK(length(s(x0))) -> ACTIVE(length(active(s(mark(x0))))) 105.09/43.21 MARK(s(length(zeros))) -> MARK(length(zeros)) 105.09/43.21 MARK(length(zeros)) -> ACTIVE(length(active(zeros))) 105.09/43.21 MARK(s(length(U11(y_0, y_1)))) -> MARK(length(U11(y_0, y_1))) 105.09/43.21 MARK(length(U11(x0, x1))) -> ACTIVE(length(active(U11(mark(x0), x1)))) 105.09/43.21 MARK(s(length(and(y_0, y_1)))) -> MARK(length(and(y_0, y_1))) 105.09/43.21 MARK(length(and(x0, x1))) -> ACTIVE(length(active(and(mark(x0), x1)))) 105.09/43.21 MARK(s(length(length(y_0)))) -> MARK(length(length(y_0))) 105.09/43.21 MARK(length(length(x0))) -> ACTIVE(length(active(length(mark(x0))))) 105.09/43.21 MARK(s(length(isNatList(y_0)))) -> MARK(length(isNatList(y_0))) 105.09/43.21 MARK(length(isNatList(x0))) -> ACTIVE(length(active(isNatList(x0)))) 105.09/43.21 MARK(s(length(isNatIList(y_0)))) -> MARK(length(isNatIList(y_0))) 105.09/43.21 MARK(length(isNatIList(x0))) -> ACTIVE(length(active(isNatIList(x0)))) 105.09/43.21 MARK(length(isNat(x0))) -> ACTIVE(length(active(isNat(x0)))) 105.09/43.21 MARK(U11(and(isNatList(z1), isNat(z0)), z1)) -> ACTIVE(U11(active(and(mark(isNatList(z1)), isNat(z0))), z1)) 105.09/43.21 MARK(length(cons(y_0, y_1))) -> ACTIVE(length(cons(y_0, y_1))) 105.09/43.21 ACTIVE(U11(tt, cons(y_0, y_1))) -> MARK(s(length(cons(y_0, y_1)))) 105.09/43.21 ACTIVE(U11(tt, s(y_0))) -> MARK(s(length(s(y_0)))) 105.09/43.21 ACTIVE(U11(tt, zeros)) -> MARK(s(length(zeros))) 105.09/43.21 ACTIVE(U11(tt, U11(y_0, y_1))) -> MARK(s(length(U11(y_0, y_1)))) 105.09/43.21 ACTIVE(U11(tt, and(y_0, y_1))) -> MARK(s(length(and(y_0, y_1)))) 105.09/43.21 ACTIVE(U11(tt, length(y_0))) -> MARK(s(length(length(y_0)))) 105.09/43.21 ACTIVE(U11(tt, isNatList(y_0))) -> MARK(s(length(isNatList(y_0)))) 105.09/43.21 ACTIVE(U11(tt, isNatIList(y_0))) -> MARK(s(length(isNatIList(y_0)))) 105.09/43.21 ACTIVE(U11(tt, isNat(y_0))) -> MARK(s(length(isNat(y_0)))) 105.09/43.21 105.09/43.21 The TRS R consists of the following rules: 105.09/43.21 105.09/43.21 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 105.09/43.21 active(zeros) -> mark(cons(0, zeros)) 105.09/43.21 active(U11(tt, L)) -> mark(s(length(L))) 105.09/43.21 mark(s(X)) -> active(s(mark(X))) 105.09/43.21 active(and(tt, X)) -> mark(X) 105.09/43.21 mark(zeros) -> active(zeros) 105.09/43.21 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 105.09/43.21 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 105.09/43.21 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 105.09/43.21 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 105.09/43.21 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.21 mark(length(X)) -> active(length(mark(X))) 105.09/43.21 mark(isNatList(X)) -> active(isNatList(X)) 105.09/43.21 mark(isNatIList(X)) -> active(isNatIList(X)) 105.09/43.21 mark(0) -> active(0) 105.09/43.21 mark(tt) -> active(tt) 105.09/43.21 active(isNat(s(V1))) -> mark(isNat(V1)) 105.09/43.21 mark(isNat(X)) -> active(isNat(X)) 105.09/43.21 mark(nil) -> active(nil) 105.09/43.21 and(X1, mark(X2)) -> and(X1, X2) 105.09/43.21 and(mark(X1), X2) -> and(X1, X2) 105.09/43.21 and(active(X1), X2) -> and(X1, X2) 105.09/43.21 and(X1, active(X2)) -> and(X1, X2) 105.09/43.21 active(isNat(0)) -> mark(tt) 105.09/43.21 cons(X1, mark(X2)) -> cons(X1, X2) 105.09/43.21 cons(mark(X1), X2) -> cons(X1, X2) 105.09/43.21 cons(active(X1), X2) -> cons(X1, X2) 105.09/43.21 cons(X1, active(X2)) -> cons(X1, X2) 105.09/43.21 s(active(X)) -> s(X) 105.09/43.21 s(mark(X)) -> s(X) 105.09/43.21 U11(X1, mark(X2)) -> U11(X1, X2) 105.09/43.21 U11(mark(X1), X2) -> U11(X1, X2) 105.09/43.21 U11(active(X1), X2) -> U11(X1, X2) 105.09/43.21 U11(X1, active(X2)) -> U11(X1, X2) 105.09/43.21 length(active(X)) -> length(X) 105.09/43.21 length(mark(X)) -> length(X) 105.09/43.21 105.09/43.21 The set Q consists of the following terms: 105.09/43.21 105.09/43.21 active(zeros) 105.09/43.21 active(U11(tt, x0)) 105.09/43.21 active(and(tt, x0)) 105.09/43.21 active(isNat(0)) 105.09/43.21 active(isNat(length(x0))) 105.09/43.21 active(isNat(s(x0))) 105.09/43.21 active(isNatIList(x0)) 105.09/43.21 active(isNatList(nil)) 105.09/43.21 active(isNatList(cons(x0, x1))) 105.09/43.21 active(length(nil)) 105.09/43.21 active(length(cons(x0, x1))) 105.09/43.21 mark(zeros) 105.09/43.21 mark(cons(x0, x1)) 105.09/43.21 mark(0) 105.09/43.21 mark(U11(x0, x1)) 105.09/43.21 mark(tt) 105.09/43.21 mark(s(x0)) 105.09/43.21 mark(length(x0)) 105.09/43.21 mark(and(x0, x1)) 105.09/43.21 mark(isNat(x0)) 105.09/43.21 mark(isNatList(x0)) 105.09/43.21 mark(isNatIList(x0)) 105.09/43.21 mark(nil) 105.09/43.21 cons(mark(x0), x1) 105.09/43.21 cons(x0, mark(x1)) 105.09/43.21 cons(active(x0), x1) 105.09/43.21 cons(x0, active(x1)) 105.09/43.21 U11(mark(x0), x1) 105.09/43.21 U11(x0, mark(x1)) 105.09/43.21 U11(active(x0), x1) 105.09/43.21 U11(x0, active(x1)) 105.09/43.21 s(mark(x0)) 105.09/43.21 s(active(x0)) 105.09/43.21 length(mark(x0)) 105.09/43.21 length(active(x0)) 105.09/43.21 and(mark(x0), x1) 105.09/43.21 and(x0, mark(x1)) 105.09/43.21 and(active(x0), x1) 105.09/43.21 and(x0, active(x1)) 105.09/43.21 isNat(mark(x0)) 105.09/43.21 isNat(active(x0)) 105.09/43.21 isNatList(mark(x0)) 105.09/43.21 isNatList(active(x0)) 105.09/43.21 isNatIList(mark(x0)) 105.09/43.21 isNatIList(active(x0)) 105.09/43.21 105.09/43.21 We have to consider all minimal (P,Q,R)-chains. 105.09/43.21 ---------------------------------------- 105.09/43.21 105.09/43.21 (146) DependencyGraphProof (EQUIVALENT) 105.09/43.21 The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 1 SCC with 2 less nodes. 105.09/43.21 ---------------------------------------- 105.09/43.21 105.09/43.21 (147) 105.09/43.21 Obligation: 105.09/43.21 Q DP problem: 105.09/43.21 The TRS P consists of the following rules: 105.09/43.21 105.09/43.21 MARK(U11(and(isNatList(z1), isNat(z0)), z1)) -> ACTIVE(U11(active(and(mark(isNatList(z1)), isNat(z0))), z1)) 105.09/43.21 ACTIVE(length(cons(N, L))) -> MARK(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.21 ACTIVE(U11(tt, cons(y_0, y_1))) -> MARK(s(length(cons(y_0, y_1)))) 105.09/43.21 MARK(s(length(cons(y_0, y_1)))) -> MARK(length(cons(y_0, y_1))) 105.09/43.21 MARK(length(cons(x0, x1))) -> ACTIVE(length(active(cons(mark(x0), x1)))) 105.09/43.21 ACTIVE(U11(tt, s(y_0))) -> MARK(s(length(s(y_0)))) 105.09/43.21 MARK(s(length(s(y_0)))) -> MARK(length(s(y_0))) 105.09/43.21 MARK(length(s(x0))) -> ACTIVE(length(active(s(mark(x0))))) 105.09/43.21 ACTIVE(U11(tt, zeros)) -> MARK(s(length(zeros))) 105.09/43.21 MARK(s(length(zeros))) -> MARK(length(zeros)) 105.09/43.21 MARK(length(zeros)) -> ACTIVE(length(active(zeros))) 105.09/43.21 ACTIVE(U11(tt, U11(y_0, y_1))) -> MARK(s(length(U11(y_0, y_1)))) 105.09/43.21 MARK(s(length(U11(y_0, y_1)))) -> MARK(length(U11(y_0, y_1))) 105.09/43.21 MARK(length(U11(x0, x1))) -> ACTIVE(length(active(U11(mark(x0), x1)))) 105.09/43.21 ACTIVE(U11(tt, and(y_0, y_1))) -> MARK(s(length(and(y_0, y_1)))) 105.09/43.21 MARK(s(length(and(y_0, y_1)))) -> MARK(length(and(y_0, y_1))) 105.09/43.21 MARK(length(and(x0, x1))) -> ACTIVE(length(active(and(mark(x0), x1)))) 105.09/43.21 ACTIVE(U11(tt, length(y_0))) -> MARK(s(length(length(y_0)))) 105.09/43.21 MARK(s(length(length(y_0)))) -> MARK(length(length(y_0))) 105.09/43.21 MARK(length(length(x0))) -> ACTIVE(length(active(length(mark(x0))))) 105.09/43.21 ACTIVE(U11(tt, isNatList(y_0))) -> MARK(s(length(isNatList(y_0)))) 105.09/43.21 MARK(s(length(isNatList(y_0)))) -> MARK(length(isNatList(y_0))) 105.09/43.21 MARK(length(isNatList(x0))) -> ACTIVE(length(active(isNatList(x0)))) 105.09/43.21 ACTIVE(U11(tt, isNatIList(y_0))) -> MARK(s(length(isNatIList(y_0)))) 105.09/43.21 MARK(s(length(isNatIList(y_0)))) -> MARK(length(isNatIList(y_0))) 105.09/43.21 MARK(length(isNatIList(x0))) -> ACTIVE(length(active(isNatIList(x0)))) 105.09/43.21 MARK(length(cons(y_0, y_1))) -> ACTIVE(length(cons(y_0, y_1))) 105.09/43.21 105.09/43.21 The TRS R consists of the following rules: 105.09/43.21 105.09/43.21 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 105.09/43.21 active(zeros) -> mark(cons(0, zeros)) 105.09/43.21 active(U11(tt, L)) -> mark(s(length(L))) 105.09/43.21 mark(s(X)) -> active(s(mark(X))) 105.09/43.21 active(and(tt, X)) -> mark(X) 105.09/43.21 mark(zeros) -> active(zeros) 105.09/43.21 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 105.09/43.21 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 105.09/43.21 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 105.09/43.21 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 105.09/43.21 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.21 mark(length(X)) -> active(length(mark(X))) 105.09/43.21 mark(isNatList(X)) -> active(isNatList(X)) 105.09/43.21 mark(isNatIList(X)) -> active(isNatIList(X)) 105.09/43.21 mark(0) -> active(0) 105.09/43.22 mark(tt) -> active(tt) 105.09/43.22 active(isNat(s(V1))) -> mark(isNat(V1)) 105.09/43.22 mark(isNat(X)) -> active(isNat(X)) 105.09/43.22 mark(nil) -> active(nil) 105.09/43.22 and(X1, mark(X2)) -> and(X1, X2) 105.09/43.22 and(mark(X1), X2) -> and(X1, X2) 105.09/43.22 and(active(X1), X2) -> and(X1, X2) 105.09/43.22 and(X1, active(X2)) -> and(X1, X2) 105.09/43.22 active(isNat(0)) -> mark(tt) 105.09/43.22 cons(X1, mark(X2)) -> cons(X1, X2) 105.09/43.22 cons(mark(X1), X2) -> cons(X1, X2) 105.09/43.22 cons(active(X1), X2) -> cons(X1, X2) 105.09/43.22 cons(X1, active(X2)) -> cons(X1, X2) 105.09/43.22 s(active(X)) -> s(X) 105.09/43.22 s(mark(X)) -> s(X) 105.09/43.22 U11(X1, mark(X2)) -> U11(X1, X2) 105.09/43.22 U11(mark(X1), X2) -> U11(X1, X2) 105.09/43.22 U11(active(X1), X2) -> U11(X1, X2) 105.09/43.22 U11(X1, active(X2)) -> U11(X1, X2) 105.09/43.22 length(active(X)) -> length(X) 105.09/43.22 length(mark(X)) -> length(X) 105.09/43.22 105.09/43.22 The set Q consists of the following terms: 105.09/43.22 105.09/43.22 active(zeros) 105.09/43.22 active(U11(tt, x0)) 105.09/43.22 active(and(tt, x0)) 105.09/43.22 active(isNat(0)) 105.09/43.22 active(isNat(length(x0))) 105.09/43.22 active(isNat(s(x0))) 105.09/43.22 active(isNatIList(x0)) 105.09/43.22 active(isNatList(nil)) 105.09/43.22 active(isNatList(cons(x0, x1))) 105.09/43.22 active(length(nil)) 105.09/43.22 active(length(cons(x0, x1))) 105.09/43.22 mark(zeros) 105.09/43.22 mark(cons(x0, x1)) 105.09/43.22 mark(0) 105.09/43.22 mark(U11(x0, x1)) 105.09/43.22 mark(tt) 105.09/43.22 mark(s(x0)) 105.09/43.22 mark(length(x0)) 105.09/43.22 mark(and(x0, x1)) 105.09/43.22 mark(isNat(x0)) 105.09/43.22 mark(isNatList(x0)) 105.09/43.22 mark(isNatIList(x0)) 105.09/43.22 mark(nil) 105.09/43.22 cons(mark(x0), x1) 105.09/43.22 cons(x0, mark(x1)) 105.09/43.22 cons(active(x0), x1) 105.09/43.22 cons(x0, active(x1)) 105.09/43.22 U11(mark(x0), x1) 105.09/43.22 U11(x0, mark(x1)) 105.09/43.22 U11(active(x0), x1) 105.09/43.22 U11(x0, active(x1)) 105.09/43.22 s(mark(x0)) 105.09/43.22 s(active(x0)) 105.09/43.22 length(mark(x0)) 105.09/43.22 length(active(x0)) 105.09/43.22 and(mark(x0), x1) 105.09/43.22 and(x0, mark(x1)) 105.09/43.22 and(active(x0), x1) 105.09/43.22 and(x0, active(x1)) 105.09/43.22 isNat(mark(x0)) 105.09/43.22 isNat(active(x0)) 105.09/43.22 isNatList(mark(x0)) 105.09/43.22 isNatList(active(x0)) 105.09/43.22 isNatIList(mark(x0)) 105.09/43.22 isNatIList(active(x0)) 105.09/43.22 105.09/43.22 We have to consider all minimal (P,Q,R)-chains. 105.09/43.22 ---------------------------------------- 105.09/43.22 105.09/43.22 (148) QDPQMonotonicMRRProof (EQUIVALENT) 105.09/43.22 By using the Q-monotonic rule removal processor with the following ordering, at least one Dependency Pair or term rewrite system rule of this QDP problem can be strictly oriented such that it always occurs at a strongly monotonic position in a (P,Q,R)-chain. 105.09/43.22 105.09/43.22 Strictly oriented dependency pairs: 105.09/43.22 105.09/43.22 MARK(s(length(isNatIList(y_0)))) -> MARK(length(isNatIList(y_0))) 105.09/43.22 105.09/43.22 105.09/43.22 Used ordering: Polynomial interpretation [POLO]: 105.09/43.22 105.09/43.22 POL(0) = 0 105.09/43.22 POL(ACTIVE(x_1)) = 2*x_1 105.09/43.22 POL(MARK(x_1)) = 2*x_1 105.09/43.22 POL(U11(x_1, x_2)) = 2*x_2 105.09/43.22 POL(active(x_1)) = x_1 105.09/43.22 POL(and(x_1, x_2)) = x_2 105.09/43.22 POL(cons(x_1, x_2)) = 2*x_2 105.09/43.22 POL(isNat(x_1)) = 0 105.09/43.22 POL(isNatIList(x_1)) = 2 105.09/43.22 POL(isNatList(x_1)) = 0 105.09/43.22 POL(length(x_1)) = x_1 105.09/43.22 POL(mark(x_1)) = x_1 105.09/43.22 POL(nil) = 0 105.09/43.22 POL(s(x_1)) = 2*x_1 105.09/43.22 POL(tt) = 0 105.09/43.22 POL(zeros) = 0 105.09/43.22 105.09/43.22 105.09/43.22 ---------------------------------------- 105.09/43.22 105.09/43.22 (149) 105.09/43.22 Obligation: 105.09/43.22 Q DP problem: 105.09/43.22 The TRS P consists of the following rules: 105.09/43.22 105.09/43.22 MARK(U11(and(isNatList(z1), isNat(z0)), z1)) -> ACTIVE(U11(active(and(mark(isNatList(z1)), isNat(z0))), z1)) 105.09/43.22 ACTIVE(length(cons(N, L))) -> MARK(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.22 ACTIVE(U11(tt, cons(y_0, y_1))) -> MARK(s(length(cons(y_0, y_1)))) 105.09/43.22 MARK(s(length(cons(y_0, y_1)))) -> MARK(length(cons(y_0, y_1))) 105.09/43.22 MARK(length(cons(x0, x1))) -> ACTIVE(length(active(cons(mark(x0), x1)))) 105.09/43.22 ACTIVE(U11(tt, s(y_0))) -> MARK(s(length(s(y_0)))) 105.09/43.22 MARK(s(length(s(y_0)))) -> MARK(length(s(y_0))) 105.09/43.22 MARK(length(s(x0))) -> ACTIVE(length(active(s(mark(x0))))) 105.09/43.22 ACTIVE(U11(tt, zeros)) -> MARK(s(length(zeros))) 105.09/43.22 MARK(s(length(zeros))) -> MARK(length(zeros)) 105.09/43.22 MARK(length(zeros)) -> ACTIVE(length(active(zeros))) 105.09/43.22 ACTIVE(U11(tt, U11(y_0, y_1))) -> MARK(s(length(U11(y_0, y_1)))) 105.09/43.22 MARK(s(length(U11(y_0, y_1)))) -> MARK(length(U11(y_0, y_1))) 105.09/43.22 MARK(length(U11(x0, x1))) -> ACTIVE(length(active(U11(mark(x0), x1)))) 105.09/43.22 ACTIVE(U11(tt, and(y_0, y_1))) -> MARK(s(length(and(y_0, y_1)))) 105.09/43.22 MARK(s(length(and(y_0, y_1)))) -> MARK(length(and(y_0, y_1))) 105.09/43.22 MARK(length(and(x0, x1))) -> ACTIVE(length(active(and(mark(x0), x1)))) 105.09/43.22 ACTIVE(U11(tt, length(y_0))) -> MARK(s(length(length(y_0)))) 105.09/43.22 MARK(s(length(length(y_0)))) -> MARK(length(length(y_0))) 105.09/43.22 MARK(length(length(x0))) -> ACTIVE(length(active(length(mark(x0))))) 105.09/43.22 ACTIVE(U11(tt, isNatList(y_0))) -> MARK(s(length(isNatList(y_0)))) 105.09/43.22 MARK(s(length(isNatList(y_0)))) -> MARK(length(isNatList(y_0))) 105.09/43.22 MARK(length(isNatList(x0))) -> ACTIVE(length(active(isNatList(x0)))) 105.09/43.22 ACTIVE(U11(tt, isNatIList(y_0))) -> MARK(s(length(isNatIList(y_0)))) 105.09/43.22 MARK(length(isNatIList(x0))) -> ACTIVE(length(active(isNatIList(x0)))) 105.09/43.22 MARK(length(cons(y_0, y_1))) -> ACTIVE(length(cons(y_0, y_1))) 105.09/43.22 105.09/43.22 The TRS R consists of the following rules: 105.09/43.22 105.09/43.22 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 105.09/43.22 active(zeros) -> mark(cons(0, zeros)) 105.09/43.22 active(U11(tt, L)) -> mark(s(length(L))) 105.09/43.22 mark(s(X)) -> active(s(mark(X))) 105.09/43.22 active(and(tt, X)) -> mark(X) 105.09/43.22 mark(zeros) -> active(zeros) 105.09/43.22 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 105.09/43.22 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 105.09/43.22 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 105.09/43.22 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 105.09/43.22 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.22 mark(length(X)) -> active(length(mark(X))) 105.09/43.22 mark(isNatList(X)) -> active(isNatList(X)) 105.09/43.22 mark(isNatIList(X)) -> active(isNatIList(X)) 105.09/43.22 mark(0) -> active(0) 105.09/43.22 mark(tt) -> active(tt) 105.09/43.22 active(isNat(s(V1))) -> mark(isNat(V1)) 105.09/43.22 mark(isNat(X)) -> active(isNat(X)) 105.09/43.22 mark(nil) -> active(nil) 105.09/43.22 and(X1, mark(X2)) -> and(X1, X2) 105.09/43.22 and(mark(X1), X2) -> and(X1, X2) 105.09/43.22 and(active(X1), X2) -> and(X1, X2) 105.09/43.22 and(X1, active(X2)) -> and(X1, X2) 105.09/43.22 active(isNat(0)) -> mark(tt) 105.09/43.22 cons(X1, mark(X2)) -> cons(X1, X2) 105.09/43.22 cons(mark(X1), X2) -> cons(X1, X2) 105.09/43.22 cons(active(X1), X2) -> cons(X1, X2) 105.09/43.22 cons(X1, active(X2)) -> cons(X1, X2) 105.09/43.22 s(active(X)) -> s(X) 105.09/43.22 s(mark(X)) -> s(X) 105.09/43.22 U11(X1, mark(X2)) -> U11(X1, X2) 105.09/43.22 U11(mark(X1), X2) -> U11(X1, X2) 105.09/43.22 U11(active(X1), X2) -> U11(X1, X2) 105.09/43.22 U11(X1, active(X2)) -> U11(X1, X2) 105.09/43.22 length(active(X)) -> length(X) 105.09/43.22 length(mark(X)) -> length(X) 105.09/43.22 105.09/43.22 The set Q consists of the following terms: 105.09/43.22 105.09/43.22 active(zeros) 105.09/43.22 active(U11(tt, x0)) 105.09/43.22 active(and(tt, x0)) 105.09/43.22 active(isNat(0)) 105.09/43.22 active(isNat(length(x0))) 105.09/43.22 active(isNat(s(x0))) 105.09/43.22 active(isNatIList(x0)) 105.09/43.22 active(isNatList(nil)) 105.09/43.22 active(isNatList(cons(x0, x1))) 105.09/43.22 active(length(nil)) 105.09/43.22 active(length(cons(x0, x1))) 105.09/43.22 mark(zeros) 105.09/43.22 mark(cons(x0, x1)) 105.09/43.22 mark(0) 105.09/43.22 mark(U11(x0, x1)) 105.09/43.22 mark(tt) 105.09/43.22 mark(s(x0)) 105.09/43.22 mark(length(x0)) 105.09/43.22 mark(and(x0, x1)) 105.09/43.22 mark(isNat(x0)) 105.09/43.22 mark(isNatList(x0)) 105.09/43.22 mark(isNatIList(x0)) 105.09/43.22 mark(nil) 105.09/43.22 cons(mark(x0), x1) 105.09/43.22 cons(x0, mark(x1)) 105.09/43.22 cons(active(x0), x1) 105.09/43.22 cons(x0, active(x1)) 105.09/43.22 U11(mark(x0), x1) 105.09/43.22 U11(x0, mark(x1)) 105.09/43.22 U11(active(x0), x1) 105.09/43.22 U11(x0, active(x1)) 105.09/43.22 s(mark(x0)) 105.09/43.22 s(active(x0)) 105.09/43.22 length(mark(x0)) 105.09/43.22 length(active(x0)) 105.09/43.22 and(mark(x0), x1) 105.09/43.22 and(x0, mark(x1)) 105.09/43.22 and(active(x0), x1) 105.09/43.22 and(x0, active(x1)) 105.09/43.22 isNat(mark(x0)) 105.09/43.22 isNat(active(x0)) 105.09/43.22 isNatList(mark(x0)) 105.09/43.22 isNatList(active(x0)) 105.09/43.22 isNatIList(mark(x0)) 105.09/43.22 isNatIList(active(x0)) 105.09/43.22 105.09/43.22 We have to consider all minimal (P,Q,R)-chains. 105.09/43.22 ---------------------------------------- 105.09/43.22 105.09/43.22 (150) DependencyGraphProof (EQUIVALENT) 105.09/43.22 The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 1 SCC with 2 less nodes. 105.09/43.22 ---------------------------------------- 105.09/43.22 105.09/43.22 (151) 105.09/43.22 Obligation: 105.09/43.22 Q DP problem: 105.09/43.22 The TRS P consists of the following rules: 105.09/43.22 105.09/43.22 ACTIVE(length(cons(N, L))) -> MARK(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.22 MARK(U11(and(isNatList(z1), isNat(z0)), z1)) -> ACTIVE(U11(active(and(mark(isNatList(z1)), isNat(z0))), z1)) 105.09/43.22 ACTIVE(U11(tt, cons(y_0, y_1))) -> MARK(s(length(cons(y_0, y_1)))) 105.09/43.22 MARK(s(length(cons(y_0, y_1)))) -> MARK(length(cons(y_0, y_1))) 105.09/43.22 MARK(length(cons(x0, x1))) -> ACTIVE(length(active(cons(mark(x0), x1)))) 105.09/43.22 ACTIVE(U11(tt, s(y_0))) -> MARK(s(length(s(y_0)))) 105.09/43.22 MARK(s(length(s(y_0)))) -> MARK(length(s(y_0))) 105.09/43.22 MARK(length(s(x0))) -> ACTIVE(length(active(s(mark(x0))))) 105.09/43.22 ACTIVE(U11(tt, zeros)) -> MARK(s(length(zeros))) 105.09/43.22 MARK(s(length(zeros))) -> MARK(length(zeros)) 105.09/43.22 MARK(length(zeros)) -> ACTIVE(length(active(zeros))) 105.09/43.22 ACTIVE(U11(tt, U11(y_0, y_1))) -> MARK(s(length(U11(y_0, y_1)))) 105.09/43.22 MARK(s(length(U11(y_0, y_1)))) -> MARK(length(U11(y_0, y_1))) 105.09/43.22 MARK(length(U11(x0, x1))) -> ACTIVE(length(active(U11(mark(x0), x1)))) 105.09/43.22 ACTIVE(U11(tt, and(y_0, y_1))) -> MARK(s(length(and(y_0, y_1)))) 105.09/43.22 MARK(s(length(and(y_0, y_1)))) -> MARK(length(and(y_0, y_1))) 105.09/43.22 MARK(length(and(x0, x1))) -> ACTIVE(length(active(and(mark(x0), x1)))) 105.09/43.22 ACTIVE(U11(tt, length(y_0))) -> MARK(s(length(length(y_0)))) 105.09/43.22 MARK(s(length(length(y_0)))) -> MARK(length(length(y_0))) 105.09/43.22 MARK(length(length(x0))) -> ACTIVE(length(active(length(mark(x0))))) 105.09/43.22 ACTIVE(U11(tt, isNatList(y_0))) -> MARK(s(length(isNatList(y_0)))) 105.09/43.22 MARK(s(length(isNatList(y_0)))) -> MARK(length(isNatList(y_0))) 105.09/43.22 MARK(length(isNatList(x0))) -> ACTIVE(length(active(isNatList(x0)))) 105.09/43.22 MARK(length(cons(y_0, y_1))) -> ACTIVE(length(cons(y_0, y_1))) 105.09/43.22 105.09/43.22 The TRS R consists of the following rules: 105.09/43.22 105.09/43.22 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 105.09/43.22 active(zeros) -> mark(cons(0, zeros)) 105.09/43.22 active(U11(tt, L)) -> mark(s(length(L))) 105.09/43.22 mark(s(X)) -> active(s(mark(X))) 105.09/43.22 active(and(tt, X)) -> mark(X) 105.09/43.22 mark(zeros) -> active(zeros) 105.09/43.22 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 105.09/43.22 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 105.09/43.22 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 105.09/43.22 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 105.09/43.22 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.22 mark(length(X)) -> active(length(mark(X))) 105.09/43.22 mark(isNatList(X)) -> active(isNatList(X)) 105.09/43.22 mark(isNatIList(X)) -> active(isNatIList(X)) 105.09/43.22 mark(0) -> active(0) 105.09/43.22 mark(tt) -> active(tt) 105.09/43.22 active(isNat(s(V1))) -> mark(isNat(V1)) 105.09/43.22 mark(isNat(X)) -> active(isNat(X)) 105.09/43.22 mark(nil) -> active(nil) 105.09/43.22 and(X1, mark(X2)) -> and(X1, X2) 105.09/43.22 and(mark(X1), X2) -> and(X1, X2) 105.09/43.22 and(active(X1), X2) -> and(X1, X2) 105.09/43.22 and(X1, active(X2)) -> and(X1, X2) 105.09/43.22 active(isNat(0)) -> mark(tt) 105.09/43.22 cons(X1, mark(X2)) -> cons(X1, X2) 105.09/43.22 cons(mark(X1), X2) -> cons(X1, X2) 105.09/43.22 cons(active(X1), X2) -> cons(X1, X2) 105.09/43.22 cons(X1, active(X2)) -> cons(X1, X2) 105.09/43.22 s(active(X)) -> s(X) 105.09/43.22 s(mark(X)) -> s(X) 105.09/43.22 U11(X1, mark(X2)) -> U11(X1, X2) 105.09/43.22 U11(mark(X1), X2) -> U11(X1, X2) 105.09/43.22 U11(active(X1), X2) -> U11(X1, X2) 105.09/43.22 U11(X1, active(X2)) -> U11(X1, X2) 105.09/43.22 length(active(X)) -> length(X) 105.09/43.22 length(mark(X)) -> length(X) 105.09/43.22 105.09/43.22 The set Q consists of the following terms: 105.09/43.22 105.09/43.22 active(zeros) 105.09/43.22 active(U11(tt, x0)) 105.09/43.22 active(and(tt, x0)) 105.09/43.22 active(isNat(0)) 105.09/43.22 active(isNat(length(x0))) 105.09/43.22 active(isNat(s(x0))) 105.09/43.22 active(isNatIList(x0)) 105.09/43.22 active(isNatList(nil)) 105.09/43.22 active(isNatList(cons(x0, x1))) 105.09/43.22 active(length(nil)) 105.09/43.22 active(length(cons(x0, x1))) 105.09/43.22 mark(zeros) 105.09/43.22 mark(cons(x0, x1)) 105.09/43.22 mark(0) 105.09/43.22 mark(U11(x0, x1)) 105.09/43.22 mark(tt) 105.09/43.22 mark(s(x0)) 105.09/43.22 mark(length(x0)) 105.09/43.22 mark(and(x0, x1)) 105.09/43.22 mark(isNat(x0)) 105.09/43.22 mark(isNatList(x0)) 105.09/43.22 mark(isNatIList(x0)) 105.09/43.22 mark(nil) 105.09/43.22 cons(mark(x0), x1) 105.09/43.22 cons(x0, mark(x1)) 105.09/43.22 cons(active(x0), x1) 105.09/43.22 cons(x0, active(x1)) 105.09/43.22 U11(mark(x0), x1) 105.09/43.22 U11(x0, mark(x1)) 105.09/43.22 U11(active(x0), x1) 105.09/43.22 U11(x0, active(x1)) 105.09/43.22 s(mark(x0)) 105.09/43.22 s(active(x0)) 105.09/43.22 length(mark(x0)) 105.09/43.22 length(active(x0)) 105.09/43.22 and(mark(x0), x1) 105.09/43.22 and(x0, mark(x1)) 105.09/43.22 and(active(x0), x1) 105.09/43.22 and(x0, active(x1)) 105.09/43.22 isNat(mark(x0)) 105.09/43.22 isNat(active(x0)) 105.09/43.22 isNatList(mark(x0)) 105.09/43.22 isNatList(active(x0)) 105.09/43.22 isNatIList(mark(x0)) 105.09/43.22 isNatIList(active(x0)) 105.09/43.22 105.09/43.22 We have to consider all minimal (P,Q,R)-chains. 105.09/43.22 ---------------------------------------- 105.09/43.22 105.09/43.22 (152) QDPQMonotonicMRRProof (EQUIVALENT) 105.09/43.22 By using the Q-monotonic rule removal processor with the following ordering, at least one Dependency Pair or term rewrite system rule of this QDP problem can be strictly oriented such that it always occurs at a strongly monotonic position in a (P,Q,R)-chain. 105.09/43.22 105.09/43.22 Strictly oriented dependency pairs: 105.09/43.22 105.09/43.22 MARK(s(length(isNatList(y_0)))) -> MARK(length(isNatList(y_0))) 105.09/43.22 105.09/43.22 105.09/43.22 Used ordering: Polynomial interpretation [POLO]: 105.09/43.22 105.09/43.22 POL(0) = 0 105.09/43.22 POL(ACTIVE(x_1)) = 2*x_1 105.09/43.22 POL(MARK(x_1)) = 2*x_1 105.09/43.22 POL(U11(x_1, x_2)) = 2*x_2 105.09/43.22 POL(active(x_1)) = x_1 105.09/43.22 POL(and(x_1, x_2)) = x_2 105.09/43.22 POL(cons(x_1, x_2)) = 2*x_2 105.09/43.22 POL(isNat(x_1)) = 2 105.09/43.22 POL(isNatIList(x_1)) = 0 105.09/43.22 POL(isNatList(x_1)) = 2 105.09/43.22 POL(length(x_1)) = x_1 105.09/43.22 POL(mark(x_1)) = x_1 105.09/43.22 POL(nil) = 0 105.09/43.22 POL(s(x_1)) = 2*x_1 105.09/43.22 POL(tt) = 0 105.09/43.22 POL(zeros) = 0 105.09/43.22 105.09/43.22 105.09/43.22 ---------------------------------------- 105.09/43.22 105.09/43.22 (153) 105.09/43.22 Obligation: 105.09/43.22 Q DP problem: 105.09/43.22 The TRS P consists of the following rules: 105.09/43.22 105.09/43.22 ACTIVE(length(cons(N, L))) -> MARK(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.22 MARK(U11(and(isNatList(z1), isNat(z0)), z1)) -> ACTIVE(U11(active(and(mark(isNatList(z1)), isNat(z0))), z1)) 105.09/43.22 ACTIVE(U11(tt, cons(y_0, y_1))) -> MARK(s(length(cons(y_0, y_1)))) 105.09/43.22 MARK(s(length(cons(y_0, y_1)))) -> MARK(length(cons(y_0, y_1))) 105.09/43.22 MARK(length(cons(x0, x1))) -> ACTIVE(length(active(cons(mark(x0), x1)))) 105.09/43.22 ACTIVE(U11(tt, s(y_0))) -> MARK(s(length(s(y_0)))) 105.09/43.22 MARK(s(length(s(y_0)))) -> MARK(length(s(y_0))) 105.09/43.22 MARK(length(s(x0))) -> ACTIVE(length(active(s(mark(x0))))) 105.09/43.22 ACTIVE(U11(tt, zeros)) -> MARK(s(length(zeros))) 105.09/43.22 MARK(s(length(zeros))) -> MARK(length(zeros)) 105.09/43.22 MARK(length(zeros)) -> ACTIVE(length(active(zeros))) 105.09/43.22 ACTIVE(U11(tt, U11(y_0, y_1))) -> MARK(s(length(U11(y_0, y_1)))) 105.09/43.22 MARK(s(length(U11(y_0, y_1)))) -> MARK(length(U11(y_0, y_1))) 105.09/43.22 MARK(length(U11(x0, x1))) -> ACTIVE(length(active(U11(mark(x0), x1)))) 105.09/43.22 ACTIVE(U11(tt, and(y_0, y_1))) -> MARK(s(length(and(y_0, y_1)))) 105.09/43.22 MARK(s(length(and(y_0, y_1)))) -> MARK(length(and(y_0, y_1))) 105.09/43.22 MARK(length(and(x0, x1))) -> ACTIVE(length(active(and(mark(x0), x1)))) 105.09/43.22 ACTIVE(U11(tt, length(y_0))) -> MARK(s(length(length(y_0)))) 105.09/43.22 MARK(s(length(length(y_0)))) -> MARK(length(length(y_0))) 105.09/43.22 MARK(length(length(x0))) -> ACTIVE(length(active(length(mark(x0))))) 105.09/43.22 ACTIVE(U11(tt, isNatList(y_0))) -> MARK(s(length(isNatList(y_0)))) 105.09/43.22 MARK(length(isNatList(x0))) -> ACTIVE(length(active(isNatList(x0)))) 105.09/43.22 MARK(length(cons(y_0, y_1))) -> ACTIVE(length(cons(y_0, y_1))) 105.09/43.22 105.09/43.22 The TRS R consists of the following rules: 105.09/43.22 105.09/43.22 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 105.09/43.22 active(zeros) -> mark(cons(0, zeros)) 105.09/43.22 active(U11(tt, L)) -> mark(s(length(L))) 105.09/43.22 mark(s(X)) -> active(s(mark(X))) 105.09/43.22 active(and(tt, X)) -> mark(X) 105.09/43.22 mark(zeros) -> active(zeros) 105.09/43.22 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 105.09/43.22 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 105.09/43.22 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 105.09/43.22 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 105.09/43.22 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.22 mark(length(X)) -> active(length(mark(X))) 105.09/43.22 mark(isNatList(X)) -> active(isNatList(X)) 105.09/43.22 mark(isNatIList(X)) -> active(isNatIList(X)) 105.09/43.22 mark(0) -> active(0) 105.09/43.22 mark(tt) -> active(tt) 105.09/43.22 active(isNat(s(V1))) -> mark(isNat(V1)) 105.09/43.22 mark(isNat(X)) -> active(isNat(X)) 105.09/43.22 mark(nil) -> active(nil) 105.09/43.22 and(X1, mark(X2)) -> and(X1, X2) 105.09/43.22 and(mark(X1), X2) -> and(X1, X2) 105.09/43.22 and(active(X1), X2) -> and(X1, X2) 105.09/43.22 and(X1, active(X2)) -> and(X1, X2) 105.09/43.22 active(isNat(0)) -> mark(tt) 105.09/43.22 cons(X1, mark(X2)) -> cons(X1, X2) 105.09/43.22 cons(mark(X1), X2) -> cons(X1, X2) 105.09/43.22 cons(active(X1), X2) -> cons(X1, X2) 105.09/43.22 cons(X1, active(X2)) -> cons(X1, X2) 105.09/43.22 s(active(X)) -> s(X) 105.09/43.22 s(mark(X)) -> s(X) 105.09/43.22 U11(X1, mark(X2)) -> U11(X1, X2) 105.09/43.22 U11(mark(X1), X2) -> U11(X1, X2) 105.09/43.22 U11(active(X1), X2) -> U11(X1, X2) 105.09/43.22 U11(X1, active(X2)) -> U11(X1, X2) 105.09/43.22 length(active(X)) -> length(X) 105.09/43.22 length(mark(X)) -> length(X) 105.09/43.22 105.09/43.22 The set Q consists of the following terms: 105.09/43.22 105.09/43.22 active(zeros) 105.09/43.22 active(U11(tt, x0)) 105.09/43.22 active(and(tt, x0)) 105.09/43.22 active(isNat(0)) 105.09/43.22 active(isNat(length(x0))) 105.09/43.22 active(isNat(s(x0))) 105.09/43.22 active(isNatIList(x0)) 105.09/43.22 active(isNatList(nil)) 105.09/43.22 active(isNatList(cons(x0, x1))) 105.09/43.22 active(length(nil)) 105.09/43.22 active(length(cons(x0, x1))) 105.09/43.22 mark(zeros) 105.09/43.22 mark(cons(x0, x1)) 105.09/43.22 mark(0) 105.09/43.22 mark(U11(x0, x1)) 105.09/43.22 mark(tt) 105.09/43.22 mark(s(x0)) 105.09/43.22 mark(length(x0)) 105.09/43.22 mark(and(x0, x1)) 105.09/43.22 mark(isNat(x0)) 105.09/43.22 mark(isNatList(x0)) 105.09/43.22 mark(isNatIList(x0)) 105.09/43.22 mark(nil) 105.09/43.22 cons(mark(x0), x1) 105.09/43.22 cons(x0, mark(x1)) 105.09/43.22 cons(active(x0), x1) 105.09/43.22 cons(x0, active(x1)) 105.09/43.22 U11(mark(x0), x1) 105.09/43.22 U11(x0, mark(x1)) 105.09/43.22 U11(active(x0), x1) 105.09/43.22 U11(x0, active(x1)) 105.09/43.22 s(mark(x0)) 105.09/43.22 s(active(x0)) 105.09/43.22 length(mark(x0)) 105.09/43.22 length(active(x0)) 105.09/43.22 and(mark(x0), x1) 105.09/43.22 and(x0, mark(x1)) 105.09/43.22 and(active(x0), x1) 105.09/43.22 and(x0, active(x1)) 105.09/43.22 isNat(mark(x0)) 105.09/43.22 isNat(active(x0)) 105.09/43.22 isNatList(mark(x0)) 105.09/43.22 isNatList(active(x0)) 105.09/43.22 isNatIList(mark(x0)) 105.09/43.22 isNatIList(active(x0)) 105.09/43.22 105.09/43.22 We have to consider all minimal (P,Q,R)-chains. 105.09/43.22 ---------------------------------------- 105.09/43.22 105.09/43.22 (154) DependencyGraphProof (EQUIVALENT) 105.09/43.22 The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 1 SCC with 2 less nodes. 105.09/43.22 ---------------------------------------- 105.09/43.22 105.09/43.22 (155) 105.09/43.22 Obligation: 105.09/43.22 Q DP problem: 105.09/43.22 The TRS P consists of the following rules: 105.09/43.22 105.09/43.22 MARK(U11(and(isNatList(z1), isNat(z0)), z1)) -> ACTIVE(U11(active(and(mark(isNatList(z1)), isNat(z0))), z1)) 105.09/43.22 ACTIVE(length(cons(N, L))) -> MARK(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.22 ACTIVE(U11(tt, cons(y_0, y_1))) -> MARK(s(length(cons(y_0, y_1)))) 105.09/43.22 MARK(s(length(cons(y_0, y_1)))) -> MARK(length(cons(y_0, y_1))) 105.09/43.22 MARK(length(cons(x0, x1))) -> ACTIVE(length(active(cons(mark(x0), x1)))) 105.09/43.22 ACTIVE(U11(tt, s(y_0))) -> MARK(s(length(s(y_0)))) 105.09/43.22 MARK(s(length(s(y_0)))) -> MARK(length(s(y_0))) 105.09/43.22 MARK(length(s(x0))) -> ACTIVE(length(active(s(mark(x0))))) 105.09/43.22 ACTIVE(U11(tt, zeros)) -> MARK(s(length(zeros))) 105.09/43.22 MARK(s(length(zeros))) -> MARK(length(zeros)) 105.09/43.22 MARK(length(zeros)) -> ACTIVE(length(active(zeros))) 105.09/43.22 ACTIVE(U11(tt, U11(y_0, y_1))) -> MARK(s(length(U11(y_0, y_1)))) 105.09/43.22 MARK(s(length(U11(y_0, y_1)))) -> MARK(length(U11(y_0, y_1))) 105.09/43.22 MARK(length(U11(x0, x1))) -> ACTIVE(length(active(U11(mark(x0), x1)))) 105.09/43.22 ACTIVE(U11(tt, and(y_0, y_1))) -> MARK(s(length(and(y_0, y_1)))) 105.09/43.22 MARK(s(length(and(y_0, y_1)))) -> MARK(length(and(y_0, y_1))) 105.09/43.22 MARK(length(and(x0, x1))) -> ACTIVE(length(active(and(mark(x0), x1)))) 105.09/43.22 ACTIVE(U11(tt, length(y_0))) -> MARK(s(length(length(y_0)))) 105.09/43.22 MARK(s(length(length(y_0)))) -> MARK(length(length(y_0))) 105.09/43.22 MARK(length(length(x0))) -> ACTIVE(length(active(length(mark(x0))))) 105.09/43.22 MARK(length(cons(y_0, y_1))) -> ACTIVE(length(cons(y_0, y_1))) 105.09/43.22 105.09/43.22 The TRS R consists of the following rules: 105.09/43.22 105.09/43.22 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 105.09/43.22 active(zeros) -> mark(cons(0, zeros)) 105.09/43.22 active(U11(tt, L)) -> mark(s(length(L))) 105.09/43.22 mark(s(X)) -> active(s(mark(X))) 105.09/43.22 active(and(tt, X)) -> mark(X) 105.09/43.22 mark(zeros) -> active(zeros) 105.09/43.22 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 105.09/43.22 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 105.09/43.22 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 105.09/43.22 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 105.09/43.22 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.22 mark(length(X)) -> active(length(mark(X))) 105.09/43.22 mark(isNatList(X)) -> active(isNatList(X)) 105.09/43.22 mark(isNatIList(X)) -> active(isNatIList(X)) 105.09/43.22 mark(0) -> active(0) 105.09/43.22 mark(tt) -> active(tt) 105.09/43.22 active(isNat(s(V1))) -> mark(isNat(V1)) 105.09/43.22 mark(isNat(X)) -> active(isNat(X)) 105.09/43.22 mark(nil) -> active(nil) 105.09/43.22 and(X1, mark(X2)) -> and(X1, X2) 105.09/43.22 and(mark(X1), X2) -> and(X1, X2) 105.09/43.22 and(active(X1), X2) -> and(X1, X2) 105.09/43.22 and(X1, active(X2)) -> and(X1, X2) 105.09/43.22 active(isNat(0)) -> mark(tt) 105.09/43.22 cons(X1, mark(X2)) -> cons(X1, X2) 105.09/43.22 cons(mark(X1), X2) -> cons(X1, X2) 105.09/43.22 cons(active(X1), X2) -> cons(X1, X2) 105.09/43.22 cons(X1, active(X2)) -> cons(X1, X2) 105.09/43.22 s(active(X)) -> s(X) 105.09/43.22 s(mark(X)) -> s(X) 105.09/43.22 U11(X1, mark(X2)) -> U11(X1, X2) 105.09/43.22 U11(mark(X1), X2) -> U11(X1, X2) 105.09/43.22 U11(active(X1), X2) -> U11(X1, X2) 105.09/43.22 U11(X1, active(X2)) -> U11(X1, X2) 105.09/43.22 length(active(X)) -> length(X) 105.09/43.22 length(mark(X)) -> length(X) 105.09/43.22 105.09/43.22 The set Q consists of the following terms: 105.09/43.22 105.09/43.22 active(zeros) 105.09/43.22 active(U11(tt, x0)) 105.09/43.22 active(and(tt, x0)) 105.09/43.22 active(isNat(0)) 105.09/43.22 active(isNat(length(x0))) 105.09/43.22 active(isNat(s(x0))) 105.09/43.22 active(isNatIList(x0)) 105.09/43.22 active(isNatList(nil)) 105.09/43.22 active(isNatList(cons(x0, x1))) 105.09/43.22 active(length(nil)) 105.09/43.22 active(length(cons(x0, x1))) 105.09/43.22 mark(zeros) 105.09/43.22 mark(cons(x0, x1)) 105.09/43.22 mark(0) 105.09/43.22 mark(U11(x0, x1)) 105.09/43.22 mark(tt) 105.09/43.22 mark(s(x0)) 105.09/43.22 mark(length(x0)) 105.09/43.22 mark(and(x0, x1)) 105.09/43.22 mark(isNat(x0)) 105.09/43.22 mark(isNatList(x0)) 105.09/43.22 mark(isNatIList(x0)) 105.09/43.22 mark(nil) 105.09/43.22 cons(mark(x0), x1) 105.09/43.22 cons(x0, mark(x1)) 105.09/43.22 cons(active(x0), x1) 105.09/43.22 cons(x0, active(x1)) 105.09/43.22 U11(mark(x0), x1) 105.09/43.22 U11(x0, mark(x1)) 105.09/43.22 U11(active(x0), x1) 105.09/43.22 U11(x0, active(x1)) 105.09/43.22 s(mark(x0)) 105.09/43.22 s(active(x0)) 105.09/43.22 length(mark(x0)) 105.09/43.22 length(active(x0)) 105.09/43.22 and(mark(x0), x1) 105.09/43.22 and(x0, mark(x1)) 105.09/43.22 and(active(x0), x1) 105.09/43.22 and(x0, active(x1)) 105.09/43.22 isNat(mark(x0)) 105.09/43.22 isNat(active(x0)) 105.09/43.22 isNatList(mark(x0)) 105.09/43.22 isNatList(active(x0)) 105.09/43.22 isNatIList(mark(x0)) 105.09/43.22 isNatIList(active(x0)) 105.09/43.22 105.09/43.22 We have to consider all minimal (P,Q,R)-chains. 105.09/43.22 ---------------------------------------- 105.09/43.22 105.09/43.22 (156) QDPQMonotonicMRRProof (EQUIVALENT) 105.09/43.22 By using the Q-monotonic rule removal processor with the following ordering, at least one Dependency Pair or term rewrite system rule of this QDP problem can be strictly oriented such that it always occurs at a strongly monotonic position in a (P,Q,R)-chain. 105.09/43.22 105.09/43.22 Strictly oriented dependency pairs: 105.09/43.22 105.09/43.22 ACTIVE(U11(tt, U11(y_0, y_1))) -> MARK(s(length(U11(y_0, y_1)))) 105.09/43.22 ACTIVE(U11(tt, length(y_0))) -> MARK(s(length(length(y_0)))) 105.09/43.22 105.09/43.22 105.09/43.22 Used ordering: Polynomial interpretation [POLO]: 105.09/43.22 105.09/43.22 POL(0) = 0 105.09/43.22 POL(ACTIVE(x_1)) = 2*x_1 105.09/43.22 POL(MARK(x_1)) = 2*x_1 105.09/43.22 POL(U11(x_1, x_2)) = 1 + 2*x_2 105.09/43.22 POL(active(x_1)) = x_1 105.09/43.22 POL(and(x_1, x_2)) = 2*x_2 105.09/43.22 POL(cons(x_1, x_2)) = 2*x_2 105.09/43.22 POL(isNat(x_1)) = 0 105.09/43.22 POL(isNatIList(x_1)) = 0 105.09/43.22 POL(isNatList(x_1)) = 0 105.09/43.22 POL(length(x_1)) = 1 + x_1 105.09/43.22 POL(mark(x_1)) = x_1 105.09/43.22 POL(nil) = 0 105.09/43.22 POL(s(x_1)) = x_1 105.09/43.22 POL(tt) = 0 105.09/43.22 POL(zeros) = 0 105.09/43.22 105.09/43.22 105.09/43.22 ---------------------------------------- 105.09/43.22 105.09/43.22 (157) 105.09/43.22 Obligation: 105.09/43.22 Q DP problem: 105.09/43.22 The TRS P consists of the following rules: 105.09/43.22 105.09/43.22 MARK(U11(and(isNatList(z1), isNat(z0)), z1)) -> ACTIVE(U11(active(and(mark(isNatList(z1)), isNat(z0))), z1)) 105.09/43.22 ACTIVE(length(cons(N, L))) -> MARK(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.22 ACTIVE(U11(tt, cons(y_0, y_1))) -> MARK(s(length(cons(y_0, y_1)))) 105.09/43.22 MARK(s(length(cons(y_0, y_1)))) -> MARK(length(cons(y_0, y_1))) 105.09/43.22 MARK(length(cons(x0, x1))) -> ACTIVE(length(active(cons(mark(x0), x1)))) 105.09/43.22 ACTIVE(U11(tt, s(y_0))) -> MARK(s(length(s(y_0)))) 105.09/43.22 MARK(s(length(s(y_0)))) -> MARK(length(s(y_0))) 105.09/43.22 MARK(length(s(x0))) -> ACTIVE(length(active(s(mark(x0))))) 105.09/43.22 ACTIVE(U11(tt, zeros)) -> MARK(s(length(zeros))) 105.09/43.22 MARK(s(length(zeros))) -> MARK(length(zeros)) 105.09/43.22 MARK(length(zeros)) -> ACTIVE(length(active(zeros))) 105.09/43.22 MARK(s(length(U11(y_0, y_1)))) -> MARK(length(U11(y_0, y_1))) 105.09/43.22 MARK(length(U11(x0, x1))) -> ACTIVE(length(active(U11(mark(x0), x1)))) 105.09/43.22 ACTIVE(U11(tt, and(y_0, y_1))) -> MARK(s(length(and(y_0, y_1)))) 105.09/43.22 MARK(s(length(and(y_0, y_1)))) -> MARK(length(and(y_0, y_1))) 105.09/43.22 MARK(length(and(x0, x1))) -> ACTIVE(length(active(and(mark(x0), x1)))) 105.09/43.22 MARK(s(length(length(y_0)))) -> MARK(length(length(y_0))) 105.09/43.22 MARK(length(length(x0))) -> ACTIVE(length(active(length(mark(x0))))) 105.09/43.22 MARK(length(cons(y_0, y_1))) -> ACTIVE(length(cons(y_0, y_1))) 105.09/43.22 105.09/43.22 The TRS R consists of the following rules: 105.09/43.22 105.09/43.22 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 105.09/43.22 active(zeros) -> mark(cons(0, zeros)) 105.09/43.22 active(U11(tt, L)) -> mark(s(length(L))) 105.09/43.22 mark(s(X)) -> active(s(mark(X))) 105.09/43.22 active(and(tt, X)) -> mark(X) 105.09/43.22 mark(zeros) -> active(zeros) 105.09/43.22 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 105.09/43.22 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 105.09/43.22 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 105.09/43.22 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 105.09/43.22 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.22 mark(length(X)) -> active(length(mark(X))) 105.09/43.22 mark(isNatList(X)) -> active(isNatList(X)) 105.09/43.22 mark(isNatIList(X)) -> active(isNatIList(X)) 105.09/43.22 mark(0) -> active(0) 105.09/43.22 mark(tt) -> active(tt) 105.09/43.22 active(isNat(s(V1))) -> mark(isNat(V1)) 105.09/43.22 mark(isNat(X)) -> active(isNat(X)) 105.09/43.22 mark(nil) -> active(nil) 105.09/43.22 and(X1, mark(X2)) -> and(X1, X2) 105.09/43.22 and(mark(X1), X2) -> and(X1, X2) 105.09/43.22 and(active(X1), X2) -> and(X1, X2) 105.09/43.22 and(X1, active(X2)) -> and(X1, X2) 105.09/43.22 active(isNat(0)) -> mark(tt) 105.09/43.22 cons(X1, mark(X2)) -> cons(X1, X2) 105.09/43.22 cons(mark(X1), X2) -> cons(X1, X2) 105.09/43.22 cons(active(X1), X2) -> cons(X1, X2) 105.09/43.22 cons(X1, active(X2)) -> cons(X1, X2) 105.09/43.22 s(active(X)) -> s(X) 105.09/43.22 s(mark(X)) -> s(X) 105.09/43.22 U11(X1, mark(X2)) -> U11(X1, X2) 105.09/43.22 U11(mark(X1), X2) -> U11(X1, X2) 105.09/43.22 U11(active(X1), X2) -> U11(X1, X2) 105.09/43.22 U11(X1, active(X2)) -> U11(X1, X2) 105.09/43.22 length(active(X)) -> length(X) 105.09/43.22 length(mark(X)) -> length(X) 105.09/43.22 105.09/43.22 The set Q consists of the following terms: 105.09/43.22 105.09/43.22 active(zeros) 105.09/43.22 active(U11(tt, x0)) 105.09/43.22 active(and(tt, x0)) 105.09/43.22 active(isNat(0)) 105.09/43.22 active(isNat(length(x0))) 105.09/43.22 active(isNat(s(x0))) 105.09/43.22 active(isNatIList(x0)) 105.09/43.22 active(isNatList(nil)) 105.09/43.22 active(isNatList(cons(x0, x1))) 105.09/43.22 active(length(nil)) 105.09/43.22 active(length(cons(x0, x1))) 105.09/43.22 mark(zeros) 105.09/43.22 mark(cons(x0, x1)) 105.09/43.22 mark(0) 105.09/43.22 mark(U11(x0, x1)) 105.09/43.22 mark(tt) 105.09/43.22 mark(s(x0)) 105.09/43.22 mark(length(x0)) 105.09/43.22 mark(and(x0, x1)) 105.09/43.22 mark(isNat(x0)) 105.09/43.22 mark(isNatList(x0)) 105.09/43.22 mark(isNatIList(x0)) 105.09/43.22 mark(nil) 105.09/43.22 cons(mark(x0), x1) 105.09/43.22 cons(x0, mark(x1)) 105.09/43.22 cons(active(x0), x1) 105.09/43.22 cons(x0, active(x1)) 105.09/43.22 U11(mark(x0), x1) 105.09/43.22 U11(x0, mark(x1)) 105.09/43.22 U11(active(x0), x1) 105.09/43.22 U11(x0, active(x1)) 105.09/43.22 s(mark(x0)) 105.09/43.22 s(active(x0)) 105.09/43.22 length(mark(x0)) 105.09/43.22 length(active(x0)) 105.09/43.22 and(mark(x0), x1) 105.09/43.22 and(x0, mark(x1)) 105.09/43.22 and(active(x0), x1) 105.09/43.22 and(x0, active(x1)) 105.09/43.22 isNat(mark(x0)) 105.09/43.22 isNat(active(x0)) 105.09/43.22 isNatList(mark(x0)) 105.09/43.22 isNatList(active(x0)) 105.09/43.22 isNatIList(mark(x0)) 105.09/43.22 isNatIList(active(x0)) 105.09/43.22 105.09/43.22 We have to consider all minimal (P,Q,R)-chains. 105.09/43.22 ---------------------------------------- 105.09/43.22 105.09/43.22 (158) DependencyGraphProof (EQUIVALENT) 105.09/43.22 The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 1 SCC with 4 less nodes. 105.09/43.22 ---------------------------------------- 105.09/43.22 105.09/43.22 (159) 105.09/43.22 Obligation: 105.09/43.22 Q DP problem: 105.09/43.22 The TRS P consists of the following rules: 105.09/43.22 105.09/43.22 ACTIVE(length(cons(N, L))) -> MARK(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.22 MARK(U11(and(isNatList(z1), isNat(z0)), z1)) -> ACTIVE(U11(active(and(mark(isNatList(z1)), isNat(z0))), z1)) 105.09/43.22 ACTIVE(U11(tt, cons(y_0, y_1))) -> MARK(s(length(cons(y_0, y_1)))) 105.09/43.22 MARK(s(length(cons(y_0, y_1)))) -> MARK(length(cons(y_0, y_1))) 105.09/43.22 MARK(length(cons(x0, x1))) -> ACTIVE(length(active(cons(mark(x0), x1)))) 105.09/43.22 ACTIVE(U11(tt, s(y_0))) -> MARK(s(length(s(y_0)))) 105.09/43.22 MARK(s(length(s(y_0)))) -> MARK(length(s(y_0))) 105.09/43.22 MARK(length(s(x0))) -> ACTIVE(length(active(s(mark(x0))))) 105.09/43.22 ACTIVE(U11(tt, zeros)) -> MARK(s(length(zeros))) 105.09/43.22 MARK(s(length(zeros))) -> MARK(length(zeros)) 105.09/43.22 MARK(length(zeros)) -> ACTIVE(length(active(zeros))) 105.09/43.22 ACTIVE(U11(tt, and(y_0, y_1))) -> MARK(s(length(and(y_0, y_1)))) 105.09/43.22 MARK(s(length(and(y_0, y_1)))) -> MARK(length(and(y_0, y_1))) 105.09/43.22 MARK(length(and(x0, x1))) -> ACTIVE(length(active(and(mark(x0), x1)))) 105.09/43.22 MARK(length(cons(y_0, y_1))) -> ACTIVE(length(cons(y_0, y_1))) 105.09/43.22 105.09/43.22 The TRS R consists of the following rules: 105.09/43.22 105.09/43.22 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 105.09/43.22 active(zeros) -> mark(cons(0, zeros)) 105.09/43.22 active(U11(tt, L)) -> mark(s(length(L))) 105.09/43.22 mark(s(X)) -> active(s(mark(X))) 105.09/43.22 active(and(tt, X)) -> mark(X) 105.09/43.22 mark(zeros) -> active(zeros) 105.09/43.22 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 105.09/43.22 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 105.09/43.22 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 105.09/43.22 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 105.09/43.22 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.22 mark(length(X)) -> active(length(mark(X))) 105.09/43.22 mark(isNatList(X)) -> active(isNatList(X)) 105.09/43.22 mark(isNatIList(X)) -> active(isNatIList(X)) 105.09/43.22 mark(0) -> active(0) 105.09/43.22 mark(tt) -> active(tt) 105.09/43.22 active(isNat(s(V1))) -> mark(isNat(V1)) 105.09/43.22 mark(isNat(X)) -> active(isNat(X)) 105.09/43.22 mark(nil) -> active(nil) 105.09/43.22 and(X1, mark(X2)) -> and(X1, X2) 105.09/43.22 and(mark(X1), X2) -> and(X1, X2) 105.09/43.22 and(active(X1), X2) -> and(X1, X2) 105.09/43.22 and(X1, active(X2)) -> and(X1, X2) 105.09/43.22 active(isNat(0)) -> mark(tt) 105.09/43.22 cons(X1, mark(X2)) -> cons(X1, X2) 105.09/43.22 cons(mark(X1), X2) -> cons(X1, X2) 105.09/43.22 cons(active(X1), X2) -> cons(X1, X2) 105.09/43.22 cons(X1, active(X2)) -> cons(X1, X2) 105.09/43.22 s(active(X)) -> s(X) 105.09/43.22 s(mark(X)) -> s(X) 105.09/43.22 U11(X1, mark(X2)) -> U11(X1, X2) 105.09/43.22 U11(mark(X1), X2) -> U11(X1, X2) 105.09/43.22 U11(active(X1), X2) -> U11(X1, X2) 105.09/43.22 U11(X1, active(X2)) -> U11(X1, X2) 105.09/43.22 length(active(X)) -> length(X) 105.09/43.22 length(mark(X)) -> length(X) 105.09/43.22 105.09/43.22 The set Q consists of the following terms: 105.09/43.22 105.09/43.22 active(zeros) 105.09/43.22 active(U11(tt, x0)) 105.09/43.22 active(and(tt, x0)) 105.09/43.22 active(isNat(0)) 105.09/43.22 active(isNat(length(x0))) 105.09/43.22 active(isNat(s(x0))) 105.09/43.22 active(isNatIList(x0)) 105.09/43.22 active(isNatList(nil)) 105.09/43.22 active(isNatList(cons(x0, x1))) 105.09/43.22 active(length(nil)) 105.09/43.22 active(length(cons(x0, x1))) 105.09/43.22 mark(zeros) 105.09/43.22 mark(cons(x0, x1)) 105.09/43.22 mark(0) 105.09/43.22 mark(U11(x0, x1)) 105.09/43.22 mark(tt) 105.09/43.22 mark(s(x0)) 105.09/43.22 mark(length(x0)) 105.09/43.22 mark(and(x0, x1)) 105.09/43.22 mark(isNat(x0)) 105.09/43.22 mark(isNatList(x0)) 105.09/43.22 mark(isNatIList(x0)) 105.09/43.22 mark(nil) 105.09/43.22 cons(mark(x0), x1) 105.09/43.22 cons(x0, mark(x1)) 105.09/43.22 cons(active(x0), x1) 105.09/43.22 cons(x0, active(x1)) 105.09/43.22 U11(mark(x0), x1) 105.09/43.22 U11(x0, mark(x1)) 105.09/43.22 U11(active(x0), x1) 105.09/43.22 U11(x0, active(x1)) 105.09/43.22 s(mark(x0)) 105.09/43.22 s(active(x0)) 105.09/43.22 length(mark(x0)) 105.09/43.22 length(active(x0)) 105.09/43.22 and(mark(x0), x1) 105.09/43.22 and(x0, mark(x1)) 105.09/43.22 and(active(x0), x1) 105.09/43.22 and(x0, active(x1)) 105.09/43.22 isNat(mark(x0)) 105.09/43.22 isNat(active(x0)) 105.09/43.22 isNatList(mark(x0)) 105.09/43.22 isNatList(active(x0)) 105.09/43.22 isNatIList(mark(x0)) 105.09/43.22 isNatIList(active(x0)) 105.09/43.22 105.09/43.22 We have to consider all minimal (P,Q,R)-chains. 105.09/43.22 ---------------------------------------- 105.09/43.22 105.09/43.22 (160) QDPOrderProof (EQUIVALENT) 105.09/43.22 We use the reduction pair processor [LPAR04,JAR06]. 105.09/43.22 105.09/43.22 105.09/43.22 The following pairs can be oriented strictly and are deleted. 105.09/43.22 105.09/43.22 ACTIVE(U11(tt, cons(y_0, y_1))) -> MARK(s(length(cons(y_0, y_1)))) 105.09/43.22 The remaining pairs can at least be oriented weakly. 105.09/43.22 Used ordering: Matrix interpretation [MATRO] with arctic natural numbers [ARCTIC]: 105.09/43.22 105.09/43.22 <<< 105.09/43.22 POL(ACTIVE(x_1)) = [[0A]] + [[0A]] * x_1 105.09/43.22 >>> 105.09/43.22 105.09/43.22 <<< 105.09/43.22 POL(length(x_1)) = [[-I]] + [[0A]] * x_1 105.09/43.22 >>> 105.09/43.22 105.09/43.22 <<< 105.09/43.22 POL(cons(x_1, x_2)) = [[1A]] + [[0A]] * x_1 + [[1A]] * x_2 105.09/43.22 >>> 105.09/43.22 105.09/43.22 <<< 105.09/43.22 POL(MARK(x_1)) = [[1A]] + [[0A]] * x_1 105.09/43.22 >>> 105.09/43.22 105.09/43.22 <<< 105.09/43.22 POL(U11(x_1, x_2)) = [[-I]] + [[-I]] * x_1 + [[1A]] * x_2 105.09/43.22 >>> 105.09/43.22 105.09/43.22 <<< 105.09/43.22 POL(and(x_1, x_2)) = [[0A]] + [[0A]] * x_1 + [[0A]] * x_2 105.09/43.22 >>> 105.09/43.22 105.09/43.22 <<< 105.09/43.22 POL(isNatList(x_1)) = [[0A]] + [[0A]] * x_1 105.09/43.22 >>> 105.09/43.22 105.09/43.22 <<< 105.09/43.22 POL(isNat(x_1)) = [[-I]] + [[0A]] * x_1 105.09/43.22 >>> 105.09/43.22 105.09/43.22 <<< 105.09/43.22 POL(active(x_1)) = [[1A]] + [[0A]] * x_1 105.09/43.22 >>> 105.09/43.22 105.09/43.22 <<< 105.09/43.22 POL(mark(x_1)) = [[1A]] + [[0A]] * x_1 105.09/43.22 >>> 105.09/43.22 105.09/43.22 <<< 105.09/43.22 POL(tt) = [[0A]] 105.09/43.22 >>> 105.09/43.22 105.09/43.22 <<< 105.09/43.22 POL(s(x_1)) = [[0A]] + [[0A]] * x_1 105.09/43.22 >>> 105.09/43.22 105.09/43.22 <<< 105.09/43.22 POL(zeros) = [[0A]] 105.09/43.22 >>> 105.09/43.22 105.09/43.22 <<< 105.09/43.22 POL(0) = [[0A]] 105.09/43.22 >>> 105.09/43.22 105.09/43.22 <<< 105.09/43.22 POL(isNatIList(x_1)) = [[0A]] + [[0A]] * x_1 105.09/43.22 >>> 105.09/43.22 105.09/43.22 <<< 105.09/43.22 POL(nil) = [[0A]] 105.09/43.22 >>> 105.09/43.22 105.09/43.22 105.09/43.22 The following usable rules [FROCOS05] with respect to the argument filtering of the ordering [JAR06] were oriented: 105.09/43.22 105.09/43.22 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 105.09/43.22 active(zeros) -> mark(cons(0, zeros)) 105.09/43.22 active(U11(tt, L)) -> mark(s(length(L))) 105.09/43.22 mark(s(X)) -> active(s(mark(X))) 105.09/43.22 active(and(tt, X)) -> mark(X) 105.09/43.22 mark(zeros) -> active(zeros) 105.09/43.22 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 105.09/43.22 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 105.09/43.22 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 105.09/43.22 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 105.09/43.22 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.22 mark(length(X)) -> active(length(mark(X))) 105.09/43.22 mark(isNatList(X)) -> active(isNatList(X)) 105.09/43.22 mark(isNatIList(X)) -> active(isNatIList(X)) 105.09/43.22 and(X1, mark(X2)) -> and(X1, X2) 105.09/43.22 and(mark(X1), X2) -> and(X1, X2) 105.09/43.22 and(active(X1), X2) -> and(X1, X2) 105.09/43.22 and(X1, active(X2)) -> and(X1, X2) 105.09/43.22 active(isNat(0)) -> mark(tt) 105.09/43.22 active(isNat(s(V1))) -> mark(isNat(V1)) 105.09/43.22 mark(isNat(X)) -> active(isNat(X)) 105.09/43.22 U11(X1, mark(X2)) -> U11(X1, X2) 105.09/43.22 U11(mark(X1), X2) -> U11(X1, X2) 105.09/43.22 U11(active(X1), X2) -> U11(X1, X2) 105.09/43.22 U11(X1, active(X2)) -> U11(X1, X2) 105.09/43.22 mark(0) -> active(0) 105.09/43.22 mark(tt) -> active(tt) 105.09/43.22 mark(nil) -> active(nil) 105.09/43.22 cons(X1, mark(X2)) -> cons(X1, X2) 105.09/43.22 cons(mark(X1), X2) -> cons(X1, X2) 105.09/43.22 cons(active(X1), X2) -> cons(X1, X2) 105.09/43.22 cons(X1, active(X2)) -> cons(X1, X2) 105.09/43.22 length(active(X)) -> length(X) 105.09/43.22 length(mark(X)) -> length(X) 105.09/43.22 s(active(X)) -> s(X) 105.09/43.22 s(mark(X)) -> s(X) 105.09/43.22 105.09/43.22 105.09/43.22 ---------------------------------------- 105.09/43.22 105.09/43.22 (161) 105.09/43.22 Obligation: 105.09/43.22 Q DP problem: 105.09/43.22 The TRS P consists of the following rules: 105.09/43.22 105.09/43.22 ACTIVE(length(cons(N, L))) -> MARK(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.22 MARK(U11(and(isNatList(z1), isNat(z0)), z1)) -> ACTIVE(U11(active(and(mark(isNatList(z1)), isNat(z0))), z1)) 105.09/43.22 MARK(s(length(cons(y_0, y_1)))) -> MARK(length(cons(y_0, y_1))) 105.09/43.22 MARK(length(cons(x0, x1))) -> ACTIVE(length(active(cons(mark(x0), x1)))) 105.09/43.22 ACTIVE(U11(tt, s(y_0))) -> MARK(s(length(s(y_0)))) 105.09/43.22 MARK(s(length(s(y_0)))) -> MARK(length(s(y_0))) 105.09/43.22 MARK(length(s(x0))) -> ACTIVE(length(active(s(mark(x0))))) 105.09/43.22 ACTIVE(U11(tt, zeros)) -> MARK(s(length(zeros))) 105.09/43.22 MARK(s(length(zeros))) -> MARK(length(zeros)) 105.09/43.22 MARK(length(zeros)) -> ACTIVE(length(active(zeros))) 105.09/43.22 ACTIVE(U11(tt, and(y_0, y_1))) -> MARK(s(length(and(y_0, y_1)))) 105.09/43.22 MARK(s(length(and(y_0, y_1)))) -> MARK(length(and(y_0, y_1))) 105.09/43.22 MARK(length(and(x0, x1))) -> ACTIVE(length(active(and(mark(x0), x1)))) 105.09/43.22 MARK(length(cons(y_0, y_1))) -> ACTIVE(length(cons(y_0, y_1))) 105.09/43.22 105.09/43.22 The TRS R consists of the following rules: 105.09/43.22 105.09/43.22 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 105.09/43.22 active(zeros) -> mark(cons(0, zeros)) 105.09/43.22 active(U11(tt, L)) -> mark(s(length(L))) 105.09/43.22 mark(s(X)) -> active(s(mark(X))) 105.09/43.22 active(and(tt, X)) -> mark(X) 105.09/43.22 mark(zeros) -> active(zeros) 105.09/43.22 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 105.09/43.22 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 105.09/43.22 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 105.09/43.22 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 105.09/43.22 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.22 mark(length(X)) -> active(length(mark(X))) 105.09/43.22 mark(isNatList(X)) -> active(isNatList(X)) 105.09/43.22 mark(isNatIList(X)) -> active(isNatIList(X)) 105.09/43.22 mark(0) -> active(0) 105.09/43.22 mark(tt) -> active(tt) 105.09/43.22 active(isNat(s(V1))) -> mark(isNat(V1)) 105.09/43.22 mark(isNat(X)) -> active(isNat(X)) 105.09/43.22 mark(nil) -> active(nil) 105.09/43.22 and(X1, mark(X2)) -> and(X1, X2) 105.09/43.22 and(mark(X1), X2) -> and(X1, X2) 105.09/43.22 and(active(X1), X2) -> and(X1, X2) 105.09/43.22 and(X1, active(X2)) -> and(X1, X2) 105.09/43.22 active(isNat(0)) -> mark(tt) 105.09/43.22 cons(X1, mark(X2)) -> cons(X1, X2) 105.09/43.22 cons(mark(X1), X2) -> cons(X1, X2) 105.09/43.22 cons(active(X1), X2) -> cons(X1, X2) 105.09/43.22 cons(X1, active(X2)) -> cons(X1, X2) 105.09/43.22 s(active(X)) -> s(X) 105.09/43.22 s(mark(X)) -> s(X) 105.09/43.22 U11(X1, mark(X2)) -> U11(X1, X2) 105.09/43.22 U11(mark(X1), X2) -> U11(X1, X2) 105.09/43.22 U11(active(X1), X2) -> U11(X1, X2) 105.09/43.22 U11(X1, active(X2)) -> U11(X1, X2) 105.09/43.22 length(active(X)) -> length(X) 105.09/43.22 length(mark(X)) -> length(X) 105.09/43.22 105.09/43.22 The set Q consists of the following terms: 105.09/43.22 105.09/43.22 active(zeros) 105.09/43.22 active(U11(tt, x0)) 105.09/43.22 active(and(tt, x0)) 105.09/43.22 active(isNat(0)) 105.09/43.22 active(isNat(length(x0))) 105.09/43.22 active(isNat(s(x0))) 105.09/43.22 active(isNatIList(x0)) 105.09/43.22 active(isNatList(nil)) 105.09/43.22 active(isNatList(cons(x0, x1))) 105.09/43.22 active(length(nil)) 105.09/43.22 active(length(cons(x0, x1))) 105.09/43.22 mark(zeros) 105.09/43.22 mark(cons(x0, x1)) 105.09/43.22 mark(0) 105.09/43.22 mark(U11(x0, x1)) 105.09/43.22 mark(tt) 105.09/43.22 mark(s(x0)) 105.09/43.22 mark(length(x0)) 105.09/43.22 mark(and(x0, x1)) 105.09/43.22 mark(isNat(x0)) 105.09/43.22 mark(isNatList(x0)) 105.09/43.22 mark(isNatIList(x0)) 105.09/43.22 mark(nil) 105.09/43.22 cons(mark(x0), x1) 105.09/43.22 cons(x0, mark(x1)) 105.09/43.22 cons(active(x0), x1) 105.09/43.22 cons(x0, active(x1)) 105.09/43.22 U11(mark(x0), x1) 105.09/43.22 U11(x0, mark(x1)) 105.09/43.22 U11(active(x0), x1) 105.09/43.22 U11(x0, active(x1)) 105.09/43.22 s(mark(x0)) 105.09/43.22 s(active(x0)) 105.09/43.22 length(mark(x0)) 105.09/43.22 length(active(x0)) 105.09/43.22 and(mark(x0), x1) 105.09/43.22 and(x0, mark(x1)) 105.09/43.22 and(active(x0), x1) 105.09/43.22 and(x0, active(x1)) 105.09/43.22 isNat(mark(x0)) 105.09/43.22 isNat(active(x0)) 105.09/43.22 isNatList(mark(x0)) 105.09/43.22 isNatList(active(x0)) 105.09/43.22 isNatIList(mark(x0)) 105.09/43.22 isNatIList(active(x0)) 105.09/43.22 105.09/43.22 We have to consider all minimal (P,Q,R)-chains. 105.09/43.22 ---------------------------------------- 105.09/43.22 105.09/43.22 (162) DependencyGraphProof (EQUIVALENT) 105.09/43.22 The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 1 SCC with 3 less nodes. 105.09/43.22 ---------------------------------------- 105.09/43.22 105.09/43.22 (163) 105.09/43.22 Obligation: 105.09/43.22 Q DP problem: 105.09/43.22 The TRS P consists of the following rules: 105.09/43.22 105.09/43.22 MARK(U11(and(isNatList(z1), isNat(z0)), z1)) -> ACTIVE(U11(active(and(mark(isNatList(z1)), isNat(z0))), z1)) 105.09/43.22 ACTIVE(length(cons(N, L))) -> MARK(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.22 ACTIVE(U11(tt, s(y_0))) -> MARK(s(length(s(y_0)))) 105.09/43.22 MARK(s(length(s(y_0)))) -> MARK(length(s(y_0))) 105.09/43.22 MARK(length(s(x0))) -> ACTIVE(length(active(s(mark(x0))))) 105.09/43.22 ACTIVE(U11(tt, zeros)) -> MARK(s(length(zeros))) 105.09/43.22 MARK(s(length(zeros))) -> MARK(length(zeros)) 105.09/43.22 MARK(length(zeros)) -> ACTIVE(length(active(zeros))) 105.09/43.22 ACTIVE(U11(tt, and(y_0, y_1))) -> MARK(s(length(and(y_0, y_1)))) 105.09/43.22 MARK(s(length(and(y_0, y_1)))) -> MARK(length(and(y_0, y_1))) 105.09/43.22 MARK(length(and(x0, x1))) -> ACTIVE(length(active(and(mark(x0), x1)))) 105.09/43.22 105.09/43.22 The TRS R consists of the following rules: 105.09/43.22 105.09/43.22 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 105.09/43.22 active(zeros) -> mark(cons(0, zeros)) 105.09/43.22 active(U11(tt, L)) -> mark(s(length(L))) 105.09/43.22 mark(s(X)) -> active(s(mark(X))) 105.09/43.22 active(and(tt, X)) -> mark(X) 105.09/43.22 mark(zeros) -> active(zeros) 105.09/43.22 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 105.09/43.22 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 105.09/43.22 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 105.09/43.22 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 105.09/43.22 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.22 mark(length(X)) -> active(length(mark(X))) 105.09/43.22 mark(isNatList(X)) -> active(isNatList(X)) 105.09/43.22 mark(isNatIList(X)) -> active(isNatIList(X)) 105.09/43.22 mark(0) -> active(0) 105.09/43.22 mark(tt) -> active(tt) 105.09/43.22 active(isNat(s(V1))) -> mark(isNat(V1)) 105.09/43.22 mark(isNat(X)) -> active(isNat(X)) 105.09/43.22 mark(nil) -> active(nil) 105.09/43.22 and(X1, mark(X2)) -> and(X1, X2) 105.09/43.22 and(mark(X1), X2) -> and(X1, X2) 105.09/43.22 and(active(X1), X2) -> and(X1, X2) 105.09/43.22 and(X1, active(X2)) -> and(X1, X2) 105.09/43.22 active(isNat(0)) -> mark(tt) 105.09/43.22 cons(X1, mark(X2)) -> cons(X1, X2) 105.09/43.22 cons(mark(X1), X2) -> cons(X1, X2) 105.09/43.22 cons(active(X1), X2) -> cons(X1, X2) 105.09/43.22 cons(X1, active(X2)) -> cons(X1, X2) 105.09/43.22 s(active(X)) -> s(X) 105.09/43.22 s(mark(X)) -> s(X) 105.09/43.22 U11(X1, mark(X2)) -> U11(X1, X2) 105.09/43.22 U11(mark(X1), X2) -> U11(X1, X2) 105.09/43.22 U11(active(X1), X2) -> U11(X1, X2) 105.09/43.22 U11(X1, active(X2)) -> U11(X1, X2) 105.09/43.22 length(active(X)) -> length(X) 105.09/43.22 length(mark(X)) -> length(X) 105.09/43.22 105.09/43.22 The set Q consists of the following terms: 105.09/43.22 105.09/43.22 active(zeros) 105.09/43.22 active(U11(tt, x0)) 105.09/43.22 active(and(tt, x0)) 105.09/43.22 active(isNat(0)) 105.09/43.22 active(isNat(length(x0))) 105.09/43.22 active(isNat(s(x0))) 105.09/43.22 active(isNatIList(x0)) 105.09/43.22 active(isNatList(nil)) 105.09/43.22 active(isNatList(cons(x0, x1))) 105.09/43.22 active(length(nil)) 105.09/43.22 active(length(cons(x0, x1))) 105.09/43.22 mark(zeros) 105.09/43.22 mark(cons(x0, x1)) 105.09/43.22 mark(0) 105.09/43.22 mark(U11(x0, x1)) 105.09/43.22 mark(tt) 105.09/43.22 mark(s(x0)) 105.09/43.22 mark(length(x0)) 105.09/43.22 mark(and(x0, x1)) 105.09/43.22 mark(isNat(x0)) 105.09/43.22 mark(isNatList(x0)) 105.09/43.22 mark(isNatIList(x0)) 105.09/43.22 mark(nil) 105.09/43.22 cons(mark(x0), x1) 105.09/43.22 cons(x0, mark(x1)) 105.09/43.22 cons(active(x0), x1) 105.09/43.22 cons(x0, active(x1)) 105.09/43.22 U11(mark(x0), x1) 105.09/43.22 U11(x0, mark(x1)) 105.09/43.22 U11(active(x0), x1) 105.09/43.22 U11(x0, active(x1)) 105.09/43.22 s(mark(x0)) 105.09/43.22 s(active(x0)) 105.09/43.22 length(mark(x0)) 105.09/43.22 length(active(x0)) 105.09/43.22 and(mark(x0), x1) 105.09/43.22 and(x0, mark(x1)) 105.09/43.22 and(active(x0), x1) 105.09/43.22 and(x0, active(x1)) 105.09/43.22 isNat(mark(x0)) 105.09/43.22 isNat(active(x0)) 105.09/43.22 isNatList(mark(x0)) 105.09/43.22 isNatList(active(x0)) 105.09/43.22 isNatIList(mark(x0)) 105.09/43.22 isNatIList(active(x0)) 105.09/43.22 105.09/43.22 We have to consider all minimal (P,Q,R)-chains. 105.09/43.22 ---------------------------------------- 105.09/43.22 105.09/43.22 (164) QDPOrderProof (EQUIVALENT) 105.09/43.22 We use the reduction pair processor [LPAR04,JAR06]. 105.09/43.22 105.09/43.22 105.09/43.22 The following pairs can be oriented strictly and are deleted. 105.09/43.22 105.09/43.22 ACTIVE(U11(tt, and(y_0, y_1))) -> MARK(s(length(and(y_0, y_1)))) 105.09/43.22 The remaining pairs can at least be oriented weakly. 105.09/43.22 Used ordering: Matrix interpretation [MATRO] with arctic natural numbers [ARCTIC]: 105.09/43.22 105.09/43.22 <<< 105.09/43.22 POL(MARK(x_1)) = [[1A]] + [[0A]] * x_1 105.09/43.22 >>> 105.09/43.22 105.09/43.22 <<< 105.09/43.22 POL(U11(x_1, x_2)) = [[-I]] + [[-I]] * x_1 + [[1A]] * x_2 105.09/43.22 >>> 105.09/43.22 105.09/43.22 <<< 105.09/43.22 POL(and(x_1, x_2)) = [[1A]] + [[0A]] * x_1 + [[0A]] * x_2 105.09/43.22 >>> 105.09/43.22 105.09/43.22 <<< 105.09/43.22 POL(isNatList(x_1)) = [[-I]] + [[0A]] * x_1 105.09/43.22 >>> 105.09/43.22 105.09/43.22 <<< 105.09/43.22 POL(isNat(x_1)) = [[-I]] + [[0A]] * x_1 105.09/43.22 >>> 105.09/43.22 105.09/43.22 <<< 105.09/43.22 POL(ACTIVE(x_1)) = [[0A]] + [[0A]] * x_1 105.09/43.22 >>> 105.09/43.22 105.09/43.22 <<< 105.09/43.22 POL(active(x_1)) = [[1A]] + [[0A]] * x_1 105.09/43.22 >>> 105.09/43.22 105.09/43.22 <<< 105.09/43.22 POL(mark(x_1)) = [[1A]] + [[0A]] * x_1 105.09/43.22 >>> 105.09/43.22 105.09/43.22 <<< 105.09/43.22 POL(length(x_1)) = [[0A]] + [[0A]] * x_1 105.09/43.22 >>> 105.09/43.22 105.09/43.22 <<< 105.09/43.22 POL(cons(x_1, x_2)) = [[1A]] + [[0A]] * x_1 + [[1A]] * x_2 105.09/43.22 >>> 105.09/43.22 105.09/43.22 <<< 105.09/43.22 POL(tt) = [[0A]] 105.09/43.22 >>> 105.09/43.22 105.09/43.22 <<< 105.09/43.22 POL(s(x_1)) = [[0A]] + [[0A]] * x_1 105.09/43.22 >>> 105.09/43.22 105.09/43.22 <<< 105.09/43.22 POL(zeros) = [[0A]] 105.09/43.22 >>> 105.09/43.22 105.09/43.22 <<< 105.09/43.22 POL(0) = [[0A]] 105.09/43.22 >>> 105.09/43.22 105.09/43.22 <<< 105.09/43.22 POL(isNatIList(x_1)) = [[0A]] + [[0A]] * x_1 105.09/43.22 >>> 105.09/43.22 105.09/43.22 <<< 105.09/43.22 POL(nil) = [[0A]] 105.09/43.22 >>> 105.09/43.22 105.09/43.22 105.09/43.22 The following usable rules [FROCOS05] with respect to the argument filtering of the ordering [JAR06] were oriented: 105.09/43.22 105.09/43.22 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 105.09/43.22 active(zeros) -> mark(cons(0, zeros)) 105.09/43.22 active(U11(tt, L)) -> mark(s(length(L))) 105.09/43.22 mark(s(X)) -> active(s(mark(X))) 105.09/43.22 active(and(tt, X)) -> mark(X) 105.09/43.22 mark(zeros) -> active(zeros) 105.09/43.22 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 105.09/43.22 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 105.09/43.22 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 105.09/43.22 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 105.09/43.22 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.22 mark(length(X)) -> active(length(mark(X))) 105.09/43.22 mark(isNatList(X)) -> active(isNatList(X)) 105.09/43.22 mark(isNatIList(X)) -> active(isNatIList(X)) 105.09/43.22 and(X1, mark(X2)) -> and(X1, X2) 105.09/43.22 and(mark(X1), X2) -> and(X1, X2) 105.09/43.22 and(active(X1), X2) -> and(X1, X2) 105.09/43.22 and(X1, active(X2)) -> and(X1, X2) 105.09/43.22 active(isNat(0)) -> mark(tt) 105.09/43.22 active(isNat(s(V1))) -> mark(isNat(V1)) 105.09/43.22 mark(isNat(X)) -> active(isNat(X)) 105.09/43.22 U11(X1, mark(X2)) -> U11(X1, X2) 105.09/43.22 U11(mark(X1), X2) -> U11(X1, X2) 105.09/43.22 U11(active(X1), X2) -> U11(X1, X2) 105.09/43.22 U11(X1, active(X2)) -> U11(X1, X2) 105.09/43.22 mark(0) -> active(0) 105.09/43.22 mark(tt) -> active(tt) 105.09/43.22 mark(nil) -> active(nil) 105.09/43.22 s(active(X)) -> s(X) 105.09/43.22 s(mark(X)) -> s(X) 105.09/43.22 length(active(X)) -> length(X) 105.09/43.22 length(mark(X)) -> length(X) 105.09/43.22 cons(X1, mark(X2)) -> cons(X1, X2) 105.09/43.22 cons(mark(X1), X2) -> cons(X1, X2) 105.09/43.22 cons(active(X1), X2) -> cons(X1, X2) 105.09/43.22 cons(X1, active(X2)) -> cons(X1, X2) 105.09/43.22 105.09/43.22 105.09/43.22 ---------------------------------------- 105.09/43.22 105.09/43.22 (165) 105.09/43.22 Obligation: 105.09/43.22 Q DP problem: 105.09/43.22 The TRS P consists of the following rules: 105.09/43.22 105.09/43.22 MARK(U11(and(isNatList(z1), isNat(z0)), z1)) -> ACTIVE(U11(active(and(mark(isNatList(z1)), isNat(z0))), z1)) 105.09/43.22 ACTIVE(length(cons(N, L))) -> MARK(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.22 ACTIVE(U11(tt, s(y_0))) -> MARK(s(length(s(y_0)))) 105.09/43.22 MARK(s(length(s(y_0)))) -> MARK(length(s(y_0))) 105.09/43.22 MARK(length(s(x0))) -> ACTIVE(length(active(s(mark(x0))))) 105.09/43.22 ACTIVE(U11(tt, zeros)) -> MARK(s(length(zeros))) 105.09/43.22 MARK(s(length(zeros))) -> MARK(length(zeros)) 105.09/43.22 MARK(length(zeros)) -> ACTIVE(length(active(zeros))) 105.09/43.22 MARK(s(length(and(y_0, y_1)))) -> MARK(length(and(y_0, y_1))) 105.09/43.22 MARK(length(and(x0, x1))) -> ACTIVE(length(active(and(mark(x0), x1)))) 105.09/43.22 105.09/43.22 The TRS R consists of the following rules: 105.09/43.22 105.09/43.22 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 105.09/43.22 active(zeros) -> mark(cons(0, zeros)) 105.09/43.22 active(U11(tt, L)) -> mark(s(length(L))) 105.09/43.22 mark(s(X)) -> active(s(mark(X))) 105.09/43.22 active(and(tt, X)) -> mark(X) 105.09/43.22 mark(zeros) -> active(zeros) 105.09/43.22 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 105.09/43.22 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 105.09/43.22 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 105.09/43.22 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 105.09/43.22 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.22 mark(length(X)) -> active(length(mark(X))) 105.09/43.22 mark(isNatList(X)) -> active(isNatList(X)) 105.09/43.22 mark(isNatIList(X)) -> active(isNatIList(X)) 105.09/43.22 mark(0) -> active(0) 105.09/43.22 mark(tt) -> active(tt) 105.09/43.22 active(isNat(s(V1))) -> mark(isNat(V1)) 105.09/43.22 mark(isNat(X)) -> active(isNat(X)) 105.09/43.22 mark(nil) -> active(nil) 105.09/43.22 and(X1, mark(X2)) -> and(X1, X2) 105.09/43.22 and(mark(X1), X2) -> and(X1, X2) 105.09/43.22 and(active(X1), X2) -> and(X1, X2) 105.09/43.22 and(X1, active(X2)) -> and(X1, X2) 105.09/43.22 active(isNat(0)) -> mark(tt) 105.09/43.22 cons(X1, mark(X2)) -> cons(X1, X2) 105.09/43.22 cons(mark(X1), X2) -> cons(X1, X2) 105.09/43.22 cons(active(X1), X2) -> cons(X1, X2) 105.09/43.22 cons(X1, active(X2)) -> cons(X1, X2) 105.09/43.22 s(active(X)) -> s(X) 105.09/43.22 s(mark(X)) -> s(X) 105.09/43.22 U11(X1, mark(X2)) -> U11(X1, X2) 105.09/43.22 U11(mark(X1), X2) -> U11(X1, X2) 105.09/43.22 U11(active(X1), X2) -> U11(X1, X2) 105.09/43.22 U11(X1, active(X2)) -> U11(X1, X2) 105.09/43.22 length(active(X)) -> length(X) 105.09/43.22 length(mark(X)) -> length(X) 105.09/43.22 105.09/43.22 The set Q consists of the following terms: 105.09/43.22 105.09/43.22 active(zeros) 105.09/43.22 active(U11(tt, x0)) 105.09/43.22 active(and(tt, x0)) 105.09/43.22 active(isNat(0)) 105.09/43.22 active(isNat(length(x0))) 105.09/43.22 active(isNat(s(x0))) 105.09/43.22 active(isNatIList(x0)) 105.09/43.22 active(isNatList(nil)) 105.09/43.22 active(isNatList(cons(x0, x1))) 105.09/43.22 active(length(nil)) 105.09/43.22 active(length(cons(x0, x1))) 105.09/43.22 mark(zeros) 105.09/43.22 mark(cons(x0, x1)) 105.09/43.22 mark(0) 105.09/43.22 mark(U11(x0, x1)) 105.09/43.22 mark(tt) 105.09/43.22 mark(s(x0)) 105.09/43.22 mark(length(x0)) 105.09/43.22 mark(and(x0, x1)) 105.09/43.22 mark(isNat(x0)) 105.09/43.22 mark(isNatList(x0)) 105.09/43.22 mark(isNatIList(x0)) 105.09/43.22 mark(nil) 105.09/43.22 cons(mark(x0), x1) 105.09/43.22 cons(x0, mark(x1)) 105.09/43.22 cons(active(x0), x1) 105.09/43.22 cons(x0, active(x1)) 105.09/43.22 U11(mark(x0), x1) 105.09/43.22 U11(x0, mark(x1)) 105.09/43.22 U11(active(x0), x1) 105.09/43.22 U11(x0, active(x1)) 105.09/43.22 s(mark(x0)) 105.09/43.22 s(active(x0)) 105.09/43.22 length(mark(x0)) 105.09/43.22 length(active(x0)) 105.09/43.22 and(mark(x0), x1) 105.09/43.22 and(x0, mark(x1)) 105.09/43.22 and(active(x0), x1) 105.09/43.22 and(x0, active(x1)) 105.09/43.22 isNat(mark(x0)) 105.09/43.22 isNat(active(x0)) 105.09/43.22 isNatList(mark(x0)) 105.09/43.22 isNatList(active(x0)) 105.09/43.22 isNatIList(mark(x0)) 105.09/43.22 isNatIList(active(x0)) 105.09/43.22 105.09/43.22 We have to consider all minimal (P,Q,R)-chains. 105.09/43.22 ---------------------------------------- 105.09/43.22 105.09/43.22 (166) DependencyGraphProof (EQUIVALENT) 105.09/43.22 The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 1 SCC with 2 less nodes. 105.09/43.22 ---------------------------------------- 105.09/43.22 105.09/43.22 (167) 105.09/43.22 Obligation: 105.09/43.22 Q DP problem: 105.09/43.22 The TRS P consists of the following rules: 105.09/43.22 105.09/43.22 ACTIVE(length(cons(N, L))) -> MARK(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.22 MARK(U11(and(isNatList(z1), isNat(z0)), z1)) -> ACTIVE(U11(active(and(mark(isNatList(z1)), isNat(z0))), z1)) 105.09/43.22 ACTIVE(U11(tt, s(y_0))) -> MARK(s(length(s(y_0)))) 105.09/43.22 MARK(s(length(s(y_0)))) -> MARK(length(s(y_0))) 105.09/43.22 MARK(length(s(x0))) -> ACTIVE(length(active(s(mark(x0))))) 105.09/43.22 ACTIVE(U11(tt, zeros)) -> MARK(s(length(zeros))) 105.09/43.22 MARK(s(length(zeros))) -> MARK(length(zeros)) 105.09/43.22 MARK(length(zeros)) -> ACTIVE(length(active(zeros))) 105.09/43.22 105.09/43.22 The TRS R consists of the following rules: 105.09/43.22 105.09/43.22 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 105.09/43.22 active(zeros) -> mark(cons(0, zeros)) 105.09/43.22 active(U11(tt, L)) -> mark(s(length(L))) 105.09/43.22 mark(s(X)) -> active(s(mark(X))) 105.09/43.22 active(and(tt, X)) -> mark(X) 105.09/43.22 mark(zeros) -> active(zeros) 105.09/43.22 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 105.09/43.22 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 105.09/43.22 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 105.09/43.22 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 105.09/43.22 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.22 mark(length(X)) -> active(length(mark(X))) 105.09/43.22 mark(isNatList(X)) -> active(isNatList(X)) 105.09/43.22 mark(isNatIList(X)) -> active(isNatIList(X)) 105.09/43.22 mark(0) -> active(0) 105.09/43.22 mark(tt) -> active(tt) 105.09/43.22 active(isNat(s(V1))) -> mark(isNat(V1)) 105.09/43.22 mark(isNat(X)) -> active(isNat(X)) 105.09/43.22 mark(nil) -> active(nil) 105.09/43.22 and(X1, mark(X2)) -> and(X1, X2) 105.09/43.22 and(mark(X1), X2) -> and(X1, X2) 105.09/43.22 and(active(X1), X2) -> and(X1, X2) 105.09/43.22 and(X1, active(X2)) -> and(X1, X2) 105.09/43.22 active(isNat(0)) -> mark(tt) 105.09/43.22 cons(X1, mark(X2)) -> cons(X1, X2) 105.09/43.22 cons(mark(X1), X2) -> cons(X1, X2) 105.09/43.22 cons(active(X1), X2) -> cons(X1, X2) 105.09/43.22 cons(X1, active(X2)) -> cons(X1, X2) 105.09/43.22 s(active(X)) -> s(X) 105.09/43.22 s(mark(X)) -> s(X) 105.09/43.22 U11(X1, mark(X2)) -> U11(X1, X2) 105.09/43.22 U11(mark(X1), X2) -> U11(X1, X2) 105.09/43.22 U11(active(X1), X2) -> U11(X1, X2) 105.09/43.22 U11(X1, active(X2)) -> U11(X1, X2) 105.09/43.22 length(active(X)) -> length(X) 105.09/43.22 length(mark(X)) -> length(X) 105.09/43.22 105.09/43.22 The set Q consists of the following terms: 105.09/43.22 105.09/43.22 active(zeros) 105.09/43.22 active(U11(tt, x0)) 105.09/43.22 active(and(tt, x0)) 105.09/43.22 active(isNat(0)) 105.09/43.22 active(isNat(length(x0))) 105.09/43.22 active(isNat(s(x0))) 105.09/43.22 active(isNatIList(x0)) 105.09/43.22 active(isNatList(nil)) 105.09/43.22 active(isNatList(cons(x0, x1))) 105.09/43.22 active(length(nil)) 105.09/43.22 active(length(cons(x0, x1))) 105.09/43.22 mark(zeros) 105.09/43.22 mark(cons(x0, x1)) 105.09/43.22 mark(0) 105.09/43.22 mark(U11(x0, x1)) 105.09/43.22 mark(tt) 105.09/43.22 mark(s(x0)) 105.09/43.22 mark(length(x0)) 105.09/43.22 mark(and(x0, x1)) 105.09/43.22 mark(isNat(x0)) 105.09/43.22 mark(isNatList(x0)) 105.09/43.22 mark(isNatIList(x0)) 105.09/43.22 mark(nil) 105.09/43.22 cons(mark(x0), x1) 105.09/43.22 cons(x0, mark(x1)) 105.09/43.22 cons(active(x0), x1) 105.09/43.22 cons(x0, active(x1)) 105.09/43.22 U11(mark(x0), x1) 105.09/43.22 U11(x0, mark(x1)) 105.09/43.22 U11(active(x0), x1) 105.09/43.22 U11(x0, active(x1)) 105.09/43.22 s(mark(x0)) 105.09/43.22 s(active(x0)) 105.09/43.22 length(mark(x0)) 105.09/43.22 length(active(x0)) 105.09/43.22 and(mark(x0), x1) 105.09/43.22 and(x0, mark(x1)) 105.09/43.22 and(active(x0), x1) 105.09/43.22 and(x0, active(x1)) 105.09/43.22 isNat(mark(x0)) 105.09/43.22 isNat(active(x0)) 105.09/43.22 isNatList(mark(x0)) 105.09/43.22 isNatList(active(x0)) 105.09/43.22 isNatIList(mark(x0)) 105.09/43.22 isNatIList(active(x0)) 105.09/43.22 105.09/43.22 We have to consider all minimal (P,Q,R)-chains. 105.09/43.22 ---------------------------------------- 105.09/43.22 105.09/43.22 (168) QDPQMonotonicMRRProof (EQUIVALENT) 105.09/43.22 By using the Q-monotonic rule removal processor with the following ordering, at least one Dependency Pair or term rewrite system rule of this QDP problem can be strictly oriented such that it always occurs at a strongly monotonic position in a (P,Q,R)-chain. 105.09/43.22 105.09/43.22 Strictly oriented dependency pairs: 105.09/43.22 105.09/43.22 MARK(length(s(x0))) -> ACTIVE(length(active(s(mark(x0))))) 105.09/43.22 105.09/43.22 105.09/43.22 Used ordering: Polynomial interpretation [POLO]: 105.09/43.22 105.09/43.22 POL(0) = 0 105.09/43.22 POL(ACTIVE(x_1)) = x_1 105.09/43.22 POL(MARK(x_1)) = 2 105.09/43.22 POL(U11(x_1, x_2)) = 2 105.09/43.22 POL(active(x_1)) = x_1 105.09/43.22 POL(and(x_1, x_2)) = x_2 105.09/43.22 POL(cons(x_1, x_2)) = 1 105.09/43.22 POL(isNat(x_1)) = 0 105.09/43.22 POL(isNatIList(x_1)) = 0 105.09/43.22 POL(isNatList(x_1)) = 0 105.09/43.22 POL(length(x_1)) = 2*x_1 105.09/43.22 POL(mark(x_1)) = x_1 105.09/43.22 POL(nil) = 0 105.09/43.22 POL(s(x_1)) = 0 105.09/43.22 POL(tt) = 0 105.09/43.22 POL(zeros) = 1 105.09/43.22 105.09/43.22 105.09/43.22 ---------------------------------------- 105.09/43.22 105.09/43.22 (169) 105.09/43.22 Obligation: 105.09/43.22 Q DP problem: 105.09/43.22 The TRS P consists of the following rules: 105.09/43.22 105.09/43.22 ACTIVE(length(cons(N, L))) -> MARK(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.22 MARK(U11(and(isNatList(z1), isNat(z0)), z1)) -> ACTIVE(U11(active(and(mark(isNatList(z1)), isNat(z0))), z1)) 105.09/43.22 ACTIVE(U11(tt, s(y_0))) -> MARK(s(length(s(y_0)))) 105.09/43.22 MARK(s(length(s(y_0)))) -> MARK(length(s(y_0))) 105.09/43.22 ACTIVE(U11(tt, zeros)) -> MARK(s(length(zeros))) 105.09/43.22 MARK(s(length(zeros))) -> MARK(length(zeros)) 105.09/43.22 MARK(length(zeros)) -> ACTIVE(length(active(zeros))) 105.09/43.22 105.09/43.22 The TRS R consists of the following rules: 105.09/43.22 105.09/43.22 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 105.09/43.22 active(zeros) -> mark(cons(0, zeros)) 105.09/43.22 active(U11(tt, L)) -> mark(s(length(L))) 105.09/43.22 mark(s(X)) -> active(s(mark(X))) 105.09/43.22 active(and(tt, X)) -> mark(X) 105.09/43.22 mark(zeros) -> active(zeros) 105.09/43.22 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 105.09/43.22 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 105.09/43.22 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 105.09/43.22 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 105.09/43.22 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.22 mark(length(X)) -> active(length(mark(X))) 105.09/43.22 mark(isNatList(X)) -> active(isNatList(X)) 105.09/43.22 mark(isNatIList(X)) -> active(isNatIList(X)) 105.09/43.22 mark(0) -> active(0) 105.09/43.22 mark(tt) -> active(tt) 105.09/43.22 active(isNat(s(V1))) -> mark(isNat(V1)) 105.09/43.22 mark(isNat(X)) -> active(isNat(X)) 105.09/43.22 mark(nil) -> active(nil) 105.09/43.22 and(X1, mark(X2)) -> and(X1, X2) 105.09/43.22 and(mark(X1), X2) -> and(X1, X2) 105.09/43.22 and(active(X1), X2) -> and(X1, X2) 105.09/43.22 and(X1, active(X2)) -> and(X1, X2) 105.09/43.22 active(isNat(0)) -> mark(tt) 105.09/43.22 cons(X1, mark(X2)) -> cons(X1, X2) 105.09/43.22 cons(mark(X1), X2) -> cons(X1, X2) 105.09/43.22 cons(active(X1), X2) -> cons(X1, X2) 105.09/43.22 cons(X1, active(X2)) -> cons(X1, X2) 105.09/43.22 s(active(X)) -> s(X) 105.09/43.22 s(mark(X)) -> s(X) 105.09/43.22 U11(X1, mark(X2)) -> U11(X1, X2) 105.09/43.22 U11(mark(X1), X2) -> U11(X1, X2) 105.09/43.22 U11(active(X1), X2) -> U11(X1, X2) 105.09/43.22 U11(X1, active(X2)) -> U11(X1, X2) 105.09/43.22 length(active(X)) -> length(X) 105.09/43.22 length(mark(X)) -> length(X) 105.09/43.22 105.09/43.22 The set Q consists of the following terms: 105.09/43.22 105.09/43.22 active(zeros) 105.09/43.22 active(U11(tt, x0)) 105.09/43.22 active(and(tt, x0)) 105.09/43.22 active(isNat(0)) 105.09/43.22 active(isNat(length(x0))) 105.09/43.22 active(isNat(s(x0))) 105.09/43.22 active(isNatIList(x0)) 105.09/43.22 active(isNatList(nil)) 105.09/43.22 active(isNatList(cons(x0, x1))) 105.09/43.22 active(length(nil)) 105.09/43.22 active(length(cons(x0, x1))) 105.09/43.22 mark(zeros) 105.09/43.22 mark(cons(x0, x1)) 105.09/43.22 mark(0) 105.09/43.22 mark(U11(x0, x1)) 105.09/43.22 mark(tt) 105.09/43.22 mark(s(x0)) 105.09/43.22 mark(length(x0)) 105.09/43.22 mark(and(x0, x1)) 105.09/43.22 mark(isNat(x0)) 105.09/43.22 mark(isNatList(x0)) 105.09/43.22 mark(isNatIList(x0)) 105.09/43.22 mark(nil) 105.09/43.22 cons(mark(x0), x1) 105.09/43.22 cons(x0, mark(x1)) 105.09/43.22 cons(active(x0), x1) 105.09/43.22 cons(x0, active(x1)) 105.09/43.22 U11(mark(x0), x1) 105.09/43.22 U11(x0, mark(x1)) 105.09/43.22 U11(active(x0), x1) 105.09/43.22 U11(x0, active(x1)) 105.09/43.22 s(mark(x0)) 105.09/43.22 s(active(x0)) 105.09/43.22 length(mark(x0)) 105.09/43.22 length(active(x0)) 105.09/43.22 and(mark(x0), x1) 105.09/43.22 and(x0, mark(x1)) 105.09/43.22 and(active(x0), x1) 105.09/43.22 and(x0, active(x1)) 105.09/43.22 isNat(mark(x0)) 105.09/43.22 isNat(active(x0)) 105.09/43.22 isNatList(mark(x0)) 105.09/43.22 isNatList(active(x0)) 105.09/43.22 isNatIList(mark(x0)) 105.09/43.22 isNatIList(active(x0)) 105.09/43.22 105.09/43.22 We have to consider all minimal (P,Q,R)-chains. 105.09/43.22 ---------------------------------------- 105.09/43.22 105.09/43.22 (170) DependencyGraphProof (EQUIVALENT) 105.09/43.22 The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 1 SCC with 2 less nodes. 105.09/43.22 ---------------------------------------- 105.09/43.22 105.09/43.22 (171) 105.09/43.22 Obligation: 105.09/43.22 Q DP problem: 105.09/43.22 The TRS P consists of the following rules: 105.09/43.22 105.09/43.22 MARK(U11(and(isNatList(z1), isNat(z0)), z1)) -> ACTIVE(U11(active(and(mark(isNatList(z1)), isNat(z0))), z1)) 105.09/43.22 ACTIVE(length(cons(N, L))) -> MARK(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.22 ACTIVE(U11(tt, zeros)) -> MARK(s(length(zeros))) 105.09/43.22 MARK(s(length(zeros))) -> MARK(length(zeros)) 105.09/43.22 MARK(length(zeros)) -> ACTIVE(length(active(zeros))) 105.09/43.22 105.09/43.22 The TRS R consists of the following rules: 105.09/43.22 105.09/43.22 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 105.09/43.22 active(zeros) -> mark(cons(0, zeros)) 105.09/43.22 active(U11(tt, L)) -> mark(s(length(L))) 105.09/43.22 mark(s(X)) -> active(s(mark(X))) 105.09/43.22 active(and(tt, X)) -> mark(X) 105.09/43.22 mark(zeros) -> active(zeros) 105.09/43.22 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 105.09/43.22 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 105.09/43.22 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 105.09/43.22 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 105.09/43.22 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.22 mark(length(X)) -> active(length(mark(X))) 105.09/43.22 mark(isNatList(X)) -> active(isNatList(X)) 105.09/43.22 mark(isNatIList(X)) -> active(isNatIList(X)) 105.09/43.22 mark(0) -> active(0) 105.09/43.22 mark(tt) -> active(tt) 105.09/43.22 active(isNat(s(V1))) -> mark(isNat(V1)) 105.09/43.22 mark(isNat(X)) -> active(isNat(X)) 105.09/43.22 mark(nil) -> active(nil) 105.09/43.22 and(X1, mark(X2)) -> and(X1, X2) 105.09/43.22 and(mark(X1), X2) -> and(X1, X2) 105.09/43.22 and(active(X1), X2) -> and(X1, X2) 105.09/43.22 and(X1, active(X2)) -> and(X1, X2) 105.09/43.22 active(isNat(0)) -> mark(tt) 105.09/43.22 cons(X1, mark(X2)) -> cons(X1, X2) 105.09/43.22 cons(mark(X1), X2) -> cons(X1, X2) 105.09/43.22 cons(active(X1), X2) -> cons(X1, X2) 105.09/43.22 cons(X1, active(X2)) -> cons(X1, X2) 105.09/43.22 s(active(X)) -> s(X) 105.09/43.22 s(mark(X)) -> s(X) 105.09/43.22 U11(X1, mark(X2)) -> U11(X1, X2) 105.09/43.22 U11(mark(X1), X2) -> U11(X1, X2) 105.09/43.22 U11(active(X1), X2) -> U11(X1, X2) 105.09/43.22 U11(X1, active(X2)) -> U11(X1, X2) 105.09/43.22 length(active(X)) -> length(X) 105.09/43.22 length(mark(X)) -> length(X) 105.09/43.22 105.09/43.22 The set Q consists of the following terms: 105.09/43.22 105.09/43.22 active(zeros) 105.09/43.22 active(U11(tt, x0)) 105.09/43.22 active(and(tt, x0)) 105.09/43.22 active(isNat(0)) 105.09/43.22 active(isNat(length(x0))) 105.09/43.22 active(isNat(s(x0))) 105.09/43.22 active(isNatIList(x0)) 105.09/43.22 active(isNatList(nil)) 105.09/43.22 active(isNatList(cons(x0, x1))) 105.09/43.22 active(length(nil)) 105.09/43.22 active(length(cons(x0, x1))) 105.09/43.22 mark(zeros) 105.09/43.22 mark(cons(x0, x1)) 105.09/43.22 mark(0) 105.09/43.22 mark(U11(x0, x1)) 105.09/43.22 mark(tt) 105.09/43.22 mark(s(x0)) 105.09/43.22 mark(length(x0)) 105.09/43.22 mark(and(x0, x1)) 105.09/43.22 mark(isNat(x0)) 105.09/43.22 mark(isNatList(x0)) 105.09/43.22 mark(isNatIList(x0)) 105.09/43.22 mark(nil) 105.09/43.22 cons(mark(x0), x1) 105.09/43.22 cons(x0, mark(x1)) 105.09/43.22 cons(active(x0), x1) 105.09/43.22 cons(x0, active(x1)) 105.09/43.22 U11(mark(x0), x1) 105.09/43.22 U11(x0, mark(x1)) 105.09/43.22 U11(active(x0), x1) 105.09/43.22 U11(x0, active(x1)) 105.09/43.22 s(mark(x0)) 105.09/43.22 s(active(x0)) 105.09/43.22 length(mark(x0)) 105.09/43.22 length(active(x0)) 105.09/43.22 and(mark(x0), x1) 105.09/43.22 and(x0, mark(x1)) 105.09/43.22 and(active(x0), x1) 105.09/43.22 and(x0, active(x1)) 105.09/43.22 isNat(mark(x0)) 105.09/43.22 isNat(active(x0)) 105.09/43.22 isNatList(mark(x0)) 105.09/43.22 isNatList(active(x0)) 105.09/43.22 isNatIList(mark(x0)) 105.09/43.22 isNatIList(active(x0)) 105.09/43.22 105.09/43.22 We have to consider all minimal (P,Q,R)-chains. 105.09/43.22 ---------------------------------------- 105.09/43.22 105.09/43.22 (172) NonMonReductionPairProof (EQUIVALENT) 105.09/43.22 Using the following max-polynomial ordering, we can orient the general usable rules and all rules from P weakly and some rules from P strictly: 105.09/43.22 105.09/43.22 Polynomial interpretation with max [POLO,NEGPOLO,MAXPOLO]: 105.09/43.22 105.09/43.22 POL(0) = 0 105.09/43.22 POL(ACTIVE(x_1)) = x_1 105.09/43.22 POL(MARK(x_1)) = 0 105.09/43.22 POL(U11(x_1, x_2)) = max(0, 1 - x_1) 105.09/43.22 POL(active(x_1)) = x_1 105.09/43.22 POL(and(x_1, x_2)) = max(0, x_1 + x_2) 105.09/43.22 POL(cons(x_1, x_2)) = max(0, -x_1 - x_2) 105.09/43.22 POL(isNat(x_1)) = 0 105.09/43.22 POL(isNatIList(x_1)) = 0 105.09/43.22 POL(isNatList(x_1)) = 1 105.09/43.22 POL(length(x_1)) = 0 105.09/43.22 POL(mark(x_1)) = x_1 105.09/43.22 POL(nil) = 0 105.09/43.22 POL(s(x_1)) = 1 105.09/43.22 POL(tt) = 0 105.09/43.22 POL(zeros) = 0 105.09/43.22 105.09/43.22 105.09/43.22 The following pairs can be oriented strictly and are deleted. 105.09/43.22 105.09/43.22 ACTIVE(U11(tt, zeros)) -> MARK(s(length(zeros))) 105.09/43.22 The remaining pairs can at least be oriented weakly. 105.09/43.22 105.09/43.22 MARK(U11(and(isNatList(z1), isNat(z0)), z1)) -> ACTIVE(U11(active(and(mark(isNatList(z1)), isNat(z0))), z1)) 105.09/43.22 ACTIVE(length(cons(N, L))) -> MARK(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.22 MARK(s(length(zeros))) -> MARK(length(zeros)) 105.09/43.22 MARK(length(zeros)) -> ACTIVE(length(active(zeros))) 105.09/43.22 The following rules are usable: 105.09/43.22 mark(cons(X1, X2)) <-> active(cons(mark(X1), X2)) 105.09/43.22 mark(s(X)) <-> active(s(mark(X))) 105.09/43.22 mark(zeros) <-> active(zeros) 105.09/43.22 mark(U11(X1, X2)) <-> active(U11(mark(X1), X2)) 105.09/43.22 mark(and(X1, X2)) <-> active(and(mark(X1), X2)) 105.09/43.22 mark(length(X)) <-> active(length(mark(X))) 105.09/43.22 mark(isNatList(X)) <-> active(isNatList(X)) 105.09/43.22 mark(isNatIList(X)) <-> active(isNatIList(X)) 105.09/43.22 mark(0) <-> active(0) 105.09/43.22 mark(tt) <-> active(tt) 105.09/43.22 mark(isNat(X)) <-> active(isNat(X)) 105.09/43.22 mark(nil) <-> active(nil) 105.09/43.22 active(zeros) <-> mark(cons(0, zeros)) 105.09/43.22 active(U11(tt, L)) <-> mark(s(length(L))) 105.09/43.22 active(and(tt, X)) <-> mark(X) 105.09/43.22 active(isNatIList(cons(V1, V2))) <-> mark(and(isNat(V1), isNatIList(V2))) 105.09/43.22 active(isNatList(cons(V1, V2))) <-> mark(and(isNat(V1), isNatList(V2))) 105.09/43.22 active(length(cons(N, L))) <-> mark(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.22 active(isNat(s(V1))) <-> mark(isNat(V1)) 105.09/43.22 active(isNat(0)) <-> mark(tt) 105.09/43.22 and(X1, mark(X2)) <-> and(X1, X2) 105.09/43.22 and(mark(X1), X2) <-> and(X1, X2) 105.09/43.22 and(active(X1), X2) <-> and(X1, X2) 105.09/43.22 and(X1, active(X2)) <-> and(X1, X2) 105.09/43.22 cons(X1, mark(X2)) <-> cons(X1, X2) 105.09/43.22 cons(mark(X1), X2) <-> cons(X1, X2) 105.09/43.22 cons(active(X1), X2) <-> cons(X1, X2) 105.09/43.22 cons(X1, active(X2)) <-> cons(X1, X2) 105.09/43.22 s(active(X)) <-> s(X) 105.09/43.22 s(mark(X)) <-> s(X) 105.09/43.22 U11(X1, mark(X2)) <-> U11(X1, X2) 105.09/43.22 U11(mark(X1), X2) <-> U11(X1, X2) 105.09/43.22 U11(active(X1), X2) <-> U11(X1, X2) 105.09/43.22 U11(X1, active(X2)) <-> U11(X1, X2) 105.09/43.22 length(active(X)) <-> length(X) 105.09/43.22 length(mark(X)) <-> length(X) 105.09/43.22 105.09/43.22 ---------------------------------------- 105.09/43.22 105.09/43.22 (173) 105.09/43.22 Obligation: 105.09/43.22 Q DP problem: 105.09/43.22 The TRS P consists of the following rules: 105.09/43.22 105.09/43.22 MARK(U11(and(isNatList(z1), isNat(z0)), z1)) -> ACTIVE(U11(active(and(mark(isNatList(z1)), isNat(z0))), z1)) 105.09/43.22 ACTIVE(length(cons(N, L))) -> MARK(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.22 MARK(s(length(zeros))) -> MARK(length(zeros)) 105.09/43.22 MARK(length(zeros)) -> ACTIVE(length(active(zeros))) 105.09/43.22 105.09/43.22 The TRS R consists of the following rules: 105.09/43.22 105.09/43.22 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 105.09/43.22 active(zeros) -> mark(cons(0, zeros)) 105.09/43.22 active(U11(tt, L)) -> mark(s(length(L))) 105.09/43.22 mark(s(X)) -> active(s(mark(X))) 105.09/43.22 active(and(tt, X)) -> mark(X) 105.09/43.22 mark(zeros) -> active(zeros) 105.09/43.22 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 105.09/43.22 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 105.09/43.22 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 105.09/43.22 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 105.09/43.22 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.22 mark(length(X)) -> active(length(mark(X))) 105.09/43.22 mark(isNatList(X)) -> active(isNatList(X)) 105.09/43.22 mark(isNatIList(X)) -> active(isNatIList(X)) 105.09/43.22 mark(0) -> active(0) 105.09/43.22 mark(tt) -> active(tt) 105.09/43.22 active(isNat(s(V1))) -> mark(isNat(V1)) 105.09/43.22 mark(isNat(X)) -> active(isNat(X)) 105.09/43.22 mark(nil) -> active(nil) 105.09/43.22 and(X1, mark(X2)) -> and(X1, X2) 105.09/43.22 and(mark(X1), X2) -> and(X1, X2) 105.09/43.22 and(active(X1), X2) -> and(X1, X2) 105.09/43.22 and(X1, active(X2)) -> and(X1, X2) 105.09/43.22 active(isNat(0)) -> mark(tt) 105.09/43.22 cons(X1, mark(X2)) -> cons(X1, X2) 105.09/43.22 cons(mark(X1), X2) -> cons(X1, X2) 105.09/43.22 cons(active(X1), X2) -> cons(X1, X2) 105.09/43.22 cons(X1, active(X2)) -> cons(X1, X2) 105.09/43.22 s(active(X)) -> s(X) 105.09/43.22 s(mark(X)) -> s(X) 105.09/43.22 U11(X1, mark(X2)) -> U11(X1, X2) 105.09/43.22 U11(mark(X1), X2) -> U11(X1, X2) 105.09/43.22 U11(active(X1), X2) -> U11(X1, X2) 105.09/43.22 U11(X1, active(X2)) -> U11(X1, X2) 105.09/43.22 length(active(X)) -> length(X) 105.09/43.22 length(mark(X)) -> length(X) 105.09/43.22 105.09/43.22 The set Q consists of the following terms: 105.09/43.22 105.09/43.22 active(zeros) 105.09/43.22 active(U11(tt, x0)) 105.09/43.22 active(and(tt, x0)) 105.09/43.22 active(isNat(0)) 105.09/43.22 active(isNat(length(x0))) 105.09/43.22 active(isNat(s(x0))) 105.09/43.22 active(isNatIList(x0)) 105.09/43.22 active(isNatList(nil)) 105.09/43.22 active(isNatList(cons(x0, x1))) 105.09/43.22 active(length(nil)) 105.09/43.22 active(length(cons(x0, x1))) 105.09/43.22 mark(zeros) 105.09/43.22 mark(cons(x0, x1)) 105.09/43.22 mark(0) 105.09/43.22 mark(U11(x0, x1)) 105.09/43.22 mark(tt) 105.09/43.22 mark(s(x0)) 105.09/43.22 mark(length(x0)) 105.09/43.22 mark(and(x0, x1)) 105.09/43.22 mark(isNat(x0)) 105.09/43.22 mark(isNatList(x0)) 105.09/43.22 mark(isNatIList(x0)) 105.09/43.22 mark(nil) 105.09/43.22 cons(mark(x0), x1) 105.09/43.22 cons(x0, mark(x1)) 105.09/43.22 cons(active(x0), x1) 105.09/43.22 cons(x0, active(x1)) 105.09/43.22 U11(mark(x0), x1) 105.09/43.22 U11(x0, mark(x1)) 105.09/43.22 U11(active(x0), x1) 105.09/43.22 U11(x0, active(x1)) 105.09/43.22 s(mark(x0)) 105.09/43.22 s(active(x0)) 105.09/43.22 length(mark(x0)) 105.09/43.22 length(active(x0)) 105.09/43.22 and(mark(x0), x1) 105.09/43.22 and(x0, mark(x1)) 105.09/43.22 and(active(x0), x1) 105.09/43.22 and(x0, active(x1)) 105.09/43.22 isNat(mark(x0)) 105.09/43.22 isNat(active(x0)) 105.09/43.22 isNatList(mark(x0)) 105.09/43.22 isNatList(active(x0)) 105.09/43.22 isNatIList(mark(x0)) 105.09/43.22 isNatIList(active(x0)) 105.09/43.22 105.09/43.22 We have to consider all minimal (P,Q,R)-chains. 105.09/43.22 ---------------------------------------- 105.09/43.22 105.09/43.22 (174) DependencyGraphProof (EQUIVALENT) 105.09/43.22 The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 1 SCC with 2 less nodes. 105.09/43.22 ---------------------------------------- 105.09/43.22 105.09/43.22 (175) 105.09/43.22 Obligation: 105.09/43.22 Q DP problem: 105.09/43.22 The TRS P consists of the following rules: 105.09/43.22 105.09/43.22 ACTIVE(length(cons(N, L))) -> MARK(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.22 MARK(U11(and(isNatList(z1), isNat(z0)), z1)) -> ACTIVE(U11(active(and(mark(isNatList(z1)), isNat(z0))), z1)) 105.09/43.22 105.09/43.22 The TRS R consists of the following rules: 105.09/43.22 105.09/43.22 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 105.09/43.22 active(zeros) -> mark(cons(0, zeros)) 105.09/43.22 active(U11(tt, L)) -> mark(s(length(L))) 105.09/43.22 mark(s(X)) -> active(s(mark(X))) 105.09/43.22 active(and(tt, X)) -> mark(X) 105.09/43.22 mark(zeros) -> active(zeros) 105.09/43.22 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 105.09/43.22 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 105.09/43.22 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 105.09/43.22 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 105.09/43.22 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.22 mark(length(X)) -> active(length(mark(X))) 105.09/43.22 mark(isNatList(X)) -> active(isNatList(X)) 105.09/43.22 mark(isNatIList(X)) -> active(isNatIList(X)) 105.09/43.22 mark(0) -> active(0) 105.09/43.22 mark(tt) -> active(tt) 105.09/43.22 active(isNat(s(V1))) -> mark(isNat(V1)) 105.09/43.22 mark(isNat(X)) -> active(isNat(X)) 105.09/43.22 mark(nil) -> active(nil) 105.09/43.22 and(X1, mark(X2)) -> and(X1, X2) 105.09/43.22 and(mark(X1), X2) -> and(X1, X2) 105.09/43.22 and(active(X1), X2) -> and(X1, X2) 105.09/43.22 and(X1, active(X2)) -> and(X1, X2) 105.09/43.22 active(isNat(0)) -> mark(tt) 105.09/43.22 cons(X1, mark(X2)) -> cons(X1, X2) 105.09/43.22 cons(mark(X1), X2) -> cons(X1, X2) 105.09/43.22 cons(active(X1), X2) -> cons(X1, X2) 105.09/43.22 cons(X1, active(X2)) -> cons(X1, X2) 105.09/43.22 s(active(X)) -> s(X) 105.09/43.22 s(mark(X)) -> s(X) 105.09/43.22 U11(X1, mark(X2)) -> U11(X1, X2) 105.09/43.22 U11(mark(X1), X2) -> U11(X1, X2) 105.09/43.22 U11(active(X1), X2) -> U11(X1, X2) 105.09/43.22 U11(X1, active(X2)) -> U11(X1, X2) 105.09/43.22 length(active(X)) -> length(X) 105.09/43.22 length(mark(X)) -> length(X) 105.09/43.22 105.09/43.22 The set Q consists of the following terms: 105.09/43.22 105.09/43.22 active(zeros) 105.09/43.22 active(U11(tt, x0)) 105.09/43.22 active(and(tt, x0)) 105.09/43.22 active(isNat(0)) 105.09/43.22 active(isNat(length(x0))) 105.09/43.22 active(isNat(s(x0))) 105.09/43.22 active(isNatIList(x0)) 105.09/43.22 active(isNatList(nil)) 105.09/43.22 active(isNatList(cons(x0, x1))) 105.09/43.22 active(length(nil)) 105.09/43.22 active(length(cons(x0, x1))) 105.09/43.22 mark(zeros) 105.09/43.22 mark(cons(x0, x1)) 105.09/43.22 mark(0) 105.09/43.22 mark(U11(x0, x1)) 105.09/43.22 mark(tt) 105.09/43.22 mark(s(x0)) 105.09/43.22 mark(length(x0)) 105.09/43.22 mark(and(x0, x1)) 105.09/43.22 mark(isNat(x0)) 105.09/43.22 mark(isNatList(x0)) 105.09/43.22 mark(isNatIList(x0)) 105.09/43.22 mark(nil) 105.09/43.22 cons(mark(x0), x1) 105.09/43.22 cons(x0, mark(x1)) 105.09/43.22 cons(active(x0), x1) 105.09/43.22 cons(x0, active(x1)) 105.09/43.22 U11(mark(x0), x1) 105.09/43.22 U11(x0, mark(x1)) 105.09/43.22 U11(active(x0), x1) 105.09/43.22 U11(x0, active(x1)) 105.09/43.22 s(mark(x0)) 105.09/43.22 s(active(x0)) 105.09/43.22 length(mark(x0)) 105.09/43.22 length(active(x0)) 105.09/43.22 and(mark(x0), x1) 105.09/43.22 and(x0, mark(x1)) 105.09/43.22 and(active(x0), x1) 105.09/43.22 and(x0, active(x1)) 105.09/43.22 isNat(mark(x0)) 105.09/43.22 isNat(active(x0)) 105.09/43.22 isNatList(mark(x0)) 105.09/43.22 isNatList(active(x0)) 105.09/43.22 isNatIList(mark(x0)) 105.09/43.22 isNatIList(active(x0)) 105.09/43.22 105.09/43.22 We have to consider all minimal (P,Q,R)-chains. 105.09/43.22 ---------------------------------------- 105.09/43.22 105.09/43.22 (176) QDPOrderProof (EQUIVALENT) 105.09/43.22 We use the reduction pair processor [LPAR04,JAR06]. 105.09/43.22 105.09/43.22 105.09/43.22 The following pairs can be oriented strictly and are deleted. 105.09/43.22 105.09/43.22 ACTIVE(length(cons(N, L))) -> MARK(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.22 MARK(U11(and(isNatList(z1), isNat(z0)), z1)) -> ACTIVE(U11(active(and(mark(isNatList(z1)), isNat(z0))), z1)) 105.09/43.22 The remaining pairs can at least be oriented weakly. 105.09/43.22 Used ordering: Combined order from the following AFS and order. 105.09/43.22 ACTIVE(x1) = x1 105.09/43.22 105.09/43.22 length(x1) = length 105.09/43.22 105.09/43.22 MARK(x1) = MARK 105.09/43.22 105.09/43.22 U11(x1, x2) = U11 105.09/43.22 105.09/43.22 105.09/43.22 Knuth-Bendix order [KBO] with precedence:length > MARK > U11 105.09/43.22 105.09/43.22 and weight map: 105.09/43.22 105.09/43.22 length=1 105.09/43.22 MARK=1 105.09/43.22 U11=1 105.09/43.22 105.09/43.22 The following usable rules [FROCOS05] with respect to the argument filtering of the ordering [JAR06] were oriented: 105.09/43.22 105.09/43.22 U11(X1, mark(X2)) -> U11(X1, X2) 105.09/43.22 U11(mark(X1), X2) -> U11(X1, X2) 105.09/43.22 U11(active(X1), X2) -> U11(X1, X2) 105.09/43.22 U11(X1, active(X2)) -> U11(X1, X2) 105.09/43.22 105.09/43.22 105.09/43.22 ---------------------------------------- 105.09/43.22 105.09/43.22 (177) 105.09/43.22 Obligation: 105.09/43.22 Q DP problem: 105.09/43.22 P is empty. 105.09/43.22 The TRS R consists of the following rules: 105.09/43.22 105.09/43.22 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 105.09/43.22 active(zeros) -> mark(cons(0, zeros)) 105.09/43.22 active(U11(tt, L)) -> mark(s(length(L))) 105.09/43.22 mark(s(X)) -> active(s(mark(X))) 105.09/43.22 active(and(tt, X)) -> mark(X) 105.09/43.22 mark(zeros) -> active(zeros) 105.09/43.22 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 105.09/43.22 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 105.09/43.22 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 105.09/43.22 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 105.09/43.22 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.22 mark(length(X)) -> active(length(mark(X))) 105.09/43.22 mark(isNatList(X)) -> active(isNatList(X)) 105.09/43.22 mark(isNatIList(X)) -> active(isNatIList(X)) 105.09/43.22 mark(0) -> active(0) 105.09/43.22 mark(tt) -> active(tt) 105.09/43.22 active(isNat(s(V1))) -> mark(isNat(V1)) 105.09/43.22 mark(isNat(X)) -> active(isNat(X)) 105.09/43.22 mark(nil) -> active(nil) 105.09/43.22 and(X1, mark(X2)) -> and(X1, X2) 105.09/43.22 and(mark(X1), X2) -> and(X1, X2) 105.09/43.22 and(active(X1), X2) -> and(X1, X2) 105.09/43.22 and(X1, active(X2)) -> and(X1, X2) 105.09/43.23 active(isNat(0)) -> mark(tt) 105.09/43.23 cons(X1, mark(X2)) -> cons(X1, X2) 105.09/43.23 cons(mark(X1), X2) -> cons(X1, X2) 105.09/43.23 cons(active(X1), X2) -> cons(X1, X2) 105.09/43.23 cons(X1, active(X2)) -> cons(X1, X2) 105.09/43.23 s(active(X)) -> s(X) 105.09/43.23 s(mark(X)) -> s(X) 105.09/43.23 U11(X1, mark(X2)) -> U11(X1, X2) 105.09/43.23 U11(mark(X1), X2) -> U11(X1, X2) 105.09/43.23 U11(active(X1), X2) -> U11(X1, X2) 105.09/43.23 U11(X1, active(X2)) -> U11(X1, X2) 105.09/43.23 length(active(X)) -> length(X) 105.09/43.23 length(mark(X)) -> length(X) 105.09/43.23 105.09/43.23 The set Q consists of the following terms: 105.09/43.23 105.09/43.23 active(zeros) 105.09/43.23 active(U11(tt, x0)) 105.09/43.23 active(and(tt, x0)) 105.09/43.23 active(isNat(0)) 105.09/43.23 active(isNat(length(x0))) 105.09/43.23 active(isNat(s(x0))) 105.09/43.23 active(isNatIList(x0)) 105.09/43.23 active(isNatList(nil)) 105.09/43.23 active(isNatList(cons(x0, x1))) 105.09/43.23 active(length(nil)) 105.09/43.23 active(length(cons(x0, x1))) 105.09/43.23 mark(zeros) 105.09/43.23 mark(cons(x0, x1)) 105.09/43.23 mark(0) 105.09/43.23 mark(U11(x0, x1)) 105.09/43.23 mark(tt) 105.09/43.23 mark(s(x0)) 105.09/43.23 mark(length(x0)) 105.09/43.23 mark(and(x0, x1)) 105.09/43.23 mark(isNat(x0)) 105.09/43.23 mark(isNatList(x0)) 105.09/43.23 mark(isNatIList(x0)) 105.09/43.23 mark(nil) 105.09/43.23 cons(mark(x0), x1) 105.09/43.23 cons(x0, mark(x1)) 105.09/43.23 cons(active(x0), x1) 105.09/43.23 cons(x0, active(x1)) 105.09/43.23 U11(mark(x0), x1) 105.09/43.23 U11(x0, mark(x1)) 105.09/43.23 U11(active(x0), x1) 105.09/43.23 U11(x0, active(x1)) 105.09/43.23 s(mark(x0)) 105.09/43.23 s(active(x0)) 105.09/43.23 length(mark(x0)) 105.09/43.23 length(active(x0)) 105.09/43.23 and(mark(x0), x1) 105.09/43.23 and(x0, mark(x1)) 105.09/43.23 and(active(x0), x1) 105.09/43.23 and(x0, active(x1)) 105.09/43.23 isNat(mark(x0)) 105.09/43.23 isNat(active(x0)) 105.09/43.23 isNatList(mark(x0)) 105.09/43.23 isNatList(active(x0)) 105.09/43.23 isNatIList(mark(x0)) 105.09/43.23 isNatIList(active(x0)) 105.09/43.23 105.09/43.23 We have to consider all minimal (P,Q,R)-chains. 105.09/43.23 ---------------------------------------- 105.09/43.23 105.09/43.23 (178) PisEmptyProof (EQUIVALENT) 105.09/43.23 The TRS P is empty. Hence, there is no (P,Q,R) chain. 105.09/43.23 ---------------------------------------- 105.09/43.23 105.09/43.23 (179) 105.09/43.23 YES 105.09/43.23 105.09/43.23 ---------------------------------------- 105.09/43.23 105.09/43.23 (180) 105.09/43.23 Obligation: 105.09/43.23 Q DP problem: 105.09/43.23 The TRS P consists of the following rules: 105.09/43.23 105.09/43.23 MARK(s(s(y_0))) -> MARK(s(y_0)) 105.09/43.23 105.09/43.23 The TRS R consists of the following rules: 105.09/43.23 105.09/43.23 mark(cons(X1, X2)) -> active(cons(mark(X1), X2)) 105.09/43.23 active(zeros) -> mark(cons(0, zeros)) 105.09/43.23 active(U11(tt, L)) -> mark(s(length(L))) 105.09/43.23 mark(s(X)) -> active(s(mark(X))) 105.09/43.23 active(and(tt, X)) -> mark(X) 105.09/43.23 mark(zeros) -> active(zeros) 105.09/43.23 mark(U11(X1, X2)) -> active(U11(mark(X1), X2)) 105.09/43.23 active(isNatIList(cons(V1, V2))) -> mark(and(isNat(V1), isNatIList(V2))) 105.09/43.23 mark(and(X1, X2)) -> active(and(mark(X1), X2)) 105.09/43.23 active(isNatList(cons(V1, V2))) -> mark(and(isNat(V1), isNatList(V2))) 105.09/43.23 active(length(cons(N, L))) -> mark(U11(and(isNatList(L), isNat(N)), L)) 105.09/43.23 mark(length(X)) -> active(length(mark(X))) 105.09/43.23 mark(isNatList(X)) -> active(isNatList(X)) 105.09/43.23 mark(isNatIList(X)) -> active(isNatIList(X)) 105.09/43.23 mark(0) -> active(0) 105.09/43.23 mark(tt) -> active(tt) 105.09/43.23 active(isNat(s(V1))) -> mark(isNat(V1)) 105.09/43.23 mark(isNat(X)) -> active(isNat(X)) 105.09/43.23 mark(nil) -> active(nil) 105.09/43.23 and(X1, mark(X2)) -> and(X1, X2) 105.09/43.23 and(mark(X1), X2) -> and(X1, X2) 105.09/43.23 and(active(X1), X2) -> and(X1, X2) 105.09/43.23 and(X1, active(X2)) -> and(X1, X2) 105.09/43.23 active(isNat(0)) -> mark(tt) 105.09/43.23 cons(X1, mark(X2)) -> cons(X1, X2) 105.09/43.23 cons(mark(X1), X2) -> cons(X1, X2) 105.09/43.23 cons(active(X1), X2) -> cons(X1, X2) 105.09/43.23 cons(X1, active(X2)) -> cons(X1, X2) 105.09/43.23 s(active(X)) -> s(X) 105.09/43.23 s(mark(X)) -> s(X) 105.09/43.23 U11(X1, mark(X2)) -> U11(X1, X2) 105.09/43.23 U11(mark(X1), X2) -> U11(X1, X2) 105.09/43.23 U11(active(X1), X2) -> U11(X1, X2) 105.09/43.23 U11(X1, active(X2)) -> U11(X1, X2) 105.09/43.23 length(active(X)) -> length(X) 105.09/43.23 length(mark(X)) -> length(X) 105.09/43.23 105.09/43.23 The set Q consists of the following terms: 105.09/43.23 105.09/43.23 active(zeros) 105.09/43.23 active(U11(tt, x0)) 105.09/43.23 active(and(tt, x0)) 105.09/43.23 active(isNat(0)) 105.09/43.23 active(isNat(length(x0))) 105.09/43.23 active(isNat(s(x0))) 105.09/43.23 active(isNatIList(x0)) 105.09/43.23 active(isNatList(nil)) 105.09/43.23 active(isNatList(cons(x0, x1))) 105.09/43.23 active(length(nil)) 105.09/43.23 active(length(cons(x0, x1))) 105.09/43.23 mark(zeros) 105.09/43.23 mark(cons(x0, x1)) 105.09/43.23 mark(0) 105.09/43.23 mark(U11(x0, x1)) 105.09/43.23 mark(tt) 105.09/43.23 mark(s(x0)) 105.09/43.23 mark(length(x0)) 105.09/43.23 mark(and(x0, x1)) 105.09/43.23 mark(isNat(x0)) 105.09/43.23 mark(isNatList(x0)) 105.09/43.23 mark(isNatIList(x0)) 105.09/43.23 mark(nil) 105.09/43.23 cons(mark(x0), x1) 105.09/43.23 cons(x0, mark(x1)) 105.09/43.23 cons(active(x0), x1) 105.09/43.23 cons(x0, active(x1)) 105.09/43.23 U11(mark(x0), x1) 105.09/43.23 U11(x0, mark(x1)) 105.09/43.23 U11(active(x0), x1) 105.09/43.23 U11(x0, active(x1)) 105.09/43.23 s(mark(x0)) 105.09/43.23 s(active(x0)) 105.09/43.23 length(mark(x0)) 105.09/43.23 length(active(x0)) 105.09/43.23 and(mark(x0), x1) 105.09/43.23 and(x0, mark(x1)) 105.09/43.23 and(active(x0), x1) 105.09/43.23 and(x0, active(x1)) 105.09/43.23 isNat(mark(x0)) 105.09/43.23 isNat(active(x0)) 105.09/43.23 isNatList(mark(x0)) 105.09/43.23 isNatList(active(x0)) 105.09/43.23 isNatIList(mark(x0)) 105.09/43.23 isNatIList(active(x0)) 105.09/43.23 105.09/43.23 We have to consider all minimal (P,Q,R)-chains. 105.09/43.23 ---------------------------------------- 105.09/43.23 105.09/43.23 (181) UsableRulesProof (EQUIVALENT) 105.09/43.23 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.09/43.23 ---------------------------------------- 105.09/43.23 105.09/43.23 (182) 105.09/43.23 Obligation: 105.09/43.23 Q DP problem: 105.09/43.23 The TRS P consists of the following rules: 105.09/43.23 105.09/43.23 MARK(s(s(y_0))) -> MARK(s(y_0)) 105.09/43.23 105.09/43.23 R is empty. 105.09/43.23 The set Q consists of the following terms: 105.09/43.23 105.09/43.23 active(zeros) 105.09/43.23 active(U11(tt, x0)) 105.09/43.23 active(and(tt, x0)) 105.09/43.23 active(isNat(0)) 105.09/43.23 active(isNat(length(x0))) 105.09/43.23 active(isNat(s(x0))) 105.09/43.23 active(isNatIList(x0)) 105.09/43.23 active(isNatList(nil)) 105.09/43.23 active(isNatList(cons(x0, x1))) 105.09/43.23 active(length(nil)) 105.09/43.23 active(length(cons(x0, x1))) 105.09/43.23 mark(zeros) 105.09/43.23 mark(cons(x0, x1)) 105.09/43.23 mark(0) 105.09/43.23 mark(U11(x0, x1)) 105.09/43.23 mark(tt) 105.09/43.23 mark(s(x0)) 105.09/43.23 mark(length(x0)) 105.09/43.23 mark(and(x0, x1)) 105.09/43.23 mark(isNat(x0)) 105.09/43.23 mark(isNatList(x0)) 105.09/43.23 mark(isNatIList(x0)) 105.09/43.23 mark(nil) 105.09/43.23 cons(mark(x0), x1) 105.09/43.23 cons(x0, mark(x1)) 105.09/43.23 cons(active(x0), x1) 105.09/43.23 cons(x0, active(x1)) 105.09/43.23 U11(mark(x0), x1) 105.09/43.23 U11(x0, mark(x1)) 105.09/43.23 U11(active(x0), x1) 105.09/43.23 U11(x0, active(x1)) 105.09/43.23 s(mark(x0)) 105.09/43.23 s(active(x0)) 105.09/43.23 length(mark(x0)) 105.09/43.23 length(active(x0)) 105.09/43.23 and(mark(x0), x1) 105.09/43.23 and(x0, mark(x1)) 105.09/43.23 and(active(x0), x1) 105.09/43.23 and(x0, active(x1)) 105.09/43.23 isNat(mark(x0)) 105.09/43.23 isNat(active(x0)) 105.09/43.23 isNatList(mark(x0)) 105.09/43.23 isNatList(active(x0)) 105.09/43.23 isNatIList(mark(x0)) 105.09/43.23 isNatIList(active(x0)) 105.09/43.23 105.09/43.23 We have to consider all minimal (P,Q,R)-chains. 105.09/43.23 ---------------------------------------- 105.09/43.23 105.09/43.23 (183) QReductionProof (EQUIVALENT) 105.09/43.23 We deleted the following terms from Q as each root-symbol of these terms does neither occur in P nor in R.[THIEMANN]. 105.09/43.23 105.09/43.23 active(zeros) 105.09/43.23 active(U11(tt, x0)) 105.09/43.23 active(and(tt, x0)) 105.09/43.23 active(isNat(0)) 105.09/43.23 active(isNat(length(x0))) 105.09/43.23 active(isNat(s(x0))) 105.09/43.23 active(isNatIList(x0)) 105.09/43.23 active(isNatList(nil)) 105.09/43.23 active(isNatList(cons(x0, x1))) 105.09/43.23 active(length(nil)) 105.09/43.23 active(length(cons(x0, x1))) 105.09/43.23 mark(zeros) 105.09/43.23 mark(cons(x0, x1)) 105.09/43.23 mark(0) 105.09/43.23 mark(U11(x0, x1)) 105.09/43.23 mark(tt) 105.09/43.23 mark(s(x0)) 105.09/43.23 mark(length(x0)) 105.09/43.23 mark(and(x0, x1)) 105.09/43.23 mark(isNat(x0)) 105.09/43.23 mark(isNatList(x0)) 105.09/43.23 mark(isNatIList(x0)) 105.09/43.23 mark(nil) 105.09/43.23 cons(mark(x0), x1) 105.09/43.23 cons(x0, mark(x1)) 105.09/43.23 cons(active(x0), x1) 105.09/43.23 cons(x0, active(x1)) 105.09/43.23 U11(mark(x0), x1) 105.09/43.23 U11(x0, mark(x1)) 105.09/43.23 U11(active(x0), x1) 105.09/43.23 U11(x0, active(x1)) 105.09/43.23 length(mark(x0)) 105.09/43.23 length(active(x0)) 105.09/43.23 and(mark(x0), x1) 105.09/43.23 and(x0, mark(x1)) 105.09/43.23 and(active(x0), x1) 105.09/43.23 and(x0, active(x1)) 105.09/43.23 isNat(mark(x0)) 105.09/43.23 isNat(active(x0)) 105.09/43.23 isNatList(mark(x0)) 105.09/43.23 isNatList(active(x0)) 105.09/43.23 isNatIList(mark(x0)) 105.09/43.23 isNatIList(active(x0)) 105.09/43.23 105.09/43.23 105.09/43.23 ---------------------------------------- 105.09/43.23 105.09/43.23 (184) 105.09/43.23 Obligation: 105.09/43.23 Q DP problem: 105.09/43.23 The TRS P consists of the following rules: 105.09/43.23 105.09/43.23 MARK(s(s(y_0))) -> MARK(s(y_0)) 105.09/43.23 105.09/43.23 R is empty. 105.09/43.23 The set Q consists of the following terms: 105.09/43.23 105.09/43.23 s(mark(x0)) 105.09/43.23 s(active(x0)) 105.09/43.23 105.09/43.23 We have to consider all minimal (P,Q,R)-chains. 105.09/43.23 ---------------------------------------- 105.09/43.23 105.09/43.23 (185) QDPSizeChangeProof (EQUIVALENT) 105.09/43.23 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. 105.09/43.23 105.09/43.23 From the DPs we obtained the following set of size-change graphs: 105.09/43.23 *MARK(s(s(y_0))) -> MARK(s(y_0)) 105.09/43.23 The graph contains the following edges 1 > 1 105.09/43.23 105.09/43.23 105.09/43.23 ---------------------------------------- 105.09/43.23 105.09/43.23 (186) 105.09/43.23 YES 105.29/43.35 EOF